<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>66406</bug_id>
          
          <creation_ts>2011-08-17 13:46:55 -0700</creation_ts>
          <short_desc>New XML parser: scripting support</short_desc>
          <delta_ts>2011-08-18 18:09:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>64396</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Vicki Pfau">jeffrey+webkit</reporter>
          <assigned_to name="Vicki Pfau">jeffrey+webkit</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>sam</cc>
    
    <cc>simonjam</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>452528</commentid>
    <comment_count>0</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-08-17 13:46:55 -0700</bug_when>
    <thetext>New XML parser: scripting support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452529</commentid>
    <comment_count>1</comment_count>
      <attachid>104229</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-08-17 13:48:14 -0700</bug_when>
    <thetext>Created attachment 104229
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452554</commentid>
    <comment_count>2</comment_count>
      <attachid>104229</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-17 14:08:12 -0700</bug_when>
    <thetext>Comment on attachment 104229
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=104229&amp;action=review

&gt; Source/WebCore/ChangeLog:25
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        * xml/parser/NewXMLDocumentParser.cpp:
&gt; +        (WebCore::NewXMLDocumentParser::NewXMLDocumentParser):
&gt; +        (WebCore::NewXMLDocumentParser::resumeParsing):
&gt; +        (WebCore::NewXMLDocumentParser::processScript):
&gt; +        (WebCore::NewXMLDocumentParser::textPosition):
&gt; +        (WebCore::NewXMLDocumentParser::lineNumber):
&gt; +        (WebCore::NewXMLDocumentParser::append):
&gt; +        (WebCore::NewXMLDocumentParser::finish):
&gt; +        (WebCore::NewXMLDocumentParser::finishWasCalled):
&gt; +        (WebCore::NewXMLDocumentParser::notifyFinished):
&gt; +        * xml/parser/NewXMLDocumentParser.h:
&gt; +        (WebCore::NewXMLDocumentParser::pauseParsing):
&gt; +        (WebCore::NewXMLDocumentParser::setScriptStartPosition):
&gt; +        * xml/parser/XMLTreeBuilder.cpp:
&gt; +        (WebCore::XMLTreeBuilder::closeElement):
&gt; +        (WebCore::XMLTreeBuilder::processStartTag):
&gt; +        (WebCore::XMLTreeBuilder::processEndTag):
&gt; +        * xml/parser/XMLTreeBuilder.h:

Please include more details in your change log about the functions that are changing.

&gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:226
&gt; +        scriptElement-&gt;executeScript(sourceCode);

Can executeScript cause scriptElement to be deallocated?  Should scriptElement be in a RefPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452555</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-17 14:08:39 -0700</bug_when>
    <thetext>Does this enable any interesting tests to run?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452569</commentid>
    <comment_count>4</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-08-17 14:17:25 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 104229 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104229&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:226
&gt; &gt; +        scriptElement-&gt;executeScript(sourceCode);
&gt; 
&gt; Can executeScript cause scriptElement to be deallocated?  Should scriptElement be in a RefPtr?

scriptElement is not refcounted. It is extracted from the Element object (in either XMLTreeBuilder::StartTag or EndTag), which is in a RefPtr already.

(In reply to comment #3)
&gt; Does this enable any interesting tests to run?

A lot! But I don&apos;t have any super-specific examples.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452571</commentid>
    <comment_count>5</comment_count>
      <attachid>104229</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-17 14:23:16 -0700</bug_when>
    <thetext>Comment on attachment 104229
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=104229&amp;action=review

&gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:45
&gt; +    , m_pendingScript(0)
&gt; +    , m_scriptElement(0)

No need to explicitly initialize a CachedResourceHandle or RefPtr. They get set to 0 by their default constructor.

&gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:59
&gt; +    , m_pendingScript(0)
&gt; +    , m_scriptElement(0)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452686</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-17 16:17:48 -0700</bug_when>
    <thetext>+ some folks who might like to review this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452702</commentid>
    <comment_count>7</comment_count>
      <attachid>104229</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-17 16:25:49 -0700</bug_when>
    <thetext>Comment on attachment 104229
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=104229&amp;action=review

&gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:105
&gt; +    if (scriptElement-&gt;prepareScript(m_scriptStartPosition, ScriptElement::AllowLegacyTypeInTypeAttribute)) {
&gt; +        if (scriptElement-&gt;readyToBeParserExecuted())
&gt; +            scriptElement-&gt;executeScript(ScriptSourceCode(scriptElement-&gt;scriptContent(), document()-&gt;url(), m_scriptStartPosition));
&gt; +        else if (scriptElement-&gt;willBeParserExecuted()) {
&gt; +            m_pendingScript = scriptElement-&gt;cachedScript();
&gt; +            m_scriptElement = scriptElement-&gt;element();
&gt; +            m_pendingScript-&gt;addClient(this);
&gt; +
&gt; +            // m_pendingScript will be 0 if script was already loaded and addClient() executed it.
&gt; +            if (m_pendingScript)
&gt; +                pauseParsing();
&gt; +        } else
&gt; +            m_scriptElement = 0;
&gt; +    }

Is this code copy/pasted from the HTML parser?  Can the code be shared instead?

&gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:119
&gt; -    return 0;
&gt; +    return m_tokenizer-&gt;lineNumber() + 1;

The TextPosition types are supposed to save us from this kind of +1 madness.  There should be some way for the C++ type system to do this work for you.

&gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:131
&gt; +    // Do some bookkeeping to make sure that re-appending doesn&apos;t mess up the cursor

What is re-appending?  Why would we append the same string more than once?

&gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:169
&gt; +    if (m_parserPaused)
&gt; +        return;

Why can&apos;t you tell the parser to finish while it&apos;s paused?

&gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:185
&gt; -    return m_finishWasCalled;
&gt; +    return m_parserPaused || m_finishWasCalled;

This is clearly wrong.  This function is just an accessor for m_finishWasCalled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452740</commentid>
    <comment_count>8</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-08-17 16:58:30 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 104229 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104229&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:105
&gt; &gt; +    if (scriptElement-&gt;prepareScript(m_scriptStartPosition, ScriptElement::AllowLegacyTypeInTypeAttribute)) {
&gt; &gt; +        if (scriptElement-&gt;readyToBeParserExecuted())
&gt; &gt; +            scriptElement-&gt;executeScript(ScriptSourceCode(scriptElement-&gt;scriptContent(), document()-&gt;url(), m_scriptStartPosition));
&gt; &gt; +        else if (scriptElement-&gt;willBeParserExecuted()) {
&gt; &gt; +            m_pendingScript = scriptElement-&gt;cachedScript();
&gt; &gt; +            m_scriptElement = scriptElement-&gt;element();
&gt; &gt; +            m_pendingScript-&gt;addClient(this);
&gt; &gt; +
&gt; &gt; +            // m_pendingScript will be 0 if script was already loaded and addClient() executed it.
&gt; &gt; +            if (m_pendingScript)
&gt; &gt; +                pauseParsing();
&gt; &gt; +        } else
&gt; &gt; +            m_scriptElement = 0;
&gt; &gt; +    }
&gt; 
&gt; Is this code copy/pasted from the HTML parser?  Can the code be shared instead?

It&apos;s copy-pasted from the other XML parsers, with a little modification. For what it&apos;s worth, the code is already copy-pasted between the Qt and the libxml2 ones, so it might make sense to refactor it all out somewhere. Not sure exactly where, though.

&gt; 
&gt; &gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:119
&gt; &gt; -    return 0;
&gt; &gt; +    return m_tokenizer-&gt;lineNumber() + 1;
&gt; 
&gt; The TextPosition types are supposed to save us from this kind of +1 madness.  There should be some way for the C++ type system to do this work for you.
&gt; 

This function returns int in the superclass, and the tokenizer returns int too, just with a different base (apparently). It&apos;s also only line number, while TextPosition keeps track of column too.

&gt; &gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:131
&gt; &gt; +    // Do some bookkeeping to make sure that re-appending doesn&apos;t mess up the cursor
&gt; 
&gt; What is re-appending?  Why would we append the same string more than once?
&gt; 

Parsing a script can cause it to pause parsing and re-enter append() with the same SegmentedString (except with it being advanced in the process, so the line numbers change).

&gt; &gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:169
&gt; &gt; +    if (m_parserPaused)
&gt; &gt; +        return;
&gt; 
&gt; Why can&apos;t you tell the parser to finish while it&apos;s paused?

Because the parser isn&apos;t finished. If we tell it it&apos;s finished, it will just stop when we&apos;re done with that token. This function gets called when we drop out of the tokenizer, which we need to do when we&apos;re processing a remote script (otherwise said script never gets to load). If we do tell it to finish, it will never re-enter the tokenizer after it&apos;s done with that script.

&gt; &gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:185
&gt; &gt; -    return m_finishWasCalled;
&gt; &gt; +    return m_parserPaused || m_finishWasCalled;
&gt; 
&gt; This is clearly wrong.  This function is just an accessor for m_finishWasCalled.

This doesn&apos;t appear to be called anywhere, anyway. Not sure why I changed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452748</commentid>
    <comment_count>9</comment_count>
      <attachid>104229</attachid>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-08-17 17:13:16 -0700</bug_when>
    <thetext>Comment on attachment 104229
Patch

The ScriptElement handling looks good to me. It&apos;s very similar to the existing XML parsers.

View in context: https://bugs.webkit.org/attachment.cgi?id=104229&amp;action=review

&gt;&gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:169
&gt;&gt; +        return;
&gt; 
&gt; Why can&apos;t you tell the parser to finish while it&apos;s paused?

The script may document.write() into it. Or is that sort of thing not allowed with XHTML?

&gt; Source/WebCore/xml/parser/XMLTreeBuilder.h:34
&gt; +#include &lt;wtf/text/TextPosition.h&gt;

This doesn&apos;t appear to be needed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452766</commentid>
    <comment_count>10</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-08-17 17:44:59 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 104229 [details])
