<?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>91743</bug_id>
          
          <creation_ts>2012-07-19 07:26:11 -0700</creation_ts>
          <short_desc>Speech JavaScript API: Add the SpeechRecognitionResult.emma attribute</short_desc>
          <delta_ts>2012-07-25 08:36:58 -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>80261</blocked>
    
    <blocked>92232</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>abarth</cc>
    
    <cc>arv</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>ojan</cc>
    
    <cc>satish</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>673490</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-07-19 07:26:11 -0700</bug_when>
    <thetext>Speech JavaScript API: Add the SpeechRecognitionResult.emma attribute</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673504</commentid>
    <comment_count>1</comment_count>
      <attachid>153261</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-07-19 07:46:33 -0700</bug_when>
    <thetext>Created attachment 153261
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673506</commentid>
    <comment_count>2</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-07-19 07:47:12 -0700</bug_when>
    <thetext>Satish: would you like to take an informal look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673572</commentid>
    <comment_count>3</comment_count>
      <attachid>153261</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-19 09:17:46 -0700</bug_when>
    <thetext>Comment on attachment 153261
Patch

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

&gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:59
&gt; +    StringBuilder sb;

sb -&gt; please use complete words in variable names.  Perhaps emmaString ?

&gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:60
&gt; +    sb.append(&quot;&lt;emma:emma version=\&quot;1.0\&quot; xmlns:emma=\&quot;http://www.w3.org/2003/04/emma\&quot;&gt;&quot;);

Building XML by string concatenation is error prone.  How can we be sure we&apos;ve avoided element and attribute splitting bugs?  As an alternative, we have a very nice XML DOM which we can build the document directly.

&gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.idl:34
&gt; +        readonly attribute Document emma;

There&apos;s some tricky issues surrounding the lifetime of JavaScript wrappers here.  You need to make sure that the JavaScript wrappers for this Document tree are kept alive by the SpeechRecognitionResult object.  Otherwise, custom properties that folks add to nodes in this document will &quot;fall off&quot; during garbage collection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673573</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-19 09:18:20 -0700</bug_when>
    <thetext>+haraken and arv for issues related to JavaScript wrapper lifetime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673625</commentid>
    <comment_count>5</comment_count>
      <attachid>153261</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-19 10:15:43 -0700</bug_when>
    <thetext>Comment on attachment 153261
Patch

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

&gt;&gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.idl:34
&gt;&gt; +        readonly attribute Document emma;
&gt; 
&gt; There&apos;s some tricky issues surrounding the lifetime of JavaScript wrappers here.  You need to make sure that the JavaScript wrappers for this Document tree are kept alive by the SpeechRecognitionResult object.  Otherwise, custom properties that folks add to nodes in this document will &quot;fall off&quot; during garbage collection.

If you want to keep emma&apos;s DOM tree alive, you need to add an implicit reference from SpeechRecognitionResult&apos;s wrapper to emma. Specifically, you need to override visitDOMWrapper() and add the implicit reference by AddImplicitReferences(). (e.g. please look at bindings/v8/custom/V8NodeListCustom.cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673642</commentid>
    <comment_count>6</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-07-19 10:31:20 -0700</bug_when>
    <thetext>Here is the test to add to ensure the wrapper is kept alive:

var result = ...
result.emma.customProperty = 42;
gc();
shouldBe(&apos;result.emma.customProperty&apos;, &apos;42&apos;);

For V8 you need to implement V8SpeechRecognitionResult::visitDOMWrapper and add an implicit reference from the SpeechRecognitionResult to the emma Document.

For JSC you need to implement JSSpeechRecognitionResult::visitChildren.

See https://trac.webkit.org/wiki/WebKitIDL for more details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673665</commentid>
    <comment_count>7</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-07-19 10:49:31 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; If you want to keep emma&apos;s DOM tree alive, you need to add an implicit reference from SpeechRecognitionResult&apos;s wrapper to emma. Specifically, you need to override visitDOMWrapper() and add the implicit reference by AddImplicitReferences(). (e.g. please look at bindings/v8/custom/V8NodeListCustom.cpp)

(In reply to comment #6)
&gt; Here is the test to add to ensure the wrapper is kept alive:
&gt; 
&gt; var result = ...
&gt; result.emma.customProperty = 42;
&gt; gc();
&gt; shouldBe(&apos;result.emma.customProperty&apos;, &apos;42&apos;);

Awesome! Thanks for the pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675667</commentid>
    <comment_count>8</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-07-23 06:32:14 -0700</bug_when>
    <thetext>Thanks everyone for the review and comments!

(In reply to comment #3)
&gt; (From update of attachment 153261 [details])
&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:60
&gt; &gt; +    sb.append(&quot;&lt;emma:emma version=\&quot;1.0\&quot; xmlns:emma=\&quot;http://www.w3.org/2003/04/emma\&quot;&gt;&quot;);
&gt; 
&gt; Building XML by string concatenation is error prone.  How can we be sure we&apos;ve avoided element and attribute splitting bugs?  As an alternative, we have a very nice XML DOM which we can build the document directly.

Done. I&apos;m not very familiar with these interfaces, so please take a look.

&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.idl:34
&gt; &gt; +        readonly attribute Document emma;
&gt; 
&gt; There&apos;s some tricky issues surrounding the lifetime of JavaScript wrappers here.  You need to make sure that the JavaScript wrappers for this Document tree are kept alive by the SpeechRecognitionResult object.  Otherwise, custom properties that folks add to nodes in this document will &quot;fall off&quot; during garbage collection.

Thanks for catching this! I&apos;ve added the test that arv suggested, and added a custom visitDOMWrapper function. One thing I&apos;m not sure about is which IDL attributes to add. I looked at arv&apos;s change from Bug 90194, and added CustomIsReachable and V8DependentLifetime based on that, but since I don&apos;t really know what those mean, it would be great if one of you could verify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675668</commentid>
    <comment_count>9</comment_count>
      <attachid>153788</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-07-23 06:32:38 -0700</bug_when>
    <thetext>Created attachment 153788
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675851</commentid>
    <comment_count>10</comment_count>
      <attachid>153788</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-23 11:33:59 -0700</bug_when>
    <thetext>Comment on attachment 153788
Patch

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

&gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:62
&gt; +    const char emmaUrl[] = &quot;http://www.w3.org/2003/04/emma&quot;;

This looks like a namespace.  I wonder if we should have something like http://trac.webkit.org/browser/trunk/Source/WebCore/html/HTMLTagNames.in to create AtomicStrings for the namespace and the qualified names below...

Do you expect to use these constants in any other functions?

&gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:65
&gt; +    emma-&gt;setAttribute(&quot;version&quot;, &quot;1.0&quot;, ec);

I notice that below you&apos;re using a setAttribute function that takes a QualifiedName.  Should we be doing that for this attribute as well?

&gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:76
&gt; +        RefPtr&lt;SpeechRecognitionAlternative&gt; alternative = m_alternatives[i];

Why a RefPtr?  I would have expected m_alternatives to hold a reference for you.

&gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:84
&gt; +        interpretation-&gt;appendChild(literal);

Can we use literal.release() here to save a ref()/deref() pair?

&gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:85
&gt; +        oneOf-&gt;appendChild(interpretation);

Same with interpretation.release() here.

&gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:91
&gt; +    m_emma = document;

It&apos;s slightly odd that m_emma and emma don&apos;t correspond.  I wonder if we should rename document to emma and the existing emma to emmaElement.

&gt; Source/WebCore/bindings/v8/custom/V8SpeechRecognitionResultCustom.cpp:43
&gt; +        v8::V8::AddImplicitReferences(wrapper, &amp;emmaWrapper, 1);

We&apos;ll probably need something similar for JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675852</commentid>
    <comment_count>11</comment_count>
      <attachid>153788</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-23 11:34:22 -0700</bug_when>
    <thetext>Comment on attachment 153788
Patch

Please address the minor nits above before landing.  Thanks for iterating on the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676646</commentid>
    <comment_count>12</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-07-24 04:26:30 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 153788 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=153788&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:62
&gt; &gt; +    const char emmaUrl[] = &quot;http://www.w3.org/2003/04/emma&quot;;
&gt; 
&gt; This looks like a namespace.  I wonder if we should have something like http://trac.webkit.org/browser/trunk/Source/WebCore/html/HTMLTagNames.in to create AtomicStrings for the namespace and the qualified names below...
&gt; 
&gt; Do you expect to use these constants in any other functions?

It is indeed a namespace (renaming it to emmaNamespaceUrl to make it even more clear). I looked at HTMLTagNames.in, but it feels like overkill for this situation. And I don&apos;t expect these constant to be used anywhere else in the code.

One thing I could do would be to break out the making of these QualifiedNames into something like emmaQualifiedName(), so the code would become:

  oneOf-&gt;setAttribute(emmaQualifiedName(&quot;medium&quot;), &quot;acoustic&quot;);

Do you think that would be better?

&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:65
&gt; &gt; +    emma-&gt;setAttribute(&quot;version&quot;, &quot;1.0&quot;, ec);
&gt; 
&gt; I notice that below you&apos;re using a setAttribute function that takes a QualifiedName.  Should we be doing that for this attribute as well?

No, the EMMA spec (http://www.w3.org/TR/emma/#s3.1) doesn&apos;t say that the version attribute should be in the emma namespace, so I&apos;m using an unqualified name.

&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:76
&gt; &gt; +        RefPtr&lt;SpeechRecognitionAlternative&gt; alternative = m_alternatives[i];
&gt; 
&gt; Why a RefPtr?  I would have expected m_alternatives to hold a reference for you.
Done.

&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:84
&gt; &gt; +        interpretation-&gt;appendChild(literal);
&gt; 
&gt; Can we use literal.release() here to save a ref()/deref() pair?
Done.

&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:85
&gt; &gt; +        oneOf-&gt;appendChild(interpretation);
&gt; 
&gt; Same with interpretation.release() here.
Done.

&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:91
&gt; &gt; +    m_emma = document;
&gt; 
&gt; It&apos;s slightly odd that m_emma and emma don&apos;t correspond.  I wonder if we should rename document to emma and the existing emma to emmaElement.
emmaElement sounds good. Done.

&gt; &gt; Source/WebCore/bindings/v8/custom/V8SpeechRecognitionResultCustom.cpp:43
&gt; &gt; +        v8::V8::AddImplicitReferences(wrapper, &amp;emmaWrapper, 1);
&gt; 
&gt; We&apos;ll probably need something similar for JSC.
Right, once a port using JSC picks this up.


(In reply to comment #11)
&gt; (From update of attachment 153788 [details])
&gt; Please address the minor nits above before landing.  Thanks for iterating on the patch.

I&apos;ve addressed them above. If you think I missed something, I&apos;ll be happy to follow up with another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676686</commentid>
    <comment_count>13</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-07-24 05:25:44 -0700</bug_when>
    <thetext>Committed r123461: &lt;http://trac.webkit.org/changeset/123461&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676983</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-24 10:28:35 -0700</bug_when>
    <thetext>&gt; It is indeed a namespace (renaming it to emmaNamespaceUrl to make it even more clear). I looked at HTMLTagNames.in, but it feels like overkill for this situation. And I don&apos;t expect these constant to be used anywhere else in the code.

Ok.  Thanks.

&gt; One thing I could do would be to break out the making of these QualifiedNames into something like emmaQualifiedName(), so the code would become:
&gt; 
&gt;   oneOf-&gt;setAttribute(emmaQualifiedName(&quot;medium&quot;), &quot;acoustic&quot;);
&gt; 
&gt; Do you think that would be better?

Yes, that would be great.

&gt; &gt; &gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:65
&gt; &gt; &gt; +    emma-&gt;setAttribute(&quot;version&quot;, &quot;1.0&quot;, ec);
&gt; &gt; 
&gt; &gt; I notice that below you&apos;re using a setAttribute function that takes a QualifiedName.  Should we be doing that for this attribute as well?
&gt; 
&gt; No, the EMMA spec (http://www.w3.org/TR/emma/#s3.1) doesn&apos;t say that the version attribute should be in the emma namespace, so I&apos;m using an unqualified name.

Great.  Is the lack of namespace covered by your tests?  That seems like something we could easily mess up in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677849</commentid>
    <comment_count>15</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-07-25 02:54:02 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; One thing I could do would be to break out the making of these QualifiedNames into something like emmaQualifiedName(), so the code would become:
&gt; &gt; 
&gt; &gt;   oneOf-&gt;setAttribute(emmaQualifiedName(&quot;medium&quot;), &quot;acoustic&quot;);
&gt; &gt; 
&gt; &gt; Do you think that would be better?
&gt; 
&gt; Yes, that would be great.

Doing this in Bug 92232.

&gt; &gt; &gt; &gt; Source/WebCore/Modules/speech/SpeechRecognitionResult.cpp:65
&gt; &gt; &gt; &gt; +    emma-&gt;setAttribute(&quot;version&quot;, &quot;1.0&quot;, ec);
&gt; &gt; &gt; 
&gt; &gt; &gt; I notice that below you&apos;re using a setAttribute function that takes a QualifiedName.  Should we be doing that for this attribute as well?
&gt; &gt; 
&gt; &gt; No, the EMMA spec (http://www.w3.org/TR/emma/#s3.1) doesn&apos;t say that the version attribute should be in the emma namespace, so I&apos;m using an unqualified name.
&gt; 
&gt; Great.  Is the lack of namespace covered by your tests?  That seems like something we could easily mess up in the future.

Yes, it&apos;s covered. If I put it in a namespace, the test fails.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678093</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-25 08:36:58 -0700</bug_when>
    <thetext>&gt; Yes, it&apos;s covered. If I put it in a namespace, the test fails.

Awesome.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153261</attachid>
            <date>2012-07-19 07:46:33 -0700</date>
            <delta_ts>2012-07-23 06:32:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91743-20120719154632.patch</filename>
            <type>text/plain</type>
            <size>8620</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmZlNzEyZTAzMzBlZGE5
YWU2ZDVhZjI2NmM0NTQ3NDk1ZGZmYjdhNC4uNzg5OTc1Y2U4N2JlYzZjOTA3NWE5ZTMxMmZlM2Ey
ZTkxMmNhYzcwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA3LTE5ICBIYW5z
IFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3BlZWNoIEphdmFTY3Jp
cHQgQVBJOiBBZGQgdGhlIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmVtbWEgYXR0cmlidXRlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTc0MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCB0
aGUgJ2VtbWEnIGF0dHJpYnV0ZSBhcyBkZXNjcmliZWQgaW4gdGhlIHNwZWMgZHJhZnQgYXQKKyAg
ICAgICAgaHR0cDovL2R2Y3MudzMub3JnL2hnL3NwZWVjaC1hcGkvcmF3LWZpbGUvdGlwL3NwZWVj
aGFwaS5odG1sCisKKyAgICAgICAgVGVzdGVkIGJ5IHNwZWVjaHJlY29nbml0aW9uLWJhc2ljcy5o
dG1sLgorCisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6On5TcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjplbW1hKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoUmVjb2duaXRpb25SZXN1bHQuaWRsOgorCiAyMDEyLTA3LTE5ICBTaW1vbiBIYXVzbWFubiAg
PHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFJlbW92ZSBzdXBwb3J0
IGZvciBRdCB2ZXJzaW9ucyBiZWZvcmUgNC44LjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcAppbmRleCAxZGZm
MjRjMTllMWQ4ZDFjMGE5OTQ4M2U2MTk4YWVhNDA2M2ZiZTA1Li5hMDc2OWU3MmFhOWRlNmE3YWE5
OGY3NTdjMDU3MTkwZjQzMzA1NTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuY3BwCkBAIC0yOSw4ICsyOSwx
NSBAQAogCiAjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIKIAorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK1NwZWVjaFJlY29nbml0aW9uUmVzdWx0Ojp+U3BlZWNoUmVjb2du
aXRpb25SZXN1bHQoKQoreworfQorCiBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0
PiBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3Bl
ZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZT4gPiYgYWx0ZXJuYXRpdmVzLCBib29sIGZpbmFsKQog
ewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3BlZWNoUmVjb2duaXRpb25SZXN1bHQoYWx0ZXJu
YXRpdmVzLCBmaW5hbCkpOwpAQCAtNDQsNiArNTEsMzQgQEAgU3BlZWNoUmVjb2duaXRpb25BbHRl
cm5hdGl2ZSogU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6Oml0ZW0odW5zaWduZWQgbG9uZyBpbmRl
eCkKICAgICByZXR1cm4gbV9hbHRlcm5hdGl2ZXNbaW5kZXhdLmdldCgpOwogfQogCitEb2N1bWVu
dCogU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OmVtbWEoKQoreworICAgIGlmIChtX2VtbWEpCisg
ICAgICAgIHJldHVybiBtX2VtbWEuZ2V0KCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIHNiOworICAg
IHNiLmFwcGVuZCgiPGVtbWE6ZW1tYSB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM6ZW1tYT1cImh0dHA6
Ly93d3cudzMub3JnLzIwMDMvMDQvZW1tYVwiPiIpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hbHRlcm5hdGl2ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPFNwZWVjaFJl
Y29nbml0aW9uQWx0ZXJuYXRpdmU+IGFsdGVybmF0aXZlID0gbV9hbHRlcm5hdGl2ZXNbaV07Cisg
ICAgICAgIHNiLmFwcGVuZCgiPGVtbWE6aW50ZXJwcmV0YXRpb24gaWQ9XCIiKTsKKyAgICAgICAg
c2IuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGkgKyAxKSk7CisgICAgICAgIHNiLmFwcGVuZCgiXCIg
ZW1tYTpjb25maWRlbmNlPVwiIik7CisgICAgICAgIHNiLmFwcGVuZChTdHJpbmc6Om51bWJlcihh
bHRlcm5hdGl2ZS0+Y29uZmlkZW5jZSgpKSk7CisgICAgICAgIHNiLmFwcGVuZCgiXCIgZW1tYTpt
ZWRpdW09XCJhY291c3RpY1wiIGVtbWE6bW9kZT1cInZvaWNlXCI+Iik7CisgICAgICAgIHNiLmFw
cGVuZCgiPGVtbWE6bGl0ZXJhbD4iKTsKKyAgICAgICAgc2IuYXBwZW5kKGFsdGVybmF0aXZlLT50
cmFuc2NyaXB0KCkpOworICAgICAgICBzYi5hcHBlbmQoIjwvZW1tYTpsaXRlcmFsPiIpOworICAg
ICAgICBzYi5hcHBlbmQoIjwvZW1tYTppbnRlcnByZXRhdGlvbj4iKTsKKyAgICB9CisgICAgc2Iu
YXBwZW5kKCI8L2VtbWE6ZW1tYT4iKTsKKworICAgIG1fZW1tYSA9IERvY3VtZW50OjpjcmVhdGUo
MCwgS1VSTCgpKTsKKyAgICBtX2VtbWEtPnNldENvbnRlbnQoc2IudG9TdHJpbmcoKSk7CisgICAg
QVNTRVJUKG1fZW1tYS0+d2VsbEZvcm1lZCgpKTsKKworICAgIHJldHVybiBtX2VtbWEuZ2V0KCk7
Cit9CisKIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjpTcGVlY2hSZWNvZ25pdGlvblJlc3VsdChj
b25zdCBWZWN0b3I8UmVmUHRyPFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmU+ID4mIGFsdGVy
bmF0aXZlcywgYm9vbCBmaW5hbCkKICAgICA6IG1fYWx0ZXJuYXRpdmVzKGFsdGVybmF0aXZlcykK
ICAgICAsIG1fZmluYWwoZmluYWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaAppbmRleCAzODY0NWNiMDQ1OTU0M2U0
NWM5NTJiOThiZDcyZjMzNzQ0YWFiMjMyLi4xOGY3NmUxNDdkNDdiNGUzMGE4M2QyNWFjNmRiNGIy
YzA5NmFiMWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNo
L1NwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgKQEAgLTM0LDE5ICszNCwyNCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIERvY3VtZW50OworCiBjbGFzcyBTcGVlY2hSZWNvZ25pdGlv
blJlc3VsdCA6IHB1YmxpYyBSZWZDb3VudGVkPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiB7CiBw
dWJsaWM6CisgICAgflNwZWVjaFJlY29nbml0aW9uUmVzdWx0KCk7CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IGNyZWF0ZShjb25zdCBWZWN0b3I8UmVmUHRy
PFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmU+ID4mLCBib29sIGZpbmFsKTsKIAogICAgIHVu
c2lnbmVkIGxvbmcgbGVuZ3RoKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZXMuc2l6ZSgpOyB9CiAg
ICAgU3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZSogaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4
KTsKICAgICBib29sIGZpbmFsKCkgeyByZXR1cm4gbV9maW5hbDsgfQorICAgIERvY3VtZW50KiBl
bW1hKCk7CiAKIHByaXZhdGU6CiAgICAgU3BlZWNoUmVjb2duaXRpb25SZXN1bHQoY29uc3QgVmVj
dG9yPFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlPiA+JiwgYm9vbCBmaW5hbCk7
CiAKICAgICBWZWN0b3I8UmVmUHRyPFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmU+ID4gbV9h
bHRlcm5hdGl2ZXM7CiAgICAgYm9vbCBtX2ZpbmFsOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9l
bW1hOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaWRsIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaWRsCmluZGV4
IDNmOTEyNjIxYzBkNzEzNGM2Yjk0ZmVlODg0MWE4YzFlNTk2MGZlNGMuLjI5OTVmMDYzNzU5NzA3
NTcyMWZjNDljZDNhMGE4MzNkNzk3MzMyY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5pZGwKQEAgLTMxLDYg
KzMxLDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBsZW5ndGg7CiAgICAgICAgIFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmUgaXRl
bShpbiBbSXNJbmRleF0gdW5zaWduZWQgbG9uZyBpbmRleCk7CiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBib29sZWFuIGZpbmFsOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRG9jdW1l
bnQgZW1tYTsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDk1MTM0ZTMyODFiOWYxNzUzOGQ5NzU1YzI4
NjU5MTIzNDQ5MDVhNC4uNmE5ZTVkZGZiNjQzMmM3ZmJhOWFlNjRhMzUxYmQ0NDNkMzg3MzQ0MyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA3LTE5ICBIYW5zIFdlbm5ib3JnICA8aGFuc0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3BlZWNoIEphdmFTY3JpcHQgQVBJOiBBZGQgdGhlIFNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0LmVtbWEgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTc0MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBsYXlvdXQgdGVzdCB0byBjaGVjayB0
aGUgZW1tYSBhdHRyaWJ1dGUuCisKKyAgICAgICAgKiBmYXN0L3NwZWVjaC9zY3JpcHRlZC9zcGVl
Y2hyZWNvZ25pdGlvbi1iYXNpY3MtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qvc3BlZWNo
L3NjcmlwdGVkL3NwZWVjaHJlY29nbml0aW9uLWJhc2ljcy5odG1sOgorCiAyMDEyLTA3LTE5ICBa
YW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCBHVEsgZ2FyZGVuaW5nLCByZW1vdmluZyBmbGFreSBleHBlY3RhdGlvbnMgZm9yIE1hdGhNTCBQ
cmVzZW50YXRpb25zCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9zY3JpcHRl
ZC9zcGVlY2hyZWNvZ25pdGlvbi1iYXNpY3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9zcGVlY2gvc2NyaXB0ZWQvc3BlZWNocmVjb2duaXRpb24tYmFzaWNzLWV4cGVjdGVkLnR4dApp
bmRleCA0MTJlZDJiNGQ5ZjMzMDkwODQ2YjA2Zjg0YzEyMjYxNzEzYmNmYjJhLi40ZmQ0NTU1Y2E3
OTQxOTYyNjJmYmY1MzY1OTE0MDljMmRlNWE4NjI2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L3NwZWVjaC9zY3JpcHRlZC9zcGVlY2hyZWNvZ25pdGlvbi1iYXNpY3MtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL3NjcmlwdGVkL3NwZWVjaHJlY29nbml0aW9u
LWJhc2ljcy1leHBlY3RlZC50eHQKQEAgLTIwLDYgKzIwLDE3IEBAIFBBU1MgY291bnQgaXMgNAog
UEFTUyBldmVudC5yZXN1bHQubGVuZ3RoIGlzIDEKIFBBU1MgZXZlbnQucmVzdWx0Lml0ZW0oMCku
dHJhbnNjcmlwdCBpcyAiaGVsbG8sIHdvcmxkIgogUEFTUyBldmVudC5yZXN1bHQuaXRlbSgwKS5j
b25maWRlbmNlIGlzIHdpdGhpbiAwLjAwMSBvZiAwLjQyCit3aW5kb3cuZW1tYSA9IGV2ZW50LnJl
c3VsdC5lbW1hCitQQVNTIGVtbWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImludGVycHJldGF0aW9u
IikubGVuZ3RoIGlzIDEKK3dpbmRvdy5pbnRlcnByZXRhdGlvbiA9IGVtbWEuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImludGVycHJldGF0aW9uIilbMF0KK1BBU1MgaW50ZXJwcmV0YXRpb24uZ2V0QXR0
cmlidXRlKCJpZCIpIGlzICIxIgorUEFTUyBpbnRlcnByZXRhdGlvbi5nZXRBdHRyaWJ1dGUoImVt
bWE6Y29uZmlkZW5jZSIpIGlzICIwLjQyIgorUEFTUyBpbnRlcnByZXRhdGlvbi5nZXRBdHRyaWJ1
dGUoImVtbWE6bWVkaXVtIikgaXMgImFjb3VzdGljIgorUEFTUyBpbnRlcnByZXRhdGlvbi5nZXRB
dHRyaWJ1dGUoImVtbWE6bW9kZSIpIGlzICJ2b2ljZSIKK1BBU1MgaW50ZXJwcmV0YXRpb24uZ2V0
RWxlbWVudHNCeVRhZ05hbWUoImxpdGVyYWwiKS5sZW5ndGggaXMgMQord2luZG93LmxpdGVyYWwg
PSBpbnRlcnByZXRhdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGl0ZXJhbCIpWzBdCitQQVNT
IGxpdGVyYWwuY2hpbGROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBsaXRlcmFsLmZpcnN0Q2hpbGQu
ZGF0YSBpcyAiaGVsbG8sIHdvcmxkIgogb25zcGVlY2hlbmQKIFBBU1MgY291bnQgaXMgNQogb25z
b3VuZGVuZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvc2NyaXB0ZWQvc3Bl
ZWNocmVjb2duaXRpb24tYmFzaWNzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9zY3Jp
cHRlZC9zcGVlY2hyZWNvZ25pdGlvbi1iYXNpY3MuaHRtbAppbmRleCAxMTkxOTg5NDgxMzk3M2Uy
ZDE5YjVmMDcyMDg0OGYwMmU1MmY3OGEyLi42YjI1NGIzNGM4MzZlZGU1Zjk3ZTYxYzNjNzM2NDM4
ZGNmNGU5NzFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9zY3JpcHRlZC9z
cGVlY2hyZWNvZ25pdGlvbi1iYXNpY3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3NwZWVj
aC9zY3JpcHRlZC9zcGVlY2hyZWNvZ25pdGlvbi1iYXNpY3MuaHRtbApAQCAtMzIsNiArMzIsMTkg
QEAgZnVuY3Rpb24gb25lTWF0Y2hUZXN0KCkgewogICAgICAgICBzaG91bGRCZSgnZXZlbnQucmVz
dWx0Lmxlbmd0aCcsICcxJyk7CiAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQu
cmVzdWx0Lml0ZW0oMCkudHJhbnNjcmlwdCcsICdoZWxsbywgd29ybGQnKTsKICAgICAgICAgc2hv
dWxkQmVDbG9zZVRvKCdldmVudC5yZXN1bHQuaXRlbSgwKS5jb25maWRlbmNlJywgMC40MiwgMWUt
Myk7CisKKyAgICAgICAgZXZhbEFuZExvZygnd2luZG93LmVtbWEgPSBldmVudC5yZXN1bHQuZW1t
YScpOworICAgICAgICBzaG91bGRCZSgnZW1tYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW50ZXJw
cmV0YXRpb24iKS5sZW5ndGgnLCAnMScpOworICAgICAgICBldmFsQW5kTG9nKCd3aW5kb3cuaW50
ZXJwcmV0YXRpb24gPSBlbW1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnRlcnByZXRhdGlvbiIp
WzBdJyk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZXJwcmV0YXRpb24uZ2V0
QXR0cmlidXRlKCJpZCIpJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdp
bnRlcnByZXRhdGlvbi5nZXRBdHRyaWJ1dGUoImVtbWE6Y29uZmlkZW5jZSIpJywgJzAuNDInKTsK
KyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlcnByZXRhdGlvbi5nZXRBdHRyaWJ1
dGUoImVtbWE6bWVkaXVtIiknLCAnYWNvdXN0aWMnKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdpbnRlcnByZXRhdGlvbi5nZXRBdHRyaWJ1dGUoImVtbWE6bW9kZSIpJywgJ3ZvaWNl
Jyk7CisgICAgICAgIHNob3VsZEJlKCdpbnRlcnByZXRhdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgibGl0ZXJhbCIpLmxlbmd0aCcsICcxJyk7CisgICAgICAgIGV2YWxBbmRMb2coJ3dpbmRvdy5s
aXRlcmFsID0gaW50ZXJwcmV0YXRpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpdGVyYWwiKVsw
XScpOworICAgICAgICBzaG91bGRCZSgnbGl0ZXJhbC5jaGlsZE5vZGVzLmxlbmd0aCcsICcxJyk7
CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnbGl0ZXJhbC5maXJzdENoaWxkLmRhdGEn
LCAnaGVsbG8sIHdvcmxkJyk7CisKICAgICB9CiAKICAgICByLm9uc3BlZWNoZW5kID0gICAgIGZ1
bmN0aW9uKCkgeyBkZWJ1Zygnb25zcGVlY2hlbmQnKTsgICBzaG91bGRCZSgnY291bnQnLCAnNScp
OyArK2NvdW50OyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153788</attachid>
            <date>2012-07-23 06:32:38 -0700</date>
            <delta_ts>2012-07-23 11:34:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91743-20120723143230.patch</filename>
            <type>text/plain</type>
            <size>15588</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI1MzFiODBjNWM4MWIx
MzlhZDllZGRlZWZiZDZhMGZlZDA3MzE0OS4uNTM3MjkzOWE1ZmUwZDE4ODYzYzFjYTJiYzQ4NTUz
NTU0ODdhYjNhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA3LTIzICBIYW5z
IFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3BlZWNoIEphdmFTY3Jp
cHQgQVBJOiBBZGQgdGhlIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmVtbWEgYXR0cmlidXRlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTc0MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCB0
aGUgJ2VtbWEnIGF0dHJpYnV0ZSBhcyBkZXNjcmliZWQgaW4gdGhlIHNwZWMgZHJhZnQgYXQKKyAg
ICAgICAgaHR0cDovL2R2Y3MudzMub3JnL2hnL3NwZWVjaC1hcGkvcmF3LWZpbGUvdGlwL3NwZWVj
aGFwaS5odG1sCisKKyAgICAgICAgVGVzdDogZmFzdC9zcGVlY2gvc2NyaXB0ZWQvZW1tYS5odG1s
CisKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6flNwZWVjaFJlY29n
bml0aW9uUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
ZWNoUmVjb2duaXRpb25SZXN1bHQ6OmVtbWEpOgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNoL1Nw
ZWVjaFJlY29nbml0aW9uUmVzdWx0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0KToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhTcGVlY2hSZWNvZ25pdGlv
blJlc3VsdDo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgICBXZSBuZWVkIHRvIGFkZCBhbiBp
bXBsaWNpdCByZWZlcmVuY2UgZnJvbSB0aGUgcmVzdWx0IG9iamVjdCB0byB0aGUKKyAgICAgICAg
ICBlbW1hIG9iamVjdCB0byBrZWVwIHRoZSBsYXR0ZXJzIERPTSB0cmVlIGFsaXZlIGFjcm9zcwor
ICAgICAgICAgIGdhcmJhZ2UtY29sbGVjdGlvbi4KKwogMjAxMi0wNy0yMyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4
IEdUSysgYnVpbGQgd2l0aCBFTkFCTEVfREFUQUxJU1RfRUxFTUVOVC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNw
cAppbmRleCAxZGZmMjRjMTllMWQ4ZDFjMGE5OTQ4M2U2MTk4YWVhNDA2M2ZiZTA1Li5iZTRkNTE4
MGJhMDUyMWQ0MzBkYTMwY2M4ZWI4OGMyNzdkNWYwZjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuY3BwCkBA
IC0yOSw4ICsyOSwxNiBAQAogCiAjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIK
IAorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUg
IlRleHQuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dDo6flNwZWVjaFJlY29nbml0aW9uUmVzdWx0KCkKK3sKK30KKwogUGFzc1JlZlB0cjxTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdD4gU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OmNyZWF0ZShjb25zdCBW
ZWN0b3I8UmVmUHRyPFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmU+ID4mIGFsdGVybmF0aXZl
cywgYm9vbCBmaW5hbCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNwZWVjaFJlY29nbml0
aW9uUmVzdWx0KGFsdGVybmF0aXZlcywgZmluYWwpKTsKQEAgLTQ0LDYgKzUyLDQ2IEBAIFNwZWVj
aFJlY29nbml0aW9uQWx0ZXJuYXRpdmUqIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjppdGVtKHVu
c2lnbmVkIGxvbmcgaW5kZXgpCiAgICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmVzW2luZGV4XS5nZXQo
KTsKIH0KIAorRG9jdW1lbnQqIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjplbW1hKCkKK3sKKyAg
ICBpZiAobV9lbW1hKQorICAgICAgICByZXR1cm4gbV9lbW1hLmdldCgpOworCisgICAgUmVmUHRy
PERvY3VtZW50PiBkb2N1bWVudCA9IERvY3VtZW50OjpjcmVhdGUoMCwgS1VSTCgpKTsKKworICAg
IGNvbnN0IGNoYXIgZW1tYVVybFtdID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDMvMDQvZW1tYSI7
CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVtbWEgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChRdWFs
aWZpZWROYW1lKCJlbW1hIiwgImVtbWEiLCBlbW1hVXJsKSwgZmFsc2UpOworICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGVtbWEtPnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsICIxLjAiLCBl
Yyk7CisgICAgQVNTRVJUKCFlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFJlZlB0cjxFbGVtZW50PiBvbmVPZiA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KFF1YWxp
ZmllZE5hbWUoImVtbWEiLCAib25lLW9mIiwgZW1tYVVybCksIGZhbHNlKTsKKyAgICBvbmVPZi0+
c2V0QXR0cmlidXRlKFF1YWxpZmllZE5hbWUoImVtbWEiLCAibWVkaXVtIiwgZW1tYVVybCksICJh
Y291c3RpYyIpOworICAgIG9uZU9mLT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZSgiZW1tYSIs
ICJtb2RlIiwgZW1tYVVybCksICJ2b2ljZSIpOworICAgIG9uZU9mLT5zZXRJZEF0dHJpYnV0ZSgi
b25lLW9mIik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWx0ZXJuYXRpdmVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZl
PiBhbHRlcm5hdGl2ZSA9IG1fYWx0ZXJuYXRpdmVzW2ldOworCisgICAgICAgIFJlZlB0cjxFbGVt
ZW50PiBpbnRlcnByZXRhdGlvbiA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KFF1YWxpZmllZE5h
bWUoImVtbWEiLCAiaW50ZXJwcmV0YXRpb24iLCBlbW1hVXJsKSwgZmFsc2UpOworICAgICAgICBp
bnRlcnByZXRhdGlvbi0+c2V0SWRBdHRyaWJ1dGUoU3RyaW5nOjpudW1iZXIoaSArIDEpKTsKKyAg
ICAgICAgaW50ZXJwcmV0YXRpb24tPnNldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKCJlbW1hIiwg
ImNvbmZpZGVuY2UiLCBlbW1hVXJsKSwgU3RyaW5nOjpudW1iZXIoYWx0ZXJuYXRpdmUtPmNvbmZp
ZGVuY2UoKSkpOworCisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBsaXRlcmFsID0gZG9jdW1lbnQt
PmNyZWF0ZUVsZW1lbnQoUXVhbGlmaWVkTmFtZSgiZW1tYSIsICJsaXRlcmFsIiwgZW1tYVVybCks
IGZhbHNlKTsKKyAgICAgICAgbGl0ZXJhbC0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQtPmNyZWF0ZVRl
eHROb2RlKGFsdGVybmF0aXZlLT50cmFuc2NyaXB0KCkpKTsKKyAgICAgICAgaW50ZXJwcmV0YXRp
b24tPmFwcGVuZENoaWxkKGxpdGVyYWwpOworICAgICAgICBvbmVPZi0+YXBwZW5kQ2hpbGQoaW50
ZXJwcmV0YXRpb24pOworICAgIH0KKworICAgIGVtbWEtPmFwcGVuZENoaWxkKG9uZU9mKTsKKyAg
ICBkb2N1bWVudC0+YXBwZW5kQ2hpbGQoZW1tYSk7CisKKyAgICBtX2VtbWEgPSBkb2N1bWVudDsK
KyAgICByZXR1cm4gbV9lbW1hLmdldCgpOworfQorCiBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6
U3BlZWNoUmVjb2duaXRpb25SZXN1bHQoY29uc3QgVmVjdG9yPFJlZlB0cjxTcGVlY2hSZWNvZ25p
dGlvbkFsdGVybmF0aXZlPiA+JiBhbHRlcm5hdGl2ZXMsIGJvb2wgZmluYWwpCiAgICAgOiBtX2Fs
dGVybmF0aXZlcyhhbHRlcm5hdGl2ZXMpCiAgICAgLCBtX2ZpbmFsKGZpbmFsKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHQu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0
LmgKaW5kZXggMzg2NDVjYjA0NTk1NDNlNDVjOTUyYjk4YmQ3MmYzMzc0NGFhYjIzMi4uMThmNzZl
MTQ3ZDQ3YjRlMzBhODNkMjVhYzZkYjRiMmMwOTZhYjFiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oCkBAIC0z
NCwxOSArMzQsMjQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBEb2N1bWVudDsK
KwogY2xhc3MgU3BlZWNoUmVjb2duaXRpb25SZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdD4gewogcHVibGljOgorICAgIH5TcGVlY2hSZWNvZ25pdGlvblJl
c3VsdCgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiBj
cmVhdGUoY29uc3QgVmVjdG9yPFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlPiA+
JiwgYm9vbCBmaW5hbCk7CiAKICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIHsgcmV0dXJuIG1f
YWx0ZXJuYXRpdmVzLnNpemUoKTsgfQogICAgIFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmUq
IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CiAgICAgYm9vbCBmaW5hbCgpIHsgcmV0dXJuIG1f
ZmluYWw7IH0KKyAgICBEb2N1bWVudCogZW1tYSgpOwogCiBwcml2YXRlOgogICAgIFNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0KGNvbnN0IFZlY3RvcjxSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25BbHRl
cm5hdGl2ZT4gPiYsIGJvb2wgZmluYWwpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxTcGVlY2hSZWNv
Z25pdGlvbkFsdGVybmF0aXZlPiA+IG1fYWx0ZXJuYXRpdmVzOwogICAgIGJvb2wgbV9maW5hbDsK
KyAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZW1tYTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29n
bml0aW9uUmVzdWx0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJl
Y29nbml0aW9uUmVzdWx0LmlkbAppbmRleCAzZjkxMjYyMWMwZDcxMzRjNmI5NGZlZTg4NDFhOGMx
ZTU5NjBmZTRjLi5iMzM1NmMxNWQ3NjU3OGM4M2NlZjliOWY4MWUxY2QyODc4NWE4MWY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJl
c3VsdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2du
aXRpb25SZXN1bHQuaWRsCkBAIC0yNiwxMSArMjYsMTQgQEAKIG1vZHVsZSBjb3JlIHsKICAgICBp
bnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1TQ1JJUFRFRF9TUEVFQ0gsCi0gICAgICAg
IEluZGV4ZWRHZXR0ZXIKKyAgICAgICAgQ3VzdG9tSXNSZWFjaGFibGUsCisgICAgICAgIEluZGV4
ZWRHZXR0ZXIsCisgICAgICAgIFY4RGVwZW5kZW50TGlmZXRpbWUKICAgICBdIFNwZWVjaFJlY29n
bml0aW9uUmVzdWx0IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
bGVuZ3RoOwogICAgICAgICBTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlIGl0ZW0oaW4gW0lz
SW5kZXhdIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
Ym9vbGVhbiBmaW5hbDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERvY3VtZW50IGVtbWE7
CiAgICAgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGExNzJkNWU1YmVmZDU5NmY4ODA1OWZj
YTE0ODA3NTg4OGFjNTc0OGIuLjY2NWYyM2ZjMTdmYmIyODg4OTZiZjgyN2VkN2MyNjQ0ZTAzZGU5
NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIzNjUsNiArMjM2NSw3IEBACiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0xlbmd0aEN1c3RvbS5jcHAnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwJywKKyAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdEN1c3RvbS5jcHAn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmlwdFByb2ZpbGVDdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTY3JpcHRQcm9maWxlTm9k
ZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VD
dXN0b20uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Q3VzdG9tLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zMjQ5MmNmYjcyYTIwNGRmY2Q5ZWM1YTY2MGM1ZjdiMGExZDk1Zjg5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3BlZWNoUmVj
b2duaXRpb25SZXN1bHRDdXN0b20uY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQorCisjaW5jbHVk
ZSAiVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oIgorCisjaW5jbHVkZSAiU3BlZWNoUmVjb2du
aXRpb25SZXN1bHQuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIFY4U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OnZpc2l0RE9NV3JhcHBlcihE
T01EYXRhU3RvcmUqIHN0b3JlLCB2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIpCit7CisgICAgU3BlZWNoUmVjb2duaXRpb25SZXN1bHQqIGltcGwgPSBzdGF0
aWNfY2FzdDxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCo+KG9iamVjdCk7CisgICAgRG9jdW1lbnQq
IGVtbWEgPSBpbXBsLT5lbW1hKCk7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBlbW1h
V3JhcHBlciA9IHN0b3JlLT5kb21Ob2RlTWFwKCkuZ2V0KGVtbWEpOworICAgIGlmICghZW1tYVdy
YXBwZXIuSXNFbXB0eSgpKQorICAgICAgICB2ODo6Vjg6OkFkZEltcGxpY2l0UmVmZXJlbmNlcyh3
cmFwcGVyLCAmZW1tYVdyYXBwZXIsIDEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI1MTFiYzU3NTJlNDBh
MDQyMzA2MjljNmEyZmRmNzRiNDIzODFhYzAuLmVhMjQ2OGNiMzBhZmFjYmMxZWJkZDg1Nzg0NzBj
NDA4ZGY2NTIzZTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNy0yMyAgSGFucyBXZW5u
Ym9yZyAgPGhhbnNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNwZWVjaCBKYXZhU2NyaXB0IEFQ
STogQWRkIHRoZSBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5lbW1hIGF0dHJpYnV0ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE3NDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbGF5b3V0IHRlc3Qg
Zm9yIHRoZSBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5lbW1hIGF0dHJpYnV0ZS4KKworICAgICAg
ICAqIGZhc3Qvc3BlZWNoL3NjcmlwdGVkL2VtbWEuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9zcGVlY2gvc2NyaXB0ZWQvZW1tYS1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDEyLTA3LTIz
ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAKICAgICAg
ICAgW0VGTF0gU2tpcCBodHRwL3Rlc3RzL2luc3BlY3Rvci1lbmFibGVkL2luamVjdGVkLXNjcmlw
dC1kaXNjYXJkLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL3Njcmlw
dGVkL2VtbWEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvc2NyaXB0ZWQv
ZW1tYS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmMzZmJhZWEwYWMxYmJhOTdiN2JlZjA0MTc0
MWQwZTk4OWZlZjMzOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc3BlZWNo
L3NjcmlwdGVkL2VtbWEtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNTEgQEAKK1Rlc3QgdGhlIFNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0LmVtbWEgYXR0cmlidXRlLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyAnd2Via2l0U3BlZWNoUmVjb2duaXRpb24nIGluIHNlbGYgaXMg
dHJ1ZQorUEFTUyB3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiA9PSBudWxsIGlzIGZhbHNlCitvbnN0
YXJ0CitvbmF1ZGlvc3RhcnQKK29uc291bmRzdGFydAorb25zcGVlY2hzdGFydAorb25yZXN1bHQK
K1BBU1MgZXZlbnQucmVzdWx0LmVtbWEuY2hpbGROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBldmVu
dC5yZXN1bHQuZW1tYS5maXJzdENoaWxkLm5vZGVOYW1lIGlzICJlbW1hOmVtbWEiCit3aW5kb3cu
ZW1tYSA9IGV2ZW50LnJlc3VsdC5lbW1hLmZpcnN0Q2hpbGQKK1BBU1MgZW1tYS5nZXRBdHRyaWJ1
dGUoInZlcnNpb24iKSBpcyAiMS4wIgorUEFTUyBlbW1hLmNoaWxkTm9kZXMubGVuZ3RoIGlzIDEK
K1BBU1MgZW1tYS5maXJzdENoaWxkLm5vZGVOYW1lIGlzICJlbW1hOm9uZS1vZiIKK3dpbmRvdy5v
bmVvZiA9IGVtbWEuZmlyc3RDaGlsZAord2luZG93LmVtbWFOcyA9ICdodHRwOi8vd3d3LnczLm9y
Zy8yMDAzLzA0L2VtbWEnCitQQVNTIG9uZW9mLmdldEF0dHJpYnV0ZSgiZW1tYTptZWRpdW0iKSBp
cyAiYWNvdXN0aWMiCitQQVNTIG9uZW9mLmdldEF0dHJpYnV0ZU5TKGVtbWFOcywgIm1lZGl1bSIp
IGlzICJhY291c3RpYyIKK1BBU1Mgb25lb2YuZ2V0QXR0cmlidXRlKCJlbW1hOm1vZGUiKSBpcyAi
dm9pY2UiCitQQVNTIG9uZW9mLmdldEF0dHJpYnV0ZU5TKGVtbWFOcywgIm1vZGUiKSBpcyAidm9p
Y2UiCitQQVNTIG9uZW9mLmNoaWxkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1Mgb25lb2YuZmlyc3RD
aGlsZC5ub2RlTmFtZSBpcyAiZW1tYTppbnRlcnByZXRhdGlvbiIKK3dpbmRvdy5pbnRlcnByZXRh
dGlvbiA9IG9uZW9mLmZpcnN0Q2hpbGQKK1BBU1MgaW50ZXJwcmV0YXRpb24uZ2V0QXR0cmlidXRl
KCJpZCIpIGlzICIxIgorUEFTUyBpbnRlcnByZXRhdGlvbi5nZXRBdHRyaWJ1dGUoImVtbWE6Y29u
ZmlkZW5jZSIpIGlzICIwLjQyIgorUEFTUyBpbnRlcnByZXRhdGlvbi5nZXRBdHRyaWJ1dGVOUyhl
bW1hTnMsICJjb25maWRlbmNlIikgaXMgIjAuNDIiCitQQVNTIGludGVycHJldGF0aW9uLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJsaXRlcmFsIikubGVuZ3RoIGlzIDEKK3dpbmRvdy5saXRlcmFsID0g
aW50ZXJwcmV0YXRpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpdGVyYWwiKVswXQorUEFTUyBs
aXRlcmFsLmNoaWxkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbGl0ZXJhbC5maXJzdENoaWxkLmRh
dGEgaXMgImhlbGxvLCB3b3JsZCIKKworVGVzdCB0aGF0IGVtbWEncyBET00gdHJlZSBzdGF5cyBh
bGl2ZToKK3dpbmRvdy5lbW1hID0gbnVsbAord2luZG93Lm9uZW9mID0gbnVsbAord2luZG93Lmlu
dGVycHJldGF0aW9uID0gbnVsbAord2luZG93LmxpdGVyYWwgPSBudWxsCitldmVudC5yZXN1bHQu
ZW1tYS5jdXN0b21Qcm9wZXJ0eSA9IDQyCitnYygpCitQQVNTIGV2ZW50LnJlc3VsdC5lbW1hLmN1
c3RvbVByb3BlcnR5IGlzIDQyCitvbnNwZWVjaGVuZAorb25zb3VuZGVuZAorb25hdWRpb2VuZAor
b25lbmQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9zY3JpcHRlZC9lbW1hLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9zY3JpcHRlZC9lbW1hLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjgzMTQ0M2FjMzEwMWFjYTQ3MTAzMTU3OTNlNjM1NWJiMzNkM2Q3NAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL3NjcmlwdGVkL2VtbWEuaHRtbApAQCAtMCwwICsx
LDgyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij4KK2Rlc2NyaXB0aW9uKCdUZXN0IHRoZSBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5l
bW1hIGF0dHJpYnV0ZS4nKTsKKworZnVuY3Rpb24gcnVuKCkgeworICAgIC8vIENoZWNrIGF2YWls
YWJpbGl0eSBvZiBjb25zdHJ1Y3RvcnMuCisgICAgc2hvdWxkQmVUcnVlKCInd2Via2l0U3BlZWNo
UmVjb2duaXRpb24nIGluIHNlbGYiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJ3ZWJraXRTcGVlY2hS
ZWNvZ25pdGlvbiA9PSBudWxsIik7CisKKyAgICBlbW1hVGVzdCgpOworfQorCitmdW5jdGlvbiBl
bW1hVGVzdCgpIHsKKyAgICB2YXIgciA9IG5ldyB3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbigpOwor
CisgICAgLy8gU2V0IGRlZmF1bHQgaGFuZGxlcnMuCisgICAgZm9yICh2YXIgcHJvcCBpbiByKSB7
CisgICAgICAgIGlmIChwcm9wLm1hdGNoKCdeb24nKSkgeworICAgICAgICAgICAgcltwcm9wXSA9
IGZ1bmN0aW9uKCkgeyBkZWJ1Zygnb24nICsgZXZlbnQudHlwZSk7IH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHIub25yZXN1bHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoJ29ucmVz
dWx0Jyk7CisgICAgICAgIHNob3VsZEJlKCdldmVudC5yZXN1bHQuZW1tYS5jaGlsZE5vZGVzLmxl
bmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQucmVzdWx0
LmVtbWEuZmlyc3RDaGlsZC5ub2RlTmFtZScsICdlbW1hOmVtbWEnKTsKKyAgICAgICAgZXZhbEFu
ZExvZygnd2luZG93LmVtbWEgPSBldmVudC5yZXN1bHQuZW1tYS5maXJzdENoaWxkJyk7CisgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZW1tYS5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKScs
ICcxLjAnKTsKKworICAgICAgICBzaG91bGRCZSgnZW1tYS5jaGlsZE5vZGVzLmxlbmd0aCcsICcx
Jyk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZW1tYS5maXJzdENoaWxkLm5vZGVO
YW1lJywgJ2VtbWE6b25lLW9mJyk7CisgICAgICAgIGV2YWxBbmRMb2coJ3dpbmRvdy5vbmVvZiA9
IGVtbWEuZmlyc3RDaGlsZCcpOworICAgICAgICBldmFsQW5kTG9nKCJ3aW5kb3cuZW1tYU5zID0g
J2h0dHA6Ly93d3cudzMub3JnLzIwMDMvMDQvZW1tYSciKTsKKyAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdvbmVvZi5nZXRBdHRyaWJ1dGUoImVtbWE6bWVkaXVtIiknLCAnYWNvdXN0aWMn
KTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdvbmVvZi5nZXRBdHRyaWJ1dGVOUyhl
bW1hTnMsICJtZWRpdW0iKScsICdhY291c3RpYycpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ29uZW9mLmdldEF0dHJpYnV0ZSgiZW1tYTptb2RlIiknLCAndm9pY2UnKTsKKyAgICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdvbmVvZi5nZXRBdHRyaWJ1dGVOUyhlbW1hTnMsICJt
b2RlIiknLCAndm9pY2UnKTsKKworICAgICAgICBzaG91bGRCZSgnb25lb2YuY2hpbGROb2Rlcy5s
ZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ29uZW9mLmZpcnN0
Q2hpbGQubm9kZU5hbWUnLCAnZW1tYTppbnRlcnByZXRhdGlvbicpOworICAgICAgICBldmFsQW5k
TG9nKCd3aW5kb3cuaW50ZXJwcmV0YXRpb24gPSBvbmVvZi5maXJzdENoaWxkJyk7CisgICAgICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZXJwcmV0YXRpb24uZ2V0QXR0cmlidXRlKCJpZCIp
JywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlcnByZXRhdGlvbi5n
ZXRBdHRyaWJ1dGUoImVtbWE6Y29uZmlkZW5jZSIpJywgJzAuNDInKTsKKyAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdpbnRlcnByZXRhdGlvbi5nZXRBdHRyaWJ1dGVOUyhlbW1hTnMsICJj
b25maWRlbmNlIiknLCAnMC40MicpOworICAgICAgICBzaG91bGRCZSgnaW50ZXJwcmV0YXRpb24u
Z2V0RWxlbWVudHNCeVRhZ05hbWUoImxpdGVyYWwiKS5sZW5ndGgnLCAnMScpOworICAgICAgICBl
dmFsQW5kTG9nKCd3aW5kb3cubGl0ZXJhbCA9IGludGVycHJldGF0aW9uLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJsaXRlcmFsIilbMF0nKTsKKyAgICAgICAgc2hvdWxkQmUoJ2xpdGVyYWwuY2hpbGRO
b2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2xpdGVy
YWwuZmlyc3RDaGlsZC5kYXRhJywgJ2hlbGxvLCB3b3JsZCcpOworCisgICAgICAgIC8vIFRlc3Qg
dGhhdCBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCBrZWVwcyBlbW1hJ3MgRE9NIHRyZWUgYWxpdmUu
CisgICAgICAgIGRlYnVnKCJcblRlc3QgdGhhdCBlbW1hJ3MgRE9NIHRyZWUgc3RheXMgYWxpdmU6
Iik7CisgICAgICAgIGV2YWxBbmRMb2coJ3dpbmRvdy5lbW1hID0gbnVsbCcpOworICAgICAgICBl
dmFsQW5kTG9nKCd3aW5kb3cub25lb2YgPSBudWxsJyk7CisgICAgICAgIGV2YWxBbmRMb2coJ3dp
bmRvdy5pbnRlcnByZXRhdGlvbiA9IG51bGwnKTsKKyAgICAgICAgZXZhbEFuZExvZygnd2luZG93
LmxpdGVyYWwgPSBudWxsJyk7CisgICAgICAgIGV2YWxBbmRMb2coJ2V2ZW50LnJlc3VsdC5lbW1h
LmN1c3RvbVByb3BlcnR5ID0gNDInKTsKKyAgICAgICAgZXZhbEFuZExvZygnZ2MoKScpOworICAg
ICAgICBzaG91bGRCZSgnZXZlbnQucmVzdWx0LmVtbWEuY3VzdG9tUHJvcGVydHknLCAnNDInKTsK
KyAgICB9CisKKyAgICByLm9uZW5kID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCdvbmVu
ZCcpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5hZGRNb2NrU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQoJ2hlbGxvLCB3b3JsZCcsIDAuNDIpOworICAgIH0KKyAgICByLnN0YXJ0KCk7Cit9CisK
K3dpbmRvdy5vbmxvYWQgPSBydW47Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="162838"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="162883"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>