<?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>87805</bug_id>
          
          <creation_ts>2012-05-29 18:35:51 -0700</creation_ts>
          <short_desc>[Shadow DOM] &lt;style&gt; inside Shadow subtree should be scoped inside the subtree.</short_desc>
          <delta_ts>2012-06-12 05:28:52 -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>DOM</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>59827</blocked>
    
    <blocked>88606</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>morrita</cc>
    
    <cc>tasak</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>636696</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-05-29 18:35:51 -0700</bug_when>
    <thetext>http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles
&gt; - Otherwise, if RULE is declared with a style element:
&gt;   - Let STYLE be this style element
&gt;   - If STYLE is in TREE, then RULE is applicable in TREE. // This should be implemented.
&gt;   - If TREE has apply-author-styles flag set and RULE is declared in an enclosing shadow DOM subtree
&gt;   - Let TOP be this tree
&gt;   - If each shadow DOM subtree that both encloses TREE and is enclosed by TOP has apply-author-styles set, the RULE is applicable in TREE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640417</commentid>
    <comment_count>1</comment_count>
      <attachid>145543</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-06-04 01:53:45 -0700</bug_when>
    <thetext>Created attachment 145543
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640638</commentid>
    <comment_count>2</comment_count>
      <attachid>145543</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-06-04 09:30:22 -0700</bug_when>
    <thetext>Comment on attachment 145543
Patch

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

This looks good overall, I think we need a bit more test coverage:
1) at least make sure that all of the state transitions are accounted for
2) look at nested shadow dom and multiple shadow roots per element.

&gt; Source/WebCore/html/HTMLStyleElement.cpp:55
&gt;      , m_isRegisteredWithScopingNode(false)
&gt; +    , m_scoped(false)

Can we not combine these two? Is there ever a situation when you are scoped, but have no scoping node?

&gt; Source/WebCore/html/HTMLStyleElement.cpp:96
&gt; +void HTMLStyleElement::updateForStyleScoped()

Would it work better if we name it as a notification to react and combine into one method?: styleScopedUpdated(attribute.isNull());

&gt; LayoutTests/fast/css/style-scoped/style-scoped-change-scoped-in-shadow.html:28
&gt; +    debug(&quot;E: &quot; + document.defaultView.getComputedStyle(e, null).getPropertyValue(&apos;color&apos;)); /* red */
&gt; +    debug(&quot;E: &quot; + document.defaultView.getComputedStyle(e, null).getPropertyValue(&apos;border&apos;)); /* blue 1px border */
&gt; +    debug(&quot;F: &quot; + document.defaultView.getComputedStyle(f, null).getPropertyValue(&apos;color&apos;)); /* black */
&gt; +    debug(&quot;F: &quot; + document.defaultView.getComputedStyle(e, null).getPropertyValue(&apos;border&apos;)); /* blue 1px border */

this can be a function.

&gt; LayoutTests/fast/css/style-scoped/style-scoped-change-scoped-in-shadow.html:35
&gt; +    document.body.offsetLeft;

Why do we need this here?

&gt; LayoutTests/fast/css/style-scoped/style-scoped-change-scoped-in-shadow.html:42
&gt; +    document.body.offsetLeft;

.. or here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641318</commentid>
    <comment_count>3</comment_count>
      <attachid>145728</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-06-05 01:50:44 -0700</bug_when>
    <thetext>Created attachment 145728
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641545</commentid>
    <comment_count>4</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-06-05 07:54:14 -0700</bug_when>
    <thetext>Thank you for reviewing.

(In reply to comment #2)
&gt; (From update of attachment 145543 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145543&amp;action=review
&gt; 
&gt; This looks good overall, I think we need a bit more test coverage:
&gt; 1) at least make sure that all of the state transitions are accounted for
&gt; 2) look at nested shadow dom and multiple shadow roots per element.
&gt; 

I see. I added more tests.
I think, some existing test would probably cover the case: moving styled scope into shadow dom subtree from document or into document from shadow dom subtree.

&gt; &gt; Source/WebCore/html/HTMLStyleElement.cpp:55
&gt; &gt;      , m_isRegisteredWithScopingNode(false)
&gt; &gt; +    , m_scoped(false)
&gt; 
&gt; Can we not combine these two? Is there ever a situation when you are scoped, but have no scoping node?

I see. Done.

&gt; 
&gt; &gt; Source/WebCore/html/HTMLStyleElement.cpp:96
&gt; &gt; +void HTMLStyleElement::updateForStyleScoped()
&gt; 
&gt; Would it work better if we name it as a notification to react and combine into one method?: styleScopedUpdated(attribute.isNull());

Done.

&gt; 
&gt; &gt; LayoutTests/fast/css/style-scoped/style-scoped-change-scoped-in-shadow.html:28
&gt; &gt; +    debug(&quot;E: &quot; + document.defaultView.getComputedStyle(e, null).getPropertyValue(&apos;color&apos;)); /* red */
&gt; &gt; +    debug(&quot;E: &quot; + document.defaultView.getComputedStyle(e, null).getPropertyValue(&apos;border&apos;)); /* blue 1px border */
&gt; &gt; +    debug(&quot;F: &quot; + document.defaultView.getComputedStyle(f, null).getPropertyValue(&apos;color&apos;)); /* black */
&gt; &gt; +    debug(&quot;F: &quot; + document.defaultView.getComputedStyle(e, null).getPropertyValue(&apos;border&apos;)); /* blue 1px border */
&gt; 
&gt; this can be a function.

Done.

&gt; 
&gt; &gt; LayoutTests/fast/css/style-scoped/style-scoped-change-scoped-in-shadow.html:35
&gt; &gt; +    document.body.offsetLeft;
&gt; 
&gt; Why do we need this here?
&gt; 
&gt; &gt; LayoutTests/fast/css/style-scoped/style-scoped-change-scoped-in-shadow.html:42
&gt; &gt; +    document.body.offsetLeft;
&gt; 
&gt; .. or here?

I see. These offestLefts don&apos;t make sense. I moved these offsetLefts to the next line of setAttribute or removeAttribute.

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641639</commentid>
    <comment_count>5</comment_count>
      <attachid>145728</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-06-05 09:25:44 -0700</bug_when>
    <thetext>Comment on attachment 145728
Patch

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

Thank you for adding the tests! I am now reasonably confident that when we land this, we have enough coverage to capture regressions in the intended behavior.

&gt; Source/WebCore/ChangeLog:6
&gt; +        Modified any style in shadow subtree to be treated as a scoped style

&quot;style&quot; is not the right reference here. In WebKit (and web platform), the word &quot;style&quot; by itself is ambiguous. In your particular case, it would be good to make sure you are discussing the STYLE element, or HTMLStyleElement. Can you change your references to &quot;style&quot; to either &quot;STYLE element&quot; or &quot;HTMLStyleElement&quot;?

&gt; Source/WebCore/ChangeLog:40
&gt; +        (WebCore::HTMLStyleElement::updateForStyleScoped):
&gt; +        Newly added. This method is for updating a style&apos;s scope when scoped
&gt; +        attribute is set to be true. Currently there are the following four
&gt; +        cases:
&gt; +        1, the style is &quot;scoped&quot; and is in document tree,
&gt; +        2, the style is &quot;scoped&quot; and is in shadow subtree,
&gt; +        3, the style is not &quot;scoped&quot; and is in document tree, and
&gt; +        4, the style is not &quot;scoped&quot; and is in shadow subtree.
&gt; +        If the style is not in document, just updating only m_scoped.
&gt; +        And this method treats the case 3 to 1 and 4 to 2. In both case,
&gt; +        the style must be registered with scoping node. However
&gt; +        in 4 to 2, the style has been already registered with shadow root.
&gt; +        So firstly the style must be unregistered with shadow root.
&gt; +        (WebCore::HTMLStyleElement::updateForStyleNotScoped):
&gt; +        Newly added. This method is for updating a style&apos;s scope when scoped
&gt; +        attribute is set to be null, i.e. false. The method treats
&gt; +        the case 1 to 3 and 2 to 4.

This is no longer relevant. Can you update the entry? I would recommend moving the problem description (more general) out of the file modification explanations (more specific).

&gt; Source/WebCore/html/HTMLStyleElement.cpp:54
&gt; -    , m_isRegisteredWithScopingNode(false)
&gt; +    , m_scoped(false)

Having both m_scoped and scoped() in the same class, and scoped() not reflecting the value of m_scoped is bad. This code will be hard to understand. It seems that Roland had a good name that matched what was happening and didn&apos;t clash with scoped().

Also, when I suggested combining them, I didn&apos;t realize you&apos;d just rip one of them out like that. The m_isRegisteredWithScopingNode serves an important purpose: it is almost always equal to scoped(), except for the times when the attribute was set (or unset), but the underlying style-scoped machinery has not yet been adjusted. In these cases, we can rely on m_isRegisteredWithScopingNode to determine the actual state.

It seems to me that the correct solution is to keep m_isRegisteredWithScopingNode and rely on isInShadowTree to detect cases 2 and 4 from your problem description.

&gt; Source/WebCore/html/HTMLStyleElement.cpp:-62
&gt; -    // During tear-down, willRemove isn&apos;t called, so m_isRegisteredWithScopingNode may still be set here.
&gt; -    // Therefore we can&apos;t ASSERT(!m_isRegisteredWithScopingNode).

This comment is ok to remove.

&gt; Source/WebCore/html/HTMLStyleElement.cpp:89
&gt; +void HTMLStyleElement::styleScopedUpdated(bool scoped)

I apologize for leading you to the wrong name, I now see it. This should be scopedAttributeChanged. Since we are already on HTMLStyleElement, we don&apos;t need &quot;style&quot; in the name, and mentioning &quot;attribute&quot; describes it precisely.

&gt; Source/WebCore/html/HTMLStyleElement.cpp:100
&gt; +        // Note: As any style in a shadow tree is treated as &quot;scoped&quot;,

&quot;Note:&quot; is superfluous.

&gt; Source/WebCore/html/HTMLStyleElement.cpp:106
&gt; +        registerWithScopingNode(parentNode());

Can just early return here.

&gt; Source/WebCore/html/HTMLStyleElement.cpp:-158
&gt; -        if (scoped() &amp;&amp; !m_isRegisteredWithScopingNode)

Dropping this condition seems wrong. Are you sure your new condition is its equivalent?

&gt; Source/WebCore/html/HTMLStyleElement.cpp:172
&gt; +            ContainerNode* scope = m_scoped? parentNode() : shadowRoot();

need space between &quot;m_scoped&quot; and the &quot;?&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642217</commentid>
    <comment_count>6</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-06-05 23:33:08 -0700</bug_when>
    <thetext>Thank you for reviewing.

I will recreate a patch. However I would like to ask one question. We cannot rely on inDocument() to determine whether style elements are registered or not?

(In reply to comment #5)

&gt; Having both m_scoped and scoped() in the same class, and scoped() not reflecting the value of m_scoped is bad. This code will be hard to understand. It seems that Roland had a good name that matched what was happening and didn&apos;t clash with scoped().
&gt;
&gt; Also, when I suggested combining them, I didn&apos;t realize you&apos;d just rip one of them out like that. The m_isRegisteredWithScopingNode serves an important purpose: it is almost always equal to scoped(), except for the times when the attribute was set (or unset), but the underlying style-scoped machinery has not yet been adjusted. In these cases, we can rely on m_isRegisteredWithScopingNode to determine the actual state.
&gt; 
&gt; It seems to me that the correct solution is to keep m_isRegisteredWithScopingNode and rely on isInShadowTree to detect cases 2 and 4 from your problem description.

If using scoped() and m_isRegisteredWithScopingNode in the same way (=the original code&apos;s way), I think, we cannot determine where the style was registered when scoped attribute is changed to be true. I tested this by the following example:

   &lt;style id=&quot;mystyle&quot; scoped&gt;div { color: red };&lt;/style&gt;

   var style = document.getElementById(&quot;mystyle&quot;);
   style.setAttribute(&quot;scoped&quot;, &quot;a&quot;); // parseAttribute is invoked with !value.isNull
   style.setAttribute(&quot;scoped&quot;, &quot;b&quot;); // parseAttribute is invoked with !value.isNull
   style.setAttribute(&quot;scoped&quot;, &quot;c&quot;); // parseAttribute is invoked with !value.isNull
   style.setAttribute(&quot;scoped&quot;, &quot;d&quot;); // parseAttribute is invoked with !value.isNull

During HTMLStyleElement::parseAttribute, we can only know whether currently scoped or not and whether currently in shadow tree or not. So we cannot determine:

  (a) [old] in shadow DOM subtree and not scoped --&gt; [new] in shadow DOM subtree and scoped
  (b) [old] in shadow DOM subtree and scoped --&gt; [new] in shadow DOM subtree and scoped

In the case (b), we don&apos;t need to update. But in the case (a), we have to remove the style from shadow root. However in the both case, m_isRegisteredWithScopingNode is true, scoped() is true and isInShadowTree() is true.

This is the reason why I removed m_isRegisteredWithScopingNode and I added the layout test, setAttribute(&quot;scoped&quot;, &quot;scoped&quot;) for already scoped style.

I think, there are several ways to fix the above issue:
(1) modifying scoped() to see m_scoped, i.e. bool scoped() { return m_scoped; }
(2) modifying the type of m_isRegisteredWithScopingNode from bool to enum { NotRegistered, RegisteredAsScoped, RegisteredInShadowTree }.
(3) adding a new boolean flag to find where a style element was registered, e.g. m_isRegisteredInShadowRoot or something.

However I saw comments: “we cannot rely on scoped()”. I think, what we need is just scoped() that we can rely on, i.e. m_scoped.

&gt; &gt; Source/WebCore/html/HTMLStyleElement.cpp:-158
&gt; &gt; -        if (scoped() &amp;&amp; !m_isRegisteredWithScopingNode)
&gt; 
&gt; Dropping this condition seems wrong. Are you sure your new condition is its equivalent?

It depends on “whether we want to register &lt;style scoped&gt; even if it&apos;s not inDocument”.

If we don’t need to register &lt;style scoped&gt; if its’ not inDocument, I think, m_isRegisteredWithScopingNode is always false when the &lt;style scoped&gt; has been just inserted into document.

So, 
&gt; &gt; Source/WebCore/html/HTMLStyleElement.cpp:-158
&gt; &gt; -        if (scoped() &amp;&amp; !m_isRegisteredWithScopingNode)

is the same as

&gt; &gt; -        if (scoped())

Now &lt;style&gt; in shadow subtree is also treated as &lt;style scoped&gt;, 

&gt; &gt; -        if (scoped() || isInShadowTree())

I agree that my patch depends on insertedInto and removedFrom methods’ behavior. In my understandings, insertedInto and removedFrom method can tell the time when a style element not in document is inserted into document and the time when a style in document is removed from document.

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643941</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-06-07 14:50:13 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Thank you for reviewing.
&gt; 
&gt; I will recreate a patch. However I would like to ask one question. We cannot rely on inDocument() to determine whether style elements are registered or not?

I am not sure what you mean by &quot;style elements are registered&quot; here. If you mean &quot;registered with a scoping node&quot;, then obviously no. when inDocument() == false, the node should not be registered with any scoping node, but when inDocument() == true, it may or may not be registered with a scoping node.

If you mean something else, you may have to explain it a bit more :)

&gt; If using scoped() and m_isRegisteredWithScopingNode in the same way (=the original code&apos;s way), I think, we cannot determine where the style was registered when scoped attribute is changed to be true. I tested this by the following example:
&gt; 
&gt;    &lt;style id=&quot;mystyle&quot; scoped&gt;div { color: red };&lt;/style&gt;
&gt; 
&gt;    var style = document.getElementById(&quot;mystyle&quot;);
&gt;    style.setAttribute(&quot;scoped&quot;, &quot;a&quot;); // parseAttribute is invoked with !value.isNull
&gt;    style.setAttribute(&quot;scoped&quot;, &quot;b&quot;); // parseAttribute is invoked with !value.isNull
&gt;    style.setAttribute(&quot;scoped&quot;, &quot;c&quot;); // parseAttribute is invoked with !value.isNull
&gt;    style.setAttribute(&quot;scoped&quot;, &quot;d&quot;); // parseAttribute is invoked with !value.isNull

I don&apos;t understand what you&apos;re testing here. Can you explain a bit more?

&gt; 
&gt; During HTMLStyleElement::parseAttribute, we can only know whether currently scoped or not and whether currently in shadow tree or not. So we cannot determine:
&gt; 
&gt;   (a) [old] in shadow DOM subtree and not scoped --&gt; [new] in shadow DOM subtree and scoped
&gt;   (b) [old] in shadow DOM subtree and scoped --&gt; [new] in shadow DOM subtree and scoped
&gt; 
&gt; In the case (b), we don&apos;t need to update. But in the case (a), we have to remove the style from shadow root. However in the both case, m_isRegisteredWithScopingNode is true, scoped() is true and isInShadowTree() is true.

So, what you need is a knowledge of how the scoping came about: whether by virtue of just being in shadow DOM subtree, or with a scoped attribute. I think I understand.

&gt; 
&gt; This is the reason why I removed m_isRegisteredWithScopingNode and I added the layout test, setAttribute(&quot;scoped&quot;, &quot;scoped&quot;) for already scoped style.
&gt; 
&gt; I think, there are several ways to fix the above issue:
&gt; (1) modifying scoped() to see m_scoped, i.e. bool scoped() { return m_scoped; }

This is wrong. scoped() should always reflect the attribute value.

&gt; (2) modifying the type of m_isRegisteredWithScopingNode from bool to enum { NotRegistered, RegisteredAsScoped, RegisteredInShadowTree }.

This seems good.

&gt; (3) adding a new boolean flag to find where a style element was registered, e.g. m_isRegisteredInShadowRoot or something.

Here, you will always have one invalid combination, which seems like a bad thing.

Thank you for explaining this! I am glad you&apos;re tackling such complex problem and making progress. Keep going! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644274</commentid>
    <comment_count>8</comment_count>
      <attachid>146465</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-06-07 20:50:58 -0700</bug_when>
    <thetext>Created attachment 146465
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644278</commentid>
    <comment_count>9</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-06-07 20:59:54 -0700</bug_when>
    <thetext>Thank you for answering my question.

(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Thank you for reviewing.
&gt; &gt; 
&gt; &gt; I will recreate a patch. However I would like to ask one question. We cannot rely on inDocument() to determine whether style elements are registered or not?

&gt; 
&gt; I am not sure what you mean by &quot;style elements are registered&quot; here. If you mean &quot;registered with a scoping node&quot;, then obviously no. when inDocument() == false, the node should not be registered with any scoping node, but when inDocument() == true, it may or may not be registered with a scoping node.
&gt; 
&gt; If you mean something else, you may have to explain it a bit more :)
&gt; 
&gt; &gt; If using scoped() and m_isRegisteredWithScopingNode in the same way (=the original code&apos;s way), I think, we cannot determine where the style was registered when scoped attribute is changed to be true. I tested this by the following example:
&gt; &gt; 
&gt; &gt;    &lt;style id=&quot;mystyle&quot; scoped&gt;div { color: red };&lt;/style&gt;
&gt; &gt; 
&gt; &gt;    var style = document.getElementById(&quot;mystyle&quot;);
&gt; &gt;    style.setAttribute(&quot;scoped&quot;, &quot;a&quot;); // parseAttribute is invoked with !value.isNull
&gt; &gt;    style.setAttribute(&quot;scoped&quot;, &quot;b&quot;); // parseAttribute is invoked with !value.isNull
&gt; &gt;    style.setAttribute(&quot;scoped&quot;, &quot;c&quot;); // parseAttribute is invoked with !value.isNull
&gt; &gt;    style.setAttribute(&quot;scoped&quot;, &quot;d&quot;); // parseAttribute is invoked with !value.isNull
&gt; 
&gt; I don&apos;t understand what you&apos;re testing here. Can you explain a bit more?

I mean, if I can expect that parseAttribute is invoked if and only if an attribute value is actually changed, i.e. from false to true or from true to false. If so, we can determine old scoped value from current scoped value.
However, the above test shows that it doesn&apos;t depend on whether scoped attribute&apos;s bool value changes or not.

&gt; &gt; During HTMLStyleElement::parseAttribute, we can only know whether currently scoped or not and whether currently in shadow tree or not. So we cannot determine:
&gt; &gt; 
&gt; &gt;   (a) [old] in shadow DOM subtree and not scoped --&gt; [new] in shadow DOM subtree and scoped
&gt; &gt;   (b) [old] in shadow DOM subtree and scoped --&gt; [new] in shadow DOM subtree and scoped
&gt; &gt; 
&gt; &gt; In the case (b), we don&apos;t need to update. But in the case (a), we have to remove the style from shadow root. However in the both case, m_isRegisteredWithScopingNode is true, scoped() is true and isInShadowTree() is true.
&gt; 
&gt; So, what you need is a knowledge of how the scoping came about: whether by virtue of just being in shadow DOM subtree, or with a scoped attribute. I think I understand.
&gt; 
&gt; &gt; 
&gt; &gt; This is the reason why I removed m_isRegisteredWithScopingNode and I added the layout test, setAttribute(&quot;scoped&quot;, &quot;scoped&quot;) for already scoped style.
&gt; &gt; 
&gt; &gt; I think, there are several ways to fix the above issue:
&gt; &gt; (1) modifying scoped() to see m_scoped, i.e. bool scoped() { return m_scoped; }
&gt; 
&gt; This is wrong. scoped() should always reflect the attribute value.
&gt; 
&gt; &gt; (2) modifying the type of m_isRegisteredWithScopingNode from bool to enum { NotRegistered, RegisteredAsScoped, RegisteredInShadowTree }.
&gt; 
&gt; This seems good.
&gt; 
&gt; &gt; (3) adding a new boolean flag to find where a style element was registered, e.g. m_isRegisteredInShadowRoot or something.
&gt; 
&gt; Here, you will always have one invalid combination, which seems like a bad thing.

I see. I added the enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644726</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-06-08 09:18:15 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; &gt;    &lt;style id=&quot;mystyle&quot; scoped&gt;div { color: red };&lt;/style&gt;
&gt; &gt; &gt; 
&gt; &gt; &gt;    var style = document.getElementById(&quot;mystyle&quot;);
&gt; &gt; &gt;    style.setAttribute(&quot;scoped&quot;, &quot;a&quot;); // parseAttribute is invoked with !value.isNull
&gt; &gt; &gt;    style.setAttribute(&quot;scoped&quot;, &quot;b&quot;); // parseAttribute is invoked with !value.isNull
&gt; &gt; &gt;    style.setAttribute(&quot;scoped&quot;, &quot;c&quot;); // parseAttribute is invoked with !value.isNull
&gt; &gt; &gt;    style.setAttribute(&quot;scoped&quot;, &quot;d&quot;); // parseAttribute is invoked with !value.isNull
&gt; &gt; 
&gt; &gt; I don&apos;t understand what you&apos;re testing here. Can you explain a bit more?
&gt; 
&gt; I mean, if I can expect that parseAttribute is invoked if and only if an attribute value is actually changed, i.e. from false to true or from true to false. If so, we can determine old scoped value from current scoped value.
&gt; However, the above test shows that it doesn&apos;t depend on whether scoped attribute&apos;s bool value changes or not.