&gt; The ScriptElement handling looks good to me. It&apos;s very similar to the existing XML parsers.
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104229&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:169
&gt; &gt;&gt; +        return;
&gt; &gt; 
&gt; &gt; Why can&apos;t you tell the parser to finish while it&apos;s paused?
&gt; 
&gt; The script may document.write() into it. Or is that sort of thing not allowed with XHTML?

XML/XHTML doesn&apos;t support document.write()

&gt; 
&gt; &gt; Source/WebCore/xml/parser/XMLTreeBuilder.h:34
&gt; &gt; +#include &lt;wtf/text/TextPosition.h&gt;
&gt; 
&gt; This doesn&apos;t appear to be needed here.

You appear to be correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453485</commentid>
    <comment_count>11</comment_count>
      <attachid>104422</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-08-18 16:32:46 -0700</bug_when>
    <thetext>Created attachment 104422
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453496</commentid>
    <comment_count>12</comment_count>
      <attachid>104422</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-18 16:56:47 -0700</bug_when>
    <thetext>Comment on attachment 104422
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=104422&amp;action=review

&gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:145
&gt; +    if (m_parserPaused)
&gt; +        return;

I don&apos;t understand this part.  Why does finish() get an early exit when the parser is paused?  In the HTML parser, don&apos;t we queue the finish operation and enact it when the parser unpauses?

&gt; Source/WebCore/xml/parser/XMLTreeBuilder.cpp:157
&gt; +    if (scriptElement)
&gt; +        m_parser-&gt;processScript(scriptElement);
&gt; +
&gt; +    popCurrentNode();

Is there a re-entrancy problem here?  In the HTML parser, we return from the tree builder before executing the script to avoid these re-entrancy problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453497</commentid>
    <comment_count>13</comment_count>
      <attachid>104422</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-18 16:58:11 -0700</bug_when>
    <thetext>Comment on attachment 104422
Patch

My sense is that this patch isn&apos;t quite perfect, but given that your internship is ending tomorrow, we should probably land this patch and iterate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453501</commentid>
    <comment_count>14</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-08-18 17:06:53 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 104422 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104422&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/xml/parser/NewXMLDocumentParser.cpp:145
&gt; &gt; +    if (m_parserPaused)
&gt; &gt; +        return;
&gt; 
&gt; I don&apos;t understand this part.  Why does finish() get an early exit when the parser is paused?  In the HTML parser, don&apos;t we queue the finish operation and enact it when the parser unpauses?

From what I can tell, finish is called when the parser drops out of the tokenizer loop, regardless of our state. I can take a closer look, but it might make more sense for someone to do that later...

&gt; 
&gt; &gt; Source/WebCore/xml/parser/XMLTreeBuilder.cpp:157
&gt; &gt; +    if (scriptElement)
&gt; &gt; +        m_parser-&gt;processScript(scriptElement);
&gt; &gt; +
&gt; &gt; +    popCurrentNode();
&gt; 
&gt; Is there a re-entrancy problem here?  In the HTML parser, we return from the tree builder before executing the script to avoid these re-entrancy problems.

The script doesn&apos;t get run until we drop out of the tree builder--this just queues it up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453504</commentid>
    <comment_count>15</comment_count>
      <attachid>104422</attachid>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-08-18 17:13:18 -0700</bug_when>
    <thetext>Comment on attachment 104422
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=104422&amp;action=review

&gt;&gt;&gt; Source/WebCore/xml/parser/XMLTreeBuilder.cpp:157
&gt;&gt;&gt; +    popCurrentNode();
&gt;&gt; 
&gt;&gt; Is there a re-entrancy problem here?  In the HTML parser, we return from the tree builder before executing the script to avoid these re-entrancy problems.
&gt; 
&gt; The script doesn&apos;t get run until we drop out of the tree builder--this just queues it up.

It can execute immediately in processScript() if it&apos;s an inline script or it&apos;s an external script that&apos;s already cached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453511</commentid>
    <comment_count>16</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-08-18 17:20:39 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 104422 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104422&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/xml/parser/XMLTreeBuilder.cpp:157
&gt; &gt;&gt;&gt; +    popCurrentNode();
&gt; &gt;&gt; 
&gt; &gt;&gt; Is there a re-entrancy problem here?  In the HTML parser, we return from the tree builder before executing the script to avoid these re-entrancy problems.
&gt; &gt; 
&gt; &gt; The script doesn&apos;t get run until we drop out of the tree builder--this just queues it up.
&gt; 
&gt; It can execute immediately in processScript() if it&apos;s an inline script or it&apos;s an external script that&apos;s already cached.

You&apos;re correct, I forgot about that. Nothing I ran seemed to indicate reentrancy problems, but it&apos;s possible that I wasn&apos;t thorough enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453514</commentid>
    <comment_count>17</comment_count>
      <attachid>104422</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-08-18 17:29:46 -0700</bug_when>
    <thetext>Comment on attachment 104422
Patch

I&apos;m going to land this now given it&apos;s not in live code and I&apos;ve got some patches that interact with this patch; if necessary, I suppose it can be ripped out or replaced later, but I don&apos;t have time to do that myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453528</commentid>
    <comment_count>18</comment_count>
      <attachid>104422</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-18 18:09:47 -0700</bug_when>
    <thetext>Comment on attachment 104422
Patch

Clearing flags on attachment: 104422

Committed r93380: &lt;http://trac.webkit.org/changeset/93380&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453529</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-18 18:09:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104229</attachid>
            <date>2011-08-17 13:48:14 -0700</date>
            <delta_ts>2011-08-18 16:32:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66406-20110817134813.patch</filename>
            <type>text/plain</type>
            <size>13554</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMyMjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5OGMwOGFmNTNlNTg0YzBm
YTU0M2M3MDhjYWI4NDU3OThhZDljZTZlLi4zMDljNjQzY2E2MDQxZTk5NTgxZGE0YzE1YWIxZmUy
ZWRiYjE4ZDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMDgtMTcgIEplZmZy
ZXkgUGZhdSAgPGpwZmF1QGFwcGxlLmNvbT4KKworICAgICAgICBOZXcgWE1MIHBhcnNlcjogc2Ny
aXB0aW5nIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY2NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB4bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5ld1hNTERvY3VtZW50UGFyc2VyOjpOZXdYTUxEb2N1bWVudFBhcnNlcik6CisgICAg
ICAgIChXZWJDb3JlOjpOZXdYTUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXdYTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc1NjcmlwdCk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXdYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5ld1hNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5ld1hNTERvY3VtZW50UGFyc2VyOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6TmV3WE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpOZXdY
TUxEb2N1bWVudFBhcnNlcjo6ZmluaXNoV2FzQ2FsbGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5l
d1hNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogeG1sL3BhcnNl
ci9OZXdYTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6TmV3WE1MRG9jdW1l
bnRQYXJzZXI6OnBhdXNlUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpOZXdYTUxEb2N1bWVu
dFBhcnNlcjo6c2V0U2NyaXB0U3RhcnRQb3NpdGlvbik6CisgICAgICAgICogeG1sL3BhcnNlci9Y
TUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUcmVlQnVpbGRlcjo6Y2xv
c2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3Rh
cnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcp
OgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuaDoKKwogMjAxMS0wOC0xNyAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBbiBhcnJvdyBrZXkg
Y29sbGFwc2VzIGRpcmVjdGlvbmxlc3Mgc2VsZWN0aW9uIHJhbmdlIGluIHRoZSB3cm9uZyBkaXJl
Y3Rpb24gaW4gQmlEaQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9OZXdY
TUxEb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERv
Y3VtZW50UGFyc2VyLmNwcAppbmRleCA1Njc5MGViYjFhYTdjNmY1ZmFiYjgyMzE5OWU0MWI5MTNi
ODIzZDdmLi5hZjEyYzA2N2UzZWJhYTk2ZDc4MzY4NWVjNGZkNzhjYzRjMDc5MzIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmNwcApA
QCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgIk5ld1hNTERvY3VtZW50UGFyc2VyLmgiCiAKICNp
bmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgor
I2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcu
aCIKICNpbmNsdWRlICJYTUxUcmVlQnVpbGRlci5oIgogCkBAIC0zNSw3ICszNywxMyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBOZXdYTUxEb2N1bWVudFBhcnNlcjo6TmV3WE1MRG9jdW1lbnRQYXJz
ZXIoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGRv
Y3VtZW50KQogICAgICwgbV90b2tlbml6ZXIoWE1MVG9rZW5pemVyOjpjcmVhdGUoKSkKKyAgICAs
IG1fcGFyc2VyUGF1c2VkKGZhbHNlKQogICAgICwgbV9maW5pc2hXYXNDYWxsZWQoZmFsc2UpCisg
ICAgLCBtX2xpbmVOdW1iZXIoMCkKKyAgICAsIG1fY29sdW1uTnVtYmVyKDApCisgICAgLCBtX3Bl
bmRpbmdTY3JpcHQoMCkKKyAgICAsIG1fc2NyaXB0RWxlbWVudCgwKQorICAgICwgbV9zY3JpcHRT
dGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwg
bV90cmVlQnVpbGRlcihYTUxUcmVlQnVpbGRlcjo6Y3JlYXRlKHRoaXMsIGRvY3VtZW50KSkKIHsK
IH0KQEAgLTQzLDcgKzUxLDEzIEBAIE5ld1hNTERvY3VtZW50UGFyc2VyOjpOZXdYTUxEb2N1bWVu
dFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQpCiBOZXdYTUxEb2N1bWVudFBhcnNlcjo6TmV3WE1M
RG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVu
dCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKQogICAgIDogU2NyaXB0YWJsZURvY3VtZW50
UGFyc2VyKGZyYWdtZW50LT5kb2N1bWVudCgpKQogICAgICwgbV90b2tlbml6ZXIoWE1MVG9rZW5p
emVyOjpjcmVhdGUoKSkKKyAgICAsIG1fcGFyc2VyUGF1c2VkKGZhbHNlKQogICAgICwgbV9maW5p
c2hXYXNDYWxsZWQoZmFsc2UpCisgICAgLCBtX2xpbmVOdW1iZXIoMCkKKyAgICAsIG1fY29sdW1u
TnVtYmVyKDApCisgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKKyAgICAsIG1fc2NyaXB0RWxlbWVu
dCgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFu
Z2VQb3NpdGlvbigpKQogICAgICwgbV90cmVlQnVpbGRlcihYTUxUcmVlQnVpbGRlcjo6Y3JlYXRl
KHRoaXMsIGZyYWdtZW50LCBwYXJlbnQpKQogewogfQpAQCAtNjcsMTUgKzgxLDQyIEBAIE5ld1hN
TERvY3VtZW50UGFyc2VyOjp+TmV3WE1MRG9jdW1lbnRQYXJzZXIoKQogewogfQogCit2b2lkIE5l
d1hNTERvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nKCkKK3sKKyAgICBtX3BhcnNlclBhdXNl
ZCA9IGZhbHNlOworICAgIGFwcGVuZChtX2lucHV0KTsKK30KKwordm9pZCBOZXdYTUxEb2N1bWVu
dFBhcnNlcjo6cHJvY2Vzc1NjcmlwdChTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50KQorewor
ICAgIGlmIChzY3JpcHRFbGVtZW50LT5wcmVwYXJlU2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlv
biwgU2NyaXB0RWxlbWVudDo6QWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKSkgeworICAg
ICAgICBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkKKyAgICAg
ICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3Jp
cHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0
YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFy
c2VyRXhlY3V0ZWQoKSkgeworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxl
bWVudC0+Y2FjaGVkU2NyaXB0KCk7CisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBzY3Jp
cHRFbGVtZW50LT5lbGVtZW50KCk7CisgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPmFkZENs
aWVudCh0aGlzKTsKKworICAgICAgICAgICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUgMCBp
ZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkIGFuZCBhZGRDbGllbnQoKSBleGVjdXRlZCBpdC4K
KyAgICAgICAgICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCisgICAgICAgICAgICAgICAgcGF1c2VQ
YXJzaW5nKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0g
MDsKKyAgICB9Cit9CisKIFRleHRQb3NpdGlvbjAgTmV3WE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQ
b3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlvbjAoV1RGOjpaZXJvQmFz
ZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
V1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoMCkpOworICAgIGludCBsaW5l
ID0gbV9saW5lTnVtYmVyICsgbV9pbnB1dC5jdXJyZW50TGluZSgpLnplcm9CYXNlZEludCgpOwor
ICAgIGludCBjb2x1bW4gPSAobV9pbnB1dC5jdXJyZW50TGluZSgpLnplcm9CYXNlZEludCgpID8g
MCA6IG1fY29sdW1uTnVtYmVyKSArIG1faW5wdXQuY3VycmVudENvbHVtbigpLnplcm9CYXNlZElu
dCgpOworICAgIEFTU0VSVChtX3Rva2VuaXplci0+bGluZU51bWJlcigpID09IGxpbmUpOworCisg
ICAgcmV0dXJuIFRleHRQb3NpdGlvbjAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFz
ZWRJbnQobGluZSksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbHVt
bikpOwogfQogCiBpbnQgTmV3WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAog
ewotICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3Rva2VuaXplci0+bGluZU51bWJlcigpICsg
MTsKIH0KIAogdm9pZCBOZXdYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KGNvbnN0IFNlZ21lbnRl
ZFN0cmluZyYpCkBAIC04NSw5ICsxMjYsMTcgQEAgdm9pZCBOZXdYTUxEb2N1bWVudFBhcnNlcjo6
aW5zZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpCiAKIHZvaWQgTmV3WE1MRG9jdW1lbnRQYXJz
ZXI6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHN0cmluZykKIHsKLSAgICBTZWdtZW50
ZWRTdHJpbmcgaW5wdXQgPSBzdHJpbmc7Ci0gICAgd2hpbGUgKCFpbnB1dC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgaWYgKCFtX3Rva2VuaXplci0+bmV4dFRva2VuKGlucHV0LCBtX3Rva2VuKSkKKyAg
ICBtX2lucHV0ID0gc3RyaW5nOworCisgICAgLy8gRG8gc29tZSBib29ra2VlcGluZyB0byBtYWtl
IHN1cmUgdGhhdCByZS1hcHBlbmRpbmcgZG9lc24ndCBtZXNzIHVwIHRoZSBjdXJzb3IKKyAgICBp
ZiAobV9pbnB1dC5jdXJyZW50TGluZSgpLnplcm9CYXNlZEludCgpKQorICAgICAgICBtX2NvbHVt
bk51bWJlciA9IDA7CisKKyAgICBtX2xpbmVOdW1iZXIgLT0gbV9pbnB1dC5jdXJyZW50TGluZSgp
Lnplcm9CYXNlZEludCgpOworICAgIG1fY29sdW1uTnVtYmVyIC09IG1faW5wdXQuY3VycmVudENv
bHVtbigpLnplcm9CYXNlZEludCgpOworCisgICAgd2hpbGUgKCFtX2lucHV0LmlzRW1wdHkoKSAm
JiBpc1BhcnNpbmcoKSAmJiAhbV9wYXJzZXJQYXVzZWQpIHsKKyAgICAgICAgaWYgKCFtX3Rva2Vu
aXplci0+bmV4dFRva2VuKG1faW5wdXQsIG1fdG9rZW4pKQogICAgICAgICAgICAgY29udGludWU7
CiAKICNpZm5kZWYgTkRFQlVHCkBAIC05NywxOSArMTQ2LDI5IEBAIHZvaWQgTmV3WE1MRG9jdW1l
bnRQYXJzZXI6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHN0cmluZykKICAgICAgICAg
QXRvbWljWE1MVG9rZW4gdG9rZW4obV90b2tlbik7CiAgICAgICAgIG1fdHJlZUJ1aWxkZXItPnBy
b2Nlc3NUb2tlbih0b2tlbik7CiAKLSAgICAgICAgaWYgKG1fdG9rZW4udHlwZSgpID09IFhNTFRv
a2VuVHlwZXM6OkVuZE9mRmlsZSB8fCAhaXNQYXJzaW5nKCkpCisgICAgICAgIGlmIChtX3Rva2Vu
LnR5cGUoKSA9PSBYTUxUb2tlblR5cGVzOjpFbmRPZkZpbGUpCiAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBtX3Rva2VuLmNsZWFyKCk7CiAgICAgICAgIEFTU0VSVChtX3Rva2VuLmlzVW5p
bml0aWFsaXplZCgpKTsKICAgICB9CisKKyAgICAvLyBEbyBzb21lIGJvb2trZWVwaW5nIHRvIG1h
a2Ugc3VyZSB0aGF0IHJlLWFwcGVuZGluZyBkb2Vzbid0IG1lc3MgdXAgdGhlIGN1cnNvcgorICAg
IGlmIChtX2lucHV0LmN1cnJlbnRMaW5lKCkuemVyb0Jhc2VkSW50KCkpCisgICAgICAgIG1fY29s
dW1uTnVtYmVyID0gMDsKKworICAgIG1fbGluZU51bWJlciArPSBtX2lucHV0LmN1cnJlbnRMaW5l
KCkuemVyb0Jhc2VkSW50KCk7CisgICAgbV9jb2x1bW5OdW1iZXIgKz0gbV9pbnB1dC5jdXJyZW50
Q29sdW1uKCkuemVyb0Jhc2VkSW50KCk7CiB9CiAKIHZvaWQgTmV3WE1MRG9jdW1lbnRQYXJzZXI6
OmZpbmlzaCgpCiB7CiAgICAgQVNTRVJUKCFtX2ZpbmlzaFdhc0NhbGxlZCk7Ci0gICAgbV9maW5p
c2hXYXNDYWxsZWQgPSB0cnVlOwogCisgICAgaWYgKG1fcGFyc2VyUGF1c2VkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2ZpbmlzaFdhc0NhbGxlZCA9IHRydWU7CiAgICAgaWYgKGlzUGFyc2lu
ZygpKQogICAgICAgICBwcmVwYXJlVG9TdG9wUGFyc2luZygpOwogICAgIGRvY3VtZW50KCktPnNl
dFJlYWR5U3RhdGUoRG9jdW1lbnQ6OkludGVyYWN0aXZlKTsKQEAgLTEyMyw3ICsxODIsNyBAQCBi
b29sIE5ld1hNTERvY3VtZW50UGFyc2VyOjpoYXNJbnNlcnRpb25Qb2ludCgpCiAKIGJvb2wgTmV3
WE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCgpCiB7Ci0gICAgcmV0dXJuIG1fZmlu
aXNoV2FzQ2FsbGVkOworICAgIHJldHVybiBtX3BhcnNlclBhdXNlZCB8fCBtX2ZpbmlzaFdhc0Nh
bGxlZDsKIH0KIAogYm9vbCBOZXdYTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0
cygpIGNvbnN0CkBAIC0xNDAsNCArMTk5LDM2IEBAIHZvaWQgTmV3WE1MRG9jdW1lbnRQYXJzZXI6
OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkKIHsKIH0KIAordm9pZCBOZXdY
TUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHVudXNlZFJl
c291cmNlKQoreworICAgIEFTU0VSVF9VTlVTRUQodW51c2VkUmVzb3VyY2UsIHVudXNlZFJlc291
cmNlID09IG1fcGVuZGluZ1NjcmlwdCk7CisgICAgQVNTRVJUKG1fcGVuZGluZ1NjcmlwdC0+YWNj
ZXNzQ291bnQoKSA+IDApOworCisgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKG1fcGVu
ZGluZ1NjcmlwdC5nZXQoKSk7CisgICAgYm9vbCBlcnJvck9jY3VycmVkID0gbV9wZW5kaW5nU2Ny
aXB0LT5lcnJvck9jY3VycmVkKCk7CisgICAgYm9vbCB3YXNDYW5jZWxlZCA9IG1fcGVuZGluZ1Nj
cmlwdC0+d2FzQ2FuY2VsZWQoKTsKKworICAgIG1fcGVuZGluZ1NjcmlwdC0+cmVtb3ZlQ2xpZW50
KHRoaXMpOworICAgIG1fcGVuZGluZ1NjcmlwdCA9IDA7CisKKyAgICBSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCA9IG1fc2NyaXB0RWxlbWVudDsKKyAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVt
ZW50ID0gdG9TY3JpcHRFbGVtZW50KG1fc2NyaXB0RWxlbWVudC5nZXQoKSk7CisgICAgbV9zY3Jp
cHRFbGVtZW50ID0gMDsKKworICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKKworICAgIC8vIEph
dmFTY3JpcHQgY2FuIGRldGFjaCB0aGlzIHBhcnNlciwgbWFrZSBzdXJlIGl0J3Mga2VwdCBhbGl2
ZSBldmVuIGlmIGRldGFjaGVkLgorICAgIFJlZlB0cjxOZXdYTUxEb2N1bWVudFBhcnNlcj4gcHJv
dGVjdCh0aGlzKTsKKworICAgIGlmIChlcnJvck9jY3VycmVkKQorICAgICAgICBzY3JpcHRFbGVt
ZW50LT5kaXNwYXRjaEVycm9yRXZlbnQoKTsKKyAgICBlbHNlIGlmICghd2FzQ2FuY2VsZWQpIHsK
KyAgICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKKyAgICAg
ICAgc2NyaXB0RWxlbWVudC0+ZGlzcGF0Y2hMb2FkRXZlbnQoKTsKKyAgICB9CisKKyAgICBpZiAo
IWlzRGV0YWNoZWQoKSAmJiBtX3BhcnNlclBhdXNlZCkKKyAgICAgICAgcmVzdW1lUGFyc2luZygp
OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERv
Y3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERvY3VtZW50
UGFyc2VyLmgKaW5kZXggNWI5NzlhMThkNThkNTdkOWU4Mjk5ZmZjMzU5NzQ0NzRmZGRjNTcxMy4u
YTVlZTYwMjA2NGU5OTMxNWJlOTVlZWYzZDg2NWUyZDcwMzk1YTEwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9OZXdYTUxEb2N1bWVudFBhcnNlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMjcsNiArMjcs
OCBAQAogI2RlZmluZSBOZXdYTUxEb2N1bWVudFBhcnNlcl9oCiAKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5j
bHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2Vy
LmgiCiAjaW5jbHVkZSAiWE1MVG9rZW4uaCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKQEAg
LTM1LDExICszNywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50
OwogY2xhc3MgQ29udGFpbmVyTm9kZTsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgU2NyaXB0RWxl
bWVudDsKIGNsYXNzIFhNTFRyZWVCdWlsZGVyOwogCi1jbGFzcyBOZXdYTUxEb2N1bWVudFBhcnNl
ciA6IHB1YmxpYyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIgeworY2xhc3MgTmV3WE1MRG9jdW1l
bnRQYXJzZXIgOiBwdWJsaWMgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLCBwdWJsaWMgQ2FjaGVk
UmVzb3VyY2VDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5ld1hNTERvY3VtZW50UGFyc2VyPiBjcmVhdGUoRG9jdW1l
bnQqIGRvY3VtZW50KQpAQCAtNTQsNiArNTcsMTEgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJv
b2wgcGFyc2VEb2N1bWVudEZyYWdtZW50KGNvbnN0IFN0cmluZyYsIERvY3VtZW50RnJhZ21lbnQq
LCBFbGVtZW50KiBwYXJlbnQgPSAwLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFn
bWVudFNjcmlwdGluZ0FsbG93ZWQpOwogCisgICAgdm9pZCBwYXVzZVBhcnNpbmcoKSB7IG1fcGFy
c2VyUGF1c2VkID0gdHJ1ZTsgfQorICAgIHZvaWQgcmVzdW1lUGFyc2luZygpOworICAgIHZvaWQg
cHJvY2Vzc1NjcmlwdChTY3JpcHRFbGVtZW50Kik7CisgICAgdm9pZCBzZXRTY3JpcHRTdGFydFBv
c2l0aW9uKFRleHRQb3NpdGlvbjEgcG9zaXRpb24pIHsgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0g
cG9zaXRpb247IH0KKwogICAgIHZpcnR1YWwgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBj
b25zdDsKICAgICB2aXJ0dWFsIGludCBsaW5lTnVtYmVyKCkgY29uc3Q7CiAKQEAgLTY0LDYgKzcy
LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0V4ZWN1dGluZ1NjcmlwdCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygp
OwogCisgICAgLy8gQ2FjaGVkUmVzb3VyY2VDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBpbnNlcnQoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVu
ZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKQEAgLTc0LDExICs4NSwyMCBAQCBwcml2YXRlOgog
ICAgIE5ld1hNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqLCBFbGVtZW50KiBwYXJl
bnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgdmlydHVhbCB+TmV3WE1MRG9j
dW1lbnRQYXJzZXIoKTsKIAorICAgIFNlZ21lbnRlZFN0cmluZyBtX2lucHV0OwogICAgIE93blB0
cjxYTUxUb2tlbml6ZXI+IG1fdG9rZW5pemVyOwogICAgIFhNTFRva2VuIG1fdG9rZW47CiAKKyAg
ICBib29sIG1fcGFyc2VyUGF1c2VkOwogICAgIGJvb2wgbV9maW5pc2hXYXNDYWxsZWQ7CiAKKyAg
ICBpbnQgbV9saW5lTnVtYmVyOworICAgIGludCBtX2NvbHVtbk51bWJlcjsKKworICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9wZW5kaW5nU2NyaXB0OworICAgIFJlZlB0
cjxFbGVtZW50PiBtX3NjcmlwdEVsZW1lbnQ7CisgICAgVGV4dFBvc2l0aW9uMSBtX3NjcmlwdFN0
YXJ0UG9zaXRpb247CisKICAgICBPd25QdHI8WE1MVHJlZUJ1aWxkZXI+IG1fdHJlZUJ1aWxkZXI7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRyZWVCdWls
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCmlu
ZGV4IGYwN2VmMmYwNTU4OTg2ZjdkNTQ2N2VmZTQ0ZTc4OGNlYjQyODJjZTMuLjE3ZWQ1YzQ3ZDll
YjY2M2IyZjgzNDlmZDRiOTQ1YjE4OGNmMGFlY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiWE1MVHJlZUJ1aWxkZXIuaCIKIAorI2luY2x1ZGUgIkNhY2hlZFNj
cmlwdC5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgogI2luY2x1ZGUgIkNvbW1lbnQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMzUsNiArMzYsOCBAQAogI2luY2x1ZGUgIkhUTUxF
bnRpdHlTZWFyY2guaCIKICNpbmNsdWRlICJOZXdYTUxEb2N1bWVudFBhcnNlci5oIgogI2luY2x1
ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgog
I2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAKQEAgLTE0Myw2ICsxNDYsMTcgQEAgdm9pZCBYTUxUcmVl
QnVpbGRlcjo6cG9wQ3VycmVudE5vZGUoKQogICAgIG1fY3VycmVudE5vZGVTdGFjay5yZW1vdmVM
YXN0KCk7CiB9CiAKK3ZvaWQgWE1MVHJlZUJ1aWxkZXI6OmNsb3NlRWxlbWVudChQYXNzUmVmUHRy
PEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgZWxlbWVudC0+ZmluaXNoUGFyc2luZ0NoaWxkcmVu
KCk7CisKKyAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50
KGVsZW1lbnQuZ2V0KCkpOworICAgIGlmIChzY3JpcHRFbGVtZW50KQorICAgICAgICBtX3BhcnNl
ci0+cHJvY2Vzc1NjcmlwdChzY3JpcHRFbGVtZW50KTsKKworICAgIHBvcEN1cnJlbnROb2RlKCk7
Cit9CisKIHZvaWQgWE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
Y29uc3QgQXRvbWljWE1MVG9rZW4mIHRva2VuKQogewogICAgIGlmICghZmFpbE9uVGV4dCgpKQpA
QCAtMjIzLDE2ICsyMzcsMTggQEAgdm9pZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFn
KGNvbnN0IEF0b21pY1hNTFRva2VuJiB0b2tlbikKICAgICB0b3Auc2V0Tm9kZShuZXdFbGVtZW50
KTsKICAgICBwdXNoQ3VycmVudE5vZGUodG9wKTsKIAorICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlw
dEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7CisgICAgaWYgKHNj
cmlwdEVsZW1lbnQpCisgICAgICAgbV9wYXJzZXItPnNldFNjcmlwdFN0YXJ0UG9zaXRpb24odG9P
bmVCYXNlZFRleHRQb3NpdGlvbihtX3BhcnNlci0+dGV4dFBvc2l0aW9uKCkpKTsKKwogICAgIGlm
ICghbmV3RWxlbWVudC0+YXR0YWNoZWQoKSkKICAgICAgICAgbmV3RWxlbWVudC0+YXR0YWNoKCk7
CiAKICAgICBpZiAoaXNGaXJzdEVsZW1lbnQgJiYgbV9kb2N1bWVudC0+ZnJhbWUoKSkKICAgICAg
ICAgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50
QXZhaWxhYmxlKCk7CiAKLSAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcoKSkgewotICAgICAgICBw
b3BDdXJyZW50Tm9kZSgpOwotICAgICAgICBuZXdFbGVtZW50LT5maW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oKTsKLSAgICB9CisgICAgaWYgKHRva2VuLnNlbGZDbG9zaW5nKCkpCisgICAgICAgIGNsb3Nl
RWxlbWVudChuZXdFbGVtZW50KTsKIH0KIAogdm9pZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZFRhZyhjb25zdCBBdG9taWNYTUxUb2tlbiYgdG9rZW4pCkBAIC0yNDQsOCArMjYwLDcgQEAgdm9p
ZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhjb25zdCBBdG9taWNYTUxUb2tlbiYgdG9r
ZW4pCiAgICAgaWYgKCFub2RlLT5oYXNUYWdOYW1lKFF1YWxpZmllZE5hbWUodG9rZW4ucHJlZml4
KCksIHRva2VuLm5hbWUoKSwgbV9jdXJyZW50Tm9kZVN0YWNrLmxhc3QoKS5uYW1lc3BhY2VGb3JQ
cmVmaXgodG9rZW4ucHJlZml4KCksIG1fY3VycmVudE5vZGVTdGFjay5sYXN0KCkubmFtZXNwYWNl
VVJJKCkpKSkpCiAgICAgICAgIG1fcGFyc2VyLT5zdG9wUGFyc2luZygpOwogCi0gICAgcG9wQ3Vy
cmVudE5vZGUoKTsKLSAgICBub2RlLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICBjbG9z
ZUVsZW1lbnQodG9FbGVtZW50KG5vZGUuZ2V0KCkpKTsKIH0KIAogdm9pZCBYTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0NoYXJhY3Rlcihjb25zdCBBdG9taWNYTUxUb2tlbiYgdG9rZW4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVyLmgKaW5kZXggNjgwZTcyMzY5M2Q5MWUy
MmEyODVlNGY3ODExMTEyYjM3NmZlMTQ0Ni4uYzFkMzU3MDRhODBmMjk0MDIzMTEyNzk5MmQ2NzJj
YTJkZDMwNGYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUcmVl
QnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIu
aApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC04MSw2ICs4Miw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHB1c2hDdXJyZW50Tm9kZShj
b25zdCBOb2RlU3RhY2tJdGVtJik7CiAgICAgdm9pZCBwb3BDdXJyZW50Tm9kZSgpOworICAgIHZv
aWQgY2xvc2VFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOwogCiAgICAgdm9pZCBwcm9jZXNz
UHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IEF0b21pY1hNTFRva2VuJik7CiAgICAgdm9pZCBw
cm9jZXNzWE1MRGVjbGFyYXRpb24oY29uc3QgQXRvbWljWE1MVG9rZW4mKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104422</attachid>
            <date>2011-08-18 16:32:46 -0700</date>
            <delta_ts>2011-08-18 18:09:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66406-20110818163245.patch</filename>
            <type>text/plain</type>
            <size>11154</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMyMjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5OGMwOGFmNTNlNTg0YzBm