Hmm.. The test above never sets the value of the attribute to &quot;false&quot;. Remember, this is a boolean attribute (http://www.whatwg.org/specs/web-apps/current-work/multipage/common-microsyntaxes.html#boolean-attributes). Only removing the attribute will qualify as &quot;false&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644732</commentid>
    <comment_count>11</comment_count>
      <attachid>146465</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-06-08 09:26:07 -0700</bug_when>
    <thetext>Comment on attachment 146465
Patch

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

This turned out to be a sweet patch. Thanks for your hard work, tasak@! A few nits that you are welcome to ignore (except spelling errors :).

&gt; Source/WebCore/ChangeLog:41
&gt; +        method is invoked. Therefor we cannot rely on scoped()&quot;

Therefor -&gt; therefore

&gt; Source/WebCore/ChangeLog:58
&gt; +        Added one new method scopedAttributeChanged&apos;s decalartion and

decalartion -&gt; declaration

&gt; Source/WebCore/html/HTMLStyleElement.h:89
&gt; +    enum ScopedStyleRegisterType {

ScopedStyleRegistrationState

&gt; Source/WebCore/html/HTMLStyleElement.h:94
&gt; +    ScopedStyleRegisterType m_registeredWithScopingNode;

m_scopedStyleRegistrationState</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645709</commentid>
    <comment_count>12</comment_count>
      <attachid>146776</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-06-10 21:22:41 -0700</bug_when>
    <thetext>Created attachment 146776
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645711</commentid>
    <comment_count>13</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-06-10 21:24:47 -0700</bug_when>
    <thetext>Thank you. I fixed the errors.

Best regards,
Takashi Sakamoto

(In reply to comment #11)
&gt; (From update of attachment 146465 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=146465&amp;action=review
&gt; 
&gt; This turned out to be a sweet patch. Thanks for your hard work, tasak@! A few nits that you are welcome to ignore (except spelling errors :).
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:41
&gt; &gt; +        method is invoked. Therefor we cannot rely on scoped()&quot;
&gt; 
&gt; Therefor -&gt; therefore
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:58
&gt; &gt; +        Added one new method scopedAttributeChanged&apos;s decalartion and
&gt; 
&gt; decalartion -&gt; declaration
&gt; 
&gt; &gt; Source/WebCore/html/HTMLStyleElement.h:89
&gt; &gt; +    enum ScopedStyleRegisterType {
&gt; 
&gt; ScopedStyleRegistrationState
&gt; 
&gt; &gt; Source/WebCore/html/HTMLStyleElement.h:94
&gt; &gt; +    ScopedStyleRegisterType m_registeredWithScopingNode;
&gt; 
&gt; m_scopedStyleRegistrationState</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646772</commentid>
    <comment_count>14</comment_count>
      <attachid>146776</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-12 03:23:37 -0700</bug_when>
    <thetext>Comment on attachment 146776
Patch

Rejecting attachment 146776 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
Kit/chromium/third_party/yasm/source/patched-yasm --revision 134927 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
44&gt;At revision 134927.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/12944483</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646855</commentid>
    <comment_count>15</comment_count>
      <attachid>146776</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-12 05:28:46 -0700</bug_when>
    <thetext>Comment on attachment 146776
Patch

Clearing flags on attachment: 146776

Committed r120062: &lt;http://trac.webkit.org/changeset/120062&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646856</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-12 05:28:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145543</attachid>
            <date>2012-06-04 01:53:45 -0700</date>
            <delta_ts>2012-06-05 01:50:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87805-20120604175344.patch</filename>
            <type>text/plain</type>
            <size>16787</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTZkYmFhZGZkYmY1YzA2
MzZmYzM4YzU5ZjkwNGVmZWRkYzYxN2QyNy4uYjM1ZmZlODQ5ODNkNWExODc2NDM5MmJhMDI2YjQx
MzJhMDE2NjUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTA2LTA0ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0g
PHN0eWxlPiBpbnNpZGUgU2hhZG93IHN1YnRyZWUgc2hvdWxkIGJlIHNjb3BlZCBpbnNpZGUgdGhl
IHN1YnRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04NzgwNQorCisgICAgICAgIE1vZGlmaWVkIGFueSBzdHlsZSBpbiBzaGFkb3cgc3VidHJlZSB0
byBiZSB0cmVhdGVkIGFzIGEgc2NvcGVkIHN0eWxlCisgICAgICAgIGluZGVwZW5kZW50IG9mIGl0
cyAic2NvcGVkIiBhdHRyaWJ1dGUncyB2YWx1ZS4gVGhpcyBjaGFuZ2UgaXMgdGhlCisgICAgICAg
IGZpcnN0IHN0ZXAgZm9yIGZpeGluZyBzdHlsZSBzY29wZSBidWcsIGkuZS4gYSBzdHlsZSBpbiBz
aGFkb3cgc3VidHJlZQorICAgICAgICBjYW4gYmUgYXBwbGllZCB0byBhbiBlbGVtZW50IGluIGRv
Y3VtZW50IHRyZWUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdDogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1jaGFuZ2Utc2Nv
cGVkLWluLXNoYWRvdy5odG1sCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkZXRlcm1pbmVTY29wZSk6CisgICAgICAg
IE1vZGlmaWVkIHRvIHJldHVybiBhIHNoYWRvdyByb290IGlmIGEgdGFyZ2V0ZWQgc3R5bGVzaGVl
dCBvd25lciBub2RlIGlzCisgICAgICAgIG5vdCBzY29wZWQgYnV0IGluIHNvbWUgc2hhZG93IERP
TSBzdWJ0cmVlLgorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgTW9k
aWZpZWQgdG8gdXNlIHRoZSBiZWxvdyB1cGRhdGVGb3JTdHlsZVNjb3BlZCBhbmQKKyAgICAgICAg
dXBkYXRlRm9yU3R5bGVOb3RTY29wZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVt
ZW50Ojp1cGRhdGVGb3JTdHlsZVNjb3BlZCk6CisgICAgICAgIE5ld2x5IGFkZGVkLiBUaGlzIG1l
dGhvZCBpcyBmb3IgdXBkYXRpbmcgYSBzdHlsZSdzIHNjb3BlIHdoZW4gc2NvcGVkCisgICAgICAg
IGF0dHJpYnV0ZSBpcyBzZXQgdG8gYmUgdHJ1ZS4gQ3VycmVudGx5IHRoZXJlIGFyZSB0aGUgZm9s
bG93aW5nIGZvdXIKKyAgICAgICAgY2FzZXM6CisgICAgICAgIDEsIHRoZSBzdHlsZSBpcyAic2Nv
cGVkIiBhbmQgaXMgaW4gZG9jdW1lbnQgdHJlZSwKKyAgICAgICAgMiwgdGhlIHN0eWxlIGlzICJz
Y29wZWQiIGFuZCBpcyBpbiBzaGFkb3cgc3VidHJlZSwKKyAgICAgICAgMywgdGhlIHN0eWxlIGlz
IG5vdCAic2NvcGVkIiBhbmQgaXMgaW4gZG9jdW1lbnQgdHJlZSwgYW5kCisgICAgICAgIDQsIHRo
ZSBzdHlsZSBpcyBub3QgInNjb3BlZCIgYW5kIGlzIGluIHNoYWRvdyBzdWJ0cmVlLgorICAgICAg
ICBJZiB0aGUgc3R5bGUgaXMgbm90IGluIGRvY3VtZW50LCBqdXN0IHVwZGF0aW5nIG9ubHkgbV9z
Y29wZWQuCisgICAgICAgIEFuZCB0aGlzIG1ldGhvZCB0cmVhdHMgdGhlIGNhc2UgMyB0byAxIGFu
ZCA0IHRvIDIuIEluIGJvdGggY2FzZSwKKyAgICAgICAgdGhlIHN0eWxlIG11c3QgYmUgcmVnaXN0
ZXJlZCB3aXRoIHNjb3Bpbmcgbm9kZS4gSG93ZXZlcgorICAgICAgICBpbiA0IHRvIDIsIHRoZSBz
dHlsZSBoYXMgYmVlbiBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBzaGFkb3cgcm9vdC4KKyAgICAg
ICAgU28gZmlyc3RseSB0aGUgc3R5bGUgbXVzdCBiZSB1bnJlZ2lzdGVyZWQgd2l0aCBzaGFkb3cg
cm9vdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnVwZGF0ZUZvclN0eWxl
Tm90U2NvcGVkKToKKyAgICAgICAgTmV3bHkgYWRkZWQuIFRoaXMgbWV0aG9kIGlzIGZvciB1cGRh
dGluZyBhIHN0eWxlJ3Mgc2NvcGUgd2hlbiBzY29wZWQKKyAgICAgICAgYXR0cmlidXRlIGlzIHNl
dCB0byBiZSBudWxsLCBpLmUuIGZhbHNlLiBUaGUgbWV0aG9kIHRyZWF0cworICAgICAgICB0aGUg
Y2FzZSAxIHRvIDMgYW5kIDIgdG8gNC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1l
bnQ6OnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKToKKyAgICAgICAgQWRkZWQgb25lIG1vcmUgYXJn
dW1lbnQgd2hpY2ggZGVzY3JpYmVzIGEgc2NvcGluZyBub2RlLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgTW9kaWZpZWQgdG8gaW52
b2tlIHJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlIHdoZW4gYW4gZWxlbWVudCBpcyBub3QKKyAgICAg
ICAgc2NvcGVkIGJ1dCBpbiBzb21lIHNoYWRvdyBzdWJ0cmVlLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICBNb2RpZmllZCB0byBpbnZv
a2UgdW5yZWdpc3RlcldpdGhTY29waW5nTm9kZSB3aGVuIGFuIGVsZW1lbnQgaXMgbm90CisgICAg
ICAgIHNjb3BlZCBidXQgaW4gc29tZSBzaGFkb3cgc3VidHJlZS4KKyAgICAgICAgKiBodG1sL0hU
TUxTdHlsZUVsZW1lbnQuaDoKKyAgICAgICAgKEhUTUxTdHlsZUVsZW1lbnQpOgorICAgICAgICBB
ZGRlZCBhIG5ldyBtZW1iZXIgdmFyaWFibGU6IG1fc2NvcGVkIGZvciBjaGVja2luZyB3aGV0aGVy
IHNjb3BlZCBvcgorICAgICAgICBub3QuCisKIDIwMTItMDYtMDMgIEhheWF0byBJdG8gIDxoYXlh
dG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFN1cHBvcnRzIHRyYXZlcnNpbmcgbm9kZXMgaW4g
YW4gb3JwaGFuZWQgc2hhZG93IHN1YnRyZWUgaW4gQ29tcG9zZWRTaGFkb3dUcmVlUGFyZW50V2Fs
a2VyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDA5OGU4NTY3MDE2NmU5
Nzk0MTBjYzMyYjA1OTViOWFlYzBlYTA0MmQuLjk5NWU1OTUzMGMzYzVhYjcyMTZiOTc4YjYwY2Ew
MWY2OTllYmE3YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTQ5OSw3
ICs0OTksNyBAQCBjb25zdCBDb250YWluZXJOb2RlKiBTdHlsZVJlc29sdmVyOjpkZXRlcm1pbmVT
Y29wZShjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkKIAogICAgIEhUTUxTdHlsZUVsZW1lbnQq
IHN0eWxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihvd25lck5vZGUp
OwogICAgIGlmICghc3R5bGVFbGVtZW50LT5zY29wZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBzdHlsZUVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk/IHN0eWxlRWxlbWVu
dC0+c2hhZG93Um9vdCgpIDogMDsKIAogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHN0eWxl
RWxlbWVudC0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKaW5kZXggNjdkZGNlYjRmYWEzZmE3ZWNkYTUzNDU3NzM2
ZmM1ZDZjZTM4ZWY0Yy4uODAwYWM1YTJjNDA1ZWQxMzQwZTRhNzY5NmVhZjIwMjA5MGEyMDcyZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5l
ci5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgorI2luY2x1ZGUgIlNo
YWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNTEsNiArNTIsNyBAQCBpbmxpbmUgSFRNTFN0eWxlRWxlbWVudDo6SFRN
TFN0eWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudAogICAg
ICwgbV9sb2FkZWRTaGVldChmYWxzZSkKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgICwg
bV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUoZmFsc2UpCisgICAgLCBtX3Njb3BlZChmYWxz
ZSkKICNlbmRpZgogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHN0eWxlVGFnKSk7CkBAIC04MCwx
NiArODIsNTcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBB
dHRyaWJ1dGUmIGF0dHJpYnV0ZSkKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkuZXJyb3JFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlz
LCBhdHRyaWJ1dGUpKTsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgIGVsc2UgaWYgKGF0
dHJpYnV0ZS5uYW1lKCkgPT0gc2NvcGVkQXR0cikgewotICAgICAgICBpZiAoIWF0dHJpYnV0ZS5p
c051bGwoKSAmJiAhbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUgJiYgaW5Eb2N1bWVudCgp
KQotICAgICAgICAgICAgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoKTsKLSAgICAgICAgZWxzZSBp
ZiAoYXR0cmlidXRlLmlzTnVsbCgpICYmIG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlKQot
ICAgICAgICAgICAgdW5yZWdpc3RlcldpdGhTY29waW5nTm9kZSgpOworICAgICAgICBpZiAoIWF0
dHJpYnV0ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHVwZGF0ZUZvclN0eWxlU2NvcGVkKCk7Cisg
ICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHVwZGF0ZUZv
clN0eWxlTm90U2NvcGVkKCk7CiAgICAgfQogI2VuZGlmCiAgICAgZWxzZQogICAgICAgICBIVE1M
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0KIAorI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCit2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnVwZGF0ZUZvclN0eWxlU2NvcGVkKCkK
K3sKKyAgICBpZiAobV9zY29wZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgcHJldmlv
dXNseVNjb3BlZCA9IG1fc2NvcGVkOworICAgIG1fc2NvcGVkID0gdHJ1ZTsKKyAgICBpZiAoIWlu
RG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTm90ZTogQXMgYW55IHN0eWxl
IGluIGEgc2hhZG93IHRyZWUgaXMgdHJlYXRlZCBhcyAic2NvcGVkIiwKKyAgICAvLyBuZWVkIHRv
IHJlbW92ZSB0aGUgc3R5bGUgZnJvbSBpdHMgc2hhZG93IHJvb3QuCisgICAgaWYgKG1faXNSZWdp
c3RlcmVkV2l0aFNjb3BpbmdOb2RlICYmICFwcmV2aW91c2x5U2NvcGVkICYmIGlzSW5TaGFkb3dU
cmVlKCkpCisgICAgICAgIHVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoc2hhZG93Um9vdCgpKTsK
KworICAgIC8vIE5vdGU6IHJlZ2lzdGVyIHdoZW46CisgICAgLy8gLSBhIHN0eWxlIGlzIGluIGRv
Y3VtZW50IGFuZCBpdHMgc2NvcGVkIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYmUgbm9uLW51bGwsIG9y
CisgICAgLy8gLSBhIHN0eWxlIGhhcyBiZWVuIGp1c3QgdW5yZWdpc3RlcmVkIGluIHRoZSBhYm92
ZSB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKHNoYWRvd1Jvb3QoKSkuCisgICAgaWYgKCFtX2lz
UmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSkKKyAgICAgICAgcmVnaXN0ZXJXaXRoU2NvcGluZ05v
ZGUocGFyZW50Tm9kZSgpKTsKK30KKwordm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp1cGRhdGVGb3JT
dHlsZU5vdFNjb3BlZCgpCit7CisgICAgaWYgKCFtX3Njb3BlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYm9vbCBwcmV2aW91c2x5U2NvcGVkID0gbV9zY29wZWQ7CisgICAgbV9zY29wZWQgPSBm
YWxzZTsKKworICAgIGlmIChtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSAmJiBwcmV2aW91
c2x5U2NvcGVkKQorICAgICAgICB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKHBhcmVudE5vZGUo
KSk7CisKKyAgICAvLyBOb3RlOiBBcyBhbnkgc3R5bGUgaW4gYSBzaGFkb3cgdHJlZSBpcyB0cmVh
dGVkIGFzICJzY29wZWQiLAorICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBzdHlsZSB0byBpdHMgc2hh
ZG93IHJvb3QuCisgICAgaWYgKCFtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSAmJiBpc0lu
U2hhZG93VHJlZSgpKQorICAgICAgICByZWdpc3RlcldpdGhTY29waW5nTm9kZShzaGFkb3dSb290
KCkpOworfQorI2VuZGlmCisKIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6ZmluaXNoUGFyc2luZ0No
aWxkcmVuKCkKIHsKICAgICBTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbih0aGlz
KTsKQEAgLTk3LDcgKzE0MCw3IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6ZmluaXNoUGFyc2lu
Z0NoaWxkcmVuKCkKIH0KIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi12b2lkIEhUTUxTdHls
ZUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKCkKK3ZvaWQgSFRNTFN0eWxlRWxlbWVu
dDo6cmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7CiAgICAg
Ly8gTm90ZTogV2UgY2Fubm90IHJlbHkgb24gdGhlICdzY29wZWQnIGVsZW1lbnQgYWxyZWFkeSBi
ZWluZyBwcmVzZW50IHdoZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZC4KICAgICAvLyBUaGVyZWZv
cmUgd2UgY2Fubm90IHJlbHkgb24gc2NvcGVkKCkhCkBAIC0xMDgsNyArMTUxLDYgQEAgdm9pZCBI
VE1MU3R5bGVFbGVtZW50OjpyZWdpc3RlcldpdGhTY29waW5nTm9kZSgpCiAgICAgaWYgKCFDb250
ZXh0RW5hYmxlZEZlYXR1cmVzOjpzdHlsZVNjb3BlZEVuYWJsZWQoZG9jdW1lbnQoKSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIENvbnRhaW5lck5vZGUqIHNjb3BlID0gcGFyZW50Tm9kZSgpOwog
ICAgIGlmICghc2NvcGUpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXNjb3BlLT5pc0VsZW1l
bnROb2RlKCkgJiYgIXNjb3BlLT5pc1NoYWRvd1Jvb3QoKSkgewpAQCAtMTU1LDggKzE5NywxMCBA
QCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxTdHlsZUVsZW1lbnQ6Omlu
c2VydGVkSW50byhDb250YWluZXJOb2RlKgogICAgIGlmIChpbnNlcnRpb25Qb2ludC0+aW5Eb2N1
bWVudCgpKSB7CiAgICAgICAgIFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoZG9j
dW1lbnQoKSwgdGhpcyk7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICAgICAgaWYgKHNj
b3BlZCgpICYmICFtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSkKLSAgICAgICAgICAgIHJl
Z2lzdGVyV2l0aFNjb3BpbmdOb2RlKCk7CisgICAgICAgIGlmICgoaXNJblNoYWRvd1RyZWUoKSB8
fCBtX3Njb3BlZCkgJiYgIW1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlKSB7CisgICAgICAg
ICAgICBDb250YWluZXJOb2RlKiBzY29wZSA9IG1fc2NvcGVkPyBwYXJlbnROb2RlKCkgOiBzaGFk
b3dSb290KCk7CisgICAgICAgICAgICByZWdpc3RlcldpdGhTY29waW5nTm9kZShzY29wZSk7Cisg
ICAgICAgIH0KICNlbmRpZgogICAgIH0KIApAQCAtMTcyLDggKzIxNiwxMiBAQCB2b2lkIEhUTUxT
dHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQog
ICAgIC8vIFRoYXQgaXMsIGJlY2F1c2Ugd2lsbFJlbW92ZSgpIGlzIGFsc28gY2FsbGVkIGlmIGFu
IGFuY2VzdG9yIGlzIHJlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQuCiAgICAgLy8gTm93LCBpZiB3
ZSB3YW50IHRvIHJlZ2lzdGVyIDxzdHlsZSBzY29wZWQ+IGV2ZW4gaWYgaXQncyBub3QgaW5Eb2N1
bWVudCwKICAgICAvLyB3ZSdkIG5lZWQgdG8gZmluZCBhIHdheSB0byBkaXNjZXJuIHdoZXRoZXIg
dGhhdCBpcyB0aGUgY2FzZSwgb3Igd2hldGhlciA8c3R5bGUgc2NvcGVkPiBpdHNlbGYgaXMgYWJv
dXQgdG8gYmUgcmVtb3ZlZC4KLSAgICBpZiAobV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUp
Ci0gICAgICAgIHVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUocGFyZW50Tm9kZSgpID8gcGFyZW50
Tm9kZSgpIDogaW5zZXJ0aW9uUG9pbnQpOworICAgIGlmIChtX2lzUmVnaXN0ZXJlZFdpdGhTY29w
aW5nTm9kZSkgeworICAgICAgICBDb250YWluZXJOb2RlKiBzY29wZSA9IHBhcmVudE5vZGUoKT8g
cGFyZW50Tm9kZSgpIDogaW5zZXJ0aW9uUG9pbnQ7CisgICAgICAgIGlmICghbV9zY29wZWQpCisg
ICAgICAgICAgICBzY29wZSA9IHNjb3BlLT5zaGFkb3dSb290KCk7CisgICAgICAgIHVucmVnaXN0
ZXJXaXRoU2NvcGluZ05vZGUoc2NvcGUpOworICAgIH0KICNlbmRpZgogCiAgICAgaWYgKGluc2Vy
dGlvblBvaW50LT5pbkRvY3VtZW50KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTdHlsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVu
dC5oCmluZGV4IDdlMzEyNTQ1NDljZmUxMWI4OWIzOWRhZWFiMGQ5YTQ5OTNiOGVlYzIuLjUzZDZl
MGI3NjRlZDQ0MWJhZTY3MDE3ZDY2MDUxOWQ5ODMwYTVmNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFN0eWxlRWxlbWVudC5oCkBAIC03NiwxNSArNzYsMTkgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWEoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OwogCi0gICAgdm9pZCByZWdpc3RlcldpdGhTY29w
aW5nTm9kZSgpOwotICAgIHZvaWQgdW5yZWdpc3RlcldpdGhTY29waW5nTm9kZSgpIHsgdW5yZWdp
c3RlcldpdGhTY29waW5nTm9kZShwYXJlbnROb2RlKCkpOyB9CisjaWYgRU5BQkxFKFNUWUxFX1ND
T1BFRCkKKyAgICB2b2lkIHVwZGF0ZUZvclN0eWxlU2NvcGVkKCk7CisgICAgdm9pZCB1cGRhdGVG
b3JTdHlsZU5vdFNjb3BlZCgpOworICAgIHZvaWQgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoQ29u
dGFpbmVyTm9kZSogc2NvcGUpOwogICAgIHZvaWQgdW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShD
b250YWluZXJOb2RlKiBzY29wZSk7CisjZW5kaWYKIAogICAgIGJvb2wgbV9maXJlZExvYWQ7CiAg
ICAgYm9vbCBtX2xvYWRlZFNoZWV0OwogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBi
b29sIG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlOworICAgIGJvb2wgbV9zY29wZWQ7CiAj
ZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCA2NjE2YzE2OGMwYTliM2RjZjllOGVlNzk2YzAyY2JjMjdlNDA2
MmUwLi42MGI0ZjUxZmM5MDJiNzZjM2E3ODkxNGU4OWJjYTI2YzQyNmMxYThhIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTItMDYtMDQgIFRha2FzaGkgU2FrYW1vdG8gIDx0YXNha0Bnb29nbGUu
Y29tPgorCisgICAgICAgIFtTaGFkb3cgRE9NXSA8c3R5bGU+IGluc2lkZSBTaGFkb3cgc3VidHJl
ZSBzaG91bGQgYmUgc2NvcGVkIGluc2lkZSB0aGUgc3VidHJlZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3ODA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvcmVn
aXN0ZXJpbmctc2hhZG93cm9vdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNoYWRvd3Jvb3QuaHRtbDoKKyAgICAgICAgKiBmYXN0L2Nz
cy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWNoYW5nZS1zY29wZWQtaW4tc2hhZG93LWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNj
b3BlZC1jaGFuZ2Utc2NvcGVkLWluLXNoYWRvdy5odG1sOiBBZGRlZC4KKwogMjAxMi0wNi0wMyAg
SGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3VwcG9ydHMgdHJh
dmVyc2luZyBub2RlcyBpbiBhbiBvcnBoYW5lZCBzaGFkb3cgc3VidHJlZSBpbiBDb21wb3NlZFNo
YWRvd1RyZWVQYXJlbnRXYWxrZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQvcmVnaXN0ZXJpbmctc2hhZG93cm9vdC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvcmVnaXN0ZXJpbmctc2hhZG93cm9vdC1leHBlY3Rl
ZC50eHQKaW5kZXggODQyZTk4ZjcxMTc2MjQwMDVlZDMxMzQ5ZWUwNzdiM2NiMDk0NzNkNC4uYWJi
YmJlNGE2YjZjZGNhYjA1ZWIwOWEyMDM1MDI5OGFkYjBjNWJhYyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNoYWRvd3Jvb3QtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9yZWdpc3Rlcmlu
Zy1zaGFkb3dyb290LWV4cGVjdGVkLnR4dApAQCAtMTQsNyArMTQsNyBAQCBQQVNTIGludGVybmFs
cy5udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKGhvc3QpIGlzIDAKIFBBU1MgaW50ZXJu
YWxzLm51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oc3IpIGlzIDEKIC0tLSBVbnNldHRp
bmcgQHNjb3BlZCAtLS0KIFBBU1MgaW50ZXJuYWxzLm51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hp
bGRyZW4oaG9zdCkgaXMgMAotUEFTUyBpbnRlcm5hbHMubnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVD
aGlsZHJlbihzcikgaXMgMAorUEFTUyBpbnRlcm5hbHMubnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVD
aGlsZHJlbihzcikgaXMgMQogLS0tIFNldHRpbmcgQHNjb3BlZCAtLS0KIFBBU1MgaW50ZXJuYWxz
Lm51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oaG9zdCkgaXMgMAogUEFTUyBpbnRlcm5h
bHMubnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbihzcikgaXMgMQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNoYWRvd3Jvb3Qu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9yZWdpc3RlcmluZy1zaGFk
b3dyb290Lmh0bWwKaW5kZXggOWI0YzU0NzM0Y2IxNmEwNGZlNmY3Y2FkMTE5NTk2MWU1ZDgwNjg4
NS4uMzI5YzgyMjBjNWY0MGJlZjRjZWFhODc0NzNhNTI3NDY2MDRhMzFhOSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNoYWRvd3Jvb3Qu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvcmVnaXN0ZXJpbmct
c2hhZG93cm9vdC5odG1sCkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiLS0t
IFVuc2V0dGluZyBAc2NvcGVkIC0tLSIpOwogICAgICAgICAgICAgc3R5bGUuc2NvcGVkID0gZmFs
c2U7CiAgICAgICAgICAgICBzaG91bGRCZSgiaW50ZXJuYWxzLm51bWJlck9mU2NvcGVkSFRNTFN0
eWxlQ2hpbGRyZW4oaG9zdCkiLCAiMCIpOwotICAgICAgICAgICAgc2hvdWxkQmUoImludGVybmFs
cy5udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKHNyKSIsICIwIik7IC8qIDxzdHlsZT4g
aW4gc2hhZG93LCBub3Qgc2NvcGVkICovCisgICAgICAgICAgICBzaG91bGRCZSgiaW50ZXJuYWxz
Lm51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oc3IpIiwgIjEiKTsgLyogPHN0eWxlPiBp
biBzaGFkb3csIG5vdCBzY29wZWQgKi8KIAogICAgICAgICAgICAgZGVidWcoIi0tLSBTZXR0aW5n
IEBzY29wZWQgLS0tIik7CiAgICAgICAgICAgICBzdHlsZS5zY29wZWQgPSB0cnVlOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1jaGFu
Z2Utc2NvcGVkLWluLXNoYWRvdy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWNoYW5nZS1zY29wZWQtaW4tc2hhZG93LWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wYmU2YjZjM2I4OGZjMWNhZmU2NmZiYWFmNTI1MmM3YWQyMGFmN2I5
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0
eWxlLXNjb3BlZC1jaGFuZ2Utc2NvcGVkLWluLXNoYWRvdy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwyMyBAQAorUEFTUyB3aW5kb3cuaW50ZXJuYWxzIGlzIGRlZmluZWQuCitQQVNTIHdpbmRvdy5p
bnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdCBpcyBkZWZpbmVkLgorUEFTUyBXZWJLaXRTaGFkb3dS
b290IGlzIGRlZmluZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKK0U6IHJnYigyNTUsIDAsIDApCitFOiAxcHggc29saWQgcmdiKDAsIDAsIDI1NSkK
K0Y6IHJnYigwLCAwLCAwKQorRjogMXB4IHNvbGlkIHJnYigwLCAwLCAyNTUpCitFOiByZ2IoMjU1
LCAwLCAwKQorRTogMXB4IHNvbGlkIHJnYigwLCAwLCAyNTUpCitGOiByZ2IoMCwgMCwgMCkKK0Y6
IDFweCBzb2xpZCByZ2IoMCwgMCwgMjU1KQorRTogcmdiKDI1NSwgMCwgMCkKK0U6IDFweCBzb2xp
ZCByZ2IoMCwgMCwgMjU1KQorRjogcmdiKDI1NSwgMCwgMCkKK0Y6IDFweCBzb2xpZCByZ2IoMCwg
MCwgMjU1KQorRTogcmdiKDI1NSwgMCwgMCkKK0U6IDFweCBzb2xpZCByZ2IoMCwgMCwgMjU1KQor
RjogcmdiKDI1NSwgMCwgMCkKK0Y6IDFweCBzb2xpZCByZ2IoMCwgMCwgMjU1KQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWNoYW5n
ZS1zY29wZWQtaW4tc2hhZG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29w
ZWQvc3R5bGUtc2NvcGVkLWNoYW5nZS1zY29wZWQtaW4tc2hhZG93Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjFiZDZkMzIyYWE2MjYzNDZhOTcyMDEyNzAwYTU2MzVlZGIyOThiMAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtY2hhbmdl
LXNjb3BlZC1pbi1zaGFkb3cuaHRtbApAQCAtMCwwICsxLDYwIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9kb20vc2hhZG93L3Jlc291cmNl
cy9wb2x5ZmlsbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3No
b3VsZEJlRGVmaW5lZCgid2luZG93LmludGVybmFscyIpOworc2hvdWxkQmVEZWZpbmVkKCJ3aW5k
b3cuaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3QiKTsKK3Nob3VsZEJlRGVmaW5lZCgiV2ViS2l0
U2hhZG93Um9vdCIpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB2YXIgYSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJBIik7CisgICAgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3Qo
YSk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGUgc2NvcGVkIGlkPSdzdHlsZS1pbi1z
aGFkb3cxJz5kaXYgeyBib3JkZXI6IDFweCBzb2xpZCBibHVlOyB9PC9zdHlsZT48ZGl2PjxzdHls
ZSBzY29wZWQgaWQ9J3N0eWxlLWluLXNoYWRvdzInPmRpdiB7IGNvbG9yOiByZWQ7IH08L3N0eWxl
PjxkaXYgaWQ9J0UnPkVFRTwvZGl2PjwvZGl2PjxkaXYgaWQ9J0YnPkZGRjwvZGl2PiI7CisgICAg
ZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworCisgICAgc3R5bGVJblNoYWRvdzIgPSBzaGFkb3cu
Z2V0RWxlbWVudEJ5SWQoInN0eWxlLWluLXNoYWRvdzIiKTsKKyAgICB2YXIgZSA9IHNoYWRvdy5n
ZXRFbGVtZW50QnlJZCgiRSIpOworICAgIHZhciBmID0gc2hhZG93LmdldEVsZW1lbnRCeUlkKCJG
Iik7CisKKyAgICBkZWJ1ZygiRTogIiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVk
U3R5bGUoZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7IC8qIHJlZCAqLworICAg
IGRlYnVnKCJFOiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlLCBu
dWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXInKSk7IC8qIGJsdWUgMXB4IGJvcmRlciAqLwor
ICAgIGRlYnVnKCJGOiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShm
LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsgLyogYmxhY2sgKi8KKyAgICBkZWJ1
ZygiRjogIiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZSwgbnVsbCku
Z2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyJykpOyAvKiBibHVlIDFweCBib3JkZXIgKi8KKworICAg
IHN0eWxlSW5TaGFkb3cyLnNldEF0dHJpYnV0ZSgic2NvcGVkIiwgInNjb3BlZCIpOworICAgIGRl
YnVnKCJFOiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlLCBudWxs
KS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsgLyogcmVkICovCisgICAgZGVidWcoIkU6ICIg
KyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGUsIG51bGwpLmdldFByb3Bl
cnR5VmFsdWUoJ2JvcmRlcicpKTsgLyogYmx1ZSAxcHggYm9yZGVyICovCisgICAgZGVidWcoIkY6
ICIgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGYsIG51bGwpLmdldFBy
b3BlcnR5VmFsdWUoJ2NvbG9yJykpOyAvKiBibGFjayAqLworICAgIGRlYnVnKCJGOiAiICsgZG9j
dW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlLCBudWxsKS5nZXRQcm9wZXJ0eVZh
bHVlKCdib3JkZXInKSk7IC8qIGJsdWUgMXB4IGJvcmRlciAqLworICAgIGRvY3VtZW50LmJvZHku
b2Zmc2V0TGVmdDsKKworICAgIHN0eWxlSW5TaGFkb3cyLnJlbW92ZUF0dHJpYnV0ZSgic2NvcGVk
Iik7CisgICAgZGVidWcoIkU6ICIgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0
eWxlKGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOyAvKiByZWQgKi8KKyAgICBk
ZWJ1ZygiRTogIiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZSwgbnVs
bCkuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyJykpOyAvKiBibHVlIDFweCBib3JkZXIgKi8KKyAg
ICBkZWJ1ZygiRjogIiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZiwg
bnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7IC8qIHJlZCAqLworICAgIGRlYnVnKCJG
OiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlLCBudWxsKS5nZXRQ
cm9wZXJ0eVZhbHVlKCdib3JkZXInKSk7IC8qIGJsdWUgMXB4IGJvcmRlciAqLworICAgIGRvY3Vt
ZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIHN0eWxlSW5TaGFkb3cxID0gc2hhZG93LmdldEVs
ZW1lbnRCeUlkKCJzdHlsZS1pbi1zaGFkb3cxIik7CisgICAgc3R5bGVJblNoYWRvdzEucmVtb3Zl
QXR0cmlidXRlKCJzY29wZWQiKTsKKyAgICBkZWJ1ZygiRTogIiArIGRvY3VtZW50LmRlZmF1bHRW
aWV3LmdldENvbXB1dGVkU3R5bGUoZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7
IC8qIHJlZCAqLworICAgIGRlYnVnKCJFOiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29t
cHV0ZWRTdHlsZShlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXInKSk7IC8qIGJsdWUg
MXB4IGJvcmRlciAqLworICAgIGRlYnVnKCJGOiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0
Q29tcHV0ZWRTdHlsZShmLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsgLyogcmVk
ICovCisgICAgZGVidWcoIkY6ICIgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0
eWxlKGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlcicpKTsgLyogYmx1ZSAxcHggYm9y
ZGVyICovCisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworfQorPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keSBvbmxvYWQ9InRlc3QoKSI+CisgIDxkaXYgaWQ9IkEiPgorICAgIEFBQQorICA8
L2Rpdj4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145728</attachid>
            <date>2012-06-05 01:50:44 -0700</date>
            <delta_ts>2012-06-07 20:50:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87805-20120605175043.patch</filename>
            <type>text/plain</type>
            <size>28579</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzJkNzMwYTIzNGQwNzFl
YWM3NDFkZGQxYzk0YTM0ZDY3M2Q1OWFhYS4uMTI1MDNkZmUzZDNkMTMxMWEyOWI3MTIwMTcwMmE2
YTZiNGQ1ZGMyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTA2LTA0ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0g
PHN0eWxlPiBpbnNpZGUgU2hhZG93IHN1YnRyZWUgc2hvdWxkIGJlIHNjb3BlZCBpbnNpZGUgdGhl
IHN1YnRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04NzgwNQorCisgICAgICAgIE1vZGlmaWVkIGFueSBzdHlsZSBpbiBzaGFkb3cgc3VidHJlZSB0
byBiZSB0cmVhdGVkIGFzIGEgc2NvcGVkIHN0eWxlCisgICAgICAgIGluZGVwZW5kZW50IG9mIGl0
cyAic2NvcGVkIiBhdHRyaWJ1dGUncyB2YWx1ZS4gVGhpcyBjaGFuZ2UgaXMgdGhlCisgICAgICAg
IGZpcnN0IHN0ZXAgZm9yIGZpeGluZyBzdHlsZSBzY29wZSBidWcsIGkuZS4gYSBzdHlsZSBpbiBz
aGFkb3cgc3VidHJlZQorICAgICAgICBjYW4gYmUgYXBwbGllZCB0byBhbiBlbGVtZW50IGluIGRv
Y3VtZW50IHRyZWUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdDogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1jaGFuZ2Utc2Nv
cGVkLWluLXNoYWRvdy5odG1sCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkZXRlcm1pbmVTY29wZSk6CisgICAgICAg
IE1vZGlmaWVkIHRvIHJldHVybiBhIHNoYWRvdyByb290IGlmIGEgdGFyZ2V0ZWQgc3R5bGVzaGVl
dCBvd25lciBub2RlIGlzCisgICAgICAgIG5vdCBzY29wZWQgYnV0IGluIHNvbWUgc2hhZG93IERP
TSBzdWJ0cmVlLgorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgTW9k
aWZpZWQgdG8gdXNlIHRoZSBiZWxvdyB1cGRhdGVGb3JTdHlsZVNjb3BlZCBhbmQKKyAgICAgICAg
dXBkYXRlRm9yU3R5bGVOb3RTY29wZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVt
ZW50Ojp1cGRhdGVGb3JTdHlsZVNjb3BlZCk6CisgICAgICAgIE5ld2x5IGFkZGVkLiBUaGlzIG1l
dGhvZCBpcyBmb3IgdXBkYXRpbmcgYSBzdHlsZSdzIHNjb3BlIHdoZW4gc2NvcGVkCisgICAgICAg
IGF0dHJpYnV0ZSBpcyBzZXQgdG8gYmUgdHJ1ZS4gQ3VycmVudGx5IHRoZXJlIGFyZSB0aGUgZm9s
bG93aW5nIGZvdXIKKyAgICAgICAgY2FzZXM6CisgICAgICAgIDEsIHRoZSBzdHlsZSBpcyAic2Nv
cGVkIiBhbmQgaXMgaW4gZG9jdW1lbnQgdHJlZSwKKyAgICAgICAgMiwgdGhlIHN0eWxlIGlzICJz
Y29wZWQiIGFuZCBpcyBpbiBzaGFkb3cgc3VidHJlZSwKKyAgICAgICAgMywgdGhlIHN0eWxlIGlz
IG5vdCAic2NvcGVkIiBhbmQgaXMgaW4gZG9jdW1lbnQgdHJlZSwgYW5kCisgICAgICAgIDQsIHRo
ZSBzdHlsZSBpcyBub3QgInNjb3BlZCIgYW5kIGlzIGluIHNoYWRvdyBzdWJ0cmVlLgorICAgICAg
ICBJZiB0aGUgc3R5bGUgaXMgbm90IGluIGRvY3VtZW50LCBqdXN0IHVwZGF0aW5nIG9ubHkgbV9z
Y29wZWQuCisgICAgICAgIEFuZCB0aGlzIG1ldGhvZCB0cmVhdHMgdGhlIGNhc2UgMyB0byAxIGFu
ZCA0IHRvIDIuIEluIGJvdGggY2FzZSwKKyAgICAgICAgdGhlIHN0eWxlIG11c3QgYmUgcmVnaXN0
ZXJlZCB3aXRoIHNjb3Bpbmcgbm9kZS4gSG93ZXZlcgorICAgICAgICBpbiA0IHRvIDIsIHRoZSBz
dHlsZSBoYXMgYmVlbiBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBzaGFkb3cgcm9vdC4KKyAgICAg
ICAgU28gZmlyc3RseSB0aGUgc3R5bGUgbXVzdCBiZSB1bnJlZ2lzdGVyZWQgd2l0aCBzaGFkb3cg
cm9vdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnVwZGF0ZUZvclN0eWxl
Tm90U2NvcGVkKToKKyAgICAgICAgTmV3bHkgYWRkZWQuIFRoaXMgbWV0aG9kIGlzIGZvciB1cGRh
dGluZyBhIHN0eWxlJ3Mgc2NvcGUgd2hlbiBzY29wZWQKKyAgICAgICAgYXR0cmlidXRlIGlzIHNl
dCB0byBiZSBudWxsLCBpLmUuIGZhbHNlLiBUaGUgbWV0aG9kIHRyZWF0cworICAgICAgICB0aGUg
Y2FzZSAxIHRvIDMgYW5kIDIgdG8gNC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1l
bnQ6OnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKToKKyAgICAgICAgQWRkZWQgb25lIG1vcmUgYXJn
dW1lbnQgd2hpY2ggZGVzY3JpYmVzIGEgc2NvcGluZyBub2RlLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgTW9kaWZpZWQgdG8gaW52
b2tlIHJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlIHdoZW4gYW4gZWxlbWVudCBpcyBub3QKKyAgICAg
ICAgc2NvcGVkIGJ1dCBpbiBzb21lIHNoYWRvdyBzdWJ0cmVlLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICBNb2RpZmllZCB0byBpbnZv
a2UgdW5yZWdpc3RlcldpdGhTY29waW5nTm9kZSB3aGVuIGFuIGVsZW1lbnQgaXMgbm90CisgICAg
ICAgIHNjb3BlZCBidXQgaW4gc29tZSBzaGFkb3cgc3VidHJlZS4KKyAgICAgICAgKiBodG1sL0hU
TUxTdHlsZUVsZW1lbnQuaDoKKyAgICAgICAgKEhUTUxTdHlsZUVsZW1lbnQpOgorICAgICAgICBB
ZGRlZCBhIG5ldyBtZW1iZXIgdmFyaWFibGU6IG1fc2NvcGVkIGZvciBjaGVja2luZyB3aGV0aGVy
IHNjb3BlZCBvcgorICAgICAgICBub3QuIEluc3RlYWQsIHJlbW92ZWQgbV9pc1JlZ2lzdGVyZWRX
aXRoU2NvcGluZ05vZGUuIE5vdyBpbkRvY3VtZW50KCksCisgICAgICAgIGlzSW5TaGFkb3dUcmVl
KCkgYW5kIG1fc2NvcGVkIGFyZSB1c2VkIHRvIGZpbmQgd2hldGhlciBhIHN0eWxlIGVsZW1lbnQK
KyAgICAgICAgaXMgcmVnaXN0ZXJlZCBhcyAic2NvcGVkIiBvciBub3QuCisKIDIwMTItMDYtMDUg
IEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJv
bWl1bV0gSW1wbGVtZW50IGZvbnQgc2hhcGluZyB3aXRoIGZvbnQtZmVhdHVyZS1zZXR0aW5ncyBv
biBNYWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCBmN2E0YzZiNDBhOGNi
OGM5OTM0N2QxZTFjNThlNzM2MTQzMDkyOGQzLi5hYTk0MTU4NDFhMzlkNDA5NWQ3YWVkNDIwODA3
MjI0MGIxYmI0MmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC00OTks
NyArNDk5LDcgQEAgY29uc3QgQ29udGFpbmVyTm9kZSogU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5l
U2NvcGUoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQpCiAKICAgICBIVE1MU3R5bGVFbGVtZW50
KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3duZXJOb2Rl
KTsKICAgICBpZiAoIXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5pc0luU2hhZG93VHJlZSgpPyBzdHlsZUVsZW1l
bnQtPnNoYWRvd1Jvb3QoKSA6IDA7CiAKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBzdHls
ZUVsZW1lbnQtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCmluZGV4IDY3ZGRjZWI0ZmFhM2ZhN2VjZGE1MzQ1Nzcz
NmZjNWQ2Y2UzOGVmNGMuLmE4OGRmNjVkNWNlYzdlMzQ1NDk5YjE3MDFlNjdlMzMyNmMwMTVkNzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVu
ZXIuaCIKICNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJT
aGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTUwLDcgKzUxLDcgQEAgaW5saW5lIEhUTUxTdHlsZUVsZW1lbnQ6OkhU
TUxTdHlsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQKICAg
ICAsIG1fZmlyZWRMb2FkKGZhbHNlKQogICAgICwgbV9sb2FkZWRTaGVldChmYWxzZSkKICNpZiBF
TkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICwgbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUo
ZmFsc2UpCisgICAgLCBtX3Njb3BlZChmYWxzZSkKICNlbmRpZgogewogICAgIEFTU0VSVChoYXNU
YWdOYW1lKHN0eWxlVGFnKSk7CkBAIC01OCw4ICs1OSw2IEBAIGlubGluZSBIVE1MU3R5bGVFbGVt
ZW50OjpIVE1MU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50CiAKIEhUTUxTdHlsZUVsZW1lbnQ6On5IVE1MU3R5bGVFbGVtZW50KCkKIHsKLSAgICAvLyBE
dXJpbmcgdGVhci1kb3duLCB3aWxsUmVtb3ZlIGlzbid0IGNhbGxlZCwgc28gbV9pc1JlZ2lzdGVy
ZWRXaXRoU2NvcGluZ05vZGUgbWF5IHN0aWxsIGJlIHNldCBoZXJlLgotICAgIC8vIFRoZXJlZm9y
ZSB3ZSBjYW4ndCBBU1NFUlQoIW1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlKS4KICAgICBT
dHlsZUVsZW1lbnQ6OmNsZWFyRG9jdW1lbnREYXRhKGRvY3VtZW50KCksIHRoaXMpOwogCiAgICAg
c3R5bGVMb2FkRXZlbnRTZW5kZXIoKS5jYW5jZWxFdmVudCh0aGlzKTsKQEAgLTc5LDE3ICs3OCw0
NiBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0
ZSYgYXR0cmlidXRlKQogICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5uYW1lKCkgPT0gb25lcnJvckF0
dHIpCiAgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmVycm9y
RXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cmlidXRlKSk7CiAj
aWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBlbHNlIGlmIChhdHRyaWJ1dGUubmFtZSgpID09
IHNjb3BlZEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGUuaXNOdWxsKCkgJiYgIW1faXNS
ZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlICYmIGluRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHJl
Z2lzdGVyV2l0aFNjb3BpbmdOb2RlKCk7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5pc051
bGwoKSAmJiBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSkKLSAgICAgICAgICAgIHVucmVn
aXN0ZXJXaXRoU2NvcGluZ05vZGUoKTsKLSAgICB9CisgICAgZWxzZSBpZiAoYXR0cmlidXRlLm5h
bWUoKSA9PSBzY29wZWRBdHRyKQorICAgICAgICBzdHlsZVNjb3BlZFVwZGF0ZWQoIWF0dHJpYnV0
ZS5pc051bGwoKSk7CiAjZW5kaWYKICAgICBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJz
ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpOwogfQogCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKK3Zv
aWQgSFRNTFN0eWxlRWxlbWVudDo6c3R5bGVTY29wZWRVcGRhdGVkKGJvb2wgc2NvcGVkKQorewor
ICAgIGlmIChzY29wZWQgPT0gbV9zY29wZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wg
cHJldmlvdXNseVNjb3BlZCA9IG1fc2NvcGVkOworICAgIG1fc2NvcGVkID0gc2NvcGVkOworICAg
IGlmICghaW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc2NvcGVkKSB7
CisgICAgICAgIC8vIE5vdGU6IEFzIGFueSBzdHlsZSBpbiBhIHNoYWRvdyB0cmVlIGlzIHRyZWF0
ZWQgYXMgInNjb3BlZCIsCisgICAgICAgIC8vIG5lZWQgdG8gcmVtb3ZlIHRoZSBzdHlsZSBmcm9t
IGl0cyBzaGFkb3cgcm9vdC4KKyAgICAgICAgaWYgKCFwcmV2aW91c2x5U2NvcGVkICYmIGlzSW5T
aGFkb3dUcmVlKCkpCisgICAgICAgICAgICB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKHNoYWRv
d1Jvb3QoKSk7CisKKyAgICAgICAgLy8gQmVjYXVzZSBvZiBzY29wZWQsIGhhdmUgdG8gcmVnaXN0
ZXIgdGhlIHN0eWxlIHdpdGggaXRzIHBhcmVudCBub2RlLgorICAgICAgICByZWdpc3RlcldpdGhT
Y29waW5nTm9kZShwYXJlbnROb2RlKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHRo
ZSBzdHlsZSB3YXMgc2NvcGVkLCBuZWVkIHRvIHJlbW92ZSB0aGUgc3R5bGUgZnJvbSB0aGUgc2Nv
cGluZworICAgICAgICAvLyBlbGVtZW50LCBpLmUuIHRoZSBwYXJlbnQgbm9kZS4KKyAgICAgICAg
aWYgKHByZXZpb3VzbHlTY29wZWQpCisgICAgICAgICAgICB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdO
b2RlKHBhcmVudE5vZGUoKSk7CisKKyAgICAgICAgLy8gTm90ZTogQXMgYW55IHN0eWxlIGluIGEg
c2hhZG93IHRyZWUgaXMgdHJlYXRlZCBhcyAic2NvcGVkIiwKKyAgICAgICAgLy8gbmVlZCB0byBh
ZGQgdGhlIHN0eWxlIHRvIGl0cyBzaGFkb3cgcm9vdC4KKyAgICAgICAgaWYgKGlzSW5TaGFkb3dU
cmVlKCkpCisgICAgICAgICAgICByZWdpc3RlcldpdGhTY29waW5nTm9kZShzaGFkb3dSb290KCkp
OworICAgIH0KK30KKyNlbmRpZgorCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNp
bmdDaGlsZHJlbigpCiB7CiAgICAgU3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4o
dGhpcyk7CkBAIC05NywxOCArMTI1LDEyIEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6ZmluaXNo
UGFyc2luZ0NoaWxkcmVuKCkKIH0KIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi12b2lkIEhU
TUxTdHlsZUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKCkKK3ZvaWQgSFRNTFN0eWxl
RWxlbWVudDo6cmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7
Ci0gICAgLy8gTm90ZTogV2UgY2Fubm90IHJlbHkgb24gdGhlICdzY29wZWQnIGVsZW1lbnQgYWxy
ZWFkeSBiZWluZyBwcmVzZW50IHdoZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZC4KLSAgICAvLyBU
aGVyZWZvcmUgd2UgY2Fubm90IHJlbHkgb24gc2NvcGVkKCkhCi0gICAgQVNTRVJUKCFtX2lzUmVn
aXN0ZXJlZFdpdGhTY29waW5nTm9kZSk7CiAgICAgQVNTRVJUKGluRG9jdW1lbnQoKSk7Ci0gICAg
aWYgKG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlKQotICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFDb250ZXh0RW5hYmxlZEZlYXR1cmVzOjpzdHlsZVNjb3BlZEVuYWJsZWQoZG9jdW1lbnQo
KSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENvbnRhaW5lck5vZGUqIHNjb3BlID0gcGFyZW50
Tm9kZSgpOwogICAgIGlmICghc2NvcGUpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXNjb3Bl
LT5pc0VsZW1lbnROb2RlKCkgJiYgIXNjb3BlLT5pc1NoYWRvd1Jvb3QoKSkgewpAQCAtMTIyLDE3
ICsxNDQsMTAgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpyZWdpc3RlcldpdGhTY29waW5nTm9k
ZSgpCiAgICAgc2NvcGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICBpZiAoaW5Eb2N1bWVu
dCgpICYmICFkb2N1bWVudCgpLT5wYXJzaW5nKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkK
ICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHls
ZSk7Ci0KLSAgICBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSA9IHRydWU7CiB9CiAKIHZv
aWQgSFRNTFN0eWxlRWxlbWVudDo6dW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShDb250YWluZXJO
b2RlKiBzY29wZSkKIHsKLSAgICAvLyBOb3RlOiBXZSBjYW5ub3QgcmVseSBvbiB0aGUgJ3Njb3Bl
ZCcgZWxlbWVudCBzdGlsbCBiZWluZyBwcmVzZW50IHdoZW4gdGhpcyBtZXRob2QgaXMgaW52b2tl
ZC4KLSAgICAvLyBUaGVyZWZvcmUgd2UgY2Fubm90IHJlbHkgb24gc2NvcGVkKCkhCi0gICAgQVNT
RVJUKG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlIHx8ICFDb250ZXh0RW5hYmxlZEZlYXR1
cmVzOjpzdHlsZVNjb3BlZEVuYWJsZWQoZG9jdW1lbnQoKSkpOwotICAgIGlmICghbV9pc1JlZ2lz
dGVyZWRXaXRoU2NvcGluZ05vZGUpCi0gICAgICAgIHJldHVybjsKICAgICBpZiAoIUNvbnRleHRF
bmFibGVkRmVhdHVyZXM6OnN0eWxlU2NvcGVkRW5hYmxlZChkb2N1bWVudCgpKSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0xNDQsOCArMTU5LDYgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp1bnJl
Z2lzdGVyV2l0aFNjb3BpbmdOb2RlKENvbnRhaW5lck5vZGUqIHNjb3BlKQogICAgIH0KICAgICBp
ZiAoaW5Eb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5wYXJzaW5nKCkgJiYgZG9jdW1lbnQoKS0+
cmVuZGVyZXIoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVm
ZXJSZWNhbGNTdHlsZSk7Ci0KLSAgICBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSA9IGZh
bHNlOwogfQogI2VuZGlmCiAKQEAgLTE1NSw4ICsxNjgsMTAgQEAgTm9kZTo6SW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCBIVE1MU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVy
Tm9kZSoKICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSkgewogICAgICAgICBT
dHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KGRvY3VtZW50KCksIHRoaXMpOwogI2lm
IEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgICAgIGlmIChzY29wZWQoKSAmJiAhbV9pc1JlZ2lz
dGVyZWRXaXRoU2NvcGluZ05vZGUpCi0gICAgICAgICAgICByZWdpc3RlcldpdGhTY29waW5nTm9k
ZSgpOworICAgICAgICBpZiAoaXNJblNoYWRvd1RyZWUoKSB8fCBtX3Njb3BlZCkgeworICAgICAg
ICAgICAgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBtX3Njb3BlZD8gcGFyZW50Tm9kZSgpIDogc2hh
ZG93Um9vdCgpOworICAgICAgICAgICAgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoc2NvcGUpOwor
ICAgICAgICB9CiAjZW5kaWYKICAgICB9CiAKQEAgLTE2NywxNyArMTgyLDE3IEBAIHZvaWQgSFRN
TFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQp
CiB7CiAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKIAorICAg
IGlmIChpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVudCgpKSB7CiAjaWYgRU5BQkxFKFNUWUxFX1ND
T1BFRCkKLSAgICAvLyBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgPHN0eWxlIHNjb3Bl
ZD4gaXMgb25seSByZWdpc3RlcmVkIGlmIHRoZSBub2RlIGlzIGluIHRoZSBkb2N1bWVudC4KLSAg
ICAvLyBUaGF0IGlzLCBiZWNhdXNlIHdpbGxSZW1vdmUoKSBpcyBhbHNvIGNhbGxlZCBpZiBhbiBh
bmNlc3RvciBpcyByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50LgotICAgIC8vIE5vdywgaWYgd2Ug
d2FudCB0byByZWdpc3RlciA8c3R5bGUgc2NvcGVkPiBldmVuIGlmIGl0J3Mgbm90IGluRG9jdW1l
bnQsCi0gICAgLy8gd2UnZCBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gZGlzY2VybiB3aGV0aGVyIHRo
YXQgaXMgdGhlIGNhc2UsIG9yIHdoZXRoZXIgPHN0eWxlIHNjb3BlZD4gaXRzZWxmIGlzIGFib3V0
IHRvIGJlIHJlbW92ZWQuCi0gICAgaWYgKG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlKQot
ICAgICAgICB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKHBhcmVudE5vZGUoKSA/IHBhcmVudE5v
ZGUoKSA6IGluc2VydGlvblBvaW50KTsKKyAgICAgICAgaWYgKGluc2VydGlvblBvaW50LT5pc0lu
U2hhZG93VHJlZSgpIHx8IG1fc2NvcGVkKSB7CisgICAgICAgICAgICBDb250YWluZXJOb2RlKiBz
Y29wZSA9IHBhcmVudE5vZGUoKT8gcGFyZW50Tm9kZSgpIDogaW5zZXJ0aW9uUG9pbnQ7CisgICAg
ICAgICAgICBpZiAoIW1fc2NvcGVkKQorICAgICAgICAgICAgICAgIHNjb3BlID0gc2NvcGUtPnNo
YWRvd1Jvb3QoKTsKKyAgICAgICAgICAgIHVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoc2NvcGUp
OworICAgICAgICB9CiAjZW5kaWYKLQotICAgIGlmIChpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVu
dCgpKQogICAgICAgICBTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoZG9jdW1lbnQo
KSwgdGhpcyk7CisgICAgfQogfQogCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hh
bmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRl
ckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVF
bGVtZW50LmgKaW5kZXggN2UzMTI1NDU0OWNmZTExYjg5YjM5ZGFlYWIwZDlhNDk5M2I4ZWVjMi4u
N2YzNzBlMTIxMmMyMGZiY2MyMzE4OGMzZmNmNDNhMTI1NTlhYjRiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU3R5bGVFbGVtZW50LmgKQEAgLTc2LDE1ICs3NiwxNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHJlZ2lzdGVyV2l0
aFNjb3BpbmdOb2RlKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKCkgeyB1
bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKHBhcmVudE5vZGUoKSk7IH0KKyNpZiBFTkFCTEUoU1RZ
TEVfU0NPUEVEKQorICAgIHZvaWQgc3R5bGVTY29wZWRVcGRhdGVkKGJvb2wpOworICAgIHZvaWQg
cmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoQ29udGFpbmVyTm9kZSogc2NvcGUpOwogICAgIHZvaWQg
dW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShDb250YWluZXJOb2RlKiBzY29wZSk7CisjZW5kaWYK
IAogICAgIGJvb2wgbV9maXJlZExvYWQ7CiAgICAgYm9vbCBtX2xvYWRlZFNoZWV0OwogCiAjaWYg
RU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBib29sIG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdO
b2RlOworICAgIGJvb2wgbV9zY29wZWQ7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0MGEzNTIwNTc5
YjZmNTk5MzFhYTM1ZTc2ODQ3NTEwYmU5ZGE4OTRiLi5hZDYxYjY4ZmYzYmNiNTlmMzU4MmEzNGI0
Y2Q5YjkxMTkxNWYzODE4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDYtMDQgIFRha2Fz
aGkgU2FrYW1vdG8gIDx0YXNha0Bnb29nbGUuY29tPgorCisgICAgICAgIFtTaGFkb3cgRE9NXSA8
c3R5bGU+IGluc2lkZSBTaGFkb3cgc3VidHJlZSBzaG91bGQgYmUgc2NvcGVkIGluc2lkZSB0aGUg
c3VidHJlZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg3ODA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvcmVnaXN0ZXJpbmctc2hhZG93cm9vdC1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNoYWRvd3Jv
b3QuaHRtbDoKKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWNo
YW5nZS1zY29wZWQtaW4tc2hhZG93LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1jaGFuZ2Utc2NvcGVkLWluLXNoYWRvdy5o
dG1sOiBBZGRlZC4KKwogMjAxMi0wNi0wNSAgS2VuaWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBJbXBsZW1lbnQgZm9udCBzaGFwaW5nIHdp
dGggZm9udC1mZWF0dXJlLXNldHRpbmdzIG9uIE1hYwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNoYWRvd3Jvb3QtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNoYWRvd3Jv
b3QtZXhwZWN0ZWQudHh0CmluZGV4IDg0MmU5OGY3MTE3NjI0MDA1ZWQzMTM0OWVlMDc3YjNjYjA5
NDczZDQuLmFiYmJiZTRhNmI2Y2RjYWIwNWViMDlhMjAzNTAyOThhZGIwYzViYWMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9yZWdpc3RlcmluZy1zaGFkb3dy
b290LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQv
cmVnaXN0ZXJpbmctc2hhZG93cm9vdC1leHBlY3RlZC50eHQKQEAgLTE0LDcgKzE0LDcgQEAgUEFT
UyBpbnRlcm5hbHMubnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbihob3N0KSBpcyAwCiBQ
QVNTIGludGVybmFscy5udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKHNyKSBpcyAxCiAt
LS0gVW5zZXR0aW5nIEBzY29wZWQgLS0tCiBQQVNTIGludGVybmFscy5udW1iZXJPZlNjb3BlZEhU
TUxTdHlsZUNoaWxkcmVuKGhvc3QpIGlzIDAKLVBBU1MgaW50ZXJuYWxzLm51bWJlck9mU2NvcGVk
SFRNTFN0eWxlQ2hpbGRyZW4oc3IpIGlzIDAKK1BBU1MgaW50ZXJuYWxzLm51bWJlck9mU2NvcGVk
SFRNTFN0eWxlQ2hpbGRyZW4oc3IpIGlzIDEKIC0tLSBTZXR0aW5nIEBzY29wZWQgLS0tCiBQQVNT
IGludGVybmFscy5udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKGhvc3QpIGlzIDAKIFBB
U1MgaW50ZXJuYWxzLm51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oc3IpIGlzIDEKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9yZWdpc3RlcmluZy1z
aGFkb3dyb290Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvcmVnaXN0
ZXJpbmctc2hhZG93cm9vdC5odG1sCmluZGV4IDliNGM1NDczNGNiMTZhMDRmZTZmN2NhZDExOTU5
NjFlNWQ4MDY4ODUuLjMyOWM4MjIwYzVmNDBiZWY0Y2VhYTg3NDczYTUyNzQ2NjA0YTMxYTkgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9yZWdpc3RlcmluZy1z
aGFkb3dyb290Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3Jl
Z2lzdGVyaW5nLXNoYWRvd3Jvb3QuaHRtbApAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICAgICAg
ZGVidWcoIi0tLSBVbnNldHRpbmcgQHNjb3BlZCAtLS0iKTsKICAgICAgICAgICAgIHN0eWxlLnNj
b3BlZCA9IGZhbHNlOwogICAgICAgICAgICAgc2hvdWxkQmUoImludGVybmFscy5udW1iZXJPZlNj
b3BlZEhUTUxTdHlsZUNoaWxkcmVuKGhvc3QpIiwgIjAiKTsKLSAgICAgICAgICAgIHNob3VsZEJl
KCJpbnRlcm5hbHMubnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbihzcikiLCAiMCIpOyAv
KiA8c3R5bGU+IGluIHNoYWRvdywgbm90IHNjb3BlZCAqLworICAgICAgICAgICAgc2hvdWxkQmUo
ImludGVybmFscy5udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKHNyKSIsICIxIik7IC8q
IDxzdHlsZT4gaW4gc2hhZG93LCBub3Qgc2NvcGVkICovCiAKICAgICAgICAgICAgIGRlYnVnKCIt
LS0gU2V0dGluZyBAc2NvcGVkIC0tLSIpOwogICAgICAgICAgICAgc3R5bGUuc2NvcGVkID0gdHJ1
ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1z
Y29wZWQtY2hhbmdlLXNjb3BlZC1pbi1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1jaGFuZ2Utc2NvcGVkLWluLXNoYWRv
dy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk2NmFiMWEyYWViMzhhZTU0MzY1MTk4YWMwMjYx
YzBkNmRmNjgxOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxl
LXNjb3BlZC9zdHlsZS1zY29wZWQtY2hhbmdlLXNjb3BlZC1pbi1zaGFkb3ctZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsNjQgQEAKK1BBU1Mgd2luZG93LmludGVybmFscyBpcyBkZWZpbmVkLgorUEFT
UyB3aW5kb3cuaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3QgaXMgZGVmaW5lZC4KK1BBU1MgV2Vi
S2l0U2hhZG93Um9vdCBpcyBkZWZpbmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCit0ZXN0IGEgc2NvcGVkIHN0eWxlIGluIHNoYWRvdyBzdWJ0cmVl
LgorRTogcmdiKDI1NSwgMCwgMCkKK0Y6IHJnYigwLCAwLCAwKQordGVzdCBhIHN0eWxlIGluIHNo
YWRvdyBzdWJ0cmVlLgorRTogcmdiKDI1NSwgMCwgMCkKK0Y6IHJnYigyNTUsIDAsIDApCit0ZXN0
IHN0eWxlcyBpbiBtdWx0aXBsZSBzaGFkb3cgc3VidHJlZXMuCitFOiByZ2IoMjU1LCAwLCAwKQor
RjogcmdiKDI1NSwgMCwgMCkKK0c6IHJnYigwLCAwLCAyNTUpCit0ZXN0IGEgc2NvcGVkIHN0eWxl
IGluIG5lc3RlZCBzaGFkb3cgc3VidHJlZS4KK0U6IHJnYigyNTUsIDAsIDApCitGOiByZ2IoMCwg
MCwgMCkKK0c6IHJnYigwLCAwLCAyNTUpCitIOiByZ2IoMjU1LCAwLCAwKQordGVzdCBhIHN0eWxl
IGluIG5lc3RlZCBzaGFkb3cgc3VidHJlZS4KK0U6IHJnYigyNTUsIDAsIDApCitGOiByZ2IoMjU1
LCAwLCAwKQorRzogcmdiKDAsIDAsIDI1NSkKK0g6IHJnYigwLCAwLCAyNTUpCit0ZXN0IGNoYW5n
aW5nIGEgc3R5bGUgaW4gc2hhZG93IHN1YnRyZWUgZnJvbSBzY29wZWQgdG8gc2NvcGVkLgorRTog
cmdiKDI1NSwgMCwgMCkKK0Y6IHJnYigwLCAwLCAwKQorRTogcmdiKDI1NSwgMCwgMCkKK0Y6IHJn
YigwLCAwLCAwKQordGVzdCBjaGFuZ2luZyBhIHN0eWxlIGluIHNoYWRvdyBzdWJ0cmVlIGZyb20g
c2NvcGVkIHRvIG5vdC1zY29wZWQuCitFOiByZ2IoMjU1LCAwLCAwKQorRjogcmdiKDAsIDAsIDAp
CitFOiByZ2IoMjU1LCAwLCAwKQorRjogcmdiKDI1NSwgMCwgMCkKK3Rlc3QgY2hhbmdpbmcgYSBz
dHlsZSBpbiBzaGFkb3cgc3VidHJlZSBmcm9tIG5vdC1zY29wZWQgdG8gc2NvcGVkLgorRTogcmdi
KDI1NSwgMCwgMCkKK0Y6IHJnYigyNTUsIDAsIDApCitFOiByZ2IoMjU1LCAwLCAwKQorRjogcmdi
KDAsIDAsIDApCit0ZXN0IHJlbW92aW5nIGEgc2NvcGVkIHN0eWxlIGZyb20gc2hhZG93IHN1YnRy
ZWUuCitFOiByZ2IoMjU1LCAwLCAwKQorRjogcmdiKDAsIDAsIDApCitFOiByZ2IoMCwgMCwgMCkK
K0Y6IHJnYigwLCAwLCAwKQordGVzdCByZW1vdmluZyBhIHN0eWxlIGZyb20gc2hhZG93IHN1YnRy
ZWUuCitFOiByZ2IoMjU1LCAwLCAwKQorRjogcmdiKDI1NSwgMCwgMCkKK0U6IHJnYigwLCAwLCAw
KQorRjogcmdiKDAsIDAsIDApCit0ZXN0IGluc2VydGluZyBhIHNjb3BlZCBzdHlsZSBpbnRvIHNo
YWRvdyBzdWJ0cmVlLgorRTogcmdiKDI1NSwgMCwgMCkKK0Y6IHJnYigwLCAwLCAwKQordGVzdCBp
bnNlcnRpbmcgYSBzdHlsZSBpbnRvIHNoYWRvdyBzdWJ0cmVlLgorRTogcmdiKDI1NSwgMCwgMCkK
K0Y6IHJnYigyNTUsIDAsIDApCit0ZXN0IHJlLWluc2VydGluZyBhIHN0eWxlIGFmdGVyIGNoYW5n
aW5nIHNjb3BlZCB0byBub3Qgc2NvcGVkIG9mZmxpbmUuCitFOiByZ2IoMjU1LCAwLCAwKQorRjog
cmdiKDI1NSwgMCwgMCkKK3Rlc3QgcmUtaW5zZXJ0aW5nIGEgc3R5bGUgYWZ0ZXIgY2hhbmdpbmcg
bm90IHNjb3BlZCB0byBzY29wZWQgb2ZmbGluZS4KK0U6IHJnYigyNTUsIDAsIDApCitGOiByZ2Io
MCwgMCwgMCkKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1jaGFuZ2Utc2NvcGVkLWluLXNoYWRvdy5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1jaGFuZ2Utc2NvcGVkLWluLXNoYWRv
dy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJkYmFkMGE1NzMyYzhkNWFhN2M0ZTQxYWIwYmI2MDFkNzZkNzUz
ODUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQv
c3R5bGUtc2NvcGVkLWNoYW5nZS1zY29wZWQtaW4tc2hhZG93Lmh0bWwKQEAgLTAsMCArMSwzMTgg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2RvbS9zaGFkb3cvcmVzb3VyY2VzL3BvbHlmaWxsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKworc2hvdWxkQmVEZWZpbmVkKCJ3aW5kb3cuaW50ZXJuYWxzIik7Citz
aG91bGRCZURlZmluZWQoIndpbmRvdy5pbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdCIpOworc2hv
dWxkQmVEZWZpbmVkKCJXZWJLaXRTaGFkb3dSb290Iik7CisKK2Z1bmN0aW9uIGR1bXBDb21wdXRl
ZFN0eWxlKG5vZGUpCit7CisgICAgZGVidWcobm9kZS5pZCArICI6ICIgKyBkb2N1bWVudC5kZWZh
dWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2Nv
bG9yJykpOworfQorCitmdW5jdGlvbiB0ZXN0U2NvcGVkU3R5bGVJblNoYWRvdygpCit7CisgICAg
ZGVidWcoInRlc3QgYSBzY29wZWQgc3R5bGUgaW4gc2hhZG93IHN1YnRyZWUuIik7CisgICAgdmFy
IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGRvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3Qo
ZGl2KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxkaXY+PHN0eWxlIHNjb3BlZD5kaXYgeyBj
b2xvcjogcmVkOyB9PC9zdHlsZT48ZGl2IGlkPSdFJz5FRUU8L2Rpdj48L2Rpdj48ZGl2IGlkPSdG
Jz5GRkY8L2Rpdj4iOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIGR1bXBD
b21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRSIpKTsKKyAgICBkdW1wQ29tcHV0
ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkYiKSk7CisgICAgZG9jdW1lbnQuYm9keS5y
ZW1vdmVDaGlsZChkaXYpOworfQorCitmdW5jdGlvbiB0ZXN0U3R5bGVJblNoYWRvdygpCit7Cisg
ICAgZGVidWcoInRlc3QgYSBzdHlsZSBpbiBzaGFkb3cgc3VidHJlZS4iKTsKKyAgICB2YXIgZGl2
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChkaXYpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChkaXYp
OworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPGRpdj48ZGl2IGlkPSdFJz5FRUU8L2Rpdj48c3R5
bGU+ZGl2IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PC9kaXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+
IjsKKyAgICBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHls
ZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hh
ZG93LmdldEVsZW1lbnRCeUlkKCJGIikpOworICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQo
ZGl2KTsKK30KKworZnVuY3Rpb24gdGVzdFN0eWxlSW5NdWx0aXBsZVNoYWRvdygpCit7CisgICAg
ZGVidWcoInRlc3Qgc3R5bGVzIGluIG11bHRpcGxlIHNoYWRvdyBzdWJ0cmVlcy4iKTsKKyAgICB2
YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisKKyAgICB2YXIgc2hhZG93
MSA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGRpdik7CisgICAgc2hhZG93MS5pbm5lckhUTUwgPSAi
PGRpdj48c3R5bGU+ZGl2IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGRpdiBpZD0nRSc+RUVFPC9k
aXY+PC9kaXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+IjsKKworICAgIHZhciBzaGFkb3cyID0gbmV3
IFdlYktpdFNoYWRvd1Jvb3QoZGl2KTsKKyAgICBzaGFkb3cyLmlubmVySFRNTCA9ICI8ZGl2Pjxz
dHlsZSBzY29wZWQ+ZGl2IHsgY29sb3I6IGJsdWUgfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz48
ZGl2IGlkPSdHJz5HR0c8L2Rpdj48L2Rpdj4iOworCisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChkaXYpOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIGR1bXBDb21w
dXRlZFN0eWxlKHNoYWRvdzEuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVk
U3R5bGUoc2hhZG93MS5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHls
ZShzaGFkb3cyLmdldEVsZW1lbnRCeUlkKCJHIikpOworICAgIGRvY3VtZW50LmJvZHkucmVtb3Zl
Q2hpbGQoZGl2KTsKK30KKworZnVuY3Rpb24gdGVzdFNjb3BlZFN0eWxlSW5OZXN0ZWRTaGFkb3co
KQoreworICAgIGRlYnVnKCJ0ZXN0IGEgc2NvcGVkIHN0eWxlIGluIG5lc3RlZCBzaGFkb3cgc3Vi
dHJlZS4iKTsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworICAgIHZhciBzaGFkb3cxID0gbmV3
IFdlYktpdFNoYWRvd1Jvb3QoZGl2KTsKKyAgICBzaGFkb3cxLmlubmVySFRNTCA9ICI8ZGl2Pjxz
dHlsZSBzY29wZWQ+ZGl2IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGRpdiBpZD0nRSc+RUVFPC9k
aXY+PC9kaXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+IjsKKyAgICB2YXIgZSA9IHNoYWRvdzEuZ2V0
RWxlbWVudEJ5SWQoIkUiKTsKKyAgICB2YXIgc2hhZG93MiA9IG5ldyBXZWJLaXRTaGFkb3dSb290
KGUpOworICAgIHNoYWRvdzIuaW5uZXJIVE1MID0gIjxkaXY+PHN0eWxlIHNjb3BlZD5kaXYgeyBj
b2xvcjogYmx1ZTsgfTwvc3R5bGU+PGRpdiBpZD0nRyc+R0dHRzwvZGl2PjwvZGl2PjxkaXYgaWQ9
J0gnPkhISEg8L2Rpdj4iOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIGR1
bXBDb21wdXRlZFN0eWxlKHNoYWRvdzEuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVtcENv
bXB1dGVkU3R5bGUoc2hhZG93MS5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKyAgICBkdW1wQ29tcHV0
ZWRTdHlsZShzaGFkb3cyLmdldEVsZW1lbnRCeUlkKCJHIikpOworICAgIGR1bXBDb21wdXRlZFN0
eWxlKHNoYWRvdzIuZ2V0RWxlbWVudEJ5SWQoIkgiKSk7CisgICAgZG9jdW1lbnQuYm9keS5yZW1v
dmVDaGlsZChkaXYpOworfQorCitmdW5jdGlvbiB0ZXN0U3R5bGVJbk5lc3RlZFNoYWRvdygpCit7
CisgICAgZGVidWcoInRlc3QgYSBzdHlsZSBpbiBuZXN0ZWQgc2hhZG93IHN1YnRyZWUuIik7Cisg
ICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGRvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB2YXIgc2hhZG93MSA9IG5ldyBXZWJLaXRTaGFk
b3dSb290KGRpdik7CisgICAgc2hhZG93MS5pbm5lckhUTUwgPSAiPGRpdj48c3R5bGU+ZGl2IHsg
Y29sb3I6IHJlZDsgfTwvc3R5bGU+PGRpdiBpZD0nRSc+RUVFPC9kaXY+PC9kaXY+PGRpdiBpZD0n
Ric+RkZGPC9kaXY+IjsKKyAgICB2YXIgZSA9IHNoYWRvdzEuZ2V0RWxlbWVudEJ5SWQoIkUiKTsK
KyAgICB2YXIgc2hhZG93MiA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGUpOworICAgIHNoYWRvdzIu
aW5uZXJIVE1MID0gIjxkaXY+PHN0eWxlPmRpdiB7IGNvbG9yOiBibHVlOyB9PC9zdHlsZT48ZGl2
IGlkPSdHJz5HR0dHPC9kaXY+PC9kaXY+PGRpdiBpZD0nSCc+SEhISDwvZGl2PiI7CisgICAgZG9j
dW1lbnQuYm9keS5vZmZzZXRMZWZ0OworCisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93MS5n
ZXRFbGVtZW50QnlJZCgiRSIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cxLmdldEVs
ZW1lbnRCeUlkKCJGIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdzIuZ2V0RWxlbWVu
dEJ5SWQoIkciKSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93Mi5nZXRFbGVtZW50QnlJ
ZCgiSCIpKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK2Z1bmN0
aW9uIHRlc3RDaGFuZ2VTY29wZWRUb1Njb3BlZCgpCit7CisgICAgZGVidWcoInRlc3QgY2hhbmdp
bmcgYSBzdHlsZSBpbiBzaGFkb3cgc3VidHJlZSBmcm9tIHNjb3BlZCB0byBzY29wZWQuIik7Cisg
ICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGRvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoZGl2KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxkaXY+PHN0eWxlIHNjb3BlZCBp
ZD0nc3R5bGUtaW4tc2hhZG93Jz5kaXYgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48ZGl2IGlkPSdF
Jz5FRUU8L2Rpdj48L2Rpdj48ZGl2IGlkPSdGJz5GRkY8L2Rpdj4iOworICAgIGRvY3VtZW50LmJv
ZHkub2Zmc2V0TGVmdDsKKworICAgIC8vIGJlZm9yZQorICAgIGR1bXBDb21wdXRlZFN0eWxlKHNo
YWRvdy5nZXRFbGVtZW50QnlJZCgiRSIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cu
Z2V0RWxlbWVudEJ5SWQoIkYiKSk7CisKKyAgICBzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoInN0eWxl
LWluLXNoYWRvdyIpLnNldEF0dHJpYnV0ZSgic2NvcGVkIiwgInNjb3BlZCIpOworICAgIGRvY3Vt
ZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIC8vIGFmdGVyCisgICAgZHVtcENvbXB1dGVkU3R5
bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNo
YWRvdy5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxk
KGRpdik7Cit9CisKK2Z1bmN0aW9uIHRlc3RDaGFuZ2VTY29wZWRUb05vdFNjb3BlZCgpCit7Cisg
ICAgZGVidWcoInRlc3QgY2hhbmdpbmcgYSBzdHlsZSBpbiBzaGFkb3cgc3VidHJlZSBmcm9tIHNj
b3BlZCB0byBub3Qtc2NvcGVkLiIpOworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CisgICAgdmFy
IHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGRpdik7CisgICAgc2hhZG93LmlubmVySFRN
TCA9ICI8ZGl2PjxzdHlsZSBzY29wZWQgaWQ9J3N0eWxlLWluLXNoYWRvdyc+ZGl2IHsgY29sb3I6
IHJlZDsgfTwvc3R5bGU+PGRpdiBpZD0nRSc+RUVFPC9kaXY+PC9kaXY+PGRpdiBpZD0nRic+RkZG
PC9kaXY+IjsKKyAgICBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7CisKKyAgICAvLyBiZWZvcmUK
KyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAg
ZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJGIikpOworCisgICAgc2hh
ZG93LmdldEVsZW1lbnRCeUlkKCJzdHlsZS1pbi1zaGFkb3ciKS5yZW1vdmVBdHRyaWJ1dGUoInNj
b3BlZCIpOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIC8vIGFmdGVyCisg
ICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikpOworICAgIGR1
bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKyAgICBkb2N1bWVu
dC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK2Z1bmN0aW9uIHRlc3RDaGFuZ2VOb3RTY29w
ZWRUb1Njb3BlZCgpCit7CisgICAgZGVidWcoInRlc3QgY2hhbmdpbmcgYSBzdHlsZSBpbiBzaGFk
b3cgc3VidHJlZSBmcm9tIG5vdC1zY29wZWQgdG8gc2NvcGVkLiIpOworICAgIHZhciBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGRpdik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGRpdik7Cisg
ICAgc2hhZG93LmlubmVySFRNTCA9ICI8ZGl2PjxzdHlsZSBpZD0nc3R5bGUtaW4tc2hhZG93Jz5k
aXYgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48ZGl2IGlkPSdFJz5FRUU8L2Rpdj48L2Rpdj48ZGl2
IGlkPSdGJz5GRkY8L2Rpdj4iOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAg
IC8vIGJlZm9yZQorICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgi
RSIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkYiKSk7
CisKKyAgICBzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoInN0eWxlLWluLXNoYWRvdyIpLnNldEF0dHJp
YnV0ZSgic2NvcGVkIiwgInNjb3BlZCIpOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsK
KworICAgIC8vIGFmdGVyCisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRC
eUlkKCJFIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgi
RiIpKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK2Z1bmN0aW9u
IHRlc3RSZW1vdmVTY29wZWRTdHlsZUZyb21Eb2N1bWVudCgpCit7CisgICAgZGVidWcoInRlc3Qg
cmVtb3ZpbmcgYSBzY29wZWQgc3R5bGUgZnJvbSBzaGFkb3cgc3VidHJlZS4iKTsKKyAgICB2YXIg
ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChkaXYpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChk
aXYpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPGRpdj48c3R5bGUgc2NvcGVkIGlkPSdzdHls
ZS1pbi1zaGFkb3cnPmRpdiB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxkaXYgaWQ9J0UnPkVFRTwv
ZGl2PjwvZGl2PjxkaXYgaWQ9J0YnPkZGRjwvZGl2PiI7CisgICAgZG9jdW1lbnQuYm9keS5vZmZz
ZXRMZWZ0OworCisgICAgLy8gYmVmb3JlCisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93Lmdl
dEVsZW1lbnRCeUlkKCJFIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVt
ZW50QnlJZCgiRiIpKTsKKworICAgIHZhciBzdHlsZUluU2hhZG93ID0gc2hhZG93LmdldEVsZW1l
bnRCeUlkKCJzdHlsZS1pbi1zaGFkb3ciKTsKKyAgICBzdHlsZUluU2hhZG93LnBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGQoc3R5bGVJblNoYWRvdyk7CisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0
OworCisgICAgLy8gYWZ0ZXIKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVu
dEJ5SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlk
KCJGIikpOworICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rp
b24gdGVzdFJlbW92ZVN0eWxlRnJvbURvY3VtZW50KCkKK3sKKyAgICBkZWJ1ZygidGVzdCByZW1v
dmluZyBhIHN0eWxlIGZyb20gc2hhZG93IHN1YnRyZWUuIik7CisgICAgdmFyIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
ZGl2KTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoZGl2KTsKKyAgICBz
aGFkb3cuaW5uZXJIVE1MID0gIjxkaXY+PHN0eWxlIGlkPSdzdHlsZS1pbi1zaGFkb3cnPmRpdiB7
IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxkaXYgaWQ9J0UnPkVFRTwvZGl2PjwvZGl2PjxkaXYgaWQ9
J0YnPkZGRjwvZGl2PiI7CisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworCisgICAgLy8g
YmVmb3JlCisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikp
OworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKwor
ICAgIHZhciBzdHlsZUluU2hhZG93ID0gc2hhZG93LmdldEVsZW1lbnRCeUlkKCJzdHlsZS1pbi1z
aGFkb3ciKTsKKyAgICBzdHlsZUluU2hhZG93LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVJ
blNoYWRvdyk7CisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworCisgICAgLy8gYWZ0ZXIK
KyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAg
ZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJGIikpOworICAgIGRvY3Vt
ZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rpb24gdGVzdEluc2VydFNjb3Bl
ZFN0eWxlSW50b0RvY3VtZW50KCkKK3sKKyAgICBkZWJ1ZygidGVzdCBpbnNlcnRpbmcgYSBzY29w
ZWQgc3R5bGUgaW50byBzaGFkb3cgc3VidHJlZS4iKTsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYp
OworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChkaXYpOworICAgIHNoYWRv
dy5pbm5lckhUTUwgPSAiPGRpdj48ZGl2IGlkPSdFJz5FRUU8L2Rpdj48L2Rpdj48ZGl2IGlkPSdG
Jz5GRkY8L2Rpdj4iOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIHZhciBz
dHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CisgICAgc3R5bGUuaW5uZXJI
VE1MID0gImRpdiB7IGNvbG9yOiByZWQ7IH0iOworICAgIHN0eWxlLnNldEF0dHJpYnV0ZSgic2Nv
cGVkIiwgInNjb3BlZCIpOworICAgIHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRSIpLnBhcmVudE5v
ZGUuYXBwZW5kQ2hpbGQoc3R5bGUpOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKwor
ICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRSIpKTsKKyAgICBk
dW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkYiKSk7CisgICAgZG9jdW1l
bnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOworfQorCitmdW5jdGlvbiB0ZXN0SW5zZXJ0U3R5bGVJ
bnRvRG9jdW1lbnQoKQoreworICAgIGRlYnVnKCJ0ZXN0IGluc2VydGluZyBhIHN0eWxlIGludG8g
c2hhZG93IHN1YnRyZWUuIik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB2YXIgc2hh
ZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoZGl2KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0g
IjxkaXY+PGRpdiBpZD0nRSc+RUVFPC9kaXY+PC9kaXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+IjsK
KyAgICBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7CisKKyAgICB2YXIgc3R5bGUgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOworICAgIHN0eWxlLmlubmVySFRNTCA9ICJkaXYgeyBj
b2xvcjogcmVkOyB9IjsKKyAgICBzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKS5wYXJlbnROb2Rl
LmFwcGVuZENoaWxkKHN0eWxlKTsKKyAgICBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7CisKKyAg
ICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVt
cENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJGIikpOworICAgIGRvY3VtZW50
LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rpb24gdGVzdENoYW5nZVNjb3BlZFRv
Tm90U2NvcGVkTm90SW5Eb2N1bWVudCgpCit7CisgICAgZGVidWcoInRlc3QgcmUtaW5zZXJ0aW5n
IGEgc3R5bGUgYWZ0ZXIgY2hhbmdpbmcgc2NvcGVkIHRvIG5vdCBzY29wZWQgb2ZmbGluZS4iKTsK
KyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZG9jdW1l
bnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChkaXYpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPGRpdj48c3R5bGUgc2NvcGVk
IGlkPSdzdHlsZS1pbi1zaGFkb3cnPmRpdiB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxkaXYgaWQ9
J0UnPkVFRTwvZGl2PjwvZGl2PjxkaXYgaWQ9J0YnPkZGRjwvZGl2PiI7CisgICAgZG9jdW1lbnQu
Ym9keS5vZmZzZXRMZWZ0OworCisgICAgdmFyIHN0eWxlID0gc2hhZG93LmdldEVsZW1lbnRCeUlk
KCJzdHlsZS1pbi1zaGFkb3ciKTsKKyAgICBzdHlsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0
eWxlKTsKKyAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoInNjb3BlZCIpOworICAgIHNoYWRvdy5n
ZXRFbGVtZW50QnlJZCgiRSIpLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoc3R5bGUpOworICAgIGRv
Y3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5n
ZXRFbGVtZW50QnlJZCgiRSIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxl
bWVudEJ5SWQoIkYiKSk7CisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOworfQor
CitmdW5jdGlvbiB0ZXN0Q2hhbmdlTm90U2NvcGVkVG9TY29wZWROb3RJbkRvY3VtZW50KCkKK3sK
KyAgICBkZWJ1ZygidGVzdCByZS1pbnNlcnRpbmcgYSBzdHlsZSBhZnRlciBjaGFuZ2luZyBub3Qg
c2NvcGVkIHRvIHNjb3BlZCBvZmZsaW5lLiIpOworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7Cisg
ICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGRpdik7CisgICAgc2hhZG93Lmlu
bmVySFRNTCA9ICI8ZGl2PjxzdHlsZSBpZD0nc3R5bGUtaW4tc2hhZG93Jz5kaXYgeyBjb2xvcjog
cmVkOyB9PC9zdHlsZT48ZGl2IGlkPSdFJz5FRUU8L2Rpdj48L2Rpdj48ZGl2IGlkPSdGJz5GRkY8
L2Rpdj4iOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIHZhciBzdHlsZSA9
IHNoYWRvdy5nZXRFbGVtZW50QnlJZCgic3R5bGUtaW4tc2hhZG93Iik7CisgICAgc3R5bGUucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSk7CisgICAgc3R5bGUuc2V0QXR0cmlidXRlKCJzY29w
ZWQiLCAic2NvcGVkIik7CisgICAgc2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikucGFyZW50Tm9k
ZS5hcHBlbmRDaGlsZChzdHlsZSk7CisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworCisg
ICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikpOworICAgIGR1
bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKyAgICBkb2N1bWVu
dC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3RzKCkKK3sKKyAg
ICB0ZXN0U2NvcGVkU3R5bGVJblNoYWRvdygpOworICAgIHRlc3RTdHlsZUluU2hhZG93KCk7Cisg
ICAgdGVzdFN0eWxlSW5NdWx0aXBsZVNoYWRvdygpOworICAgIHRlc3RTY29wZWRTdHlsZUluTmVz
dGVkU2hhZG93KCk7CisgICAgdGVzdFN0eWxlSW5OZXN0ZWRTaGFkb3coKTsKKyAgICB0ZXN0Q2hh
bmdlU2NvcGVkVG9TY29wZWQoKTsKKyAgICB0ZXN0Q2hhbmdlU2NvcGVkVG9Ob3RTY29wZWQoKTsK
KyAgICB0ZXN0Q2hhbmdlTm90U2NvcGVkVG9TY29wZWQoKTsKKyAgICB0ZXN0UmVtb3ZlU2NvcGVk
U3R5bGVGcm9tRG9jdW1lbnQoKTsKKyAgICB0ZXN0UmVtb3ZlU3R5bGVGcm9tRG9jdW1lbnQoKTsK
KyAgICB0ZXN0SW5zZXJ0U2NvcGVkU3R5bGVJbnRvRG9jdW1lbnQoKTsKKyAgICB0ZXN0SW5zZXJ0
U3R5bGVJbnRvRG9jdW1lbnQoKTsKKyAgICB0ZXN0Q2hhbmdlU2NvcGVkVG9Ob3RTY29wZWROb3RJ
bkRvY3VtZW50KCk7CisgICAgdGVzdENoYW5nZU5vdFNjb3BlZFRvU2NvcGVkTm90SW5Eb2N1bWVu
dCgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgor
ICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146465</attachid>
            <date>2012-06-07 20:50:58 -0700</date>
            <delta_ts>2012-06-10 21:22:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87805-20120608125057.patch</filename>
            <type>text/plain</type>
            <size>29356</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDcyY2E1ZDU4NDMwYWY0
Mjk4ZjJmMTdkZjg0ZDgwOThkMGMxNWI5Yy4uOTg3OWUwM2IzN2Q1YWVjYzVjYjQ2OTI4MTY3NzZi
ZjU2ZDhjMDYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTA2LTA0ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0g
PHN0eWxlPiBpbnNpZGUgU2hhZG93IHN1YnRyZWUgc2hvdWxkIGJlIHNjb3BlZCBpbnNpZGUgdGhl
IHN1YnRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04NzgwNQorCisgICAgICAgIE1vZGlmaWVkIEhUTUxTdHlsZUVsZW1lbnQgdG8gYmUgdHJlYXRl
ZCBhcyBhIHNjb3BlZCBzdHlsZSBpbmRlcGVuZGVudAorICAgICAgICBvZiBpdHMgInNjb3BlZCIg
YXR0cmlidXRlJ3MgdmFsdWUgaWYgSFRNTFN0eWxlRWxlbWVudCBpcyBpbiBzaGFkb3cKKyAgICAg
ICAgc3VidHJlZS4gSFRNTFN0eWxlRWxlbWVudCBoYXMgdGhlIGZvbGxvd2luZyBmb3VyIGNhc2Vz
IHRhbGtpbmcgYWJvdXQKKyAgICAgICAgInNjb3BlZCIgYXR0cmlidXRlIGFuZCB3aGV0aGVyIGlz
IGluIHNoYWRvdyBzdWJ0cmVlIG9yIG5vdDoKKyAgICAgICAgMSwgSFRNTFN0eWxlRWxlbWVudCBp
cyAic2NvcGVkIiBhbmQgaXMgaW4gZG9jdW1lbnQgdHJlZSwKKyAgICAgICAgMiwgSFRNTFN0eWxl
RWxlbWVudCBpcyAic2NvcGVkIiBhbmQgaXMgaW4gc2hhZG93IHN1YnRyZWUsCisgICAgICAgIDMs
IEhUTUxTdHlsZUVsZW1lbnQgaXMgbm90ICJzY29wZWQiIGFuZCBpcyBpbiBkb2N1bWVudCB0cmVl
LCBhbmQKKyAgICAgICAgNCwgSFRNTFN0eWxlRWxlbWVudCBpcyBub3QgInNjb3BlZCIgYW5kIGlz
IGluIHNoYWRvdyBzdWJ0cmVlLgorICAgICAgICBUaGUgY2FzZSAxIGFuZCAyIGFyZSBub3QgY2hh
bmdlZC4gVGhpcyBwYXRjaCBhZmZlY3RlZCB0aGUgY2FzZSA0LgorICAgICAgICBBdCB0aGUgY2Fz
ZSA0LCB0aGUgSFRNTFN0eWxlRWxlbWVudCdzIHNjb3Bpbmcgbm9kZSBpcyB0aGUgc2hhZG93IHJv
b3QuCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIHRoZSBmaXJzdCBzdGVwIGZvciBmaXhpbmcgc3R5
bGUgc2NvcGUgYnVnLAorICAgICAgICBpLmUuIEhUTUxTdHlsZUVsZW1lbnRzIGluIHNoYWRvdyBz
dWJ0cmVlIGFyZSBhcHBsaWVkIHRvIGFueSBlbGVtZW50CisgICAgICAgIGluIGRvY3VtZW50IHRy
ZWUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVz
dDogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1jaGFuZ2Utc2NvcGVkLWluLXNo
YWRvdy5odG1sCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkZXRlcm1pbmVTY29wZSk6CisgICAgICAgIE1vZGlmaWVk
IHRvIHJldHVybiBhIHNoYWRvdyByb290IGlmIGEgdGFyZ2V0ZWQgc3R5bGVzaGVldCBvd25lciBu
b2RlIGlzCisgICAgICAgIG5vdCBzY29wZWQgYnV0IGluIHNvbWUgc2hhZG93IERPTSBzdWJ0cmVl
LgorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgTW9kaWZpZWQgdG8g
dXNlIHRoZSBiZWxvdyBzY29wZWRBdHRyaWJ1dGVDaGFuZ2VkIHdoZW4gYSBjaGFuZ2VkCisgICAg
ICAgIGF0dHJpYnV0ZSdzIG5hbWUgaXMgInNjb3BlZCIuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
U3R5bGVFbGVtZW50OjpzY29wZWRBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgTmV3bHkgYWRk
ZWQuIEFjY29yZGluZyB0byBuZXcgc2NvcGVkIHZhbHVlIGFuZCBpc0luU2hhZG93VHJlZSwKKyAg
ICAgICAgYWRkIG9yIHJlbW92ZSBzdHlsZSBydWxlcyB0by9mcm9tIHNjb3BlZEF1dGhvclJ1bGVz
IHZpYQorICAgICAgICByZWdpc3RlcldpdGhTY29waW5nTm9kZSBvciB1bnJlZ2lzdGVyV2l0aFNj
b3BpbmdOb2RlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6cmVnaXN0ZXJX
aXRoU2NvcGluZ05vZGUpOgorICAgICAgICBBZGRlZCBvbmUgYm9vbGVhbiBhcmd1bWVudCB0byBk
ZXRlcm1pbmUgd2hldGhlciBIVE1MU3R5bGVFbGVtZW50IGlzCisgICAgICAgIHNjb3BlZCBvciBu
b3QuIFRoZSByZWFzb24gd2h5IG5vdCB1c2luZyBzY29wZWQoKSBpcyB0aGUgY29tbWVudDoKKyAg
ICAgICAgIldlIGNhbm5vdCByZWx5IG9uIHRoZSBzY29wZWQgZWxlbWVudCBhbHJlYWR5IGJlaW5n
IHByZXNlbnQgd2hlbiB0aGlzCisgICAgICAgIG1ldGhvZCBpcyBpbnZva2VkLiBUaGVyZWZvciB3
ZSBjYW5ub3QgcmVseSBvbiBzY29wZWQoKSIKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVs
ZW1lbnQ6OnVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUpOgorICAgICAgICBDaGFuZ2VkIHRoZSBj
b2RlIGZvciB1cGRhdGluZyBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZS4gTm93CisgICAg
ICAgIHNldCBtX3JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUgdG8gYmUgTm90UmVnaXN0ZXJlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAg
ICAgIE1vZGlmaWVkIHRvIGludm9rZSByZWdpc3RlcldpdGhTY29waW5nTm9kZSB3aGVuIGFuIGVs
ZW1lbnQgaXMgbm90CisgICAgICAgIHNjb3BlZCBidXQgaW4gc29tZSBzaGFkb3cgc3VidHJlZS4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAg
ICAgTW9kaWZpZWQgdG8gaW52b2tlIHVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUgd2hlbiBhbiBl
bGVtZW50IGlzIG5vdAorICAgICAgICBzY29wZWQgYnV0IGluIHNvbWUgc2hhZG93IHN1YnRyZWUu
CisgICAgICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50Lmg6CisgICAgICAgIChIVE1MU3R5bGVF
bGVtZW50KToKKyAgICAgICAgTW9kaWZpZWQgdGhlIHR5cGUgb2YgbV9pc1JlZ2lzdGVyZWRXaXRo
U2NvcGluZ05vZGUgZnJvbSBib29sIHRvCisgICAgICAgIGVudW0gYW5kIHJlbmFtZWQgdG8gbV9y
ZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlLiBOb3cgdGhlIG1lbWJlcgorICAgICAgICB2YXJpYWJs
ZSBrZWVwcyB3aGF0IEhUTUxTdHlsZUVsZW1lbnQncyBzY29waW5nIG5vZGUgaXMsIGkuZS4KKyAg
ICAgICAgbm9uZSAodGhpcyBtZWFucywgbm90IGluIHNoYWRvdyBzdWJ0cmVlIGFuZCBub3Qgc2Nv
cGVkKSwgc2hhZG93IHJvb3Qgb3IKKyAgICAgICAgcGFyZW50IG5vZGUuCisgICAgICAgIEFkZGVk
IG9uZSBuZXcgbWV0aG9kIHNjb3BlZEF0dHJpYnV0ZUNoYW5nZWQncyBkZWNhbGFydGlvbiBhbmQK
KyAgICAgICAgbW9kaWZpZWQgdGhlIGRlY2xhcmF0aW9uIG9mIHJlZ2lzdGVyV2l0aFNjb3BpbmdO
b2RlLgorCiAyMDEyLTA2LTA3ICBWaWN0b3IgQ2FyYnVuZSAgPHZpY3RvckByb3NlZHUub3JnPgog
CiAgICAgICAgIGFkZFRleHRUcmFjayBzaG91bGQgc2V0IHRyYWNrIG1vZGUgdG8gSElEREVOCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggNjQ4ZjYxYmJhZTk0NzE3MDY0NTkz
MWRmN2M1OTQ4OTBhYmQwY2I0Ni4uYTUzN2ViNWYxOTYxNzU2YzVmN2E5NTY5YmExODFjN2I0MWE4
N2M0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNDk5LDcgKzQ5OSw3
IEBAIGNvbnN0IENvbnRhaW5lck5vZGUqIFN0eWxlUmVzb2x2ZXI6OmRldGVybWluZVNjb3BlKGNv
bnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0KQogCiAgICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KG93bmVyTm9kZSk7CiAgICAg
aWYgKCFzdHlsZUVsZW1lbnQtPnNjb3BlZCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIHN0eWxlRWxlbWVudC0+aXNJblNoYWRvd1RyZWUoKT8gc3R5bGVFbGVtZW50LT5zaGFk
b3dSb290KCkgOiAwOwogCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gc3R5bGVFbGVtZW50
LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U3R5bGVFbGVtZW50LmNwcAppbmRleCA2N2RkY2ViNGZhYTNmYTdlY2RhNTM0NTc3MzZmYzVkNmNl
MzhlZjRjLi5jNTA4ZDc3MzMxYmIyN2E3MGFiZGU0MDZhZWVkYTQxMzJhN2UxYjBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiU2hhZG93Um9v
dC5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC01MCw3ICs1MSw3IEBAIGlubGluZSBIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50CiAgICAgLCBtX2Zp
cmVkTG9hZChmYWxzZSkKICAgICAsIG1fbG9hZGVkU2hlZXQoZmFsc2UpCiAjaWYgRU5BQkxFKFNU
WUxFX1NDT1BFRCkKLSAgICAsIG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlKGZhbHNlKQor
ICAgICwgbV9yZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlKE5vdFJlZ2lzdGVyZWQpCiAjZW5kaWYK
IHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShzdHlsZVRhZykpOwpAQCAtNTgsOCArNTksOCBAQCBp
bmxpbmUgSFRNTFN0eWxlRWxlbWVudDo6SFRNTFN0eWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudAogCiBIVE1MU3R5bGVFbGVtZW50Ojp+SFRNTFN0eWxlRWxl
bWVudCgpCiB7Ci0gICAgLy8gRHVyaW5nIHRlYXItZG93biwgd2lsbFJlbW92ZSBpc24ndCBjYWxs
ZWQsIHNvIG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlIG1heSBzdGlsbCBiZSBzZXQgaGVy
ZS4KLSAgICAvLyBUaGVyZWZvcmUgd2UgY2FuJ3QgQVNTRVJUKCFtX2lzUmVnaXN0ZXJlZFdpdGhT
Y29waW5nTm9kZSkuCisgICAgLy8gRHVyaW5nIHRlYXItZG93biwgd2lsbFJlbW92ZSBpc24ndCBj
YWxsZWQsIHNvIG1fcmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSBtYXkgc3RpbGwgYmUgUmVnaXN0
ZXJlZEFzU2NvcGVkIG9yIFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3QgaGVyZS4KKyAgICAvLyBUaGVy
ZWZvcmUgd2UgY2FuJ3QgQVNTRVJUKG1fcmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSA9PSBOb3RS
ZWdpc3RlcmVkKS4KICAgICBTdHlsZUVsZW1lbnQ6OmNsZWFyRG9jdW1lbnREYXRhKGRvY3VtZW50
KCksIHRoaXMpOwogCiAgICAgc3R5bGVMb2FkRXZlbnRTZW5kZXIoKS5jYW5jZWxFdmVudCh0aGlz
KTsKQEAgLTc5LDE3ICs4MCw0MiBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5u
YW1lKCkgPT0gb25lcnJvckF0dHIpCiAgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhp
cywgYXR0cmlidXRlKSk7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBlbHNlIGlmIChh
dHRyaWJ1dGUubmFtZSgpID09IHNjb3BlZEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGUu
aXNOdWxsKCkgJiYgIW1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlICYmIGluRG9jdW1lbnQo
KSkKLSAgICAgICAgICAgIHJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKCk7Ci0gICAgICAgIGVsc2Ug
aWYgKGF0dHJpYnV0ZS5pc051bGwoKSAmJiBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSkK
LSAgICAgICAgICAgIHVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoKTsKLSAgICB9CisgICAgZWxz
ZSBpZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBzY29wZWRBdHRyKQorICAgICAgICBzY29wZWRBdHRy
aWJ1dGVDaGFuZ2VkKCFhdHRyaWJ1dGUuaXNOdWxsKCkpOwogI2VuZGlmCiAgICAgZWxzZQogICAg
ICAgICBIVE1MRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0KIAorI2lmIEVO
QUJMRShTVFlMRV9TQ09QRUQpCit2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNjb3BlZEF0dHJpYnV0
ZUNoYW5nZWQoYm9vbCBzY29wZWQpCit7CisgICAgaWYgKCFpbkRvY3VtZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChzY29wZWQpIHsKKyAgICAgICAgLy8gQXMgYW55IDxzdHlsZT4g
aW4gYSBzaGFkb3cgdHJlZSBpcyB0cmVhdGVkIGFzICJzY29wZWQiLAorICAgICAgICAvLyBuZWVk
IHRvIHJlbW92ZSB0aGUgPHN0eWxlPiBmcm9tIGl0cyBzaGFkb3cgcm9vdC4KKyAgICAgICAgaWYg
KG1fcmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSA9PSBSZWdpc3RlcmVkSW5TaGFkb3dSb290KQor
ICAgICAgICAgICAgdW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShzaGFkb3dSb290KCkpOworCisg
ICAgICAgIGlmIChtX3JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUgIT0gUmVnaXN0ZXJlZEFzU2Nv
cGVkKQorICAgICAgICAgICAgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUodHJ1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgPHN0eWxlPiB3YXMgc2NvcGVkLCBuZWVk
IHRvIHJlbW92ZSB0aGUgPHN0eWxlPiBmcm9tIHRoZSBzY29waW5nCisgICAgLy8gZWxlbWVudCwg
aS5lLiB0aGUgcGFyZW50IG5vZGUuCisgICAgaWYgKG1fcmVnaXN0ZXJlZFdpdGhTY29waW5nTm9k
ZSA9PSBSZWdpc3RlcmVkQXNTY29wZWQpCisgICAgICAgIHVucmVnaXN0ZXJXaXRoU2NvcGluZ05v
ZGUocGFyZW50Tm9kZSgpKTsKKworICAgIC8vIEFzIGFueSA8c3R5bGU+IGluIGEgc2hhZG93IHRy
ZWUgaXMgdHJlYXRlZCBhcyAic2NvcGVkIiwKKyAgICAvLyBuZWVkIHRvIGFkZCB0aGUgPHN0eWxl
PiB0byBpdHMgc2hhZG93IHJvb3QuCisgICAgaWYgKGlzSW5TaGFkb3dUcmVlKCkgJiYgbV9yZWdp
c3RlcmVkV2l0aFNjb3BpbmdOb2RlICE9IFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3QpCisgICAgICAg
IHJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKGZhbHNlKTsKK30KKyNlbmRpZgorCiB2b2lkIEhUTUxT
dHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCiB7CiAgICAgU3R5bGVFbGVtZW50
OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4odGhpcyk7CkBAIC05NywxOCArMTIzLDE4IEBAIHZvaWQg
SFRNTFN0eWxlRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKIH0KIAogI2lmIEVOQUJM
RShTVFlMRV9TQ09QRUQpCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aFNjb3Bp
bmdOb2RlKCkKK3ZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUo
Ym9vbCBzY29wZWQpCiB7CiAgICAgLy8gTm90ZTogV2UgY2Fubm90IHJlbHkgb24gdGhlICdzY29w
ZWQnIGVsZW1lbnQgYWxyZWFkeSBiZWluZyBwcmVzZW50IHdoZW4gdGhpcyBtZXRob2QgaXMgaW52
b2tlZC4KICAgICAvLyBUaGVyZWZvcmUgd2UgY2Fubm90IHJlbHkgb24gc2NvcGVkKCkhCi0gICAg
QVNTRVJUKCFtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSk7CisgICAgQVNTRVJUKG1fcmVn
aXN0ZXJlZFdpdGhTY29waW5nTm9kZSA9PSBOb3RSZWdpc3RlcmVkKTsKICAgICBBU1NFUlQoaW5E
b2N1bWVudCgpKTsKLSAgICBpZiAobV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUpCisgICAg
aWYgKG1fcmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSAhPSBOb3RSZWdpc3RlcmVkKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFDb250ZXh0RW5hYmxlZEZlYXR1cmVzOjpzdHlsZVNjb3BlZEVu
YWJsZWQoZG9jdW1lbnQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENvbnRhaW5lck5vZGUq
IHNjb3BlID0gcGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHNjb3BlID0gc2NvcGVk
ID8gcGFyZW50Tm9kZSgpIDogc2hhZG93Um9vdCgpOwogICAgIGlmICghc2NvcGUpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAoIXNjb3BlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXNjb3BlLT5pc1No
YWRvd1Jvb3QoKSkgewpAQCAtMTIzLDE1ICsxNDksMTUgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50
OjpyZWdpc3RlcldpdGhTY29waW5nTm9kZSgpCiAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiAhZG9j
dW1lbnQoKS0+cGFyc2luZygpICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCkpCiAgICAgICAgIGRv
Y3VtZW50KCktPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOwogCi0gICAg
bV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUgPSB0cnVlOworICAgIG1fcmVnaXN0ZXJlZFdp
dGhTY29waW5nTm9kZSA9IHNjb3BlZCA/IFJlZ2lzdGVyZWRBc1Njb3BlZCA6IFJlZ2lzdGVyZWRJ
blNoYWRvd1Jvb3Q7CiB9CiAKIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6dW5yZWdpc3RlcldpdGhT
Y29waW5nTm9kZShDb250YWluZXJOb2RlKiBzY29wZSkKIHsKICAgICAvLyBOb3RlOiBXZSBjYW5u
b3QgcmVseSBvbiB0aGUgJ3Njb3BlZCcgZWxlbWVudCBzdGlsbCBiZWluZyBwcmVzZW50IHdoZW4g
dGhpcyBtZXRob2QgaXMgaW52b2tlZC4KICAgICAvLyBUaGVyZWZvcmUgd2UgY2Fubm90IHJlbHkg
b24gc2NvcGVkKCkhCi0gICAgQVNTRVJUKG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlIHx8
ICFDb250ZXh0RW5hYmxlZEZlYXR1cmVzOjpzdHlsZVNjb3BlZEVuYWJsZWQoZG9jdW1lbnQoKSkp
OwotICAgIGlmICghbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUpCisgICAgQVNTRVJUKG1f
cmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSAhPSBOb3RSZWdpc3RlcmVkIHx8ICFDb250ZXh0RW5h
YmxlZEZlYXR1cmVzOjpzdHlsZVNjb3BlZEVuYWJsZWQoZG9jdW1lbnQoKSkpOworICAgIGlmICht
X3JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUgPT0gTm90UmVnaXN0ZXJlZCkKICAgICAgICAgcmV0
dXJuOwogICAgIGlmICghQ29udGV4dEVuYWJsZWRGZWF0dXJlczo6c3R5bGVTY29wZWRFbmFibGVk
KGRvY3VtZW50KCkpKQogICAgICAgICByZXR1cm47CkBAIC0xNDUsNyArMTcxLDcgQEAgdm9pZCBI
VE1MU3R5bGVFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKENvbnRhaW5lck5vZGUq
IHNjb3BlKQogICAgIGlmIChpbkRvY3VtZW50KCkgJiYgIWRvY3VtZW50KCktPnBhcnNpbmcoKSAm
JiBkb2N1bWVudCgpLT5yZW5kZXJlcigpKQogICAgICAgICBkb2N1bWVudCgpLT5zdHlsZVJlc29s
dmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKIAotICAgIG1faXNSZWdpc3RlcmVkV2l0aFNj
b3BpbmdOb2RlID0gZmFsc2U7CisgICAgbV9yZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlID0gTm90
UmVnaXN0ZXJlZDsKIH0KICNlbmRpZgogCkBAIC0xNTUsOCArMTgxLDggQEAgTm9kZTo6SW5zZXJ0
aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG8oQ29u
dGFpbmVyTm9kZSoKICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSkgewogICAg
ICAgICBTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KGRvY3VtZW50KCksIHRoaXMp
OwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgICAgIGlmIChzY29wZWQoKSAmJiAhbV9p
c1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUpCi0gICAgICAgICAgICByZWdpc3RlcldpdGhTY29w
aW5nTm9kZSgpOworICAgICAgICBpZiAobV9yZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlID09IE5v
dFJlZ2lzdGVyZWQgJiYgKHNjb3BlZCgpIHx8IGlzSW5TaGFkb3dUcmVlKCkpKQorICAgICAgICAg
ICAgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoc2NvcGVkKCkpOwogI2VuZGlmCiAgICAgfQogCkBA
IC0xNzIsOCArMTk4LDEyIEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29u
dGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQpCiAgICAgLy8gVGhhdCBpcywgYmVjYXVzZSB3aWxs
UmVtb3ZlKCkgaXMgYWxzbyBjYWxsZWQgaWYgYW4gYW5jZXN0b3IgaXMgcmVtb3ZlZCBmcm9tIHRo
ZSBkb2N1bWVudC4KICAgICAvLyBOb3csIGlmIHdlIHdhbnQgdG8gcmVnaXN0ZXIgPHN0eWxlIHNj
b3BlZD4gZXZlbiBpZiBpdCdzIG5vdCBpbkRvY3VtZW50LAogICAgIC8vIHdlJ2QgbmVlZCB0byBm
aW5kIGEgd2F5IHRvIGRpc2Nlcm4gd2hldGhlciB0aGF0IGlzIHRoZSBjYXNlLCBvciB3aGV0aGVy
IDxzdHlsZSBzY29wZWQ+IGl0c2VsZiBpcyBhYm91dCB0byBiZSByZW1vdmVkLgotICAgIGlmICht
X2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSkKLSAgICAgICAgdW5yZWdpc3RlcldpdGhTY29w
aW5nTm9kZShwYXJlbnROb2RlKCkgPyBwYXJlbnROb2RlKCkgOiBpbnNlcnRpb25Qb2ludCk7Cisg
ICAgaWYgKG1fcmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSAhPSBOb3RSZWdpc3RlcmVkKSB7Cisg
ICAgICAgIENvbnRhaW5lck5vZGUqIHNjb3BlID0gcGFyZW50Tm9kZSgpPyBwYXJlbnROb2RlKCkg
OiBpbnNlcnRpb25Qb2ludDsKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJlZFdpdGhTY29waW5nTm9k
ZSA9PSBSZWdpc3RlcmVkSW5TaGFkb3dSb290KQorICAgICAgICAgICAgc2NvcGUgPSBzY29wZS0+
c2hhZG93Um9vdCgpOworICAgICAgICB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKHNjb3BlKTsK
KyAgICB9CiAjZW5kaWYKIAogICAgIGlmIChpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVudCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAppbmRleCA3ZTMxMjU0NTQ5Y2ZlMTFi
ODliMzlkYWVhYjBkOWE0OTkzYjhlZWMyLi41MDBhMDIyZTRlZDVmMWMxZmExZjg5YzI1MjE3MGU1
OTIzMWQ5MzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaApAQCAtNzYs
MTUgKzc2LDIyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG1l
ZGlhKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25z
dDsKIAotICAgIHZvaWQgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoKTsKLSAgICB2b2lkIHVucmVn
aXN0ZXJXaXRoU2NvcGluZ05vZGUoKSB7IHVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUocGFyZW50
Tm9kZSgpKTsgfQotICAgIHZvaWQgdW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShDb250YWluZXJO
b2RlKiBzY29wZSk7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICB2b2lkIHNjb3BlZEF0
dHJpYnV0ZUNoYW5nZWQoYm9vbCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhTY29waW5nTm9kZShi
b29sKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoQ29udGFpbmVyTm9kZSop
OworI2VuZGlmCiAKICAgICBib29sIG1fZmlyZWRMb2FkOwogICAgIGJvb2wgbV9sb2FkZWRTaGVl
dDsKIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgYm9vbCBtX2lzUmVnaXN0ZXJlZFdp
dGhTY29waW5nTm9kZTsKKyAgICBlbnVtIFNjb3BlZFN0eWxlUmVnaXN0ZXJUeXBlIHsKKyAgICAg
ICAgTm90UmVnaXN0ZXJlZCwKKyAgICAgICAgUmVnaXN0ZXJlZEFzU2NvcGVkLAorICAgICAgICBS
ZWdpc3RlcmVkSW5TaGFkb3dSb290CisgICAgfTsKKyAgICBTY29wZWRTdHlsZVJlZ2lzdGVyVHlw
ZSBtX3JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGU7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4ZDU4
OTNhMmI0OWJkYzhiZDk4NDJlNDhkZGY3OGFjNDE5ZDliNjYxLi42ZThkMjFiYWQ2YTg3OGI1M2Q2
YTQ0MTVhZDhkNDQwYmNhNDcyMDMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDYtMDQg
IFRha2FzaGkgU2FrYW1vdG8gIDx0YXNha0Bnb29nbGUuY29tPgorCisgICAgICAgIFtTaGFkb3cg
RE9NXSA8c3R5bGU+IGluc2lkZSBTaGFkb3cgc3VidHJlZSBzaG91bGQgYmUgc2NvcGVkIGluc2lk
ZSB0aGUgc3VidHJlZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg3ODA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvcmVnaXN0ZXJpbmctc2hhZG93cm9vdC1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNo
YWRvd3Jvb3QuaHRtbDoKKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2Nv
cGVkLWNoYW5nZS1zY29wZWQtaW4tc2hhZG93LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1jaGFuZ2Utc2NvcGVkLWluLXNo
YWRvdy5odG1sOiBBZGRlZC4KKwogMjAxMi0wNi0wNyAgVmljdG9yIENhcmJ1bmUgIDx2aWN0b3JA
cm9zZWR1Lm9yZz4KIAogICAgICAgICBhZGRUZXh0VHJhY2sgc2hvdWxkIHNldCB0cmFjayBtb2Rl
IHRvIEhJRERFTgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3JlZ2lzdGVyaW5nLXNoYWRvd3Jvb3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNoYWRvd3Jvb3QtZXhwZWN0ZWQudHh0CmluZGV4
IDg0MmU5OGY3MTE3NjI0MDA1ZWQzMTM0OWVlMDc3YjNjYjA5NDczZDQuLmFiYmJiZTRhNmI2Y2Rj
YWIwNWViMDlhMjAzNTAyOThhZGIwYzViYWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9yZWdpc3RlcmluZy1zaGFkb3dyb290LWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvcmVnaXN0ZXJpbmctc2hhZG93cm9v
dC1leHBlY3RlZC50eHQKQEAgLTE0LDcgKzE0LDcgQEAgUEFTUyBpbnRlcm5hbHMubnVtYmVyT2ZT
Y29wZWRIVE1MU3R5bGVDaGlsZHJlbihob3N0KSBpcyAwCiBQQVNTIGludGVybmFscy5udW1iZXJP
ZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKHNyKSBpcyAxCiAtLS0gVW5zZXR0aW5nIEBzY29wZWQg
LS0tCiBQQVNTIGludGVybmFscy5udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKGhvc3Qp
IGlzIDAKLVBBU1MgaW50ZXJuYWxzLm51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oc3Ip
IGlzIDAKK1BBU1MgaW50ZXJuYWxzLm51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oc3Ip
IGlzIDEKIC0tLSBTZXR0aW5nIEBzY29wZWQgLS0tCiBQQVNTIGludGVybmFscy5udW1iZXJPZlNj
b3BlZEhUTUxTdHlsZUNoaWxkcmVuKGhvc3QpIGlzIDAKIFBBU1MgaW50ZXJuYWxzLm51bWJlck9m
U2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oc3IpIGlzIDEKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9yZWdpc3RlcmluZy1zaGFkb3dyb290Lmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvcmVnaXN0ZXJpbmctc2hhZG93cm9vdC5odG1s
CmluZGV4IDliNGM1NDczNGNiMTZhMDRmZTZmN2NhZDExOTU5NjFlNWQ4MDY4ODUuLjMyOWM4MjIw
YzVmNDBiZWY0Y2VhYTg3NDczYTUyNzQ2NjA0YTMxYTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9yZWdpc3RlcmluZy1zaGFkb3dyb290Lmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNoYWRvd3Jvb3Qu
aHRtbApAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICAgICAgZGVidWcoIi0tLSBVbnNldHRpbmcg
QHNjb3BlZCAtLS0iKTsKICAgICAgICAgICAgIHN0eWxlLnNjb3BlZCA9IGZhbHNlOwogICAgICAg
ICAgICAgc2hvdWxkQmUoImludGVybmFscy5udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVu
KGhvc3QpIiwgIjAiKTsKLSAgICAgICAgICAgIHNob3VsZEJlKCJpbnRlcm5hbHMubnVtYmVyT2ZT
Y29wZWRIVE1MU3R5bGVDaGlsZHJlbihzcikiLCAiMCIpOyAvKiA8c3R5bGU+IGluIHNoYWRvdywg
bm90IHNjb3BlZCAqLworICAgICAgICAgICAgc2hvdWxkQmUoImludGVybmFscy5udW1iZXJPZlNj
b3BlZEhUTUxTdHlsZUNoaWxkcmVuKHNyKSIsICIxIik7IC8qIDxzdHlsZT4gaW4gc2hhZG93LCBu
b3Qgc2NvcGVkICovCiAKICAgICAgICAgICAgIGRlYnVnKCItLS0gU2V0dGluZyBAc2NvcGVkIC0t
LSIpOwogICAgICAgICAgICAgc3R5bGUuc2NvcGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtY2hhbmdlLXNjb3BlZC1p
bi1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1jaGFuZ2Utc2NvcGVkLWluLXNoYWRvdy1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzk2NmFiMWEyYWViMzhhZTU0MzY1MTk4YWMwMjYxYzBkNmRmNjgxOAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQt
Y2hhbmdlLXNjb3BlZC1pbi1zaGFkb3ctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjQgQEAKK1BB
U1Mgd2luZG93LmludGVybmFscyBpcyBkZWZpbmVkLgorUEFTUyB3aW5kb3cuaW50ZXJuYWxzLmVu
c3VyZVNoYWRvd1Jvb3QgaXMgZGVmaW5lZC4KK1BBU1MgV2ViS2l0U2hhZG93Um9vdCBpcyBkZWZp
bmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCit0
ZXN0IGEgc2NvcGVkIHN0eWxlIGluIHNoYWRvdyBzdWJ0cmVlLgorRTogcmdiKDI1NSwgMCwgMCkK
K0Y6IHJnYigwLCAwLCAwKQordGVzdCBhIHN0eWxlIGluIHNoYWRvdyBzdWJ0cmVlLgorRTogcmdi
KDI1NSwgMCwgMCkKK0Y6IHJnYigyNTUsIDAsIDApCit0ZXN0IHN0eWxlcyBpbiBtdWx0aXBsZSBz
aGFkb3cgc3VidHJlZXMuCitFOiByZ2IoMjU1LCAwLCAwKQorRjogcmdiKDI1NSwgMCwgMCkKK0c6
IHJnYigwLCAwLCAyNTUpCit0ZXN0IGEgc2NvcGVkIHN0eWxlIGluIG5lc3RlZCBzaGFkb3cgc3Vi
dHJlZS4KK0U6IHJnYigyNTUsIDAsIDApCitGOiByZ2IoMCwgMCwgMCkKK0c6IHJnYigwLCAwLCAy
NTUpCitIOiByZ2IoMjU1LCAwLCAwKQordGVzdCBhIHN0eWxlIGluIG5lc3RlZCBzaGFkb3cgc3Vi
dHJlZS4KK0U6IHJnYigyNTUsIDAsIDApCitGOiByZ2IoMjU1LCAwLCAwKQorRzogcmdiKDAsIDAs
IDI1NSkKK0g6IHJnYigwLCAwLCAyNTUpCit0ZXN0IGNoYW5naW5nIGEgc3R5bGUgaW4gc2hhZG93
IHN1YnRyZWUgZnJvbSBzY29wZWQgdG8gc2NvcGVkLgorRTogcmdiKDI1NSwgMCwgMCkKK0Y6IHJn
YigwLCAwLCAwKQorRTogcmdiKDI1NSwgMCwgMCkKK0Y6IHJnYigwLCAwLCAwKQordGVzdCBjaGFu
Z2luZyBhIHN0eWxlIGluIHNoYWRvdyBzdWJ0cmVlIGZyb20gc2NvcGVkIHRvIG5vdC1zY29wZWQu
CitFOiByZ2IoMjU1LCAwLCAwKQorRjogcmdiKDAsIDAsIDApCitFOiByZ2IoMjU1LCAwLCAwKQor
RjogcmdiKDI1NSwgMCwgMCkKK3Rlc3QgY2hhbmdpbmcgYSBzdHlsZSBpbiBzaGFkb3cgc3VidHJl
ZSBmcm9tIG5vdC1zY29wZWQgdG8gc2NvcGVkLgorRTogcmdiKDI1NSwgMCwgMCkKK0Y6IHJnYigy
NTUsIDAsIDApCitFOiByZ2IoMjU1LCAwLCAwKQorRjogcmdiKDAsIDAsIDApCit0ZXN0IHJlbW92
aW5nIGEgc2NvcGVkIHN0eWxlIGZyb20gc2hhZG93IHN1YnRyZWUuCitFOiByZ2IoMjU1LCAwLCAw
KQorRjogcmdiKDAsIDAsIDApCitFOiByZ2IoMCwgMCwgMCkKK0Y6IHJnYigwLCAwLCAwKQordGVz
dCByZW1vdmluZyBhIHN0eWxlIGZyb20gc2hhZG93IHN1YnRyZWUuCitFOiByZ2IoMjU1LCAwLCAw
KQorRjogcmdiKDI1NSwgMCwgMCkKK0U6IHJnYigwLCAwLCAwKQorRjogcmdiKDAsIDAsIDApCit0
ZXN0IGluc2VydGluZyBhIHNjb3BlZCBzdHlsZSBpbnRvIHNoYWRvdyBzdWJ0cmVlLgorRTogcmdi
KDI1NSwgMCwgMCkKK0Y6IHJnYigwLCAwLCAwKQordGVzdCBpbnNlcnRpbmcgYSBzdHlsZSBpbnRv
IHNoYWRvdyBzdWJ0cmVlLgorRTogcmdiKDI1NSwgMCwgMCkKK0Y6IHJnYigyNTUsIDAsIDApCit0
ZXN0IHJlLWluc2VydGluZyBhIHN0eWxlIGFmdGVyIGNoYW5naW5nIHNjb3BlZCB0byBub3Qgc2Nv
cGVkIG9mZmxpbmUuCitFOiByZ2IoMjU1LCAwLCAwKQorRjogcmdiKDI1NSwgMCwgMCkKK3Rlc3Qg
cmUtaW5zZXJ0aW5nIGEgc3R5bGUgYWZ0ZXIgY2hhbmdpbmcgbm90IHNjb3BlZCB0byBzY29wZWQg
b2ZmbGluZS4KK0U6IHJnYigyNTUsIDAsIDApCitGOiByZ2IoMCwgMCwgMCkKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1jaGFuZ2Ut
c2NvcGVkLWluLXNoYWRvdy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
L3N0eWxlLXNjb3BlZC1jaGFuZ2Utc2NvcGVkLWluLXNoYWRvdy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJk
YmFkMGE1NzMyYzhkNWFhN2M0ZTQxYWIwYmI2MDFkNzZkNzUzODUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWNoYW5nZS1z
Y29wZWQtaW4tc2hhZG93Lmh0bWwKQEAgLTAsMCArMSwzMTggQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2RvbS9zaGFkb3cvcmVzb3VyY2Vz
L3BvbHlmaWxsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworc2hv
dWxkQmVEZWZpbmVkKCJ3aW5kb3cuaW50ZXJuYWxzIik7CitzaG91bGRCZURlZmluZWQoIndpbmRv
dy5pbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdCIpOworc2hvdWxkQmVEZWZpbmVkKCJXZWJLaXRT
aGFkb3dSb290Iik7CisKK2Z1bmN0aW9uIGR1bXBDb21wdXRlZFN0eWxlKG5vZGUpCit7CisgICAg
ZGVidWcobm9kZS5pZCArICI6ICIgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0
eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworfQorCitmdW5jdGlv
biB0ZXN0U2NvcGVkU3R5bGVJblNoYWRvdygpCit7CisgICAgZGVidWcoInRlc3QgYSBzY29wZWQg
c3R5bGUgaW4gc2hhZG93IHN1YnRyZWUuIik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAg
ICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoZGl2KTsKKyAgICBzaGFkb3cuaW5u
ZXJIVE1MID0gIjxkaXY+PHN0eWxlIHNjb3BlZD5kaXYgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48
ZGl2IGlkPSdFJz5FRUU8L2Rpdj48L2Rpdj48ZGl2IGlkPSdGJz5GRkY8L2Rpdj4iOworICAgIGRv
Y3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5n
ZXRFbGVtZW50QnlJZCgiRSIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxl
bWVudEJ5SWQoIkYiKSk7CisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOworfQor
CitmdW5jdGlvbiB0ZXN0U3R5bGVJblNoYWRvdygpCit7CisgICAgZGVidWcoInRlc3QgYSBzdHls
ZSBpbiBzaGFkb3cgc3VidHJlZS4iKTsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworICAgIHZh
ciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChkaXYpOworICAgIHNoYWRvdy5pbm5lckhU
TUwgPSAiPGRpdj48ZGl2IGlkPSdFJz5FRUU8L2Rpdj48c3R5bGU+ZGl2IHsgY29sb3I6IHJlZDsg
fTwvc3R5bGU+PC9kaXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+IjsKKyAgICBkb2N1bWVudC5ib2R5
Lm9mZnNldExlZnQ7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5
SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJG
IikpOworICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rpb24g
dGVzdFN0eWxlSW5NdWx0aXBsZVNoYWRvdygpCit7CisgICAgZGVidWcoInRlc3Qgc3R5bGVzIGlu
IG11bHRpcGxlIHNoYWRvdyBzdWJ0cmVlcy4iKTsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisKKyAgICB2YXIgc2hhZG93MSA9IG5ldyBXZWJLaXRTaGFkb3dS
b290KGRpdik7CisgICAgc2hhZG93MS5pbm5lckhUTUwgPSAiPGRpdj48c3R5bGU+ZGl2IHsgY29s
b3I6IHJlZDsgfTwvc3R5bGU+PGRpdiBpZD0nRSc+RUVFPC9kaXY+PC9kaXY+PGRpdiBpZD0nRic+
RkZGPC9kaXY+IjsKKworICAgIHZhciBzaGFkb3cyID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoZGl2
KTsKKyAgICBzaGFkb3cyLmlubmVySFRNTCA9ICI8ZGl2PjxzdHlsZSBzY29wZWQ+ZGl2IHsgY29s
b3I6IGJsdWUgfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz48ZGl2IGlkPSdHJz5HR0c8L2Rpdj48
L2Rpdj4iOworCisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworICAgIGRvY3Vt
ZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdzEuZ2V0
RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93MS5nZXRFbGVt
ZW50QnlJZCgiRiIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cyLmdldEVsZW1lbnRC
eUlkKCJHIikpOworICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKK30KKworZnVu
Y3Rpb24gdGVzdFNjb3BlZFN0eWxlSW5OZXN0ZWRTaGFkb3coKQoreworICAgIGRlYnVnKCJ0ZXN0
IGEgc2NvcGVkIHN0eWxlIGluIG5lc3RlZCBzaGFkb3cgc3VidHJlZS4iKTsKKyAgICB2YXIgZGl2
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChkaXYpOworICAgIHZhciBzaGFkb3cxID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoZGl2
KTsKKyAgICBzaGFkb3cxLmlubmVySFRNTCA9ICI8ZGl2PjxzdHlsZSBzY29wZWQ+ZGl2IHsgY29s
b3I6IHJlZDsgfTwvc3R5bGU+PGRpdiBpZD0nRSc+RUVFPC9kaXY+PC9kaXY+PGRpdiBpZD0nRic+
RkZGPC9kaXY+IjsKKyAgICB2YXIgZSA9IHNoYWRvdzEuZ2V0RWxlbWVudEJ5SWQoIkUiKTsKKyAg
ICB2YXIgc2hhZG93MiA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGUpOworICAgIHNoYWRvdzIuaW5u
ZXJIVE1MID0gIjxkaXY+PHN0eWxlIHNjb3BlZD5kaXYgeyBjb2xvcjogYmx1ZTsgfTwvc3R5bGU+
PGRpdiBpZD0nRyc+R0dHRzwvZGl2PjwvZGl2PjxkaXYgaWQ9J0gnPkhISEg8L2Rpdj4iOworICAg
IGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRv
dzEuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93MS5n
ZXRFbGVtZW50QnlJZCgiRiIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cyLmdldEVs
ZW1lbnRCeUlkKCJHIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdzIuZ2V0RWxlbWVu
dEJ5SWQoIkgiKSk7CisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOworfQorCitm
dW5jdGlvbiB0ZXN0U3R5bGVJbk5lc3RlZFNoYWRvdygpCit7CisgICAgZGVidWcoInRlc3QgYSBz
dHlsZSBpbiBuZXN0ZWQgc2hhZG93IHN1YnRyZWUuIik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2
KTsKKyAgICB2YXIgc2hhZG93MSA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGRpdik7CisgICAgc2hh
ZG93MS5pbm5lckhUTUwgPSAiPGRpdj48c3R5bGU+ZGl2IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+
PGRpdiBpZD0nRSc+RUVFPC9kaXY+PC9kaXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+IjsKKyAgICB2
YXIgZSA9IHNoYWRvdzEuZ2V0RWxlbWVudEJ5SWQoIkUiKTsKKyAgICB2YXIgc2hhZG93MiA9IG5l
dyBXZWJLaXRTaGFkb3dSb290KGUpOworICAgIHNoYWRvdzIuaW5uZXJIVE1MID0gIjxkaXY+PHN0
eWxlPmRpdiB7IGNvbG9yOiBibHVlOyB9PC9zdHlsZT48ZGl2IGlkPSdHJz5HR0dHPC9kaXY+PC9k
aXY+PGRpdiBpZD0nSCc+SEhISDwvZGl2PiI7CisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0
OworCisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93MS5nZXRFbGVtZW50QnlJZCgiRSIpKTsK
KyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cxLmdldEVsZW1lbnRCeUlkKCJGIikpOworICAg
IGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdzIuZ2V0RWxlbWVudEJ5SWQoIkciKSk7CisgICAgZHVt
cENvbXB1dGVkU3R5bGUoc2hhZG93Mi5nZXRFbGVtZW50QnlJZCgiSCIpKTsKKyAgICBkb2N1bWVu
dC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK2Z1bmN0aW9uIHRlc3RDaGFuZ2VTY29wZWRU
b1Njb3BlZCgpCit7CisgICAgZGVidWcoInRlc3QgY2hhbmdpbmcgYSBzdHlsZSBpbiBzaGFkb3cg
c3VidHJlZSBmcm9tIHNjb3BlZCB0byBzY29wZWQuIik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2
KTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoZGl2KTsKKyAgICBzaGFk
b3cuaW5uZXJIVE1MID0gIjxkaXY+PHN0eWxlIHNjb3BlZCBpZD0nc3R5bGUtaW4tc2hhZG93Jz5k
aXYgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48ZGl2IGlkPSdFJz5FRUU8L2Rpdj48L2Rpdj48ZGl2
IGlkPSdGJz5GRkY8L2Rpdj4iOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAg
IC8vIGJlZm9yZQorICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgi
RSIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkYiKSk7
CisKKyAgICBzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoInN0eWxlLWluLXNoYWRvdyIpLnNldEF0dHJp
YnV0ZSgic2NvcGVkIiwgInNjb3BlZCIpOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsK
KworICAgIC8vIGFmdGVyCisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRC
eUlkKCJFIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgi
RiIpKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK2Z1bmN0aW9u
IHRlc3RDaGFuZ2VTY29wZWRUb05vdFNjb3BlZCgpCit7CisgICAgZGVidWcoInRlc3QgY2hhbmdp
bmcgYSBzdHlsZSBpbiBzaGFkb3cgc3VidHJlZSBmcm9tIHNjb3BlZCB0byBub3Qtc2NvcGVkLiIp
OworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBkb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGRpdik7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8ZGl2PjxzdHlsZSBzY29w
ZWQgaWQ9J3N0eWxlLWluLXNoYWRvdyc+ZGl2IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGRpdiBp
ZD0nRSc+RUVFPC9kaXY+PC9kaXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+IjsKKyAgICBkb2N1bWVu
dC5ib2R5Lm9mZnNldExlZnQ7CisKKyAgICAvLyBiZWZvcmUKKyAgICBkdW1wQ29tcHV0ZWRTdHls
ZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hh
ZG93LmdldEVsZW1lbnRCeUlkKCJGIikpOworCisgICAgc2hhZG93LmdldEVsZW1lbnRCeUlkKCJz
dHlsZS1pbi1zaGFkb3ciKS5yZW1vdmVBdHRyaWJ1dGUoInNjb3BlZCIpOworICAgIGRvY3VtZW50
LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIC8vIGFmdGVyCisgICAgZHVtcENvbXB1dGVkU3R5bGUo
c2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRv
dy5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRp
dik7Cit9CisKK2Z1bmN0aW9uIHRlc3RDaGFuZ2VOb3RTY29wZWRUb1Njb3BlZCgpCit7CisgICAg
ZGVidWcoInRlc3QgY2hhbmdpbmcgYSBzdHlsZSBpbiBzaGFkb3cgc3VidHJlZSBmcm9tIG5vdC1z
Y29wZWQgdG8gc2NvcGVkLiIpOworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CisgICAgdmFyIHNo
YWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGRpdik7CisgICAgc2hhZG93LmlubmVySFRNTCA9
ICI8ZGl2PjxzdHlsZSBpZD0nc3R5bGUtaW4tc2hhZG93Jz5kaXYgeyBjb2xvcjogcmVkOyB9PC9z
dHlsZT48ZGl2IGlkPSdFJz5FRUU8L2Rpdj48L2Rpdj48ZGl2IGlkPSdGJz5GRkY8L2Rpdj4iOwor
ICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIC8vIGJlZm9yZQorICAgIGR1bXBD
b21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRSIpKTsKKyAgICBkdW1wQ29tcHV0
ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkYiKSk7CisKKyAgICBzaGFkb3cuZ2V0RWxl
bWVudEJ5SWQoInN0eWxlLWluLXNoYWRvdyIpLnNldEF0dHJpYnV0ZSgic2NvcGVkIiwgInNjb3Bl
ZCIpOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIC8vIGFmdGVyCisgICAg
ZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikpOworICAgIGR1bXBD
b21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKyAgICBkb2N1bWVudC5i
b2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVTY29wZWRTdHls
ZUZyb21Eb2N1bWVudCgpCit7CisgICAgZGVidWcoInRlc3QgcmVtb3ZpbmcgYSBzY29wZWQgc3R5
bGUgZnJvbSBzaGFkb3cgc3VidHJlZS4iKTsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworICAg
IHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChkaXYpOworICAgIHNoYWRvdy5pbm5l
ckhUTUwgPSAiPGRpdj48c3R5bGUgc2NvcGVkIGlkPSdzdHlsZS1pbi1zaGFkb3cnPmRpdiB7IGNv
bG9yOiByZWQ7IH08L3N0eWxlPjxkaXYgaWQ9J0UnPkVFRTwvZGl2PjwvZGl2PjxkaXYgaWQ9J0Yn
PkZGRjwvZGl2PiI7CisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworCisgICAgLy8gYmVm
b3JlCisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikpOwor
ICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKworICAg
IHZhciBzdHlsZUluU2hhZG93ID0gc2hhZG93LmdldEVsZW1lbnRCeUlkKCJzdHlsZS1pbi1zaGFk
b3ciKTsKKyAgICBzdHlsZUluU2hhZG93LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVJblNo
YWRvdyk7CisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworCisgICAgLy8gYWZ0ZXIKKyAg
ICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVt
cENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJGIikpOworICAgIGRvY3VtZW50
LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rpb24gdGVzdFJlbW92ZVN0eWxlRnJv
bURvY3VtZW50KCkKK3sKKyAgICBkZWJ1ZygidGVzdCByZW1vdmluZyBhIHN0eWxlIGZyb20gc2hh
ZG93IHN1YnRyZWUuIik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB2YXIgc2hhZG93
ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoZGl2KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxk
aXY+PHN0eWxlIGlkPSdzdHlsZS1pbi1zaGFkb3cnPmRpdiB7IGNvbG9yOiByZWQ7IH08L3N0eWxl
PjxkaXYgaWQ9J0UnPkVFRTwvZGl2PjwvZGl2PjxkaXYgaWQ9J0YnPkZGRjwvZGl2PiI7CisgICAg
ZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworCisgICAgLy8gYmVmb3JlCisgICAgZHVtcENvbXB1
dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikpOworICAgIGR1bXBDb21wdXRlZFN0
eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKworICAgIHZhciBzdHlsZUluU2hhZG93
ID0gc2hhZG93LmdldEVsZW1lbnRCeUlkKCJzdHlsZS1pbi1zaGFkb3ciKTsKKyAgICBzdHlsZUlu
U2hhZG93LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVJblNoYWRvdyk7CisgICAgZG9jdW1l
bnQuYm9keS5vZmZzZXRMZWZ0OworCisgICAgLy8gYWZ0ZXIKKyAgICBkdW1wQ29tcHV0ZWRTdHls
ZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hh
ZG93LmdldEVsZW1lbnRCeUlkKCJGIikpOworICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQo
ZGl2KTsKK30KKworZnVuY3Rpb24gdGVzdEluc2VydFNjb3BlZFN0eWxlSW50b0RvY3VtZW50KCkK
K3sKKyAgICBkZWJ1ZygidGVzdCBpbnNlcnRpbmcgYSBzY29wZWQgc3R5bGUgaW50byBzaGFkb3cg
c3VidHJlZS4iKTsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworICAgIHZhciBzaGFkb3cgPSBu
ZXcgV2ViS2l0U2hhZG93Um9vdChkaXYpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPGRpdj48
ZGl2IGlkPSdFJz5FRUU8L2Rpdj48L2Rpdj48ZGl2IGlkPSdGJz5GRkY8L2Rpdj4iOworICAgIGRv
Y3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInN0eWxlIik7CisgICAgc3R5bGUuaW5uZXJIVE1MID0gImRpdiB7IGNvbG9yOiBy
ZWQ7IH0iOworICAgIHN0eWxlLnNldEF0dHJpYnV0ZSgic2NvcGVkIiwgInNjb3BlZCIpOworICAg
IHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRSIpLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoc3R5bGUp
OworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIGR1bXBDb21wdXRlZFN0eWxl
KHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRSIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFk
b3cuZ2V0RWxlbWVudEJ5SWQoIkYiKSk7CisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChk
aXYpOworfQorCitmdW5jdGlvbiB0ZXN0SW5zZXJ0U3R5bGVJbnRvRG9jdW1lbnQoKQoreworICAg
IGRlYnVnKCJ0ZXN0IGluc2VydGluZyBhIHN0eWxlIGludG8gc2hhZG93IHN1YnRyZWUuIik7Cisg
ICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGRvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoZGl2KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxkaXY+PGRpdiBpZD0nRSc+RUVF
PC9kaXY+PC9kaXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+IjsKKyAgICBkb2N1bWVudC5ib2R5Lm9m
ZnNldExlZnQ7CisKKyAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHls
ZSIpOworICAgIHN0eWxlLmlubmVySFRNTCA9ICJkaXYgeyBjb2xvcjogcmVkOyB9IjsKKyAgICBz
aGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHN0eWxlKTsK
KyAgICBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShz
aGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93
LmdldEVsZW1lbnRCeUlkKCJGIikpOworICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2
KTsKK30KKworZnVuY3Rpb24gdGVzdENoYW5nZVNjb3BlZFRvTm90U2NvcGVkTm90SW5Eb2N1bWVu
dCgpCit7CisgICAgZGVidWcoInRlc3QgcmUtaW5zZXJ0aW5nIGEgc3R5bGUgYWZ0ZXIgY2hhbmdp
bmcgc2NvcGVkIHRvIG5vdCBzY29wZWQgb2ZmbGluZS4iKTsKKyAgICB2YXIgZGl2ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChk
aXYpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChkaXYpOworICAgIHNo
YWRvdy5pbm5lckhUTUwgPSAiPGRpdj48c3R5bGUgc2NvcGVkIGlkPSdzdHlsZS1pbi1zaGFkb3cn
PmRpdiB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxkaXYgaWQ9J0UnPkVFRTwvZGl2PjwvZGl2Pjxk
aXYgaWQ9J0YnPkZGRjwvZGl2PiI7CisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworCisg
ICAgdmFyIHN0eWxlID0gc2hhZG93LmdldEVsZW1lbnRCeUlkKCJzdHlsZS1pbi1zaGFkb3ciKTsK
KyAgICBzdHlsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlKTsKKyAgICBzdHlsZS5yZW1v
dmVBdHRyaWJ1dGUoInNjb3BlZCIpOworICAgIHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRSIpLnBh
cmVudE5vZGUuYXBwZW5kQ2hpbGQoc3R5bGUpOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVm
dDsKKworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRSIpKTsK
KyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkYiKSk7CisgICAg
ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOworfQorCitmdW5jdGlvbiB0ZXN0Q2hhbmdl
Tm90U2NvcGVkVG9TY29wZWROb3RJbkRvY3VtZW50KCkKK3sKKyAgICBkZWJ1ZygidGVzdCByZS1p
bnNlcnRpbmcgYSBzdHlsZSBhZnRlciBjaGFuZ2luZyBub3Qgc2NvcGVkIHRvIHNjb3BlZCBvZmZs
aW5lLiIpOworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBX
ZWJLaXRTaGFkb3dSb290KGRpdik7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8ZGl2PjxzdHls
ZSBpZD0nc3R5bGUtaW4tc2hhZG93Jz5kaXYgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48ZGl2IGlk
PSdFJz5FRUU8L2Rpdj48L2Rpdj48ZGl2IGlkPSdGJz5GRkY8L2Rpdj4iOworICAgIGRvY3VtZW50
LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIHZhciBzdHlsZSA9IHNoYWRvdy5nZXRFbGVtZW50QnlJ
ZCgic3R5bGUtaW4tc2hhZG93Iik7CisgICAgc3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChz
dHlsZSk7CisgICAgc3R5bGUuc2V0QXR0cmlidXRlKCJzY29wZWQiLCAic2NvcGVkIik7CisgICAg
c2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChzdHlsZSk7
CisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworCisgICAgZHVtcENvbXB1dGVkU3R5bGUo
c2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRv
dy5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRp
dik7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3RzKCkKK3sKKyAgICB0ZXN0U2NvcGVkU3R5bGVJblNo
YWRvdygpOworICAgIHRlc3RTdHlsZUluU2hhZG93KCk7CisgICAgdGVzdFN0eWxlSW5NdWx0aXBs
ZVNoYWRvdygpOworICAgIHRlc3RTY29wZWRTdHlsZUluTmVzdGVkU2hhZG93KCk7CisgICAgdGVz
dFN0eWxlSW5OZXN0ZWRTaGFkb3coKTsKKyAgICB0ZXN0Q2hhbmdlU2NvcGVkVG9TY29wZWQoKTsK
KyAgICB0ZXN0Q2hhbmdlU2NvcGVkVG9Ob3RTY29wZWQoKTsKKyAgICB0ZXN0Q2hhbmdlTm90U2Nv
cGVkVG9TY29wZWQoKTsKKyAgICB0ZXN0UmVtb3ZlU2NvcGVkU3R5bGVGcm9tRG9jdW1lbnQoKTsK
KyAgICB0ZXN0UmVtb3ZlU3R5bGVGcm9tRG9jdW1lbnQoKTsKKyAgICB0ZXN0SW5zZXJ0U2NvcGVk
U3R5bGVJbnRvRG9jdW1lbnQoKTsKKyAgICB0ZXN0SW5zZXJ0U3R5bGVJbnRvRG9jdW1lbnQoKTsK
KyAgICB0ZXN0Q2hhbmdlU2NvcGVkVG9Ob3RTY29wZWROb3RJbkRvY3VtZW50KCk7CisgICAgdGVz
dENoYW5nZU5vdFNjb3BlZFRvU2NvcGVkTm90SW5Eb2N1bWVudCgpOworfQorPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgorICA8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146776</attachid>
            <date>2012-06-10 21:22:41 -0700</date>
            <delta_ts>2012-06-12 05:28:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87805-20120611132240.patch</filename>
            <type>text/plain</type>
            <size>29453</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ1YmVjYmRlNDc0MWRi
MjJjMTYwMDhmNDM2Y2U5MzcxNjc5YjBiOC4uYzc5M2M3OTg5YzZkYTZlNDlmMzI5NWMxYWZlMWVj
Nzk2OGRmMDljOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTA2LTA0ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0g
PHN0eWxlPiBpbnNpZGUgU2hhZG93IHN1YnRyZWUgc2hvdWxkIGJlIHNjb3BlZCBpbnNpZGUgdGhl
IHN1YnRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04NzgwNQorCisgICAgICAgIE1vZGlmaWVkIEhUTUxTdHlsZUVsZW1lbnQgdG8gYmUgdHJlYXRl
ZCBhcyBhIHNjb3BlZCBzdHlsZSBpbmRlcGVuZGVudAorICAgICAgICBvZiBpdHMgInNjb3BlZCIg
YXR0cmlidXRlJ3MgdmFsdWUgaWYgSFRNTFN0eWxlRWxlbWVudCBpcyBpbiBzaGFkb3cKKyAgICAg
ICAgc3VidHJlZS4gSFRNTFN0eWxlRWxlbWVudCBoYXMgdGhlIGZvbGxvd2luZyBmb3VyIGNhc2Vz
IHRhbGtpbmcgYWJvdXQKKyAgICAgICAgInNjb3BlZCIgYXR0cmlidXRlIGFuZCB3aGV0aGVyIGlz
IGluIHNoYWRvdyBzdWJ0cmVlIG9yIG5vdDoKKyAgICAgICAgMSwgSFRNTFN0eWxlRWxlbWVudCBp
cyAic2NvcGVkIiBhbmQgaXMgaW4gZG9jdW1lbnQgdHJlZSwKKyAgICAgICAgMiwgSFRNTFN0eWxl
RWxlbWVudCBpcyAic2NvcGVkIiBhbmQgaXMgaW4gc2hhZG93IHN1YnRyZWUsCisgICAgICAgIDMs
IEhUTUxTdHlsZUVsZW1lbnQgaXMgbm90ICJzY29wZWQiIGFuZCBpcyBpbiBkb2N1bWVudCB0cmVl
LCBhbmQKKyAgICAgICAgNCwgSFRNTFN0eWxlRWxlbWVudCBpcyBub3QgInNjb3BlZCIgYW5kIGlz
IGluIHNoYWRvdyBzdWJ0cmVlLgorICAgICAgICBUaGUgY2FzZSAxIGFuZCAyIGFyZSBub3QgY2hh
bmdlZC4gVGhpcyBwYXRjaCBhZmZlY3RlZCB0aGUgY2FzZSA0LgorICAgICAgICBBdCB0aGUgY2Fz
ZSA0LCB0aGUgSFRNTFN0eWxlRWxlbWVudCdzIHNjb3Bpbmcgbm9kZSBpcyB0aGUgc2hhZG93IHJv
b3QuCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIHRoZSBmaXJzdCBzdGVwIGZvciBmaXhpbmcgc3R5
bGUgc2NvcGUgYnVnLAorICAgICAgICBpLmUuIEhUTUxTdHlsZUVsZW1lbnRzIGluIHNoYWRvdyBz
dWJ0cmVlIGFyZSBhcHBsaWVkIHRvIGFueSBlbGVtZW50CisgICAgICAgIGluIGRvY3VtZW50IHRy
ZWUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVz
dDogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1jaGFuZ2Utc2NvcGVkLWluLXNo
YWRvdy5odG1sCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkZXRlcm1pbmVTY29wZSk6CisgICAgICAgIE1vZGlmaWVk
IHRvIHJldHVybiBhIHNoYWRvdyByb290IGlmIGEgdGFyZ2V0ZWQgc3R5bGVzaGVldCBvd25lciBu
b2RlIGlzCisgICAgICAgIG5vdCBzY29wZWQgYnV0IGluIHNvbWUgc2hhZG93IERPTSBzdWJ0cmVl
LgorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgTW9kaWZpZWQgdG8g
dXNlIHRoZSBiZWxvdyBzY29wZWRBdHRyaWJ1dGVDaGFuZ2VkIHdoZW4gYSBjaGFuZ2VkCisgICAg
ICAgIGF0dHJpYnV0ZSdzIG5hbWUgaXMgInNjb3BlZCIuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
U3R5bGVFbGVtZW50OjpzY29wZWRBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgTmV3bHkgYWRk
ZWQuIEFjY29yZGluZyB0byBuZXcgc2NvcGVkIHZhbHVlIGFuZCBpc0luU2hhZG93VHJlZSwKKyAg
ICAgICAgYWRkIG9yIHJlbW92ZSBzdHlsZSBydWxlcyB0by9mcm9tIHNjb3BlZEF1dGhvclJ1bGVz
IHZpYQorICAgICAgICByZWdpc3RlcldpdGhTY29waW5nTm9kZSBvciB1bnJlZ2lzdGVyV2l0aFNj
b3BpbmdOb2RlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6cmVnaXN0ZXJX
aXRoU2NvcGluZ05vZGUpOgorICAgICAgICBBZGRlZCBvbmUgYm9vbGVhbiBhcmd1bWVudCB0byBk
ZXRlcm1pbmUgd2hldGhlciBIVE1MU3R5bGVFbGVtZW50IGlzCisgICAgICAgIHNjb3BlZCBvciBu
b3QuIFRoZSByZWFzb24gd2h5IG5vdCB1c2luZyBzY29wZWQoKSBpcyB0aGUgY29tbWVudDoKKyAg
ICAgICAgIldlIGNhbm5vdCByZWx5IG9uIHRoZSBzY29wZWQgZWxlbWVudCBhbHJlYWR5IGJlaW5n
IHByZXNlbnQgd2hlbiB0aGlzCisgICAgICAgIG1ldGhvZCBpcyBpbnZva2VkLiBUaGVyZWZvcmUg
d2UgY2Fubm90IHJlbHkgb24gc2NvcGVkKCkiCisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVF
bGVtZW50Ojp1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKToKKyAgICAgICAgQ2hhbmdlZCB0aGUg
Y29kZSBmb3IgdXBkYXRpbmcgbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUuIE5vdworICAg
ICAgICBzZXQgbV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRlIHRvIGJlIE5vdFJlZ2lzdGVy
ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG8pOgor
ICAgICAgICBNb2RpZmllZCB0byBpbnZva2UgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUgd2hlbiBh
biBlbGVtZW50IGlzIG5vdAorICAgICAgICBzY29wZWQgYnV0IGluIHNvbWUgc2hhZG93IHN1YnRy
ZWUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbSk6Cisg
ICAgICAgIE1vZGlmaWVkIHRvIGludm9rZSB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlIHdoZW4g
YW4gZWxlbWVudCBpcyBub3QKKyAgICAgICAgc2NvcGVkIGJ1dCBpbiBzb21lIHNoYWRvdyBzdWJ0
cmVlLgorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5oOgorICAgICAgICAoSFRNTFN0
eWxlRWxlbWVudCk6CisgICAgICAgIE1vZGlmaWVkIHRoZSB0eXBlIG9mIG1faXNSZWdpc3RlcmVk
V2l0aFNjb3BpbmdOb2RlIGZyb20gYm9vbCB0bworICAgICAgICBlbnVtIGFuZCByZW5hbWVkIHRv
IG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZS4gTm93IHRoZSBtZW1iZXIKKyAgICAgICAg
dmFyaWFibGUga2VlcHMgd2hhdCBIVE1MU3R5bGVFbGVtZW50J3Mgc2NvcGluZyBub2RlIGlzLCBp
LmUuCisgICAgICAgIG5vbmUgKHRoaXMgbWVhbnMsIG5vdCBpbiBzaGFkb3cgc3VidHJlZSBhbmQg
bm90IHNjb3BlZCksIHNoYWRvdyByb290IG9yCisgICAgICAgIHBhcmVudCBub2RlLgorICAgICAg
ICBBZGRlZCBvbmUgbmV3IG1ldGhvZCBzY29wZWRBdHRyaWJ1dGVDaGFuZ2VkJ3MgZGVjbGFyYXRp
b24gYW5kCisgICAgICAgIG1vZGlmaWVkIHRoZSBkZWNsYXJhdGlvbiBvZiByZWdpc3RlcldpdGhT
Y29waW5nTm9kZS4KKwogMjAxMi0wNi0xMCAgUGFibG8gRmxvdXJldCAgPHBhYmxvZkBtb3Rvcm9s
YS5jb20+CiAKICAgICAgICAgQWNjZXNzIGNvbnRyb2wgYWxsb3cgbGlzdHMgc3RhcnRpbmcgd2l0
aCBhIGNvbW1hIGFyZSBwYXJzZWQgaW5jb3JyZWN0bHkgKENPUlMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKaW5kZXggZGUzMDAxYzM0NGEzZDM2NWM1OTM0ZGRmYzkyNTQ3YmQxZWFh
ZGIzMS4uNTgzMDFhMmI3N2I1N2FkOTBiYTQxZTFiYTlkNmQ3ZGU3ZDA5MGY3MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNTAwLDcgKzUwMCw3IEBAIGNvbnN0IENvbnRh
aW5lck5vZGUqIFN0eWxlUmVzb2x2ZXI6OmRldGVybWluZVNjb3BlKGNvbnN0IENTU1N0eWxlU2hl
ZXQqIHNoZWV0KQogCiAgICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KG93bmVyTm9kZSk7CiAgICAgaWYgKCFzdHlsZUVsZW1l
bnQtPnNjb3BlZCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHN0eWxlRWxl
bWVudC0+aXNJblNoYWRvd1RyZWUoKT8gc3R5bGVFbGVtZW50LT5zaGFkb3dSb290KCkgOiAwOwog
CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gc3R5bGVFbGVtZW50LT5wYXJlbnROb2RlKCk7
CiAgICAgaWYgKCFwYXJlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
dHlsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNw
cAppbmRleCA2N2RkY2ViNGZhYTNmYTdlY2RhNTM0NTc3MzZmYzVkNmNlMzhlZjRjLi4zMTZlYmJj
M2Q5NzUyN2M4Njc2NDEwMDI2ZDEzMmY3N2QxMDAwZTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFN0eWxlRWxlbWVudC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0
YWJsZURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUg
IlN0eWxlU2hlZXRDb250ZW50cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MCw3ICs1
MSw3IEBAIGlubGluZSBIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50CiAgICAgLCBtX2ZpcmVkTG9hZChmYWxzZSkK
ICAgICAsIG1fbG9hZGVkU2hlZXQoZmFsc2UpCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAg
ICAsIG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlKGZhbHNlKQorICAgICwgbV9zY29wZWRT
dHlsZVJlZ2lzdHJhdGlvblN0YXRlKE5vdFJlZ2lzdGVyZWQpCiAjZW5kaWYKIHsKICAgICBBU1NF
UlQoaGFzVGFnTmFtZShzdHlsZVRhZykpOwpAQCAtNTgsOCArNTksOCBAQCBpbmxpbmUgSFRNTFN0
eWxlRWxlbWVudDo6SFRNTFN0eWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudAogCiBIVE1MU3R5bGVFbGVtZW50Ojp+SFRNTFN0eWxlRWxlbWVudCgpCiB7Ci0g
ICAgLy8gRHVyaW5nIHRlYXItZG93biwgd2lsbFJlbW92ZSBpc24ndCBjYWxsZWQsIHNvIG1faXNS
ZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlIG1heSBzdGlsbCBiZSBzZXQgaGVyZS4KLSAgICAvLyBU
aGVyZWZvcmUgd2UgY2FuJ3QgQVNTRVJUKCFtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSku
CisgICAgLy8gRHVyaW5nIHRlYXItZG93biwgd2lsbFJlbW92ZSBpc24ndCBjYWxsZWQsIHNvIG1f
c2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSBtYXkgc3RpbGwgYmUgUmVnaXN0ZXJlZEFzU2Nv
cGVkIG9yIFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3QgaGVyZS4KKyAgICAvLyBUaGVyZWZvcmUgd2Ug
Y2FuJ3QgQVNTRVJUKG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBOb3RSZWdpc3Rl
cmVkKS4KICAgICBTdHlsZUVsZW1lbnQ6OmNsZWFyRG9jdW1lbnREYXRhKGRvY3VtZW50KCksIHRo
aXMpOwogCiAgICAgc3R5bGVMb2FkRXZlbnRTZW5kZXIoKS5jYW5jZWxFdmVudCh0aGlzKTsKQEAg
LTc5LDE3ICs4MCw0MiBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNv
bnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5uYW1lKCkg
PT0gb25lcnJvckF0dHIpCiAgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcygpLmVycm9yRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0
cmlidXRlKSk7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBlbHNlIGlmIChhdHRyaWJ1
dGUubmFtZSgpID09IHNjb3BlZEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGUuaXNOdWxs
KCkgJiYgIW1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlICYmIGluRG9jdW1lbnQoKSkKLSAg
ICAgICAgICAgIHJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKCk7Ci0gICAgICAgIGVsc2UgaWYgKGF0
dHJpYnV0ZS5pc051bGwoKSAmJiBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSkKLSAgICAg
ICAgICAgIHVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoKTsKLSAgICB9CisgICAgZWxzZSBpZiAo
YXR0cmlidXRlLm5hbWUoKSA9PSBzY29wZWRBdHRyKQorICAgICAgICBzY29wZWRBdHRyaWJ1dGVD
aGFuZ2VkKCFhdHRyaWJ1dGUuaXNOdWxsKCkpOwogI2VuZGlmCiAgICAgZWxzZQogICAgICAgICBI
VE1MRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0KIAorI2lmIEVOQUJMRShT
VFlMRV9TQ09QRUQpCit2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNjb3BlZEF0dHJpYnV0ZUNoYW5n
ZWQoYm9vbCBzY29wZWQpCit7CisgICAgaWYgKCFpbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChzY29wZWQpIHsKKyAgICAgICAgLy8gQXMgYW55IDxzdHlsZT4gaW4gYSBz
aGFkb3cgdHJlZSBpcyB0cmVhdGVkIGFzICJzY29wZWQiLAorICAgICAgICAvLyBuZWVkIHRvIHJl
bW92ZSB0aGUgPHN0eWxlPiBmcm9tIGl0cyBzaGFkb3cgcm9vdC4KKyAgICAgICAgaWYgKG1fc2Nv
cGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkSW5TaGFkb3dSb290KQorICAg
ICAgICAgICAgdW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShzaGFkb3dSb290KCkpOworCisgICAg
ICAgIGlmIChtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgIT0gUmVnaXN0ZXJlZEFzU2Nv
cGVkKQorICAgICAgICAgICAgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUodHJ1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgPHN0eWxlPiB3YXMgc2NvcGVkLCBuZWVk
IHRvIHJlbW92ZSB0aGUgPHN0eWxlPiBmcm9tIHRoZSBzY29waW5nCisgICAgLy8gZWxlbWVudCwg
aS5lLiB0aGUgcGFyZW50IG5vZGUuCisgICAgaWYgKG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25T
dGF0ZSA9PSBSZWdpc3RlcmVkQXNTY29wZWQpCisgICAgICAgIHVucmVnaXN0ZXJXaXRoU2NvcGlu
Z05vZGUocGFyZW50Tm9kZSgpKTsKKworICAgIC8vIEFzIGFueSA8c3R5bGU+IGluIGEgc2hhZG93
IHRyZWUgaXMgdHJlYXRlZCBhcyAic2NvcGVkIiwKKyAgICAvLyBuZWVkIHRvIGFkZCB0aGUgPHN0
eWxlPiB0byBpdHMgc2hhZG93IHJvb3QuCisgICAgaWYgKGlzSW5TaGFkb3dUcmVlKCkgJiYgbV9z
Y29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRlICE9IFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3QpCisg
ICAgICAgIHJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKGZhbHNlKTsKK30KKyNlbmRpZgorCiB2b2lk
IEhUTUxTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCiB7CiAgICAgU3R5bGVF
bGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4odGhpcyk7CkBAIC05NywxOCArMTIzLDE4IEBA
IHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKIH0KIAogI2lm
IEVOQUJMRShTVFlMRV9TQ09QRUQpCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnJlZ2lzdGVyV2l0
aFNjb3BpbmdOb2RlKCkKK3ZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cmVnaXN0ZXJXaXRoU2NvcGlu
Z05vZGUoYm9vbCBzY29wZWQpCiB7CiAgICAgLy8gTm90ZTogV2UgY2Fubm90IHJlbHkgb24gdGhl
ICdzY29wZWQnIGVsZW1lbnQgYWxyZWFkeSBiZWluZyBwcmVzZW50IHdoZW4gdGhpcyBtZXRob2Qg
aXMgaW52b2tlZC4KICAgICAvLyBUaGVyZWZvcmUgd2UgY2Fubm90IHJlbHkgb24gc2NvcGVkKCkh
Ci0gICAgQVNTRVJUKCFtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSk7CisgICAgQVNTRVJU
KG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBOb3RSZWdpc3RlcmVkKTsKICAgICBB
U1NFUlQoaW5Eb2N1bWVudCgpKTsKLSAgICBpZiAobV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05v
ZGUpCisgICAgaWYgKG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSAhPSBOb3RSZWdpc3Rl
cmVkKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFDb250ZXh0RW5hYmxlZEZlYXR1cmVzOjpz
dHlsZVNjb3BlZEVuYWJsZWQoZG9jdW1lbnQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENv
bnRhaW5lck5vZGUqIHNjb3BlID0gcGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHNj
b3BlID0gc2NvcGVkID8gcGFyZW50Tm9kZSgpIDogc2hhZG93Um9vdCgpOwogICAgIGlmICghc2Nv
cGUpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXNjb3BlLT5pc0VsZW1lbnROb2RlKCkgJiYg
IXNjb3BlLT5pc1NoYWRvd1Jvb3QoKSkgewpAQCAtMTIzLDE1ICsxNDksMTUgQEAgdm9pZCBIVE1M
U3R5bGVFbGVtZW50OjpyZWdpc3RlcldpdGhTY29waW5nTm9kZSgpCiAgICAgaWYgKGluRG9jdW1l
bnQoKSAmJiAhZG9jdW1lbnQoKS0+cGFyc2luZygpICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCkp
CiAgICAgICAgIGRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5
bGUpOwogCi0gICAgbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUgPSB0cnVlOworICAgIG1f
c2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9IHNjb3BlZCA/IFJlZ2lzdGVyZWRBc1Njb3Bl
ZCA6IFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3Q7CiB9CiAKIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6
dW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShDb250YWluZXJOb2RlKiBzY29wZSkKIHsKICAgICAv
LyBOb3RlOiBXZSBjYW5ub3QgcmVseSBvbiB0aGUgJ3Njb3BlZCcgZWxlbWVudCBzdGlsbCBiZWlu
ZyBwcmVzZW50IHdoZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZC4KICAgICAvLyBUaGVyZWZvcmUg
d2UgY2Fubm90IHJlbHkgb24gc2NvcGVkKCkhCi0gICAgQVNTRVJUKG1faXNSZWdpc3RlcmVkV2l0
aFNjb3BpbmdOb2RlIHx8ICFDb250ZXh0RW5hYmxlZEZlYXR1cmVzOjpzdHlsZVNjb3BlZEVuYWJs
ZWQoZG9jdW1lbnQoKSkpOwotICAgIGlmICghbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUp
CisgICAgQVNTRVJUKG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSAhPSBOb3RSZWdpc3Rl
cmVkIHx8ICFDb250ZXh0RW5hYmxlZEZlYXR1cmVzOjpzdHlsZVNjb3BlZEVuYWJsZWQoZG9jdW1l
bnQoKSkpOworICAgIGlmIChtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgPT0gTm90UmVn
aXN0ZXJlZCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghQ29udGV4dEVuYWJsZWRGZWF0dXJl
czo6c3R5bGVTY29wZWRFbmFibGVkKGRvY3VtZW50KCkpKQogICAgICAgICByZXR1cm47CkBAIC0x
NDUsNyArMTcxLDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aFNjb3Bp
bmdOb2RlKENvbnRhaW5lck5vZGUqIHNjb3BlKQogICAgIGlmIChpbkRvY3VtZW50KCkgJiYgIWRv
Y3VtZW50KCktPnBhcnNpbmcoKSAmJiBkb2N1bWVudCgpLT5yZW5kZXJlcigpKQogICAgICAgICBk
b2N1bWVudCgpLT5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKIAotICAg
IG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdOb2RlID0gZmFsc2U7CisgICAgbV9zY29wZWRTdHls
ZVJlZ2lzdHJhdGlvblN0YXRlID0gTm90UmVnaXN0ZXJlZDsKIH0KICNlbmRpZgogCkBAIC0xNTUs
OCArMTgxLDggQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MU3R5bGVF
bGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSoKICAgICBpZiAoaW5zZXJ0aW9uUG9p
bnQtPmluRG9jdW1lbnQoKSkgewogICAgICAgICBTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0Rv
Y3VtZW50KGRvY3VtZW50KCksIHRoaXMpOwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAg
ICAgIGlmIChzY29wZWQoKSAmJiAhbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ05vZGUpCi0gICAg
ICAgICAgICByZWdpc3RlcldpdGhTY29waW5nTm9kZSgpOworICAgICAgICBpZiAobV9zY29wZWRT
dHlsZVJlZ2lzdHJhdGlvblN0YXRlID09IE5vdFJlZ2lzdGVyZWQgJiYgKHNjb3BlZCgpIHx8IGlz
SW5TaGFkb3dUcmVlKCkpKQorICAgICAgICAgICAgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoc2Nv
cGVkKCkpOwogI2VuZGlmCiAgICAgfQogCkBAIC0xNzIsOCArMTk4LDEyIEBAIHZvaWQgSFRNTFN0
eWxlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQpCiAg
ICAgLy8gVGhhdCBpcywgYmVjYXVzZSB3aWxsUmVtb3ZlKCkgaXMgYWxzbyBjYWxsZWQgaWYgYW4g
YW5jZXN0b3IgaXMgcmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudC4KICAgICAvLyBOb3csIGlmIHdl
IHdhbnQgdG8gcmVnaXN0ZXIgPHN0eWxlIHNjb3BlZD4gZXZlbiBpZiBpdCdzIG5vdCBpbkRvY3Vt
ZW50LAogICAgIC8vIHdlJ2QgbmVlZCB0byBmaW5kIGEgd2F5IHRvIGRpc2Nlcm4gd2hldGhlciB0
aGF0IGlzIHRoZSBjYXNlLCBvciB3aGV0aGVyIDxzdHlsZSBzY29wZWQ+IGl0c2VsZiBpcyBhYm91
dCB0byBiZSByZW1vdmVkLgotICAgIGlmIChtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZSkK
LSAgICAgICAgdW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShwYXJlbnROb2RlKCkgPyBwYXJlbnRO
b2RlKCkgOiBpbnNlcnRpb25Qb2ludCk7CisgICAgaWYgKG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRp
b25TdGF0ZSAhPSBOb3RSZWdpc3RlcmVkKSB7CisgICAgICAgIENvbnRhaW5lck5vZGUqIHNjb3Bl
ID0gcGFyZW50Tm9kZSgpPyBwYXJlbnROb2RlKCkgOiBpbnNlcnRpb25Qb2ludDsKKyAgICAgICAg
aWYgKG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkSW5TaGFkb3dS
b290KQorICAgICAgICAgICAgc2NvcGUgPSBzY29wZS0+c2hhZG93Um9vdCgpOworICAgICAgICB1
bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKHNjb3BlKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIGlm
IChpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHls
ZUVsZW1lbnQuaAppbmRleCA3ZTMxMjU0NTQ5Y2ZlMTFiODliMzlkYWVhYjBkOWE0OTkzYjhlZWMy
Li42M2E4MmM0ZWVmZmRlNTcxN2JkN2Y4N2M1ODNjMzlmNGQ1YzU2ZGQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaApAQCAtNzYsMTUgKzc2LDIyIEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdDsKIAotICAgIHZvaWQgcmVnaXN0ZXJX
aXRoU2NvcGluZ05vZGUoKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoKSB7
IHVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUocGFyZW50Tm9kZSgpKTsgfQotICAgIHZvaWQgdW5y
ZWdpc3RlcldpdGhTY29waW5nTm9kZShDb250YWluZXJOb2RlKiBzY29wZSk7CisjaWYgRU5BQkxF
KFNUWUxFX1NDT1BFRCkKKyAgICB2b2lkIHNjb3BlZEF0dHJpYnV0ZUNoYW5nZWQoYm9vbCk7Cisg
ICAgdm9pZCByZWdpc3RlcldpdGhTY29waW5nTm9kZShib29sKTsKKyAgICB2b2lkIHVucmVnaXN0
ZXJXaXRoU2NvcGluZ05vZGUoQ29udGFpbmVyTm9kZSopOworI2VuZGlmCiAKICAgICBib29sIG1f
ZmlyZWRMb2FkOwogICAgIGJvb2wgbV9sb2FkZWRTaGVldDsKIAogI2lmIEVOQUJMRShTVFlMRV9T
Q09QRUQpCi0gICAgYm9vbCBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nTm9kZTsKKyAgICBlbnVt
IFNjb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgeworICAgICAgICBOb3RSZWdpc3RlcmVkLAor
ICAgICAgICBSZWdpc3RlcmVkQXNTY29wZWQsCisgICAgICAgIFJlZ2lzdGVyZWRJblNoYWRvd1Jv
b3QKKyAgICB9OworICAgIFNjb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgbV9zY29wZWRTdHls
ZVJlZ2lzdHJhdGlvblN0YXRlOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTVkNGIwZTllYjVhNDFk
ZGJjMDNhNjMyNzc0ZmE4ZDI4MTgzMGRmZi4uNzQ4OTNkOGRmOGFiYmE1MGUxZGRkOTNhNTQ4MDkz
ZWUzYWY5NThkYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTA0ICBUYWthc2hpIFNh
a2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gPHN0eWxl
PiBpbnNpZGUgU2hhZG93IHN1YnRyZWUgc2hvdWxkIGJlIHNjb3BlZCBpbnNpZGUgdGhlIHN1YnRy
ZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzgw
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNoYWRvd3Jvb3QtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC9yZWdpc3RlcmluZy1zaGFkb3dyb290Lmh0
bWw6CisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1jaGFuZ2Ut
c2NvcGVkLWluLXNoYWRvdy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3Nz
L3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtY2hhbmdlLXNjb3BlZC1pbi1zaGFkb3cuaHRtbDog
QWRkZWQuCisKIDIwMTItMDYtMTAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgRXhwb3NlIGxheW91dFRlc3RDb250cm9sbGVyIGFzIHRlc3RSdW5uZXIKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9yZWdpc3RlcmluZy1zaGFk
b3dyb290LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9y
ZWdpc3RlcmluZy1zaGFkb3dyb290LWV4cGVjdGVkLnR4dAppbmRleCA4NDJlOThmNzExNzYyNDAw
NWVkMzEzNDllZTA3N2IzY2IwOTQ3M2Q0Li5hYmJiYmU0YTZiNmNkY2FiMDVlYjA5YTIwMzUwMjk4
YWRiMGM1YmFjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQv
cmVnaXN0ZXJpbmctc2hhZG93cm9vdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNoYWRvd3Jvb3QtZXhwZWN0ZWQudHh0CkBA
IC0xNCw3ICsxNCw3IEBAIFBBU1MgaW50ZXJuYWxzLm51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hp
bGRyZW4oaG9zdCkgaXMgMAogUEFTUyBpbnRlcm5hbHMubnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVD
aGlsZHJlbihzcikgaXMgMQogLS0tIFVuc2V0dGluZyBAc2NvcGVkIC0tLQogUEFTUyBpbnRlcm5h
bHMubnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbihob3N0KSBpcyAwCi1QQVNTIGludGVy
bmFscy5udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKHNyKSBpcyAwCitQQVNTIGludGVy
bmFscy5udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKHNyKSBpcyAxCiAtLS0gU2V0dGlu
ZyBAc2NvcGVkIC0tLQogUEFTUyBpbnRlcm5hbHMubnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGls
ZHJlbihob3N0KSBpcyAwCiBQQVNTIGludGVybmFscy5udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNo
aWxkcmVuKHNyKSBpcyAxCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1z
Y29wZWQvcmVnaXN0ZXJpbmctc2hhZG93cm9vdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkL3JlZ2lzdGVyaW5nLXNoYWRvd3Jvb3QuaHRtbAppbmRleCA5YjRjNTQ3MzRj
YjE2YTA0ZmU2ZjdjYWQxMTk1OTYxZTVkODA2ODg1Li4zMjljODIyMGM1ZjQwYmVmNGNlYWE4NzQ3
M2E1Mjc0NjYwNGEzMWE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1z
Y29wZWQvcmVnaXN0ZXJpbmctc2hhZG93cm9vdC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC9yZWdpc3RlcmluZy1zaGFkb3dyb290Lmh0bWwKQEAgLTQ4LDcgKzQ4
LDcgQEAKICAgICAgICAgICAgIGRlYnVnKCItLS0gVW5zZXR0aW5nIEBzY29wZWQgLS0tIik7CiAg
ICAgICAgICAgICBzdHlsZS5zY29wZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHNob3VsZEJlKCJp
bnRlcm5hbHMubnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbihob3N0KSIsICIwIik7Ci0g
ICAgICAgICAgICBzaG91bGRCZSgiaW50ZXJuYWxzLm51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hp
bGRyZW4oc3IpIiwgIjAiKTsgLyogPHN0eWxlPiBpbiBzaGFkb3csIG5vdCBzY29wZWQgKi8KKyAg
ICAgICAgICAgIHNob3VsZEJlKCJpbnRlcm5hbHMubnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGls
ZHJlbihzcikiLCAiMSIpOyAvKiA8c3R5bGU+IGluIHNoYWRvdywgbm90IHNjb3BlZCAqLwogCiAg
ICAgICAgICAgICBkZWJ1ZygiLS0tIFNldHRpbmcgQHNjb3BlZCAtLS0iKTsKICAgICAgICAgICAg
IHN0eWxlLnNjb3BlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWNoYW5nZS1zY29wZWQtaW4tc2hhZG93LWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtY2hh
bmdlLXNjb3BlZC1pbi1zaGFkb3ctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5NjZhYjFhMmFl
YjM4YWU1NDM2NTE5OGFjMDI2MWMwZDZkZjY4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQvc3R5bGUtc2NvcGVkLWNoYW5nZS1zY29wZWQtaW4t
c2hhZG93LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDY0IEBACitQQVNTIHdpbmRvdy5pbnRlcm5h
bHMgaXMgZGVmaW5lZC4KK1BBU1Mgd2luZG93LmludGVybmFscy5lbnN1cmVTaGFkb3dSb290IGlz
IGRlZmluZWQuCitQQVNTIFdlYktpdFNoYWRvd1Jvb3QgaXMgZGVmaW5lZC4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQordGVzdCBhIHNjb3BlZCBzdHls
ZSBpbiBzaGFkb3cgc3VidHJlZS4KK0U6IHJnYigyNTUsIDAsIDApCitGOiByZ2IoMCwgMCwgMCkK
K3Rlc3QgYSBzdHlsZSBpbiBzaGFkb3cgc3VidHJlZS4KK0U6IHJnYigyNTUsIDAsIDApCitGOiBy
Z2IoMjU1LCAwLCAwKQordGVzdCBzdHlsZXMgaW4gbXVsdGlwbGUgc2hhZG93IHN1YnRyZWVzLgor
RTogcmdiKDI1NSwgMCwgMCkKK0Y6IHJnYigyNTUsIDAsIDApCitHOiByZ2IoMCwgMCwgMjU1KQor
dGVzdCBhIHNjb3BlZCBzdHlsZSBpbiBuZXN0ZWQgc2hhZG93IHN1YnRyZWUuCitFOiByZ2IoMjU1
LCAwLCAwKQorRjogcmdiKDAsIDAsIDApCitHOiByZ2IoMCwgMCwgMjU1KQorSDogcmdiKDI1NSwg
MCwgMCkKK3Rlc3QgYSBzdHlsZSBpbiBuZXN0ZWQgc2hhZG93IHN1YnRyZWUuCitFOiByZ2IoMjU1
LCAwLCAwKQorRjogcmdiKDI1NSwgMCwgMCkKK0c6IHJnYigwLCAwLCAyNTUpCitIOiByZ2IoMCwg
MCwgMjU1KQordGVzdCBjaGFuZ2luZyBhIHN0eWxlIGluIHNoYWRvdyBzdWJ0cmVlIGZyb20gc2Nv
cGVkIHRvIHNjb3BlZC4KK0U6IHJnYigyNTUsIDAsIDApCitGOiByZ2IoMCwgMCwgMCkKK0U6IHJn
YigyNTUsIDAsIDApCitGOiByZ2IoMCwgMCwgMCkKK3Rlc3QgY2hhbmdpbmcgYSBzdHlsZSBpbiBz
aGFkb3cgc3VidHJlZSBmcm9tIHNjb3BlZCB0byBub3Qtc2NvcGVkLgorRTogcmdiKDI1NSwgMCwg
MCkKK0Y6IHJnYigwLCAwLCAwKQorRTogcmdiKDI1NSwgMCwgMCkKK0Y6IHJnYigyNTUsIDAsIDAp
Cit0ZXN0IGNoYW5naW5nIGEgc3R5bGUgaW4gc2hhZG93IHN1YnRyZWUgZnJvbSBub3Qtc2NvcGVk
IHRvIHNjb3BlZC4KK0U6IHJnYigyNTUsIDAsIDApCitGOiByZ2IoMjU1LCAwLCAwKQorRTogcmdi
KDI1NSwgMCwgMCkKK0Y6IHJnYigwLCAwLCAwKQordGVzdCByZW1vdmluZyBhIHNjb3BlZCBzdHls
ZSBmcm9tIHNoYWRvdyBzdWJ0cmVlLgorRTogcmdiKDI1NSwgMCwgMCkKK0Y6IHJnYigwLCAwLCAw
KQorRTogcmdiKDAsIDAsIDApCitGOiByZ2IoMCwgMCwgMCkKK3Rlc3QgcmVtb3ZpbmcgYSBzdHls
ZSBmcm9tIHNoYWRvdyBzdWJ0cmVlLgorRTogcmdiKDI1NSwgMCwgMCkKK0Y6IHJnYigyNTUsIDAs
IDApCitFOiByZ2IoMCwgMCwgMCkKK0Y6IHJnYigwLCAwLCAwKQordGVzdCBpbnNlcnRpbmcgYSBz
Y29wZWQgc3R5bGUgaW50byBzaGFkb3cgc3VidHJlZS4KK0U6IHJnYigyNTUsIDAsIDApCitGOiBy
Z2IoMCwgMCwgMCkKK3Rlc3QgaW5zZXJ0aW5nIGEgc3R5bGUgaW50byBzaGFkb3cgc3VidHJlZS4K
K0U6IHJnYigyNTUsIDAsIDApCitGOiByZ2IoMjU1LCAwLCAwKQordGVzdCByZS1pbnNlcnRpbmcg
YSBzdHlsZSBhZnRlciBjaGFuZ2luZyBzY29wZWQgdG8gbm90IHNjb3BlZCBvZmZsaW5lLgorRTog
cmdiKDI1NSwgMCwgMCkKK0Y6IHJnYigyNTUsIDAsIDApCit0ZXN0IHJlLWluc2VydGluZyBhIHN0
eWxlIGFmdGVyIGNoYW5naW5nIG5vdCBzY29wZWQgdG8gc2NvcGVkIG9mZmxpbmUuCitFOiByZ2Io
MjU1LCAwLCAwKQorRjogcmdiKDAsIDAsIDApCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtY2hhbmdlLXNjb3BlZC1pbi1zaGFkb3cu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC9zdHlsZS1zY29wZWQtY2hh
bmdlLXNjb3BlZC1pbi1zaGFkb3cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZGJhZDBhNTczMmM4ZDVhYTdj
NGU0MWFiMGJiNjAxZDc2ZDc1Mzg1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkL3N0eWxlLXNjb3BlZC1jaGFuZ2Utc2NvcGVkLWluLXNoYWRvdy5o
dG1sCkBAIC0wLDAgKzEsMzE4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9kb20vc2hhZG93L3Jlc291cmNlcy9wb2x5ZmlsbC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3Nob3VsZEJlRGVmaW5lZCgid2lu
ZG93LmludGVybmFscyIpOworc2hvdWxkQmVEZWZpbmVkKCJ3aW5kb3cuaW50ZXJuYWxzLmVuc3Vy
ZVNoYWRvd1Jvb3QiKTsKK3Nob3VsZEJlRGVmaW5lZCgiV2ViS2l0U2hhZG93Um9vdCIpOworCitm
dW5jdGlvbiBkdW1wQ29tcHV0ZWRTdHlsZShub2RlKQoreworICAgIGRlYnVnKG5vZGUuaWQgKyAi
OiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5n
ZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKK30KKworZnVuY3Rpb24gdGVzdFNjb3BlZFN0eWxl
SW5TaGFkb3coKQoreworICAgIGRlYnVnKCJ0ZXN0IGEgc2NvcGVkIHN0eWxlIGluIHNoYWRvdyBz
dWJ0cmVlLiIpOworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
KyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CisgICAgdmFyIHNoYWRvdyA9IG5l
dyBXZWJLaXRTaGFkb3dSb290KGRpdik7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8ZGl2Pjxz
dHlsZSBzY29wZWQ+ZGl2IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGRpdiBpZD0nRSc+RUVFPC9k
aXY+PC9kaXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+IjsKKyAgICBkb2N1bWVudC5ib2R5Lm9mZnNl
dExlZnQ7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUi
KSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJGIikpOwor
ICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rpb24gdGVzdFN0
eWxlSW5TaGFkb3coKQoreworICAgIGRlYnVnKCJ0ZXN0IGEgc3R5bGUgaW4gc2hhZG93IHN1YnRy
ZWUuIik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAg
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoZGl2KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxkaXY+PGRpdiBp
ZD0nRSc+RUVFPC9kaXY+PHN0eWxlPmRpdiB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjwvZGl2Pjxk
aXYgaWQ9J0YnPkZGRjwvZGl2PiI7CisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworCisg
ICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikpOworICAgIGR1
bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKyAgICBkb2N1bWVu
dC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTdHlsZUluTXVsdGlw
bGVTaGFkb3coKQoreworICAgIGRlYnVnKCJ0ZXN0IHN0eWxlcyBpbiBtdWx0aXBsZSBzaGFkb3cg
c3VidHJlZXMuIik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OworCisgICAgdmFyIHNoYWRvdzEgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChkaXYpOworICAgIHNo
YWRvdzEuaW5uZXJIVE1MID0gIjxkaXY+PHN0eWxlPmRpdiB7IGNvbG9yOiByZWQ7IH08L3N0eWxl
PjxkaXYgaWQ9J0UnPkVFRTwvZGl2PjwvZGl2PjxkaXYgaWQ9J0YnPkZGRjwvZGl2PiI7CisKKyAg
ICB2YXIgc2hhZG93MiA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGRpdik7CisgICAgc2hhZG93Mi5p
bm5lckhUTUwgPSAiPGRpdj48c3R5bGUgc2NvcGVkPmRpdiB7IGNvbG9yOiBibHVlIH08L3N0eWxl
PjxzaGFkb3c+PC9zaGFkb3c+PGRpdiBpZD0nRyc+R0dHPC9kaXY+PC9kaXY+IjsKKworICAgIGRv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICBkb2N1bWVudC5ib2R5Lm9mZnNldExl
ZnQ7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cxLmdldEVsZW1lbnRCeUlkKCJFIikp
OworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdzEuZ2V0RWxlbWVudEJ5SWQoIkYiKSk7Cisg
ICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93Mi5nZXRFbGVtZW50QnlJZCgiRyIpKTsKKyAgICBk
b2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTY29wZWRT
dHlsZUluTmVzdGVkU2hhZG93KCkKK3sKKyAgICBkZWJ1ZygidGVzdCBhIHNjb3BlZCBzdHlsZSBp
biBuZXN0ZWQgc2hhZG93IHN1YnRyZWUuIik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAg
ICB2YXIgc2hhZG93MSA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGRpdik7CisgICAgc2hhZG93MS5p
bm5lckhUTUwgPSAiPGRpdj48c3R5bGUgc2NvcGVkPmRpdiB7IGNvbG9yOiByZWQ7IH08L3N0eWxl
PjxkaXYgaWQ9J0UnPkVFRTwvZGl2PjwvZGl2PjxkaXYgaWQ9J0YnPkZGRjwvZGl2PiI7CisgICAg
dmFyIGUgPSBzaGFkb3cxLmdldEVsZW1lbnRCeUlkKCJFIik7CisgICAgdmFyIHNoYWRvdzIgPSBu
ZXcgV2ViS2l0U2hhZG93Um9vdChlKTsKKyAgICBzaGFkb3cyLmlubmVySFRNTCA9ICI8ZGl2Pjxz
dHlsZSBzY29wZWQ+ZGl2IHsgY29sb3I6IGJsdWU7IH08L3N0eWxlPjxkaXYgaWQ9J0cnPkdHR0c8
L2Rpdj48L2Rpdj48ZGl2IGlkPSdIJz5ISEhIPC9kaXY+IjsKKyAgICBkb2N1bWVudC5ib2R5Lm9m
ZnNldExlZnQ7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cxLmdldEVsZW1lbnRCeUlk
KCJFIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdzEuZ2V0RWxlbWVudEJ5SWQoIkYi
KSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93Mi5nZXRFbGVtZW50QnlJZCgiRyIpKTsK
KyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cyLmdldEVsZW1lbnRCeUlkKCJIIikpOworICAg
IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rpb24gdGVzdFN0eWxl
SW5OZXN0ZWRTaGFkb3coKQoreworICAgIGRlYnVnKCJ0ZXN0IGEgc3R5bGUgaW4gbmVzdGVkIHNo
YWRvdyBzdWJ0cmVlLiIpOworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CisgICAgdmFyIHNoYWRv
dzEgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChkaXYpOworICAgIHNoYWRvdzEuaW5uZXJIVE1MID0g
IjxkaXY+PHN0eWxlPmRpdiB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxkaXYgaWQ9J0UnPkVFRTwv
ZGl2PjwvZGl2PjxkaXYgaWQ9J0YnPkZGRjwvZGl2PiI7CisgICAgdmFyIGUgPSBzaGFkb3cxLmdl
dEVsZW1lbnRCeUlkKCJFIik7CisgICAgdmFyIHNoYWRvdzIgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChlKTsKKyAgICBzaGFkb3cyLmlubmVySFRNTCA9ICI8ZGl2PjxzdHlsZT5kaXYgeyBjb2xvcjog
Ymx1ZTsgfTwvc3R5bGU+PGRpdiBpZD0nRyc+R0dHRzwvZGl2PjwvZGl2PjxkaXYgaWQ9J0gnPkhI
SEg8L2Rpdj4iOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIGR1bXBDb21w
dXRlZFN0eWxlKHNoYWRvdzEuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVk
U3R5bGUoc2hhZG93MS5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHls
ZShzaGFkb3cyLmdldEVsZW1lbnRCeUlkKCJHIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNo
YWRvdzIuZ2V0RWxlbWVudEJ5SWQoIkgiKSk7CisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGls
ZChkaXYpOworfQorCitmdW5jdGlvbiB0ZXN0Q2hhbmdlU2NvcGVkVG9TY29wZWQoKQoreworICAg
IGRlYnVnKCJ0ZXN0IGNoYW5naW5nIGEgc3R5bGUgaW4gc2hhZG93IHN1YnRyZWUgZnJvbSBzY29w
ZWQgdG8gc2NvcGVkLiIpOworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CisgICAgdmFyIHNoYWRv
dyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGRpdik7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8
ZGl2PjxzdHlsZSBzY29wZWQgaWQ9J3N0eWxlLWluLXNoYWRvdyc+ZGl2IHsgY29sb3I6IHJlZDsg
fTwvc3R5bGU+PGRpdiBpZD0nRSc+RUVFPC9kaXY+PC9kaXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+
IjsKKyAgICBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7CisKKyAgICAvLyBiZWZvcmUKKyAgICBk
dW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVtcENv
bXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJGIikpOworCisgICAgc2hhZG93Lmdl
dEVsZW1lbnRCeUlkKCJzdHlsZS1pbi1zaGFkb3ciKS5zZXRBdHRyaWJ1dGUoInNjb3BlZCIsICJz
Y29wZWQiKTsKKyAgICBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7CisKKyAgICAvLyBhZnRlcgor
ICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRSIpKTsKKyAgICBk
dW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkYiKSk7CisgICAgZG9jdW1l
bnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOworfQorCitmdW5jdGlvbiB0ZXN0Q2hhbmdlU2NvcGVk
VG9Ob3RTY29wZWQoKQoreworICAgIGRlYnVnKCJ0ZXN0IGNoYW5naW5nIGEgc3R5bGUgaW4gc2hh
ZG93IHN1YnRyZWUgZnJvbSBzY29wZWQgdG8gbm90LXNjb3BlZC4iKTsKKyAgICB2YXIgZGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChkaXYpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChkaXYpOwor
ICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPGRpdj48c3R5bGUgc2NvcGVkIGlkPSdzdHlsZS1pbi1z
aGFkb3cnPmRpdiB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxkaXYgaWQ9J0UnPkVFRTwvZGl2Pjwv
ZGl2PjxkaXYgaWQ9J0YnPkZGRjwvZGl2PiI7CisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0
OworCisgICAgLy8gYmVmb3JlCisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1l
bnRCeUlkKCJFIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJ
ZCgiRiIpKTsKKworICAgIHNoYWRvdy5nZXRFbGVtZW50QnlJZCgic3R5bGUtaW4tc2hhZG93Iiku
cmVtb3ZlQXR0cmlidXRlKCJzY29wZWQiKTsKKyAgICBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7
CisKKyAgICAvLyBhZnRlcgorICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50
QnlJZCgiRSIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQo
IkYiKSk7CisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOworfQorCitmdW5jdGlv
biB0ZXN0Q2hhbmdlTm90U2NvcGVkVG9TY29wZWQoKQoreworICAgIGRlYnVnKCJ0ZXN0IGNoYW5n
aW5nIGEgc3R5bGUgaW4gc2hhZG93IHN1YnRyZWUgZnJvbSBub3Qtc2NvcGVkIHRvIHNjb3BlZC4i
KTsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0
U2hhZG93Um9vdChkaXYpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPGRpdj48c3R5bGUgaWQ9
J3N0eWxlLWluLXNoYWRvdyc+ZGl2IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGRpdiBpZD0nRSc+
RUVFPC9kaXY+PC9kaXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+IjsKKyAgICBkb2N1bWVudC5ib2R5
Lm9mZnNldExlZnQ7CisKKyAgICAvLyBiZWZvcmUKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFk
b3cuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93Lmdl
dEVsZW1lbnRCeUlkKCJGIikpOworCisgICAgc2hhZG93LmdldEVsZW1lbnRCeUlkKCJzdHlsZS1p
bi1zaGFkb3ciKS5zZXRBdHRyaWJ1dGUoInNjb3BlZCIsICJzY29wZWQiKTsKKyAgICBkb2N1bWVu
dC5ib2R5Lm9mZnNldExlZnQ7CisKKyAgICAvLyBhZnRlcgorICAgIGR1bXBDb21wdXRlZFN0eWxl
KHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRSIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFk
b3cuZ2V0RWxlbWVudEJ5SWQoIkYiKSk7CisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChk
aXYpOworfQorCitmdW5jdGlvbiB0ZXN0UmVtb3ZlU2NvcGVkU3R5bGVGcm9tRG9jdW1lbnQoKQor
eworICAgIGRlYnVnKCJ0ZXN0IHJlbW92aW5nIGEgc2NvcGVkIHN0eWxlIGZyb20gc2hhZG93IHN1
YnRyZWUuIik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB2YXIgc2hhZG93ID0gbmV3
IFdlYktpdFNoYWRvd1Jvb3QoZGl2KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxkaXY+PHN0
eWxlIHNjb3BlZCBpZD0nc3R5bGUtaW4tc2hhZG93Jz5kaXYgeyBjb2xvcjogcmVkOyB9PC9zdHls
ZT48ZGl2IGlkPSdFJz5FRUU8L2Rpdj48L2Rpdj48ZGl2IGlkPSdGJz5GRkY8L2Rpdj4iOworICAg
IGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIC8vIGJlZm9yZQorICAgIGR1bXBDb21w
dXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgiRSIpKTsKKyAgICBkdW1wQ29tcHV0ZWRT
dHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkYiKSk7CisKKyAgICB2YXIgc3R5bGVJblNoYWRv
dyA9IHNoYWRvdy5nZXRFbGVtZW50QnlJZCgic3R5bGUtaW4tc2hhZG93Iik7CisgICAgc3R5bGVJ
blNoYWRvdy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlSW5TaGFkb3cpOworICAgIGRvY3Vt
ZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIC8vIGFmdGVyCisgICAgZHVtcENvbXB1dGVkU3R5
bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJFIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNo
YWRvdy5nZXRFbGVtZW50QnlJZCgiRiIpKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxk
KGRpdik7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVTdHlsZUZyb21Eb2N1bWVudCgpCit7Cisg
ICAgZGVidWcoInRlc3QgcmVtb3ZpbmcgYSBzdHlsZSBmcm9tIHNoYWRvdyBzdWJ0cmVlLiIpOwor
ICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFk
b3dSb290KGRpdik7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8ZGl2PjxzdHlsZSBpZD0nc3R5
bGUtaW4tc2hhZG93Jz5kaXYgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48ZGl2IGlkPSdFJz5FRUU8
L2Rpdj48L2Rpdj48ZGl2IGlkPSdGJz5GRkY8L2Rpdj4iOworICAgIGRvY3VtZW50LmJvZHkub2Zm
c2V0TGVmdDsKKworICAgIC8vIGJlZm9yZQorICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5n
ZXRFbGVtZW50QnlJZCgiRSIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxl
bWVudEJ5SWQoIkYiKSk7CisKKyAgICB2YXIgc3R5bGVJblNoYWRvdyA9IHNoYWRvdy5nZXRFbGVt
ZW50QnlJZCgic3R5bGUtaW4tc2hhZG93Iik7CisgICAgc3R5bGVJblNoYWRvdy5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKHN0eWxlSW5TaGFkb3cpOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVm
dDsKKworICAgIC8vIGFmdGVyCisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1l
bnRCeUlkKCJFIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJ
ZCgiRiIpKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK2Z1bmN0
aW9uIHRlc3RJbnNlcnRTY29wZWRTdHlsZUludG9Eb2N1bWVudCgpCit7CisgICAgZGVidWcoInRl
c3QgaW5zZXJ0aW5nIGEgc2NvcGVkIHN0eWxlIGludG8gc2hhZG93IHN1YnRyZWUuIik7CisgICAg
dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jv
b3QoZGl2KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxkaXY+PGRpdiBpZD0nRSc+RUVFPC9k
aXY+PC9kaXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+IjsKKyAgICBkb2N1bWVudC5ib2R5Lm9mZnNl
dExlZnQ7CisKKyAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIp
OworICAgIHN0eWxlLmlubmVySFRNTCA9ICJkaXYgeyBjb2xvcjogcmVkOyB9IjsKKyAgICBzdHls
ZS5zZXRBdHRyaWJ1dGUoInNjb3BlZCIsICJzY29wZWQiKTsKKyAgICBzaGFkb3cuZ2V0RWxlbWVu
dEJ5SWQoIkUiKS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHN0eWxlKTsKKyAgICBkb2N1bWVudC5i
b2R5Lm9mZnNldExlZnQ7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVu
dEJ5SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlk
KCJGIikpOworICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rp
b24gdGVzdEluc2VydFN0eWxlSW50b0RvY3VtZW50KCkKK3sKKyAgICBkZWJ1ZygidGVzdCBpbnNl
cnRpbmcgYSBzdHlsZSBpbnRvIHNoYWRvdyBzdWJ0cmVlLiIpOworICAgIHZhciBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGRpdik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGRpdik7CisgICAg
c2hhZG93LmlubmVySFRNTCA9ICI8ZGl2PjxkaXYgaWQ9J0UnPkVFRTwvZGl2PjwvZGl2PjxkaXYg
aWQ9J0YnPkZGRjwvZGl2PiI7CisgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworCisgICAg
dmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKKyAgICBzdHlsZS5p
bm5lckhUTUwgPSAiZGl2IHsgY29sb3I6IHJlZDsgfSI7CisgICAgc2hhZG93LmdldEVsZW1lbnRC
eUlkKCJFIikucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChzdHlsZSk7CisgICAgZG9jdW1lbnQuYm9k
eS5vZmZzZXRMZWZ0OworCisgICAgZHVtcENvbXB1dGVkU3R5bGUoc2hhZG93LmdldEVsZW1lbnRC
eUlkKCJFIikpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50QnlJZCgi
RiIpKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK2Z1bmN0aW9u
IHRlc3RDaGFuZ2VTY29wZWRUb05vdFNjb3BlZE5vdEluRG9jdW1lbnQoKQoreworICAgIGRlYnVn
KCJ0ZXN0IHJlLWluc2VydGluZyBhIHN0eWxlIGFmdGVyIGNoYW5naW5nIHNjb3BlZCB0byBub3Qg
c2NvcGVkIG9mZmxpbmUuIik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB2YXIgc2hh
ZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoZGl2KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0g
IjxkaXY+PHN0eWxlIHNjb3BlZCBpZD0nc3R5bGUtaW4tc2hhZG93Jz5kaXYgeyBjb2xvcjogcmVk
OyB9PC9zdHlsZT48ZGl2IGlkPSdFJz5FRUU8L2Rpdj48L2Rpdj48ZGl2IGlkPSdGJz5GRkY8L2Rp
dj4iOworICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIHZhciBzdHlsZSA9IHNo
YWRvdy5nZXRFbGVtZW50QnlJZCgic3R5bGUtaW4tc2hhZG93Iik7CisgICAgc3R5bGUucGFyZW50
Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSk7CisgICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCJzY29w
ZWQiKTsKKyAgICBzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKS5wYXJlbnROb2RlLmFwcGVuZENo
aWxkKHN0eWxlKTsKKyAgICBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7CisKKyAgICBkdW1wQ29t
cHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIkUiKSk7CisgICAgZHVtcENvbXB1dGVk
U3R5bGUoc2hhZG93LmdldEVsZW1lbnRCeUlkKCJGIikpOworICAgIGRvY3VtZW50LmJvZHkucmVt
b3ZlQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rpb24gdGVzdENoYW5nZU5vdFNjb3BlZFRvU2NvcGVk
Tm90SW5Eb2N1bWVudCgpCit7CisgICAgZGVidWcoInRlc3QgcmUtaW5zZXJ0aW5nIGEgc3R5bGUg
YWZ0ZXIgY2hhbmdpbmcgbm90IHNjb3BlZCB0byBzY29wZWQgb2ZmbGluZS4iKTsKKyAgICB2YXIg
ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChkaXYpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChk
aXYpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPGRpdj48c3R5bGUgaWQ9J3N0eWxlLWluLXNo
YWRvdyc+ZGl2IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGRpdiBpZD0nRSc+RUVFPC9kaXY+PC9k
aXY+PGRpdiBpZD0nRic+RkZGPC9kaXY+IjsKKyAgICBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7
CisKKyAgICB2YXIgc3R5bGUgPSBzaGFkb3cuZ2V0RWxlbWVudEJ5SWQoInN0eWxlLWluLXNoYWRv
dyIpOworICAgIHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpOworICAgIHN0eWxl
LnNldEF0dHJpYnV0ZSgic2NvcGVkIiwgInNjb3BlZCIpOworICAgIHNoYWRvdy5nZXRFbGVtZW50
QnlJZCgiRSIpLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoc3R5bGUpOworICAgIGRvY3VtZW50LmJv
ZHkub2Zmc2V0TGVmdDsKKworICAgIGR1bXBDb21wdXRlZFN0eWxlKHNoYWRvdy5nZXRFbGVtZW50
QnlJZCgiRSIpKTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShzaGFkb3cuZ2V0RWxlbWVudEJ5SWQo
IkYiKSk7CisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOworfQorCitmdW5jdGlv
biBydW5UZXN0cygpCit7CisgICAgdGVzdFNjb3BlZFN0eWxlSW5TaGFkb3coKTsKKyAgICB0ZXN0
U3R5bGVJblNoYWRvdygpOworICAgIHRlc3RTdHlsZUluTXVsdGlwbGVTaGFkb3coKTsKKyAgICB0
ZXN0U2NvcGVkU3R5bGVJbk5lc3RlZFNoYWRvdygpOworICAgIHRlc3RTdHlsZUluTmVzdGVkU2hh
ZG93KCk7CisgICAgdGVzdENoYW5nZVNjb3BlZFRvU2NvcGVkKCk7CisgICAgdGVzdENoYW5nZVNj
b3BlZFRvTm90U2NvcGVkKCk7CisgICAgdGVzdENoYW5nZU5vdFNjb3BlZFRvU2NvcGVkKCk7Cisg
ICAgdGVzdFJlbW92ZVNjb3BlZFN0eWxlRnJvbURvY3VtZW50KCk7CisgICAgdGVzdFJlbW92ZVN0
eWxlRnJvbURvY3VtZW50KCk7CisgICAgdGVzdEluc2VydFNjb3BlZFN0eWxlSW50b0RvY3VtZW50
KCk7CisgICAgdGVzdEluc2VydFN0eWxlSW50b0RvY3VtZW50KCk7CisgICAgdGVzdENoYW5nZVNj
b3BlZFRvTm90U2NvcGVkTm90SW5Eb2N1bWVudCgpOworICAgIHRlc3RDaGFuZ2VOb3RTY29wZWRU
b1Njb3BlZE5vdEluRG9jdW1lbnQoKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJydW5UZXN0cygpIj4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>