YTU0M2M3MDhjYWI4NDU3OThhZDljZTZlLi5lZjk5ZjE2YTFiZTQyYTZiZDYzOTUxYzdlMTViODI0
NmI0YTUyYjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDgtMTggIEplZmZy
ZXkgUGZhdSAgPGpwZmF1QGFwcGxlLmNvbT4KKworICAgICAgICBOZXcgWE1MIHBhcnNlcjogc2Ny
aXB0aW5nIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY2NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB4bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5ld1hNTERvY3VtZW50UGFyc2VyOjpOZXdYTUxEb2N1bWVudFBhcnNlcik6CisgICAg
ICAgIChXZWJDb3JlOjpOZXdYTUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXdYTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc1NjcmlwdCk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXdYTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kKTogQWRkIHN1cHBvcnQg
Zm9yIHBhdXNpbmcgdGhlIHBhcnNpbmcKKyAgICAgICAgKFdlYkNvcmU6Ok5ld1hNTERvY3VtZW50
UGFyc2VyOjpmaW5pc2gpOiBBZGQgc3VwcG9ydCBmb3IgcGF1c2luZyB0aGUgcGFyc2luZworICAg
ICAgICAoV2ViQ29yZTo6TmV3WE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAg
ICAgICAgKiB4bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgIChXZWJD
b3JlOjpOZXdYTUxEb2N1bWVudFBhcnNlcjo6cGF1c2VQYXJzaW5nKToKKyAgICAgICAgKiB4bWwv
cGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcDogQWRkIGEgc2hhcmVkIGZ1bmN0aW9uIGJldHdlZW4g
c2VsZi1jbG9zaW5nIGFuZCBlbmQgdGFncworICAgICAgICAoV2ViQ29yZTo6WE1MVHJlZUJ1aWxk
ZXI6OmNsb3NlRWxlbWVudCk6IFJlZ2lzdGVycyBzY3JpcHRzIGFuZCBwb3BzIHRoZSBzdGFjawor
ICAgICAgICAoV2ViQ29yZTo6WE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyk6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6CisgICAgICAgICog
eG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5oOgorCiAyMDExLTA4LTE3ICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFuIGFycm93IGtleSBjb2xsYXBzZXMgZGly
ZWN0aW9ubGVzcyBzZWxlY3Rpb24gcmFuZ2UgaW4gdGhlIHdyb25nIGRpcmVjdGlvbiBpbiBCaURp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFy
c2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIu
Y3BwCmluZGV4IDU2NzkwZWJiMWFhN2M2ZjVmYWJiODIzMTk5ZTQxYjkxM2I4MjNkN2YuLjMzNTJj
NmJmNDVmMDVkZWQwMzhiYzYxMDdlZGU5NWM2NmU1OGM3NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0yNyw2ICsyNyw4
IEBACiAjaW5jbHVkZSAiTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCIKIAogI2luY2x1ZGUgIkRvY3Vt
ZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCisjaW5jbHVkZSAiU2Ny
aXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1ZGUg
IlhNTFRyZWVCdWlsZGVyLmgiCiAKQEAgLTM1LDcgKzM3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIE5ld1hNTERvY3VtZW50UGFyc2VyOjpOZXdYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCog
ZG9jdW1lbnQpCiAgICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCiAgICAg
LCBtX3Rva2VuaXplcihYTUxUb2tlbml6ZXI6OmNyZWF0ZSgpKQorICAgICwgbV9wYXJzZXJQYXVz
ZWQoZmFsc2UpCiAgICAgLCBtX2ZpbmlzaFdhc0NhbGxlZChmYWxzZSkKKyAgICAsIG1fcGVuZGlu
Z1NjcmlwdCgwKQorICAgICwgbV9zY3JpcHRFbGVtZW50KDApCiAgICAgLCBtX3RyZWVCdWlsZGVy
KFhNTFRyZWVCdWlsZGVyOjpjcmVhdGUodGhpcywgZG9jdW1lbnQpKQogewogfQpAQCAtNDMsNyAr
NDgsMTAgQEAgTmV3WE1MRG9jdW1lbnRQYXJzZXI6Ok5ld1hNTERvY3VtZW50UGFyc2VyKERvY3Vt
ZW50KiBkb2N1bWVudCkKIE5ld1hNTERvY3VtZW50UGFyc2VyOjpOZXdYTUxEb2N1bWVudFBhcnNl
cihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50LCBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24pCiAgICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZnJhZ21l
bnQtPmRvY3VtZW50KCkpCiAgICAgLCBtX3Rva2VuaXplcihYTUxUb2tlbml6ZXI6OmNyZWF0ZSgp
KQorICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCiAgICAgLCBtX2ZpbmlzaFdhc0NhbGxlZChm
YWxzZSkKKyAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQorICAgICwgbV9zY3JpcHRFbGVtZW50KDAp
CiAgICAgLCBtX3RyZWVCdWlsZGVyKFhNTFRyZWVCdWlsZGVyOjpjcmVhdGUodGhpcywgZnJhZ21l
bnQsIHBhcmVudCkpCiB7CiB9CkBAIC02Nyw2ICs3NSwzMCBAQCBOZXdYTUxEb2N1bWVudFBhcnNl
cjo6fk5ld1hNTERvY3VtZW50UGFyc2VyKCkKIHsKIH0KIAordm9pZCBOZXdYTUxEb2N1bWVudFBh
cnNlcjo6cmVzdW1lUGFyc2luZygpCit7CisgICAgbV9wYXJzZXJQYXVzZWQgPSBmYWxzZTsKKyAg
ICBhcHBlbmQobV9pbnB1dCk7Cit9CisKK3ZvaWQgTmV3WE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nl
c3NTY3JpcHQoU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCkKK3sKKyAgICBpZiAoc2NyaXB0
RWxlbWVudC0+cHJlcGFyZVNjcmlwdChUZXh0UG9zaXRpb24xKCksIFNjcmlwdEVsZW1lbnQ6OkFs
bG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpIHsKKyAgICAgICAgaWYgKHNjcmlwdEVsZW1l
bnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCisgICAgICAgICAgICBzY3JpcHRFbGVtZW50
LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29u
dGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgVGV4dFBvc2l0aW9uMSgpKSk7CisgICAgICAgIGVs
c2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpIHsKKyAgICAgICAg
ICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpOworICAg
ICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gc2NyaXB0RWxlbWVudC0+ZWxlbWVudCgpOworICAg
ICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisKKyAgICAgICAgICAg
IC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRl
ZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQgaXQuCisgICAgICAgICAgICBpZiAobV9wZW5kaW5n
U2NyaXB0KQorICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CisgICAgfQorfQorCiBUZXh0UG9zaXRp
b24wIE5ld1hNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAogewogICAgIHJl
dHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50
KDApLApAQCAtODUsOSArMTE3LDkgQEAgdm9pZCBOZXdYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0
KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpCiAKIHZvaWQgTmV3WE1MRG9jdW1lbnRQYXJzZXI6OmFw
cGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHN0cmluZykKIHsKLSAgICBTZWdtZW50ZWRTdHJp
bmcgaW5wdXQgPSBzdHJpbmc7Ci0gICAgd2hpbGUgKCFpbnB1dC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgaWYgKCFtX3Rva2VuaXplci0+bmV4dFRva2VuKGlucHV0LCBtX3Rva2VuKSkKKyAgICBtX2lu
cHV0ID0gc3RyaW5nOworICAgIHdoaWxlICghbV9pbnB1dC5pc0VtcHR5KCkgJiYgaXNQYXJzaW5n
KCkgJiYgIW1fcGFyc2VyUGF1c2VkKSB7CisgICAgICAgIGlmICghbV90b2tlbml6ZXItPm5leHRU
b2tlbihtX2lucHV0LCBtX3Rva2VuKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAjaWZuZGVm
IE5ERUJVRwpAQCAtOTcsNyArMTI5LDcgQEAgdm9pZCBOZXdYTUxEb2N1bWVudFBhcnNlcjo6YXBw
ZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc3RyaW5nKQogICAgICAgICBBdG9taWNYTUxUb2tl
biB0b2tlbihtX3Rva2VuKTsKICAgICAgICAgbV90cmVlQnVpbGRlci0+cHJvY2Vzc1Rva2VuKHRv
a2VuKTsKIAotICAgICAgICBpZiAobV90b2tlbi50eXBlKCkgPT0gWE1MVG9rZW5UeXBlczo6RW5k
T2ZGaWxlIHx8ICFpc1BhcnNpbmcoKSkKKyAgICAgICAgaWYgKG1fdG9rZW4udHlwZSgpID09IFhN
TFRva2VuVHlwZXM6OkVuZE9mRmlsZSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIG1f
dG9rZW4uY2xlYXIoKTsKQEAgLTEwOCw4ICsxNDAsMTEgQEAgdm9pZCBOZXdYTUxEb2N1bWVudFBh
cnNlcjo6YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc3RyaW5nKQogdm9pZCBOZXdYTUxE
b2N1bWVudFBhcnNlcjo6ZmluaXNoKCkKIHsKICAgICBBU1NFUlQoIW1fZmluaXNoV2FzQ2FsbGVk
KTsKLSAgICBtX2ZpbmlzaFdhc0NhbGxlZCA9IHRydWU7CiAKKyAgICBpZiAobV9wYXJzZXJQYXVz
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZmluaXNoV2FzQ2FsbGVkID0gdHJ1ZTsKICAg
ICBpZiAoaXNQYXJzaW5nKCkpCiAgICAgICAgIHByZXBhcmVUb1N0b3BQYXJzaW5nKCk7CiAgICAg
ZG9jdW1lbnQoKS0+c2V0UmVhZHlTdGF0ZShEb2N1bWVudDo6SW50ZXJhY3RpdmUpOwpAQCAtMTQw
LDQgKzE3NSwzNiBAQCB2b2lkIE5ld1hNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlU2NyaXB0c1dh
aXRpbmdGb3JTdHlsZXNoZWV0cygpCiB7CiB9CiAKK3ZvaWQgTmV3WE1MRG9jdW1lbnRQYXJzZXI6
Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiB1bnVzZWRSZXNvdXJjZSkKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKHVudXNlZFJlc291cmNlLCB1bnVzZWRSZXNvdXJjZSA9PSBtX3BlbmRpbmdT
Y3JpcHQpOworICAgIEFTU0VSVChtX3BlbmRpbmdTY3JpcHQtPmFjY2Vzc0NvdW50KCkgPiAwKTsK
KworICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShtX3BlbmRpbmdTY3JpcHQuZ2V0KCkp
OworICAgIGJvb2wgZXJyb3JPY2N1cnJlZCA9IG1fcGVuZGluZ1NjcmlwdC0+ZXJyb3JPY2N1cnJl
ZCgpOworICAgIGJvb2wgd2FzQ2FuY2VsZWQgPSBtX3BlbmRpbmdTY3JpcHQtPndhc0NhbmNlbGVk
KCk7CisKKyAgICBtX3BlbmRpbmdTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICBtX3Bl
bmRpbmdTY3JpcHQgPSAwOworCisgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBtX3Njcmlw
dEVsZW1lbnQ7CisgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxl
bWVudChtX3NjcmlwdEVsZW1lbnQuZ2V0KCkpOworICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CisK
KyAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CisKKyAgICAvLyBKYXZhU2NyaXB0IGNhbiBkZXRh
Y2ggdGhpcyBwYXJzZXIsIG1ha2Ugc3VyZSBpdCdzIGtlcHQgYWxpdmUgZXZlbiBpZiBkZXRhY2hl
ZC4KKyAgICBSZWZQdHI8TmV3WE1MRG9jdW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7CisKKyAg
ICBpZiAoZXJyb3JPY2N1cnJlZCkKKyAgICAgICAgc2NyaXB0RWxlbWVudC0+ZGlzcGF0Y2hFcnJv
ckV2ZW50KCk7CisgICAgZWxzZSBpZiAoIXdhc0NhbmNlbGVkKSB7CisgICAgICAgIHNjcmlwdEVs
ZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7CisgICAgICAgIHNjcmlwdEVsZW1lbnQt
PmRpc3BhdGNoTG9hZEV2ZW50KCk7CisgICAgfQorCisgICAgaWYgKCFpc0RldGFjaGVkKCkgJiYg
bV9wYXJzZXJQYXVzZWQpCisgICAgICAgIHJlc3VtZVBhcnNpbmcoKTsKK30KKwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9OZXdYTUxEb2N1bWVudFBhcnNlci5oIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9OZXdYTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IDVi
OTc5YTE4ZDU4ZDU3ZDllODI5OWZmYzM1OTc0NDc0ZmRkYzU3MTMuLmVhODQwYWQ4ZmRlNTBjM2Iw
MWMzYWNmMTIxZDY2MzBiMzJkNTMzODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmgKQEAgLTI3LDYgKzI3LDggQEAKICNkZWZpbmUgTmV3
WE1MRG9jdW1lbnRQYXJzZXJfaAogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIK
KyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlw
dC5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIlhN
TFRva2VuLmgiCiAjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCkBAIC0zNSwxMSArMzcsMTIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKIGNsYXNzIENvbnRhaW5l
ck5vZGU7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFNjcmlwdEVsZW1lbnQ7CiBjbGFzcyBYTUxU
cmVlQnVpbGRlcjsKIAotY2xhc3MgTmV3WE1MRG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgU2NyaXB0
YWJsZURvY3VtZW50UGFyc2VyIHsKK2NsYXNzIE5ld1hNTERvY3VtZW50UGFyc2VyIDogcHVibGlj
IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciwgcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxOZXdYTUxEb2N1bWVudFBhcnNlcj4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKQEAg
LTU0LDYgKzU3LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHBhcnNlRG9jdW1lbnRG
cmFnbWVudChjb25zdCBTdHJpbmcmLCBEb2N1bWVudEZyYWdtZW50KiwgRWxlbWVudCogcGFyZW50
ID0gMCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxv
d2VkKTsKIAorICAgIHZvaWQgcGF1c2VQYXJzaW5nKCkgeyBtX3BhcnNlclBhdXNlZCA9IHRydWU7
IH0KKyAgICB2b2lkIHJlc3VtZVBhcnNpbmcoKTsKKyAgICB2b2lkIHByb2Nlc3NTY3JpcHQoU2Ny
aXB0RWxlbWVudCopOworCiAgICAgdmlydHVhbCBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbigp
IGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKIApAQCAtNjQsNiAr
NzEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRXhlY3V0aW5nU2NyaXB0KCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRz
KCk7CiAKKyAgICAvLyBDYWNoZWRSZXNvdXJjZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIGluc2VydChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwpAQCAtNzQsMTEgKzg0LDE2IEBAIHByaXZhdGU6
CiAgICAgTmV3WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIHBh
cmVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICB2aXJ0dWFsIH5OZXdYTUxE
b2N1bWVudFBhcnNlcigpOwogCisgICAgU2VnbWVudGVkU3RyaW5nIG1faW5wdXQ7CiAgICAgT3du
UHRyPFhNTFRva2VuaXplcj4gbV90b2tlbml6ZXI7CiAgICAgWE1MVG9rZW4gbV90b2tlbjsKIAor
ICAgIGJvb2wgbV9wYXJzZXJQYXVzZWQ7CiAgICAgYm9vbCBtX2ZpbmlzaFdhc0NhbGxlZDsKIAor
ICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9wZW5kaW5nU2NyaXB0Owor
ICAgIFJlZlB0cjxFbGVtZW50PiBtX3NjcmlwdEVsZW1lbnQ7CisKICAgICBPd25QdHI8WE1MVHJl
ZUJ1aWxkZXI+IG1fdHJlZUJ1aWxkZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IGYwN2VmMmYwNTU4OTg2ZjdkNTQ2N2VmZTQ0ZTc4
OGNlYjQyODJjZTMuLmVmOWM5ZDQ2MzRiZjg0YjNmNTRiNjQ3NzFkN2NiM2JlNGYzNjExZDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiWE1MVHJlZUJ1aWxkZXIu
aCIKIAorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5o
IgogI2luY2x1ZGUgIkNvbW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMzUsNiAr
MzYsOCBAQAogI2luY2x1ZGUgIkhUTUxFbnRpdHlTZWFyY2guaCIKICNpbmNsdWRlICJOZXdYTUxE
b2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgorI2lu
Y2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAj
aW5jbHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAKQEAgLTE0Myw2
ICsxNDYsMTcgQEAgdm9pZCBYTUxUcmVlQnVpbGRlcjo6cG9wQ3VycmVudE5vZGUoKQogICAgIG1f
Y3VycmVudE5vZGVTdGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKK3ZvaWQgWE1MVHJlZUJ1aWxkZXI6
OmNsb3NlRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgZWxlbWVu
dC0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRF
bGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KGVsZW1lbnQuZ2V0KCkpOworICAgIGlmIChzY3JpcHRF
bGVtZW50KQorICAgICAgICBtX3BhcnNlci0+cHJvY2Vzc1NjcmlwdChzY3JpcHRFbGVtZW50KTsK
KworICAgIHBvcEN1cnJlbnROb2RlKCk7Cit9CisKIHZvaWQgWE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgQXRvbWljWE1MVG9rZW4mIHRva2VuKQogewog
ICAgIGlmICghZmFpbE9uVGV4dCgpKQpAQCAtMjI5LDEwICsyNDMsOCBAQCB2b2lkIFhNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoY29uc3QgQXRvbWljWE1MVG9rZW4mIHRva2VuKQogICAg
IGlmIChpc0ZpcnN0RWxlbWVudCAmJiBtX2RvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICBtX2Rv
Y3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFi
bGUoKTsKIAotICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZygpKSB7Ci0gICAgICAgIHBvcEN1cnJl
bnROb2RlKCk7Ci0gICAgICAgIG5ld0VsZW1lbnQtPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwot
ICAgIH0KKyAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcoKSkKKyAgICAgICAgY2xvc2VFbGVtZW50
KG5ld0VsZW1lbnQpOwogfQogCiB2b2lkIFhNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKGNv
bnN0IEF0b21pY1hNTFRva2VuJiB0b2tlbikKQEAgLTI0NCw4ICsyNTYsNyBAQCB2b2lkIFhNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKGNvbnN0IEF0b21pY1hNTFRva2VuJiB0b2tlbikKICAg
ICBpZiAoIW5vZGUtPmhhc1RhZ05hbWUoUXVhbGlmaWVkTmFtZSh0b2tlbi5wcmVmaXgoKSwgdG9r
ZW4ubmFtZSgpLCBtX2N1cnJlbnROb2RlU3RhY2subGFzdCgpLm5hbWVzcGFjZUZvclByZWZpeCh0
b2tlbi5wcmVmaXgoKSwgbV9jdXJyZW50Tm9kZVN0YWNrLmxhc3QoKS5uYW1lc3BhY2VVUkkoKSkp
KSkKICAgICAgICAgbV9wYXJzZXItPnN0b3BQYXJzaW5nKCk7CiAKLSAgICBwb3BDdXJyZW50Tm9k
ZSgpOwotICAgIG5vZGUtPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAgIGNsb3NlRWxlbWVu
dCh0b0VsZW1lbnQobm9kZS5nZXQoKSkpOwogfQogCiB2b2lkIFhNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzQ2hhcmFjdGVyKGNvbnN0IEF0b21pY1hNTFRva2VuJiB0b2tlbikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuaAppbmRleCA2ODBlNzIzNjkzZDkxZTIyYTI4NWU0
Zjc4MTExMTJiMzc2ZmUxNDQ2Li5hMDQyMzU4YjAxNWEwNDRiYWNlZDMyZmNmMWMwMzJmNWQ0ODUw
NzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5oCkBAIC04
MSw2ICs4MSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHB1c2hDdXJyZW50Tm9kZShjb25zdCBO
b2RlU3RhY2tJdGVtJik7CiAgICAgdm9pZCBwb3BDdXJyZW50Tm9kZSgpOworICAgIHZvaWQgY2xv
c2VFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOwogCiAgICAgdm9pZCBwcm9jZXNzUHJvY2Vz
c2luZ0luc3RydWN0aW9uKGNvbnN0IEF0b21pY1hNTFRva2VuJik7CiAgICAgdm9pZCBwcm9jZXNz
WE1MRGVjbGFyYXRpb24oY29uc3QgQXRvbWljWE1MVG9rZW4mKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>