<?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>122015</bug_id>
          
          <creation_ts>2013-09-27 09:08:22 -0700</creation_ts>
          <short_desc>[ATK] Expose aria-invalid as a text attribute (not object attribute)</short_desc>
          <delta_ts>2013-10-03 08:20:06 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jdiggs</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>933955</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-27 09:08:22 -0700</bug_when>
    <thetext>According to WAI-ARIA spec [1], this should not be exposed as an attribute of AtkObject, but as a text attribute, which is part of the AtkText interface.

So, we need to change it in the wrapper and update DRT/WKTR for the aria-invalid.html test to keep passing.

[1] http://www.w3.org/TR/wai-aria-implementation/#mapping_state-property</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933956</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-09-27 09:08:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/15098367&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933966</commentid>
    <comment_count>2</comment_count>
      <attachid>212816</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-27 09:34:13 -0700</bug_when>
    <thetext>Created attachment 212816
Patch proposal

Here comes the patch for this issue. Next step will be to expose aria-invalid as well as an state, but that will belong to a new bug, which I will most likely work on during the following week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933972</commentid>
    <comment_count>3</comment_count>
      <attachid>212816</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-09-27 09:44:21 -0700</bug_when>
    <thetext>Comment on attachment 212816
Patch proposal

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

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:308
&gt; +        String invalidValue = invalidStatus == &quot;spelling&quot; || invalidStatus == &quot;grammar&quot; ? invalidStatus : &quot;true&quot;;

i think invalid could be anything, so i think you want to just use the actual value instead of casting other types to true

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:69
&gt; +static String atkAttributeValueToCoreAttributeValue(AtkAttributeType type, String&amp; id, String&amp; value)

these params look like they should be const

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:75
&gt; +        if (id == &quot;sort&quot; &amp;&amp; !value.isEmpty()) {

Maybe you should have at the top of some file a list of these hard coded strings like

const String atkSortAttributeName = &quot;sort&quot;;

so that you&apos;re not referencing literals

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:86
&gt; +    if (type == AtkAttributeTypeText) {

this should be an else if, since the first if does not always return

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:93
&gt; +    // Return the passed value unchanged if not filtered.

this comment seems unnecessary unless you say why you are passing it unfiltered

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:90
&gt; +    if (type == AtkAttributeTypeText) {

ditto about else if</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933980</commentid>
    <comment_count>4</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-27 10:03:27 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 212816 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=212816&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:308
&gt; &gt; +        String invalidValue = invalidStatus == &quot;spelling&quot; || invalidStatus == &quot;grammar&quot; ? invalidStatus : &quot;true&quot;;
&gt; 
&gt; i think invalid could be anything, so i think you want to just use the actual 
&gt; value instead of casting other types to true

Yeah, I thought of that, but the WAI-ARIA spec explicitly says in [1] to do it the other way:

&quot;For future expansion, the aria-invalid attribute is an enumerated type. Any value not recognized in the list of allowed values MUST be treated by user agents as if the value true had been provided. If the attribute is not present, or its value is false, or its value is an empty string, the default value of false applies.&quot;

So my understanding is that we only expose &apos;grammar&apos; or &apos;spelling&apos; if those values are set, and &apos;true&apos; otherwise.

[1] http://www.w3.org/TR/2011/CR-wai-aria-20110118/states_and_properties#aria-invalid

&gt; &gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:69
&gt; &gt; +static String atkAttributeValueToCoreAttributeValue(AtkAttributeType type, String&amp; id, String&amp; value)
&gt; 
&gt; these params look like they should be const
&gt; 
&gt; &gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:75
&gt; &gt; +        if (id == &quot;sort&quot; &amp;&amp; !value.isEmpty()) {
&gt; 
&gt; Maybe you should have at the top of some file a list of these hard coded strings like
&gt; 
&gt; const String atkSortAttributeName = &quot;sort&quot;;
&gt; 
&gt; so that you&apos;re not referencing literals

That makes sense. I&apos;ll change it.

&gt; &gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:86
&gt; &gt; +    if (type == AtkAttributeTypeText) {
&gt; 
&gt; this should be an else if, since the first if does not always return

Ok.

&gt; &gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:93
&gt; &gt; +    // Return the passed value unchanged if not filtered.
&gt; 
&gt; this comment seems unnecessary unless you say why you are passing it unfiltered

Ok.

&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:90
&gt; &gt; +    if (type == AtkAttributeTypeText) {
&gt; 
&gt; ditto about else if

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933984</commentid>
    <comment_count>5</comment_count>
      <attachid>212816</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-27 10:12:48 -0700</bug_when>
    <thetext>Comment on attachment 212816
Patch proposal

Attachment 212816 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/2649196</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934006</commentid>
    <comment_count>6</comment_count>
      <attachid>212816</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-27 10:45:32 -0700</bug_when>
    <thetext>Comment on attachment 212816
Patch proposal

Attachment 212816 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/2651173</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934047</commentid>
    <comment_count>7</comment_count>
      <attachid>212816</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-09-27 12:32:31 -0700</bug_when>
    <thetext>Comment on attachment 212816
Patch proposal

Attachment 212816 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/2651194</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934523</commentid>
    <comment_count>8</comment_count>
      <attachid>212974</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-30 03:36:56 -0700</bug_when>
    <thetext>Created attachment 212974
Patch proposal

Attaching a new patch addressing the issues pointed out by Chris.

Also, considering now that I&apos;d be adding some constants in AccessibilityUIElementAtk.cpp, I made the most of this patch to move all the static functions there into unnammed namespaces together with those newly defined constants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934559</commentid>
    <comment_count>9</comment_count>
      <attachid>212986</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-30 06:03:19 -0700</bug_when>
    <thetext>Created attachment 212986
Patch proposal

Sorry for the spam but I&apos;m attaching a new version of the previous patch now that I think it&apos;s cleaner and more easy to scale, as I put all the attributes related mappings between ATK and layout tests inside a bidimensional array. Also the code in coreAttributeToAtkAttribute() is cleaner too.

We probably should do something similar to simplify the roleToString() funcion, me thinks...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935039</commentid>
    <comment_count>10</comment_count>
      <attachid>212986</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-10-01 09:06:22 -0700</bug_when>
    <thetext>Comment on attachment 212986
Patch proposal

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

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:308
&gt; +        String invalidValue = invalidStatus == &quot;spelling&quot; || invalidStatus == &quot;grammar&quot; ? invalidStatus : &quot;true&quot;;

I feel like this logic might be better served if it&apos;s in WebCore. the platforms shouldn&apos;t have to worry about this level of ARIA detail.

I think we should have a new method, isInvalid() that takes care of this logic (since it appears that GTK doesn&apos;t want the actual string like Mac does)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935062</commentid>
    <comment_count>11</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-01 09:44:02 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 212986 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=212986&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:308
&gt; &gt; +        String invalidValue = invalidStatus == &quot;spelling&quot; || invalidStatus == &quot;grammar&quot; ? invalidStatus : &quot;true&quot;;
&gt; 
&gt; I feel like this logic might be better served if it&apos;s in WebCore. the
&gt; platforms shouldn&apos;t have to worry about this level of ARIA detail.
&gt; 
&gt; I think we should have a new method, isInvalid() that takes care of this
&gt; logic (since it appears that GTK doesn&apos;t want the actual string like Mac does)

Hmm.. actually we want the actual string, but only if it&apos;s &quot;true&quot;, &quot;grammar&quot; or &quot;spelling&quot;. Any other non-empty value that might have been set in the aria-invalid attribute should be returned as &quot;false&quot;.

However, that&apos;s not what AccessibilityObject::invalidStatus() does:

  const AtomicString&amp; AccessibilityObject::invalidStatus() const
  {
      DEFINE_STATIC_LOCAL(const AtomicString, invalidStatusFalse, (&quot;false&quot;, AtomicString::ConstructFromLiteral));
    
      // aria-invalid can return false (default), grammer, spelling, or true.
      const AtomicString&amp; ariaInvalid = getAttribute(aria_invalidAttr);
    
      // If empty or not present, it should return false.
      if (ariaInvalid.isEmpty())
          return invalidStatusFalse;
    
      return ariaInvalid;
  }


... but I&apos;m thinking now that this is actually a bug in there, since the W3C spec is quite clear about that:

 &quot;Any value not recognized in the list of allowed values MUST be treated by user agents as if the value true had been provided&quot;

Thus, I think I will update the patch moving that logic from the ATK wrapper into AccessibilityObject::invalidStatus(). The aria-invalid test should keep passing fine for the Mac as it is, although I will probably add a new element with a not specified value to make sure we return &quot;true&quot; in that case as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935064</commentid>
    <comment_count>12</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-10-01 09:47:43 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 212986 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=212986&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:308
&gt; &gt; &gt; +        String invalidValue = invalidStatus == &quot;spelling&quot; || invalidStatus == &quot;grammar&quot; ? invalidStatus : &quot;true&quot;;
&gt; &gt; 
&gt; &gt; I feel like this logic might be better served if it&apos;s in WebCore. the
&gt; &gt; platforms shouldn&apos;t have to worry about this level of ARIA detail.
&gt; &gt; 
&gt; &gt; I think we should have a new method, isInvalid() that takes care of this
&gt; &gt; logic (since it appears that GTK doesn&apos;t want the actual string like Mac does)
&gt; 
&gt; Hmm.. actually we want the actual string, but only if it&apos;s &quot;true&quot;, &quot;grammar&quot; or &quot;spelling&quot;. Any other non-empty value that might have been set in the aria-invalid attribute should be returned as &quot;false&quot;.
&gt; 
&gt; However, that&apos;s not what AccessibilityObject::invalidStatus() does:
&gt; 
&gt;   const AtomicString&amp; AccessibilityObject::invalidStatus() const
&gt;   {
&gt;       DEFINE_STATIC_LOCAL(const AtomicString, invalidStatusFalse, (&quot;false&quot;, AtomicString::ConstructFromLiteral));
&gt; 
&gt;       // aria-invalid can return false (default), grammer, spelling, or true.
&gt;       const AtomicString&amp; ariaInvalid = getAttribute(aria_invalidAttr);
&gt; 
&gt;       // If empty or not present, it should return false.
&gt;       if (ariaInvalid.isEmpty())
&gt;           return invalidStatusFalse;
&gt; 
&gt;       return ariaInvalid;
&gt;   }
&gt; 
&gt; 
&gt; ... but I&apos;m thinking now that this is actually a bug in there, since the W3C spec is quite clear about that:
&gt; 
&gt;  &quot;Any value not recognized in the list of allowed values MUST be treated by user agents as if the value true had been provided&quot;
&gt; 
&gt; Thus, I think I will update the patch moving that logic from the ATK wrapper into AccessibilityObject::invalidStatus(). The aria-invalid test should keep passing fine for the Mac as it is, although I will probably add a new element with a not specified value to make sure we return &quot;true&quot; in that case as well.

Sounds good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935081</commentid>
    <comment_count>13</comment_count>
      <attachid>213096</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-01 10:18:39 -0700</bug_when>
    <thetext>Created attachment 213096
Patch proposal

(In reply to comment #12)
&gt; [...]
&gt; &gt; Thus, I think I will update the patch moving that logic from the ATK
&gt; &gt; wrapper into AccessibilityObject::invalidStatus(). The aria-invalid
&gt; &gt; test should keep passing fine for the Mac as it is, although I will
&gt; &gt; probably add a new element with a not specified value to make sure
&gt; &gt; we return &quot;true&quot; in that case as well.
&gt; 
&gt; Sounds good

Done. See the patch attached. I changed the test to cover all the cases, but it should work on the Mac too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935084</commentid>
    <comment_count>14</comment_count>
      <attachid>213096</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-10-01 10:21:25 -0700</bug_when>
    <thetext>Comment on attachment 213096
Patch proposal

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1348
&gt; +    DEFINE_STATIC_LOCAL(const AtomicString, invalidStatusGrammar, (&quot;grammar&quot;, AtomicString::ConstructFromLiteral));

we probably don&apos;t need statics for these (as per recent discussions on webkit-dev) - we can probably switch these to just ASCIILiterals inline

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:303
&gt; +    if (!invalidStatus.isEmpty() &amp;&amp; invalidStatus != &quot;false&quot;) {

invalidStatus should never be empty now right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935180</commentid>
    <comment_count>15</comment_count>
      <attachid>213096</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-01 13:46:41 -0700</bug_when>
    <thetext>Comment on attachment 213096
Patch proposal

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1348
&gt;&gt; +    DEFINE_STATIC_LOCAL(const AtomicString, invalidStatusGrammar, (&quot;grammar&quot;, AtomicString::ConstructFromLiteral));
&gt; 
&gt; we probably don&apos;t need statics for these (as per recent discussions on webkit-dev) - we can probably switch these to just ASCIILiterals inline

Do you mean also changing the return value of this method from AtomicString&amp; to String?

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:303
&gt;&gt; +    if (!invalidStatus.isEmpty() &amp;&amp; invalidStatus != &quot;false&quot;) {
&gt; 
&gt; invalidStatus should never be empty now right?

That&apos;s very true. I&apos;ll change that</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935238</commentid>
    <comment_count>16</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-01 15:29:29 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 213096 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=213096&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1348
&gt; &gt;&gt; +    DEFINE_STATIC_LOCAL(const AtomicString, invalidStatusGrammar, (&quot;grammar&quot;, AtomicString::ConstructFromLiteral));
&gt; &gt; 
&gt; &gt; we probably don&apos;t need statics for these (as per recent discussions on webkit-dev) - we can probably switch these to just ASCIILiterals inline
&gt; 
&gt; Do you mean also changing the return value of this method from AtomicString&amp; to String?
&gt; 

Hmm... or maybe you mean using ASCIILiterals just for &quot;grammar&quot; and &quot;spelling&quot; (for the comparison only), and leave the &quot;true&quot; and &quot;false&quot; ones as statically defined AtomicStrings (thus keeping the AtomicString&amp; return type) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935261</commentid>
    <comment_count>17</comment_count>
      <attachid>213096</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-10-01 16:28:24 -0700</bug_when>
    <thetext>Comment on attachment 213096
Patch proposal

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

&gt;&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1348
&gt;&gt;&gt;&gt; +    DEFINE_STATIC_LOCAL(const AtomicString, invalidStatusGrammar, (&quot;grammar&quot;, AtomicString::ConstructFromLiteral));
&gt;&gt;&gt; 
&gt;&gt;&gt; we probably don&apos;t need statics for these (as per recent discussions on webkit-dev) - we can probably switch these to just ASCIILiterals inline
&gt;&gt; 
&gt;&gt; Do you mean also changing the return value of this method from AtomicString&amp; to String?
&gt; 
&gt; Hmm... or maybe you mean using ASCIILiterals just for &quot;grammar&quot; and &quot;spelling&quot; (for the comparison only), and leave the &quot;true&quot; and &quot;false&quot; ones as statically defined AtomicStrings (thus keeping the AtomicString&amp; return type) ?

Ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935412</commentid>
    <comment_count>18</comment_count>
      <attachid>213168</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-02 09:15:10 -0700</bug_when>
    <thetext>Created attachment 213168
Patch proposal

New patch using less static variables and without the empty() check</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935778</commentid>
    <comment_count>19</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-03 08:20:06 -0700</bug_when>
    <thetext>Committed r156835: &lt;http://trac.webkit.org/changeset/156835&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212816</attachid>
            <date>2013-09-27 09:34:13 -0700</date>
            <delta_ts>2013-09-30 03:36:56 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2013-09-27-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>28534</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA0ZjhlMDY0MzliN2FkMjdiN2NmMDU0NzgxNjk2ZWI3YmFhMGRlOTczIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogRnJpLCAyNyBTZXAgMjAxMyAxNjozNjozNSArMDEwMApTdWJqZWN0OiBb
UEFUQ0hdIDIwMTMtMDktMjcgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KCiAgICAgICAgW0FUS10gRXhwb3NlIGFyaWEtaW52YWxpZCBhcyBhIHRleHQgYXR0
cmlidXRlIChub3Qgb2JqZWN0IGF0dHJpYnV0ZSkKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMDE1CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgoKICAgICAgICBFeHBvc2UgdGhlIGFyaWEtaW52YWxpZCBhdHRyaWJ1dGUgY29ycmVj
dGx5IHRocm91Z2ggYSB0ZXh0CiAgICAgICAgYXR0cmlidXRlICh0aHJvdWdoIHRoZSBBdGtUZXh0
IGludGVyZmFjZSkgaW5zdGVhZCBvZiB1c2luZyBhbgogICAgICAgIG9iamVjdCwgYWNjb3JkaW5n
IHRvIHdoYXQgdGhlIFdBSS1BUklBIHNwZWNzIHNheXMuCiAgICAgICAgaHR0cDovL3d3dy53My5v
cmcvVFIvd2FpLWFyaWEtaW1wbGVtZW50YXRpb24vI21hcHBpbmdfc3RhdGUtcHJvcGVydHkKCiAg
ICAgICAgVGhpcyB3aWxsIGJlIHRlc3RlZCBieSBhY2Nlc2liaWxpdHkvYXJpYS1pbnZhbGlkLmh0
bWwsIHdoaWNoIHNob3VsZAogICAgICAgIGtlZXAgcGFzc2luZyBhZnRlciB0aGFua3MgdG8gdGhl
IGNoYW5nZXMgZG9uZSBpbiB0aGUgRFJUIGFuZCBXS1RSLgoKICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcDoKICAgICAgICAoZ2V0QXR0
cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6IEV4cG9zZSBhcmlhLWludmFsaWQgYXMg
YQogICAgICAgIGN1c3RvbSB0ZXh0IGF0dHJpYnV0ZSAnaW52YWxpZCcsIGZvbGxvd2luZyB0aGUg
bGVhZCBvZiBGaXJlZm94LgogICAgICAgIEFsc28gcmVnaXN0ZXIgdGhhdCBjdXN0b20gYXR0cmli
dXRlIGFzIGEgQXRrVGV4dEF0dHJpYnV0ZS4KICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdl
dEF0dHJpYnV0ZXMpOiBSZW1vdmUgZXhwb3N1cmUgb2YgYXJpYS1pbnZhbGlkCiAgICAgICAgYXMg
YW4gb2JqZWN0IGF0dHJpYnV0ZSBmcm9tIGhlcmUuCgoyMDEzLTA5LTI3ICBNYXJpbyBTYW5jaGV6
IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CgogICAgICAgIFtBVEtdIEV4cG9zZSBh
cmlhLWludmFsaWQgYXMgYSB0ZXh0IGF0dHJpYnV0ZSAobm90IG9iamVjdCBhdHRyaWJ1dGUpCiAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjAxNQoKICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgQWRhcHRlZCBEUlQgYW5k
IFdLVFIgdG8gY2hlY2sgdGhlIGV4cG9zdXJlIG9mIHRoZSBhcmlhLWludmFsaWQKICAgICAgICBh
dHRyaWJ1dGUgYXMgYSB0ZXh0IGF0dHJpYnV0ZSwgaW5zdGVhZCBvZiBhbiBvYmplY3QgYXR0cmli
dXRlLgoKICAgICAgICBBbHNvLCBkb25lIHNvbWUgcmVmYWN0b3Jpbmcgb2YgdGhlIGNvZGUgdG8g
dHJ5IHRvIGtlZXAgdGhpbmdzCiAgICAgICAgc2ltcGxlciBhbmQgbW9yZSBjb2hlcmVudCwgYnkg
ZGVmaW5pbmcgbmV3IGhlbHBlciBmdW5jdGlvbnMsCiAgICAgICAgc2ltcGxpZnlpbmcgY29kZSwg
YW5kIHNvIG9uLCB3aXRob3V0IGFsdGVyaW5nIHRoZSBsb2dpYyBvdGhlciB0aGFuCiAgICAgICAg
Zm9yIGNoZWNraW5nIHRoZSB0ZXh0IGF0dHJpYnV0ZSBmb3IgYXJpYS1pbnZhbGlkLgoKICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcDoKICAg
ICAgICAoY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKTogQ29uc2lkZXIgJ2ludmFsaWQnIGFz
IHRoZSBuYW1lIG9mCiAgICAgICAgdGhlIGF0dHJpYnV0ZSBleHBvc2VkIGJ5IHRoZSBBVEsgd3Jh
cHBlciwgbm90ICdhcmlhLWludmFsaWQnLgogICAgICAgIEFsc28sIG5ldmVyIHJldHVybiBhbiBl
bXB0eSBzdHJpbmcgaWYgbm90IGZhbGxpbmcgdGhyb3VnaCBhbnkgb2YKICAgICAgICB0aGUgY2Fz
ZXMgY2hlY2tlZCBoZXJlLCBhbmQgcmV0dXJuIHRoZSBvcmlnaW5hbCBhdHRyaWJ1dGUgaW5zdGVh
ZC4KICAgICAgICAoYXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZSk6IE5ldyBo
ZWxwZXIgZnVuY3Rpb24gdG8KICAgICAgICBtYXRjaCB0aGUgYXR0cmlidXRlcyB2YWx1ZXMgcmV0
dXJuZWQgYnkgdGhlIEFUSyB3cmFwcGVyIHdpdGggdGhlCiAgICAgICAgdmFsdWVzIGV4cGVjdGVk
IGJ5IHRoZSBsYXlvdXQgdGVzdHMuIE1vdmVkIHRoZSBtYXBwaW5ncyBmb3IgdGhlCiAgICAgICAg
dmFsdWVzIG9mIEFYU29ydERpcmVjdGlvbiBoZXJlIGFzIHdlbGwuCiAgICAgICAgKGdldEF0dHJp
YnV0ZVNldCk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gdG8gcmV0cmlldmUgYSBsaXN0IG9mCiAgICAg
ICAgYXR0cmlidXRlcyAoYW4gQXRrQXR0cmlidXRlU2V0KSBmcm9tIGFuIEF0a09iamVjdCB1c2lu
ZyB0aGUgcmlnaHQKICAgICAgICBBUEkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0aGUg
b2JqZWN0IGF0dHJpYnV0ZXMgb3IgdGhlIHRleHQKICAgICAgICBhdHRyaWJ1dGVzIChpbiBjYXNl
IHRoZSBvYmplY3QgaW1wbGVtZW50cyBBdGtUZXh0KS4KICAgICAgICAoZ2V0QXR0cmlidXRlU2V0
VmFsdWVGb3JJZCk6IFNpbXBsaWZpZWQgYnkgdXNpbmcgZ2V0QXR0cmlidXRlU2V0CiAgICAgICAg
YW5kIGF0a0F0dHJpYnV0ZVZhbHVlVG9Db3JlQXR0cmlidXRlVmFsdWUuIEFsc28sIGFkZGVkIGEg
bmV3CiAgICAgICAgcGFyYW1ldGVyIHRvIGluZGljYXRlciB3aGV0aGVyIHdlIGFyZSBpbnRlcmVz
dGVkIGluIG9iamVjdAogICAgICAgIGF0dHJpYnV0ZXMgb3IgdGV4dCBhdHRyaWJ1dGVzLgogICAg
ICAgIChnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyk6IERpdHRvLgogICAgICAgIChhdHRyaWJ1
dGVzT2ZFbGVtZW50KTogVXBkYXRlZCB0byBwYXNzIHRoZSBuZXcgcmVxdWlyZWQgcGFyYW1ldGVy
CiAgICAgICAgdG8gZ2V0QXRrQXR0cmlidXRlU2V0QXNTdHJpbmcsIGluZGljYXRpbmcgdGhhdCB3
ZSB3YW50IHRoZSBvYmplY3QKICAgICAgICBhdHRyaWJ1dGVzIGluIHRoaXMgY2FzZSwgZm9yIGJh
Y2t3YXJkcyBjb21wYXRpYmlsaXR5LgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IEFmdGVyIG1vdmluZyBtb3N0CiAgICAgICAgb2YgdGhlIGNv
ZGUgaGVyZSB0byB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbnMsIHNpbXBsaWZpZWQgaXQgYnkKICAg
ICAgICBqdXN0IGNoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGF0dHJpYnV0ZSBpcyBwcm92
aWRlZCBhcyBhbgogICAgICAgIG9iamVjdCBhdHRyaWJ1dGUgb3IsIGlmIHRoYXQncyBub3QgdGhl
IGNhc2UsIGFzIGEgdGV4dCBhdHRyaWJ1dGUuCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Omhhc1BvcHVwKTogVXBkYXRlZCB0byBwYXNzIHRoZSBuZXcKICAgICAgICByZXF1
aXJlZCBwYXJhbWV0ZXIgdG8gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZCwgaW5kaWNhdGluZyB0
aGF0CiAgICAgICAgd2Ugd2FudCB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgaW4gdGhpcyBjYXNlLgoK
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRBdGsuY3BwOgogICAgICAgIChXVFI6OmNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJp
YnV0ZSk6IFNhbWUgY2hhbmdlcyB0aGFuIGZvciBEUlQuCiAgICAgICAgKFdUUjo6YXRrQXR0cmli
dXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgogICAgICAgIChXVFI6OmdldEF0
dHJpYnV0ZVNldCk6IERpdHRvLgogICAgICAgIChXVFI6OmdldEF0dHJpYnV0ZVNldFZhbHVlRm9y
SWQpOiBEaXR0by4KICAgICAgICAoV1RSOjpnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyk6IERp
dHRvLgogICAgICAgIChXVFI6OmF0dHJpYnV0ZXNPZkVsZW1lbnQpOiBEaXR0by4KICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRv
LgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9y
dGVkKTogRGl0dG8uCiAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9w
dXApOiBEaXR0by4KLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgMjMgKysrKwogLi4uL2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
VGV4dC5jcHAgICAgICAgICAgfCAgIDE1ICsrKwogLi4uL2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3Jh
cHBlckF0ay5jcHAgICAgICAgICAgICAgfCAgICA0IC0KIFRvb2xzL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1NiArKysrKysrKysrCiAuLi4vYXRrL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwICAgICAgICAgICAgICB8ICAxMTQgKysrKysrKysr
KysrKystLS0tLS0KIC4uLi9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgICAgICAg
ICAgICAgIHwgIDExNCArKysrKysrKysrKysrKy0tLS0tLQogNiBmaWxlcyBjaGFuZ2VkLCAyNTIg
aW5zZXJ0aW9ucygrKSwgNzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGYyMjlmOWIuLjZm
MjYxYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMy0wOS0yNyAgTWFyaW8gU2Fu
Y2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtBVEtdIEV4
cG9zZSBhcmlhLWludmFsaWQgYXMgYSB0ZXh0IGF0dHJpYnV0ZSAobm90IG9iamVjdCBhdHRyaWJ1
dGUpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIw
MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBv
c2UgdGhlIGFyaWEtaW52YWxpZCBhdHRyaWJ1dGUgY29ycmVjdGx5IHRocm91Z2ggYSB0ZXh0Cisg
ICAgICAgIGF0dHJpYnV0ZSAodGhyb3VnaCB0aGUgQXRrVGV4dCBpbnRlcmZhY2UpIGluc3RlYWQg
b2YgdXNpbmcgYW4KKyAgICAgICAgb2JqZWN0LCBhY2NvcmRpbmcgdG8gd2hhdCB0aGUgV0FJLUFS
SUEgc3BlY3Mgc2F5cy4KKyAgICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtaW1w
bGVtZW50YXRpb24vI21hcHBpbmdfc3RhdGUtcHJvcGVydHkKKworICAgICAgICBUaGlzIHdpbGwg
YmUgdGVzdGVkIGJ5IGFjY2VzaWJpbGl0eS9hcmlhLWludmFsaWQuaHRtbCwgd2hpY2ggc2hvdWxk
CisgICAgICAgIGtlZXAgcGFzc2luZyBhZnRlciB0aGFua3MgdG8gdGhlIGNoYW5nZXMgZG9uZSBp
biB0aGUgRFJUIGFuZCBXS1RSLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0Rm9y
QWNjZXNzaWJpbGl0eU9iamVjdCk6IEV4cG9zZSBhcmlhLWludmFsaWQgYXMgYQorICAgICAgICBj
dXN0b20gdGV4dCBhdHRyaWJ1dGUgJ2ludmFsaWQnLCBmb2xsb3dpbmcgdGhlIGxlYWQgb2YgRmly
ZWZveC4KKyAgICAgICAgQWxzbyByZWdpc3RlciB0aGF0IGN1c3RvbSBhdHRyaWJ1dGUgYXMgYSBB
dGtUZXh0QXR0cmlidXRlLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRBdHRyaWJ1
dGVzKTogUmVtb3ZlIGV4cG9zdXJlIG9mIGFyaWEtaW52YWxpZAorICAgICAgICBhcyBhbiBvYmpl
Y3QgYXR0cmlidXRlIGZyb20gaGVyZS4KKwogMjAxMy0wOS0wNiAgSmVyIE5vYmxlICA8amVyLm5v
YmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBJbXBsZW1lbnQgdGhlIG1lZGlhIGNvbnRy
b2xzIGluIEphdmFTY3JpcHQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKaW5k
ZXggN2Y0MTYwYi4uNDQ0ZWQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cApAQCAtNTYsNiArNTYsMTEgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKy8vIFRl
eHQgYXR0cmlidXRlIHRvIGV4cG9zZSB0aGUgQVJJQSAnYXJpYS1pbnZhbGlkJyBhdHRyaWJ1dGUu
IEluaXRpYWxseSBpbml0aWFsaXplZAorLy8gdG8gQVRLX1RFWFRfQVRUUl9JTlZBTElEICh3aGlj
aCBtZWFucyAnaW52YWxpZCcgdGV4dCBhdHRyaWJ1dGUnKSwgd2lsbCBsYXRlciBvbgorLy8gaG9s
ZCBhIHJlZmVyZW5jZSB0byB0aGUgY3VzdG9tIHJlZ2lzdGVyZWQgQXRrVGV4dEF0dHJpYnV0ZSB0
aGF0IHdlIHdpbGwgdXNlLgorc3RhdGljIEF0a1RleHRBdHRyaWJ1dGUgYXRrVGV4dEF0dHJpYnV0
ZUludmFsaWQgPSBBVEtfVEVYVF9BVFRSX0lOVkFMSUQ7CisKIHN0YXRpYyBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlKEF0a1RleHQqIHRleHQpCiB7CiAgICAgaWYgKCFXRUJLSVRfSVNfQUNDRVNT
SUJMRSh0ZXh0KSkKQEAgLTI5NCw2ICsyOTksMTYgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCog
Z2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXQK
ICAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSkKICAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtB
dHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRf
QVRUUl9MQU5HVUFHRSksIGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwogCisgICAgU3RyaW5nIGlu
dmFsaWRTdGF0dXMgPSBvYmplY3QtPmludmFsaWRTdGF0dXMoKS5zdHJpbmcoKTsKKyAgICBpZiAo
IWludmFsaWRTdGF0dXMuaXNFbXB0eSgpICYmIGludmFsaWRTdGF0dXMgIT0gImZhbHNlIikgewor
ICAgICAgICAvLyBSZWdpc3RlciB0aGUgY3VzdG9tIGF0dHJpYnV0ZSBmb3IgJ2FyaWEtaW52YWxp
ZCcgaWYgbm90IGRvbmUgeWV0LgorICAgICAgICBpZiAoYXRrVGV4dEF0dHJpYnV0ZUludmFsaWQg
PT0gQVRLX1RFWFRfQVRUUl9JTlZBTElEKQorICAgICAgICAgICAgYXRrVGV4dEF0dHJpYnV0ZUlu
dmFsaWQgPSBhdGtfdGV4dF9hdHRyaWJ1dGVfcmVnaXN0ZXIoImludmFsaWQiKTsKKworICAgICAg
ICBTdHJpbmcgaW52YWxpZFZhbHVlID0gaW52YWxpZFN0YXR1cyA9PSAic3BlbGxpbmciIHx8IGlu
dmFsaWRTdGF0dXMgPT0gImdyYW1tYXIiID8gaW52YWxpZFN0YXR1cyA6ICJ0cnVlIjsKKyAgICAg
ICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1
dGVfZ2V0X25hbWUoYXRrVGV4dEF0dHJpYnV0ZUludmFsaWQpLCBpbnZhbGlkVmFsdWUudXRmOCgp
LmRhdGEoKSk7CisgICAgfQorCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJB
dGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZVdyYXBwZXJBdGsuY3BwCmluZGV4IGFkODhiZGEuLmRiMWY2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
V3JhcHBlckF0ay5jcHAKQEAgLTUwNSwxMCArNTA1LDYgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNl
dCogd2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMoQXRrT2JqZWN0KiBvYmplY3QpCiAgICAg
aWYgKGNvcmVPYmplY3QtPmFyaWFIYXNQb3B1cCgpKQogICAgICAgICBhdHRyaWJ1dGVTZXQgPSBh
ZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJoYXNwb3B1cCIsICJ0cnVlIik7CiAK
LSAgICBTdHJpbmcgaW52YWxpZFN0YXR1cyA9IGNvcmVPYmplY3QtPmludmFsaWRTdGF0dXMoKS5z
dHJpbmcoKTsKLSAgICBpZiAoIWludmFsaWRTdGF0dXMuaXNFbXB0eSgpICYmIGludmFsaWRTdGF0
dXMgIT0gImZhbHNlIikKLSAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVT
ZXQoYXR0cmlidXRlU2V0LCAiYXJpYS1pbnZhbGlkIiwgY29yZU9iamVjdC0+aW52YWxpZFN0YXR1
cygpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCiAgICAgQWNjZXNzaWJpbGl0eVNvcnREaXJl
Y3Rpb24gc29ydERpcmVjdGlvbiA9IGNvcmVPYmplY3QtPnNvcnREaXJlY3Rpb24oKTsKICAgICBp
ZiAoc29ydERpcmVjdGlvbiAhPSBTb3J0RGlyZWN0aW9uTm9uZSkgewogICAgICAgICAvLyBXQUkt
QVJJQSBzcGVjIHNheXMgdG8gdHJhbnNsYXRlIHRoZSB2YWx1ZSBhcyBpcyBmcm9tIHRoZSBhdHRy
aWJ1dGUuCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggN2I5NzA1Yi4uMjIwNGQxNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTA5LTI3ICBNYXJpbyBTYW5jaGV6
IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gRXhwb3Nl
IGFyaWEtaW52YWxpZCBhcyBhIHRleHQgYXR0cmlidXRlIChub3Qgb2JqZWN0IGF0dHJpYnV0ZSkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjAxNQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkYXB0ZWQg
RFJUIGFuZCBXS1RSIHRvIGNoZWNrIHRoZSBleHBvc3VyZSBvZiB0aGUgYXJpYS1pbnZhbGlkCisg
ICAgICAgIGF0dHJpYnV0ZSBhcyBhIHRleHQgYXR0cmlidXRlLCBpbnN0ZWFkIG9mIGFuIG9iamVj
dCBhdHRyaWJ1dGUuCisKKyAgICAgICAgQWxzbywgZG9uZSBzb21lIHJlZmFjdG9yaW5nIG9mIHRo
ZSBjb2RlIHRvIHRyeSB0byBrZWVwIHRoaW5ncworICAgICAgICBzaW1wbGVyIGFuZCBtb3JlIGNv
aGVyZW50LCBieSBkZWZpbmluZyBuZXcgaGVscGVyIGZ1bmN0aW9ucywKKyAgICAgICAgc2ltcGxp
ZnlpbmcgY29kZSwgYW5kIHNvIG9uLCB3aXRob3V0IGFsdGVyaW5nIHRoZSBsb2dpYyBvdGhlciB0
aGFuCisgICAgICAgIGZvciBjaGVja2luZyB0aGUgdGV4dCBhdHRyaWJ1dGUgZm9yIGFyaWEtaW52
YWxpZC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50QXRrLmNwcDoKKyAgICAgICAgKGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZSk6IENvbnNp
ZGVyICdpbnZhbGlkJyBhcyB0aGUgbmFtZSBvZgorICAgICAgICB0aGUgYXR0cmlidXRlIGV4cG9z
ZWQgYnkgdGhlIEFUSyB3cmFwcGVyLCBub3QgJ2FyaWEtaW52YWxpZCcuCisgICAgICAgIEFsc28s
IG5ldmVyIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IGZhbGxpbmcgdGhyb3VnaCBhbnkg
b2YKKyAgICAgICAgdGhlIGNhc2VzIGNoZWNrZWQgaGVyZSwgYW5kIHJldHVybiB0aGUgb3JpZ2lu
YWwgYXR0cmlidXRlIGluc3RlYWQuCisgICAgICAgIChhdGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0
dHJpYnV0ZVZhbHVlKTogTmV3IGhlbHBlciBmdW5jdGlvbiB0bworICAgICAgICBtYXRjaCB0aGUg
YXR0cmlidXRlcyB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIEFUSyB3cmFwcGVyIHdpdGggdGhlCisg
ICAgICAgIHZhbHVlcyBleHBlY3RlZCBieSB0aGUgbGF5b3V0IHRlc3RzLiBNb3ZlZCB0aGUgbWFw
cGluZ3MgZm9yIHRoZQorICAgICAgICB2YWx1ZXMgb2YgQVhTb3J0RGlyZWN0aW9uIGhlcmUgYXMg
d2VsbC4KKyAgICAgICAgKGdldEF0dHJpYnV0ZVNldCk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gdG8g
cmV0cmlldmUgYSBsaXN0IG9mCisgICAgICAgIGF0dHJpYnV0ZXMgKGFuIEF0a0F0dHJpYnV0ZVNl
dCkgZnJvbSBhbiBBdGtPYmplY3QgdXNpbmcgdGhlIHJpZ2h0CisgICAgICAgIEFQSSBkZXBlbmRp
bmcgb24gd2hldGhlciB3ZSB3YW50IHRoZSBvYmplY3QgYXR0cmlidXRlcyBvciB0aGUgdGV4dAor
ICAgICAgICBhdHRyaWJ1dGVzIChpbiBjYXNlIHRoZSBvYmplY3QgaW1wbGVtZW50cyBBdGtUZXh0
KS4KKyAgICAgICAgKGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQpOiBTaW1wbGlmaWVkIGJ5IHVz
aW5nIGdldEF0dHJpYnV0ZVNldAorICAgICAgICBhbmQgYXRrQXR0cmlidXRlVmFsdWVUb0NvcmVB
dHRyaWJ1dGVWYWx1ZS4gQWxzbywgYWRkZWQgYSBuZXcKKyAgICAgICAgcGFyYW1ldGVyIHRvIGlu
ZGljYXRlciB3aGV0aGVyIHdlIGFyZSBpbnRlcmVzdGVkIGluIG9iamVjdAorICAgICAgICBhdHRy
aWJ1dGVzIG9yIHRleHQgYXR0cmlidXRlcy4KKyAgICAgICAgKGdldEF0a0F0dHJpYnV0ZVNldEFz
U3RyaW5nKTogRGl0dG8uCisgICAgICAgIChhdHRyaWJ1dGVzT2ZFbGVtZW50KTogVXBkYXRlZCB0
byBwYXNzIHRoZSBuZXcgcmVxdWlyZWQgcGFyYW1ldGVyCisgICAgICAgIHRvIGdldEF0a0F0dHJp
YnV0ZVNldEFzU3RyaW5nLCBpbmRpY2F0aW5nIHRoYXQgd2Ugd2FudCB0aGUgb2JqZWN0CisgICAg
ICAgIGF0dHJpYnV0ZXMgaW4gdGhpcyBjYXNlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHku
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6
IEFmdGVyIG1vdmluZyBtb3N0CisgICAgICAgIG9mIHRoZSBjb2RlIGhlcmUgdG8gdGhlIG5ldyBo
ZWxwZXIgZnVuY3Rpb25zLCBzaW1wbGlmaWVkIGl0IGJ5CisgICAgICAgIGp1c3QgY2hlY2tpbmcg
d2hldGhlciB0aGUgcmVxdWlyZWQgYXR0cmlidXRlIGlzIHByb3ZpZGVkIGFzIGFuCisgICAgICAg
IG9iamVjdCBhdHRyaWJ1dGUgb3IsIGlmIHRoYXQncyBub3QgdGhlIGNhc2UsIGFzIGEgdGV4dCBh
dHRyaWJ1dGUuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1
cHBvcnRlZCk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9w
dXApOiBVcGRhdGVkIHRvIHBhc3MgdGhlIG5ldworICAgICAgICByZXF1aXJlZCBwYXJhbWV0ZXIg
dG8gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZCwgaW5kaWNhdGluZyB0aGF0CisgICAgICAgIHdl
IHdhbnQgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIGluIHRoaXMgY2FzZS4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRB
dGsuY3BwOgorICAgICAgICAoV1RSOjpjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUpOiBTYW1l
IGNoYW5nZXMgdGhhbiBmb3IgRFJULgorICAgICAgICAoV1RSOjphdGtBdHRyaWJ1dGVWYWx1ZVRv
Q29yZUF0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OmdldEF0dHJpYnV0ZVNl
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKTogRGl0
dG8uCisgICAgICAgIChXVFI6OmdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OmF0dHJpYnV0ZXNPZkVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXAp
OiBEaXR0by4KKwogMjAxMy0wOS0yNyAgRGVuaXMgTm9taXlhbWEgIDxkLm5vbWl5YW1hQHNhbXN1
bmcuY29tPgogCiAgICAgICAgIFtHVEtdW1dLMl0gTG9nZ2luZyBvZiBhY2Nlc3NpYmlsaXR5IGV2
ZW50cyBpcyBub3QgZGlzYWJsZWQgYmV0d2VlbiB0ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCmluZGV4IDdjNDRl
NmEuLjhhN2JlNzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50QXRrLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKQEAgLTQxLDYgKzQxLDExIEBACiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFt
ZXMuaD4KIAorZW51bSBBdGtBdHRyaWJ1dGVUeXBlIHsKKyAgICBBdGtBdHRyaWJ1dGVUeXBlT2Jq
ZWN0LAorICAgIEF0a0F0dHJpYnV0ZVR5cGVUZXh0Cit9OworCiBzdGF0aWMgU3RyaW5nIGNvcmVB
dHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiB7CiAgICAgc2l6
ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoYXR0cmli
dXRlKTsKQEAgLTQ5LDcgKzU0LDcgQEAgc3RhdGljIFN0cmluZyBjb3JlQXR0cmlidXRlVG9BdGtB
dHRyaWJ1dGUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogCiAgICAgU3RyaW5nIGF0dHJpYnV0ZVN0
cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmdldCgpKTsKICAgICBpZiAoYXR0cmlidXRl
U3RyaW5nID09ICJBWEludmFsaWQiKQotICAgICAgICByZXR1cm4gImFyaWEtaW52YWxpZCI7Cisg
ICAgICAgIHJldHVybiAiaW52YWxpZCI7CiAKICAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJB
WFBsYWNlaG9sZGVyVmFsdWUiKQogICAgICAgICByZXR1cm4gInBsYWNlaG9sZGVyLXRleHQiOwpA
QCAtNTcsMzIgKzYyLDgwIEBAIHN0YXRpYyBTdHJpbmcgY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmli
dXRlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKICAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJB
WFNvcnREaXJlY3Rpb24iKQogICAgICAgICByZXR1cm4gInNvcnQiOwogCi0gICAgcmV0dXJuIFN0
cmluZygpOworICAgIC8vIFJldHVybiB0aGUgYXR0cmlidXRlIG5hbWUgdW5jaGFuZ2VkIGlmIG5v
dCBmaWx0ZXJlZC4KKyAgICByZXR1cm4gYXR0cmlidXRlU3RyaW5nOworfQorCitzdGF0aWMgU3Ry
aW5nIGF0a0F0dHJpYnV0ZVZhbHVlVG9Db3JlQXR0cmlidXRlVmFsdWUoQXRrQXR0cmlidXRlVHlw
ZSB0eXBlLCBTdHJpbmcmIGlkLCBTdHJpbmcmIHZhbHVlKQoreworICAgIC8vIE9iamVjdCBhdHRy
aWJ1dGVzIChleHBvc2VkIGZvciBpbnN0YW5jZXMgb2YgQXRrT2JqZWN0KS4KKyAgICBpZiAodHlw
ZSA9PSBBdGtBdHRyaWJ1dGVUeXBlT2JqZWN0KSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gdHJh
bnNsYXRlIEFUSyB2YWx1ZXMgZXhwb3NlZCBmb3IgJ2FyaWEtc29ydCcgKGUuZy4gJ2FzY2VuZGlu
ZycpCisgICAgICAgIC8vIGludG8gdGhvc2UgZXhwZWN0ZWQgYnkgdGhlIGxheW91dCB0ZXN0cyAo
ZS5nLiAnQVhBc2NlbmRpbmdTb3J0RGlyZWN0aW9uJykuCisgICAgICAgIGlmIChpZCA9PSAic29y
dCIgJiYgIXZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKHZhbHVlID09ICJhc2Nl
bmRpbmciKQorICAgICAgICAgICAgICAgIHJldHVybiAiQVhBc2NlbmRpbmdTb3J0RGlyZWN0aW9u
IjsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAiZGVzY2VuZGluZyIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuICJBWERlc2NlbmRpbmdTb3J0RGlyZWN0aW9uIjsKKworICAgICAgICAgICAgcmV0
dXJuICJBWFVua25vd25Tb3J0RGlyZWN0aW9uIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IFRleHQgYXR0cmlidXRlcyAoZXhwb3NlZCBmb3IgaW5zdGFuY2VzIG9mIEF0a09iamVjdCBpbXBs
ZW1lbnRpbmcgQXRrVGV4dCkuCisgICAgaWYgKHR5cGUgPT0gQXRrQXR0cmlidXRlVHlwZVRleHQp
IHsKKyAgICAgICAgLy8gSW4gY2FzZSBvZiAnYXJpYS1pbnZhbGlkJyB3aGVuIHRoZSBhdHRyaWJ1
dGUgZW1wdHkgb3IgaGFzICJmYWxzZSIgZm9yIEFUSworICAgICAgICAvLyBpdCBzaG91bGQgbm90
IGJlIG1hcHBlZCBhdCBhbGwsIGJ1dCBsYXlvdXQgdGVzdHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4K
KyAgICAgICAgaWYgKGlkID09ICJpbnZhbGlkIiAmJiB2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gImZhbHNlIjsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIHBhc3NlZCB2
YWx1ZSB1bmNoYW5nZWQgaWYgbm90IGZpbHRlcmVkLgorICAgIHJldHVybiB2YWx1ZTsKK30KKwor
c3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0KEF0a09iamVjdCogYWNjZXNz
aWJsZSwgQXRrQXR0cmlidXRlVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IEF0a0F0dHJp
YnV0ZVR5cGVPYmplY3QpCisgICAgICAgIHJldHVybiBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVz
KGFjY2Vzc2libGUpOworCisgICAgaWYgKHR5cGUgPT0gQXRrQXR0cmlidXRlVHlwZVRleHQpIHsK
KyAgICAgICAgaWYgKCFBVEtfSVNfVEVYVChhY2Nlc3NpYmxlKSkKKyAgICAgICAgICAgIHJldHVy
biAwOworCisgICAgICAgIHJldHVybiBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKEFU
S19URVhUKGFjY2Vzc2libGUpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZv
cklkKEF0a09iamVjdCogYWNjZXNzaWJsZSwgY29uc3QgY2hhciogaWQpCitzdGF0aWMgU3RyaW5n
IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBBdGtBdHRy
aWJ1dGVUeXBlIHR5cGUsIFN0cmluZyBpZCkKIHsKLSAgICBjb25zdCBjaGFyKiBhdHRyaWJ1dGVW
YWx1ZSA9IDA7Ci0gICAgQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSBhdGtfb2JqZWN0
X2dldF9hdHRyaWJ1dGVzKGFjY2Vzc2libGUpOworICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmli
dXRlU2V0ID0gZ2V0QXR0cmlidXRlU2V0KGFjY2Vzc2libGUsIHR5cGUpOworICAgIGlmICghYXR0
cmlidXRlU2V0KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmcgYXR0cmli
dXRlVmFsdWU7CiAgICAgZm9yIChBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1
dGVTZXQ7IGF0dHJpYnV0ZXM7IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLT5uZXh0KSB7CiAgICAg
ICAgIEF0a0F0dHJpYnV0ZSogYXRrQXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRl
Kj4oYXR0cmlidXRlcy0+ZGF0YSk7Ci0gICAgICAgIGlmICghc3RyY21wKGF0a0F0dHJpYnV0ZS0+
bmFtZSwgaWQpKSB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGF0a0F0dHJpYnV0ZS0+
dmFsdWU7CisgICAgICAgIGlmIChpZCA9PSBhdGtBdHRyaWJ1dGUtPm5hbWUpIHsKKyAgICAgICAg
ICAgIGF0dHJpYnV0ZVZhbHVlID0gU3RyaW5nOjpmcm9tVVRGOChhdGtBdHRyaWJ1dGUtPnZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotCi0gICAgU3RyaW5nIGF0
a0F0dHJpYnV0ZVZhbHVlID0gU3RyaW5nOjpmcm9tVVRGOChhdHRyaWJ1dGVWYWx1ZSk7CiAgICAg
YXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShhdHRyaWJ1dGVTZXQpOwogCi0gICAgcmV0dXJuIGF0a0F0
dHJpYnV0ZVZhbHVlOworICAgIHJldHVybiBhdGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0
ZVZhbHVlKHR5cGUsIGlkLCBhdHRyaWJ1dGVWYWx1ZSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZ2V0
QXRrQXR0cmlidXRlU2V0QXNTdHJpbmcoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlKQorc3RhdGljIFN0
cmluZyBnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhBdGtPYmplY3QqIGFjY2Vzc2libGUsIEF0
a0F0dHJpYnV0ZVR5cGUgdHlwZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
QXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSBnZXRBdHRyaWJ1dGVTZXQoYWNjZXNzaWJs
ZSwgdHlwZSk7CisgICAgaWYgKCFhdHRyaWJ1dGVTZXQpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIAotICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gYXRrX29iamVjdF9nZXRf
YXR0cmlidXRlcyhhY2Nlc3NpYmxlKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAg
Zm9yIChBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTZXQ7IGF0dHJpYnV0
ZXM7IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLT5uZXh0KSB7CiAgICAgICAgIEF0a0F0dHJpYnV0
ZSogYXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4oYXR0cmlidXRlcy0+ZGF0
YSk7CiAgICAgICAgIEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoZ19zdHJjb25jYXQoYXR0
cmlidXRlLT5uYW1lLCAiOiIsIGF0dHJpYnV0ZS0+dmFsdWUsIE5VTEwpKTsKQEAgLTI4MCw3ICsz
MzMsNyBAQCBzdGF0aWMgU3RyaW5nIGF0dHJpYnV0ZXNPZkVsZW1lbnQoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCogZWxlbWVudCkKIAogICAgIC8vIFdlIGFwcGVuZCB0aGUgQVRLIHNwZWNpZmljIGF0
dHJpYnV0ZXMgYXMgYSBzaW5nbGUgbGluZSBhdCB0aGUgZW5kLgogICAgIGJ1aWxkZXIuYXBwZW5k
KCJBWFBsYXRmb3JtQXR0cmlidXRlczogIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZ2V0QXRrQXR0
cmlidXRlU2V0QXNTdHJpbmcoZWxlbWVudC0+cGxhdGZvcm1VSUVsZW1lbnQoKSkpOworICAgIGJ1
aWxkZXIuYXBwZW5kKGdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKGVsZW1lbnQtPnBsYXRmb3Jt
VUlFbGVtZW50KCksIEF0a0F0dHJpYnV0ZVR5cGVPYmplY3QpKTsKIAogICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7CiB9CkBAIC05MTMsMjcgKzk2NiwxMyBAQCBKU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRy
aWJ1dGUpCiAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OwogCiAgICAgU3RyaW5nIGF0a0F0dHJpYnV0ZU5hbWUgPSBjb3JlQXR0cmlidXRlVG9BdGtBdHRy
aWJ1dGUoYXR0cmlidXRlKTsKLSAgICBpZiAoYXRrQXR0cmlidXRlTmFtZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAg
U3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JK
RUNUKG1fZWxlbWVudCksIGF0a0F0dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAv
LyBJbiBjYXNlIG9mICdhcmlhLWludmFsaWQnIHdoZW4gdGhlIGF0dHJpYnV0ZSBlbXB0eSBvciBo
YXMgImZhbHNlIiBmb3IgQVRLCi0gICAgLy8gYWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cudzMub3Jn
L1dBSS9QRi9hcmlhLWltcGxlbWVudGF0aW9uLyNtYXBwaW5nIGF0dHJpYnV0ZQotICAgIC8vIGlz
IG5vdCBtYXBwZWQgYnV0IGxheW91dCB0ZXN0cyB3aWxsIGV4cGVjdCAnZmFsc2UnLgotICAgIGlm
IChhdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkgJiYgYXRrQXR0cmlidXRlTmFtZSA9PSAiYXJpYS1p
bnZhbGlkIikKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJm
YWxzZSIpOworICAgIC8vIFRyeSBvYmplY3QgYXR0cmlidXRlcyBmaXJzdC4KKyAgICBTdHJpbmcg
YXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9l
bGVtZW50KSwgQXRrQXR0cmlidXRlVHlwZU9iamVjdCwgYXRrQXR0cmlidXRlTmFtZSk7CiAKLSAg
ICAvLyBXZSBuZWVkIHRvIHRyYW5zbGF0ZSBBVEsgdmFsdWVzIGV4cG9zZWQgZm9yICdhcmlhLXNv
cnQnIChlLmcuICdhc2NlbmRpbmcnKQotICAgIC8vIGludG8gdGhvc2UgZXhwZWN0ZWQgYnkgdGhl
IGxheW91dCB0ZXN0cyAoZS5nLiAnQVhBc2NlbmRpbmdTb3J0RGlyZWN0aW9uJykuCi0gICAgaWYg
KGF0a0F0dHJpYnV0ZU5hbWUgPT0gInNvcnQiKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1
ZSA9PSAiYXNjZW5kaW5nIikKLSAgICAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQVhBc2NlbmRpbmdTb3J0RGlyZWN0aW9uIik7Ci0gICAgICAgIGlmIChhdHRy
aWJ1dGVWYWx1ZSA9PSAiZGVzY2VuZGluZyIpCi0gICAgICAgICAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkFYRGVzY2VuZGluZ1NvcnREaXJlY3Rpb24iKTsKLQotICAg
ICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFYVW5rbm93blNvcnRE
aXJlY3Rpb24iKTsKLSAgICB9CisgICAgLy8gVHJ5IHRleHQgYXR0cmlidXRlcyBpZiB0aGUgcmVx
dWVzdGVkIG9uZSB3YXMgbm90IGZvdW5kIGFuZCB3ZSBoYXZlIGFuIEF0a1RleHQgb2JqZWN0Lgor
ICAgIGlmIChhdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkgJiYgQVRLX0lTX1RFWFQobV9lbGVtZW50
KSkKKyAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFU
S19PQkpFQ1QobV9lbGVtZW50KSwgQXRrQXR0cmlidXRlVHlwZVRleHQsIGF0a0F0dHJpYnV0ZU5h
bWUpOwogCiAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0dHJpYnV0
ZVZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogfQpAQCAtOTY1LDcgKzEwMDQsMTEgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChKU1N0cmluZ1JlZiBhdHRy
aWJ1dGUpCiAgICAgaWYgKGF0a0F0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRW
YWx1ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgYXRrQXR0cmlidXRlTmFtZS51dGY4KCku
ZGF0YSgpKTsKKyAgICAvLyBGb3Igbm93LCBhbiBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkIHdoZXRo
ZXIgaXQncyBleHBvc2VkIGFzIGEgb2JqZWN0IG9yIGEgdGV4dCBhdHRyaWJ1dGUuCisgICAgU3Ry
aW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNU
KG1fZWxlbWVudCksIEF0a0F0dHJpYnV0ZVR5cGVPYmplY3QsIGF0a0F0dHJpYnV0ZU5hbWUpOwor
ICAgIGlmIChhdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIGF0dHJpYnV0ZVZhbHVl
ID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIEF0a0F0
dHJpYnV0ZVR5cGVUZXh0LCBhdGtBdHRyaWJ1dGVOYW1lKTsKKwogICAgIHJldHVybiAhYXR0cmli
dXRlVmFsdWUuaXNFbXB0eSgpOwogfQogCkBAIC0xMTYxLDcgKzEyMDQsOCBAQCBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKCkgY29uc3QKICAgICBpZiAoIUFUS19JU19PQkpF
Q1QobV9lbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGVxdWFs
SWdub3JpbmdDYXNlKGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1l
bnQpLCAiaGFzcG9wdXAiKSwgInRydWUiKTsKKyAgICBTdHJpbmcgaGFzUG9wdXBWYWx1ZSA9IGdl
dEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBBdGtBdHRyaWJ1
dGVUeXBlT2JqZWN0LCAiaGFzcG9wdXAiKTsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2Uo
aGFzUG9wdXBWYWx1ZSwgInRydWUiKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp0YWtlRm9jdXMoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNw
cAppbmRleCBjMDhhYTlkLi40ZTBiNGJmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRrLmNwcApAQCAtNDUsNiArNDUsMTEgQEAKIAogbmFtZXNwYWNlIFdUUiB7CiAK
K2VudW0gQXRrQXR0cmlidXRlVHlwZSB7CisgICAgQXRrQXR0cmlidXRlVHlwZU9iamVjdCwKKyAg
ICBBdGtBdHRyaWJ1dGVUeXBlVGV4dAorfTsKKwogc3RhdGljIFN0cmluZyBjb3JlQXR0cmlidXRl
VG9BdGtBdHRyaWJ1dGUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogewogICAgIHNpemVfdCBidWZm
ZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGF0dHJpYnV0ZSk7CkBA
IC01Myw3ICs1OCw3IEBAIHN0YXRpYyBTdHJpbmcgY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRl
KEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIAogICAgIFN0cmluZyBhdHRyaWJ1dGVTdHJpbmcgPSBT
dHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5nZXQoKSk7CiAgICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9
PSAiQVhJbnZhbGlkIikKLSAgICAgICAgcmV0dXJuICJhcmlhLWludmFsaWQiOworICAgICAgICBy
ZXR1cm4gImludmFsaWQiOwogCiAgICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhQbGFjZWhv
bGRlclZhbHVlIikKICAgICAgICAgcmV0dXJuICJwbGFjZWhvbGRlci10ZXh0IjsKQEAgLTYxLDMy
ICs2Niw4MCBAQCBzdGF0aWMgU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0
cmluZ1JlZiBhdHRyaWJ1dGUpCiAgICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhTb3J0RGly
ZWN0aW9uIikKICAgICAgICAgcmV0dXJuICJzb3J0IjsKIAotICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICAvLyBSZXR1cm4gdGhlIGF0dHJpYnV0ZSBuYW1lIHVuY2hhbmdlZCBpZiBub3QgZmlsdGVy
ZWQuCisgICAgcmV0dXJuIGF0dHJpYnV0ZVN0cmluZzsKK30KKworc3RhdGljIFN0cmluZyBhdGtB
dHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0ZVZhbHVlKEF0a0F0dHJpYnV0ZVR5cGUgdHlwZSwg
U3RyaW5nJiBpZCwgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICAvLyBPYmplY3QgYXR0cmlidXRlcyAo
ZXhwb3NlZCBmb3IgaW5zdGFuY2VzIG9mIEF0a09iamVjdCkuCisgICAgaWYgKHR5cGUgPT0gQXRr
QXR0cmlidXRlVHlwZU9iamVjdCkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIHRyYW5zbGF0ZSBB
VEsgdmFsdWVzIGV4cG9zZWQgZm9yICdhcmlhLXNvcnQnIChlLmcuICdhc2NlbmRpbmcnKQorICAg
ICAgICAvLyBpbnRvIHRob3NlIGV4cGVjdGVkIGJ5IHRoZSBsYXlvdXQgdGVzdHMgKGUuZy4gJ0FY
QXNjZW5kaW5nU29ydERpcmVjdGlvbicpLgorICAgICAgICBpZiAoaWQgPT0gInNvcnQiICYmICF2
YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAiYXNjZW5kaW5nIikK
KyAgICAgICAgICAgICAgICByZXR1cm4gIkFYQXNjZW5kaW5nU29ydERpcmVjdGlvbiI7CisgICAg
ICAgICAgICBpZiAodmFsdWUgPT0gImRlc2NlbmRpbmciKQorICAgICAgICAgICAgICAgIHJldHVy
biAiQVhEZXNjZW5kaW5nU29ydERpcmVjdGlvbiI7CisKKyAgICAgICAgICAgIHJldHVybiAiQVhV
bmtub3duU29ydERpcmVjdGlvbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZXh0IGF0
dHJpYnV0ZXMgKGV4cG9zZWQgZm9yIGluc3RhbmNlcyBvZiBBdGtPYmplY3QgaW1wbGVtZW50aW5n
IEF0a1RleHQpLgorICAgIGlmICh0eXBlID09IEF0a0F0dHJpYnV0ZVR5cGVUZXh0KSB7CisgICAg
ICAgIC8vIEluIGNhc2Ugb2YgJ2FyaWEtaW52YWxpZCcgd2hlbiB0aGUgYXR0cmlidXRlIGVtcHR5
IG9yIGhhcyAiZmFsc2UiIGZvciBBVEsKKyAgICAgICAgLy8gaXQgc2hvdWxkIG5vdCBiZSBtYXBw
ZWQgYXQgYWxsLCBidXQgbGF5b3V0IHRlc3RzIHdpbGwgZXhwZWN0ICdmYWxzZScuCisgICAgICAg
IGlmIChpZCA9PSAiaW52YWxpZCIgJiYgdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuICJmYWxzZSI7CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSBwYXNzZWQgdmFsdWUgdW5j
aGFuZ2VkIGlmIG5vdCBmaWx0ZXJlZC4KKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBT
dHJpbmcgZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBdGtPYmplY3QqIGFjY2Vzc2libGUsIGNv
bnN0IGNoYXIqIGlkKQorc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0KEF0
a09iamVjdCogYWNjZXNzaWJsZSwgQXRrQXR0cmlidXRlVHlwZSB0eXBlKQogewotICAgIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZVZhbHVlID0gMDsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0
ZVNldCA9IGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXMoYWNjZXNzaWJsZSk7CisgICAgaWYgKHR5
cGUgPT0gQXRrQXR0cmlidXRlVHlwZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIGF0a19vYmplY3Rf
Z2V0X2F0dHJpYnV0ZXMoYWNjZXNzaWJsZSk7CisKKyAgICBpZiAodHlwZSA9PSBBdGtBdHRyaWJ1
dGVUeXBlVGV4dCkgeworICAgICAgICBpZiAoIUFUS19JU19URVhUKGFjY2Vzc2libGUpKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIGF0a190ZXh0X2dldF9kZWZhdWx0
X2F0dHJpYnV0ZXMoQVRLX1RFWFQoYWNjZXNzaWJsZSkpOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgU3RyaW5nIGdldEF0dHJp
YnV0ZVNldFZhbHVlRm9ySWQoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBBdGtBdHRyaWJ1dGVUeXBl
IHR5cGUsIFN0cmluZyBpZCkKK3sKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCA9
IGdldEF0dHJpYnV0ZVNldChhY2Nlc3NpYmxlLCB0eXBlKTsKKyAgICBpZiAoIWF0dHJpYnV0ZVNl
dCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVl
OwogICAgIGZvciAoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU2V0OyBh
dHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy0+bmV4dCkgewogICAgICAgICBBdGtB
dHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0dHJp
YnV0ZXMtPmRhdGEpOwotICAgICAgICBpZiAoIXN0cmNtcChhdGtBdHRyaWJ1dGUtPm5hbWUsIGlk
KSkgewotICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdGtBdHRyaWJ1dGUtPnZhbHVlOwor
ICAgICAgICBpZiAoaWQgPT0gYXRrQXR0cmlidXRlLT5uYW1lKSB7CisgICAgICAgICAgICBhdHRy
aWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXRrQXR0cmlidXRlLT52YWx1ZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQotICAgIFN0cmluZyBhdGtBdHRyaWJ1
dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXR0cmlidXRlVmFsdWUpOwogICAgIGF0a19hdHRy
aWJ1dGVfc2V0X2ZyZWUoYXR0cmlidXRlU2V0KTsKIAotICAgIHJldHVybiBhdGtBdHRyaWJ1dGVW
YWx1ZTsKKyAgICByZXR1cm4gYXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZSh0
eXBlLCBpZCwgYXR0cmlidXRlVmFsdWUpOwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEF0a0F0dHJp
YnV0ZVNldEFzU3RyaW5nKEF0a09iamVjdCogYWNjZXNzaWJsZSkKK3N0YXRpYyBTdHJpbmcgZ2V0
QXRrQXR0cmlidXRlU2V0QXNTdHJpbmcoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBBdGtBdHRyaWJ1
dGVUeXBlIHR5cGUpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIEF0a0F0dHJp
YnV0ZVNldCogYXR0cmlidXRlU2V0ID0gZ2V0QXR0cmlidXRlU2V0KGFjY2Vzc2libGUsIHR5cGUp
OworICAgIGlmICghYXR0cmlidXRlU2V0KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAg
ICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCA9IGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0
ZXMoYWNjZXNzaWJsZSk7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIGZvciAoQXRr
QXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU2V0OyBhdHRyaWJ1dGVzOyBhdHRy
aWJ1dGVzID0gYXR0cmlidXRlcy0+bmV4dCkgewogICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0dHJp
YnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0dHJpYnV0ZXMtPmRhdGEpOwogICAg
ICAgICBHT3duUHRyPGdjaGFyPiBhdHRyaWJ1dGVEYXRhKGdfc3RyY29uY2F0KGF0dHJpYnV0ZS0+
bmFtZSwgIjoiLCBhdHRyaWJ1dGUtPnZhbHVlLCBOVUxMKSk7CkBAIC0zNDUsNyArMzk4LDcgQEAg
c3RhdGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQq
IGVsZW1lbnQpCiAKICAgICAvLyBXZSBhcHBlbmQgdGhlIEFUSyBzcGVjaWZpYyBhdHRyaWJ1dGVz
IGFzIGEgc2luZ2xlIGxpbmUgYXQgdGhlIGVuZC4KICAgICBidWlsZGVyLmFwcGVuZCgiQVhQbGF0
Zm9ybUF0dHJpYnV0ZXM6ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGdldEF0a0F0dHJpYnV0ZVNl
dEFzU3RyaW5nKGVsZW1lbnQtPnBsYXRmb3JtVUlFbGVtZW50KCkuZ2V0KCkpKTsKKyAgICBidWls
ZGVyLmFwcGVuZChnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhlbGVtZW50LT5wbGF0Zm9ybVVJ
RWxlbWVudCgpLmdldCgpLCBBdGtBdHRyaWJ1dGVUeXBlT2JqZWN0KSk7CiAKICAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOwogfQpAQCAtNTcwLDI3ICs2MjMsMTMgQEAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVl
KEpTU3RyaW5nUmUKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
MCwgMCk7CiAKICAgICBTdHJpbmcgYXRrQXR0cmlidXRlTmFtZSA9IGNvcmVBdHRyaWJ1dGVUb0F0
a0F0dHJpYnV0ZShhdHRyaWJ1dGUpOwotICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQot
ICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRL
X09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpLCBhdGtBdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkp
OwogCi0gICAgLy8gSW4gY2FzZSBvZiAnYXJpYS1pbnZhbGlkJyB3aGVuIHRoZSBhdHRyaWJ1dGUg
ZW1wdHkgb3IgaGFzICJmYWxzZSIgZm9yIEFUSwotICAgIC8vIGFjY29yZGluZyB0byBodHRwOi8v
d3d3LnczLm9yZy9XQUkvUEYvYXJpYS1pbXBsZW1lbnRhdGlvbi8jbWFwcGluZyBhdHRyaWJ1dGUK
LSAgICAvLyBpcyBub3QgbWFwcGVkIGJ1dCBsYXlvdXQgdGVzdHMgd2lsbCBleHBlY3QgJ2ZhbHNl
Jy4KLSAgICBpZiAoYXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpICYmIGF0a0F0dHJpYnV0ZU5hbWUg
PT0gImFyaWEtaW52YWxpZCIpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiZmFsc2UiKTsKKyAgICAvLyBUcnkgb2JqZWN0IGF0dHJpYnV0ZXMgZmlyc3QuCisg
ICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtf
T0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIEF0a0F0dHJpYnV0ZVR5cGVPYmplY3QsIGF0a0F0dHJp
YnV0ZU5hbWUpOwogCi0gICAgLy8gV2UgbmVlZCB0byB0cmFuc2xhdGUgQVRLIHZhbHVlcyBleHBv
c2VkIGZvciAnYXJpYS1zb3J0JyAoZS5nLiAnYXNjZW5kaW5nJykKLSAgICAvLyBpbnRvIHRob3Nl
IGV4cGVjdGVkIGJ5IHRoZSBsYXlvdXQgdGVzdHMgKGUuZy4gJ0FYQXNjZW5kaW5nU29ydERpcmVj
dGlvbicpLgotICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lID09ICJzb3J0IikgewotICAgICAgICBp
ZiAoYXR0cmlidXRlVmFsdWUgPT0gImFzY2VuZGluZyIpCi0gICAgICAgICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFYQXNjZW5kaW5nU29ydERpcmVjdGlvbiIpOwot
ICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUgPT0gImRlc2NlbmRpbmciKQotICAgICAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBWERlc2NlbmRpbmdTb3J0RGly
ZWN0aW9uIik7Ci0KLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJBWFVua25vd25Tb3J0RGlyZWN0aW9uIik7Ci0gICAgfQorICAgIC8vIFRyeSB0ZXh0IGF0dHJp
YnV0ZXMgaWYgdGhlIHJlcXVlc3RlZCBvbmUgd2FzIG5vdCBmb3VuZCBhbmQgd2UgaGF2ZSBhbiBB
dGtUZXh0IG9iamVjdC4KKyAgICBpZiAoYXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpICYmIEFUS19J
U19URVhUKG1fZWxlbWVudC5nZXQoKSkpCisgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0
cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIEF0a0F0dHJp
YnV0ZVR5cGVUZXh0LCBhdGtBdHRyaWJ1dGVOYW1lKTsKIAogICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdHRyaWJ1dGVWYWx1ZS51dGY4KCkuZGF0YSgpKTsKIH0KQEAg
LTYyOCw3ICs2NjcsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0
ZVN1cHBvcnRlZChKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAgICAgaWYgKGF0a0F0dHJpYnV0ZU5h
bWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgYXR0cmli
dXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50
LmdldCgpKSwgYXRrQXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAvLyBGb3Igbm93
LCBhbiBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkIHdoZXRoZXIgaXQncyBleHBvc2VkIGFzIGEgb2Jq
ZWN0IG9yIGEgdGV4dCBhdHRyaWJ1dGUuCisgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0
QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIEF0a0F0
dHJpYnV0ZVR5cGVPYmplY3QsIGF0a0F0dHJpYnV0ZU5hbWUpOworICAgIGlmIChhdHRyaWJ1dGVW
YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0
VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIEF0a0F0dHJpYnV0ZVR5cGVU
ZXh0LCBhdGtBdHRyaWJ1dGVOYW1lKTsKKwogICAgIHJldHVybiAhYXR0cmlidXRlVmFsdWUuaXNF
bXB0eSgpOwogfQogCkBAIC0xMTk5LDcgKzEyNDIsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Omhhc1BvcHVwKCkgY29uc3QKICAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50
LmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGVxdWFsSWdub3Jp
bmdDYXNlKGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0
KCkpLCAiaGFzcG9wdXAiKSwgInRydWUiKTsKKyAgICBTdHJpbmcgaGFzUG9wdXBWYWx1ZSA9IGdl
dEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpLCBBdGtB
dHRyaWJ1dGVUeXBlT2JqZWN0LCAiaGFzcG9wdXAiKTsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmlu
Z0Nhc2UoaGFzUG9wdXBWYWx1ZSwgInRydWUiKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0YWtlRm9jdXMoKQotLSAKMS43LjEwLjQKCg==
</data>
<flag name="commit-queue"
          id="235077"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212974</attachid>
            <date>2013-09-30 03:36:56 -0700</date>
            <delta_ts>2013-09-30 06:03:19 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2013-09-30-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>41017</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA0ZDRhZTc4Y2E2YzRlOTliOGNkY2UyNTMxNzA4YTVlM2VkOWY3ZTkyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogTW9uLCAzMCBTZXAgMjAxMyAwOTozNTowMiArMDEwMApTdWJqZWN0OiBb
UEFUQ0hdIDIwMTMtMDktMzAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KCiAgICAgICAgW0FUS10gRXhwb3NlIGFyaWEtaW52YWxpZCBhcyBhIHRleHQgYXR0
cmlidXRlIChub3Qgb2JqZWN0IGF0dHJpYnV0ZSkKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMDE1CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgoKICAgICAgICBFeHBvc2UgdGhlIGFyaWEtaW52YWxpZCBhdHRyaWJ1dGUgY29ycmVj
dGx5IHRocm91Z2ggYSB0ZXh0CiAgICAgICAgYXR0cmlidXRlICh0aHJvdWdoIHRoZSBBdGtUZXh0
IGludGVyZmFjZSkgaW5zdGVhZCBvZiB1c2luZyBhbgogICAgICAgIG9iamVjdCwgYWNjb3JkaW5n
IHRvIHdoYXQgdGhlIFdBSS1BUklBIHNwZWNzIHNheXMuCiAgICAgICAgaHR0cDovL3d3dy53My5v
cmcvVFIvd2FpLWFyaWEtaW1wbGVtZW50YXRpb24vI21hcHBpbmdfc3RhdGUtcHJvcGVydHkKCiAg
ICAgICAgVGhpcyB3aWxsIGJlIHRlc3RlZCBieSBhY2Nlc2liaWxpdHkvYXJpYS1pbnZhbGlkLmh0
bWwsIHdoaWNoIHNob3VsZAogICAgICAgIGtlZXAgcGFzc2luZyBhZnRlciB0aGFua3MgdG8gdGhl
IGNoYW5nZXMgZG9uZSBpbiB0aGUgRFJUIGFuZCBXS1RSLgoKICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcDoKICAgICAgICAoZ2V0QXR0
cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6IEV4cG9zZSBhcmlhLWludmFsaWQgYXMg
YQogICAgICAgIGN1c3RvbSB0ZXh0IGF0dHJpYnV0ZSAnaW52YWxpZCcsIGZvbGxvd2luZyB0aGUg
bGVhZCBvZiBGaXJlZm94LgogICAgICAgIEFsc28gcmVnaXN0ZXIgdGhhdCBjdXN0b20gYXR0cmli
dXRlIGFzIGEgQXRrVGV4dEF0dHJpYnV0ZS4KICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdl
dEF0dHJpYnV0ZXMpOiBSZW1vdmUgZXhwb3N1cmUgb2YgYXJpYS1pbnZhbGlkCiAgICAgICAgYXMg
YW4gb2JqZWN0IGF0dHJpYnV0ZSBmcm9tIGhlcmUuCgoyMDEzLTA5LTMwICBNYXJpbyBTYW5jaGV6
IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CgogICAgICAgIFtBVEtdIEV4cG9zZSBh
cmlhLWludmFsaWQgYXMgYSB0ZXh0IGF0dHJpYnV0ZSAobm90IG9iamVjdCBhdHRyaWJ1dGUpCiAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjAxNQoKICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgQWRhcHRlZCBEUlQgYW5k
IFdLVFIgdG8gY2hlY2sgdGhlIGV4cG9zdXJlIG9mIHRoZSBhcmlhLWludmFsaWQKICAgICAgICBh
dHRyaWJ1dGUgYXMgYSB0ZXh0IGF0dHJpYnV0ZSwgaW5zdGVhZCBvZiBhbiBvYmplY3QgYXR0cmli
dXRlLgoKICAgICAgICBBbHNvLCBkb25lIHNvbWUgcmVmYWN0b3Jpbmcgb2YgdGhlIGNvZGUgdG8g
dHJ5IHRvIGtlZXAgdGhpbmdzCiAgICAgICAgc2ltcGxlciBhbmQgbW9yZSBjb2hlcmVudCwgYnkg
ZGVmaW5pbmcgbmV3IGhlbHBlciBmdW5jdGlvbnMsCiAgICAgICAgc2ltcGxpZnlpbmcgY29kZSwg
bW92aW5nIHN0YXRpYyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBpbnRvCiAgICAgICAgdW5uYW1t
ZWQgbmFtZXNwYWNlcyBhbmQgc28gb24sIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIGxvZ2ljIG90aGVy
CiAgICAgICAgdGhhbiBmb3IgY2hlY2tpbmcgdGhlIHRleHQgYXR0cmlidXRlIGZvciBhcmlhLWlu
dmFsaWQuCgogICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRBdGsuY3BwOgogICAgICAgIChjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUpOiBDb25zaWRl
ciAnaW52YWxpZCcgYXMgdGhlIG5hbWUgb2YKICAgICAgICB0aGUgYXR0cmlidXRlIGV4cG9zZWQg
YnkgdGhlIEFUSyB3cmFwcGVyLCBub3QgJ2FyaWEtaW52YWxpZCcuCiAgICAgICAgQWxzbywgbmV2
ZXIgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBpZiBub3QgZmFsbGluZyB0aHJvdWdoIGFueSBvZgog
ICAgICAgIHRoZSBjYXNlcyBjaGVja2VkIGhlcmUsIGFuZCByZXR1cm4gdGhlIG9yaWdpbmFsIGF0
dHJpYnV0ZSBpbnN0ZWFkLgogICAgICAgIChhdGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0
ZVZhbHVlKTogTmV3IGhlbHBlciBmdW5jdGlvbiB0bwogICAgICAgIG1hdGNoIHRoZSBhdHRyaWJ1
dGVzIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgQVRLIHdyYXBwZXIgd2l0aCB0aGUKICAgICAgICB2
YWx1ZXMgZXhwZWN0ZWQgYnkgdGhlIGxheW91dCB0ZXN0cy4gTW92ZWQgdGhlIG1hcHBpbmdzIGZv
ciB0aGUKICAgICAgICB2YWx1ZXMgb2YgQVhTb3J0RGlyZWN0aW9uIGhlcmUgYXMgd2VsbC4KICAg
ICAgICAoZ2V0QXR0cmlidXRlU2V0KTogTmV3IGhlbHBlciBmdW5jdGlvbiB0byByZXRyaWV2ZSBh
IGxpc3Qgb2YKICAgICAgICBhdHRyaWJ1dGVzIChhbiBBdGtBdHRyaWJ1dGVTZXQpIGZyb20gYW4g
QXRrT2JqZWN0IHVzaW5nIHRoZSByaWdodAogICAgICAgIEFQSSBkZXBlbmRpbmcgb24gd2hldGhl
ciB3ZSB3YW50IHRoZSBvYmplY3QgYXR0cmlidXRlcyBvciB0aGUgdGV4dAogICAgICAgIGF0dHJp
YnV0ZXMgKGluIGNhc2UgdGhlIG9iamVjdCBpbXBsZW1lbnRzIEF0a1RleHQpLgogICAgICAgIChn
ZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKTogU2ltcGxpZmllZCBieSB1c2luZyBnZXRBdHRyaWJ1
dGVTZXQKICAgICAgICBhbmQgYXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZS4g
QWxzbywgYWRkZWQgYSBuZXcKICAgICAgICBwYXJhbWV0ZXIgdG8gaW5kaWNhdGVyIHdoZXRoZXIg
d2UgYXJlIGludGVyZXN0ZWQgaW4gb2JqZWN0CiAgICAgICAgYXR0cmlidXRlcyBvciB0ZXh0IGF0
dHJpYnV0ZXMuCiAgICAgICAgKGdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKTogRGl0dG8uCiAg
ICAgICAgKGF0dHJpYnV0ZXNPZkVsZW1lbnQpOiBVcGRhdGVkIHRvIHBhc3MgdGhlIG5ldyByZXF1
aXJlZCBwYXJhbWV0ZXIKICAgICAgICB0byBnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZywgaW5k
aWNhdGluZyB0aGF0IHdlIHdhbnQgdGhlIG9iamVjdAogICAgICAgIGF0dHJpYnV0ZXMgaW4gdGhp
cyBjYXNlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCiAgICAgICAgKGluZGV4UmFuZ2VJ
blRhYmxlKTogTW92ZWQgdXAgaW4gdGhlIGZpbGUgaW50byB0aGUgdW5uYW1tZWQgbmFtZXNwYWNl
LgogICAgICAgIChhbHRlckN1cnJlbnRWYWx1ZSk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IEFmdGVyIG1vdmluZyBtb3N0CiAg
ICAgICAgb2YgdGhlIGNvZGUgaGVyZSB0byB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbnMsIHNpbXBs
aWZpZWQgaXQgYnkKICAgICAgICBqdXN0IGNoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGF0
dHJpYnV0ZSBpcyBwcm92aWRlZCBhcyBhbgogICAgICAgIG9iamVjdCBhdHRyaWJ1dGUgb3IsIGlm
IHRoYXQncyBub3QgdGhlIGNhc2UsIGFzIGEgdGV4dCBhdHRyaWJ1dGUuCiAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKTogRGl0dG8uCiAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKTogVXBkYXRlZCB0byBwYXNzIHRoZSBu
ZXcKICAgICAgICByZXF1aXJlZCBwYXJhbWV0ZXIgdG8gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJ
ZCwgaW5kaWNhdGluZyB0aGF0CiAgICAgICAgd2Ugd2FudCB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMg
aW4gdGhpcyBjYXNlLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCk6
IERpdHRvLgoKICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgogICAgICAgIChXVFI6OmNvcmVBdHRyaWJ1dGVU
b0F0a0F0dHJpYnV0ZSk6IFNhbWUgY2hhbmdlcyB0aGFuIGZvciBEUlQuCiAgICAgICAgKFdUUjo6
YXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgogICAgICAgIChX
VFI6OmdldEF0dHJpYnV0ZVNldCk6IERpdHRvLgogICAgICAgIChXVFI6OmdldEF0dHJpYnV0ZVNl
dFZhbHVlRm9ySWQpOiBEaXR0by4KICAgICAgICAoV1RSOjpnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0
cmluZyk6IERpdHRvLgogICAgICAgIChXVFI6OmF0dHJpYnV0ZXNPZkVsZW1lbnQpOiBEaXR0by4K
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1
ZSk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmli
dXRlU3VwcG9ydGVkKTogRGl0dG8uCiAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aW50VmFsdWUpOiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpoYXNQb3B1cCk6IERpdHRvLgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAyMyArKwogLi4uL2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAgICAgICAgICAgfCAgIDE1ICsrCiAuLi4vYXRrL1dlYktpdEFjY2Vzc2li
bGVXcmFwcGVyQXRrLmNwcCAgICAgICAgICAgICB8ICAgIDQgLQogVG9vbHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYxICsrKysrCiAuLi4vYXRrL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwICAgICAgICAgICAgICB8ICAyNzQgKysrKysrKysr
KysrLS0tLS0tLS0KIC4uLi9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgICAgICAg
ICAgICAgIHwgIDE2MCArKysrKysrKy0tLS0KIDYgZmlsZXMgY2hhbmdlZCwgMzc4IGluc2VydGlv
bnMoKyksIDE1OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjZlM2MzNS4uYjQ3N2JhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEzLTA5LTMwICBNYXJpbyBTYW5jaGV6IFBy
YWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gRXhwb3NlIGFy
aWEtaW52YWxpZCBhcyBhIHRleHQgYXR0cmlidXRlIChub3Qgb2JqZWN0IGF0dHJpYnV0ZSkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjAxNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9zZSB0aGUg
YXJpYS1pbnZhbGlkIGF0dHJpYnV0ZSBjb3JyZWN0bHkgdGhyb3VnaCBhIHRleHQKKyAgICAgICAg
YXR0cmlidXRlICh0aHJvdWdoIHRoZSBBdGtUZXh0IGludGVyZmFjZSkgaW5zdGVhZCBvZiB1c2lu
ZyBhbgorICAgICAgICBvYmplY3QsIGFjY29yZGluZyB0byB3aGF0IHRoZSBXQUktQVJJQSBzcGVj
cyBzYXlzLgorICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1pbXBsZW1lbnRh
dGlvbi8jbWFwcGluZ19zdGF0ZS1wcm9wZXJ0eQorCisgICAgICAgIFRoaXMgd2lsbCBiZSB0ZXN0
ZWQgYnkgYWNjZXNpYmlsaXR5L2FyaWEtaW52YWxpZC5odG1sLCB3aGljaCBzaG91bGQKKyAgICAg
ICAga2VlcCBwYXNzaW5nIGFmdGVyIHRoYW5rcyB0byB0aGUgY2hhbmdlcyBkb25lIGluIHRoZSBE
UlQgYW5kIFdLVFIuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3Np
YmlsaXR5T2JqZWN0KTogRXhwb3NlIGFyaWEtaW52YWxpZCBhcyBhCisgICAgICAgIGN1c3RvbSB0
ZXh0IGF0dHJpYnV0ZSAnaW52YWxpZCcsIGZvbGxvd2luZyB0aGUgbGVhZCBvZiBGaXJlZm94Lgor
ICAgICAgICBBbHNvIHJlZ2lzdGVyIHRoYXQgY3VzdG9tIGF0dHJpYnV0ZSBhcyBhIEF0a1RleHRB
dHRyaWJ1dGUuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdy
YXBwZXJBdGsuY3BwOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMpOiBS
ZW1vdmUgZXhwb3N1cmUgb2YgYXJpYS1pbnZhbGlkCisgICAgICAgIGFzIGFuIG9iamVjdCBhdHRy
aWJ1dGUgZnJvbSBoZXJlLgorCiAyMDEzLTA5LTMwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIHN0YXRpYyBtYXAgZm9yIG1hcmtpbmcgYW5j
ZXN0b3IgbGluZSBib3hlcyBkaXJ0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3Bw
CmluZGV4IDdmNDE2MGIuLjQ0NGVkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4
dC5jcHAKQEAgLTU2LDYgKzU2LDExIEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisv
LyBUZXh0IGF0dHJpYnV0ZSB0byBleHBvc2UgdGhlIEFSSUEgJ2FyaWEtaW52YWxpZCcgYXR0cmli
dXRlLiBJbml0aWFsbHkgaW5pdGlhbGl6ZWQKKy8vIHRvIEFUS19URVhUX0FUVFJfSU5WQUxJRCAo
d2hpY2ggbWVhbnMgJ2ludmFsaWQnIHRleHQgYXR0cmlidXRlJyksIHdpbGwgbGF0ZXIgb24KKy8v
IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGN1c3RvbSByZWdpc3RlcmVkIEF0a1RleHRBdHRyaWJ1
dGUgdGhhdCB3ZSB3aWxsIHVzZS4KK3N0YXRpYyBBdGtUZXh0QXR0cmlidXRlIGF0a1RleHRBdHRy
aWJ1dGVJbnZhbGlkID0gQVRLX1RFWFRfQVRUUl9JTlZBTElEOworCiBzdGF0aWMgQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZShBdGtUZXh0KiB0ZXh0KQogewogICAgIGlmICghV0VCS0lUX0lTX0FD
Q0VTU0lCTEUodGV4dCkpCkBAIC0yOTQsNiArMjk5LDE2IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVT
ZXQqIGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QoY29uc3QgQWNjZXNzaWJp
bGl0CiAgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkpCiAgICAgICAgIHJlc3VsdCA9IGFkZFRv
QXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19U
RVhUX0FUVFJfTEFOR1VBR0UpLCBsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKIAorICAgIFN0cmlu
ZyBpbnZhbGlkU3RhdHVzID0gb2JqZWN0LT5pbnZhbGlkU3RhdHVzKCkuc3RyaW5nKCk7CisgICAg
aWYgKCFpbnZhbGlkU3RhdHVzLmlzRW1wdHkoKSAmJiBpbnZhbGlkU3RhdHVzICE9ICJmYWxzZSIp
IHsKKyAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGN1c3RvbSBhdHRyaWJ1dGUgZm9yICdhcmlhLWlu
dmFsaWQnIGlmIG5vdCBkb25lIHlldC4KKyAgICAgICAgaWYgKGF0a1RleHRBdHRyaWJ1dGVJbnZh
bGlkID09IEFUS19URVhUX0FUVFJfSU5WQUxJRCkKKyAgICAgICAgICAgIGF0a1RleHRBdHRyaWJ1
dGVJbnZhbGlkID0gYXRrX3RleHRfYXR0cmlidXRlX3JlZ2lzdGVyKCJpbnZhbGlkIik7CisKKyAg
ICAgICAgU3RyaW5nIGludmFsaWRWYWx1ZSA9IGludmFsaWRTdGF0dXMgPT0gInNwZWxsaW5nIiB8
fCBpbnZhbGlkU3RhdHVzID09ICJncmFtbWFyIiA/IGludmFsaWRTdGF0dXMgOiAidHJ1ZSI7Cisg
ICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0
cmlidXRlX2dldF9uYW1lKGF0a1RleHRBdHRyaWJ1dGVJbnZhbGlkKSwgaW52YWxpZFZhbHVlLnV0
ZjgoKS5kYXRhKCkpOworICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFw
cGVyQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVXcmFwcGVyQXRrLmNwcAppbmRleCBhZDg4YmRhLi5kYjFmNjBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVdyYXBwZXJBdGsuY3BwCkBAIC01MDUsMTAgKzUwNSw2IEBAIHN0YXRpYyBBdGtBdHRyaWJ1
dGVTZXQqIHdlYmtpdEFjY2Vzc2libGVHZXRBdHRyaWJ1dGVzKEF0a09iamVjdCogb2JqZWN0KQog
ICAgIGlmIChjb3JlT2JqZWN0LT5hcmlhSGFzUG9wdXAoKSkKICAgICAgICAgYXR0cmlidXRlU2V0
ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAiaGFzcG9wdXAiLCAidHJ1ZSIp
OwogCi0gICAgU3RyaW5nIGludmFsaWRTdGF0dXMgPSBjb3JlT2JqZWN0LT5pbnZhbGlkU3RhdHVz
KCkuc3RyaW5nKCk7Ci0gICAgaWYgKCFpbnZhbGlkU3RhdHVzLmlzRW1wdHkoKSAmJiBpbnZhbGlk
U3RhdHVzICE9ICJmYWxzZSIpCi0gICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmli
dXRlU2V0KGF0dHJpYnV0ZVNldCwgImFyaWEtaW52YWxpZCIsIGNvcmVPYmplY3QtPmludmFsaWRT
dGF0dXMoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQogICAgIEFjY2Vzc2liaWxpdHlTb3J0
RGlyZWN0aW9uIHNvcnREaXJlY3Rpb24gPSBjb3JlT2JqZWN0LT5zb3J0RGlyZWN0aW9uKCk7CiAg
ICAgaWYgKHNvcnREaXJlY3Rpb24gIT0gU29ydERpcmVjdGlvbk5vbmUpIHsKICAgICAgICAgLy8g
V0FJLUFSSUEgc3BlYyBzYXlzIHRvIHRyYW5zbGF0ZSB0aGUgdmFsdWUgYXMgaXMgZnJvbSB0aGUg
YXR0cmlidXRlLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IGVhMDk3NjYuLjJkNTY4ZTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAxMy0wOS0zMCAgTWFyaW8gU2Fu
Y2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtBVEtdIEV4
cG9zZSBhcmlhLWludmFsaWQgYXMgYSB0ZXh0IGF0dHJpYnV0ZSAobm90IG9iamVjdCBhdHRyaWJ1
dGUpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIw
MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGFw
dGVkIERSVCBhbmQgV0tUUiB0byBjaGVjayB0aGUgZXhwb3N1cmUgb2YgdGhlIGFyaWEtaW52YWxp
ZAorICAgICAgICBhdHRyaWJ1dGUgYXMgYSB0ZXh0IGF0dHJpYnV0ZSwgaW5zdGVhZCBvZiBhbiBv
YmplY3QgYXR0cmlidXRlLgorCisgICAgICAgIEFsc28sIGRvbmUgc29tZSByZWZhY3RvcmluZyBv
ZiB0aGUgY29kZSB0byB0cnkgdG8ga2VlcCB0aGluZ3MKKyAgICAgICAgc2ltcGxlciBhbmQgbW9y
ZSBjb2hlcmVudCwgYnkgZGVmaW5pbmcgbmV3IGhlbHBlciBmdW5jdGlvbnMsCisgICAgICAgIHNp
bXBsaWZ5aW5nIGNvZGUsIG1vdmluZyBzdGF0aWMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgaW50
bworICAgICAgICB1bm5hbW1lZCBuYW1lc3BhY2VzIGFuZCBzbyBvbiwgd2l0aG91dCBhbHRlcmlu
ZyB0aGUgbG9naWMgb3RoZXIKKyAgICAgICAgdGhhbiBmb3IgY2hlY2tpbmcgdGhlIHRleHQgYXR0
cmlidXRlIGZvciBhcmlhLWludmFsaWQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHA6CisgICAgICAgIChjb3JlQXR0cmlidXRlVG9B
dGtBdHRyaWJ1dGUpOiBDb25zaWRlciAnaW52YWxpZCcgYXMgdGhlIG5hbWUgb2YKKyAgICAgICAg
dGhlIGF0dHJpYnV0ZSBleHBvc2VkIGJ5IHRoZSBBVEsgd3JhcHBlciwgbm90ICdhcmlhLWludmFs
aWQnLgorICAgICAgICBBbHNvLCBuZXZlciByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGlmIG5vdCBm
YWxsaW5nIHRocm91Z2ggYW55IG9mCisgICAgICAgIHRoZSBjYXNlcyBjaGVja2VkIGhlcmUsIGFu
ZCByZXR1cm4gdGhlIG9yaWdpbmFsIGF0dHJpYnV0ZSBpbnN0ZWFkLgorICAgICAgICAoYXRrQXR0
cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZSk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gdG8K
KyAgICAgICAgbWF0Y2ggdGhlIGF0dHJpYnV0ZXMgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBBVEsg
d3JhcHBlciB3aXRoIHRoZQorICAgICAgICB2YWx1ZXMgZXhwZWN0ZWQgYnkgdGhlIGxheW91dCB0
ZXN0cy4gTW92ZWQgdGhlIG1hcHBpbmdzIGZvciB0aGUKKyAgICAgICAgdmFsdWVzIG9mIEFYU29y
dERpcmVjdGlvbiBoZXJlIGFzIHdlbGwuCisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXQpOiBOZXcg
aGVscGVyIGZ1bmN0aW9uIHRvIHJldHJpZXZlIGEgbGlzdCBvZgorICAgICAgICBhdHRyaWJ1dGVz
IChhbiBBdGtBdHRyaWJ1dGVTZXQpIGZyb20gYW4gQXRrT2JqZWN0IHVzaW5nIHRoZSByaWdodAor
ICAgICAgICBBUEkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0aGUgb2JqZWN0IGF0dHJp
YnV0ZXMgb3IgdGhlIHRleHQKKyAgICAgICAgYXR0cmlidXRlcyAoaW4gY2FzZSB0aGUgb2JqZWN0
IGltcGxlbWVudHMgQXRrVGV4dCkuCisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklk
KTogU2ltcGxpZmllZCBieSB1c2luZyBnZXRBdHRyaWJ1dGVTZXQKKyAgICAgICAgYW5kIGF0a0F0
dHJpYnV0ZVZhbHVlVG9Db3JlQXR0cmlidXRlVmFsdWUuIEFsc28sIGFkZGVkIGEgbmV3CisgICAg
ICAgIHBhcmFtZXRlciB0byBpbmRpY2F0ZXIgd2hldGhlciB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBv
YmplY3QKKyAgICAgICAgYXR0cmlidXRlcyBvciB0ZXh0IGF0dHJpYnV0ZXMuCisgICAgICAgIChn
ZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyk6IERpdHRvLgorICAgICAgICAoYXR0cmlidXRlc09m
RWxlbWVudCk6IFVwZGF0ZWQgdG8gcGFzcyB0aGUgbmV3IHJlcXVpcmVkIHBhcmFtZXRlcgorICAg
ICAgICB0byBnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZywgaW5kaWNhdGluZyB0aGF0IHdlIHdh
bnQgdGhlIG9iamVjdAorICAgICAgICBhdHRyaWJ1dGVzIGluIHRoaXMgY2FzZSwgZm9yIGJhY2t3
YXJkcyBjb21wYXRpYmlsaXR5LgorICAgICAgICAoaW5kZXhSYW5nZUluVGFibGUpOiBNb3ZlZCB1
cCBpbiB0aGUgZmlsZSBpbnRvIHRoZSB1bm5hbW1lZCBuYW1lc3BhY2UuCisgICAgICAgIChhbHRl
ckN1cnJlbnRWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c3RyaW5nQXR0cmlidXRlVmFsdWUpOiBBZnRlciBtb3ZpbmcgbW9zdAorICAgICAgICBvZiB0aGUg
Y29kZSBoZXJlIHRvIHRoZSBuZXcgaGVscGVyIGZ1bmN0aW9ucywgc2ltcGxpZmllZCBpdCBieQor
ICAgICAgICBqdXN0IGNoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGF0dHJpYnV0ZSBpcyBw
cm92aWRlZCBhcyBhbgorICAgICAgICBvYmplY3QgYXR0cmlidXRlIG9yLCBpZiB0aGF0J3Mgbm90
IHRoZSBjYXNlLCBhcyBhIHRleHQgYXR0cmlidXRlLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKTogVXBkYXRlZCB0byBwYXNzIHRoZSBuZXcKKyAgICAg
ICAgcmVxdWlyZWQgcGFyYW1ldGVyIHRvIGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQsIGluZGlj
YXRpbmcgdGhhdAorICAgICAgICB3ZSB3YW50IHRoZSBvYmplY3QgYXR0cmlidXRlcyBpbiB0aGlz
IGNhc2UuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCk6IERpdHRv
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudEF0ay5jcHA6CisgICAgICAgIChXVFI6OmNvcmVBdHRyaWJ1dGVUb0F0
a0F0dHJpYnV0ZSk6IFNhbWUgY2hhbmdlcyB0aGFuIGZvciBEUlQuCisgICAgICAgIChXVFI6OmF0
a0F0dHJpYnV0ZVZhbHVlVG9Db3JlQXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6Z2V0QXR0cmlidXRlU2V0KTogRGl0dG8uCisgICAgICAgIChXVFI6OmdldEF0dHJpYnV0ZVNl
dFZhbHVlRm9ySWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6Z2V0QXRrQXR0cmlidXRlU2V0QXNT
dHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6YXR0cmlidXRlc09mRWxlbWVudCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVW
YWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0
dHJpYnV0ZVN1cHBvcnRlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbnRWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpoYXNQb3B1cCk6IERpdHRvLgorCiAyMDEzLTA5LTMwICBaYW4gRG9iZXJzZWsgIDx6
ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbd2Via2l0cHldIE1ha2UgdGhlIFh2ZmIg
c2NyZWVuIGRlcHRoIG92ZXJyaWRhYmxlCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKaW5kZXggNzI2NmRiMS4uN2ZhMzgw
MyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRBdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRrLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5
IEphbiBNaWNoYWVsIEFsb256bworICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ry
b25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQxLDQ4ICs0MiwxMTYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCi1zdGF0aWMgU3RyaW5n
IGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCituYW1l
c3BhY2UgeworCisvLyBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGNoZWNrIGFuIG9iamVj
dCBhdHRyaWJ1dGUsIGZyb20gaW5zdGFuY2VzCisvLyBvZiBBdGtPYmplY3QsIG9yIGEgdGV4dCBh
dHRyaWJ1dGUgZnJvbSBpbXBsZW1lbnRhdGlvbnMgb2YgQXRrVGV4dC4KK2VudW0gQXRrQXR0cmli
dXRlVHlwZSB7CisgICAgT2JqZWN0QXR0cmlidXRlVHlwZSwKKyAgICBUZXh0QXR0cmlidXRlVHlw
ZQorfTsKKworLy8gVXNlZCB0byBhZGRyZXNzIHRoZSByaWdodCB2YWx1ZSBpbiB0aGUgY29uc3Qg
YXJyYXlzIGRlZmluZWQgdG8KKy8vIHRyYW5zbGF0ZSBiZXR3ZWVuIEF0ayBuYW1lcyBhbmQgdmFs
dWVzIGV4cGVjdGVkIGluIHRoZSBsYXlvdXQgdGVzdHMuCitlbnVtIEF0dHJpYnV0ZURvbWFpbiB7
CisgICAgQ29yZURvbWFpbiA9IDAsCisgICAgQXRrRG9tYWluCit9OworCisvLyBBdHRyaWJ1dGUg
bmFtZXMuCitjb25zdCBTdHJpbmcgYXR0cmlidXRlSW52YWxpZE5hbWVzW10gPSB7ICJBWEludmFs
aWQiLCAiaW52YWxpZCIgfTsKK2NvbnN0IFN0cmluZyBhdHRyaWJ1dGVQbGFjZWhvbGRlck5hbWVz
W10gPSB7ICJBWFBsYWNlaG9sZGVyVmFsdWUiLCAicGxhY2Vob2xkZXItdGV4dCIgfTsKK2NvbnN0
IFN0cmluZyBhdHRyaWJ1dGVTb3J0TmFtZXNbXSA9IHsgIkFYU29ydERpcmVjdGlvbiIsICJzb3J0
IiB9OworCisvLyBBdHRyaWJ1dGUgdmFsdWVzLgorY29uc3QgU3RyaW5nIGF0dHJpYnV0ZVNvcnRB
c2NlbmRpbmdWYWx1ZXNbXSA9IHsgIkFYQXNjZW5kaW5nU29ydERpcmVjdGlvbiIsICJhc2NlbmRp
bmciIH07Citjb25zdCBTdHJpbmcgYXR0cmlidXRlU29ydERlc2NlbmRpbmdWYWx1ZXNbXSA9IHsg
IkFYRGVzY2VuZGluZ1NvcnREaXJlY3Rpb24iLCAiZGVzY2VuZGluZyIgfTsKK2NvbnN0IFN0cmlu
ZyBhdHRyaWJ1dGVTb3J0VW5rbm93blZhbHVlc1tdID0geyAiQVhVbmtub3duU29ydERpcmVjdGlv
biIsICJ1bmtub3duIiB9OyAvLyBOb3QgZXhwb3NlZCBpbiBBVEsuCisKK1N0cmluZyBjb3JlQXR0
cmlidXRlVG9BdGtBdHRyaWJ1dGUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogewogICAgIHNpemVf
dCBidWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGF0dHJpYnV0
ZSk7CiAgICAgR093blB0cjxnY2hhcj4gYnVmZmVyKHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxs
b2MoYnVmZmVyU2l6ZSkpKTsKICAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGF0dHJpYnV0ZSwg
YnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKIAogICAgIFN0cmluZyBhdHRyaWJ1dGVTdHJpbmcg
PSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5nZXQoKSk7Ci0gICAgaWYgKGF0dHJpYnV0ZVN0cmlu
ZyA9PSAiQVhJbnZhbGlkIikKLSAgICAgICAgcmV0dXJuICJhcmlhLWludmFsaWQiOworICAgIGlm
IChhdHRyaWJ1dGVTdHJpbmcgPT0gYXR0cmlidXRlSW52YWxpZE5hbWVzW0NvcmVEb21haW5dKQor
ICAgICAgICByZXR1cm4gYXR0cmlidXRlSW52YWxpZE5hbWVzW0F0a0RvbWFpbl07CiAKLSAgICBp
ZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWFBsYWNlaG9sZGVyVmFsdWUiKQotICAgICAgICByZXR1
cm4gInBsYWNlaG9sZGVyLXRleHQiOworICAgIGlmIChhdHRyaWJ1dGVTdHJpbmcgPT0gYXR0cmli
dXRlUGxhY2Vob2xkZXJOYW1lc1tDb3JlRG9tYWluXSkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0
ZVBsYWNlaG9sZGVyTmFtZXNbQXRrRG9tYWluXTsKIAotICAgIGlmIChhdHRyaWJ1dGVTdHJpbmcg
PT0gIkFYU29ydERpcmVjdGlvbiIpCi0gICAgICAgIHJldHVybiAic29ydCI7CisgICAgaWYgKGF0
dHJpYnV0ZVN0cmluZyA9PSBhdHRyaWJ1dGVTb3J0TmFtZXNbQ29yZURvbWFpbl0pCisgICAgICAg
IHJldHVybiBhdHRyaWJ1dGVTb3J0TmFtZXNbQXRrRG9tYWluXTsKIAotICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICByZXR1cm4gYXR0cmlidXRlU3RyaW5nOwogfQogCi1zdGF0aWMgU3RyaW5nIGdl
dEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBjb25zdCBjaGFy
KiBpZCkKK1N0cmluZyBhdGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0ZVZhbHVlKEF0a0F0
dHJpYnV0ZVR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
IHsKLSAgICBjb25zdCBjaGFyKiBhdHRyaWJ1dGVWYWx1ZSA9IDA7Ci0gICAgQXRrQXR0cmlidXRl
U2V0KiBhdHRyaWJ1dGVTZXQgPSBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKGFjY2Vzc2libGUp
OworICAgIGlmICh0eXBlID09IE9iamVjdEF0dHJpYnV0ZVR5cGUpIHsKKyAgICAgICAgLy8gV2Ug
bmVlZCB0byB0cmFuc2xhdGUgQVRLIHZhbHVlcyBleHBvc2VkIGZvciAnYXJpYS1zb3J0JyAoZS5n
LiAnYXNjZW5kaW5nJykKKyAgICAgICAgLy8gaW50byB0aG9zZSBleHBlY3RlZCBieSB0aGUgbGF5
b3V0IHRlc3RzIChlLmcuICdBWEFzY2VuZGluZ1NvcnREaXJlY3Rpb24nKS4KKyAgICAgICAgaWYg
KGlkID09IGF0dHJpYnV0ZVNvcnROYW1lc1tBdGtEb21haW5dICYmICF2YWx1ZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBhdHRyaWJ1dGVTb3J0QXNjZW5kaW5nVmFsdWVz
W0F0a0RvbWFpbl0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVNvcnRBc2NlbmRp
bmdWYWx1ZXNbQ29yZURvbWFpbl07CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gYXR0cmlidXRl
U29ydERlc2NlbmRpbmdWYWx1ZXNbQXRrRG9tYWluXSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
YXR0cmlidXRlU29ydERlc2NlbmRpbmdWYWx1ZXNbQ29yZURvbWFpbl07CisKKyAgICAgICAgICAg
IHJldHVybiBhdHRyaWJ1dGVTb3J0VW5rbm93blZhbHVlc1tDb3JlRG9tYWluXTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAodHlwZSA9PSBUZXh0QXR0cmlidXRlVHlwZSkgeworICAgICAgICAv
LyBJbiBjYXNlIG9mICdhcmlhLWludmFsaWQnIHdoZW4gdGhlIGF0dHJpYnV0ZSBlbXB0eSBvciBo
YXMgImZhbHNlIiBmb3IgQVRLCisgICAgICAgIC8vIGl0IHNob3VsZCBub3QgYmUgbWFwcGVkIGF0
IGFsbCwgYnV0IGxheW91dCB0ZXN0cyB3aWxsIGV4cGVjdCAnZmFsc2UnLgorICAgICAgICBpZiAo
aWQgPT0gYXR0cmlidXRlSW52YWxpZE5hbWVzW0F0a0RvbWFpbl0gJiYgdmFsdWUuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmV0dXJuICJmYWxzZSI7CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVl
OworfQorCitBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldChBdGtPYmplY3QqIGFjY2Vz
c2libGUsIEF0a0F0dHJpYnV0ZVR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBPYmplY3RB
dHRyaWJ1dGVUeXBlKQorICAgICAgICByZXR1cm4gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhh
Y2Nlc3NpYmxlKTsKKworICAgIGlmICh0eXBlID09IFRleHRBdHRyaWJ1dGVUeXBlKSB7CisgICAg
ICAgIGlmICghQVRLX0lTX1RFWFQoYWNjZXNzaWJsZSkpCisgICAgICAgICAgICByZXR1cm4gMDsK
KworICAgICAgICByZXR1cm4gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhBVEtfVEVY
VChhY2Nlc3NpYmxlKSk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK1N0cmluZyBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEF0a09iamVj
dCogYWNjZXNzaWJsZSwgQXRrQXR0cmlidXRlVHlwZSB0eXBlLCBTdHJpbmcgaWQpCit7CisgICAg
QXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSBnZXRBdHRyaWJ1dGVTZXQoYWNjZXNzaWJs
ZSwgdHlwZSk7CisgICAgaWYgKCFhdHRyaWJ1dGVTZXQpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKworICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZTsKICAgICBmb3IgKEF0a0F0dHJpYnV0ZVNl
dCogYXR0cmlidXRlcyA9IGF0dHJpYnV0ZVNldDsgYXR0cmlidXRlczsgYXR0cmlidXRlcyA9IGF0
dHJpYnV0ZXMtPm5leHQpIHsKICAgICAgICAgQXRrQXR0cmlidXRlKiBhdGtBdHRyaWJ1dGUgPSBz
dGF0aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPihhdHRyaWJ1dGVzLT5kYXRhKTsKLSAgICAgICAgaWYg
KCFzdHJjbXAoYXRrQXR0cmlidXRlLT5uYW1lLCBpZCkpIHsKLSAgICAgICAgICAgIGF0dHJpYnV0
ZVZhbHVlID0gYXRrQXR0cmlidXRlLT52YWx1ZTsKKyAgICAgICAgaWYgKGlkID09IGF0a0F0dHJp
YnV0ZS0+bmFtZSkgeworICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBTdHJpbmc6OmZyb21V
VEY4KGF0a0F0dHJpYnV0ZS0+dmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9Ci0KLSAgICBTdHJpbmcgYXRrQXR0cmlidXRlVmFsdWUgPSBTdHJpbmc6OmZyb21VVEY4
KGF0dHJpYnV0ZVZhbHVlKTsKICAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKGF0dHJpYnV0ZVNl
dCk7CiAKLSAgICByZXR1cm4gYXRrQXR0cmlidXRlVmFsdWU7CisgICAgcmV0dXJuIGF0a0F0dHJp
YnV0ZVZhbHVlVG9Db3JlQXR0cmlidXRlVmFsdWUodHlwZSwgaWQsIGF0dHJpYnV0ZVZhbHVlKTsK
IH0KIAotc3RhdGljIFN0cmluZyBnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhBdGtPYmplY3Qq
IGFjY2Vzc2libGUpCitTdHJpbmcgZ2V0QXRrQXR0cmlidXRlU2V0QXNTdHJpbmcoQXRrT2JqZWN0
KiBhY2Nlc3NpYmxlLCBBdGtBdHRyaWJ1dGVUeXBlIHR5cGUpCiB7Ci0gICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOworICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gZ2V0QXR0cmli
dXRlU2V0KGFjY2Vzc2libGUsIHR5cGUpOworICAgIGlmICghYXR0cmlidXRlU2V0KQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCA9
IGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXMoYWNjZXNzaWJsZSk7CisgICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOwogICAgIGZvciAoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVzID0gYXR0cmli
dXRlU2V0OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy0+bmV4dCkgewogICAg
ICAgICBBdGtBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+
KGF0dHJpYnV0ZXMtPmRhdGEpOwogICAgICAgICBHT3duUHRyPGdjaGFyPiBhdHRyaWJ1dGVEYXRh
KGdfc3RyY29uY2F0KGF0dHJpYnV0ZS0+bmFtZSwgIjoiLCBhdHRyaWJ1dGUtPnZhbHVlLCBOVUxM
KSk7CkBAIC05NSw3ICsxNjQsNyBAQCBzdGF0aWMgU3RyaW5nIGdldEF0a0F0dHJpYnV0ZVNldEFz
U3RyaW5nKEF0a09iamVjdCogYWNjZXNzaWJsZSkKICAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOwogfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIHJvbGVUb1N0cmluZyhBdGtSb2xl
IHJvbGUpCitpbmxpbmUgY29uc3QgY2hhciogcm9sZVRvU3RyaW5nKEF0a1JvbGUgcm9sZSkKIHsK
ICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICBjYXNlIEFUS19ST0xFX0FMRVJUOgpAQCAtMjA5LDcg
KzI3OCw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogcm9sZVRvU3RyaW5nKEF0a1JvbGUg
cm9sZSkKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJz
Rm9yUmVzdWx0cyhnY2hhciogc3RyKQoraW5saW5lIGdjaGFyKiByZXBsYWNlQ2hhcmFjdGVyc0Zv
clJlc3VsdHMoZ2NoYXIqIHN0cikKIHsKICAgICBTdHJpbmcgdVN0cmluZyA9IFN0cmluZzo6ZnJv
bVVURjgoc3RyKTsKIApAQCAtMjI1LDcgKzI5NCw3IEBAIHN0YXRpYyBpbmxpbmUgZ2NoYXIqIHJl
cGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyhnY2hhciogc3RyKQogICAgIHJldHVybiBnX3N0cmR1
cCh1U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwogfQogCi1zdGF0aWMgYm9vbCBjaGVja0VsZW1lbnRT
dGF0ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBBdGtTdGF0ZVR5cGUgc3RhdGVUeXBlKQor
Ym9vbCBjaGVja0VsZW1lbnRTdGF0ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBBdGtTdGF0
ZVR5cGUgc3RhdGVUeXBlKQogewogICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVtZW50KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjM0LDcgKzMwMyw3IEBAIHN0YXRpYyBib29sIGNoZWNr
RWxlbWVudFN0YXRlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0
ZVR5cGUpCiAgICAgcmV0dXJuIGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQu
Z2V0KCksIHN0YXRlVHlwZSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVu
dChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQorU3RyaW5nIGF0dHJpYnV0ZXNPZkVs
ZW1lbnQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CiAKQEAgLTI4MCwxMSArMzQ5LDczIEBAIHN0YXRpYyBTdHJpbmcgYXR0cmli
dXRlc09mRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQogCiAgICAgLy8g
V2UgYXBwZW5kIHRoZSBBVEsgc3BlY2lmaWMgYXR0cmlidXRlcyBhcyBhIHNpbmdsZSBsaW5lIGF0
IHRoZSBlbmQuCiAgICAgYnVpbGRlci5hcHBlbmQoIkFYUGxhdGZvcm1BdHRyaWJ1dGVzOiAiKTsK
LSAgICBidWlsZGVyLmFwcGVuZChnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhlbGVtZW50LT5w
bGF0Zm9ybVVJRWxlbWVudCgpKSk7CisgICAgYnVpbGRlci5hcHBlbmQoZ2V0QXRrQXR0cmlidXRl
U2V0QXNTdHJpbmcoZWxlbWVudC0+cGxhdGZvcm1VSUVsZW1lbnQoKSwgT2JqZWN0QXR0cmlidXRl
VHlwZSkpOwogCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAorfSAvLyBuYW1l
c3BhY2UKKworSlNTdHJpbmdSZWYgaW5kZXhSYW5nZUluVGFibGUoUGxhdGZvcm1VSUVsZW1lbnQg
ZWxlbWVudCwgYm9vbCBpc1Jvd1JhbmdlKQoreworICAgIEdPd25QdHI8Z2NoYXI+IHJhbmdlU3Ry
aW5nKGdfc3RyZHVwKCJ7MCwgMH0iKSk7CisKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QoZWxlbWVu
dCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0
cmluZy5nZXQoKSk7CisKKyAgICBBdGtPYmplY3QqIGF4VGFibGUgPSBhdGtfb2JqZWN0X2dldF9w
YXJlbnQoQVRLX09CSkVDVChlbGVtZW50KSk7CisgICAgaWYgKCFheFRhYmxlIHx8ICFBVEtfSVNf
VEFCTEUoYXhUYWJsZSkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7CisKKyAgICAvLyBMb29rIGZvciB0aGUgY2VsbCBpbiB0
aGUgdGFibGUuCisgICAgZ2ludCBpbmRleEluUGFyZW50ID0gYXRrX29iamVjdF9nZXRfaW5kZXhf
aW5fcGFyZW50KEFUS19PQkpFQ1QoZWxlbWVudCkpOworICAgIGlmIChpbmRleEluUGFyZW50ID09
IC0xKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VT
dHJpbmcuZ2V0KCkpOworCisgICAgaW50IHJvdyA9IC0xOworICAgIGludCBjb2x1bW4gPSAtMTsK
KyAgICByb3cgPSBhdGtfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBVEtfVEFCTEUoYXhUYWJsZSks
IGluZGV4SW5QYXJlbnQpOworICAgIGNvbHVtbiA9IGF0a190YWJsZV9nZXRfY29sdW1uX2F0X2lu
ZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7CisKKyAgICAvLyBHZXQgdGhl
IGFjdHVhbCB2YWx1ZXMsIGlmIHJvdyBhbmQgY29sdW1ucyBhcmUgdmFsaWQgdmFsdWVzLgorICAg
IGlmIChyb3cgIT0gLTEgJiYgY29sdW1uICE9IC0xKSB7CisgICAgICAgIGludCBiYXNlID0gMDsK
KyAgICAgICAgaW50IGxlbmd0aCA9IDA7CisgICAgICAgIGlmIChpc1Jvd1JhbmdlKSB7CisgICAg
ICAgICAgICBiYXNlID0gcm93OworICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9y
b3dfZXh0ZW50X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgYmFzZSA9IGNvbHVtbjsKKyAgICAgICAgICAgIGxlbmd0aCA9
IGF0a190YWJsZV9nZXRfY29sdW1uX2V4dGVudF9hdChBVEtfVEFCTEUoYXhUYWJsZSksIHJvdywg
Y29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICByYW5nZVN0cmluZy5zZXQoZ19zdHJkdXBfcHJp
bnRmKCJ7JWQsICVkfSIsIGJhc2UsIGxlbmd0aCkpOworICAgIH0KKworICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Cit9CisKK3ZvaWQg
YWx0ZXJDdXJyZW50VmFsdWUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikK
K3sKKyAgICBpZiAoIUFUS19JU19WQUxVRShlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICBhdGtfdmFsdWVfZ2V0
X2N1cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKGVsZW1lbnQpLCAmY3VycmVudFZhbHVlKTsKKworICAg
IEdWYWx1ZSBpbmNyZW1lbnQgPSBHX1ZBTFVFX0lOSVQ7CisgICAgYXRrX3ZhbHVlX2dldF9taW5p
bXVtX2luY3JlbWVudChBVEtfVkFMVUUoZWxlbWVudCksICZpbmNyZW1lbnQpOworCisgICAgR1Zh
bHVlIG5ld1ZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGdfdmFsdWVfaW5pdCgmbmV3VmFsdWUs
IEdfVFlQRV9GTE9BVCk7CisKKyAgICBnX3ZhbHVlX3NldF9mbG9hdCgmbmV3VmFsdWUsIGdfdmFs
dWVfZ2V0X2Zsb2F0KCZjdXJyZW50VmFsdWUpICsgZmFjdG9yICogZ192YWx1ZV9nZXRfZmxvYXQo
JmluY3JlbWVudCkpOworICAgIGF0a192YWx1ZV9zZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUo
ZWxlbWVudCksICZuZXdWYWx1ZSk7CisKKyAgICBnX3ZhbHVlX3Vuc2V0KCZuZXdWYWx1ZSk7Cisg
ICAgZ192YWx1ZV91bnNldCgmaW5jcmVtZW50KTsKKyAgICBnX3ZhbHVlX3Vuc2V0KCZjdXJyZW50
VmFsdWUpOworfQorCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkK
IHsKQEAgLTY0Myw3ICs3NzQsNyBAQCBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50
VmFsdWUoKSBjb25zdAogICAgIC8vIGFuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQsIHNvIHdlIGNh
biByZXVzZSBzb21lIHRlc3RzIHRvIGNoZWNrIHRoZSBsZXZlbAogICAgIC8vIGJvdGggZm9yIEhU
TUwgaGVhZGluZ3MgYW5kIG9iamVjdHMgd2l0aCB0aGUgYXJpYS1sZXZlbCBhdHRyaWJ1dGUuCiAg
ICAgaWYgKGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKSA9PSBBVEtf
Uk9MRV9IRUFESU5HKSB7Ci0gICAgICAgIFN0cmluZyBoZWFkaW5nTGV2ZWwgPSBnZXRBdHRyaWJ1
dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgImxldmVsIik7CisgICAgICAg
IFN0cmluZyBoZWFkaW5nTGV2ZWwgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpF
Q1QobV9lbGVtZW50KSwgT2JqZWN0QXR0cmlidXRlVHlwZSwgImxldmVsIik7CiAgICAgICAgIGJv
b2wgb2s7CiAgICAgICAgIGRvdWJsZSBoZWFkaW5nTGV2ZWxWYWx1ZSA9IGhlYWRpbmdMZXZlbC50
b0RvdWJsZSgmb2spOwogICAgICAgICBpZiAob2spCkBAIC04MTQsNDQgKzk0NSw2IEBAIGludCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRleEluVGFibGUoKQogICAgIHJldHVybiAwOwogfQog
Ci1zdGF0aWMgSlNTdHJpbmdSZWYgaW5kZXhSYW5nZUluVGFibGUoUGxhdGZvcm1VSUVsZW1lbnQg
ZWxlbWVudCwgYm9vbCBpc1Jvd1JhbmdlKQotewotICAgIEdPd25QdHI8Z2NoYXI+IHJhbmdlU3Ry
aW5nKGdfc3RyZHVwKCJ7MCwgMH0iKSk7Ci0KLSAgICBpZiAoIUFUS19JU19PQkpFQ1QoZWxlbWVu
dCkpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0
cmluZy5nZXQoKSk7Ci0KLSAgICBBdGtPYmplY3QqIGF4VGFibGUgPSBhdGtfb2JqZWN0X2dldF9w
YXJlbnQoQVRLX09CSkVDVChlbGVtZW50KSk7Ci0gICAgaWYgKCFheFRhYmxlIHx8ICFBVEtfSVNf
VEFCTEUoYXhUYWJsZSkpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci0KLSAgICAvLyBMb29rIGZvciB0aGUgY2VsbCBpbiB0
aGUgdGFibGUuCi0gICAgZ2ludCBpbmRleEluUGFyZW50ID0gYXRrX29iamVjdF9nZXRfaW5kZXhf
aW5fcGFyZW50KEFUS19PQkpFQ1QoZWxlbWVudCkpOwotICAgIGlmIChpbmRleEluUGFyZW50ID09
IC0xKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VT
dHJpbmcuZ2V0KCkpOwotCi0gICAgaW50IHJvdyA9IC0xOwotICAgIGludCBjb2x1bW4gPSAtMTsK
LSAgICByb3cgPSBhdGtfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBVEtfVEFCTEUoYXhUYWJsZSks
IGluZGV4SW5QYXJlbnQpOwotICAgIGNvbHVtbiA9IGF0a190YWJsZV9nZXRfY29sdW1uX2F0X2lu
ZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7Ci0KLSAgICAvLyBHZXQgdGhl
IGFjdHVhbCB2YWx1ZXMsIGlmIHJvdyBhbmQgY29sdW1ucyBhcmUgdmFsaWQgdmFsdWVzLgotICAg
IGlmIChyb3cgIT0gLTEgJiYgY29sdW1uICE9IC0xKSB7Ci0gICAgICAgIGludCBiYXNlID0gMDsK
LSAgICAgICAgaW50IGxlbmd0aCA9IDA7Ci0gICAgICAgIGlmIChpc1Jvd1JhbmdlKSB7Ci0gICAg
ICAgICAgICBiYXNlID0gcm93OwotICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9y
b3dfZXh0ZW50X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgYmFzZSA9IGNvbHVtbjsKLSAgICAgICAgICAgIGxlbmd0aCA9
IGF0a190YWJsZV9nZXRfY29sdW1uX2V4dGVudF9hdChBVEtfVEFCTEUoYXhUYWJsZSksIHJvdywg
Y29sdW1uKTsKLSAgICAgICAgfQotICAgICAgICByYW5nZVN0cmluZy5zZXQoZ19zdHJkdXBfcHJp
bnRmKCJ7JWQsICVkfSIsIGJhc2UsIGxlbmd0aCkpOwotICAgIH0KLQotICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci19Ci0KIEpTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UoKQogewogICAgIC8v
IFJhbmdlIGluIHRhYmxlIGZvciByb3dzLgpAQCAtOTI4LDI3ICsxMDIxLDEzIEBAIEpTU3RyaW5n
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5n
UmVmIGF0dHJpYnV0ZSkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3Rl
cnMoMCwgMCk7CiAKICAgICBTdHJpbmcgYXRrQXR0cmlidXRlTmFtZSA9IGNvcmVBdHRyaWJ1dGVU
b0F0a0F0dHJpYnV0ZShhdHRyaWJ1dGUpOwotICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Ci0KLSAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklk
KEFUS19PQkpFQ1QobV9lbGVtZW50KSwgYXRrQXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKTsK
IAotICAgIC8vIEluIGNhc2Ugb2YgJ2FyaWEtaW52YWxpZCcgd2hlbiB0aGUgYXR0cmlidXRlIGVt
cHR5IG9yIGhhcyAiZmFsc2UiIGZvciBBVEsKLSAgICAvLyBhY2NvcmRpbmcgdG8gaHR0cDovL3d3
dy53My5vcmcvV0FJL1BGL2FyaWEtaW1wbGVtZW50YXRpb24vI21hcHBpbmcgYXR0cmlidXRlCi0g
ICAgLy8gaXMgbm90IG1hcHBlZCBidXQgbGF5b3V0IHRlc3RzIHdpbGwgZXhwZWN0ICdmYWxzZScu
Ci0gICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSAmJiBhdGtBdHRyaWJ1dGVOYW1lID09
ICJhcmlhLWludmFsaWQiKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImZhbHNlIik7CisgICAgLy8gVHJ5IG9iamVjdCBhdHRyaWJ1dGVzIGZpcnN0LgorICAg
IFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09C
SkVDVChtX2VsZW1lbnQpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCBhdGtBdHRyaWJ1dGVOYW1lKTsK
IAotICAgIC8vIFdlIG5lZWQgdG8gdHJhbnNsYXRlIEFUSyB2YWx1ZXMgZXhwb3NlZCBmb3IgJ2Fy
aWEtc29ydCcgKGUuZy4gJ2FzY2VuZGluZycpCi0gICAgLy8gaW50byB0aG9zZSBleHBlY3RlZCBi
eSB0aGUgbGF5b3V0IHRlc3RzIChlLmcuICdBWEFzY2VuZGluZ1NvcnREaXJlY3Rpb24nKS4KLSAg
ICBpZiAoYXRrQXR0cmlidXRlTmFtZSA9PSAic29ydCIpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0
ZVZhbHVlID09ICJhc2NlbmRpbmciKQotICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJBWEFzY2VuZGluZ1NvcnREaXJlY3Rpb24iKTsKLSAgICAgICAgaWYg
KGF0dHJpYnV0ZVZhbHVlID09ICJkZXNjZW5kaW5nIikKLSAgICAgICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQVhEZXNjZW5kaW5nU29ydERpcmVjdGlvbiIpOwot
Ci0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQVhVbmtub3du
U29ydERpcmVjdGlvbiIpOwotICAgIH0KKyAgICAvLyBUcnkgdGV4dCBhdHRyaWJ1dGVzIGlmIHRo
ZSByZXF1ZXN0ZWQgb25lIHdhcyBub3QgZm91bmQgYW5kIHdlIGhhdmUgYW4gQXRrVGV4dCBvYmpl
Y3QuCisgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSAmJiBBVEtfSVNfVEVYVChtX2Vs
ZW1lbnQpKQorICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9y
SWQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBUZXh0QXR0cmlidXRlVHlwZSwgYXRrQXR0cmlidXRl
TmFtZSk7CiAKICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXR0cmli
dXRlVmFsdWUudXRmOCgpLmRhdGEoKSk7CiB9CkBAIC05ODAsMzAgKzEwNTksMTIgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChKU1N0cmluZ1JlZiBh
dHRyaWJ1dGUpCiAgICAgaWYgKGF0a0F0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVT
ZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgYXRrQXR0cmlidXRlTmFtZS51dGY4
KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gIWF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKTsKLX0KKyAg
ICAvLyBGb3Igbm93LCBhbiBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkIHdoZXRoZXIgaXQncyBleHBv
c2VkIGFzIGEgb2JqZWN0IG9yIGEgdGV4dCBhdHRyaWJ1dGUuCisgICAgU3RyaW5nIGF0dHJpYnV0
ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudCks
IE9iamVjdEF0dHJpYnV0ZVR5cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOworICAgIGlmIChhdHRyaWJ1
dGVWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRl
U2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIFRleHRBdHRyaWJ1dGVUeXBlLCBh
dGtBdHRyaWJ1dGVOYW1lKTsKIAotc3RhdGljIHZvaWQgYWx0ZXJDdXJyZW50VmFsdWUoUGxhdGZv
cm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKLXsKLSAgICBpZiAoIUFUS19JU19WQUxV
RShlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1ZhbHVlIGN1cnJlbnRWYWx1ZSA9
IEdfVkFMVUVfSU5JVDsKLSAgICBhdGtfdmFsdWVfZ2V0X2N1cnJlbnRfdmFsdWUoQVRLX1ZBTFVF
KGVsZW1lbnQpLCAmY3VycmVudFZhbHVlKTsKLQotICAgIEdWYWx1ZSBpbmNyZW1lbnQgPSBHX1ZB
TFVFX0lOSVQ7Ci0gICAgYXRrX3ZhbHVlX2dldF9taW5pbXVtX2luY3JlbWVudChBVEtfVkFMVUUo
ZWxlbWVudCksICZpbmNyZW1lbnQpOwotCi0gICAgR1ZhbHVlIG5ld1ZhbHVlID0gR19WQUxVRV9J
TklUOwotICAgIGdfdmFsdWVfaW5pdCgmbmV3VmFsdWUsIEdfVFlQRV9GTE9BVCk7Ci0KLSAgICBn
X3ZhbHVlX3NldF9mbG9hdCgmbmV3VmFsdWUsIGdfdmFsdWVfZ2V0X2Zsb2F0KCZjdXJyZW50VmFs
dWUpICsgZmFjdG9yICogZ192YWx1ZV9nZXRfZmxvYXQoJmluY3JlbWVudCkpOwotICAgIGF0a192
YWx1ZV9zZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUoZWxlbWVudCksICZuZXdWYWx1ZSk7Ci0K
LSAgICBnX3ZhbHVlX3Vuc2V0KCZuZXdWYWx1ZSk7Ci0gICAgZ192YWx1ZV91bnNldCgmaW5jcmVt
ZW50KTsKLSAgICBnX3ZhbHVlX3Vuc2V0KCZjdXJyZW50VmFsdWUpOworICAgIHJldHVybiAhYXR0
cmlidXRlVmFsdWUuaXNFbXB0eSgpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmluY3JlbWVudCgpCkBAIC0xMTc2LDcgKzEyMzcsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Omhhc1BvcHVwKCkgY29uc3QKICAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNl
KGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCAiaGFzcG9w
dXAiKSwgInRydWUiKTsKKyAgICBTdHJpbmcgaGFzUG9wdXBWYWx1ZSA9IGdldEF0dHJpYnV0ZVNl
dFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCAi
aGFzcG9wdXAiKTsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoaGFzUG9wdXBWYWx1ZSwg
InRydWUiKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAppbmRleCA3MTAxMzIw
Li5lZjRjOGFjIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNw
cApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsNDggKzQ2LDExNiBA
QAogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIFN0cmluZyBjb3JlQXR0cmlidXRlVG9BdGtB
dHRyaWJ1dGUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQorbmFtZXNwYWNlIHsKKworLy8gVXNlZCB0
byBkZXRlcm1pbmUgd2hldGhlciB0byBjaGVjayBhbiBvYmplY3QgYXR0cmlidXRlIGZyb20gaW5z
dGFuY2VzCisvLyBvZiBBdGtPYmplY3QsIG9yIGEgdGV4dCBhdHRyaWJ1dGUgZnJvbSBpbXBsZW1l
bnRhdGlvbnMgb2YgQXRrVGV4dC4KK2VudW0gQXRrQXR0cmlidXRlVHlwZSB7CisgICAgT2JqZWN0
QXR0cmlidXRlVHlwZSwKKyAgICBUZXh0QXR0cmlidXRlVHlwZQorfTsKKworLy8gVXNlZCB0byBh
ZGRyZXNzIHRoZSByaWdodCB2YWx1ZSBpbiB0aGUgY29uc3QgYXJyYXlzIGRlZmluZWQgdG8KKy8v
IHRyYW5zbGF0ZSBiZXR3ZWVuIEF0ayBuYW1lcyBhbmQgdmFsdWVzIGV4cGVjdGVkIGluIHRoZSBs
YXlvdXQgdGVzdHMuCitlbnVtIEF0dHJpYnV0ZURvbWFpbiB7CisgICAgQ29yZURvbWFpbiA9IDAs
CisgICAgQXRrRG9tYWluCit9OworCisvLyBBdHRyaWJ1dGUgbmFtZXMuCitjb25zdCBTdHJpbmcg
YXR0cmlidXRlSW52YWxpZE5hbWVzW10gPSB7ICJBWEludmFsaWQiLCAiaW52YWxpZCIgfTsKK2Nv
bnN0IFN0cmluZyBhdHRyaWJ1dGVQbGFjZWhvbGRlck5hbWVzW10gPSB7ICJBWFBsYWNlaG9sZGVy
VmFsdWUiLCAicGxhY2Vob2xkZXItdGV4dCIgfTsKK2NvbnN0IFN0cmluZyBhdHRyaWJ1dGVTb3J0
TmFtZXNbXSA9IHsgIkFYU29ydERpcmVjdGlvbiIsICJzb3J0IiB9OworCisvLyBBdHRyaWJ1dGUg
dmFsdWVzLgorY29uc3QgU3RyaW5nIGF0dHJpYnV0ZVNvcnRBc2NlbmRpbmdWYWx1ZXNbXSA9IHsg
IkFYQXNjZW5kaW5nU29ydERpcmVjdGlvbiIsICJhc2NlbmRpbmciIH07Citjb25zdCBTdHJpbmcg
YXR0cmlidXRlU29ydERlc2NlbmRpbmdWYWx1ZXNbXSA9IHsgIkFYRGVzY2VuZGluZ1NvcnREaXJl
Y3Rpb24iLCAiZGVzY2VuZGluZyIgfTsKK2NvbnN0IFN0cmluZyBhdHRyaWJ1dGVTb3J0VW5rbm93
blZhbHVlc1tdID0geyAiQVhVbmtub3duU29ydERpcmVjdGlvbiIsICJ1bmtub3duIiB9OyAvLyBO
b3QgZXhwb3NlZCBpbiBBVEsuCisKK1N0cmluZyBjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUo
SlNTdHJpbmdSZWYgYXR0cmlidXRlKQogewogICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNTdHJp
bmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGF0dHJpYnV0ZSk7CiAgICAgR093blB0cjxnY2hh
cj4gYnVmZmVyKHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2MoYnVmZmVyU2l6ZSkpKTsKICAg
ICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGF0dHJpYnV0ZSwgYnVmZmVyLmdldCgpLCBidWZmZXJT
aXplKTsKIAogICAgIFN0cmluZyBhdHRyaWJ1dGVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGJ1
ZmZlci5nZXQoKSk7Ci0gICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhJbnZhbGlkIikKLSAg
ICAgICAgcmV0dXJuICJhcmlhLWludmFsaWQiOworICAgIGlmIChhdHRyaWJ1dGVTdHJpbmcgPT0g
YXR0cmlidXRlSW52YWxpZE5hbWVzW0NvcmVEb21haW5dKQorICAgICAgICByZXR1cm4gYXR0cmli
dXRlSW52YWxpZE5hbWVzW0F0a0RvbWFpbl07CisKKyAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09
IGF0dHJpYnV0ZVBsYWNlaG9sZGVyTmFtZXNbQ29yZURvbWFpbl0pCisgICAgICAgIHJldHVybiBh
dHRyaWJ1dGVQbGFjZWhvbGRlck5hbWVzW0F0a0RvbWFpbl07CisKKyAgICBpZiAoYXR0cmlidXRl
U3RyaW5nID09IGF0dHJpYnV0ZVNvcnROYW1lc1tDb3JlRG9tYWluXSkKKyAgICAgICAgcmV0dXJu
IGF0dHJpYnV0ZVNvcnROYW1lc1tBdGtEb21haW5dOworCisgICAgcmV0dXJuIGF0dHJpYnV0ZVN0
cmluZzsKK30KKworU3RyaW5nIGF0a0F0dHJpYnV0ZVZhbHVlVG9Db3JlQXR0cmlidXRlVmFsdWUo
QXRrQXR0cmlidXRlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIGlmICh0eXBlID09IE9iamVjdEF0dHJpYnV0ZVR5cGUpIHsKKyAgICAgICAg
Ly8gV2UgbmVlZCB0byB0cmFuc2xhdGUgQVRLIHZhbHVlcyBleHBvc2VkIGZvciAnYXJpYS1zb3J0
JyAoZS5nLiAnYXNjZW5kaW5nJykKKyAgICAgICAgLy8gaW50byB0aG9zZSBleHBlY3RlZCBieSB0
aGUgbGF5b3V0IHRlc3RzIChlLmcuICdBWEFzY2VuZGluZ1NvcnREaXJlY3Rpb24nKS4KKyAgICAg
ICAgaWYgKGlkID09IGF0dHJpYnV0ZVNvcnROYW1lc1tBdGtEb21haW5dICYmICF2YWx1ZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBhdHRyaWJ1dGVTb3J0QXNjZW5kaW5n
VmFsdWVzW0F0a0RvbWFpbl0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVNvcnRB
c2NlbmRpbmdWYWx1ZXNbQ29yZURvbWFpbl07CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gYXR0
cmlidXRlU29ydERlc2NlbmRpbmdWYWx1ZXNbQXRrRG9tYWluXSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYXR0cmlidXRlU29ydERlc2NlbmRpbmdWYWx1ZXNbQ29yZURvbWFpbl07CisKKyAgICAg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGVTb3J0VW5rbm93blZhbHVlc1tDb3JlRG9tYWluXTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSBpZiAodHlwZSA9PSBUZXh0QXR0cmlidXRlVHlwZSkgeworICAg
ICAgICAvLyBJbiBjYXNlIG9mICdhcmlhLWludmFsaWQnIHdoZW4gdGhlIGF0dHJpYnV0ZSBlbXB0
eSBvciBoYXMgImZhbHNlIiBmb3IgQVRLCisgICAgICAgIC8vIGl0IHNob3VsZCBub3QgYmUgbWFw
cGVkIGF0IGFsbCwgYnV0IGxheW91dCB0ZXN0cyB3aWxsIGV4cGVjdCAnZmFsc2UnLgorICAgICAg
ICBpZiAoaWQgPT0gYXR0cmlidXRlSW52YWxpZE5hbWVzW0F0a0RvbWFpbl0gJiYgdmFsdWUuaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuICJmYWxzZSI7CisgICAgfQorCisgICAgcmV0dXJu
IHZhbHVlOworfQogCi0gICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhQbGFjZWhvbGRlclZh
bHVlIikKLSAgICAgICAgcmV0dXJuICJwbGFjZWhvbGRlci10ZXh0IjsKLSAgICAKLSAgICBpZiAo
YXR0cmlidXRlU3RyaW5nID09ICJBWFNvcnREaXJlY3Rpb24iKQotICAgICAgICByZXR1cm4gInNv
cnQiOworQXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXQoQXRrT2JqZWN0KiBhY2Nlc3Np
YmxlLCBBdGtBdHRyaWJ1dGVUeXBlIHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gT2JqZWN0QXR0
cmlidXRlVHlwZSkKKyAgICAgICAgcmV0dXJuIGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXMoYWNj
ZXNzaWJsZSk7CisKKyAgICBpZiAodHlwZSA9PSBUZXh0QXR0cmlidXRlVHlwZSkgeworICAgICAg
ICBpZiAoIUFUS19JU19URVhUKGFjY2Vzc2libGUpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisK
KyAgICAgICAgcmV0dXJuIGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoQVRLX1RFWFQo
YWNjZXNzaWJsZSkpOworICAgIH0KIAotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRBdHRy
aWJ1dGVTZXRWYWx1ZUZvcklkKEF0a09iamVjdCogYWNjZXNzaWJsZSwgY29uc3QgY2hhciogaWQp
CitTdHJpbmcgZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBdGtPYmplY3QqIGFjY2Vzc2libGUs
IEF0a0F0dHJpYnV0ZVR5cGUgdHlwZSwgU3RyaW5nIGlkKQogewotICAgIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZVZhbHVlID0gMDsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCA9IGF0
a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXMoYWNjZXNzaWJsZSk7CisgICAgQXRrQXR0cmlidXRlU2V0
KiBhdHRyaWJ1dGVTZXQgPSBnZXRBdHRyaWJ1dGVTZXQoYWNjZXNzaWJsZSwgdHlwZSk7CisgICAg
aWYgKCFhdHRyaWJ1dGVTZXQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFN0cmlu
ZyBhdHRyaWJ1dGVWYWx1ZTsKICAgICBmb3IgKEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlcyA9
IGF0dHJpYnV0ZVNldDsgYXR0cmlidXRlczsgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMtPm5leHQp
IHsKICAgICAgICAgQXRrQXR0cmlidXRlKiBhdGtBdHRyaWJ1dGUgPSBzdGF0aWNfY2FzdDxBdGtB
dHRyaWJ1dGUqPihhdHRyaWJ1dGVzLT5kYXRhKTsKLSAgICAgICAgaWYgKCFzdHJjbXAoYXRrQXR0
cmlidXRlLT5uYW1lLCBpZCkpIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gYXRrQXR0
cmlidXRlLT52YWx1ZTsKKyAgICAgICAgaWYgKGlkID09IGF0a0F0dHJpYnV0ZS0+bmFtZSkgewor
ICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBTdHJpbmc6OmZyb21VVEY4KGF0a0F0dHJpYnV0
ZS0+dmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBT
dHJpbmcgYXRrQXR0cmlidXRlVmFsdWUgPSBTdHJpbmc6OmZyb21VVEY4KGF0dHJpYnV0ZVZhbHVl
KTsKICAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKGF0dHJpYnV0ZVNldCk7CiAKLSAgICByZXR1
cm4gYXRrQXR0cmlidXRlVmFsdWU7CisgICAgcmV0dXJuIGF0a0F0dHJpYnV0ZVZhbHVlVG9Db3Jl
QXR0cmlidXRlVmFsdWUodHlwZSwgaWQsIGF0dHJpYnV0ZVZhbHVlKTsKIH0KIAotc3RhdGljIFN0
cmluZyBnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhBdGtPYmplY3QqIGFjY2Vzc2libGUpCitT
dHJpbmcgZ2V0QXRrQXR0cmlidXRlU2V0QXNTdHJpbmcoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBB
dGtBdHRyaWJ1dGVUeXBlIHR5cGUpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gZ2V0QXR0cmlidXRlU2V0KGFjY2Vzc2li
bGUsIHR5cGUpOworICAgIGlmICghYXR0cmlidXRlU2V0KQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCA9IGF0a19vYmplY3RfZ2V0
X2F0dHJpYnV0ZXMoYWNjZXNzaWJsZSk7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAg
IGZvciAoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU2V0OyBhdHRyaWJ1
dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy0+bmV4dCkgewogICAgICAgICBBdGtBdHRyaWJ1
dGUqIGF0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0dHJpYnV0ZXMtPmRh
dGEpOwogICAgICAgICBHT3duUHRyPGdjaGFyPiBhdHRyaWJ1dGVEYXRhKGdfc3RyY29uY2F0KGF0
dHJpYnV0ZS0+bmFtZSwgIjoiLCBhdHRyaWJ1dGUtPnZhbHVlLCBOVUxMKSk7CkBAIC05OSw3ICsx
NjgsNyBAQCBzdGF0aWMgU3RyaW5nIGdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKEF0a09iamVj
dCogYWNjZXNzaWJsZSkKICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1zdGF0
aWMgYm9vbCBjaGVja0VsZW1lbnRTdGF0ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBBdGtT
dGF0ZVR5cGUgc3RhdGVUeXBlKQorYm9vbCBjaGVja0VsZW1lbnRTdGF0ZShQbGF0Zm9ybVVJRWxl
bWVudCBlbGVtZW50LCBBdGtTdGF0ZVR5cGUgc3RhdGVUeXBlKQogewogICAgIGlmICghQVRLX0lT
X09CSkVDVChlbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA4LDcg
KzE3Nyw3IEBAIHN0YXRpYyBib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRmb3JtVUlFbGVtZW50
IGVsZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCiAgICAgcmV0dXJuIGF0a19zdGF0ZV9z
ZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIHN0YXRlVHlwZSk7CiB9CiAKLXN0YXRp
YyBKU1N0cmluZ1JlZiBpbmRleFJhbmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50
LCBib29sIGlzUm93UmFuZ2UpCitKU1N0cmluZ1JlZiBpbmRleFJhbmdlSW5UYWJsZShQbGF0Zm9y
bVVJRWxlbWVudCBlbGVtZW50LCBib29sIGlzUm93UmFuZ2UpCiB7CiAgICAgR093blB0cjxnY2hh
cj4gcmFuZ2VTdHJpbmcoZ19zdHJkdXAoInswLCAwfSIpKTsKIApAQCAtMTQ2LDcgKzIxNSw3IEBA
IHN0YXRpYyBKU1N0cmluZ1JlZiBpbmRleFJhbmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxlbWVudCBl
bGVtZW50LCBib29sIGlzUm93UmFuZ2UpCiAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKIH0KIAotc3RhdGljIHZvaWQgYWx0ZXJDdXJy
ZW50VmFsdWUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKK3ZvaWQgYWx0
ZXJDdXJyZW50VmFsdWUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKIHsK
ICAgICBpZiAoIUFUS19JU19WQUxVRShlbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTY4LDcgKzIzNyw3IEBAIHN0YXRpYyB2b2lkIGFsdGVyQ3VycmVudFZhbHVlKFBsYXRmb3Jt
VUlFbGVtZW50IGVsZW1lbnQsIGludCBmYWN0b3IpCiAgICAgZ192YWx1ZV91bnNldCgmY3VycmVu
dFZhbHVlKTsKIH0KIAotc3RhdGljIGdjaGFyKiByZXBsYWNlQ2hhcmFjdGVyc0ZvclJlc3VsdHMo
Z2NoYXIqIHN0cikKK2djaGFyKiByZXBsYWNlQ2hhcmFjdGVyc0ZvclJlc3VsdHMoZ2NoYXIqIHN0
cikKIHsKICAgICBXVEY6OlN0cmluZyB1U3RyaW5nID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0
cik7CiAKQEAgLTE4NCw3ICsyNTMsNyBAQCBzdGF0aWMgZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJz
Rm9yUmVzdWx0cyhnY2hhciogc3RyKQogICAgIHJldHVybiBnX3N0cmR1cCh1U3RyaW5nLnV0Zjgo
KS5kYXRhKCkpOwogfQogCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHJvbGVUb1N0cmluZyhBdGtSb2xl
IHJvbGUpCitjb25zdCBnY2hhciogcm9sZVRvU3RyaW5nKEF0a1JvbGUgcm9sZSkKIHsKICAgICBz
d2l0Y2ggKHJvbGUpIHsKICAgICBjYXNlIEFUS19ST0xFX0FMRVJUOgpAQCAtMjk4LDcgKzM2Nyw3
IEBAIHN0YXRpYyBjb25zdCBnY2hhciogcm9sZVRvU3RyaW5nKEF0a1JvbGUgcm9sZSkKICAgICB9
CiB9CiAKLXN0YXRpYyBTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50KiBlbGVtZW50KQorU3RyaW5nIGF0dHJpYnV0ZXNPZkVsZW1lbnQoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAKQEAg
LTM0NSwxMSArNDE0LDEzIEBAIHN0YXRpYyBTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQogCiAgICAgLy8gV2UgYXBwZW5kIHRoZSBBVEsg
c3BlY2lmaWMgYXR0cmlidXRlcyBhcyBhIHNpbmdsZSBsaW5lIGF0IHRoZSBlbmQuCiAgICAgYnVp
bGRlci5hcHBlbmQoIkFYUGxhdGZvcm1BdHRyaWJ1dGVzOiAiKTsKLSAgICBidWlsZGVyLmFwcGVu
ZChnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhlbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVudCgp
LmdldCgpKSk7CisgICAgYnVpbGRlci5hcHBlbmQoZ2V0QXRrQXR0cmlidXRlU2V0QXNTdHJpbmco
ZWxlbWVudC0+cGxhdGZvcm1VSUVsZW1lbnQoKS5nZXQoKSwgT2JqZWN0QXR0cmlidXRlVHlwZSkp
OwogCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAorfSAvLyBuYW1lc3BhY2UK
KwogQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0Zm9y
bVVJRWxlbWVudCBlbGVtZW50KQogICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCiB7CkBAIC01NzAs
MjcgKzY0MSwxMyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZQogICAgICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIAogICAgIFN0cmluZyBhdGtBdHRyaWJ1
dGVOYW1lID0gY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKGF0dHJpYnV0ZSk7Ci0gICAgaWYg
KGF0a0F0dHJpYnV0ZU5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCi0gICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0
QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIGF0a0F0
dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgLy8gVHJ5IG9iamVjdCBhdHRyaWJ1dGVz
IGZpcnN0LgorICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVl
Rm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCBh
dGtBdHRyaWJ1dGVOYW1lKTsKIAotICAgIC8vIEluIGNhc2Ugb2YgJ2FyaWEtaW52YWxpZCcgd2hl
biB0aGUgYXR0cmlidXRlIGVtcHR5IG9yIGhhcyAiZmFsc2UiIGZvciBBVEsKLSAgICAvLyBhY2Nv
cmRpbmcgdG8gaHR0cDovL3d3dy53My5vcmcvV0FJL1BGL2FyaWEtaW1wbGVtZW50YXRpb24vI21h
cHBpbmcgYXR0cmlidXRlCi0gICAgLy8gaXMgbm90IG1hcHBlZCBidXQgbGF5b3V0IHRlc3RzIHdp
bGwgZXhwZWN0ICdmYWxzZScuCi0gICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSAmJiBh
dGtBdHRyaWJ1dGVOYW1lID09ICJhcmlhLWludmFsaWQiKQotICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZhbHNlIik7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHRy
YW5zbGF0ZSBBVEsgdmFsdWVzIGV4cG9zZWQgZm9yICdhcmlhLXNvcnQnIChlLmcuICdhc2NlbmRp
bmcnKQotICAgIC8vIGludG8gdGhvc2UgZXhwZWN0ZWQgYnkgdGhlIGxheW91dCB0ZXN0cyAoZS5n
LiAnQVhBc2NlbmRpbmdTb3J0RGlyZWN0aW9uJykuCi0gICAgaWYgKGF0a0F0dHJpYnV0ZU5hbWUg
PT0gInNvcnQiKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAiYXNjZW5kaW5nIikK
LSAgICAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQVhBc2Nl
bmRpbmdTb3J0RGlyZWN0aW9uIik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAiZGVz
Y2VuZGluZyIpCi0gICAgICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkFYRGVzY2VuZGluZ1NvcnREaXJlY3Rpb24iKTsKLQotICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFYVW5rbm93blNvcnREaXJlY3Rpb24iKTsKLSAgICB9
CisgICAgLy8gVHJ5IHRleHQgYXR0cmlidXRlcyBpZiB0aGUgcmVxdWVzdGVkIG9uZSB3YXMgbm90
IGZvdW5kIGFuZCB3ZSBoYXZlIGFuIEF0a1RleHQgb2JqZWN0LgorICAgIGlmIChhdHRyaWJ1dGVW
YWx1ZS5pc0VtcHR5KCkgJiYgQVRLX0lTX1RFWFQobV9lbGVtZW50LmdldCgpKSkKKyAgICAgICAg
YXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9l
bGVtZW50LmdldCgpKSwgVGV4dEF0dHJpYnV0ZVR5cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOwogCiAg
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0dHJpYnV0ZVZhbHVlLnV0
ZjgoKS5kYXRhKCkpOwogfQpAQCAtNjI4LDcgKzY4NSwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKICAg
ICBpZiAoYXRrQXR0cmlidXRlTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQo
QVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpLCBhdGtBdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRh
KCkpOworICAgIC8vIEZvciBub3csIGFuIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQgd2hldGhlciBp
dCdzIGV4cG9zZWQgYXMgYSBvYmplY3Qgb3IgYSB0ZXh0IGF0dHJpYnV0ZS4KKyAgICBTdHJpbmcg
YXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9l
bGVtZW50LmdldCgpKSwgT2JqZWN0QXR0cmlidXRlVHlwZSwgYXRrQXR0cmlidXRlTmFtZSk7Cisg
ICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgYXR0cmlidXRlVmFsdWUg
PSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSwg
VGV4dEF0dHJpYnV0ZVR5cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOworCiAgICAgcmV0dXJuICFhdHRy
aWJ1dGVWYWx1ZS5pc0VtcHR5KCk7CiB9CiAKQEAgLTgwNyw3ICs4NjgsNyBAQCBkb3VibGUgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUoKSBjb25zdAogICAgIC8vIGFuIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQsIHNvIHdlIGNhbiByZXVzZSBzb21lIHRlc3RzIHRvIGNoZWNrIHRoZSBs
ZXZlbAogICAgIC8vIGJvdGggZm9yIEhUTUwgaGVhZGluZ3MgYW5kIG9iamVjdHMgd2l0aCB0aGUg
YXJpYS1sZXZlbCBhdHRyaWJ1dGUuCiAgICAgaWYgKGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09C
SkVDVChtX2VsZW1lbnQuZ2V0KCkpKSA9PSBBVEtfUk9MRV9IRUFESU5HKSB7Ci0gICAgICAgIFN0
cmluZyBoZWFkaW5nTGV2ZWwgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1Qo
bV9lbGVtZW50LmdldCgpKSwgImxldmVsIik7CisgICAgICAgIFN0cmluZyBoZWFkaW5nTGV2ZWwg
PSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSwg
T2JqZWN0QXR0cmlidXRlVHlwZSwgImxldmVsIik7CiAgICAgICAgIGJvb2wgb2s7CiAgICAgICAg
IGRvdWJsZSBoZWFkaW5nTGV2ZWxWYWx1ZSA9IGhlYWRpbmdMZXZlbC50b0RvdWJsZSgmb2spOwog
ICAgICAgICBpZiAob2spCkBAIC0xMjEzLDcgKzEyNzQsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Omhhc1BvcHVwKCkgY29uc3QKICAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVt
ZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGVxdWFsSWdu
b3JpbmdDYXNlKGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQu
Z2V0KCkpLCAiaGFzcG9wdXAiKSwgInRydWUiKTsKKyAgICBTdHJpbmcgaGFzUG9wdXBWYWx1ZSA9
IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpLCBP
YmplY3RBdHRyaWJ1dGVUeXBlLCAiaGFzcG9wdXAiKTsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmlu
Z0Nhc2UoaGFzUG9wdXBWYWx1ZSwgInRydWUiKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0YWtlRm9jdXMoKQotLSAKMS43LjEwLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212986</attachid>
            <date>2013-09-30 06:03:19 -0700</date>
            <delta_ts>2013-10-01 10:18:39 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2013-09-30-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>40512</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAyNWM1OWZkODhkMzE2ZTk2YTYxNjFiYzQ0ZGJmMWYzNzhlZWYzNzFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogTW9uLCAzMCBTZXAgMjAxMyAwOTozNTowMiArMDEwMApTdWJqZWN0OiBb
UEFUQ0hdIDIwMTMtMDktMzAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KCiAgICAgICAgW0FUS10gRXhwb3NlIGFyaWEtaW52YWxpZCBhcyBhIHRleHQgYXR0
cmlidXRlIChub3Qgb2JqZWN0IGF0dHJpYnV0ZSkKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMDE1CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgoKICAgICAgICBFeHBvc2UgdGhlIGFyaWEtaW52YWxpZCBhdHRyaWJ1dGUgY29ycmVj
dGx5IHRocm91Z2ggYSB0ZXh0CiAgICAgICAgYXR0cmlidXRlICh0aHJvdWdoIHRoZSBBdGtUZXh0
IGludGVyZmFjZSkgaW5zdGVhZCBvZiB1c2luZyBhbgogICAgICAgIG9iamVjdCwgYWNjb3JkaW5n
IHRvIHdoYXQgdGhlIFdBSS1BUklBIHNwZWNzIHNheXMuCiAgICAgICAgaHR0cDovL3d3dy53My5v
cmcvVFIvd2FpLWFyaWEtaW1wbGVtZW50YXRpb24vI21hcHBpbmdfc3RhdGUtcHJvcGVydHkKCiAg
ICAgICAgVGhpcyB3aWxsIGJlIHRlc3RlZCBieSBhY2Nlc2liaWxpdHkvYXJpYS1pbnZhbGlkLmh0
bWwsIHdoaWNoIHNob3VsZAogICAgICAgIGtlZXAgcGFzc2luZyBhZnRlciB0aGFua3MgdG8gdGhl
IGNoYW5nZXMgZG9uZSBpbiB0aGUgRFJUIGFuZCBXS1RSLgoKICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcDoKICAgICAgICAoZ2V0QXR0
cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6IEV4cG9zZSBhcmlhLWludmFsaWQgYXMg
YQogICAgICAgIGN1c3RvbSB0ZXh0IGF0dHJpYnV0ZSAnaW52YWxpZCcsIGZvbGxvd2luZyB0aGUg
bGVhZCBvZiBGaXJlZm94LgogICAgICAgIEFsc28gcmVnaXN0ZXIgdGhhdCBjdXN0b20gYXR0cmli
dXRlIGFzIGEgQXRrVGV4dEF0dHJpYnV0ZS4KICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdl
dEF0dHJpYnV0ZXMpOiBSZW1vdmUgZXhwb3N1cmUgb2YgYXJpYS1pbnZhbGlkCiAgICAgICAgYXMg
YW4gb2JqZWN0IGF0dHJpYnV0ZSBmcm9tIGhlcmUuCgoyMDEzLTA5LTMwICBNYXJpbyBTYW5jaGV6
IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CgogICAgICAgIFtBVEtdIEV4cG9zZSBh
cmlhLWludmFsaWQgYXMgYSB0ZXh0IGF0dHJpYnV0ZSAobm90IG9iamVjdCBhdHRyaWJ1dGUpCiAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjAxNQoKICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgQWRhcHRlZCBEUlQgYW5k
IFdLVFIgdG8gY2hlY2sgdGhlIGV4cG9zdXJlIG9mIHRoZSBhcmlhLWludmFsaWQKICAgICAgICBh
dHRyaWJ1dGUgYXMgYSB0ZXh0IGF0dHJpYnV0ZSwgaW5zdGVhZCBvZiBhbiBvYmplY3QgYXR0cmli
dXRlLgoKICAgICAgICBBbHNvLCBkb25lIHNvbWUgcmVmYWN0b3Jpbmcgb2YgdGhlIGNvZGUgdG8g
dHJ5IHRvIGtlZXAgdGhpbmdzCiAgICAgICAgc2ltcGxlciBhbmQgbW9yZSBjb2hlcmVudCwgYnkg
ZGVmaW5pbmcgbmV3IGhlbHBlciBmdW5jdGlvbnMsCiAgICAgICAgc2ltcGxpZnlpbmcgY29kZSwg
bW92aW5nIHN0YXRpYyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBpbnRvCiAgICAgICAgdW5uYW1t
ZWQgbmFtZXNwYWNlcyBhbmQgc28gb24sIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIGxvZ2ljIG90aGVy
CiAgICAgICAgdGhhbiBmb3IgY2hlY2tpbmcgdGhlIHRleHQgYXR0cmlidXRlIGZvciBhcmlhLWlu
dmFsaWQuCgogICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRBdGsuY3BwOgogICAgICAgIChjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUpOiBDb25zaWRl
ciAnaW52YWxpZCcgYXMgdGhlIG5hbWUgb2YKICAgICAgICB0aGUgYXR0cmlidXRlIGV4cG9zZWQg
YnkgdGhlIEFUSyB3cmFwcGVyLCBub3QgJ2FyaWEtaW52YWxpZCcuCiAgICAgICAgQWxzbywgbmV2
ZXIgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBpZiBub3QgZmFsbGluZyB0aHJvdWdoIGFueSBvZgog
ICAgICAgIHRoZSBjYXNlcyBjaGVja2VkIGhlcmUsIGFuZCByZXR1cm4gdGhlIG9yaWdpbmFsIGF0
dHJpYnV0ZSBpbnN0ZWFkLgogICAgICAgIChhdGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0
ZVZhbHVlKTogTmV3IGhlbHBlciBmdW5jdGlvbiB0bwogICAgICAgIG1hdGNoIHRoZSBhdHRyaWJ1
dGVzIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgQVRLIHdyYXBwZXIgd2l0aCB0aGUKICAgICAgICB2
YWx1ZXMgZXhwZWN0ZWQgYnkgdGhlIGxheW91dCB0ZXN0cy4gTW92ZWQgdGhlIG1hcHBpbmdzIGZv
ciB0aGUKICAgICAgICB2YWx1ZXMgb2YgQVhTb3J0RGlyZWN0aW9uIGhlcmUgYXMgd2VsbC4KICAg
ICAgICAoZ2V0QXR0cmlidXRlU2V0KTogTmV3IGhlbHBlciBmdW5jdGlvbiB0byByZXRyaWV2ZSBh
IGxpc3Qgb2YKICAgICAgICBhdHRyaWJ1dGVzIChhbiBBdGtBdHRyaWJ1dGVTZXQpIGZyb20gYW4g
QXRrT2JqZWN0IHVzaW5nIHRoZSByaWdodAogICAgICAgIEFQSSBkZXBlbmRpbmcgb24gd2hldGhl
ciB3ZSB3YW50IHRoZSBvYmplY3QgYXR0cmlidXRlcyBvciB0aGUgdGV4dAogICAgICAgIGF0dHJp
YnV0ZXMgKGluIGNhc2UgdGhlIG9iamVjdCBpbXBsZW1lbnRzIEF0a1RleHQpLgogICAgICAgIChn
ZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKTogU2ltcGxpZmllZCBieSB1c2luZyBnZXRBdHRyaWJ1
dGVTZXQKICAgICAgICBhbmQgYXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZS4g
QWxzbywgYWRkZWQgYSBuZXcKICAgICAgICBwYXJhbWV0ZXIgdG8gaW5kaWNhdGVyIHdoZXRoZXIg
d2UgYXJlIGludGVyZXN0ZWQgaW4gb2JqZWN0CiAgICAgICAgYXR0cmlidXRlcyBvciB0ZXh0IGF0
dHJpYnV0ZXMuCiAgICAgICAgKGdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKTogRGl0dG8uCiAg
ICAgICAgKGF0dHJpYnV0ZXNPZkVsZW1lbnQpOiBVcGRhdGVkIHRvIHBhc3MgdGhlIG5ldyByZXF1
aXJlZCBwYXJhbWV0ZXIKICAgICAgICB0byBnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZywgaW5k
aWNhdGluZyB0aGF0IHdlIHdhbnQgdGhlIG9iamVjdAogICAgICAgIGF0dHJpYnV0ZXMgaW4gdGhp
cyBjYXNlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCiAgICAgICAgKGluZGV4UmFuZ2VJ
blRhYmxlKTogTW92ZWQgdXAgaW4gdGhlIGZpbGUgaW50byB0aGUgdW5uYW1tZWQgbmFtZXNwYWNl
LgogICAgICAgIChhbHRlckN1cnJlbnRWYWx1ZSk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IEFmdGVyIG1vdmluZyBtb3N0CiAg
ICAgICAgb2YgdGhlIGNvZGUgaGVyZSB0byB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbnMsIHNpbXBs
aWZpZWQgaXQgYnkKICAgICAgICBqdXN0IGNoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGF0
dHJpYnV0ZSBpcyBwcm92aWRlZCBhcyBhbgogICAgICAgIG9iamVjdCBhdHRyaWJ1dGUgb3IsIGlm
IHRoYXQncyBub3QgdGhlIGNhc2UsIGFzIGEgdGV4dCBhdHRyaWJ1dGUuCiAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKTogRGl0dG8uCiAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKTogVXBkYXRlZCB0byBwYXNzIHRoZSBu
ZXcKICAgICAgICByZXF1aXJlZCBwYXJhbWV0ZXIgdG8gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJ
ZCwgaW5kaWNhdGluZyB0aGF0CiAgICAgICAgd2Ugd2FudCB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMg
aW4gdGhpcyBjYXNlLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCk6
IERpdHRvLgoKICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgogICAgICAgIChXVFI6OmNvcmVBdHRyaWJ1dGVU
b0F0a0F0dHJpYnV0ZSk6IFNhbWUgY2hhbmdlcyB0aGFuIGZvciBEUlQuCiAgICAgICAgKFdUUjo6
YXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgogICAgICAgIChX
VFI6OmdldEF0dHJpYnV0ZVNldCk6IERpdHRvLgogICAgICAgIChXVFI6OmdldEF0dHJpYnV0ZVNl
dFZhbHVlRm9ySWQpOiBEaXR0by4KICAgICAgICAoV1RSOjpnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0
cmluZyk6IERpdHRvLgogICAgICAgIChXVFI6OmF0dHJpYnV0ZXNPZkVsZW1lbnQpOiBEaXR0by4K
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1
ZSk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmli
dXRlU3VwcG9ydGVkKTogRGl0dG8uCiAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aW50VmFsdWUpOiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpoYXNQb3B1cCk6IERpdHRvLgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAyMyArKwogLi4uL2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAgICAgICAgICAgfCAgIDE1ICsrCiAuLi4vYXRrL1dlYktpdEFjY2Vzc2li
bGVXcmFwcGVyQXRrLmNwcCAgICAgICAgICAgICB8ICAgIDQgLQogVG9vbHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYxICsrKysrCiAuLi4vYXRrL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwICAgICAgICAgICAgICB8ICAyODMgKysrKysrKysr
KysrLS0tLS0tLS0KIC4uLi9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgICAgICAg
ICAgICAgIHwgIDE2OSArKysrKysrKy0tLS0KIDYgZmlsZXMgY2hhbmdlZCwgMzk2IGluc2VydGlv
bnMoKyksIDE1OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjZlM2MzNS4uYjQ3N2JhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEzLTA5LTMwICBNYXJpbyBTYW5jaGV6IFBy
YWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gRXhwb3NlIGFy
aWEtaW52YWxpZCBhcyBhIHRleHQgYXR0cmlidXRlIChub3Qgb2JqZWN0IGF0dHJpYnV0ZSkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjAxNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9zZSB0aGUg
YXJpYS1pbnZhbGlkIGF0dHJpYnV0ZSBjb3JyZWN0bHkgdGhyb3VnaCBhIHRleHQKKyAgICAgICAg
YXR0cmlidXRlICh0aHJvdWdoIHRoZSBBdGtUZXh0IGludGVyZmFjZSkgaW5zdGVhZCBvZiB1c2lu
ZyBhbgorICAgICAgICBvYmplY3QsIGFjY29yZGluZyB0byB3aGF0IHRoZSBXQUktQVJJQSBzcGVj
cyBzYXlzLgorICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1pbXBsZW1lbnRh
dGlvbi8jbWFwcGluZ19zdGF0ZS1wcm9wZXJ0eQorCisgICAgICAgIFRoaXMgd2lsbCBiZSB0ZXN0
ZWQgYnkgYWNjZXNpYmlsaXR5L2FyaWEtaW52YWxpZC5odG1sLCB3aGljaCBzaG91bGQKKyAgICAg
ICAga2VlcCBwYXNzaW5nIGFmdGVyIHRoYW5rcyB0byB0aGUgY2hhbmdlcyBkb25lIGluIHRoZSBE
UlQgYW5kIFdLVFIuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3Np
YmlsaXR5T2JqZWN0KTogRXhwb3NlIGFyaWEtaW52YWxpZCBhcyBhCisgICAgICAgIGN1c3RvbSB0
ZXh0IGF0dHJpYnV0ZSAnaW52YWxpZCcsIGZvbGxvd2luZyB0aGUgbGVhZCBvZiBGaXJlZm94Lgor
ICAgICAgICBBbHNvIHJlZ2lzdGVyIHRoYXQgY3VzdG9tIGF0dHJpYnV0ZSBhcyBhIEF0a1RleHRB
dHRyaWJ1dGUuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdy
YXBwZXJBdGsuY3BwOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMpOiBS
ZW1vdmUgZXhwb3N1cmUgb2YgYXJpYS1pbnZhbGlkCisgICAgICAgIGFzIGFuIG9iamVjdCBhdHRy
aWJ1dGUgZnJvbSBoZXJlLgorCiAyMDEzLTA5LTMwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIHN0YXRpYyBtYXAgZm9yIG1hcmtpbmcgYW5j
ZXN0b3IgbGluZSBib3hlcyBkaXJ0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3Bw
CmluZGV4IDdmNDE2MGIuLjQ0NGVkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4
dC5jcHAKQEAgLTU2LDYgKzU2LDExIEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisv
LyBUZXh0IGF0dHJpYnV0ZSB0byBleHBvc2UgdGhlIEFSSUEgJ2FyaWEtaW52YWxpZCcgYXR0cmli
dXRlLiBJbml0aWFsbHkgaW5pdGlhbGl6ZWQKKy8vIHRvIEFUS19URVhUX0FUVFJfSU5WQUxJRCAo
d2hpY2ggbWVhbnMgJ2ludmFsaWQnIHRleHQgYXR0cmlidXRlJyksIHdpbGwgbGF0ZXIgb24KKy8v
IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGN1c3RvbSByZWdpc3RlcmVkIEF0a1RleHRBdHRyaWJ1
dGUgdGhhdCB3ZSB3aWxsIHVzZS4KK3N0YXRpYyBBdGtUZXh0QXR0cmlidXRlIGF0a1RleHRBdHRy
aWJ1dGVJbnZhbGlkID0gQVRLX1RFWFRfQVRUUl9JTlZBTElEOworCiBzdGF0aWMgQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZShBdGtUZXh0KiB0ZXh0KQogewogICAgIGlmICghV0VCS0lUX0lTX0FD
Q0VTU0lCTEUodGV4dCkpCkBAIC0yOTQsNiArMjk5LDE2IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVT
ZXQqIGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QoY29uc3QgQWNjZXNzaWJp
bGl0CiAgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkpCiAgICAgICAgIHJlc3VsdCA9IGFkZFRv
QXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19U
RVhUX0FUVFJfTEFOR1VBR0UpLCBsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKIAorICAgIFN0cmlu
ZyBpbnZhbGlkU3RhdHVzID0gb2JqZWN0LT5pbnZhbGlkU3RhdHVzKCkuc3RyaW5nKCk7CisgICAg
aWYgKCFpbnZhbGlkU3RhdHVzLmlzRW1wdHkoKSAmJiBpbnZhbGlkU3RhdHVzICE9ICJmYWxzZSIp
IHsKKyAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGN1c3RvbSBhdHRyaWJ1dGUgZm9yICdhcmlhLWlu
dmFsaWQnIGlmIG5vdCBkb25lIHlldC4KKyAgICAgICAgaWYgKGF0a1RleHRBdHRyaWJ1dGVJbnZh
bGlkID09IEFUS19URVhUX0FUVFJfSU5WQUxJRCkKKyAgICAgICAgICAgIGF0a1RleHRBdHRyaWJ1
dGVJbnZhbGlkID0gYXRrX3RleHRfYXR0cmlidXRlX3JlZ2lzdGVyKCJpbnZhbGlkIik7CisKKyAg
ICAgICAgU3RyaW5nIGludmFsaWRWYWx1ZSA9IGludmFsaWRTdGF0dXMgPT0gInNwZWxsaW5nIiB8
fCBpbnZhbGlkU3RhdHVzID09ICJncmFtbWFyIiA/IGludmFsaWRTdGF0dXMgOiAidHJ1ZSI7Cisg
ICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0
cmlidXRlX2dldF9uYW1lKGF0a1RleHRBdHRyaWJ1dGVJbnZhbGlkKSwgaW52YWxpZFZhbHVlLnV0
ZjgoKS5kYXRhKCkpOworICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFw
cGVyQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVXcmFwcGVyQXRrLmNwcAppbmRleCBhZDg4YmRhLi5kYjFmNjBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVdyYXBwZXJBdGsuY3BwCkBAIC01MDUsMTAgKzUwNSw2IEBAIHN0YXRpYyBBdGtBdHRyaWJ1
dGVTZXQqIHdlYmtpdEFjY2Vzc2libGVHZXRBdHRyaWJ1dGVzKEF0a09iamVjdCogb2JqZWN0KQog
ICAgIGlmIChjb3JlT2JqZWN0LT5hcmlhSGFzUG9wdXAoKSkKICAgICAgICAgYXR0cmlidXRlU2V0
ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAiaGFzcG9wdXAiLCAidHJ1ZSIp
OwogCi0gICAgU3RyaW5nIGludmFsaWRTdGF0dXMgPSBjb3JlT2JqZWN0LT5pbnZhbGlkU3RhdHVz
KCkuc3RyaW5nKCk7Ci0gICAgaWYgKCFpbnZhbGlkU3RhdHVzLmlzRW1wdHkoKSAmJiBpbnZhbGlk
U3RhdHVzICE9ICJmYWxzZSIpCi0gICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmli
dXRlU2V0KGF0dHJpYnV0ZVNldCwgImFyaWEtaW52YWxpZCIsIGNvcmVPYmplY3QtPmludmFsaWRT
dGF0dXMoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQogICAgIEFjY2Vzc2liaWxpdHlTb3J0
RGlyZWN0aW9uIHNvcnREaXJlY3Rpb24gPSBjb3JlT2JqZWN0LT5zb3J0RGlyZWN0aW9uKCk7CiAg
ICAgaWYgKHNvcnREaXJlY3Rpb24gIT0gU29ydERpcmVjdGlvbk5vbmUpIHsKICAgICAgICAgLy8g
V0FJLUFSSUEgc3BlYyBzYXlzIHRvIHRyYW5zbGF0ZSB0aGUgdmFsdWUgYXMgaXMgZnJvbSB0aGUg
YXR0cmlidXRlLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IGVhMDk3NjYuLjJkNTY4ZTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAxMy0wOS0zMCAgTWFyaW8gU2Fu
Y2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtBVEtdIEV4
cG9zZSBhcmlhLWludmFsaWQgYXMgYSB0ZXh0IGF0dHJpYnV0ZSAobm90IG9iamVjdCBhdHRyaWJ1
dGUpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIw
MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGFw
dGVkIERSVCBhbmQgV0tUUiB0byBjaGVjayB0aGUgZXhwb3N1cmUgb2YgdGhlIGFyaWEtaW52YWxp
ZAorICAgICAgICBhdHRyaWJ1dGUgYXMgYSB0ZXh0IGF0dHJpYnV0ZSwgaW5zdGVhZCBvZiBhbiBv
YmplY3QgYXR0cmlidXRlLgorCisgICAgICAgIEFsc28sIGRvbmUgc29tZSByZWZhY3RvcmluZyBv
ZiB0aGUgY29kZSB0byB0cnkgdG8ga2VlcCB0aGluZ3MKKyAgICAgICAgc2ltcGxlciBhbmQgbW9y
ZSBjb2hlcmVudCwgYnkgZGVmaW5pbmcgbmV3IGhlbHBlciBmdW5jdGlvbnMsCisgICAgICAgIHNp
bXBsaWZ5aW5nIGNvZGUsIG1vdmluZyBzdGF0aWMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgaW50
bworICAgICAgICB1bm5hbW1lZCBuYW1lc3BhY2VzIGFuZCBzbyBvbiwgd2l0aG91dCBhbHRlcmlu
ZyB0aGUgbG9naWMgb3RoZXIKKyAgICAgICAgdGhhbiBmb3IgY2hlY2tpbmcgdGhlIHRleHQgYXR0
cmlidXRlIGZvciBhcmlhLWludmFsaWQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHA6CisgICAgICAgIChjb3JlQXR0cmlidXRlVG9B
dGtBdHRyaWJ1dGUpOiBDb25zaWRlciAnaW52YWxpZCcgYXMgdGhlIG5hbWUgb2YKKyAgICAgICAg
dGhlIGF0dHJpYnV0ZSBleHBvc2VkIGJ5IHRoZSBBVEsgd3JhcHBlciwgbm90ICdhcmlhLWludmFs
aWQnLgorICAgICAgICBBbHNvLCBuZXZlciByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGlmIG5vdCBm
YWxsaW5nIHRocm91Z2ggYW55IG9mCisgICAgICAgIHRoZSBjYXNlcyBjaGVja2VkIGhlcmUsIGFu
ZCByZXR1cm4gdGhlIG9yaWdpbmFsIGF0dHJpYnV0ZSBpbnN0ZWFkLgorICAgICAgICAoYXRrQXR0
cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZSk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gdG8K
KyAgICAgICAgbWF0Y2ggdGhlIGF0dHJpYnV0ZXMgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBBVEsg
d3JhcHBlciB3aXRoIHRoZQorICAgICAgICB2YWx1ZXMgZXhwZWN0ZWQgYnkgdGhlIGxheW91dCB0
ZXN0cy4gTW92ZWQgdGhlIG1hcHBpbmdzIGZvciB0aGUKKyAgICAgICAgdmFsdWVzIG9mIEFYU29y
dERpcmVjdGlvbiBoZXJlIGFzIHdlbGwuCisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXQpOiBOZXcg
aGVscGVyIGZ1bmN0aW9uIHRvIHJldHJpZXZlIGEgbGlzdCBvZgorICAgICAgICBhdHRyaWJ1dGVz
IChhbiBBdGtBdHRyaWJ1dGVTZXQpIGZyb20gYW4gQXRrT2JqZWN0IHVzaW5nIHRoZSByaWdodAor
ICAgICAgICBBUEkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0aGUgb2JqZWN0IGF0dHJp
YnV0ZXMgb3IgdGhlIHRleHQKKyAgICAgICAgYXR0cmlidXRlcyAoaW4gY2FzZSB0aGUgb2JqZWN0
IGltcGxlbWVudHMgQXRrVGV4dCkuCisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklk
KTogU2ltcGxpZmllZCBieSB1c2luZyBnZXRBdHRyaWJ1dGVTZXQKKyAgICAgICAgYW5kIGF0a0F0
dHJpYnV0ZVZhbHVlVG9Db3JlQXR0cmlidXRlVmFsdWUuIEFsc28sIGFkZGVkIGEgbmV3CisgICAg
ICAgIHBhcmFtZXRlciB0byBpbmRpY2F0ZXIgd2hldGhlciB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBv
YmplY3QKKyAgICAgICAgYXR0cmlidXRlcyBvciB0ZXh0IGF0dHJpYnV0ZXMuCisgICAgICAgIChn
ZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyk6IERpdHRvLgorICAgICAgICAoYXR0cmlidXRlc09m
RWxlbWVudCk6IFVwZGF0ZWQgdG8gcGFzcyB0aGUgbmV3IHJlcXVpcmVkIHBhcmFtZXRlcgorICAg
ICAgICB0byBnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZywgaW5kaWNhdGluZyB0aGF0IHdlIHdh
bnQgdGhlIG9iamVjdAorICAgICAgICBhdHRyaWJ1dGVzIGluIHRoaXMgY2FzZSwgZm9yIGJhY2t3
YXJkcyBjb21wYXRpYmlsaXR5LgorICAgICAgICAoaW5kZXhSYW5nZUluVGFibGUpOiBNb3ZlZCB1
cCBpbiB0aGUgZmlsZSBpbnRvIHRoZSB1bm5hbW1lZCBuYW1lc3BhY2UuCisgICAgICAgIChhbHRl
ckN1cnJlbnRWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c3RyaW5nQXR0cmlidXRlVmFsdWUpOiBBZnRlciBtb3ZpbmcgbW9zdAorICAgICAgICBvZiB0aGUg
Y29kZSBoZXJlIHRvIHRoZSBuZXcgaGVscGVyIGZ1bmN0aW9ucywgc2ltcGxpZmllZCBpdCBieQor
ICAgICAgICBqdXN0IGNoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGF0dHJpYnV0ZSBpcyBw
cm92aWRlZCBhcyBhbgorICAgICAgICBvYmplY3QgYXR0cmlidXRlIG9yLCBpZiB0aGF0J3Mgbm90
IHRoZSBjYXNlLCBhcyBhIHRleHQgYXR0cmlidXRlLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKTogVXBkYXRlZCB0byBwYXNzIHRoZSBuZXcKKyAgICAg
ICAgcmVxdWlyZWQgcGFyYW1ldGVyIHRvIGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQsIGluZGlj
YXRpbmcgdGhhdAorICAgICAgICB3ZSB3YW50IHRoZSBvYmplY3QgYXR0cmlidXRlcyBpbiB0aGlz
IGNhc2UuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCk6IERpdHRv
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudEF0ay5jcHA6CisgICAgICAgIChXVFI6OmNvcmVBdHRyaWJ1dGVUb0F0
a0F0dHJpYnV0ZSk6IFNhbWUgY2hhbmdlcyB0aGFuIGZvciBEUlQuCisgICAgICAgIChXVFI6OmF0
a0F0dHJpYnV0ZVZhbHVlVG9Db3JlQXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6Z2V0QXR0cmlidXRlU2V0KTogRGl0dG8uCisgICAgICAgIChXVFI6OmdldEF0dHJpYnV0ZVNl
dFZhbHVlRm9ySWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6Z2V0QXRrQXR0cmlidXRlU2V0QXNT
dHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6YXR0cmlidXRlc09mRWxlbWVudCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVW
YWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0
dHJpYnV0ZVN1cHBvcnRlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbnRWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpoYXNQb3B1cCk6IERpdHRvLgorCiAyMDEzLTA5LTMwICBaYW4gRG9iZXJzZWsgIDx6
ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbd2Via2l0cHldIE1ha2UgdGhlIFh2ZmIg
c2NyZWVuIGRlcHRoIG92ZXJyaWRhYmxlCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKaW5kZXggNzI2NmRiMS4uNzhhZDlm
MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRBdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRrLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5
IEphbiBNaWNoYWVsIEFsb256bworICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ry
b25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQxLDQ4ICs0MiwxMjUgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCi1zdGF0aWMgU3RyaW5n
IGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCituYW1l
c3BhY2UgeworCitlbnVtIEF0a0F0dHJpYnV0ZVR5cGUgeworICAgIE9iamVjdEF0dHJpYnV0ZVR5
cGUsCisgICAgVGV4dEF0dHJpYnV0ZVR5cGUKK307CisKK2VudW0gQXR0cmlidXRlRG9tYWluIHsK
KyAgICBDb3JlRG9tYWluID0gMCwKKyAgICBBdGtEb21haW4KK307CisKK2VudW0gQXR0cmlidXRl
c0luZGV4IHsKKyAgICAvLyBBdHRyaWJ1dGUgbmFtZXMuCisgICAgSW52YWxpZE5hbWVJbmRleCA9
IDAsCisgICAgUGxhY2Vob2xkZXJOYW1lSW5kZXgsCisgICAgU29ydE5hbWVJbmRleCwKKworICAg
IC8vIEF0dHJpYnV0ZSB2YWx1ZXMuCisgICAgU29ydEFzY2VuZGluZ1ZhbHVlSW5kZXgsCisgICAg
U29ydERlc2NlbmRpbmdWYWx1ZUluZGV4LAorICAgIFNvcnRVbmtub3duVmFsdWVJbmRleCwKKwor
ICAgIE51bWJlck9mQXR0cmlidXRlcworfTsKKworLy8gQXR0cmlidXRlIG5hbWVzICYgVmFsdWVz
IChrZWVwIG9uIHN5bmMgd2l0aCBlbnVtIEF0dHJpYnV0ZXNJbmRleCkuCitjb25zdCBTdHJpbmcg
YXR0cmlidXRlc01hcFtdWzJdID0geworICAgIC8vIEF0dHJpYnV0ZSBuYW1lcy4KKyAgICB7ICJB
WEludmFsaWQiLCAiaW52YWxpZCIgfSwKKyAgICB7ICJBWFBsYWNlaG9sZGVyVmFsdWUiLCAicGxh
Y2Vob2xkZXItdGV4dCIgfSAsCisgICAgeyAiQVhTb3J0RGlyZWN0aW9uIiwgInNvcnQiIH0sCisK
KyAgICAvLyBBdHRyaWJ1dGUgdmFsdWVzLgorICAgIHsgIkFYQXNjZW5kaW5nU29ydERpcmVjdGlv
biIsICJhc2NlbmRpbmciIH0sCisgICAgeyAiQVhEZXNjZW5kaW5nU29ydERpcmVjdGlvbiIsICJk
ZXNjZW5kaW5nIiB9LAorICAgIHsgIkFYVW5rbm93blNvcnREaXJlY3Rpb24iLCAidW5rbm93biIg
fQorfTsKKworU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBh
dHRyaWJ1dGUpCiB7CiAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1V
VEY4Q1N0cmluZ1NpemUoYXR0cmlidXRlKTsKICAgICBHT3duUHRyPGdjaGFyPiBidWZmZXIoc3Rh
dGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSkpOwogICAgIEpTU3RyaW5nR2V0
VVRGOENTdHJpbmcoYXR0cmlidXRlLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwogCiAgICAg
U3RyaW5nIGF0dHJpYnV0ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmdldCgpKTsK
LSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWEludmFsaWQiKQotICAgICAgICByZXR1cm4g
ImFyaWEtaW52YWxpZCI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1iZXJPZkF0dHJpYnV0
ZXM7ICsraSkgeworICAgICAgICBpZiAoYXR0cmlidXRlc01hcFtpXVtDb3JlRG9tYWluXSA9PSBh
dHRyaWJ1dGVTdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlc01hcFtpXVtBdGtE
b21haW5dOworICAgIH0KKworICAgIHJldHVybiBhdHRyaWJ1dGVTdHJpbmc7Cit9CisKK1N0cmlu
ZyBhdGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0ZVZhbHVlKEF0a0F0dHJpYnV0ZVR5cGUg
dHlwZSwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAo
dHlwZSA9PSBPYmplY3RBdHRyaWJ1dGVUeXBlKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gdHJh
bnNsYXRlIEFUSyB2YWx1ZXMgZXhwb3NlZCBmb3IgJ2FyaWEtc29ydCcgKGUuZy4gJ2FzY2VuZGlu
ZycpCisgICAgICAgIC8vIGludG8gdGhvc2UgZXhwZWN0ZWQgYnkgdGhlIGxheW91dCB0ZXN0cyAo
ZS5nLiAnQVhBc2NlbmRpbmdTb3J0RGlyZWN0aW9uJykuCisgICAgICAgIGlmIChpZCA9PSBhdHRy
aWJ1dGVzTWFwW1NvcnROYW1lSW5kZXhdW0F0a0RvbWFpbl0gJiYgIXZhbHVlLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgaWYgKHZhbHVlID09IGF0dHJpYnV0ZXNNYXBbU29ydEFzY2VuZGluZ1Zh
bHVlSW5kZXhdW0F0a0RvbWFpbl0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNN
YXBbU29ydEFzY2VuZGluZ1ZhbHVlSW5kZXhdW0NvcmVEb21haW5dOworICAgICAgICAgICAgaWYg
KHZhbHVlID09IGF0dHJpYnV0ZXNNYXBbU29ydERlc2NlbmRpbmdWYWx1ZUluZGV4XVtBdGtEb21h
aW5dKQorICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzTWFwW1NvcnREZXNjZW5kaW5n
VmFsdWVJbmRleF1bQ29yZURvbWFpbl07CisKKyAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVz
TWFwW1NvcnRVbmtub3duVmFsdWVJbmRleF1bQ29yZURvbWFpbl07CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gVGV4dEF0dHJpYnV0ZVR5cGUpIHsKKyAgICAgICAgLy8gSW4gY2Fz
ZSBvZiAnYXJpYS1pbnZhbGlkJyB3aGVuIHRoZSBhdHRyaWJ1dGUgZW1wdHkgb3IgaGFzICJmYWxz
ZSIgZm9yIEFUSworICAgICAgICAvLyBpdCBzaG91bGQgbm90IGJlIG1hcHBlZCBhdCBhbGwsIGJ1
dCBsYXlvdXQgdGVzdHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4KKyAgICAgICAgaWYgKGlkID09IGF0
dHJpYnV0ZXNNYXBbSW52YWxpZE5hbWVJbmRleF1bQXRrRG9tYWluXSAmJiB2YWx1ZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gImZhbHNlIjsKKyAgICB9CisKKyAgICByZXR1cm4gdmFs
dWU7Cit9CisKK0F0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0KEF0a09iamVjdCogYWNj
ZXNzaWJsZSwgQXRrQXR0cmlidXRlVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IE9iamVj
dEF0dHJpYnV0ZVR5cGUpCisgICAgICAgIHJldHVybiBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVz
KGFjY2Vzc2libGUpOwogCi0gICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhQbGFjZWhvbGRl
clZhbHVlIikKLSAgICAgICAgcmV0dXJuICJwbGFjZWhvbGRlci10ZXh0IjsKKyAgICBpZiAodHlw
ZSA9PSBUZXh0QXR0cmlidXRlVHlwZSkgeworICAgICAgICBpZiAoIUFUS19JU19URVhUKGFjY2Vz
c2libGUpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5n
ID09ICJBWFNvcnREaXJlY3Rpb24iKQotICAgICAgICByZXR1cm4gInNvcnQiOworICAgICAgICBy
ZXR1cm4gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhBVEtfVEVYVChhY2Nlc3NpYmxl
KSk7CisgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEF0dHJpYnV0ZVNldFZh
bHVlRm9ySWQoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBjb25zdCBjaGFyKiBpZCkKK1N0cmluZyBn
ZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEF0a09iamVjdCogYWNjZXNzaWJsZSwgQXRrQXR0cmli
dXRlVHlwZSB0eXBlLCBTdHJpbmcgaWQpCiB7Ci0gICAgY29uc3QgY2hhciogYXR0cmlidXRlVmFs
dWUgPSAwOwotICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gYXRrX29iamVjdF9n
ZXRfYXR0cmlidXRlcyhhY2Nlc3NpYmxlKTsKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0
ZVNldCA9IGdldEF0dHJpYnV0ZVNldChhY2Nlc3NpYmxlLCB0eXBlKTsKKyAgICBpZiAoIWF0dHJp
YnV0ZVNldCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgU3RyaW5nIGF0dHJpYnV0
ZVZhbHVlOwogICAgIGZvciAoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVzID0gYXR0cmlidXRl
U2V0OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy0+bmV4dCkgewogICAgICAg
ICBBdGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+
KGF0dHJpYnV0ZXMtPmRhdGEpOwotICAgICAgICBpZiAoIXN0cmNtcChhdGtBdHRyaWJ1dGUtPm5h
bWUsIGlkKSkgewotICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdGtBdHRyaWJ1dGUtPnZh
bHVlOworICAgICAgICBpZiAoaWQgPT0gYXRrQXR0cmlidXRlLT5uYW1lKSB7CisgICAgICAgICAg
ICBhdHRyaWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXRrQXR0cmlidXRlLT52YWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQotICAgIFN0cmluZyBhdGtB
dHRyaWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXR0cmlidXRlVmFsdWUpOwogICAgIGF0
a19hdHRyaWJ1dGVfc2V0X2ZyZWUoYXR0cmlidXRlU2V0KTsKIAotICAgIHJldHVybiBhdGtBdHRy
aWJ1dGVWYWx1ZTsKKyAgICByZXR1cm4gYXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVW
YWx1ZSh0eXBlLCBpZCwgYXR0cmlidXRlVmFsdWUpOwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEF0
a0F0dHJpYnV0ZVNldEFzU3RyaW5nKEF0a09iamVjdCogYWNjZXNzaWJsZSkKK1N0cmluZyBnZXRB
dGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhBdGtPYmplY3QqIGFjY2Vzc2libGUsIEF0a0F0dHJpYnV0
ZVR5cGUgdHlwZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgQXRrQXR0cmli
dXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSBnZXRBdHRyaWJ1dGVTZXQoYWNjZXNzaWJsZSwgdHlwZSk7
CisgICAgaWYgKCFhdHRyaWJ1dGVTZXQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAg
IEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRl
cyhhY2Nlc3NpYmxlKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgZm9yIChBdGtB
dHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTZXQ7IGF0dHJpYnV0ZXM7IGF0dHJp
YnV0ZXMgPSBhdHRyaWJ1dGVzLT5uZXh0KSB7CiAgICAgICAgIEF0a0F0dHJpYnV0ZSogYXR0cmli
dXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4oYXR0cmlidXRlcy0+ZGF0YSk7CiAgICAg
ICAgIEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoZ19zdHJjb25jYXQoYXR0cmlidXRlLT5u
YW1lLCAiOiIsIGF0dHJpYnV0ZS0+dmFsdWUsIE5VTEwpKTsKQEAgLTk1LDcgKzE3Myw3IEBAIHN0
YXRpYyBTdHJpbmcgZ2V0QXRrQXR0cmlidXRlU2V0QXNTdHJpbmcoQXRrT2JqZWN0KiBhY2Nlc3Np
YmxlKQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Y29uc3QgY2hhciogcm9sZVRvU3RyaW5nKEF0a1JvbGUgcm9sZSkKK2lubGluZSBjb25zdCBjaGFy
KiByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQogewogICAgIHN3aXRjaCAocm9sZSkgewogICAg
IGNhc2UgQVRLX1JPTEVfQUxFUlQ6CkBAIC0yMDksNyArMjg3LDcgQEAgc3RhdGljIGlubGluZSBj
b25zdCBjaGFyKiByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQogICAgIH0KIH0KIAotc3RhdGlj
IGlubGluZSBnY2hhciogcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKGdjaGFyKiBzdHIpCitp
bmxpbmUgZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyhnY2hhciogc3RyKQogewog
ICAgIFN0cmluZyB1U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChzdHIpOwogCkBAIC0yMjUsNyAr
MzAzLDcgQEAgc3RhdGljIGlubGluZSBnY2hhciogcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRz
KGdjaGFyKiBzdHIpCiAgICAgcmV0dXJuIGdfc3RyZHVwKHVTdHJpbmcudXRmOCgpLmRhdGEoKSk7
CiB9CiAKLXN0YXRpYyBib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRmb3JtVUlFbGVtZW50IGVs
ZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCitib29sIGNoZWNrRWxlbWVudFN0YXRlKFBs
YXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCiB7CiAgICAg
aWYgKCFBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0y
MzQsNyArMzEyLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tFbGVtZW50U3RhdGUoUGxhdGZvcm1VSUVs
ZW1lbnQgZWxlbWVudCwgQXRrU3RhdGVUeXBlIHN0YXRlVHlwZSkKICAgICByZXR1cm4gYXRrX3N0
YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgc3RhdGVUeXBlKTsKIH0KIAot
c3RhdGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQq
IGVsZW1lbnQpCitTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KiBlbGVtZW50KQogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKIApAQCAtMjgwLDEx
ICszNTgsNzMgQEAgc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICAvLyBXZSBhcHBlbmQgdGhlIEFUSyBzcGVjaWZp
YyBhdHRyaWJ1dGVzIGFzIGEgc2luZ2xlIGxpbmUgYXQgdGhlIGVuZC4KICAgICBidWlsZGVyLmFw
cGVuZCgiQVhQbGF0Zm9ybUF0dHJpYnV0ZXM6ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGdldEF0
a0F0dHJpYnV0ZVNldEFzU3RyaW5nKGVsZW1lbnQtPnBsYXRmb3JtVUlFbGVtZW50KCkpKTsKKyAg
ICBidWlsZGVyLmFwcGVuZChnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhlbGVtZW50LT5wbGF0
Zm9ybVVJRWxlbWVudCgpLCBPYmplY3RBdHRyaWJ1dGVUeXBlKSk7CiAKICAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwogfQogCit9IC8vIG5hbWVzcGFjZQorCitKU1N0cmluZ1JlZiBpbmRl
eFJhbmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBib29sIGlzUm93UmFuZ2Up
Cit7CisgICAgR093blB0cjxnY2hhcj4gcmFuZ2VTdHJpbmcoZ19zdHJkdXAoInswLCAwfSIpKTsK
KworICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKKworICAgIEF0a09i
amVjdCogYXhUYWJsZSA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JKRUNUKGVsZW1lbnQp
KTsKKyAgICBpZiAoIWF4VGFibGUgfHwgIUFUS19JU19UQUJMRShheFRhYmxlKSkKKyAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsK
KworICAgIC8vIExvb2sgZm9yIHRoZSBjZWxsIGluIHRoZSB0YWJsZS4KKyAgICBnaW50IGluZGV4
SW5QYXJlbnQgPSBhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoQVRLX09CSkVDVChlbGVt
ZW50KSk7CisgICAgaWYgKGluZGV4SW5QYXJlbnQgPT0gLTEpCisgICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7CisKKyAgICBpbnQg
cm93ID0gLTE7CisgICAgaW50IGNvbHVtbiA9IC0xOworICAgIHJvdyA9IGF0a190YWJsZV9nZXRf
cm93X2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7CisgICAgY29s
dW1uID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgoQVRLX1RBQkxFKGF4VGFibGUpLCBp
bmRleEluUGFyZW50KTsKKworICAgIC8vIEdldCB0aGUgYWN0dWFsIHZhbHVlcywgaWYgcm93IGFu
ZCBjb2x1bW5zIGFyZSB2YWxpZCB2YWx1ZXMuCisgICAgaWYgKHJvdyAhPSAtMSAmJiBjb2x1bW4g
IT0gLTEpIHsKKyAgICAgICAgaW50IGJhc2UgPSAwOworICAgICAgICBpbnQgbGVuZ3RoID0gMDsK
KyAgICAgICAgaWYgKGlzUm93UmFuZ2UpIHsKKyAgICAgICAgICAgIGJhc2UgPSByb3c7CisgICAg
ICAgICAgICBsZW5ndGggPSBhdGtfdGFibGVfZ2V0X3Jvd19leHRlbnRfYXQoQVRLX1RBQkxFKGF4
VGFibGUpLCByb3csIGNvbHVtbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNl
ID0gY29sdW1uOworICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fZXh0
ZW50X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOworICAgICAgICB9CisgICAg
ICAgIHJhbmdlU3RyaW5nLnNldChnX3N0cmR1cF9wcmludGYoInslZCwgJWR9IiwgYmFzZSwgbGVu
Z3RoKSk7CisgICAgfQorCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHJhbmdlU3RyaW5nLmdldCgpKTsKK30KKwordm9pZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9y
bVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFjdG9yKQoreworICAgIGlmICghQVRLX0lTX1ZBTFVF
KGVsZW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBHVmFsdWUgY3VycmVudFZhbHVlID0g
R19WQUxVRV9JTklUOworICAgIGF0a192YWx1ZV9nZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUo
ZWxlbWVudCksICZjdXJyZW50VmFsdWUpOworCisgICAgR1ZhbHVlIGluY3JlbWVudCA9IEdfVkFM
VUVfSU5JVDsKKyAgICBhdGtfdmFsdWVfZ2V0X21pbmltdW1faW5jcmVtZW50KEFUS19WQUxVRShl
bGVtZW50KSwgJmluY3JlbWVudCk7CisKKyAgICBHVmFsdWUgbmV3VmFsdWUgPSBHX1ZBTFVFX0lO
SVQ7CisgICAgZ192YWx1ZV9pbml0KCZuZXdWYWx1ZSwgR19UWVBFX0ZMT0FUKTsKKworICAgIGdf
dmFsdWVfc2V0X2Zsb2F0KCZuZXdWYWx1ZSwgZ192YWx1ZV9nZXRfZmxvYXQoJmN1cnJlbnRWYWx1
ZSkgKyBmYWN0b3IgKiBnX3ZhbHVlX2dldF9mbG9hdCgmaW5jcmVtZW50KSk7CisgICAgYXRrX3Zh
bHVlX3NldF9jdXJyZW50X3ZhbHVlKEFUS19WQUxVRShlbGVtZW50KSwgJm5ld1ZhbHVlKTsKKwor
ICAgIGdfdmFsdWVfdW5zZXQoJm5ld1ZhbHVlKTsKKyAgICBnX3ZhbHVlX3Vuc2V0KCZpbmNyZW1l
bnQpOworICAgIGdfdmFsdWVfdW5zZXQoJmN1cnJlbnRWYWx1ZSk7Cit9CisKIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxl
bWVudCkKICAgICA6IG1fZWxlbWVudChlbGVtZW50KQogewpAQCAtNjQzLDcgKzc4Myw3IEBAIGRv
dWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0CiAgICAgLy8gYW4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCwgc28gd2UgY2FuIHJldXNlIHNvbWUgdGVzdHMgdG8gY2hl
Y2sgdGhlIGxldmVsCiAgICAgLy8gYm90aCBmb3IgSFRNTCBoZWFkaW5ncyBhbmQgb2JqZWN0cyB3
aXRoIHRoZSBhcmlhLWxldmVsIGF0dHJpYnV0ZS4KICAgICBpZiAoYXRrX29iamVjdF9nZXRfcm9s
ZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpID09IEFUS19ST0xFX0hFQURJTkcpIHsKLSAgICAgICAg
U3RyaW5nIGhlYWRpbmdMZXZlbCA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVD
VChtX2VsZW1lbnQpLCAibGV2ZWwiKTsKKyAgICAgICAgU3RyaW5nIGhlYWRpbmdMZXZlbCA9IGdl
dEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBPYmplY3RBdHRy
aWJ1dGVUeXBlLCAibGV2ZWwiKTsKICAgICAgICAgYm9vbCBvazsKICAgICAgICAgZG91YmxlIGhl
YWRpbmdMZXZlbFZhbHVlID0gaGVhZGluZ0xldmVsLnRvRG91YmxlKCZvayk7CiAgICAgICAgIGlm
IChvaykKQEAgLTgxNCw0NCArOTU0LDYgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlu
ZGV4SW5UYWJsZSgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBKU1N0cmluZ1JlZiBpbmRl
eFJhbmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBib29sIGlzUm93UmFuZ2Up
Ci17Ci0gICAgR093blB0cjxnY2hhcj4gcmFuZ2VTdHJpbmcoZ19zdHJkdXAoInswLCAwfSIpKTsK
LQotICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKLQotICAgIEF0a09i
amVjdCogYXhUYWJsZSA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JKRUNUKGVsZW1lbnQp
KTsKLSAgICBpZiAoIWF4VGFibGUgfHwgIUFUS19JU19UQUJMRShheFRhYmxlKSkKLSAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsK
LQotICAgIC8vIExvb2sgZm9yIHRoZSBjZWxsIGluIHRoZSB0YWJsZS4KLSAgICBnaW50IGluZGV4
SW5QYXJlbnQgPSBhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoQVRLX09CSkVDVChlbGVt
ZW50KSk7Ci0gICAgaWYgKGluZGV4SW5QYXJlbnQgPT0gLTEpCi0gICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci0KLSAgICBpbnQg
cm93ID0gLTE7Ci0gICAgaW50IGNvbHVtbiA9IC0xOwotICAgIHJvdyA9IGF0a190YWJsZV9nZXRf
cm93X2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7Ci0gICAgY29s
dW1uID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgoQVRLX1RBQkxFKGF4VGFibGUpLCBp
bmRleEluUGFyZW50KTsKLQotICAgIC8vIEdldCB0aGUgYWN0dWFsIHZhbHVlcywgaWYgcm93IGFu
ZCBjb2x1bW5zIGFyZSB2YWxpZCB2YWx1ZXMuCi0gICAgaWYgKHJvdyAhPSAtMSAmJiBjb2x1bW4g
IT0gLTEpIHsKLSAgICAgICAgaW50IGJhc2UgPSAwOwotICAgICAgICBpbnQgbGVuZ3RoID0gMDsK
LSAgICAgICAgaWYgKGlzUm93UmFuZ2UpIHsKLSAgICAgICAgICAgIGJhc2UgPSByb3c7Ci0gICAg
ICAgICAgICBsZW5ndGggPSBhdGtfdGFibGVfZ2V0X3Jvd19leHRlbnRfYXQoQVRLX1RBQkxFKGF4
VGFibGUpLCByb3csIGNvbHVtbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBiYXNl
ID0gY29sdW1uOwotICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fZXh0
ZW50X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOwotICAgICAgICB9Ci0gICAg
ICAgIHJhbmdlU3RyaW5nLnNldChnX3N0cmR1cF9wcmludGYoInslZCwgJWR9IiwgYmFzZSwgbGVu
Z3RoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHJhbmdlU3RyaW5nLmdldCgpKTsKLX0KLQogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cm93SW5kZXhSYW5nZSgpCiB7CiAgICAgLy8gUmFuZ2UgaW4gdGFibGUgZm9yIHJvd3Mu
CkBAIC05MjgsMjcgKzEwMzAsMTMgQEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIAogICAgIFN0cmluZyBh
dGtBdHRyaWJ1dGVOYW1lID0gY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKGF0dHJpYnV0ZSk7
Ci0gICAgaWYgKGF0a0F0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIFN0cmluZyBhdHRyaWJ1dGVW
YWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBh
dGtBdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgLy8gSW4gY2FzZSBvZiAnYXJp
YS1pbnZhbGlkJyB3aGVuIHRoZSBhdHRyaWJ1dGUgZW1wdHkgb3IgaGFzICJmYWxzZSIgZm9yIEFU
SwotICAgIC8vIGFjY29yZGluZyB0byBodHRwOi8vd3d3LnczLm9yZy9XQUkvUEYvYXJpYS1pbXBs
ZW1lbnRhdGlvbi8jbWFwcGluZyBhdHRyaWJ1dGUKLSAgICAvLyBpcyBub3QgbWFwcGVkIGJ1dCBs
YXlvdXQgdGVzdHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4KLSAgICBpZiAoYXR0cmlidXRlVmFsdWUu
aXNFbXB0eSgpICYmIGF0a0F0dHJpYnV0ZU5hbWUgPT0gImFyaWEtaW52YWxpZCIpCi0gICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZmFsc2UiKTsKKyAgICAvLyBU
cnkgb2JqZWN0IGF0dHJpYnV0ZXMgZmlyc3QuCisgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0g
Z2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIE9iamVjdEF0
dHJpYnV0ZVR5cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOwogCi0gICAgLy8gV2UgbmVlZCB0byB0cmFu
c2xhdGUgQVRLIHZhbHVlcyBleHBvc2VkIGZvciAnYXJpYS1zb3J0JyAoZS5nLiAnYXNjZW5kaW5n
JykKLSAgICAvLyBpbnRvIHRob3NlIGV4cGVjdGVkIGJ5IHRoZSBsYXlvdXQgdGVzdHMgKGUuZy4g
J0FYQXNjZW5kaW5nU29ydERpcmVjdGlvbicpLgotICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lID09
ICJzb3J0IikgewotICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUgPT0gImFzY2VuZGluZyIpCi0g
ICAgICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFYQXNjZW5k
aW5nU29ydERpcmVjdGlvbiIpOwotICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUgPT0gImRlc2Nl
bmRpbmciKQotICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJBWERlc2NlbmRpbmdTb3J0RGlyZWN0aW9uIik7Ci0KLSAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBWFVua25vd25Tb3J0RGlyZWN0aW9uIik7Ci0gICAgfQor
ICAgIC8vIFRyeSB0ZXh0IGF0dHJpYnV0ZXMgaWYgdGhlIHJlcXVlc3RlZCBvbmUgd2FzIG5vdCBm
b3VuZCBhbmQgd2UgaGF2ZSBhbiBBdGtUZXh0IG9iamVjdC4KKyAgICBpZiAoYXR0cmlidXRlVmFs
dWUuaXNFbXB0eSgpICYmIEFUS19JU19URVhUKG1fZWxlbWVudCkpCisgICAgICAgIGF0dHJpYnV0
ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudCks
IFRleHRBdHRyaWJ1dGVUeXBlLCBhdGtBdHRyaWJ1dGVOYW1lKTsKIAogICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdHRyaWJ1dGVWYWx1ZS51dGY4KCkuZGF0YSgpKTsK
IH0KQEAgLTk4MCwzMCArMTA2OCwxMiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
QXR0cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKICAgICBpZiAoYXRrQXR0
cmlidXRlTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmlu
ZyBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVCht
X2VsZW1lbnQpLCBhdGtBdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiAh
YXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpOwotfQorICAgIC8vIEZvciBub3csIGFuIGF0dHJpYnV0
ZSBpcyBzdXBwb3J0ZWQgd2hldGhlciBpdCdzIGV4cG9zZWQgYXMgYSBvYmplY3Qgb3IgYSB0ZXh0
IGF0dHJpYnV0ZS4KKyAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRW
YWx1ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgT2JqZWN0QXR0cmlidXRlVHlwZSwgYXRr
QXR0cmlidXRlTmFtZSk7CisgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKKyAgICAg
ICAgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1Qo
bV9lbGVtZW50KSwgVGV4dEF0dHJpYnV0ZVR5cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOwogCi1zdGF0
aWMgdm9pZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQg
ZmFjdG9yKQotewotICAgIGlmICghQVRLX0lTX1ZBTFVFKGVsZW1lbnQpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBHVmFsdWUgY3VycmVudFZhbHVlID0gR19WQUxVRV9JTklUOwotICAgIGF0a192
YWx1ZV9nZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUoZWxlbWVudCksICZjdXJyZW50VmFsdWUp
OwotCi0gICAgR1ZhbHVlIGluY3JlbWVudCA9IEdfVkFMVUVfSU5JVDsKLSAgICBhdGtfdmFsdWVf
Z2V0X21pbmltdW1faW5jcmVtZW50KEFUS19WQUxVRShlbGVtZW50KSwgJmluY3JlbWVudCk7Ci0K
LSAgICBHVmFsdWUgbmV3VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Ci0gICAgZ192YWx1ZV9pbml0KCZu
ZXdWYWx1ZSwgR19UWVBFX0ZMT0FUKTsKLQotICAgIGdfdmFsdWVfc2V0X2Zsb2F0KCZuZXdWYWx1
ZSwgZ192YWx1ZV9nZXRfZmxvYXQoJmN1cnJlbnRWYWx1ZSkgKyBmYWN0b3IgKiBnX3ZhbHVlX2dl
dF9mbG9hdCgmaW5jcmVtZW50KSk7Ci0gICAgYXRrX3ZhbHVlX3NldF9jdXJyZW50X3ZhbHVlKEFU
S19WQUxVRShlbGVtZW50KSwgJm5ld1ZhbHVlKTsKLQotICAgIGdfdmFsdWVfdW5zZXQoJm5ld1Zh
bHVlKTsKLSAgICBnX3ZhbHVlX3Vuc2V0KCZpbmNyZW1lbnQpOwotICAgIGdfdmFsdWVfdW5zZXQo
JmN1cnJlbnRWYWx1ZSk7CisgICAgcmV0dXJuICFhdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCk7CiB9
CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50KCkKQEAgLTExNzYsNyAr
MTI0Niw4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXAoKSBjb25zdAog
ICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJ
ZChBVEtfT0JKRUNUKG1fZWxlbWVudCksICJoYXNwb3B1cCIpLCAidHJ1ZSIpOworICAgIFN0cmlu
ZyBoYXNQb3B1cFZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1f
ZWxlbWVudCksIE9iamVjdEF0dHJpYnV0ZVR5cGUsICJoYXNwb3B1cCIpOworICAgIHJldHVybiBl
cXVhbElnbm9yaW5nQ2FzZShoYXNQb3B1cFZhbHVlLCAidHJ1ZSIpOwogfQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRBdGsuY3BwCmluZGV4IDcxMDEzMjAuLjAxMTcxYzIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRBdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
YXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1z
dW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00NSw0OCArNDYsMTI1IEBACiAKIG5hbWVzcGFjZSBXVFIgewogCi1z
dGF0aWMgU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRy
aWJ1dGUpCituYW1lc3BhY2UgeworCitlbnVtIEF0a0F0dHJpYnV0ZVR5cGUgeworICAgIE9iamVj
dEF0dHJpYnV0ZVR5cGUsCisgICAgVGV4dEF0dHJpYnV0ZVR5cGUKK307CisKK2VudW0gQXR0cmli
dXRlRG9tYWluIHsKKyAgICBDb3JlRG9tYWluID0gMCwKKyAgICBBdGtEb21haW4KK307CisKK2Vu
dW0gQXR0cmlidXRlc0luZGV4IHsKKyAgICAvLyBBdHRyaWJ1dGUgbmFtZXMuCisgICAgSW52YWxp
ZE5hbWVJbmRleCA9IDAsCisgICAgUGxhY2Vob2xkZXJOYW1lSW5kZXgsCisgICAgU29ydE5hbWVJ
bmRleCwKKworICAgIC8vIEF0dHJpYnV0ZSB2YWx1ZXMuCisgICAgU29ydEFzY2VuZGluZ1ZhbHVl
SW5kZXgsCisgICAgU29ydERlc2NlbmRpbmdWYWx1ZUluZGV4LAorICAgIFNvcnRVbmtub3duVmFs
dWVJbmRleCwKKworICAgIE51bWJlck9mQXR0cmlidXRlcworfTsKKworLy8gQXR0cmlidXRlIG5h
bWVzICYgVmFsdWVzIChrZWVwIG9uIHN5bmMgd2l0aCBlbnVtIEF0dHJpYnV0ZXNJbmRleCkuCitj
b25zdCBTdHJpbmcgYXR0cmlidXRlc01hcFtdWzJdID0geworICAgIC8vIEF0dHJpYnV0ZSBuYW1l
cy4KKyAgICB7ICJBWEludmFsaWQiLCAiaW52YWxpZCIgfSwKKyAgICB7ICJBWFBsYWNlaG9sZGVy
VmFsdWUiLCAicGxhY2Vob2xkZXItdGV4dCIgfSAsCisgICAgeyAiQVhTb3J0RGlyZWN0aW9uIiwg
InNvcnQiIH0sCisKKyAgICAvLyBBdHRyaWJ1dGUgdmFsdWVzLgorICAgIHsgIkFYQXNjZW5kaW5n
U29ydERpcmVjdGlvbiIsICJhc2NlbmRpbmciIH0sCisgICAgeyAiQVhEZXNjZW5kaW5nU29ydERp
cmVjdGlvbiIsICJkZXNjZW5kaW5nIiB9LAorICAgIHsgIkFYVW5rbm93blNvcnREaXJlY3Rpb24i
LCAidW5rbm93biIgfQorfTsKKworU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShK
U1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiB7CiAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmlu
Z0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoYXR0cmlidXRlKTsKICAgICBHT3duUHRyPGdjaGFy
PiBidWZmZXIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSkpOwogICAg
IEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoYXR0cmlidXRlLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNp
emUpOwogCiAgICAgU3RyaW5nIGF0dHJpYnV0ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoYnVm
ZmVyLmdldCgpKTsKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWEludmFsaWQiKQotICAg
ICAgICByZXR1cm4gImFyaWEtaW52YWxpZCI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1i
ZXJPZkF0dHJpYnV0ZXM7ICsraSkgeworICAgICAgICBpZiAoYXR0cmlidXRlc01hcFtpXVtDb3Jl
RG9tYWluXSA9PSBhdHRyaWJ1dGVTdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRl
c01hcFtpXVtBdGtEb21haW5dOworICAgIH0KKworICAgIHJldHVybiBhdHRyaWJ1dGVTdHJpbmc7
Cit9CisKK1N0cmluZyBhdGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0ZVZhbHVlKEF0a0F0
dHJpYnV0ZVR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBpZiAodHlwZSA9PSBPYmplY3RBdHRyaWJ1dGVUeXBlKSB7CisgICAgICAgIC8vIFdl
IG5lZWQgdG8gdHJhbnNsYXRlIEFUSyB2YWx1ZXMgZXhwb3NlZCBmb3IgJ2FyaWEtc29ydCcgKGUu
Zy4gJ2FzY2VuZGluZycpCisgICAgICAgIC8vIGludG8gdGhvc2UgZXhwZWN0ZWQgYnkgdGhlIGxh
eW91dCB0ZXN0cyAoZS5nLiAnQVhBc2NlbmRpbmdTb3J0RGlyZWN0aW9uJykuCisgICAgICAgIGlm
IChpZCA9PSBhdHRyaWJ1dGVzTWFwW1NvcnROYW1lSW5kZXhdW0F0a0RvbWFpbl0gJiYgIXZhbHVl
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKHZhbHVlID09IGF0dHJpYnV0ZXNNYXBbU29y
dEFzY2VuZGluZ1ZhbHVlSW5kZXhdW0F0a0RvbWFpbl0pCisgICAgICAgICAgICAgICAgcmV0dXJu
IGF0dHJpYnV0ZXNNYXBbU29ydEFzY2VuZGluZ1ZhbHVlSW5kZXhdW0NvcmVEb21haW5dOworICAg
ICAgICAgICAgaWYgKHZhbHVlID09IGF0dHJpYnV0ZXNNYXBbU29ydERlc2NlbmRpbmdWYWx1ZUlu
ZGV4XVtBdGtEb21haW5dKQorICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzTWFwW1Nv
cnREZXNjZW5kaW5nVmFsdWVJbmRleF1bQ29yZURvbWFpbl07CisKKyAgICAgICAgICAgIHJldHVy
biBhdHRyaWJ1dGVzTWFwW1NvcnRVbmtub3duVmFsdWVJbmRleF1bQ29yZURvbWFpbl07CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gVGV4dEF0dHJpYnV0ZVR5cGUpIHsKKyAgICAg
ICAgLy8gSW4gY2FzZSBvZiAnYXJpYS1pbnZhbGlkJyB3aGVuIHRoZSBhdHRyaWJ1dGUgZW1wdHkg
b3IgaGFzICJmYWxzZSIgZm9yIEFUSworICAgICAgICAvLyBpdCBzaG91bGQgbm90IGJlIG1hcHBl
ZCBhdCBhbGwsIGJ1dCBsYXlvdXQgdGVzdHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4KKyAgICAgICAg
aWYgKGlkID09IGF0dHJpYnV0ZXNNYXBbSW52YWxpZE5hbWVJbmRleF1bQXRrRG9tYWluXSAmJiB2
YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gImZhbHNlIjsKKyAgICB9CisKKyAg
ICByZXR1cm4gdmFsdWU7Cit9CiAKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWFBsYWNl
aG9sZGVyVmFsdWUiKQotICAgICAgICByZXR1cm4gInBsYWNlaG9sZGVyLXRleHQiOwotICAgIAot
ICAgIGlmIChhdHRyaWJ1dGVTdHJpbmcgPT0gIkFYU29ydERpcmVjdGlvbiIpCi0gICAgICAgIHJl
dHVybiAic29ydCI7CitBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldChBdGtPYmplY3Qq
IGFjY2Vzc2libGUsIEF0a0F0dHJpYnV0ZVR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBP
YmplY3RBdHRyaWJ1dGVUeXBlKQorICAgICAgICByZXR1cm4gYXRrX29iamVjdF9nZXRfYXR0cmli
dXRlcyhhY2Nlc3NpYmxlKTsKIAotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAodHlwZSA9
PSBUZXh0QXR0cmlidXRlVHlwZSkgeworICAgICAgICBpZiAoIUFUS19JU19URVhUKGFjY2Vzc2li
bGUpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIGF0a190ZXh0X2dl
dF9kZWZhdWx0X2F0dHJpYnV0ZXMoQVRLX1RFWFQoYWNjZXNzaWJsZSkpOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgU3RyaW5n
IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBjb25zdCBj
aGFyKiBpZCkKK1N0cmluZyBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEF0a09iamVjdCogYWNj
ZXNzaWJsZSwgQXRrQXR0cmlidXRlVHlwZSB0eXBlLCBTdHJpbmcgaWQpCiB7Ci0gICAgY29uc3Qg
Y2hhciogYXR0cmlidXRlVmFsdWUgPSAwOwotICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRl
U2V0ID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhhY2Nlc3NpYmxlKTsKKyAgICBBdGtBdHRy
aWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCA9IGdldEF0dHJpYnV0ZVNldChhY2Nlc3NpYmxlLCB0eXBl
KTsKKyAgICBpZiAoIWF0dHJpYnV0ZVNldCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisg
ICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlOwogICAgIGZvciAoQXRrQXR0cmlidXRlU2V0KiBhdHRy
aWJ1dGVzID0gYXR0cmlidXRlU2V0OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmlidXRl
cy0+bmV4dCkgewogICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0YXRpY19j
YXN0PEF0a0F0dHJpYnV0ZSo+KGF0dHJpYnV0ZXMtPmRhdGEpOwotICAgICAgICBpZiAoIXN0cmNt
cChhdGtBdHRyaWJ1dGUtPm5hbWUsIGlkKSkgewotICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUg
PSBhdGtBdHRyaWJ1dGUtPnZhbHVlOworICAgICAgICBpZiAoaWQgPT0gYXRrQXR0cmlidXRlLT5u
YW1lKSB7CisgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXRr
QXR0cmlidXRlLT52YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0K
LQotICAgIFN0cmluZyBhdGtBdHRyaWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXR0cmli
dXRlVmFsdWUpOwogICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoYXR0cmlidXRlU2V0KTsKIAot
ICAgIHJldHVybiBhdGtBdHRyaWJ1dGVWYWx1ZTsKKyAgICByZXR1cm4gYXRrQXR0cmlidXRlVmFs
dWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZSh0eXBlLCBpZCwgYXR0cmlidXRlVmFsdWUpOwogfQogCi1z
dGF0aWMgU3RyaW5nIGdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKEF0a09iamVjdCogYWNjZXNz
aWJsZSkKK1N0cmluZyBnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhBdGtPYmplY3QqIGFjY2Vz
c2libGUsIEF0a0F0dHJpYnV0ZVR5cGUgdHlwZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSBnZXRBdHRyaWJ1dGVTZXQo
YWNjZXNzaWJsZSwgdHlwZSk7CisgICAgaWYgKCFhdHRyaWJ1dGVTZXQpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAotICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gYXRrX29i
amVjdF9nZXRfYXR0cmlidXRlcyhhY2Nlc3NpYmxlKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CiAgICAgZm9yIChBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTZXQ7
IGF0dHJpYnV0ZXM7IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLT5uZXh0KSB7CiAgICAgICAgIEF0
a0F0dHJpYnV0ZSogYXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4oYXR0cmli
dXRlcy0+ZGF0YSk7CiAgICAgICAgIEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoZ19zdHJj
b25jYXQoYXR0cmlidXRlLT5uYW1lLCAiOiIsIGF0dHJpYnV0ZS0+dmFsdWUsIE5VTEwpKTsKQEAg
LTk5LDcgKzE3Nyw3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0QXRrQXR0cmlidXRlU2V0QXNTdHJpbmco
QXRrT2JqZWN0KiBhY2Nlc3NpYmxlKQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9
CiAKLXN0YXRpYyBib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1l
bnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCitib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRm
b3JtVUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCiB7CiAgICAgaWYg
KCFBVEtfSVNfT0JKRUNUKGVsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMDgsNyArMTg2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tFbGVtZW50U3RhdGUoUGxhdGZvcm1V
SUVsZW1lbnQgZWxlbWVudCwgQXRrU3RhdGVUeXBlIHN0YXRlVHlwZSkKICAgICByZXR1cm4gYXRr
X3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgc3RhdGVUeXBlKTsKIH0K
IAotc3RhdGljIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVtZW50
IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKK0pTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxl
KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKIHsKICAgICBHT3du
UHRyPGdjaGFyPiByYW5nZVN0cmluZyhnX3N0cmR1cCgiezAsIDB9IikpOwogCkBAIC0xNDYsNyAr
MjI0LDcgQEAgc3RhdGljIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlF
bGVtZW50IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOwogfQogCi1zdGF0aWMgdm9pZCBh
bHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFjdG9yKQor
dm9pZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFj
dG9yKQogewogICAgIGlmICghQVRLX0lTX1ZBTFVFKGVsZW1lbnQuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNjgsNyArMjQ2LDcgQEAgc3RhdGljIHZvaWQgYWx0ZXJDdXJyZW50VmFsdWUo
UGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKICAgICBnX3ZhbHVlX3Vuc2V0
KCZjdXJyZW50VmFsdWUpOwogfQogCi1zdGF0aWMgZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJzRm9y
UmVzdWx0cyhnY2hhciogc3RyKQorZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyhn
Y2hhciogc3RyKQogewogICAgIFdURjo6U3RyaW5nIHVTdHJpbmcgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgoc3RyKTsKIApAQCAtMTg0LDcgKzI2Miw3IEBAIHN0YXRpYyBnY2hhciogcmVwbGFjZUNo
YXJhY3RlcnNGb3JSZXN1bHRzKGdjaGFyKiBzdHIpCiAgICAgcmV0dXJuIGdfc3RyZHVwKHVTdHJp
bmcudXRmOCgpLmRhdGEoKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBnY2hhciogcm9sZVRvU3RyaW5n
KEF0a1JvbGUgcm9sZSkKK2NvbnN0IGdjaGFyKiByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQog
ewogICAgIHN3aXRjaCAocm9sZSkgewogICAgIGNhc2UgQVRLX1JPTEVfQUxFUlQ6CkBAIC0yOTgs
NyArMzc2LDcgQEAgc3RhdGljIGNvbnN0IGdjaGFyKiByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xl
KQogICAgIH0KIH0KIAotc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCitTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRl
cjsKIApAQCAtMzQ1LDExICs0MjMsMTMgQEAgc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVt
ZW50KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICAvLyBXZSBhcHBlbmQg
dGhlIEFUSyBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFzIGEgc2luZ2xlIGxpbmUgYXQgdGhlIGVuZC4K
ICAgICBidWlsZGVyLmFwcGVuZCgiQVhQbGF0Zm9ybUF0dHJpYnV0ZXM6ICIpOwotICAgIGJ1aWxk
ZXIuYXBwZW5kKGdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKGVsZW1lbnQtPnBsYXRmb3JtVUlF
bGVtZW50KCkuZ2V0KCkpKTsKKyAgICBidWlsZGVyLmFwcGVuZChnZXRBdGtBdHRyaWJ1dGVTZXRB
c1N0cmluZyhlbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVudCgpLmdldCgpLCBPYmplY3RBdHRyaWJ1
dGVUeXBlKSk7CiAKICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCit9IC8vIG5h
bWVzcGFjZQorCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKIHsK
QEAgLTU3MCwyNyArNjUwLDEzIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlCiAgICAgICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgU3RyaW5nIGF0
a0F0dHJpYnV0ZU5hbWUgPSBjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUoYXR0cmlidXRlKTsK
LSAgICBpZiAoYXRrQXR0cmlidXRlTmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiAKLSAgICBTdHJpbmcgYXR0cmlidXRlVmFs
dWUgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50LmdldCgp
KSwgYXRrQXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAvLyBUcnkgb2JqZWN0IGF0
dHJpYnV0ZXMgZmlyc3QuCisgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRl
U2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIE9iamVjdEF0dHJpYnV0
ZVR5cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOwogCi0gICAgLy8gSW4gY2FzZSBvZiAnYXJpYS1pbnZh
bGlkJyB3aGVuIHRoZSBhdHRyaWJ1dGUgZW1wdHkgb3IgaGFzICJmYWxzZSIgZm9yIEFUSwotICAg
IC8vIGFjY29yZGluZyB0byBodHRwOi8vd3d3LnczLm9yZy9XQUkvUEYvYXJpYS1pbXBsZW1lbnRh
dGlvbi8jbWFwcGluZyBhdHRyaWJ1dGUKLSAgICAvLyBpcyBub3QgbWFwcGVkIGJ1dCBsYXlvdXQg
dGVzdHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4KLSAgICBpZiAoYXR0cmlidXRlVmFsdWUuaXNFbXB0
eSgpICYmIGF0a0F0dHJpYnV0ZU5hbWUgPT0gImFyaWEtaW52YWxpZCIpCi0gICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZmFsc2UiKTsKLQotICAgIC8vIFdlIG5l
ZWQgdG8gdHJhbnNsYXRlIEFUSyB2YWx1ZXMgZXhwb3NlZCBmb3IgJ2FyaWEtc29ydCcgKGUuZy4g
J2FzY2VuZGluZycpCi0gICAgLy8gaW50byB0aG9zZSBleHBlY3RlZCBieSB0aGUgbGF5b3V0IHRl
c3RzIChlLmcuICdBWEFzY2VuZGluZ1NvcnREaXJlY3Rpb24nKS4KLSAgICBpZiAoYXRrQXR0cmli
dXRlTmFtZSA9PSAic29ydCIpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlID09ICJhc2Nl
bmRpbmciKQotICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJBWEFzY2VuZGluZ1NvcnREaXJlY3Rpb24iKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVl
ID09ICJkZXNjZW5kaW5nIikKLSAgICAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQVhEZXNjZW5kaW5nU29ydERpcmVjdGlvbiIpOwotCi0gICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQVhVbmtub3duU29ydERpcmVjdGlvbiIp
OwotICAgIH0KKyAgICAvLyBUcnkgdGV4dCBhdHRyaWJ1dGVzIGlmIHRoZSByZXF1ZXN0ZWQgb25l
IHdhcyBub3QgZm91bmQgYW5kIHdlIGhhdmUgYW4gQXRrVGV4dCBvYmplY3QuCisgICAgaWYgKGF0
dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSAmJiBBVEtfSVNfVEVYVChtX2VsZW1lbnQuZ2V0KCkpKQor
ICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09C
SkVDVChtX2VsZW1lbnQuZ2V0KCkpLCBUZXh0QXR0cmlidXRlVHlwZSwgYXRrQXR0cmlidXRlTmFt
ZSk7CiAKICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXR0cmlidXRl
VmFsdWUudXRmOCgpLmRhdGEoKSk7CiB9CkBAIC02MjgsNyArNjk0LDExIEBAIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmli
dXRlKQogICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFs
dWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIGF0a0F0dHJpYnV0ZU5hbWUudXRm
OCgpLmRhdGEoKSk7CisgICAgLy8gRm9yIG5vdywgYW4gYXR0cmlidXRlIGlzIHN1cHBvcnRlZCB3
aGV0aGVyIGl0J3MgZXhwb3NlZCBhcyBhIG9iamVjdCBvciBhIHRleHQgYXR0cmlidXRlLgorICAg
IFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09C
SkVDVChtX2VsZW1lbnQuZ2V0KCkpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCBhdGtBdHRyaWJ1dGVO
YW1lKTsKKyAgICBpZiAoYXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBhdHRyaWJ1
dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQu
Z2V0KCkpLCBUZXh0QXR0cmlidXRlVHlwZSwgYXRrQXR0cmlidXRlTmFtZSk7CisKICAgICByZXR1
cm4gIWF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKTsKIH0KIApAQCAtODA3LDcgKzg3Nyw3IEBAIGRv
dWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0CiAgICAgLy8gYW4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCwgc28gd2UgY2FuIHJldXNlIHNvbWUgdGVzdHMgdG8gY2hl
Y2sgdGhlIGxldmVsCiAgICAgLy8gYm90aCBmb3IgSFRNTCBoZWFkaW5ncyBhbmQgb2JqZWN0cyB3
aXRoIHRoZSBhcmlhLWxldmVsIGF0dHJpYnV0ZS4KICAgICBpZiAoYXRrX29iamVjdF9nZXRfcm9s
ZShBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpID09IEFUS19ST0xFX0hFQURJTkcpIHsKLSAg
ICAgICAgU3RyaW5nIGhlYWRpbmdMZXZlbCA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRL
X09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpLCAibGV2ZWwiKTsKKyAgICAgICAgU3RyaW5nIGhlYWRp
bmdMZXZlbCA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQu
Z2V0KCkpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCAibGV2ZWwiKTsKICAgICAgICAgYm9vbCBvazsK
ICAgICAgICAgZG91YmxlIGhlYWRpbmdMZXZlbFZhbHVlID0gaGVhZGluZ0xldmVsLnRvRG91Ymxl
KCZvayk7CiAgICAgICAgIGlmIChvaykKQEAgLTEyMTMsNyArMTI4Myw4IEBAIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXAoKSBjb25zdAogICAgIGlmICghQVRLX0lTX09CSkVD
VChtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
ZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1f
ZWxlbWVudC5nZXQoKSksICJoYXNwb3B1cCIpLCAidHJ1ZSIpOworICAgIFN0cmluZyBoYXNQb3B1
cFZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5n
ZXQoKSksIE9iamVjdEF0dHJpYnV0ZVR5cGUsICJoYXNwb3B1cCIpOworICAgIHJldHVybiBlcXVh
bElnbm9yaW5nQ2FzZShoYXNQb3B1cFZhbHVlLCAidHJ1ZSIpOwogfQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCi0tIAoxLjcuMTAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213096</attachid>
            <date>2013-10-01 10:18:39 -0700</date>
            <delta_ts>2013-10-02 09:15:10 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2013-10-01-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>47691</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA5ZGY5ZGM1MzZkYTM4OTYzNjJmMjEyY2YyZGYwOGY2Mzg0YmM1Mzk3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogVHVlLCAxIE9jdCAyMDEzIDE3OjMyOjAxICswMTAwClN1YmplY3Q6IFtQ
QVRDSF0gMjAxMy0xMC0wMSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1
bmcuY29tPgoKICAgICAgICBbQVRLXSBFeHBvc2UgYXJpYS1pbnZhbGlkIGFzIGEgdGV4dCBhdHRy
aWJ1dGUgKG5vdCBvYmplY3QgYXR0cmlidXRlKQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIwMTUKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCgogICAgICAgIEV4cG9zZSB0aGUgYXJpYS1pbnZhbGlkIGF0dHJpYnV0ZSBjb3JyZWN0
bHkgdGhyb3VnaCBhIHRleHQKICAgICAgICBhdHRyaWJ1dGUgKHRocm91Z2ggdGhlIEF0a1RleHQg
aW50ZXJmYWNlKSBpbnN0ZWFkIG9mIHVzaW5nIGFuCiAgICAgICAgb2JqZWN0LCBhY2NvcmRpbmcg
dG8gd2hhdCB0aGUgV0FJLUFSSUEgc3BlY3Mgc2F5cy4KICAgICAgICBodHRwOi8vd3d3LnczLm9y
Zy9UUi93YWktYXJpYS1pbXBsZW1lbnRhdGlvbi8jbWFwcGluZ19zdGF0ZS1wcm9wZXJ0eQoKICAg
ICAgICBUaGlzIHdpbGwgYmUgdGVzdGVkIGJ5IGFjY2VzaWJpbGl0eS9hcmlhLWludmFsaWQuaHRt
bCwgd2hpY2ggc2hvdWxkCiAgICAgICAga2VlcCBwYXNzaW5nIGFmdGVyIHRoYW5rcyB0byB0aGUg
Y2hhbmdlcyBkb25lIGluIHRoZSBEUlQgYW5kIFdLVFIuCgogICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aW52YWxpZFN0YXR1cyk6IFVwZGF0ZSB0aGlzIG1ldGhvZAogICAgICAgIHRvIG9u
bHkgcmV0dXJuIHZhbHVlcyByZWNvZ25pemVkIGJ5IHRoZSBXQUktQVJJQSBzcGVjaWZpY2F0aW9u
LgoKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
ZXh0LmNwcDoKICAgICAgICAoZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6
IEV4cG9zZSBhcmlhLWludmFsaWQgYXMgYQogICAgICAgIGN1c3RvbSB0ZXh0IGF0dHJpYnV0ZSAn
aW52YWxpZCcsIGZvbGxvd2luZyB0aGUgbGVhZCBvZiBGaXJlZm94LgogICAgICAgIEFsc28gcmVn
aXN0ZXIgdGhhdCBjdXN0b20gYXR0cmlidXRlIGFzIGEgQXRrVGV4dEF0dHJpYnV0ZS4KICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMpOiBSZW1vdmUgZXhwb3N1cmUgb2Yg
YXJpYS1pbnZhbGlkCiAgICAgICAgYXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSBmcm9tIGhlcmUuCgoy
MDEzLTEwLTAxICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+
CgogICAgICAgIFtBVEtdIEV4cG9zZSBhcmlhLWludmFsaWQgYXMgYSB0ZXh0IGF0dHJpYnV0ZSAo
bm90IG9iamVjdCBhdHRyaWJ1dGUpCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMjAxNQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
CiAgICAgICAgQWRhcHRlZCBEUlQgYW5kIFdLVFIgdG8gY2hlY2sgdGhlIGV4cG9zdXJlIG9mIHRo
ZSBhcmlhLWludmFsaWQKICAgICAgICBhdHRyaWJ1dGUgYXMgYSB0ZXh0IGF0dHJpYnV0ZSwgaW5z
dGVhZCBvZiBhbiBvYmplY3QgYXR0cmlidXRlLgoKICAgICAgICBBbHNvLCBkb25lIHNvbWUgcmVm
YWN0b3Jpbmcgb2YgdGhlIGNvZGUgdG8gdHJ5IHRvIGtlZXAgdGhpbmdzCiAgICAgICAgc2ltcGxl
ciBhbmQgbW9yZSBjb2hlcmVudCwgYnkgZGVmaW5pbmcgbmV3IGhlbHBlciBmdW5jdGlvbnMsCiAg
ICAgICAgc2ltcGxpZnlpbmcgY29kZSwgbW92aW5nIHN0YXRpYyB2YXJpYWJsZXMgYW5kIGZ1bmN0
aW9ucyBpbnRvCiAgICAgICAgdW5uYW1tZWQgbmFtZXNwYWNlcyBhbmQgc28gb24sIHdpdGhvdXQg
YWx0ZXJpbmcgdGhlIGxvZ2ljIG90aGVyCiAgICAgICAgdGhhbiBmb3IgY2hlY2tpbmcgdGhlIHRl
eHQgYXR0cmlidXRlIGZvciBhcmlhLWludmFsaWQuCgogICAgICAgICogRHVtcFJlbmRlclRyZWUv
YXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgogICAgICAgIChjb3JlQXR0cmlidXRl
VG9BdGtBdHRyaWJ1dGUpOiBDb25zaWRlciAnaW52YWxpZCcgYXMgdGhlIG5hbWUgb2YKICAgICAg
ICB0aGUgYXR0cmlidXRlIGV4cG9zZWQgYnkgdGhlIEFUSyB3cmFwcGVyLCBub3QgJ2FyaWEtaW52
YWxpZCcuCiAgICAgICAgQWxzbywgbmV2ZXIgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBpZiBub3Qg
ZmFsbGluZyB0aHJvdWdoIGFueSBvZgogICAgICAgIHRoZSBjYXNlcyBjaGVja2VkIGhlcmUsIGFu
ZCByZXR1cm4gdGhlIG9yaWdpbmFsIGF0dHJpYnV0ZSBpbnN0ZWFkLgogICAgICAgIChhdGtBdHRy
aWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0ZVZhbHVlKTogTmV3IGhlbHBlciBmdW5jdGlvbiB0bwog
ICAgICAgIG1hdGNoIHRoZSBhdHRyaWJ1dGVzIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgQVRLIHdy
YXBwZXIgd2l0aCB0aGUKICAgICAgICB2YWx1ZXMgZXhwZWN0ZWQgYnkgdGhlIGxheW91dCB0ZXN0
cy4gTW92ZWQgdGhlIG1hcHBpbmdzIGZvciB0aGUKICAgICAgICB2YWx1ZXMgb2YgQVhTb3J0RGly
ZWN0aW9uIGhlcmUgYXMgd2VsbC4KICAgICAgICAoZ2V0QXR0cmlidXRlU2V0KTogTmV3IGhlbHBl
ciBmdW5jdGlvbiB0byByZXRyaWV2ZSBhIGxpc3Qgb2YKICAgICAgICBhdHRyaWJ1dGVzIChhbiBB
dGtBdHRyaWJ1dGVTZXQpIGZyb20gYW4gQXRrT2JqZWN0IHVzaW5nIHRoZSByaWdodAogICAgICAg
IEFQSSBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSB3YW50IHRoZSBvYmplY3QgYXR0cmlidXRlcyBv
ciB0aGUgdGV4dAogICAgICAgIGF0dHJpYnV0ZXMgKGluIGNhc2UgdGhlIG9iamVjdCBpbXBsZW1l
bnRzIEF0a1RleHQpLgogICAgICAgIChnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKTogU2ltcGxp
ZmllZCBieSB1c2luZyBnZXRBdHRyaWJ1dGVTZXQKICAgICAgICBhbmQgYXRrQXR0cmlidXRlVmFs
dWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZS4gQWxzbywgYWRkZWQgYSBuZXcKICAgICAgICBwYXJhbWV0
ZXIgdG8gaW5kaWNhdGVyIHdoZXRoZXIgd2UgYXJlIGludGVyZXN0ZWQgaW4gb2JqZWN0CiAgICAg
ICAgYXR0cmlidXRlcyBvciB0ZXh0IGF0dHJpYnV0ZXMuCiAgICAgICAgKGdldEF0a0F0dHJpYnV0
ZVNldEFzU3RyaW5nKTogRGl0dG8uCiAgICAgICAgKGF0dHJpYnV0ZXNPZkVsZW1lbnQpOiBVcGRh
dGVkIHRvIHBhc3MgdGhlIG5ldyByZXF1aXJlZCBwYXJhbWV0ZXIKICAgICAgICB0byBnZXRBdGtB
dHRyaWJ1dGVTZXRBc1N0cmluZywgaW5kaWNhdGluZyB0aGF0IHdlIHdhbnQgdGhlIG9iamVjdAog
ICAgICAgIGF0dHJpYnV0ZXMgaW4gdGhpcyBjYXNlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxp
dHkuCiAgICAgICAgKGluZGV4UmFuZ2VJblRhYmxlKTogTW92ZWQgdXAgaW4gdGhlIGZpbGUgaW50
byB0aGUgdW5uYW1tZWQgbmFtZXNwYWNlLgogICAgICAgIChhbHRlckN1cnJlbnRWYWx1ZSk6IERp
dHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1
ZSk6IEFmdGVyIG1vdmluZyBtb3N0CiAgICAgICAgb2YgdGhlIGNvZGUgaGVyZSB0byB0aGUgbmV3
IGhlbHBlciBmdW5jdGlvbnMsIHNpbXBsaWZpZWQgaXQgYnkKICAgICAgICBqdXN0IGNoZWNraW5n
IHdoZXRoZXIgdGhlIHJlcXVpcmVkIGF0dHJpYnV0ZSBpcyBwcm92aWRlZCBhcyBhbgogICAgICAg
IG9iamVjdCBhdHRyaWJ1dGUgb3IsIGlmIHRoYXQncyBub3QgdGhlIGNhc2UsIGFzIGEgdGV4dCBh
dHRyaWJ1dGUuCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3Vw
cG9ydGVkKTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVl
KTogVXBkYXRlZCB0byBwYXNzIHRoZSBuZXcKICAgICAgICByZXF1aXJlZCBwYXJhbWV0ZXIgdG8g
Z2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZCwgaW5kaWNhdGluZyB0aGF0CiAgICAgICAgd2Ugd2Fu
dCB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgaW4gdGhpcyBjYXNlLgogICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpoYXNQb3B1cCk6IERpdHRvLgoKICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgogICAg
ICAgIChXVFI6OmNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZSk6IFNhbWUgY2hhbmdlcyB0aGFu
IGZvciBEUlQuCiAgICAgICAgKFdUUjo6YXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVW
YWx1ZSk6IERpdHRvLgogICAgICAgIChXVFI6OmdldEF0dHJpYnV0ZVNldCk6IERpdHRvLgogICAg
ICAgIChXVFI6OmdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQpOiBEaXR0by4KICAgICAgICAoV1RS
OjpnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyk6IERpdHRvLgogICAgICAgIChXVFI6OmF0dHJp
YnV0ZXNPZkVsZW1lbnQpOiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKTogRGl0dG8uCiAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUpOiBEaXR0by4KICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCk6IERpdHRvLgoKMjAxMy0xMC0wMSAg
TWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29tPgoKICAgICAgICBb
QVRLXSBFeHBvc2UgYXJpYS1pbnZhbGlkIGFzIGEgdGV4dCBhdHRyaWJ1dGUgKG5vdCBvYmplY3Qg
YXR0cmlidXRlKQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjIwMTUKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFVw
ZGF0ZWQgdGhlIGFyaWEtaW52YWxpZC5odG1sIGxheW91dCB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGF0
IGl0CiAgICAgICAgYmVoYXZlcyBhcyBkZWZpbmVkIGJ5IHRoZSBXQUktQVJJQSBzcGVjaWZpY2F0
aW9uIGZvciB2YWx1ZXMgb3RoZXIKICAgICAgICB0aGFuICdmYWxzZScsICd0cnVlJywgJ2dyYW1t
YXInIGFuZCAnc3BlbGxpbmcnLgoKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXJpYS1pbnZhbGlk
Lmh0bWw6IFVwZGF0ZWQgdGVzdC4KICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXJpYS1pbnZhbGlk
LWV4cGVjdGVkLnR4dDogVXBkYXRlZCBleHBlY3RhdGlvbnMuCi0tLQogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICsKIC4uLi9hY2Nlc3Np
YmlsaXR5L2FyaWEtaW52YWxpZC1leHBlY3RlZC50eHQgICAgICAgIHwgICAgNSArLQogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLWludmFsaWQuaHRtbCAgICAgICAgfCAgIDIwICstCiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjcg
KysKIC4uLi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgIHwg
ICAxMyArLQogLi4uL2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgICAgICAg
ICAgfCAgIDE0ICsKIC4uLi9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwICAgICAg
ICAgICAgIHwgICAgNCAtCiBUb29scy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgNjEgKysrKysKIC4uLi9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0
ay5jcHAgICAgICAgICAgICAgIHwgIDI4MyArKysrKysrKysrKystLS0tLS0tLQogLi4uL2F0ay9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCAgICAgICAgICAgICAgfCAgMTY5ICsrKysrKysr
LS0tLQogMTAgZmlsZXMgY2hhbmdlZCwgNDQzIGluc2VydGlvbnMoKyksIDE2NyBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggZTQ5NjdkMC4uMWFmOWY2ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEz
LTEwLTAxICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CisK
KyAgICAgICAgW0FUS10gRXhwb3NlIGFyaWEtaW52YWxpZCBhcyBhIHRleHQgYXR0cmlidXRlIChu
b3Qgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMjAxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZWQgdGhlIGFyaWEtaW52YWxpZC5odG1sIGxheW91dCB0ZXN0IHRv
IG1ha2Ugc3VyZSB0aGF0IGl0CisgICAgICAgIGJlaGF2ZXMgYXMgZGVmaW5lZCBieSB0aGUgV0FJ
LUFSSUEgc3BlY2lmaWNhdGlvbiBmb3IgdmFsdWVzIG90aGVyCisgICAgICAgIHRoYW4gJ2ZhbHNl
JywgJ3RydWUnLCAnZ3JhbW1hcicgYW5kICdzcGVsbGluZycuCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2FyaWEtaW52YWxpZC5odG1sOiBVcGRhdGVkIHRlc3QuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9hcmlhLWludmFsaWQtZXhwZWN0ZWQudHh0OiBVcGRhdGVkIGV4cGVjdGF0aW9ucy4K
KwogMjAxMy0xMC0wMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgog
CiAgICAgICAgIENlbnRlciBtaXNzcGVsbGluZyBkb3RzIGFjcm9zcyB3aWR0aCBvZiB3b3JkCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaW52YWxpZC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaW52YWxpZC1leHBlY3RlZC50
eHQKaW5kZXggYjkxZDUyNS4uOGNmMDk5NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9hcmlhLWludmFsaWQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvYXJpYS1pbnZhbGlkLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKLSAgIAor
ICAgICAgCiBUaGlzIHRlc3RzIHRoYXQgYXJpYS1pbnZhbGlkIGNhdXNlcyB0aGUgcmlnaHQgYXR0
cmlidXRlIHRvIGJlIHJldHVybmVkIGFuZCBpdCBlbnN1cmVzIGEgbm90aWZpY2F0aW9uIGlzIHNl
bnQgd2hlbiBpdCBjaGFuZ2VzLgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCkBAIC02LDYg
KzYsOSBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogCiBQQVNTIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ0F0dHJpYnV0ZVZhbHVlKCdBWEludmFsaWQnKSBp
cyAndHJ1ZScKIFBBU1MgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQuc3Ry
aW5nQXR0cmlidXRlVmFsdWUoJ0FYSW52YWxpZCcpIGlzICdncmFtbWFyJworUEFTUyBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5zdHJpbmdBdHRyaWJ1dGVWYWx1ZSgnQVhJ
bnZhbGlkJykgaXMgJ3NwZWxsaW5nJworUEFTUyBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1
c2VkRWxlbWVudC5zdHJpbmdBdHRyaWJ1dGVWYWx1ZSgnQVhJbnZhbGlkJykgaXMgJ3RydWUnCitQ
QVNTIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ0F0dHJpYnV0
ZVZhbHVlKCdBWEludmFsaWQnKSBpcyAnZmFsc2UnCiBQQVNTIGFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ0F0dHJpYnV0ZVZhbHVlKCdBWEludmFsaWQnKSBpcyAn
ZmFsc2UnCiBQQVNTIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKCdBWEludmFsaWQnKSBpcyAnZmFsc2UnCiBQQVNTIGFkZGVkTm90aWZp
Y2F0aW9uIGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJp
YS1pbnZhbGlkLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaW52YWxpZC5o
dG1sCmluZGV4IDYxMThkNzUuLjg5YzY2ZDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvYXJpYS1pbnZhbGlkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9hcmlhLWludmFsaWQuaHRtbApAQCAtOCw4ICs4LDExIEBACiAKIDxpbnB1dCB0eXBlPSJ0ZXh0
IiBpZD0idGV4dDEiIGFyaWEtaW52YWxpZD0idHJ1ZSI+CiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9
InRleHQyIiBhcmlhLWludmFsaWQ9ImdyYW1tYXIiPgotPGlucHV0IHR5cGU9InRleHQiIGlkPSJ0
ZXh0MyIgYXJpYS1pbnZhbGlkPSIiPgotPGlucHV0IHR5cGU9InRleHQiIGlkPSJ0ZXh0NCI+Cis8
aW5wdXQgdHlwZT0idGV4dCIgaWQ9InRleHQzIiBhcmlhLWludmFsaWQ9InNwZWxsaW5nIj4KKzxp
bnB1dCB0eXBlPSJ0ZXh0IiBpZD0idGV4dDQiIGFyaWEtaW52YWxpZD0ibm90YWxsb3dlZCI+Cis8
aW5wdXQgdHlwZT0idGV4dCIgaWQ9InRleHQ1IiBhcmlhLWludmFsaWQ9ImZhbHNlIj4KKzxpbnB1
dCB0eXBlPSJ0ZXh0IiBpZD0idGV4dDYiIGFyaWEtaW52YWxpZD0iIj4KKzxpbnB1dCB0eXBlPSJ0
ZXh0IiBpZD0idGV4dDciPgogCiA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KIDxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgpAQCAtMzgsMTYgKzQxLDI1IEBACiAgICAgICAgIHNob3VsZEJlKCJhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5zdHJpbmdBdHRyaWJ1dGVWYWx1ZSgn
QVhJbnZhbGlkJykiLCAiJ2dyYW1tYXInIik7CiAKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInRleHQzIikuZm9jdXMoKTsKLSAgICAgICAgc2hvdWxkQmUoImFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ0F0dHJpYnV0ZVZhbHVlKCdBWEludmFsaWQn
KSIsICInZmFsc2UnIik7CisgICAgICAgIHNob3VsZEJlKCJhY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5mb2N1c2VkRWxlbWVudC5zdHJpbmdBdHRyaWJ1dGVWYWx1ZSgnQVhJbnZhbGlkJykiLCAiJ3Nw
ZWxsaW5nJyIpOwogCiAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0NCIpLmZv
Y3VzKCk7CisgICAgICAgIHNob3VsZEJlKCJhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2Vk
RWxlbWVudC5zdHJpbmdBdHRyaWJ1dGVWYWx1ZSgnQVhJbnZhbGlkJykiLCAiJ3RydWUnIik7CisK
KyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQ1IikuZm9jdXMoKTsKKyAgICAg
ICAgc2hvdWxkQmUoImFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKCdBWEludmFsaWQnKSIsICInZmFsc2UnIik7CisKKyAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQ2IikuZm9jdXMoKTsKKyAgICAgICAgc2hvdWxkQmUo
ImFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ0F0dHJpYnV0ZVZh
bHVlKCdBWEludmFsaWQnKSIsICInZmFsc2UnIik7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInRleHQ3IikuZm9jdXMoKTsKICAgICAgICAgc2hvdWxkQmUoImFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ0F0dHJpYnV0ZVZhbHVlKCdBWEludmFs
aWQnKSIsICInZmFsc2UnIik7CiAKICAgICAgICAgbm90aWZpY2F0aW9uRWxlbWVudCA9IGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OwogICAgICAgICB2YXIgYWRkZWROb3Rp
ZmljYXRpb24gPSBub3RpZmljYXRpb25FbGVtZW50LmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKG5v
dGlmaWNhdGlvbkNhbGxiYWNrKTsKICAgICAgICAgc2hvdWxkQmVUcnVlKCJhZGRlZE5vdGlmaWNh
dGlvbiIpOwogCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0NCIpLnNldEF0
dHJpYnV0ZSgiYXJpYS1pbnZhbGlkIiwgInNwZWxsaW5nIik7CisgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0ZXh0NyIpLnNldEF0dHJpYnV0ZSgiYXJpYS1pbnZhbGlkIiwgInNwZWxs
aW5nIik7CiAgICAgfQogCiA8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjZmY5YzczLi43ZjgyNjEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTMtMTAtMDEgIE1hcmlvIFNhbmNoZXog
UHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbQVRLXSBFeHBvc2Ug
YXJpYS1pbnZhbGlkIGFzIGEgdGV4dCBhdHRyaWJ1dGUgKG5vdCBvYmplY3QgYXR0cmlidXRlKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMDE1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3NlIHRo
ZSBhcmlhLWludmFsaWQgYXR0cmlidXRlIGNvcnJlY3RseSB0aHJvdWdoIGEgdGV4dAorICAgICAg
ICBhdHRyaWJ1dGUgKHRocm91Z2ggdGhlIEF0a1RleHQgaW50ZXJmYWNlKSBpbnN0ZWFkIG9mIHVz
aW5nIGFuCisgICAgICAgIG9iamVjdCwgYWNjb3JkaW5nIHRvIHdoYXQgdGhlIFdBSS1BUklBIHNw
ZWNzIHNheXMuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLWltcGxlbWVu
dGF0aW9uLyNtYXBwaW5nX3N0YXRlLXByb3BlcnR5CisKKyAgICAgICAgVGhpcyB3aWxsIGJlIHRl
c3RlZCBieSBhY2Nlc2liaWxpdHkvYXJpYS1pbnZhbGlkLmh0bWwsIHdoaWNoIHNob3VsZAorICAg
ICAgICBrZWVwIHBhc3NpbmcgYWZ0ZXIgdGhhbmtzIHRvIHRoZSBjaGFuZ2VzIGRvbmUgaW4gdGhl
IERSVCBhbmQgV0tUUi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbnZhbGlk
U3RhdHVzKTogVXBkYXRlIHRoaXMgbWV0aG9kCisgICAgICAgIHRvIG9ubHkgcmV0dXJuIHZhbHVl
cyByZWNvZ25pemVkIGJ5IHRoZSBXQUktQVJJQSBzcGVjaWZpY2F0aW9uLgorCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAg
ICAgICAoZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6IEV4cG9zZSBhcmlh
LWludmFsaWQgYXMgYQorICAgICAgICBjdXN0b20gdGV4dCBhdHRyaWJ1dGUgJ2ludmFsaWQnLCBm
b2xsb3dpbmcgdGhlIGxlYWQgb2YgRmlyZWZveC4KKyAgICAgICAgQWxzbyByZWdpc3RlciB0aGF0
IGN1c3RvbSBhdHRyaWJ1dGUgYXMgYSBBdGtUZXh0QXR0cmlidXRlLgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVHZXRBdHRyaWJ1dGVzKTogUmVtb3ZlIGV4cG9zdXJlIG9mIGFyaWEtaW52
YWxpZAorICAgICAgICBhcyBhbiBvYmplY3QgYXR0cmlidXRlIGZyb20gaGVyZS4KKwogMjAxMy0x
MC0wMSAgU3phYm9sY3MgRMOhdmlkICA8ZGF2aWRzekBpbmYudS1zemVnZWQuaHU+CiAKICAgICAg
ICAgUmVuYW1lIFVSTCB0eXBlIHZhcmlhYmxlcyBpbiBDdXJsIG5ldHdvcmsgYmFja2VuZC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCmluZGV4IDEzZGE4MDAuLmE1YTU2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMTM0MywxNSArMTM0Mywy
MiBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFJc011bHRpbGluZSgpIGNvbnN0CiBj
b25zdCBBdG9taWNTdHJpbmcmIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmludmFsaWRTdGF0dXMoKSBj
b25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBpbnZh
bGlkU3RhdHVzRmFsc2UsICgiZmFsc2UiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGludmFs
aWRTdGF0dXNUcnVlLCAoInRydWUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGludmFsaWRT
dGF0dXNTcGVsbGluZywgKCJzcGVsbGluZyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaW52
YWxpZFN0YXR1c0dyYW1tYXIsICgiZ3JhbW1hciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKICAgICAKICAgICAvLyBhcmlhLWludmFsaWQgY2FuIHJldHVybiBmYWxzZSAo
ZGVmYXVsdCksIGdyYW1tZXIsIHNwZWxsaW5nLCBvciB0cnVlLgogICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgYXJpYUludmFsaWQgPSBnZXRBdHRyaWJ1dGUoYXJpYV9pbnZhbGlkQXR0cik7CiAgICAg
Ci0gICAgLy8gSWYgZW1wdHkgb3Igbm90IHByZXNlbnQsIGl0IHNob3VsZCByZXR1cm4gZmFsc2Uu
Ci0gICAgaWYgKGFyaWFJbnZhbGlkLmlzRW1wdHkoKSkKKyAgICAvLyBJZiAnZmFsc2UnLCBlbXB0
eSBvciBub3QgcHJlc2VudCwgaXQgc2hvdWxkIHJldHVybiBmYWxzZS4KKyAgICBpZiAoYXJpYUlu
dmFsaWQuaXNFbXB0eSgpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGFyaWFJbnZhbGlkLCBpbnZhbGlk
U3RhdHVzRmFsc2UpKQogICAgICAgICByZXR1cm4gaW52YWxpZFN0YXR1c0ZhbHNlOwogICAgIAot
ICAgIHJldHVybiBhcmlhSW52YWxpZDsKKyAgICAvLyBPbmx5ICd0cnVlJywgJ2dyYW1tYXInIGFu
ZCAnc3BlbGxpbmcnIGFyZSB2YWx1ZXMgcmVjb2duaXNlZCBieSB0aGUgV0FJLUFSSUEKKyAgICAv
LyBzcGVjaWZpY2F0aW9uLiBBbnkgb3RoZXIgbm9uIGVtcHR5IHN0cmluZyBzaG91bGQgYmUgdHJl
YXRlZCBhcyAndHJ1ZScuCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFyaWFJbnZhbGlkLCBp
bnZhbGlkU3RhdHVzU3BlbGxpbmcpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGFyaWFJbnZhbGlkLCBp
bnZhbGlkU3RhdHVzR3JhbW1hcikpCisgICAgICAgIHJldHVybiBhcmlhSW52YWxpZDsKKyAgICBy
ZXR1cm4gaW52YWxpZFN0YXR1c1RydWU7CiB9CiAgCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6
Omhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKaW5kZXggN2Y0MTYwYi4uMzVmZTFkMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtNTYsNiArNTYsMTEgQEAKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKy8vIFRleHQgYXR0cmlidXRlIHRvIGV4cG9zZSB0
aGUgQVJJQSAnYXJpYS1pbnZhbGlkJyBhdHRyaWJ1dGUuIEluaXRpYWxseSBpbml0aWFsaXplZAor
Ly8gdG8gQVRLX1RFWFRfQVRUUl9JTlZBTElEICh3aGljaCBtZWFucyAnaW52YWxpZCcgdGV4dCBh
dHRyaWJ1dGUnKSwgd2lsbCBsYXRlciBvbgorLy8gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgY3Vz
dG9tIHJlZ2lzdGVyZWQgQXRrVGV4dEF0dHJpYnV0ZSB0aGF0IHdlIHdpbGwgdXNlLgorc3RhdGlj
IEF0a1RleHRBdHRyaWJ1dGUgYXRrVGV4dEF0dHJpYnV0ZUludmFsaWQgPSBBVEtfVEVYVF9BVFRS
X0lOVkFMSUQ7CisKIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a1RleHQqIHRl
eHQpCiB7CiAgICAgaWYgKCFXRUJLSVRfSVNfQUNDRVNTSUJMRSh0ZXh0KSkKQEAgLTI5NCw2ICsy
OTksMTUgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNz
aWJpbGl0eU9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXQKICAgICBpZiAoIWxhbmd1YWdlLmlzRW1w
dHkoKSkKICAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtf
dGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9MQU5HVUFHRSksIGxhbmd1YWdl
LnV0ZjgoKS5kYXRhKCkpOwogCisgICAgU3RyaW5nIGludmFsaWRTdGF0dXMgPSBvYmplY3QtPmlu
dmFsaWRTdGF0dXMoKS5zdHJpbmcoKTsKKyAgICBpZiAoIWludmFsaWRTdGF0dXMuaXNFbXB0eSgp
ICYmIGludmFsaWRTdGF0dXMgIT0gImZhbHNlIikgeworICAgICAgICAvLyBSZWdpc3RlciB0aGUg
Y3VzdG9tIGF0dHJpYnV0ZSBmb3IgJ2FyaWEtaW52YWxpZCcgaWYgbm90IGRvbmUgeWV0LgorICAg
ICAgICBpZiAoYXRrVGV4dEF0dHJpYnV0ZUludmFsaWQgPT0gQVRLX1RFWFRfQVRUUl9JTlZBTElE
KQorICAgICAgICAgICAgYXRrVGV4dEF0dHJpYnV0ZUludmFsaWQgPSBhdGtfdGV4dF9hdHRyaWJ1
dGVfcmVnaXN0ZXIoImludmFsaWQiKTsKKworICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJp
YnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShhdGtUZXh0QXR0cmli
dXRlSW52YWxpZCksIGludmFsaWRTdGF0dXMudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCmluZGV4IGFk
ODhiZGEuLmRiMWY2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKQEAgLTUwNSwx
MCArNTA1LDYgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZUdldEF0
dHJpYnV0ZXMoQXRrT2JqZWN0KiBvYmplY3QpCiAgICAgaWYgKGNvcmVPYmplY3QtPmFyaWFIYXNQ
b3B1cCgpKQogICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRy
aWJ1dGVTZXQsICJoYXNwb3B1cCIsICJ0cnVlIik7CiAKLSAgICBTdHJpbmcgaW52YWxpZFN0YXR1
cyA9IGNvcmVPYmplY3QtPmludmFsaWRTdGF0dXMoKS5zdHJpbmcoKTsKLSAgICBpZiAoIWludmFs
aWRTdGF0dXMuaXNFbXB0eSgpICYmIGludmFsaWRTdGF0dXMgIT0gImZhbHNlIikKLSAgICAgICAg
YXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAiYXJpYS1p
bnZhbGlkIiwgY29yZU9iamVjdC0+aW52YWxpZFN0YXR1cygpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwotCiAgICAgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb24gc29ydERpcmVjdGlvbiA9IGNv
cmVPYmplY3QtPnNvcnREaXJlY3Rpb24oKTsKICAgICBpZiAoc29ydERpcmVjdGlvbiAhPSBTb3J0
RGlyZWN0aW9uTm9uZSkgewogICAgICAgICAvLyBXQUktQVJJQSBzcGVjIHNheXMgdG8gdHJhbnNs
YXRlIHRoZSB2YWx1ZSBhcyBpcyBmcm9tIHRoZSBhdHRyaWJ1dGUuCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTNmNmIwOC4uZDhkZmZlYyAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDY0IEBACisyMDEzLTEwLTAxICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ft
c3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gRXhwb3NlIGFyaWEtaW52YWxpZCBhcyBhIHRleHQg
YXR0cmlidXRlIChub3Qgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjAxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkYXB0ZWQgRFJUIGFuZCBXS1RSIHRvIGNoZWNrIHRo
ZSBleHBvc3VyZSBvZiB0aGUgYXJpYS1pbnZhbGlkCisgICAgICAgIGF0dHJpYnV0ZSBhcyBhIHRl
eHQgYXR0cmlidXRlLCBpbnN0ZWFkIG9mIGFuIG9iamVjdCBhdHRyaWJ1dGUuCisKKyAgICAgICAg
QWxzbywgZG9uZSBzb21lIHJlZmFjdG9yaW5nIG9mIHRoZSBjb2RlIHRvIHRyeSB0byBrZWVwIHRo
aW5ncworICAgICAgICBzaW1wbGVyIGFuZCBtb3JlIGNvaGVyZW50LCBieSBkZWZpbmluZyBuZXcg
aGVscGVyIGZ1bmN0aW9ucywKKyAgICAgICAgc2ltcGxpZnlpbmcgY29kZSwgbW92aW5nIHN0YXRp
YyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBpbnRvCisgICAgICAgIHVubmFtbWVkIG5hbWVzcGFj
ZXMgYW5kIHNvIG9uLCB3aXRob3V0IGFsdGVyaW5nIHRoZSBsb2dpYyBvdGhlcgorICAgICAgICB0
aGFuIGZvciBjaGVja2luZyB0aGUgdGV4dCBhdHRyaWJ1dGUgZm9yIGFyaWEtaW52YWxpZC4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNw
cDoKKyAgICAgICAgKGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZSk6IENvbnNpZGVyICdpbnZh
bGlkJyBhcyB0aGUgbmFtZSBvZgorICAgICAgICB0aGUgYXR0cmlidXRlIGV4cG9zZWQgYnkgdGhl
IEFUSyB3cmFwcGVyLCBub3QgJ2FyaWEtaW52YWxpZCcuCisgICAgICAgIEFsc28sIG5ldmVyIHJl
dHVybiBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IGZhbGxpbmcgdGhyb3VnaCBhbnkgb2YKKyAgICAg
ICAgdGhlIGNhc2VzIGNoZWNrZWQgaGVyZSwgYW5kIHJldHVybiB0aGUgb3JpZ2luYWwgYXR0cmli
dXRlIGluc3RlYWQuCisgICAgICAgIChhdGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0ZVZh
bHVlKTogTmV3IGhlbHBlciBmdW5jdGlvbiB0bworICAgICAgICBtYXRjaCB0aGUgYXR0cmlidXRl
cyB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIEFUSyB3cmFwcGVyIHdpdGggdGhlCisgICAgICAgIHZh
bHVlcyBleHBlY3RlZCBieSB0aGUgbGF5b3V0IHRlc3RzLiBNb3ZlZCB0aGUgbWFwcGluZ3MgZm9y
IHRoZQorICAgICAgICB2YWx1ZXMgb2YgQVhTb3J0RGlyZWN0aW9uIGhlcmUgYXMgd2VsbC4KKyAg
ICAgICAgKGdldEF0dHJpYnV0ZVNldCk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gdG8gcmV0cmlldmUg
YSBsaXN0IG9mCisgICAgICAgIGF0dHJpYnV0ZXMgKGFuIEF0a0F0dHJpYnV0ZVNldCkgZnJvbSBh
biBBdGtPYmplY3QgdXNpbmcgdGhlIHJpZ2h0CisgICAgICAgIEFQSSBkZXBlbmRpbmcgb24gd2hl
dGhlciB3ZSB3YW50IHRoZSBvYmplY3QgYXR0cmlidXRlcyBvciB0aGUgdGV4dAorICAgICAgICBh
dHRyaWJ1dGVzIChpbiBjYXNlIHRoZSBvYmplY3QgaW1wbGVtZW50cyBBdGtUZXh0KS4KKyAgICAg
ICAgKGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQpOiBTaW1wbGlmaWVkIGJ5IHVzaW5nIGdldEF0
dHJpYnV0ZVNldAorICAgICAgICBhbmQgYXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVW
YWx1ZS4gQWxzbywgYWRkZWQgYSBuZXcKKyAgICAgICAgcGFyYW1ldGVyIHRvIGluZGljYXRlciB3
aGV0aGVyIHdlIGFyZSBpbnRlcmVzdGVkIGluIG9iamVjdAorICAgICAgICBhdHRyaWJ1dGVzIG9y
IHRleHQgYXR0cmlidXRlcy4KKyAgICAgICAgKGdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKTog
RGl0dG8uCisgICAgICAgIChhdHRyaWJ1dGVzT2ZFbGVtZW50KTogVXBkYXRlZCB0byBwYXNzIHRo
ZSBuZXcgcmVxdWlyZWQgcGFyYW1ldGVyCisgICAgICAgIHRvIGdldEF0a0F0dHJpYnV0ZVNldEFz
U3RyaW5nLCBpbmRpY2F0aW5nIHRoYXQgd2Ugd2FudCB0aGUgb2JqZWN0CisgICAgICAgIGF0dHJp
YnV0ZXMgaW4gdGhpcyBjYXNlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisgICAgICAg
IChpbmRleFJhbmdlSW5UYWJsZSk6IE1vdmVkIHVwIGluIHRoZSBmaWxlIGludG8gdGhlIHVubmFt
bWVkIG5hbWVzcGFjZS4KKyAgICAgICAgKGFsdGVyQ3VycmVudFZhbHVlKTogRGl0dG8uCisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IEFmdGVy
IG1vdmluZyBtb3N0CisgICAgICAgIG9mIHRoZSBjb2RlIGhlcmUgdG8gdGhlIG5ldyBoZWxwZXIg
ZnVuY3Rpb25zLCBzaW1wbGlmaWVkIGl0IGJ5CisgICAgICAgIGp1c3QgY2hlY2tpbmcgd2hldGhl
ciB0aGUgcmVxdWlyZWQgYXR0cmlidXRlIGlzIHByb3ZpZGVkIGFzIGFuCisgICAgICAgIG9iamVj
dCBhdHRyaWJ1dGUgb3IsIGlmIHRoYXQncyBub3QgdGhlIGNhc2UsIGFzIGEgdGV4dCBhdHRyaWJ1
dGUuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRl
ZCk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUpOiBV
cGRhdGVkIHRvIHBhc3MgdGhlIG5ldworICAgICAgICByZXF1aXJlZCBwYXJhbWV0ZXIgdG8gZ2V0
QXR0cmlidXRlU2V0VmFsdWVGb3JJZCwgaW5kaWNhdGluZyB0aGF0CisgICAgICAgIHdlIHdhbnQg
dGhlIG9iamVjdCBhdHRyaWJ1dGVzIGluIHRoaXMgY2FzZS4KKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Omhhc1BvcHVwKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcDoKKyAg
ICAgICAgKFdUUjo6Y29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKTogU2FtZSBjaGFuZ2VzIHRo
YW4gZm9yIERSVC4KKyAgICAgICAgKFdUUjo6YXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1
dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpnZXRBdHRyaWJ1dGVTZXQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6Z2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyk6IERpdHRvLgorICAgICAgICAoV1RS
OjphdHRyaWJ1dGVzT2ZFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKTogRGl0dG8uCisK
IDIwMTMtMDktMzAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBjaGVj
ay13ZWJraXQtc3R5bGUgc2hvdWxkIG5vdCB3YXJuIGFib3V0IHVzZSBvZiBDKysxMSDigJw+PuKA
nSAgaW5zdGVhZCBvZiDigJw+ID4iCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9h
dGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9h
dGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKaW5kZXggNzI2NmRiMS4uNzhhZDlmMSAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRBdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50QXRrLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEph
biBNaWNoYWVsIEFsb256bworICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25p
Y3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQxLDQ4ICs0MiwxMjUgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCi1zdGF0aWMgU3RyaW5nIGNv
cmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCituYW1lc3Bh
Y2UgeworCitlbnVtIEF0a0F0dHJpYnV0ZVR5cGUgeworICAgIE9iamVjdEF0dHJpYnV0ZVR5cGUs
CisgICAgVGV4dEF0dHJpYnV0ZVR5cGUKK307CisKK2VudW0gQXR0cmlidXRlRG9tYWluIHsKKyAg
ICBDb3JlRG9tYWluID0gMCwKKyAgICBBdGtEb21haW4KK307CisKK2VudW0gQXR0cmlidXRlc0lu
ZGV4IHsKKyAgICAvLyBBdHRyaWJ1dGUgbmFtZXMuCisgICAgSW52YWxpZE5hbWVJbmRleCA9IDAs
CisgICAgUGxhY2Vob2xkZXJOYW1lSW5kZXgsCisgICAgU29ydE5hbWVJbmRleCwKKworICAgIC8v
IEF0dHJpYnV0ZSB2YWx1ZXMuCisgICAgU29ydEFzY2VuZGluZ1ZhbHVlSW5kZXgsCisgICAgU29y
dERlc2NlbmRpbmdWYWx1ZUluZGV4LAorICAgIFNvcnRVbmtub3duVmFsdWVJbmRleCwKKworICAg
IE51bWJlck9mQXR0cmlidXRlcworfTsKKworLy8gQXR0cmlidXRlIG5hbWVzICYgVmFsdWVzIChr
ZWVwIG9uIHN5bmMgd2l0aCBlbnVtIEF0dHJpYnV0ZXNJbmRleCkuCitjb25zdCBTdHJpbmcgYXR0
cmlidXRlc01hcFtdWzJdID0geworICAgIC8vIEF0dHJpYnV0ZSBuYW1lcy4KKyAgICB7ICJBWElu
dmFsaWQiLCAiaW52YWxpZCIgfSwKKyAgICB7ICJBWFBsYWNlaG9sZGVyVmFsdWUiLCAicGxhY2Vo
b2xkZXItdGV4dCIgfSAsCisgICAgeyAiQVhTb3J0RGlyZWN0aW9uIiwgInNvcnQiIH0sCisKKyAg
ICAvLyBBdHRyaWJ1dGUgdmFsdWVzLgorICAgIHsgIkFYQXNjZW5kaW5nU29ydERpcmVjdGlvbiIs
ICJhc2NlbmRpbmciIH0sCisgICAgeyAiQVhEZXNjZW5kaW5nU29ydERpcmVjdGlvbiIsICJkZXNj
ZW5kaW5nIiB9LAorICAgIHsgIkFYVW5rbm93blNvcnREaXJlY3Rpb24iLCAidW5rbm93biIgfQor
fTsKKworU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRy
aWJ1dGUpCiB7CiAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4
Q1N0cmluZ1NpemUoYXR0cmlidXRlKTsKICAgICBHT3duUHRyPGdjaGFyPiBidWZmZXIoc3RhdGlj
X2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSkpOwogICAgIEpTU3RyaW5nR2V0VVRG
OENTdHJpbmcoYXR0cmlidXRlLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwogCiAgICAgU3Ry
aW5nIGF0dHJpYnV0ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmdldCgpKTsKLSAg
ICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWEludmFsaWQiKQotICAgICAgICByZXR1cm4gImFy
aWEtaW52YWxpZCI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1iZXJPZkF0dHJpYnV0ZXM7
ICsraSkgeworICAgICAgICBpZiAoYXR0cmlidXRlc01hcFtpXVtDb3JlRG9tYWluXSA9PSBhdHRy
aWJ1dGVTdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlc01hcFtpXVtBdGtEb21h
aW5dOworICAgIH0KKworICAgIHJldHVybiBhdHRyaWJ1dGVTdHJpbmc7Cit9CisKK1N0cmluZyBh
dGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0ZVZhbHVlKEF0a0F0dHJpYnV0ZVR5cGUgdHlw
ZSwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodHlw
ZSA9PSBPYmplY3RBdHRyaWJ1dGVUeXBlKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gdHJhbnNs
YXRlIEFUSyB2YWx1ZXMgZXhwb3NlZCBmb3IgJ2FyaWEtc29ydCcgKGUuZy4gJ2FzY2VuZGluZycp
CisgICAgICAgIC8vIGludG8gdGhvc2UgZXhwZWN0ZWQgYnkgdGhlIGxheW91dCB0ZXN0cyAoZS5n
LiAnQVhBc2NlbmRpbmdTb3J0RGlyZWN0aW9uJykuCisgICAgICAgIGlmIChpZCA9PSBhdHRyaWJ1
dGVzTWFwW1NvcnROYW1lSW5kZXhdW0F0a0RvbWFpbl0gJiYgIXZhbHVlLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgaWYgKHZhbHVlID09IGF0dHJpYnV0ZXNNYXBbU29ydEFzY2VuZGluZ1ZhbHVl
SW5kZXhdW0F0a0RvbWFpbl0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNNYXBb
U29ydEFzY2VuZGluZ1ZhbHVlSW5kZXhdW0NvcmVEb21haW5dOworICAgICAgICAgICAgaWYgKHZh
bHVlID09IGF0dHJpYnV0ZXNNYXBbU29ydERlc2NlbmRpbmdWYWx1ZUluZGV4XVtBdGtEb21haW5d
KQorICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzTWFwW1NvcnREZXNjZW5kaW5nVmFs
dWVJbmRleF1bQ29yZURvbWFpbl07CisKKyAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzTWFw
W1NvcnRVbmtub3duVmFsdWVJbmRleF1bQ29yZURvbWFpbl07CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gVGV4dEF0dHJpYnV0ZVR5cGUpIHsKKyAgICAgICAgLy8gSW4gY2FzZSBv
ZiAnYXJpYS1pbnZhbGlkJyB3aGVuIHRoZSBhdHRyaWJ1dGUgZW1wdHkgb3IgaGFzICJmYWxzZSIg
Zm9yIEFUSworICAgICAgICAvLyBpdCBzaG91bGQgbm90IGJlIG1hcHBlZCBhdCBhbGwsIGJ1dCBs
YXlvdXQgdGVzdHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4KKyAgICAgICAgaWYgKGlkID09IGF0dHJp
YnV0ZXNNYXBbSW52YWxpZE5hbWVJbmRleF1bQXRrRG9tYWluXSAmJiB2YWx1ZS5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gImZhbHNlIjsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWU7
Cit9CisKK0F0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0KEF0a09iamVjdCogYWNjZXNz
aWJsZSwgQXRrQXR0cmlidXRlVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IE9iamVjdEF0
dHJpYnV0ZVR5cGUpCisgICAgICAgIHJldHVybiBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKGFj
Y2Vzc2libGUpOwogCi0gICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhQbGFjZWhvbGRlclZh
bHVlIikKLSAgICAgICAgcmV0dXJuICJwbGFjZWhvbGRlci10ZXh0IjsKKyAgICBpZiAodHlwZSA9
PSBUZXh0QXR0cmlidXRlVHlwZSkgeworICAgICAgICBpZiAoIUFUS19JU19URVhUKGFjY2Vzc2li
bGUpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09
ICJBWFNvcnREaXJlY3Rpb24iKQotICAgICAgICByZXR1cm4gInNvcnQiOworICAgICAgICByZXR1
cm4gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhBVEtfVEVYVChhY2Nlc3NpYmxlKSk7
CisgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEF0dHJpYnV0ZVNldFZhbHVl
Rm9ySWQoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBjb25zdCBjaGFyKiBpZCkKK1N0cmluZyBnZXRB
dHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEF0a09iamVjdCogYWNjZXNzaWJsZSwgQXRrQXR0cmlidXRl
VHlwZSB0eXBlLCBTdHJpbmcgaWQpCiB7Ci0gICAgY29uc3QgY2hhciogYXR0cmlidXRlVmFsdWUg
PSAwOwotICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gYXRrX29iamVjdF9nZXRf
YXR0cmlidXRlcyhhY2Nlc3NpYmxlKTsKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNl
dCA9IGdldEF0dHJpYnV0ZVNldChhY2Nlc3NpYmxlLCB0eXBlKTsKKyAgICBpZiAoIWF0dHJpYnV0
ZVNldCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgU3RyaW5nIGF0dHJpYnV0ZVZh
bHVlOwogICAgIGZvciAoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU2V0
OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy0+bmV4dCkgewogICAgICAgICBB
dGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0
dHJpYnV0ZXMtPmRhdGEpOwotICAgICAgICBpZiAoIXN0cmNtcChhdGtBdHRyaWJ1dGUtPm5hbWUs
IGlkKSkgewotICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdGtBdHRyaWJ1dGUtPnZhbHVl
OworICAgICAgICBpZiAoaWQgPT0gYXRrQXR0cmlidXRlLT5uYW1lKSB7CisgICAgICAgICAgICBh
dHRyaWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXRrQXR0cmlidXRlLT52YWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQotICAgIFN0cmluZyBhdGtBdHRy
aWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXR0cmlidXRlVmFsdWUpOwogICAgIGF0a19h
dHRyaWJ1dGVfc2V0X2ZyZWUoYXR0cmlidXRlU2V0KTsKIAotICAgIHJldHVybiBhdGtBdHRyaWJ1
dGVWYWx1ZTsKKyAgICByZXR1cm4gYXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVWYWx1
ZSh0eXBlLCBpZCwgYXR0cmlidXRlVmFsdWUpOwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEF0a0F0
dHJpYnV0ZVNldEFzU3RyaW5nKEF0a09iamVjdCogYWNjZXNzaWJsZSkKK1N0cmluZyBnZXRBdGtB
dHRyaWJ1dGVTZXRBc1N0cmluZyhBdGtPYmplY3QqIGFjY2Vzc2libGUsIEF0a0F0dHJpYnV0ZVR5
cGUgdHlwZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgQXRrQXR0cmlidXRl
U2V0KiBhdHRyaWJ1dGVTZXQgPSBnZXRBdHRyaWJ1dGVTZXQoYWNjZXNzaWJsZSwgdHlwZSk7Cisg
ICAgaWYgKCFhdHRyaWJ1dGVTZXQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIEF0
a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhh
Y2Nlc3NpYmxlKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgZm9yIChBdGtBdHRy
aWJ1dGVTZXQqIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTZXQ7IGF0dHJpYnV0ZXM7IGF0dHJpYnV0
ZXMgPSBhdHRyaWJ1dGVzLT5uZXh0KSB7CiAgICAgICAgIEF0a0F0dHJpYnV0ZSogYXR0cmlidXRl
ID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4oYXR0cmlidXRlcy0+ZGF0YSk7CiAgICAgICAg
IEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoZ19zdHJjb25jYXQoYXR0cmlidXRlLT5uYW1l
LCAiOiIsIGF0dHJpYnV0ZS0+dmFsdWUsIE5VTEwpKTsKQEAgLTk1LDcgKzE3Myw3IEBAIHN0YXRp
YyBTdHJpbmcgZ2V0QXRrQXR0cmlidXRlU2V0QXNTdHJpbmcoQXRrT2JqZWN0KiBhY2Nlc3NpYmxl
KQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29u
c3QgY2hhciogcm9sZVRvU3RyaW5nKEF0a1JvbGUgcm9sZSkKK2lubGluZSBjb25zdCBjaGFyKiBy
b2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQogewogICAgIHN3aXRjaCAocm9sZSkgewogICAgIGNh
c2UgQVRLX1JPTEVfQUxFUlQ6CkBAIC0yMDksNyArMjg3LDcgQEAgc3RhdGljIGlubGluZSBjb25z
dCBjaGFyKiByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQogICAgIH0KIH0KIAotc3RhdGljIGlu
bGluZSBnY2hhciogcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKGdjaGFyKiBzdHIpCitpbmxp
bmUgZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyhnY2hhciogc3RyKQogewogICAg
IFN0cmluZyB1U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChzdHIpOwogCkBAIC0yMjUsNyArMzAz
LDcgQEAgc3RhdGljIGlubGluZSBnY2hhciogcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKGdj
aGFyKiBzdHIpCiAgICAgcmV0dXJuIGdfc3RyZHVwKHVTdHJpbmcudXRmOCgpLmRhdGEoKSk7CiB9
CiAKLXN0YXRpYyBib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1l
bnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCitib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRm
b3JtVUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCiB7CiAgICAgaWYg
KCFBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzQs
NyArMzEyLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tFbGVtZW50U3RhdGUoUGxhdGZvcm1VSUVsZW1l
bnQgZWxlbWVudCwgQXRrU3RhdGVUeXBlIHN0YXRlVHlwZSkKICAgICByZXR1cm4gYXRrX3N0YXRl
X3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgc3RhdGVUeXBlKTsKIH0KIAotc3Rh
dGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVs
ZW1lbnQpCitTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KiBlbGVtZW50KQogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKIApAQCAtMjgwLDExICsz
NTgsNzMgQEAgc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICAvLyBXZSBhcHBlbmQgdGhlIEFUSyBzcGVjaWZpYyBh
dHRyaWJ1dGVzIGFzIGEgc2luZ2xlIGxpbmUgYXQgdGhlIGVuZC4KICAgICBidWlsZGVyLmFwcGVu
ZCgiQVhQbGF0Zm9ybUF0dHJpYnV0ZXM6ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGdldEF0a0F0
dHJpYnV0ZVNldEFzU3RyaW5nKGVsZW1lbnQtPnBsYXRmb3JtVUlFbGVtZW50KCkpKTsKKyAgICBi
dWlsZGVyLmFwcGVuZChnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhlbGVtZW50LT5wbGF0Zm9y
bVVJRWxlbWVudCgpLCBPYmplY3RBdHRyaWJ1dGVUeXBlKSk7CiAKICAgICByZXR1cm4gYnVpbGRl
ci50b1N0cmluZygpOwogfQogCit9IC8vIG5hbWVzcGFjZQorCitKU1N0cmluZ1JlZiBpbmRleFJh
bmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBib29sIGlzUm93UmFuZ2UpCit7
CisgICAgR093blB0cjxnY2hhcj4gcmFuZ2VTdHJpbmcoZ19zdHJkdXAoInswLCAwfSIpKTsKKwor
ICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKKworICAgIEF0a09iamVj
dCogYXhUYWJsZSA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JKRUNUKGVsZW1lbnQpKTsK
KyAgICBpZiAoIWF4VGFibGUgfHwgIUFUS19JU19UQUJMRShheFRhYmxlKSkKKyAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKKwor
ICAgIC8vIExvb2sgZm9yIHRoZSBjZWxsIGluIHRoZSB0YWJsZS4KKyAgICBnaW50IGluZGV4SW5Q
YXJlbnQgPSBhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoQVRLX09CSkVDVChlbGVtZW50
KSk7CisgICAgaWYgKGluZGV4SW5QYXJlbnQgPT0gLTEpCisgICAgICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7CisKKyAgICBpbnQgcm93
ID0gLTE7CisgICAgaW50IGNvbHVtbiA9IC0xOworICAgIHJvdyA9IGF0a190YWJsZV9nZXRfcm93
X2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7CisgICAgY29sdW1u
ID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgoQVRLX1RBQkxFKGF4VGFibGUpLCBpbmRl
eEluUGFyZW50KTsKKworICAgIC8vIEdldCB0aGUgYWN0dWFsIHZhbHVlcywgaWYgcm93IGFuZCBj
b2x1bW5zIGFyZSB2YWxpZCB2YWx1ZXMuCisgICAgaWYgKHJvdyAhPSAtMSAmJiBjb2x1bW4gIT0g
LTEpIHsKKyAgICAgICAgaW50IGJhc2UgPSAwOworICAgICAgICBpbnQgbGVuZ3RoID0gMDsKKyAg
ICAgICAgaWYgKGlzUm93UmFuZ2UpIHsKKyAgICAgICAgICAgIGJhc2UgPSByb3c7CisgICAgICAg
ICAgICBsZW5ndGggPSBhdGtfdGFibGVfZ2V0X3Jvd19leHRlbnRfYXQoQVRLX1RBQkxFKGF4VGFi
bGUpLCByb3csIGNvbHVtbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlID0g
Y29sdW1uOworICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50
X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOworICAgICAgICB9CisgICAgICAg
IHJhbmdlU3RyaW5nLnNldChnX3N0cmR1cF9wcmludGYoInslZCwgJWR9IiwgYmFzZSwgbGVuZ3Ro
KSk7CisgICAgfQorCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJh
bmdlU3RyaW5nLmdldCgpKTsKK30KKwordm9pZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJ
RWxlbWVudCBlbGVtZW50LCBpbnQgZmFjdG9yKQoreworICAgIGlmICghQVRLX0lTX1ZBTFVFKGVs
ZW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBHVmFsdWUgY3VycmVudFZhbHVlID0gR19W
QUxVRV9JTklUOworICAgIGF0a192YWx1ZV9nZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUoZWxl
bWVudCksICZjdXJyZW50VmFsdWUpOworCisgICAgR1ZhbHVlIGluY3JlbWVudCA9IEdfVkFMVUVf
SU5JVDsKKyAgICBhdGtfdmFsdWVfZ2V0X21pbmltdW1faW5jcmVtZW50KEFUS19WQUxVRShlbGVt
ZW50KSwgJmluY3JlbWVudCk7CisKKyAgICBHVmFsdWUgbmV3VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7
CisgICAgZ192YWx1ZV9pbml0KCZuZXdWYWx1ZSwgR19UWVBFX0ZMT0FUKTsKKworICAgIGdfdmFs
dWVfc2V0X2Zsb2F0KCZuZXdWYWx1ZSwgZ192YWx1ZV9nZXRfZmxvYXQoJmN1cnJlbnRWYWx1ZSkg
KyBmYWN0b3IgKiBnX3ZhbHVlX2dldF9mbG9hdCgmaW5jcmVtZW50KSk7CisgICAgYXRrX3ZhbHVl
X3NldF9jdXJyZW50X3ZhbHVlKEFUS19WQUxVRShlbGVtZW50KSwgJm5ld1ZhbHVlKTsKKworICAg
IGdfdmFsdWVfdW5zZXQoJm5ld1ZhbHVlKTsKKyAgICBnX3ZhbHVlX3Vuc2V0KCZpbmNyZW1lbnQp
OworICAgIGdfdmFsdWVfdW5zZXQoJmN1cnJlbnRWYWx1ZSk7Cit9CisKIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVu
dCkKICAgICA6IG1fZWxlbWVudChlbGVtZW50KQogewpAQCAtNjQzLDcgKzc4Myw3IEBAIGRvdWJs
ZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0CiAgICAgLy8gYW4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCwgc28gd2UgY2FuIHJldXNlIHNvbWUgdGVzdHMgdG8gY2hlY2sg
dGhlIGxldmVsCiAgICAgLy8gYm90aCBmb3IgSFRNTCBoZWFkaW5ncyBhbmQgb2JqZWN0cyB3aXRo
IHRoZSBhcmlhLWxldmVsIGF0dHJpYnV0ZS4KICAgICBpZiAoYXRrX29iamVjdF9nZXRfcm9sZShB
VEtfT0JKRUNUKG1fZWxlbWVudCkpID09IEFUS19ST0xFX0hFQURJTkcpIHsKLSAgICAgICAgU3Ry
aW5nIGhlYWRpbmdMZXZlbCA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVCht
X2VsZW1lbnQpLCAibGV2ZWwiKTsKKyAgICAgICAgU3RyaW5nIGhlYWRpbmdMZXZlbCA9IGdldEF0
dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBPYmplY3RBdHRyaWJ1
dGVUeXBlLCAibGV2ZWwiKTsKICAgICAgICAgYm9vbCBvazsKICAgICAgICAgZG91YmxlIGhlYWRp
bmdMZXZlbFZhbHVlID0gaGVhZGluZ0xldmVsLnRvRG91YmxlKCZvayk7CiAgICAgICAgIGlmIChv
aykKQEAgLTgxNCw0NCArOTU0LDYgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4
SW5UYWJsZSgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBKU1N0cmluZ1JlZiBpbmRleFJh
bmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBib29sIGlzUm93UmFuZ2UpCi17
Ci0gICAgR093blB0cjxnY2hhcj4gcmFuZ2VTdHJpbmcoZ19zdHJkdXAoInswLCAwfSIpKTsKLQot
ICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKLQotICAgIEF0a09iamVj
dCogYXhUYWJsZSA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JKRUNUKGVsZW1lbnQpKTsK
LSAgICBpZiAoIWF4VGFibGUgfHwgIUFUS19JU19UQUJMRShheFRhYmxlKSkKLSAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKLQot
ICAgIC8vIExvb2sgZm9yIHRoZSBjZWxsIGluIHRoZSB0YWJsZS4KLSAgICBnaW50IGluZGV4SW5Q
YXJlbnQgPSBhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoQVRLX09CSkVDVChlbGVtZW50
KSk7Ci0gICAgaWYgKGluZGV4SW5QYXJlbnQgPT0gLTEpCi0gICAgICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci0KLSAgICBpbnQgcm93
ID0gLTE7Ci0gICAgaW50IGNvbHVtbiA9IC0xOwotICAgIHJvdyA9IGF0a190YWJsZV9nZXRfcm93
X2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7Ci0gICAgY29sdW1u
ID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgoQVRLX1RBQkxFKGF4VGFibGUpLCBpbmRl
eEluUGFyZW50KTsKLQotICAgIC8vIEdldCB0aGUgYWN0dWFsIHZhbHVlcywgaWYgcm93IGFuZCBj
b2x1bW5zIGFyZSB2YWxpZCB2YWx1ZXMuCi0gICAgaWYgKHJvdyAhPSAtMSAmJiBjb2x1bW4gIT0g
LTEpIHsKLSAgICAgICAgaW50IGJhc2UgPSAwOwotICAgICAgICBpbnQgbGVuZ3RoID0gMDsKLSAg
ICAgICAgaWYgKGlzUm93UmFuZ2UpIHsKLSAgICAgICAgICAgIGJhc2UgPSByb3c7Ci0gICAgICAg
ICAgICBsZW5ndGggPSBhdGtfdGFibGVfZ2V0X3Jvd19leHRlbnRfYXQoQVRLX1RBQkxFKGF4VGFi
bGUpLCByb3csIGNvbHVtbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBiYXNlID0g
Y29sdW1uOwotICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50
X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOwotICAgICAgICB9Ci0gICAgICAg
IHJhbmdlU3RyaW5nLnNldChnX3N0cmR1cF9wcmludGYoInslZCwgJWR9IiwgYmFzZSwgbGVuZ3Ro
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJh
bmdlU3RyaW5nLmdldCgpKTsKLX0KLQogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm93SW5kZXhSYW5nZSgpCiB7CiAgICAgLy8gUmFuZ2UgaW4gdGFibGUgZm9yIHJvd3MuCkBA
IC05MjgsMjcgKzEwMzAsMTMgQEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogICAgICAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIAogICAgIFN0cmluZyBhdGtB
dHRyaWJ1dGVOYW1lID0gY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKGF0dHJpYnV0ZSk7Ci0g
ICAgaWYgKGF0a0F0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1
ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBhdGtB
dHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgLy8gSW4gY2FzZSBvZiAnYXJpYS1p
bnZhbGlkJyB3aGVuIHRoZSBhdHRyaWJ1dGUgZW1wdHkgb3IgaGFzICJmYWxzZSIgZm9yIEFUSwot
ICAgIC8vIGFjY29yZGluZyB0byBodHRwOi8vd3d3LnczLm9yZy9XQUkvUEYvYXJpYS1pbXBsZW1l
bnRhdGlvbi8jbWFwcGluZyBhdHRyaWJ1dGUKLSAgICAvLyBpcyBub3QgbWFwcGVkIGJ1dCBsYXlv
dXQgdGVzdHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4KLSAgICBpZiAoYXR0cmlidXRlVmFsdWUuaXNF
bXB0eSgpICYmIGF0a0F0dHJpYnV0ZU5hbWUgPT0gImFyaWEtaW52YWxpZCIpCi0gICAgICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZmFsc2UiKTsKKyAgICAvLyBUcnkg
b2JqZWN0IGF0dHJpYnV0ZXMgZmlyc3QuCisgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0
QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIE9iamVjdEF0dHJp
YnV0ZVR5cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOwogCi0gICAgLy8gV2UgbmVlZCB0byB0cmFuc2xh
dGUgQVRLIHZhbHVlcyBleHBvc2VkIGZvciAnYXJpYS1zb3J0JyAoZS5nLiAnYXNjZW5kaW5nJykK
LSAgICAvLyBpbnRvIHRob3NlIGV4cGVjdGVkIGJ5IHRoZSBsYXlvdXQgdGVzdHMgKGUuZy4gJ0FY
QXNjZW5kaW5nU29ydERpcmVjdGlvbicpLgotICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lID09ICJz
b3J0IikgewotICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUgPT0gImFzY2VuZGluZyIpCi0gICAg
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFYQXNjZW5kaW5n
U29ydERpcmVjdGlvbiIpOwotICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUgPT0gImRlc2NlbmRp
bmciKQotICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
WERlc2NlbmRpbmdTb3J0RGlyZWN0aW9uIik7Ci0KLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJBWFVua25vd25Tb3J0RGlyZWN0aW9uIik7Ci0gICAgfQorICAg
IC8vIFRyeSB0ZXh0IGF0dHJpYnV0ZXMgaWYgdGhlIHJlcXVlc3RlZCBvbmUgd2FzIG5vdCBmb3Vu
ZCBhbmQgd2UgaGF2ZSBhbiBBdGtUZXh0IG9iamVjdC4KKyAgICBpZiAoYXR0cmlidXRlVmFsdWUu
aXNFbXB0eSgpICYmIEFUS19JU19URVhUKG1fZWxlbWVudCkpCisgICAgICAgIGF0dHJpYnV0ZVZh
bHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIFRl
eHRBdHRyaWJ1dGVUeXBlLCBhdGtBdHRyaWJ1dGVOYW1lKTsKIAogICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdHRyaWJ1dGVWYWx1ZS51dGY4KCkuZGF0YSgpKTsKIH0K
QEAgLTk4MCwzMCArMTA2OCwxMiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0
cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKICAgICBpZiAoYXRrQXR0cmli
dXRlTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBh
dHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2Vs
ZW1lbnQpLCBhdGtBdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiAhYXR0
cmlidXRlVmFsdWUuaXNFbXB0eSgpOwotfQorICAgIC8vIEZvciBub3csIGFuIGF0dHJpYnV0ZSBp
cyBzdXBwb3J0ZWQgd2hldGhlciBpdCdzIGV4cG9zZWQgYXMgYSBvYmplY3Qgb3IgYSB0ZXh0IGF0
dHJpYnV0ZS4KKyAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1
ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgT2JqZWN0QXR0cmlidXRlVHlwZSwgYXRrQXR0
cmlidXRlTmFtZSk7CisgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAg
YXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9l
bGVtZW50KSwgVGV4dEF0dHJpYnV0ZVR5cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOwogCi1zdGF0aWMg
dm9pZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFj
dG9yKQotewotICAgIGlmICghQVRLX0lTX1ZBTFVFKGVsZW1lbnQpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHVmFsdWUgY3VycmVudFZhbHVlID0gR19WQUxVRV9JTklUOwotICAgIGF0a192YWx1
ZV9nZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUoZWxlbWVudCksICZjdXJyZW50VmFsdWUpOwot
Ci0gICAgR1ZhbHVlIGluY3JlbWVudCA9IEdfVkFMVUVfSU5JVDsKLSAgICBhdGtfdmFsdWVfZ2V0
X21pbmltdW1faW5jcmVtZW50KEFUS19WQUxVRShlbGVtZW50KSwgJmluY3JlbWVudCk7Ci0KLSAg
ICBHVmFsdWUgbmV3VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Ci0gICAgZ192YWx1ZV9pbml0KCZuZXdW
YWx1ZSwgR19UWVBFX0ZMT0FUKTsKLQotICAgIGdfdmFsdWVfc2V0X2Zsb2F0KCZuZXdWYWx1ZSwg
Z192YWx1ZV9nZXRfZmxvYXQoJmN1cnJlbnRWYWx1ZSkgKyBmYWN0b3IgKiBnX3ZhbHVlX2dldF9m
bG9hdCgmaW5jcmVtZW50KSk7Ci0gICAgYXRrX3ZhbHVlX3NldF9jdXJyZW50X3ZhbHVlKEFUS19W
QUxVRShlbGVtZW50KSwgJm5ld1ZhbHVlKTsKLQotICAgIGdfdmFsdWVfdW5zZXQoJm5ld1ZhbHVl
KTsKLSAgICBnX3ZhbHVlX3Vuc2V0KCZpbmNyZW1lbnQpOwotICAgIGdfdmFsdWVfdW5zZXQoJmN1
cnJlbnRWYWx1ZSk7CisgICAgcmV0dXJuICFhdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCk7CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50KCkKQEAgLTExNzYsNyArMTI0
Niw4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXAoKSBjb25zdAogICAg
IGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChB
VEtfT0JKRUNUKG1fZWxlbWVudCksICJoYXNwb3B1cCIpLCAidHJ1ZSIpOworICAgIFN0cmluZyBo
YXNQb3B1cFZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxl
bWVudCksIE9iamVjdEF0dHJpYnV0ZVR5cGUsICJoYXNwb3B1cCIpOworICAgIHJldHVybiBlcXVh
bElnbm9yaW5nQ2FzZShoYXNQb3B1cFZhbHVlLCAidHJ1ZSIpOwogfQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRBdGsuY3BwCmluZGV4IDcxMDEzMjAuLjAxMTcxYzIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRBdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRr
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00NSw0OCArNDYsMTI1IEBACiAKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0
aWMgU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRyaWJ1
dGUpCituYW1lc3BhY2UgeworCitlbnVtIEF0a0F0dHJpYnV0ZVR5cGUgeworICAgIE9iamVjdEF0
dHJpYnV0ZVR5cGUsCisgICAgVGV4dEF0dHJpYnV0ZVR5cGUKK307CisKK2VudW0gQXR0cmlidXRl
RG9tYWluIHsKKyAgICBDb3JlRG9tYWluID0gMCwKKyAgICBBdGtEb21haW4KK307CisKK2VudW0g
QXR0cmlidXRlc0luZGV4IHsKKyAgICAvLyBBdHRyaWJ1dGUgbmFtZXMuCisgICAgSW52YWxpZE5h
bWVJbmRleCA9IDAsCisgICAgUGxhY2Vob2xkZXJOYW1lSW5kZXgsCisgICAgU29ydE5hbWVJbmRl
eCwKKworICAgIC8vIEF0dHJpYnV0ZSB2YWx1ZXMuCisgICAgU29ydEFzY2VuZGluZ1ZhbHVlSW5k
ZXgsCisgICAgU29ydERlc2NlbmRpbmdWYWx1ZUluZGV4LAorICAgIFNvcnRVbmtub3duVmFsdWVJ
bmRleCwKKworICAgIE51bWJlck9mQXR0cmlidXRlcworfTsKKworLy8gQXR0cmlidXRlIG5hbWVz
ICYgVmFsdWVzIChrZWVwIG9uIHN5bmMgd2l0aCBlbnVtIEF0dHJpYnV0ZXNJbmRleCkuCitjb25z
dCBTdHJpbmcgYXR0cmlidXRlc01hcFtdWzJdID0geworICAgIC8vIEF0dHJpYnV0ZSBuYW1lcy4K
KyAgICB7ICJBWEludmFsaWQiLCAiaW52YWxpZCIgfSwKKyAgICB7ICJBWFBsYWNlaG9sZGVyVmFs
dWUiLCAicGxhY2Vob2xkZXItdGV4dCIgfSAsCisgICAgeyAiQVhTb3J0RGlyZWN0aW9uIiwgInNv
cnQiIH0sCisKKyAgICAvLyBBdHRyaWJ1dGUgdmFsdWVzLgorICAgIHsgIkFYQXNjZW5kaW5nU29y
dERpcmVjdGlvbiIsICJhc2NlbmRpbmciIH0sCisgICAgeyAiQVhEZXNjZW5kaW5nU29ydERpcmVj
dGlvbiIsICJkZXNjZW5kaW5nIiB9LAorICAgIHsgIkFYVW5rbm93blNvcnREaXJlY3Rpb24iLCAi
dW5rbm93biIgfQorfTsKKworU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0
cmluZ1JlZiBhdHRyaWJ1dGUpCiB7CiAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dl
dE1heGltdW1VVEY4Q1N0cmluZ1NpemUoYXR0cmlidXRlKTsKICAgICBHT3duUHRyPGdjaGFyPiBi
dWZmZXIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSkpOwogICAgIEpT
U3RyaW5nR2V0VVRGOENTdHJpbmcoYXR0cmlidXRlLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUp
OwogCiAgICAgU3RyaW5nIGF0dHJpYnV0ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVy
LmdldCgpKTsKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWEludmFsaWQiKQotICAgICAg
ICByZXR1cm4gImFyaWEtaW52YWxpZCI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1iZXJP
ZkF0dHJpYnV0ZXM7ICsraSkgeworICAgICAgICBpZiAoYXR0cmlidXRlc01hcFtpXVtDb3JlRG9t
YWluXSA9PSBhdHRyaWJ1dGVTdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlc01h
cFtpXVtBdGtEb21haW5dOworICAgIH0KKworICAgIHJldHVybiBhdHRyaWJ1dGVTdHJpbmc7Cit9
CisKK1N0cmluZyBhdGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0ZVZhbHVlKEF0a0F0dHJp
YnV0ZVR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sK
KyAgICBpZiAodHlwZSA9PSBPYmplY3RBdHRyaWJ1dGVUeXBlKSB7CisgICAgICAgIC8vIFdlIG5l
ZWQgdG8gdHJhbnNsYXRlIEFUSyB2YWx1ZXMgZXhwb3NlZCBmb3IgJ2FyaWEtc29ydCcgKGUuZy4g
J2FzY2VuZGluZycpCisgICAgICAgIC8vIGludG8gdGhvc2UgZXhwZWN0ZWQgYnkgdGhlIGxheW91
dCB0ZXN0cyAoZS5nLiAnQVhBc2NlbmRpbmdTb3J0RGlyZWN0aW9uJykuCisgICAgICAgIGlmIChp
ZCA9PSBhdHRyaWJ1dGVzTWFwW1NvcnROYW1lSW5kZXhdW0F0a0RvbWFpbl0gJiYgIXZhbHVlLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKHZhbHVlID09IGF0dHJpYnV0ZXNNYXBbU29ydEFz
Y2VuZGluZ1ZhbHVlSW5kZXhdW0F0a0RvbWFpbl0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGF0
dHJpYnV0ZXNNYXBbU29ydEFzY2VuZGluZ1ZhbHVlSW5kZXhdW0NvcmVEb21haW5dOworICAgICAg
ICAgICAgaWYgKHZhbHVlID09IGF0dHJpYnV0ZXNNYXBbU29ydERlc2NlbmRpbmdWYWx1ZUluZGV4
XVtBdGtEb21haW5dKQorICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzTWFwW1NvcnRE
ZXNjZW5kaW5nVmFsdWVJbmRleF1bQ29yZURvbWFpbl07CisKKyAgICAgICAgICAgIHJldHVybiBh
dHRyaWJ1dGVzTWFwW1NvcnRVbmtub3duVmFsdWVJbmRleF1bQ29yZURvbWFpbl07CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gVGV4dEF0dHJpYnV0ZVR5cGUpIHsKKyAgICAgICAg
Ly8gSW4gY2FzZSBvZiAnYXJpYS1pbnZhbGlkJyB3aGVuIHRoZSBhdHRyaWJ1dGUgZW1wdHkgb3Ig
aGFzICJmYWxzZSIgZm9yIEFUSworICAgICAgICAvLyBpdCBzaG91bGQgbm90IGJlIG1hcHBlZCBh
dCBhbGwsIGJ1dCBsYXlvdXQgdGVzdHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4KKyAgICAgICAgaWYg
KGlkID09IGF0dHJpYnV0ZXNNYXBbSW52YWxpZE5hbWVJbmRleF1bQXRrRG9tYWluXSAmJiB2YWx1
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gImZhbHNlIjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdmFsdWU7Cit9CiAKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWFBsYWNlaG9s
ZGVyVmFsdWUiKQotICAgICAgICByZXR1cm4gInBsYWNlaG9sZGVyLXRleHQiOwotICAgIAotICAg
IGlmIChhdHRyaWJ1dGVTdHJpbmcgPT0gIkFYU29ydERpcmVjdGlvbiIpCi0gICAgICAgIHJldHVy
biAic29ydCI7CitBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldChBdGtPYmplY3QqIGFj
Y2Vzc2libGUsIEF0a0F0dHJpYnV0ZVR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBPYmpl
Y3RBdHRyaWJ1dGVUeXBlKQorICAgICAgICByZXR1cm4gYXRrX29iamVjdF9nZXRfYXR0cmlidXRl
cyhhY2Nlc3NpYmxlKTsKIAotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAodHlwZSA9PSBU
ZXh0QXR0cmlidXRlVHlwZSkgeworICAgICAgICBpZiAoIUFUS19JU19URVhUKGFjY2Vzc2libGUp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIGF0a190ZXh0X2dldF9k
ZWZhdWx0X2F0dHJpYnV0ZXMoQVRLX1RFWFQoYWNjZXNzaWJsZSkpOworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgU3RyaW5nIGdl
dEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBjb25zdCBjaGFy
KiBpZCkKK1N0cmluZyBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEF0a09iamVjdCogYWNjZXNz
aWJsZSwgQXRrQXR0cmlidXRlVHlwZSB0eXBlLCBTdHJpbmcgaWQpCiB7Ci0gICAgY29uc3QgY2hh
ciogYXR0cmlidXRlVmFsdWUgPSAwOwotICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0
ID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhhY2Nlc3NpYmxlKTsKKyAgICBBdGtBdHRyaWJ1
dGVTZXQqIGF0dHJpYnV0ZVNldCA9IGdldEF0dHJpYnV0ZVNldChhY2Nlc3NpYmxlLCB0eXBlKTsK
KyAgICBpZiAoIWF0dHJpYnV0ZVNldCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
U3RyaW5nIGF0dHJpYnV0ZVZhbHVlOwogICAgIGZvciAoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1
dGVzID0gYXR0cmlidXRlU2V0OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy0+
bmV4dCkgewogICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0YXRpY19jYXN0
PEF0a0F0dHJpYnV0ZSo+KGF0dHJpYnV0ZXMtPmRhdGEpOwotICAgICAgICBpZiAoIXN0cmNtcChh
dGtBdHRyaWJ1dGUtPm5hbWUsIGlkKSkgewotICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBh
dGtBdHRyaWJ1dGUtPnZhbHVlOworICAgICAgICBpZiAoaWQgPT0gYXRrQXR0cmlidXRlLT5uYW1l
KSB7CisgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXRrQXR0
cmlidXRlLT52YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQot
ICAgIFN0cmluZyBhdGtBdHRyaWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXR0cmlidXRl
VmFsdWUpOwogICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoYXR0cmlidXRlU2V0KTsKIAotICAg
IHJldHVybiBhdGtBdHRyaWJ1dGVWYWx1ZTsKKyAgICByZXR1cm4gYXRrQXR0cmlidXRlVmFsdWVU
b0NvcmVBdHRyaWJ1dGVWYWx1ZSh0eXBlLCBpZCwgYXR0cmlidXRlVmFsdWUpOwogfQogCi1zdGF0
aWMgU3RyaW5nIGdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKEF0a09iamVjdCogYWNjZXNzaWJs
ZSkKK1N0cmluZyBnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhBdGtPYmplY3QqIGFjY2Vzc2li
bGUsIEF0a0F0dHJpYnV0ZVR5cGUgdHlwZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CisgICAgQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSBnZXRBdHRyaWJ1dGVTZXQoYWNj
ZXNzaWJsZSwgdHlwZSk7CisgICAgaWYgKCFhdHRyaWJ1dGVTZXQpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAotICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gYXRrX29iamVj
dF9nZXRfYXR0cmlidXRlcyhhY2Nlc3NpYmxlKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CiAgICAgZm9yIChBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTZXQ7IGF0
dHJpYnV0ZXM7IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLT5uZXh0KSB7CiAgICAgICAgIEF0a0F0
dHJpYnV0ZSogYXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4oYXR0cmlidXRl
cy0+ZGF0YSk7CiAgICAgICAgIEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoZ19zdHJjb25j
YXQoYXR0cmlidXRlLT5uYW1lLCAiOiIsIGF0dHJpYnV0ZS0+dmFsdWUsIE5VTEwpKTsKQEAgLTk5
LDcgKzE3Nyw3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0QXRrQXR0cmlidXRlU2V0QXNTdHJpbmcoQXRr
T2JqZWN0KiBhY2Nlc3NpYmxlKQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAK
LXN0YXRpYyBib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQs
IEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCitib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRmb3Jt
VUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCiB7CiAgICAgaWYgKCFB
VEtfSVNfT0JKRUNUKGVsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MDgsNyArMTg2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tFbGVtZW50U3RhdGUoUGxhdGZvcm1VSUVs
ZW1lbnQgZWxlbWVudCwgQXRrU3RhdGVUeXBlIHN0YXRlVHlwZSkKICAgICByZXR1cm4gYXRrX3N0
YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgc3RhdGVUeXBlKTsKIH0KIAot
c3RhdGljIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVtZW50IGVs
ZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKK0pTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBs
YXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKIHsKICAgICBHT3duUHRy
PGdjaGFyPiByYW5nZVN0cmluZyhnX3N0cmR1cCgiezAsIDB9IikpOwogCkBAIC0xNDYsNyArMjI0
LDcgQEAgc3RhdGljIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVt
ZW50IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOwogfQogCi1zdGF0aWMgdm9pZCBhbHRl
ckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFjdG9yKQordm9p
ZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFjdG9y
KQogewogICAgIGlmICghQVRLX0lTX1ZBTFVFKGVsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1
cm47CkBAIC0xNjgsNyArMjQ2LDcgQEAgc3RhdGljIHZvaWQgYWx0ZXJDdXJyZW50VmFsdWUoUGxh
dGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKICAgICBnX3ZhbHVlX3Vuc2V0KCZj
dXJyZW50VmFsdWUpOwogfQogCi1zdGF0aWMgZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVz
dWx0cyhnY2hhciogc3RyKQorZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyhnY2hh
ciogc3RyKQogewogICAgIFdURjo6U3RyaW5nIHVTdHJpbmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
Rjgoc3RyKTsKIApAQCAtMTg0LDcgKzI2Miw3IEBAIHN0YXRpYyBnY2hhciogcmVwbGFjZUNoYXJh
Y3RlcnNGb3JSZXN1bHRzKGdjaGFyKiBzdHIpCiAgICAgcmV0dXJuIGdfc3RyZHVwKHVTdHJpbmcu
dXRmOCgpLmRhdGEoKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBnY2hhciogcm9sZVRvU3RyaW5nKEF0
a1JvbGUgcm9sZSkKK2NvbnN0IGdjaGFyKiByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQogewog
ICAgIHN3aXRjaCAocm9sZSkgewogICAgIGNhc2UgQVRLX1JPTEVfQUxFUlQ6CkBAIC0yOTgsNyAr
Mzc2LDcgQEAgc3RhdGljIGNvbnN0IGdjaGFyKiByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQog
ICAgIH0KIH0KIAotc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQqIGVsZW1lbnQpCitTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
IApAQCAtMzQ1LDExICs0MjMsMTMgQEAgc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICAvLyBXZSBhcHBlbmQgdGhl
IEFUSyBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFzIGEgc2luZ2xlIGxpbmUgYXQgdGhlIGVuZC4KICAg
ICBidWlsZGVyLmFwcGVuZCgiQVhQbGF0Zm9ybUF0dHJpYnV0ZXM6ICIpOwotICAgIGJ1aWxkZXIu
YXBwZW5kKGdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKGVsZW1lbnQtPnBsYXRmb3JtVUlFbGVt
ZW50KCkuZ2V0KCkpKTsKKyAgICBidWlsZGVyLmFwcGVuZChnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0
cmluZyhlbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVudCgpLmdldCgpLCBPYmplY3RBdHRyaWJ1dGVU
eXBlKSk7CiAKICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCit9IC8vIG5hbWVz
cGFjZQorCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFBs
YXRmb3JtVUlFbGVtZW50IGVsZW1lbnQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKIHsKQEAg
LTU3MCwyNyArNjUwLDEzIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlCiAgICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgU3RyaW5nIGF0a0F0
dHJpYnV0ZU5hbWUgPSBjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUoYXR0cmlidXRlKTsKLSAg
ICBpZiAoYXRrQXR0cmlidXRlTmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiAKLSAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUg
PSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSwg
YXRrQXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAvLyBUcnkgb2JqZWN0IGF0dHJp
YnV0ZXMgZmlyc3QuCisgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0
VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIE9iamVjdEF0dHJpYnV0ZVR5
cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOwogCi0gICAgLy8gSW4gY2FzZSBvZiAnYXJpYS1pbnZhbGlk
JyB3aGVuIHRoZSBhdHRyaWJ1dGUgZW1wdHkgb3IgaGFzICJmYWxzZSIgZm9yIEFUSwotICAgIC8v
IGFjY29yZGluZyB0byBodHRwOi8vd3d3LnczLm9yZy9XQUkvUEYvYXJpYS1pbXBsZW1lbnRhdGlv
bi8jbWFwcGluZyBhdHRyaWJ1dGUKLSAgICAvLyBpcyBub3QgbWFwcGVkIGJ1dCBsYXlvdXQgdGVz
dHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4KLSAgICBpZiAoYXR0cmlidXRlVmFsdWUuaXNFbXB0eSgp
ICYmIGF0a0F0dHJpYnV0ZU5hbWUgPT0gImFyaWEtaW52YWxpZCIpCi0gICAgICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZmFsc2UiKTsKLQotICAgIC8vIFdlIG5lZWQg
dG8gdHJhbnNsYXRlIEFUSyB2YWx1ZXMgZXhwb3NlZCBmb3IgJ2FyaWEtc29ydCcgKGUuZy4gJ2Fz
Y2VuZGluZycpCi0gICAgLy8gaW50byB0aG9zZSBleHBlY3RlZCBieSB0aGUgbGF5b3V0IHRlc3Rz
IChlLmcuICdBWEFzY2VuZGluZ1NvcnREaXJlY3Rpb24nKS4KLSAgICBpZiAoYXRrQXR0cmlidXRl
TmFtZSA9PSAic29ydCIpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlID09ICJhc2NlbmRp
bmciKQotICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
WEFzY2VuZGluZ1NvcnREaXJlY3Rpb24iKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlID09
ICJkZXNjZW5kaW5nIikKLSAgICAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQVhEZXNjZW5kaW5nU29ydERpcmVjdGlvbiIpOwotCi0gICAgICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQVhVbmtub3duU29ydERpcmVjdGlvbiIpOwot
ICAgIH0KKyAgICAvLyBUcnkgdGV4dCBhdHRyaWJ1dGVzIGlmIHRoZSByZXF1ZXN0ZWQgb25lIHdh
cyBub3QgZm91bmQgYW5kIHdlIGhhdmUgYW4gQXRrVGV4dCBvYmplY3QuCisgICAgaWYgKGF0dHJp
YnV0ZVZhbHVlLmlzRW1wdHkoKSAmJiBBVEtfSVNfVEVYVChtX2VsZW1lbnQuZ2V0KCkpKQorICAg
ICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVD
VChtX2VsZW1lbnQuZ2V0KCkpLCBUZXh0QXR0cmlidXRlVHlwZSwgYXRrQXR0cmlidXRlTmFtZSk7
CiAKICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXR0cmlidXRlVmFs
dWUudXRmOCgpLmRhdGEoKSk7CiB9CkBAIC02MjgsNyArNjk0LDExIEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRl
KQogICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVG
b3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIGF0a0F0dHJpYnV0ZU5hbWUudXRmOCgp
LmRhdGEoKSk7CisgICAgLy8gRm9yIG5vdywgYW4gYXR0cmlidXRlIGlzIHN1cHBvcnRlZCB3aGV0
aGVyIGl0J3MgZXhwb3NlZCBhcyBhIG9iamVjdCBvciBhIHRleHQgYXR0cmlidXRlLgorICAgIFN0
cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVD
VChtX2VsZW1lbnQuZ2V0KCkpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCBhdGtBdHRyaWJ1dGVOYW1l
KTsKKyAgICBpZiAoYXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBhdHRyaWJ1dGVW
YWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0
KCkpLCBUZXh0QXR0cmlidXRlVHlwZSwgYXRrQXR0cmlidXRlTmFtZSk7CisKICAgICByZXR1cm4g
IWF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKTsKIH0KIApAQCAtODA3LDcgKzg3Nyw3IEBAIGRvdWJs
ZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0CiAgICAgLy8gYW4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCwgc28gd2UgY2FuIHJldXNlIHNvbWUgdGVzdHMgdG8gY2hlY2sg
dGhlIGxldmVsCiAgICAgLy8gYm90aCBmb3IgSFRNTCBoZWFkaW5ncyBhbmQgb2JqZWN0cyB3aXRo
IHRoZSBhcmlhLWxldmVsIGF0dHJpYnV0ZS4KICAgICBpZiAoYXRrX29iamVjdF9nZXRfcm9sZShB
VEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpID09IEFUS19ST0xFX0hFQURJTkcpIHsKLSAgICAg
ICAgU3RyaW5nIGhlYWRpbmdMZXZlbCA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09C
SkVDVChtX2VsZW1lbnQuZ2V0KCkpLCAibGV2ZWwiKTsKKyAgICAgICAgU3RyaW5nIGhlYWRpbmdM
ZXZlbCA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0
KCkpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCAibGV2ZWwiKTsKICAgICAgICAgYm9vbCBvazsKICAg
ICAgICAgZG91YmxlIGhlYWRpbmdMZXZlbFZhbHVlID0gaGVhZGluZ0xldmVsLnRvRG91YmxlKCZv
ayk7CiAgICAgICAgIGlmIChvaykKQEAgLTEyMTMsNyArMTI4Myw4IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aGFzUG9wdXAoKSBjb25zdAogICAgIGlmICghQVRLX0lTX09CSkVDVCht
X2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZXF1
YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxl
bWVudC5nZXQoKSksICJoYXNwb3B1cCIpLCAidHJ1ZSIpOworICAgIFN0cmluZyBoYXNQb3B1cFZh
bHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQo
KSksIE9iamVjdEF0dHJpYnV0ZVR5cGUsICJoYXNwb3B1cCIpOworICAgIHJldHVybiBlcXVhbEln
bm9yaW5nQ2FzZShoYXNQb3B1cFZhbHVlLCAidHJ1ZSIpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCi0tIAoxLjcuMTAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213168</attachid>
            <date>2013-10-02 09:15:10 -0700</date>
            <delta_ts>2013-10-02 10:59:06 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2013-10-01-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>47691</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA5ZGY5ZGM1MzZkYTM4OTYzNjJmMjEyY2YyZGYwOGY2Mzg0YmM1Mzk3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogVHVlLCAxIE9jdCAyMDEzIDE3OjMyOjAxICswMTAwClN1YmplY3Q6IFtQ
QVRDSF0gMjAxMy0xMC0wMSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1
bmcuY29tPgoKICAgICAgICBbQVRLXSBFeHBvc2UgYXJpYS1pbnZhbGlkIGFzIGEgdGV4dCBhdHRy
aWJ1dGUgKG5vdCBvYmplY3QgYXR0cmlidXRlKQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIwMTUKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCgogICAgICAgIEV4cG9zZSB0aGUgYXJpYS1pbnZhbGlkIGF0dHJpYnV0ZSBjb3JyZWN0
bHkgdGhyb3VnaCBhIHRleHQKICAgICAgICBhdHRyaWJ1dGUgKHRocm91Z2ggdGhlIEF0a1RleHQg
aW50ZXJmYWNlKSBpbnN0ZWFkIG9mIHVzaW5nIGFuCiAgICAgICAgb2JqZWN0LCBhY2NvcmRpbmcg
dG8gd2hhdCB0aGUgV0FJLUFSSUEgc3BlY3Mgc2F5cy4KICAgICAgICBodHRwOi8vd3d3LnczLm9y
Zy9UUi93YWktYXJpYS1pbXBsZW1lbnRhdGlvbi8jbWFwcGluZ19zdGF0ZS1wcm9wZXJ0eQoKICAg
ICAgICBUaGlzIHdpbGwgYmUgdGVzdGVkIGJ5IGFjY2VzaWJpbGl0eS9hcmlhLWludmFsaWQuaHRt
bCwgd2hpY2ggc2hvdWxkCiAgICAgICAga2VlcCBwYXNzaW5nIGFmdGVyIHRoYW5rcyB0byB0aGUg
Y2hhbmdlcyBkb25lIGluIHRoZSBEUlQgYW5kIFdLVFIuCgogICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aW52YWxpZFN0YXR1cyk6IFVwZGF0ZSB0aGlzIG1ldGhvZAogICAgICAgIHRvIG9u
bHkgcmV0dXJuIHZhbHVlcyByZWNvZ25pemVkIGJ5IHRoZSBXQUktQVJJQSBzcGVjaWZpY2F0aW9u
LgoKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
ZXh0LmNwcDoKICAgICAgICAoZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6
IEV4cG9zZSBhcmlhLWludmFsaWQgYXMgYQogICAgICAgIGN1c3RvbSB0ZXh0IGF0dHJpYnV0ZSAn
aW52YWxpZCcsIGZvbGxvd2luZyB0aGUgbGVhZCBvZiBGaXJlZm94LgogICAgICAgIEFsc28gcmVn
aXN0ZXIgdGhhdCBjdXN0b20gYXR0cmlidXRlIGFzIGEgQXRrVGV4dEF0dHJpYnV0ZS4KICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMpOiBSZW1vdmUgZXhwb3N1cmUgb2Yg
YXJpYS1pbnZhbGlkCiAgICAgICAgYXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSBmcm9tIGhlcmUuCgoy
MDEzLTEwLTAxICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+
CgogICAgICAgIFtBVEtdIEV4cG9zZSBhcmlhLWludmFsaWQgYXMgYSB0ZXh0IGF0dHJpYnV0ZSAo
bm90IG9iamVjdCBhdHRyaWJ1dGUpCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMjAxNQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
CiAgICAgICAgQWRhcHRlZCBEUlQgYW5kIFdLVFIgdG8gY2hlY2sgdGhlIGV4cG9zdXJlIG9mIHRo
ZSBhcmlhLWludmFsaWQKICAgICAgICBhdHRyaWJ1dGUgYXMgYSB0ZXh0IGF0dHJpYnV0ZSwgaW5z
dGVhZCBvZiBhbiBvYmplY3QgYXR0cmlidXRlLgoKICAgICAgICBBbHNvLCBkb25lIHNvbWUgcmVm
YWN0b3Jpbmcgb2YgdGhlIGNvZGUgdG8gdHJ5IHRvIGtlZXAgdGhpbmdzCiAgICAgICAgc2ltcGxl
ciBhbmQgbW9yZSBjb2hlcmVudCwgYnkgZGVmaW5pbmcgbmV3IGhlbHBlciBmdW5jdGlvbnMsCiAg
ICAgICAgc2ltcGxpZnlpbmcgY29kZSwgbW92aW5nIHN0YXRpYyB2YXJpYWJsZXMgYW5kIGZ1bmN0
aW9ucyBpbnRvCiAgICAgICAgdW5uYW1tZWQgbmFtZXNwYWNlcyBhbmQgc28gb24sIHdpdGhvdXQg
YWx0ZXJpbmcgdGhlIGxvZ2ljIG90aGVyCiAgICAgICAgdGhhbiBmb3IgY2hlY2tpbmcgdGhlIHRl
eHQgYXR0cmlidXRlIGZvciBhcmlhLWludmFsaWQuCgogICAgICAgICogRHVtcFJlbmRlclRyZWUv
YXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgogICAgICAgIChjb3JlQXR0cmlidXRl
VG9BdGtBdHRyaWJ1dGUpOiBDb25zaWRlciAnaW52YWxpZCcgYXMgdGhlIG5hbWUgb2YKICAgICAg
ICB0aGUgYXR0cmlidXRlIGV4cG9zZWQgYnkgdGhlIEFUSyB3cmFwcGVyLCBub3QgJ2FyaWEtaW52
YWxpZCcuCiAgICAgICAgQWxzbywgbmV2ZXIgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBpZiBub3Qg
ZmFsbGluZyB0aHJvdWdoIGFueSBvZgogICAgICAgIHRoZSBjYXNlcyBjaGVja2VkIGhlcmUsIGFu
ZCByZXR1cm4gdGhlIG9yaWdpbmFsIGF0dHJpYnV0ZSBpbnN0ZWFkLgogICAgICAgIChhdGtBdHRy
aWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0ZVZhbHVlKTogTmV3IGhlbHBlciBmdW5jdGlvbiB0bwog
ICAgICAgIG1hdGNoIHRoZSBhdHRyaWJ1dGVzIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgQVRLIHdy
YXBwZXIgd2l0aCB0aGUKICAgICAgICB2YWx1ZXMgZXhwZWN0ZWQgYnkgdGhlIGxheW91dCB0ZXN0
cy4gTW92ZWQgdGhlIG1hcHBpbmdzIGZvciB0aGUKICAgICAgICB2YWx1ZXMgb2YgQVhTb3J0RGly
ZWN0aW9uIGhlcmUgYXMgd2VsbC4KICAgICAgICAoZ2V0QXR0cmlidXRlU2V0KTogTmV3IGhlbHBl
ciBmdW5jdGlvbiB0byByZXRyaWV2ZSBhIGxpc3Qgb2YKICAgICAgICBhdHRyaWJ1dGVzIChhbiBB
dGtBdHRyaWJ1dGVTZXQpIGZyb20gYW4gQXRrT2JqZWN0IHVzaW5nIHRoZSByaWdodAogICAgICAg
IEFQSSBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSB3YW50IHRoZSBvYmplY3QgYXR0cmlidXRlcyBv
ciB0aGUgdGV4dAogICAgICAgIGF0dHJpYnV0ZXMgKGluIGNhc2UgdGhlIG9iamVjdCBpbXBsZW1l
bnRzIEF0a1RleHQpLgogICAgICAgIChnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKTogU2ltcGxp
ZmllZCBieSB1c2luZyBnZXRBdHRyaWJ1dGVTZXQKICAgICAgICBhbmQgYXRrQXR0cmlidXRlVmFs
dWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZS4gQWxzbywgYWRkZWQgYSBuZXcKICAgICAgICBwYXJhbWV0
ZXIgdG8gaW5kaWNhdGVyIHdoZXRoZXIgd2UgYXJlIGludGVyZXN0ZWQgaW4gb2JqZWN0CiAgICAg
ICAgYXR0cmlidXRlcyBvciB0ZXh0IGF0dHJpYnV0ZXMuCiAgICAgICAgKGdldEF0a0F0dHJpYnV0
ZVNldEFzU3RyaW5nKTogRGl0dG8uCiAgICAgICAgKGF0dHJpYnV0ZXNPZkVsZW1lbnQpOiBVcGRh
dGVkIHRvIHBhc3MgdGhlIG5ldyByZXF1aXJlZCBwYXJhbWV0ZXIKICAgICAgICB0byBnZXRBdGtB
dHRyaWJ1dGVTZXRBc1N0cmluZywgaW5kaWNhdGluZyB0aGF0IHdlIHdhbnQgdGhlIG9iamVjdAog
ICAgICAgIGF0dHJpYnV0ZXMgaW4gdGhpcyBjYXNlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxp
dHkuCiAgICAgICAgKGluZGV4UmFuZ2VJblRhYmxlKTogTW92ZWQgdXAgaW4gdGhlIGZpbGUgaW50
byB0aGUgdW5uYW1tZWQgbmFtZXNwYWNlLgogICAgICAgIChhbHRlckN1cnJlbnRWYWx1ZSk6IERp
dHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1
ZSk6IEFmdGVyIG1vdmluZyBtb3N0CiAgICAgICAgb2YgdGhlIGNvZGUgaGVyZSB0byB0aGUgbmV3
IGhlbHBlciBmdW5jdGlvbnMsIHNpbXBsaWZpZWQgaXQgYnkKICAgICAgICBqdXN0IGNoZWNraW5n
IHdoZXRoZXIgdGhlIHJlcXVpcmVkIGF0dHJpYnV0ZSBpcyBwcm92aWRlZCBhcyBhbgogICAgICAg
IG9iamVjdCBhdHRyaWJ1dGUgb3IsIGlmIHRoYXQncyBub3QgdGhlIGNhc2UsIGFzIGEgdGV4dCBh
dHRyaWJ1dGUuCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3Vw
cG9ydGVkKTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVl
KTogVXBkYXRlZCB0byBwYXNzIHRoZSBuZXcKICAgICAgICByZXF1aXJlZCBwYXJhbWV0ZXIgdG8g
Z2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZCwgaW5kaWNhdGluZyB0aGF0CiAgICAgICAgd2Ugd2Fu
dCB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgaW4gdGhpcyBjYXNlLgogICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpoYXNQb3B1cCk6IERpdHRvLgoKICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgogICAg
ICAgIChXVFI6OmNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZSk6IFNhbWUgY2hhbmdlcyB0aGFu
IGZvciBEUlQuCiAgICAgICAgKFdUUjo6YXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVW
YWx1ZSk6IERpdHRvLgogICAgICAgIChXVFI6OmdldEF0dHJpYnV0ZVNldCk6IERpdHRvLgogICAg
ICAgIChXVFI6OmdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQpOiBEaXR0by4KICAgICAgICAoV1RS
OjpnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyk6IERpdHRvLgogICAgICAgIChXVFI6OmF0dHJp
YnV0ZXNPZkVsZW1lbnQpOiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKTogRGl0dG8uCiAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUpOiBEaXR0by4KICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCk6IERpdHRvLgoKMjAxMy0xMC0wMSAg
TWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29tPgoKICAgICAgICBb
QVRLXSBFeHBvc2UgYXJpYS1pbnZhbGlkIGFzIGEgdGV4dCBhdHRyaWJ1dGUgKG5vdCBvYmplY3Qg
YXR0cmlidXRlKQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjIwMTUKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFVw
ZGF0ZWQgdGhlIGFyaWEtaW52YWxpZC5odG1sIGxheW91dCB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGF0
IGl0CiAgICAgICAgYmVoYXZlcyBhcyBkZWZpbmVkIGJ5IHRoZSBXQUktQVJJQSBzcGVjaWZpY2F0
aW9uIGZvciB2YWx1ZXMgb3RoZXIKICAgICAgICB0aGFuICdmYWxzZScsICd0cnVlJywgJ2dyYW1t
YXInIGFuZCAnc3BlbGxpbmcnLgoKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXJpYS1pbnZhbGlk
Lmh0bWw6IFVwZGF0ZWQgdGVzdC4KICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXJpYS1pbnZhbGlk
LWV4cGVjdGVkLnR4dDogVXBkYXRlZCBleHBlY3RhdGlvbnMuCi0tLQogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICsKIC4uLi9hY2Nlc3Np
YmlsaXR5L2FyaWEtaW52YWxpZC1leHBlY3RlZC50eHQgICAgICAgIHwgICAgNSArLQogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLWludmFsaWQuaHRtbCAgICAgICAgfCAgIDIwICstCiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjcg
KysKIC4uLi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgIHwg
ICAxMyArLQogLi4uL2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgICAgICAg
ICAgfCAgIDE0ICsKIC4uLi9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwICAgICAg
ICAgICAgIHwgICAgNCAtCiBUb29scy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgNjEgKysrKysKIC4uLi9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0
ay5jcHAgICAgICAgICAgICAgIHwgIDI4MyArKysrKysrKysrKystLS0tLS0tLQogLi4uL2F0ay9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCAgICAgICAgICAgICAgfCAgMTY5ICsrKysrKysr
LS0tLQogMTAgZmlsZXMgY2hhbmdlZCwgNDQzIGluc2VydGlvbnMoKyksIDE2NyBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggZTQ5NjdkMC4uMWFmOWY2ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEz
LTEwLTAxICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CisK
KyAgICAgICAgW0FUS10gRXhwb3NlIGFyaWEtaW52YWxpZCBhcyBhIHRleHQgYXR0cmlidXRlIChu
b3Qgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMjAxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZWQgdGhlIGFyaWEtaW52YWxpZC5odG1sIGxheW91dCB0ZXN0IHRv
IG1ha2Ugc3VyZSB0aGF0IGl0CisgICAgICAgIGJlaGF2ZXMgYXMgZGVmaW5lZCBieSB0aGUgV0FJ
LUFSSUEgc3BlY2lmaWNhdGlvbiBmb3IgdmFsdWVzIG90aGVyCisgICAgICAgIHRoYW4gJ2ZhbHNl
JywgJ3RydWUnLCAnZ3JhbW1hcicgYW5kICdzcGVsbGluZycuCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2FyaWEtaW52YWxpZC5odG1sOiBVcGRhdGVkIHRlc3QuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9hcmlhLWludmFsaWQtZXhwZWN0ZWQudHh0OiBVcGRhdGVkIGV4cGVjdGF0aW9ucy4K
KwogMjAxMy0xMC0wMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgog
CiAgICAgICAgIENlbnRlciBtaXNzcGVsbGluZyBkb3RzIGFjcm9zcyB3aWR0aCBvZiB3b3JkCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaW52YWxpZC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaW52YWxpZC1leHBlY3RlZC50
eHQKaW5kZXggYjkxZDUyNS4uOGNmMDk5NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9hcmlhLWludmFsaWQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvYXJpYS1pbnZhbGlkLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKLSAgIAor
ICAgICAgCiBUaGlzIHRlc3RzIHRoYXQgYXJpYS1pbnZhbGlkIGNhdXNlcyB0aGUgcmlnaHQgYXR0
cmlidXRlIHRvIGJlIHJldHVybmVkIGFuZCBpdCBlbnN1cmVzIGEgbm90aWZpY2F0aW9uIGlzIHNl
bnQgd2hlbiBpdCBjaGFuZ2VzLgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCkBAIC02LDYg
KzYsOSBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogCiBQQVNTIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ0F0dHJpYnV0ZVZhbHVlKCdBWEludmFsaWQnKSBp
cyAndHJ1ZScKIFBBU1MgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQuc3Ry
aW5nQXR0cmlidXRlVmFsdWUoJ0FYSW52YWxpZCcpIGlzICdncmFtbWFyJworUEFTUyBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5zdHJpbmdBdHRyaWJ1dGVWYWx1ZSgnQVhJ
bnZhbGlkJykgaXMgJ3NwZWxsaW5nJworUEFTUyBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1
c2VkRWxlbWVudC5zdHJpbmdBdHRyaWJ1dGVWYWx1ZSgnQVhJbnZhbGlkJykgaXMgJ3RydWUnCitQ
QVNTIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ0F0dHJpYnV0
ZVZhbHVlKCdBWEludmFsaWQnKSBpcyAnZmFsc2UnCiBQQVNTIGFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ0F0dHJpYnV0ZVZhbHVlKCdBWEludmFsaWQnKSBpcyAn
ZmFsc2UnCiBQQVNTIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKCdBWEludmFsaWQnKSBpcyAnZmFsc2UnCiBQQVNTIGFkZGVkTm90aWZp
Y2F0aW9uIGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJp
YS1pbnZhbGlkLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaW52YWxpZC5o
dG1sCmluZGV4IDYxMThkNzUuLjg5YzY2ZDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvYXJpYS1pbnZhbGlkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9hcmlhLWludmFsaWQuaHRtbApAQCAtOCw4ICs4LDExIEBACiAKIDxpbnB1dCB0eXBlPSJ0ZXh0
IiBpZD0idGV4dDEiIGFyaWEtaW52YWxpZD0idHJ1ZSI+CiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9
InRleHQyIiBhcmlhLWludmFsaWQ9ImdyYW1tYXIiPgotPGlucHV0IHR5cGU9InRleHQiIGlkPSJ0
ZXh0MyIgYXJpYS1pbnZhbGlkPSIiPgotPGlucHV0IHR5cGU9InRleHQiIGlkPSJ0ZXh0NCI+Cis8
aW5wdXQgdHlwZT0idGV4dCIgaWQ9InRleHQzIiBhcmlhLWludmFsaWQ9InNwZWxsaW5nIj4KKzxp
bnB1dCB0eXBlPSJ0ZXh0IiBpZD0idGV4dDQiIGFyaWEtaW52YWxpZD0ibm90YWxsb3dlZCI+Cis8
aW5wdXQgdHlwZT0idGV4dCIgaWQ9InRleHQ1IiBhcmlhLWludmFsaWQ9ImZhbHNlIj4KKzxpbnB1
dCB0eXBlPSJ0ZXh0IiBpZD0idGV4dDYiIGFyaWEtaW52YWxpZD0iIj4KKzxpbnB1dCB0eXBlPSJ0
ZXh0IiBpZD0idGV4dDciPgogCiA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KIDxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgpAQCAtMzgsMTYgKzQxLDI1IEBACiAgICAgICAgIHNob3VsZEJlKCJhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5zdHJpbmdBdHRyaWJ1dGVWYWx1ZSgn
QVhJbnZhbGlkJykiLCAiJ2dyYW1tYXInIik7CiAKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInRleHQzIikuZm9jdXMoKTsKLSAgICAgICAgc2hvdWxkQmUoImFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ0F0dHJpYnV0ZVZhbHVlKCdBWEludmFsaWQn
KSIsICInZmFsc2UnIik7CisgICAgICAgIHNob3VsZEJlKCJhY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5mb2N1c2VkRWxlbWVudC5zdHJpbmdBdHRyaWJ1dGVWYWx1ZSgnQVhJbnZhbGlkJykiLCAiJ3Nw
ZWxsaW5nJyIpOwogCiAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0NCIpLmZv
Y3VzKCk7CisgICAgICAgIHNob3VsZEJlKCJhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2Vk
RWxlbWVudC5zdHJpbmdBdHRyaWJ1dGVWYWx1ZSgnQVhJbnZhbGlkJykiLCAiJ3RydWUnIik7CisK
KyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQ1IikuZm9jdXMoKTsKKyAgICAg
ICAgc2hvdWxkQmUoImFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKCdBWEludmFsaWQnKSIsICInZmFsc2UnIik7CisKKyAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQ2IikuZm9jdXMoKTsKKyAgICAgICAgc2hvdWxkQmUo
ImFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ0F0dHJpYnV0ZVZh
bHVlKCdBWEludmFsaWQnKSIsICInZmFsc2UnIik7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInRleHQ3IikuZm9jdXMoKTsKICAgICAgICAgc2hvdWxkQmUoImFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ0F0dHJpYnV0ZVZhbHVlKCdBWEludmFs
aWQnKSIsICInZmFsc2UnIik7CiAKICAgICAgICAgbm90aWZpY2F0aW9uRWxlbWVudCA9IGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OwogICAgICAgICB2YXIgYWRkZWROb3Rp
ZmljYXRpb24gPSBub3RpZmljYXRpb25FbGVtZW50LmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKG5v
dGlmaWNhdGlvbkNhbGxiYWNrKTsKICAgICAgICAgc2hvdWxkQmVUcnVlKCJhZGRlZE5vdGlmaWNh
dGlvbiIpOwogCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0NCIpLnNldEF0
dHJpYnV0ZSgiYXJpYS1pbnZhbGlkIiwgInNwZWxsaW5nIik7CisgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0ZXh0NyIpLnNldEF0dHJpYnV0ZSgiYXJpYS1pbnZhbGlkIiwgInNwZWxs
aW5nIik7CiAgICAgfQogCiA8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjZmY5YzczLi43ZjgyNjEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTMtMTAtMDEgIE1hcmlvIFNhbmNoZXog
UHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbQVRLXSBFeHBvc2Ug
YXJpYS1pbnZhbGlkIGFzIGEgdGV4dCBhdHRyaWJ1dGUgKG5vdCBvYmplY3QgYXR0cmlidXRlKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMDE1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3NlIHRo
ZSBhcmlhLWludmFsaWQgYXR0cmlidXRlIGNvcnJlY3RseSB0aHJvdWdoIGEgdGV4dAorICAgICAg
ICBhdHRyaWJ1dGUgKHRocm91Z2ggdGhlIEF0a1RleHQgaW50ZXJmYWNlKSBpbnN0ZWFkIG9mIHVz
aW5nIGFuCisgICAgICAgIG9iamVjdCwgYWNjb3JkaW5nIHRvIHdoYXQgdGhlIFdBSS1BUklBIHNw
ZWNzIHNheXMuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLWltcGxlbWVu
dGF0aW9uLyNtYXBwaW5nX3N0YXRlLXByb3BlcnR5CisKKyAgICAgICAgVGhpcyB3aWxsIGJlIHRl
c3RlZCBieSBhY2Nlc2liaWxpdHkvYXJpYS1pbnZhbGlkLmh0bWwsIHdoaWNoIHNob3VsZAorICAg
ICAgICBrZWVwIHBhc3NpbmcgYWZ0ZXIgdGhhbmtzIHRvIHRoZSBjaGFuZ2VzIGRvbmUgaW4gdGhl
IERSVCBhbmQgV0tUUi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbnZhbGlk
U3RhdHVzKTogVXBkYXRlIHRoaXMgbWV0aG9kCisgICAgICAgIHRvIG9ubHkgcmV0dXJuIHZhbHVl
cyByZWNvZ25pemVkIGJ5IHRoZSBXQUktQVJJQSBzcGVjaWZpY2F0aW9uLgorCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAg
ICAgICAoZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6IEV4cG9zZSBhcmlh
LWludmFsaWQgYXMgYQorICAgICAgICBjdXN0b20gdGV4dCBhdHRyaWJ1dGUgJ2ludmFsaWQnLCBm
b2xsb3dpbmcgdGhlIGxlYWQgb2YgRmlyZWZveC4KKyAgICAgICAgQWxzbyByZWdpc3RlciB0aGF0
IGN1c3RvbSBhdHRyaWJ1dGUgYXMgYSBBdGtUZXh0QXR0cmlidXRlLgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVHZXRBdHRyaWJ1dGVzKTogUmVtb3ZlIGV4cG9zdXJlIG9mIGFyaWEtaW52
YWxpZAorICAgICAgICBhcyBhbiBvYmplY3QgYXR0cmlidXRlIGZyb20gaGVyZS4KKwogMjAxMy0x
MC0wMSAgU3phYm9sY3MgRMOhdmlkICA8ZGF2aWRzekBpbmYudS1zemVnZWQuaHU+CiAKICAgICAg
ICAgUmVuYW1lIFVSTCB0eXBlIHZhcmlhYmxlcyBpbiBDdXJsIG5ldHdvcmsgYmFja2VuZC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCmluZGV4IDEzZGE4MDAuLmE1YTU2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMTM0MywxNSArMTM0Mywy
MiBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFJc011bHRpbGluZSgpIGNvbnN0CiBj
b25zdCBBdG9taWNTdHJpbmcmIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmludmFsaWRTdGF0dXMoKSBj
b25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBpbnZh
bGlkU3RhdHVzRmFsc2UsICgiZmFsc2UiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGludmFs
aWRTdGF0dXNUcnVlLCAoInRydWUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGludmFsaWRT
dGF0dXNTcGVsbGluZywgKCJzcGVsbGluZyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaW52
YWxpZFN0YXR1c0dyYW1tYXIsICgiZ3JhbW1hciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKICAgICAKICAgICAvLyBhcmlhLWludmFsaWQgY2FuIHJldHVybiBmYWxzZSAo
ZGVmYXVsdCksIGdyYW1tZXIsIHNwZWxsaW5nLCBvciB0cnVlLgogICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgYXJpYUludmFsaWQgPSBnZXRBdHRyaWJ1dGUoYXJpYV9pbnZhbGlkQXR0cik7CiAgICAg
Ci0gICAgLy8gSWYgZW1wdHkgb3Igbm90IHByZXNlbnQsIGl0IHNob3VsZCByZXR1cm4gZmFsc2Uu
Ci0gICAgaWYgKGFyaWFJbnZhbGlkLmlzRW1wdHkoKSkKKyAgICAvLyBJZiAnZmFsc2UnLCBlbXB0
eSBvciBub3QgcHJlc2VudCwgaXQgc2hvdWxkIHJldHVybiBmYWxzZS4KKyAgICBpZiAoYXJpYUlu
dmFsaWQuaXNFbXB0eSgpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGFyaWFJbnZhbGlkLCBpbnZhbGlk
U3RhdHVzRmFsc2UpKQogICAgICAgICByZXR1cm4gaW52YWxpZFN0YXR1c0ZhbHNlOwogICAgIAot
ICAgIHJldHVybiBhcmlhSW52YWxpZDsKKyAgICAvLyBPbmx5ICd0cnVlJywgJ2dyYW1tYXInIGFu
ZCAnc3BlbGxpbmcnIGFyZSB2YWx1ZXMgcmVjb2duaXNlZCBieSB0aGUgV0FJLUFSSUEKKyAgICAv
LyBzcGVjaWZpY2F0aW9uLiBBbnkgb3RoZXIgbm9uIGVtcHR5IHN0cmluZyBzaG91bGQgYmUgdHJl
YXRlZCBhcyAndHJ1ZScuCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFyaWFJbnZhbGlkLCBp
bnZhbGlkU3RhdHVzU3BlbGxpbmcpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGFyaWFJbnZhbGlkLCBp
bnZhbGlkU3RhdHVzR3JhbW1hcikpCisgICAgICAgIHJldHVybiBhcmlhSW52YWxpZDsKKyAgICBy
ZXR1cm4gaW52YWxpZFN0YXR1c1RydWU7CiB9CiAgCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6
Omhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKaW5kZXggN2Y0MTYwYi4uMzVmZTFkMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtNTYsNiArNTYsMTEgQEAKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKy8vIFRleHQgYXR0cmlidXRlIHRvIGV4cG9zZSB0
aGUgQVJJQSAnYXJpYS1pbnZhbGlkJyBhdHRyaWJ1dGUuIEluaXRpYWxseSBpbml0aWFsaXplZAor
Ly8gdG8gQVRLX1RFWFRfQVRUUl9JTlZBTElEICh3aGljaCBtZWFucyAnaW52YWxpZCcgdGV4dCBh
dHRyaWJ1dGUnKSwgd2lsbCBsYXRlciBvbgorLy8gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgY3Vz
dG9tIHJlZ2lzdGVyZWQgQXRrVGV4dEF0dHJpYnV0ZSB0aGF0IHdlIHdpbGwgdXNlLgorc3RhdGlj
IEF0a1RleHRBdHRyaWJ1dGUgYXRrVGV4dEF0dHJpYnV0ZUludmFsaWQgPSBBVEtfVEVYVF9BVFRS
X0lOVkFMSUQ7CisKIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a1RleHQqIHRl
eHQpCiB7CiAgICAgaWYgKCFXRUJLSVRfSVNfQUNDRVNTSUJMRSh0ZXh0KSkKQEAgLTI5NCw2ICsy
OTksMTUgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNz
aWJpbGl0eU9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXQKICAgICBpZiAoIWxhbmd1YWdlLmlzRW1w
dHkoKSkKICAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtf
dGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9MQU5HVUFHRSksIGxhbmd1YWdl
LnV0ZjgoKS5kYXRhKCkpOwogCisgICAgU3RyaW5nIGludmFsaWRTdGF0dXMgPSBvYmplY3QtPmlu
dmFsaWRTdGF0dXMoKS5zdHJpbmcoKTsKKyAgICBpZiAoIWludmFsaWRTdGF0dXMuaXNFbXB0eSgp
ICYmIGludmFsaWRTdGF0dXMgIT0gImZhbHNlIikgeworICAgICAgICAvLyBSZWdpc3RlciB0aGUg
Y3VzdG9tIGF0dHJpYnV0ZSBmb3IgJ2FyaWEtaW52YWxpZCcgaWYgbm90IGRvbmUgeWV0LgorICAg
ICAgICBpZiAoYXRrVGV4dEF0dHJpYnV0ZUludmFsaWQgPT0gQVRLX1RFWFRfQVRUUl9JTlZBTElE
KQorICAgICAgICAgICAgYXRrVGV4dEF0dHJpYnV0ZUludmFsaWQgPSBhdGtfdGV4dF9hdHRyaWJ1
dGVfcmVnaXN0ZXIoImludmFsaWQiKTsKKworICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJp
YnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShhdGtUZXh0QXR0cmli
dXRlSW52YWxpZCksIGludmFsaWRTdGF0dXMudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCmluZGV4IGFk
ODhiZGEuLmRiMWY2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKQEAgLTUwNSwx
MCArNTA1LDYgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZUdldEF0
dHJpYnV0ZXMoQXRrT2JqZWN0KiBvYmplY3QpCiAgICAgaWYgKGNvcmVPYmplY3QtPmFyaWFIYXNQ
b3B1cCgpKQogICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRy
aWJ1dGVTZXQsICJoYXNwb3B1cCIsICJ0cnVlIik7CiAKLSAgICBTdHJpbmcgaW52YWxpZFN0YXR1
cyA9IGNvcmVPYmplY3QtPmludmFsaWRTdGF0dXMoKS5zdHJpbmcoKTsKLSAgICBpZiAoIWludmFs
aWRTdGF0dXMuaXNFbXB0eSgpICYmIGludmFsaWRTdGF0dXMgIT0gImZhbHNlIikKLSAgICAgICAg
YXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAiYXJpYS1p
bnZhbGlkIiwgY29yZU9iamVjdC0+aW52YWxpZFN0YXR1cygpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwotCiAgICAgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb24gc29ydERpcmVjdGlvbiA9IGNv
cmVPYmplY3QtPnNvcnREaXJlY3Rpb24oKTsKICAgICBpZiAoc29ydERpcmVjdGlvbiAhPSBTb3J0
RGlyZWN0aW9uTm9uZSkgewogICAgICAgICAvLyBXQUktQVJJQSBzcGVjIHNheXMgdG8gdHJhbnNs
YXRlIHRoZSB2YWx1ZSBhcyBpcyBmcm9tIHRoZSBhdHRyaWJ1dGUuCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTNmNmIwOC4uZDhkZmZlYyAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDY0IEBACisyMDEzLTEwLTAxICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ft
c3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gRXhwb3NlIGFyaWEtaW52YWxpZCBhcyBhIHRleHQg
YXR0cmlidXRlIChub3Qgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjAxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkYXB0ZWQgRFJUIGFuZCBXS1RSIHRvIGNoZWNrIHRo
ZSBleHBvc3VyZSBvZiB0aGUgYXJpYS1pbnZhbGlkCisgICAgICAgIGF0dHJpYnV0ZSBhcyBhIHRl
eHQgYXR0cmlidXRlLCBpbnN0ZWFkIG9mIGFuIG9iamVjdCBhdHRyaWJ1dGUuCisKKyAgICAgICAg
QWxzbywgZG9uZSBzb21lIHJlZmFjdG9yaW5nIG9mIHRoZSBjb2RlIHRvIHRyeSB0byBrZWVwIHRo
aW5ncworICAgICAgICBzaW1wbGVyIGFuZCBtb3JlIGNvaGVyZW50LCBieSBkZWZpbmluZyBuZXcg
aGVscGVyIGZ1bmN0aW9ucywKKyAgICAgICAgc2ltcGxpZnlpbmcgY29kZSwgbW92aW5nIHN0YXRp
YyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBpbnRvCisgICAgICAgIHVubmFtbWVkIG5hbWVzcGFj
ZXMgYW5kIHNvIG9uLCB3aXRob3V0IGFsdGVyaW5nIHRoZSBsb2dpYyBvdGhlcgorICAgICAgICB0
aGFuIGZvciBjaGVja2luZyB0aGUgdGV4dCBhdHRyaWJ1dGUgZm9yIGFyaWEtaW52YWxpZC4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNw
cDoKKyAgICAgICAgKGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZSk6IENvbnNpZGVyICdpbnZh
bGlkJyBhcyB0aGUgbmFtZSBvZgorICAgICAgICB0aGUgYXR0cmlidXRlIGV4cG9zZWQgYnkgdGhl
IEFUSyB3cmFwcGVyLCBub3QgJ2FyaWEtaW52YWxpZCcuCisgICAgICAgIEFsc28sIG5ldmVyIHJl
dHVybiBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IGZhbGxpbmcgdGhyb3VnaCBhbnkgb2YKKyAgICAg
ICAgdGhlIGNhc2VzIGNoZWNrZWQgaGVyZSwgYW5kIHJldHVybiB0aGUgb3JpZ2luYWwgYXR0cmli
dXRlIGluc3RlYWQuCisgICAgICAgIChhdGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0ZVZh
bHVlKTogTmV3IGhlbHBlciBmdW5jdGlvbiB0bworICAgICAgICBtYXRjaCB0aGUgYXR0cmlidXRl
cyB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIEFUSyB3cmFwcGVyIHdpdGggdGhlCisgICAgICAgIHZh
bHVlcyBleHBlY3RlZCBieSB0aGUgbGF5b3V0IHRlc3RzLiBNb3ZlZCB0aGUgbWFwcGluZ3MgZm9y
IHRoZQorICAgICAgICB2YWx1ZXMgb2YgQVhTb3J0RGlyZWN0aW9uIGhlcmUgYXMgd2VsbC4KKyAg
ICAgICAgKGdldEF0dHJpYnV0ZVNldCk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gdG8gcmV0cmlldmUg
YSBsaXN0IG9mCisgICAgICAgIGF0dHJpYnV0ZXMgKGFuIEF0a0F0dHJpYnV0ZVNldCkgZnJvbSBh
biBBdGtPYmplY3QgdXNpbmcgdGhlIHJpZ2h0CisgICAgICAgIEFQSSBkZXBlbmRpbmcgb24gd2hl
dGhlciB3ZSB3YW50IHRoZSBvYmplY3QgYXR0cmlidXRlcyBvciB0aGUgdGV4dAorICAgICAgICBh
dHRyaWJ1dGVzIChpbiBjYXNlIHRoZSBvYmplY3QgaW1wbGVtZW50cyBBdGtUZXh0KS4KKyAgICAg
ICAgKGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQpOiBTaW1wbGlmaWVkIGJ5IHVzaW5nIGdldEF0
dHJpYnV0ZVNldAorICAgICAgICBhbmQgYXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVW
YWx1ZS4gQWxzbywgYWRkZWQgYSBuZXcKKyAgICAgICAgcGFyYW1ldGVyIHRvIGluZGljYXRlciB3
aGV0aGVyIHdlIGFyZSBpbnRlcmVzdGVkIGluIG9iamVjdAorICAgICAgICBhdHRyaWJ1dGVzIG9y
IHRleHQgYXR0cmlidXRlcy4KKyAgICAgICAgKGdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKTog
RGl0dG8uCisgICAgICAgIChhdHRyaWJ1dGVzT2ZFbGVtZW50KTogVXBkYXRlZCB0byBwYXNzIHRo
ZSBuZXcgcmVxdWlyZWQgcGFyYW1ldGVyCisgICAgICAgIHRvIGdldEF0a0F0dHJpYnV0ZVNldEFz
U3RyaW5nLCBpbmRpY2F0aW5nIHRoYXQgd2Ugd2FudCB0aGUgb2JqZWN0CisgICAgICAgIGF0dHJp
YnV0ZXMgaW4gdGhpcyBjYXNlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisgICAgICAg
IChpbmRleFJhbmdlSW5UYWJsZSk6IE1vdmVkIHVwIGluIHRoZSBmaWxlIGludG8gdGhlIHVubmFt
bWVkIG5hbWVzcGFjZS4KKyAgICAgICAgKGFsdGVyQ3VycmVudFZhbHVlKTogRGl0dG8uCisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IEFmdGVy
IG1vdmluZyBtb3N0CisgICAgICAgIG9mIHRoZSBjb2RlIGhlcmUgdG8gdGhlIG5ldyBoZWxwZXIg
ZnVuY3Rpb25zLCBzaW1wbGlmaWVkIGl0IGJ5CisgICAgICAgIGp1c3QgY2hlY2tpbmcgd2hldGhl
ciB0aGUgcmVxdWlyZWQgYXR0cmlidXRlIGlzIHByb3ZpZGVkIGFzIGFuCisgICAgICAgIG9iamVj
dCBhdHRyaWJ1dGUgb3IsIGlmIHRoYXQncyBub3QgdGhlIGNhc2UsIGFzIGEgdGV4dCBhdHRyaWJ1
dGUuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRl
ZCk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUpOiBV
cGRhdGVkIHRvIHBhc3MgdGhlIG5ldworICAgICAgICByZXF1aXJlZCBwYXJhbWV0ZXIgdG8gZ2V0
QXR0cmlidXRlU2V0VmFsdWVGb3JJZCwgaW5kaWNhdGluZyB0aGF0CisgICAgICAgIHdlIHdhbnQg
dGhlIG9iamVjdCBhdHRyaWJ1dGVzIGluIHRoaXMgY2FzZS4KKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Omhhc1BvcHVwKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcDoKKyAg
ICAgICAgKFdUUjo6Y29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKTogU2FtZSBjaGFuZ2VzIHRo
YW4gZm9yIERSVC4KKyAgICAgICAgKFdUUjo6YXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1
dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpnZXRBdHRyaWJ1dGVTZXQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6Z2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyk6IERpdHRvLgorICAgICAgICAoV1RS
OjphdHRyaWJ1dGVzT2ZFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKTogRGl0dG8uCisK
IDIwMTMtMDktMzAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBjaGVj
ay13ZWJraXQtc3R5bGUgc2hvdWxkIG5vdCB3YXJuIGFib3V0IHVzZSBvZiBDKysxMSDigJw+PuKA
nSAgaW5zdGVhZCBvZiDigJw+ID4iCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9h
dGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9h
dGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKaW5kZXggNzI2NmRiMS4uNzhhZDlmMSAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRBdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50QXRrLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEph
biBNaWNoYWVsIEFsb256bworICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25p
Y3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQxLDQ4ICs0MiwxMjUgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCi1zdGF0aWMgU3RyaW5nIGNv
cmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCituYW1lc3Bh
Y2UgeworCitlbnVtIEF0a0F0dHJpYnV0ZVR5cGUgeworICAgIE9iamVjdEF0dHJpYnV0ZVR5cGUs
CisgICAgVGV4dEF0dHJpYnV0ZVR5cGUKK307CisKK2VudW0gQXR0cmlidXRlRG9tYWluIHsKKyAg
ICBDb3JlRG9tYWluID0gMCwKKyAgICBBdGtEb21haW4KK307CisKK2VudW0gQXR0cmlidXRlc0lu
ZGV4IHsKKyAgICAvLyBBdHRyaWJ1dGUgbmFtZXMuCisgICAgSW52YWxpZE5hbWVJbmRleCA9IDAs
CisgICAgUGxhY2Vob2xkZXJOYW1lSW5kZXgsCisgICAgU29ydE5hbWVJbmRleCwKKworICAgIC8v
IEF0dHJpYnV0ZSB2YWx1ZXMuCisgICAgU29ydEFzY2VuZGluZ1ZhbHVlSW5kZXgsCisgICAgU29y
dERlc2NlbmRpbmdWYWx1ZUluZGV4LAorICAgIFNvcnRVbmtub3duVmFsdWVJbmRleCwKKworICAg
IE51bWJlck9mQXR0cmlidXRlcworfTsKKworLy8gQXR0cmlidXRlIG5hbWVzICYgVmFsdWVzIChr
ZWVwIG9uIHN5bmMgd2l0aCBlbnVtIEF0dHJpYnV0ZXNJbmRleCkuCitjb25zdCBTdHJpbmcgYXR0
cmlidXRlc01hcFtdWzJdID0geworICAgIC8vIEF0dHJpYnV0ZSBuYW1lcy4KKyAgICB7ICJBWElu
dmFsaWQiLCAiaW52YWxpZCIgfSwKKyAgICB7ICJBWFBsYWNlaG9sZGVyVmFsdWUiLCAicGxhY2Vo
b2xkZXItdGV4dCIgfSAsCisgICAgeyAiQVhTb3J0RGlyZWN0aW9uIiwgInNvcnQiIH0sCisKKyAg
ICAvLyBBdHRyaWJ1dGUgdmFsdWVzLgorICAgIHsgIkFYQXNjZW5kaW5nU29ydERpcmVjdGlvbiIs
ICJhc2NlbmRpbmciIH0sCisgICAgeyAiQVhEZXNjZW5kaW5nU29ydERpcmVjdGlvbiIsICJkZXNj
ZW5kaW5nIiB9LAorICAgIHsgIkFYVW5rbm93blNvcnREaXJlY3Rpb24iLCAidW5rbm93biIgfQor
fTsKKworU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRy
aWJ1dGUpCiB7CiAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4
Q1N0cmluZ1NpemUoYXR0cmlidXRlKTsKICAgICBHT3duUHRyPGdjaGFyPiBidWZmZXIoc3RhdGlj
X2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSkpOwogICAgIEpTU3RyaW5nR2V0VVRG
OENTdHJpbmcoYXR0cmlidXRlLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwogCiAgICAgU3Ry
aW5nIGF0dHJpYnV0ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmdldCgpKTsKLSAg
ICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWEludmFsaWQiKQotICAgICAgICByZXR1cm4gImFy
aWEtaW52YWxpZCI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1iZXJPZkF0dHJpYnV0ZXM7
ICsraSkgeworICAgICAgICBpZiAoYXR0cmlidXRlc01hcFtpXVtDb3JlRG9tYWluXSA9PSBhdHRy
aWJ1dGVTdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlc01hcFtpXVtBdGtEb21h
aW5dOworICAgIH0KKworICAgIHJldHVybiBhdHRyaWJ1dGVTdHJpbmc7Cit9CisKK1N0cmluZyBh
dGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0ZVZhbHVlKEF0a0F0dHJpYnV0ZVR5cGUgdHlw
ZSwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodHlw
ZSA9PSBPYmplY3RBdHRyaWJ1dGVUeXBlKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gdHJhbnNs
YXRlIEFUSyB2YWx1ZXMgZXhwb3NlZCBmb3IgJ2FyaWEtc29ydCcgKGUuZy4gJ2FzY2VuZGluZycp
CisgICAgICAgIC8vIGludG8gdGhvc2UgZXhwZWN0ZWQgYnkgdGhlIGxheW91dCB0ZXN0cyAoZS5n
LiAnQVhBc2NlbmRpbmdTb3J0RGlyZWN0aW9uJykuCisgICAgICAgIGlmIChpZCA9PSBhdHRyaWJ1
dGVzTWFwW1NvcnROYW1lSW5kZXhdW0F0a0RvbWFpbl0gJiYgIXZhbHVlLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgaWYgKHZhbHVlID09IGF0dHJpYnV0ZXNNYXBbU29ydEFzY2VuZGluZ1ZhbHVl
SW5kZXhdW0F0a0RvbWFpbl0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNNYXBb
U29ydEFzY2VuZGluZ1ZhbHVlSW5kZXhdW0NvcmVEb21haW5dOworICAgICAgICAgICAgaWYgKHZh
bHVlID09IGF0dHJpYnV0ZXNNYXBbU29ydERlc2NlbmRpbmdWYWx1ZUluZGV4XVtBdGtEb21haW5d
KQorICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzTWFwW1NvcnREZXNjZW5kaW5nVmFs
dWVJbmRleF1bQ29yZURvbWFpbl07CisKKyAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzTWFw
W1NvcnRVbmtub3duVmFsdWVJbmRleF1bQ29yZURvbWFpbl07CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gVGV4dEF0dHJpYnV0ZVR5cGUpIHsKKyAgICAgICAgLy8gSW4gY2FzZSBv
ZiAnYXJpYS1pbnZhbGlkJyB3aGVuIHRoZSBhdHRyaWJ1dGUgZW1wdHkgb3IgaGFzICJmYWxzZSIg
Zm9yIEFUSworICAgICAgICAvLyBpdCBzaG91bGQgbm90IGJlIG1hcHBlZCBhdCBhbGwsIGJ1dCBs
YXlvdXQgdGVzdHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4KKyAgICAgICAgaWYgKGlkID09IGF0dHJp
YnV0ZXNNYXBbSW52YWxpZE5hbWVJbmRleF1bQXRrRG9tYWluXSAmJiB2YWx1ZS5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gImZhbHNlIjsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWU7
Cit9CisKK0F0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0KEF0a09iamVjdCogYWNjZXNz
aWJsZSwgQXRrQXR0cmlidXRlVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IE9iamVjdEF0
dHJpYnV0ZVR5cGUpCisgICAgICAgIHJldHVybiBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKGFj
Y2Vzc2libGUpOwogCi0gICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhQbGFjZWhvbGRlclZh
bHVlIikKLSAgICAgICAgcmV0dXJuICJwbGFjZWhvbGRlci10ZXh0IjsKKyAgICBpZiAodHlwZSA9
PSBUZXh0QXR0cmlidXRlVHlwZSkgeworICAgICAgICBpZiAoIUFUS19JU19URVhUKGFjY2Vzc2li
bGUpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09
ICJBWFNvcnREaXJlY3Rpb24iKQotICAgICAgICByZXR1cm4gInNvcnQiOworICAgICAgICByZXR1
cm4gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhBVEtfVEVYVChhY2Nlc3NpYmxlKSk7
CisgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEF0dHJpYnV0ZVNldFZhbHVl
Rm9ySWQoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBjb25zdCBjaGFyKiBpZCkKK1N0cmluZyBnZXRB
dHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEF0a09iamVjdCogYWNjZXNzaWJsZSwgQXRrQXR0cmlidXRl
VHlwZSB0eXBlLCBTdHJpbmcgaWQpCiB7Ci0gICAgY29uc3QgY2hhciogYXR0cmlidXRlVmFsdWUg
PSAwOwotICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gYXRrX29iamVjdF9nZXRf
YXR0cmlidXRlcyhhY2Nlc3NpYmxlKTsKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNl
dCA9IGdldEF0dHJpYnV0ZVNldChhY2Nlc3NpYmxlLCB0eXBlKTsKKyAgICBpZiAoIWF0dHJpYnV0
ZVNldCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgU3RyaW5nIGF0dHJpYnV0ZVZh
bHVlOwogICAgIGZvciAoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU2V0
OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy0+bmV4dCkgewogICAgICAgICBB
dGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0
dHJpYnV0ZXMtPmRhdGEpOwotICAgICAgICBpZiAoIXN0cmNtcChhdGtBdHRyaWJ1dGUtPm5hbWUs
IGlkKSkgewotICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdGtBdHRyaWJ1dGUtPnZhbHVl
OworICAgICAgICBpZiAoaWQgPT0gYXRrQXR0cmlidXRlLT5uYW1lKSB7CisgICAgICAgICAgICBh
dHRyaWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXRrQXR0cmlidXRlLT52YWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQotICAgIFN0cmluZyBhdGtBdHRy
aWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXR0cmlidXRlVmFsdWUpOwogICAgIGF0a19h
dHRyaWJ1dGVfc2V0X2ZyZWUoYXR0cmlidXRlU2V0KTsKIAotICAgIHJldHVybiBhdGtBdHRyaWJ1
dGVWYWx1ZTsKKyAgICByZXR1cm4gYXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVWYWx1
ZSh0eXBlLCBpZCwgYXR0cmlidXRlVmFsdWUpOwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEF0a0F0
dHJpYnV0ZVNldEFzU3RyaW5nKEF0a09iamVjdCogYWNjZXNzaWJsZSkKK1N0cmluZyBnZXRBdGtB
dHRyaWJ1dGVTZXRBc1N0cmluZyhBdGtPYmplY3QqIGFjY2Vzc2libGUsIEF0a0F0dHJpYnV0ZVR5
cGUgdHlwZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgQXRrQXR0cmlidXRl
U2V0KiBhdHRyaWJ1dGVTZXQgPSBnZXRBdHRyaWJ1dGVTZXQoYWNjZXNzaWJsZSwgdHlwZSk7Cisg
ICAgaWYgKCFhdHRyaWJ1dGVTZXQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIEF0
a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhh
Y2Nlc3NpYmxlKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgZm9yIChBdGtBdHRy
aWJ1dGVTZXQqIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTZXQ7IGF0dHJpYnV0ZXM7IGF0dHJpYnV0
ZXMgPSBhdHRyaWJ1dGVzLT5uZXh0KSB7CiAgICAgICAgIEF0a0F0dHJpYnV0ZSogYXR0cmlidXRl
ID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4oYXR0cmlidXRlcy0+ZGF0YSk7CiAgICAgICAg
IEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoZ19zdHJjb25jYXQoYXR0cmlidXRlLT5uYW1l
LCAiOiIsIGF0dHJpYnV0ZS0+dmFsdWUsIE5VTEwpKTsKQEAgLTk1LDcgKzE3Myw3IEBAIHN0YXRp
YyBTdHJpbmcgZ2V0QXRrQXR0cmlidXRlU2V0QXNTdHJpbmcoQXRrT2JqZWN0KiBhY2Nlc3NpYmxl
KQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29u
c3QgY2hhciogcm9sZVRvU3RyaW5nKEF0a1JvbGUgcm9sZSkKK2lubGluZSBjb25zdCBjaGFyKiBy
b2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQogewogICAgIHN3aXRjaCAocm9sZSkgewogICAgIGNh
c2UgQVRLX1JPTEVfQUxFUlQ6CkBAIC0yMDksNyArMjg3LDcgQEAgc3RhdGljIGlubGluZSBjb25z
dCBjaGFyKiByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQogICAgIH0KIH0KIAotc3RhdGljIGlu
bGluZSBnY2hhciogcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKGdjaGFyKiBzdHIpCitpbmxp
bmUgZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyhnY2hhciogc3RyKQogewogICAg
IFN0cmluZyB1U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChzdHIpOwogCkBAIC0yMjUsNyArMzAz
LDcgQEAgc3RhdGljIGlubGluZSBnY2hhciogcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKGdj
aGFyKiBzdHIpCiAgICAgcmV0dXJuIGdfc3RyZHVwKHVTdHJpbmcudXRmOCgpLmRhdGEoKSk7CiB9
CiAKLXN0YXRpYyBib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1l
bnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCitib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRm
b3JtVUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCiB7CiAgICAgaWYg
KCFBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzQs
NyArMzEyLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tFbGVtZW50U3RhdGUoUGxhdGZvcm1VSUVsZW1l
bnQgZWxlbWVudCwgQXRrU3RhdGVUeXBlIHN0YXRlVHlwZSkKICAgICByZXR1cm4gYXRrX3N0YXRl
X3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgc3RhdGVUeXBlKTsKIH0KIAotc3Rh
dGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVs
ZW1lbnQpCitTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KiBlbGVtZW50KQogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKIApAQCAtMjgwLDExICsz
NTgsNzMgQEAgc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICAvLyBXZSBhcHBlbmQgdGhlIEFUSyBzcGVjaWZpYyBh
dHRyaWJ1dGVzIGFzIGEgc2luZ2xlIGxpbmUgYXQgdGhlIGVuZC4KICAgICBidWlsZGVyLmFwcGVu
ZCgiQVhQbGF0Zm9ybUF0dHJpYnV0ZXM6ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGdldEF0a0F0
dHJpYnV0ZVNldEFzU3RyaW5nKGVsZW1lbnQtPnBsYXRmb3JtVUlFbGVtZW50KCkpKTsKKyAgICBi
dWlsZGVyLmFwcGVuZChnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhlbGVtZW50LT5wbGF0Zm9y
bVVJRWxlbWVudCgpLCBPYmplY3RBdHRyaWJ1dGVUeXBlKSk7CiAKICAgICByZXR1cm4gYnVpbGRl
ci50b1N0cmluZygpOwogfQogCit9IC8vIG5hbWVzcGFjZQorCitKU1N0cmluZ1JlZiBpbmRleFJh
bmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBib29sIGlzUm93UmFuZ2UpCit7
CisgICAgR093blB0cjxnY2hhcj4gcmFuZ2VTdHJpbmcoZ19zdHJkdXAoInswLCAwfSIpKTsKKwor
ICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKKworICAgIEF0a09iamVj
dCogYXhUYWJsZSA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JKRUNUKGVsZW1lbnQpKTsK
KyAgICBpZiAoIWF4VGFibGUgfHwgIUFUS19JU19UQUJMRShheFRhYmxlKSkKKyAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKKwor
ICAgIC8vIExvb2sgZm9yIHRoZSBjZWxsIGluIHRoZSB0YWJsZS4KKyAgICBnaW50IGluZGV4SW5Q
YXJlbnQgPSBhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoQVRLX09CSkVDVChlbGVtZW50
KSk7CisgICAgaWYgKGluZGV4SW5QYXJlbnQgPT0gLTEpCisgICAgICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7CisKKyAgICBpbnQgcm93
ID0gLTE7CisgICAgaW50IGNvbHVtbiA9IC0xOworICAgIHJvdyA9IGF0a190YWJsZV9nZXRfcm93
X2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7CisgICAgY29sdW1u
ID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgoQVRLX1RBQkxFKGF4VGFibGUpLCBpbmRl
eEluUGFyZW50KTsKKworICAgIC8vIEdldCB0aGUgYWN0dWFsIHZhbHVlcywgaWYgcm93IGFuZCBj
b2x1bW5zIGFyZSB2YWxpZCB2YWx1ZXMuCisgICAgaWYgKHJvdyAhPSAtMSAmJiBjb2x1bW4gIT0g
LTEpIHsKKyAgICAgICAgaW50IGJhc2UgPSAwOworICAgICAgICBpbnQgbGVuZ3RoID0gMDsKKyAg
ICAgICAgaWYgKGlzUm93UmFuZ2UpIHsKKyAgICAgICAgICAgIGJhc2UgPSByb3c7CisgICAgICAg
ICAgICBsZW5ndGggPSBhdGtfdGFibGVfZ2V0X3Jvd19leHRlbnRfYXQoQVRLX1RBQkxFKGF4VGFi
bGUpLCByb3csIGNvbHVtbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlID0g
Y29sdW1uOworICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50
X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOworICAgICAgICB9CisgICAgICAg
IHJhbmdlU3RyaW5nLnNldChnX3N0cmR1cF9wcmludGYoInslZCwgJWR9IiwgYmFzZSwgbGVuZ3Ro
KSk7CisgICAgfQorCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJh
bmdlU3RyaW5nLmdldCgpKTsKK30KKwordm9pZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJ
RWxlbWVudCBlbGVtZW50LCBpbnQgZmFjdG9yKQoreworICAgIGlmICghQVRLX0lTX1ZBTFVFKGVs
ZW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBHVmFsdWUgY3VycmVudFZhbHVlID0gR19W
QUxVRV9JTklUOworICAgIGF0a192YWx1ZV9nZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUoZWxl
bWVudCksICZjdXJyZW50VmFsdWUpOworCisgICAgR1ZhbHVlIGluY3JlbWVudCA9IEdfVkFMVUVf
SU5JVDsKKyAgICBhdGtfdmFsdWVfZ2V0X21pbmltdW1faW5jcmVtZW50KEFUS19WQUxVRShlbGVt
ZW50KSwgJmluY3JlbWVudCk7CisKKyAgICBHVmFsdWUgbmV3VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7
CisgICAgZ192YWx1ZV9pbml0KCZuZXdWYWx1ZSwgR19UWVBFX0ZMT0FUKTsKKworICAgIGdfdmFs
dWVfc2V0X2Zsb2F0KCZuZXdWYWx1ZSwgZ192YWx1ZV9nZXRfZmxvYXQoJmN1cnJlbnRWYWx1ZSkg
KyBmYWN0b3IgKiBnX3ZhbHVlX2dldF9mbG9hdCgmaW5jcmVtZW50KSk7CisgICAgYXRrX3ZhbHVl
X3NldF9jdXJyZW50X3ZhbHVlKEFUS19WQUxVRShlbGVtZW50KSwgJm5ld1ZhbHVlKTsKKworICAg
IGdfdmFsdWVfdW5zZXQoJm5ld1ZhbHVlKTsKKyAgICBnX3ZhbHVlX3Vuc2V0KCZpbmNyZW1lbnQp
OworICAgIGdfdmFsdWVfdW5zZXQoJmN1cnJlbnRWYWx1ZSk7Cit9CisKIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVu
dCkKICAgICA6IG1fZWxlbWVudChlbGVtZW50KQogewpAQCAtNjQzLDcgKzc4Myw3IEBAIGRvdWJs
ZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0CiAgICAgLy8gYW4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCwgc28gd2UgY2FuIHJldXNlIHNvbWUgdGVzdHMgdG8gY2hlY2sg
dGhlIGxldmVsCiAgICAgLy8gYm90aCBmb3IgSFRNTCBoZWFkaW5ncyBhbmQgb2JqZWN0cyB3aXRo
IHRoZSBhcmlhLWxldmVsIGF0dHJpYnV0ZS4KICAgICBpZiAoYXRrX29iamVjdF9nZXRfcm9sZShB
VEtfT0JKRUNUKG1fZWxlbWVudCkpID09IEFUS19ST0xFX0hFQURJTkcpIHsKLSAgICAgICAgU3Ry
aW5nIGhlYWRpbmdMZXZlbCA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVCht
X2VsZW1lbnQpLCAibGV2ZWwiKTsKKyAgICAgICAgU3RyaW5nIGhlYWRpbmdMZXZlbCA9IGdldEF0
dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBPYmplY3RBdHRyaWJ1
dGVUeXBlLCAibGV2ZWwiKTsKICAgICAgICAgYm9vbCBvazsKICAgICAgICAgZG91YmxlIGhlYWRp
bmdMZXZlbFZhbHVlID0gaGVhZGluZ0xldmVsLnRvRG91YmxlKCZvayk7CiAgICAgICAgIGlmIChv
aykKQEAgLTgxNCw0NCArOTU0LDYgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4
SW5UYWJsZSgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBKU1N0cmluZ1JlZiBpbmRleFJh
bmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBib29sIGlzUm93UmFuZ2UpCi17
Ci0gICAgR093blB0cjxnY2hhcj4gcmFuZ2VTdHJpbmcoZ19zdHJkdXAoInswLCAwfSIpKTsKLQot
ICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKLQotICAgIEF0a09iamVj
dCogYXhUYWJsZSA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JKRUNUKGVsZW1lbnQpKTsK
LSAgICBpZiAoIWF4VGFibGUgfHwgIUFUS19JU19UQUJMRShheFRhYmxlKSkKLSAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKLQot
ICAgIC8vIExvb2sgZm9yIHRoZSBjZWxsIGluIHRoZSB0YWJsZS4KLSAgICBnaW50IGluZGV4SW5Q
YXJlbnQgPSBhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoQVRLX09CSkVDVChlbGVtZW50
KSk7Ci0gICAgaWYgKGluZGV4SW5QYXJlbnQgPT0gLTEpCi0gICAgICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci0KLSAgICBpbnQgcm93
ID0gLTE7Ci0gICAgaW50IGNvbHVtbiA9IC0xOwotICAgIHJvdyA9IGF0a190YWJsZV9nZXRfcm93
X2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7Ci0gICAgY29sdW1u
ID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgoQVRLX1RBQkxFKGF4VGFibGUpLCBpbmRl
eEluUGFyZW50KTsKLQotICAgIC8vIEdldCB0aGUgYWN0dWFsIHZhbHVlcywgaWYgcm93IGFuZCBj
b2x1bW5zIGFyZSB2YWxpZCB2YWx1ZXMuCi0gICAgaWYgKHJvdyAhPSAtMSAmJiBjb2x1bW4gIT0g
LTEpIHsKLSAgICAgICAgaW50IGJhc2UgPSAwOwotICAgICAgICBpbnQgbGVuZ3RoID0gMDsKLSAg
ICAgICAgaWYgKGlzUm93UmFuZ2UpIHsKLSAgICAgICAgICAgIGJhc2UgPSByb3c7Ci0gICAgICAg
ICAgICBsZW5ndGggPSBhdGtfdGFibGVfZ2V0X3Jvd19leHRlbnRfYXQoQVRLX1RBQkxFKGF4VGFi
bGUpLCByb3csIGNvbHVtbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBiYXNlID0g
Y29sdW1uOwotICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50
X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOwotICAgICAgICB9Ci0gICAgICAg
IHJhbmdlU3RyaW5nLnNldChnX3N0cmR1cF9wcmludGYoInslZCwgJWR9IiwgYmFzZSwgbGVuZ3Ro
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJh
bmdlU3RyaW5nLmdldCgpKTsKLX0KLQogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm93SW5kZXhSYW5nZSgpCiB7CiAgICAgLy8gUmFuZ2UgaW4gdGFibGUgZm9yIHJvd3MuCkBA
IC05MjgsMjcgKzEwMzAsMTMgQEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogICAgICAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIAogICAgIFN0cmluZyBhdGtB
dHRyaWJ1dGVOYW1lID0gY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKGF0dHJpYnV0ZSk7Ci0g
ICAgaWYgKGF0a0F0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1
ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBhdGtB
dHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgLy8gSW4gY2FzZSBvZiAnYXJpYS1p
bnZhbGlkJyB3aGVuIHRoZSBhdHRyaWJ1dGUgZW1wdHkgb3IgaGFzICJmYWxzZSIgZm9yIEFUSwot
ICAgIC8vIGFjY29yZGluZyB0byBodHRwOi8vd3d3LnczLm9yZy9XQUkvUEYvYXJpYS1pbXBsZW1l
bnRhdGlvbi8jbWFwcGluZyBhdHRyaWJ1dGUKLSAgICAvLyBpcyBub3QgbWFwcGVkIGJ1dCBsYXlv
dXQgdGVzdHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4KLSAgICBpZiAoYXR0cmlidXRlVmFsdWUuaXNF
bXB0eSgpICYmIGF0a0F0dHJpYnV0ZU5hbWUgPT0gImFyaWEtaW52YWxpZCIpCi0gICAgICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZmFsc2UiKTsKKyAgICAvLyBUcnkg
b2JqZWN0IGF0dHJpYnV0ZXMgZmlyc3QuCisgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0
QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIE9iamVjdEF0dHJp
YnV0ZVR5cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOwogCi0gICAgLy8gV2UgbmVlZCB0byB0cmFuc2xh
dGUgQVRLIHZhbHVlcyBleHBvc2VkIGZvciAnYXJpYS1zb3J0JyAoZS5nLiAnYXNjZW5kaW5nJykK
LSAgICAvLyBpbnRvIHRob3NlIGV4cGVjdGVkIGJ5IHRoZSBsYXlvdXQgdGVzdHMgKGUuZy4gJ0FY
QXNjZW5kaW5nU29ydERpcmVjdGlvbicpLgotICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lID09ICJz
b3J0IikgewotICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUgPT0gImFzY2VuZGluZyIpCi0gICAg
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFYQXNjZW5kaW5n
U29ydERpcmVjdGlvbiIpOwotICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUgPT0gImRlc2NlbmRp
bmciKQotICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
WERlc2NlbmRpbmdTb3J0RGlyZWN0aW9uIik7Ci0KLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJBWFVua25vd25Tb3J0RGlyZWN0aW9uIik7Ci0gICAgfQorICAg
IC8vIFRyeSB0ZXh0IGF0dHJpYnV0ZXMgaWYgdGhlIHJlcXVlc3RlZCBvbmUgd2FzIG5vdCBmb3Vu
ZCBhbmQgd2UgaGF2ZSBhbiBBdGtUZXh0IG9iamVjdC4KKyAgICBpZiAoYXR0cmlidXRlVmFsdWUu
aXNFbXB0eSgpICYmIEFUS19JU19URVhUKG1fZWxlbWVudCkpCisgICAgICAgIGF0dHJpYnV0ZVZh
bHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIFRl
eHRBdHRyaWJ1dGVUeXBlLCBhdGtBdHRyaWJ1dGVOYW1lKTsKIAogICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdHRyaWJ1dGVWYWx1ZS51dGY4KCkuZGF0YSgpKTsKIH0K
QEAgLTk4MCwzMCArMTA2OCwxMiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0
cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKICAgICBpZiAoYXRrQXR0cmli
dXRlTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBh
dHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2Vs
ZW1lbnQpLCBhdGtBdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiAhYXR0
cmlidXRlVmFsdWUuaXNFbXB0eSgpOwotfQorICAgIC8vIEZvciBub3csIGFuIGF0dHJpYnV0ZSBp
cyBzdXBwb3J0ZWQgd2hldGhlciBpdCdzIGV4cG9zZWQgYXMgYSBvYmplY3Qgb3IgYSB0ZXh0IGF0
dHJpYnV0ZS4KKyAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1
ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgT2JqZWN0QXR0cmlidXRlVHlwZSwgYXRrQXR0
cmlidXRlTmFtZSk7CisgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAg
YXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9l
bGVtZW50KSwgVGV4dEF0dHJpYnV0ZVR5cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOwogCi1zdGF0aWMg
dm9pZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFj
dG9yKQotewotICAgIGlmICghQVRLX0lTX1ZBTFVFKGVsZW1lbnQpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHVmFsdWUgY3VycmVudFZhbHVlID0gR19WQUxVRV9JTklUOwotICAgIGF0a192YWx1
ZV9nZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUoZWxlbWVudCksICZjdXJyZW50VmFsdWUpOwot
Ci0gICAgR1ZhbHVlIGluY3JlbWVudCA9IEdfVkFMVUVfSU5JVDsKLSAgICBhdGtfdmFsdWVfZ2V0
X21pbmltdW1faW5jcmVtZW50KEFUS19WQUxVRShlbGVtZW50KSwgJmluY3JlbWVudCk7Ci0KLSAg
ICBHVmFsdWUgbmV3VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Ci0gICAgZ192YWx1ZV9pbml0KCZuZXdW
YWx1ZSwgR19UWVBFX0ZMT0FUKTsKLQotICAgIGdfdmFsdWVfc2V0X2Zsb2F0KCZuZXdWYWx1ZSwg
Z192YWx1ZV9nZXRfZmxvYXQoJmN1cnJlbnRWYWx1ZSkgKyBmYWN0b3IgKiBnX3ZhbHVlX2dldF9m
bG9hdCgmaW5jcmVtZW50KSk7Ci0gICAgYXRrX3ZhbHVlX3NldF9jdXJyZW50X3ZhbHVlKEFUS19W
QUxVRShlbGVtZW50KSwgJm5ld1ZhbHVlKTsKLQotICAgIGdfdmFsdWVfdW5zZXQoJm5ld1ZhbHVl
KTsKLSAgICBnX3ZhbHVlX3Vuc2V0KCZpbmNyZW1lbnQpOwotICAgIGdfdmFsdWVfdW5zZXQoJmN1
cnJlbnRWYWx1ZSk7CisgICAgcmV0dXJuICFhdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCk7CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50KCkKQEAgLTExNzYsNyArMTI0
Niw4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXAoKSBjb25zdAogICAg
IGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChB
VEtfT0JKRUNUKG1fZWxlbWVudCksICJoYXNwb3B1cCIpLCAidHJ1ZSIpOworICAgIFN0cmluZyBo
YXNQb3B1cFZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxl
bWVudCksIE9iamVjdEF0dHJpYnV0ZVR5cGUsICJoYXNwb3B1cCIpOworICAgIHJldHVybiBlcXVh
bElnbm9yaW5nQ2FzZShoYXNQb3B1cFZhbHVlLCAidHJ1ZSIpOwogfQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRBdGsuY3BwCmluZGV4IDcxMDEzMjAuLjAxMTcxYzIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRBdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRr
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00NSw0OCArNDYsMTI1IEBACiAKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0
aWMgU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRyaWJ1
dGUpCituYW1lc3BhY2UgeworCitlbnVtIEF0a0F0dHJpYnV0ZVR5cGUgeworICAgIE9iamVjdEF0
dHJpYnV0ZVR5cGUsCisgICAgVGV4dEF0dHJpYnV0ZVR5cGUKK307CisKK2VudW0gQXR0cmlidXRl
RG9tYWluIHsKKyAgICBDb3JlRG9tYWluID0gMCwKKyAgICBBdGtEb21haW4KK307CisKK2VudW0g
QXR0cmlidXRlc0luZGV4IHsKKyAgICAvLyBBdHRyaWJ1dGUgbmFtZXMuCisgICAgSW52YWxpZE5h
bWVJbmRleCA9IDAsCisgICAgUGxhY2Vob2xkZXJOYW1lSW5kZXgsCisgICAgU29ydE5hbWVJbmRl
eCwKKworICAgIC8vIEF0dHJpYnV0ZSB2YWx1ZXMuCisgICAgU29ydEFzY2VuZGluZ1ZhbHVlSW5k
ZXgsCisgICAgU29ydERlc2NlbmRpbmdWYWx1ZUluZGV4LAorICAgIFNvcnRVbmtub3duVmFsdWVJ
bmRleCwKKworICAgIE51bWJlck9mQXR0cmlidXRlcworfTsKKworLy8gQXR0cmlidXRlIG5hbWVz
ICYgVmFsdWVzIChrZWVwIG9uIHN5bmMgd2l0aCBlbnVtIEF0dHJpYnV0ZXNJbmRleCkuCitjb25z
dCBTdHJpbmcgYXR0cmlidXRlc01hcFtdWzJdID0geworICAgIC8vIEF0dHJpYnV0ZSBuYW1lcy4K
KyAgICB7ICJBWEludmFsaWQiLCAiaW52YWxpZCIgfSwKKyAgICB7ICJBWFBsYWNlaG9sZGVyVmFs
dWUiLCAicGxhY2Vob2xkZXItdGV4dCIgfSAsCisgICAgeyAiQVhTb3J0RGlyZWN0aW9uIiwgInNv
cnQiIH0sCisKKyAgICAvLyBBdHRyaWJ1dGUgdmFsdWVzLgorICAgIHsgIkFYQXNjZW5kaW5nU29y
dERpcmVjdGlvbiIsICJhc2NlbmRpbmciIH0sCisgICAgeyAiQVhEZXNjZW5kaW5nU29ydERpcmVj
dGlvbiIsICJkZXNjZW5kaW5nIiB9LAorICAgIHsgIkFYVW5rbm93blNvcnREaXJlY3Rpb24iLCAi
dW5rbm93biIgfQorfTsKKworU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0
cmluZ1JlZiBhdHRyaWJ1dGUpCiB7CiAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dl
dE1heGltdW1VVEY4Q1N0cmluZ1NpemUoYXR0cmlidXRlKTsKICAgICBHT3duUHRyPGdjaGFyPiBi
dWZmZXIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSkpOwogICAgIEpT
U3RyaW5nR2V0VVRGOENTdHJpbmcoYXR0cmlidXRlLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUp
OwogCiAgICAgU3RyaW5nIGF0dHJpYnV0ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVy
LmdldCgpKTsKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWEludmFsaWQiKQotICAgICAg
ICByZXR1cm4gImFyaWEtaW52YWxpZCI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1iZXJP
ZkF0dHJpYnV0ZXM7ICsraSkgeworICAgICAgICBpZiAoYXR0cmlidXRlc01hcFtpXVtDb3JlRG9t
YWluXSA9PSBhdHRyaWJ1dGVTdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlc01h
cFtpXVtBdGtEb21haW5dOworICAgIH0KKworICAgIHJldHVybiBhdHRyaWJ1dGVTdHJpbmc7Cit9
CisKK1N0cmluZyBhdGtBdHRyaWJ1dGVWYWx1ZVRvQ29yZUF0dHJpYnV0ZVZhbHVlKEF0a0F0dHJp
YnV0ZVR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sK
KyAgICBpZiAodHlwZSA9PSBPYmplY3RBdHRyaWJ1dGVUeXBlKSB7CisgICAgICAgIC8vIFdlIG5l
ZWQgdG8gdHJhbnNsYXRlIEFUSyB2YWx1ZXMgZXhwb3NlZCBmb3IgJ2FyaWEtc29ydCcgKGUuZy4g
J2FzY2VuZGluZycpCisgICAgICAgIC8vIGludG8gdGhvc2UgZXhwZWN0ZWQgYnkgdGhlIGxheW91
dCB0ZXN0cyAoZS5nLiAnQVhBc2NlbmRpbmdTb3J0RGlyZWN0aW9uJykuCisgICAgICAgIGlmIChp
ZCA9PSBhdHRyaWJ1dGVzTWFwW1NvcnROYW1lSW5kZXhdW0F0a0RvbWFpbl0gJiYgIXZhbHVlLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKHZhbHVlID09IGF0dHJpYnV0ZXNNYXBbU29ydEFz
Y2VuZGluZ1ZhbHVlSW5kZXhdW0F0a0RvbWFpbl0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGF0
dHJpYnV0ZXNNYXBbU29ydEFzY2VuZGluZ1ZhbHVlSW5kZXhdW0NvcmVEb21haW5dOworICAgICAg
ICAgICAgaWYgKHZhbHVlID09IGF0dHJpYnV0ZXNNYXBbU29ydERlc2NlbmRpbmdWYWx1ZUluZGV4
XVtBdGtEb21haW5dKQorICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzTWFwW1NvcnRE
ZXNjZW5kaW5nVmFsdWVJbmRleF1bQ29yZURvbWFpbl07CisKKyAgICAgICAgICAgIHJldHVybiBh
dHRyaWJ1dGVzTWFwW1NvcnRVbmtub3duVmFsdWVJbmRleF1bQ29yZURvbWFpbl07CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gVGV4dEF0dHJpYnV0ZVR5cGUpIHsKKyAgICAgICAg
Ly8gSW4gY2FzZSBvZiAnYXJpYS1pbnZhbGlkJyB3aGVuIHRoZSBhdHRyaWJ1dGUgZW1wdHkgb3Ig
aGFzICJmYWxzZSIgZm9yIEFUSworICAgICAgICAvLyBpdCBzaG91bGQgbm90IGJlIG1hcHBlZCBh
dCBhbGwsIGJ1dCBsYXlvdXQgdGVzdHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4KKyAgICAgICAgaWYg
KGlkID09IGF0dHJpYnV0ZXNNYXBbSW52YWxpZE5hbWVJbmRleF1bQXRrRG9tYWluXSAmJiB2YWx1
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gImZhbHNlIjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdmFsdWU7Cit9CiAKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWFBsYWNlaG9s
ZGVyVmFsdWUiKQotICAgICAgICByZXR1cm4gInBsYWNlaG9sZGVyLXRleHQiOwotICAgIAotICAg
IGlmIChhdHRyaWJ1dGVTdHJpbmcgPT0gIkFYU29ydERpcmVjdGlvbiIpCi0gICAgICAgIHJldHVy
biAic29ydCI7CitBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldChBdGtPYmplY3QqIGFj
Y2Vzc2libGUsIEF0a0F0dHJpYnV0ZVR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBPYmpl
Y3RBdHRyaWJ1dGVUeXBlKQorICAgICAgICByZXR1cm4gYXRrX29iamVjdF9nZXRfYXR0cmlidXRl
cyhhY2Nlc3NpYmxlKTsKIAotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAodHlwZSA9PSBU
ZXh0QXR0cmlidXRlVHlwZSkgeworICAgICAgICBpZiAoIUFUS19JU19URVhUKGFjY2Vzc2libGUp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIGF0a190ZXh0X2dldF9k
ZWZhdWx0X2F0dHJpYnV0ZXMoQVRLX1RFWFQoYWNjZXNzaWJsZSkpOworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgU3RyaW5nIGdl
dEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBjb25zdCBjaGFy
KiBpZCkKK1N0cmluZyBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEF0a09iamVjdCogYWNjZXNz
aWJsZSwgQXRrQXR0cmlidXRlVHlwZSB0eXBlLCBTdHJpbmcgaWQpCiB7Ci0gICAgY29uc3QgY2hh
ciogYXR0cmlidXRlVmFsdWUgPSAwOwotICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0
ID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhhY2Nlc3NpYmxlKTsKKyAgICBBdGtBdHRyaWJ1
dGVTZXQqIGF0dHJpYnV0ZVNldCA9IGdldEF0dHJpYnV0ZVNldChhY2Nlc3NpYmxlLCB0eXBlKTsK
KyAgICBpZiAoIWF0dHJpYnV0ZVNldCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
U3RyaW5nIGF0dHJpYnV0ZVZhbHVlOwogICAgIGZvciAoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1
dGVzID0gYXR0cmlidXRlU2V0OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy0+
bmV4dCkgewogICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0YXRpY19jYXN0
PEF0a0F0dHJpYnV0ZSo+KGF0dHJpYnV0ZXMtPmRhdGEpOwotICAgICAgICBpZiAoIXN0cmNtcChh
dGtBdHRyaWJ1dGUtPm5hbWUsIGlkKSkgewotICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBh
dGtBdHRyaWJ1dGUtPnZhbHVlOworICAgICAgICBpZiAoaWQgPT0gYXRrQXR0cmlidXRlLT5uYW1l
KSB7CisgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXRrQXR0
cmlidXRlLT52YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQot
ICAgIFN0cmluZyBhdGtBdHRyaWJ1dGVWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXR0cmlidXRl
VmFsdWUpOwogICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoYXR0cmlidXRlU2V0KTsKIAotICAg
IHJldHVybiBhdGtBdHRyaWJ1dGVWYWx1ZTsKKyAgICByZXR1cm4gYXRrQXR0cmlidXRlVmFsdWVU
b0NvcmVBdHRyaWJ1dGVWYWx1ZSh0eXBlLCBpZCwgYXR0cmlidXRlVmFsdWUpOwogfQogCi1zdGF0
aWMgU3RyaW5nIGdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKEF0a09iamVjdCogYWNjZXNzaWJs
ZSkKK1N0cmluZyBnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0cmluZyhBdGtPYmplY3QqIGFjY2Vzc2li
bGUsIEF0a0F0dHJpYnV0ZVR5cGUgdHlwZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CisgICAgQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSBnZXRBdHRyaWJ1dGVTZXQoYWNj
ZXNzaWJsZSwgdHlwZSk7CisgICAgaWYgKCFhdHRyaWJ1dGVTZXQpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAotICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gYXRrX29iamVj
dF9nZXRfYXR0cmlidXRlcyhhY2Nlc3NpYmxlKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CiAgICAgZm9yIChBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTZXQ7IGF0
dHJpYnV0ZXM7IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLT5uZXh0KSB7CiAgICAgICAgIEF0a0F0
dHJpYnV0ZSogYXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4oYXR0cmlidXRl
cy0+ZGF0YSk7CiAgICAgICAgIEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoZ19zdHJjb25j
YXQoYXR0cmlidXRlLT5uYW1lLCAiOiIsIGF0dHJpYnV0ZS0+dmFsdWUsIE5VTEwpKTsKQEAgLTk5
LDcgKzE3Nyw3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0QXRrQXR0cmlidXRlU2V0QXNTdHJpbmcoQXRr
T2JqZWN0KiBhY2Nlc3NpYmxlKQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAK
LXN0YXRpYyBib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQs
IEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCitib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRmb3Jt
VUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCiB7CiAgICAgaWYgKCFB
VEtfSVNfT0JKRUNUKGVsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MDgsNyArMTg2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tFbGVtZW50U3RhdGUoUGxhdGZvcm1VSUVs
ZW1lbnQgZWxlbWVudCwgQXRrU3RhdGVUeXBlIHN0YXRlVHlwZSkKICAgICByZXR1cm4gYXRrX3N0
YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgc3RhdGVUeXBlKTsKIH0KIAot
c3RhdGljIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVtZW50IGVs
ZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKK0pTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBs
YXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKIHsKICAgICBHT3duUHRy
PGdjaGFyPiByYW5nZVN0cmluZyhnX3N0cmR1cCgiezAsIDB9IikpOwogCkBAIC0xNDYsNyArMjI0
LDcgQEAgc3RhdGljIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVt
ZW50IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOwogfQogCi1zdGF0aWMgdm9pZCBhbHRl
ckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFjdG9yKQordm9p
ZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFjdG9y
KQogewogICAgIGlmICghQVRLX0lTX1ZBTFVFKGVsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1
cm47CkBAIC0xNjgsNyArMjQ2LDcgQEAgc3RhdGljIHZvaWQgYWx0ZXJDdXJyZW50VmFsdWUoUGxh
dGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKICAgICBnX3ZhbHVlX3Vuc2V0KCZj
dXJyZW50VmFsdWUpOwogfQogCi1zdGF0aWMgZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVz
dWx0cyhnY2hhciogc3RyKQorZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyhnY2hh
ciogc3RyKQogewogICAgIFdURjo6U3RyaW5nIHVTdHJpbmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
Rjgoc3RyKTsKIApAQCAtMTg0LDcgKzI2Miw3IEBAIHN0YXRpYyBnY2hhciogcmVwbGFjZUNoYXJh
Y3RlcnNGb3JSZXN1bHRzKGdjaGFyKiBzdHIpCiAgICAgcmV0dXJuIGdfc3RyZHVwKHVTdHJpbmcu
dXRmOCgpLmRhdGEoKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBnY2hhciogcm9sZVRvU3RyaW5nKEF0
a1JvbGUgcm9sZSkKK2NvbnN0IGdjaGFyKiByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQogewog
ICAgIHN3aXRjaCAocm9sZSkgewogICAgIGNhc2UgQVRLX1JPTEVfQUxFUlQ6CkBAIC0yOTgsNyAr
Mzc2LDcgQEAgc3RhdGljIGNvbnN0IGdjaGFyKiByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQog
ICAgIH0KIH0KIAotc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQqIGVsZW1lbnQpCitTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
IApAQCAtMzQ1LDExICs0MjMsMTMgQEAgc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICAvLyBXZSBhcHBlbmQgdGhl
IEFUSyBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFzIGEgc2luZ2xlIGxpbmUgYXQgdGhlIGVuZC4KICAg
ICBidWlsZGVyLmFwcGVuZCgiQVhQbGF0Zm9ybUF0dHJpYnV0ZXM6ICIpOwotICAgIGJ1aWxkZXIu
YXBwZW5kKGdldEF0a0F0dHJpYnV0ZVNldEFzU3RyaW5nKGVsZW1lbnQtPnBsYXRmb3JtVUlFbGVt
ZW50KCkuZ2V0KCkpKTsKKyAgICBidWlsZGVyLmFwcGVuZChnZXRBdGtBdHRyaWJ1dGVTZXRBc1N0
cmluZyhlbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVudCgpLmdldCgpLCBPYmplY3RBdHRyaWJ1dGVU
eXBlKSk7CiAKICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCit9IC8vIG5hbWVz
cGFjZQorCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFBs
YXRmb3JtVUlFbGVtZW50IGVsZW1lbnQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKIHsKQEAg
LTU3MCwyNyArNjUwLDEzIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlCiAgICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgU3RyaW5nIGF0a0F0
dHJpYnV0ZU5hbWUgPSBjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUoYXR0cmlidXRlKTsKLSAg
ICBpZiAoYXRrQXR0cmlidXRlTmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiAKLSAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUg
PSBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSwg
YXRrQXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAvLyBUcnkgb2JqZWN0IGF0dHJp
YnV0ZXMgZmlyc3QuCisgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0
VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIE9iamVjdEF0dHJpYnV0ZVR5
cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOwogCi0gICAgLy8gSW4gY2FzZSBvZiAnYXJpYS1pbnZhbGlk
JyB3aGVuIHRoZSBhdHRyaWJ1dGUgZW1wdHkgb3IgaGFzICJmYWxzZSIgZm9yIEFUSwotICAgIC8v
IGFjY29yZGluZyB0byBodHRwOi8vd3d3LnczLm9yZy9XQUkvUEYvYXJpYS1pbXBsZW1lbnRhdGlv
bi8jbWFwcGluZyBhdHRyaWJ1dGUKLSAgICAvLyBpcyBub3QgbWFwcGVkIGJ1dCBsYXlvdXQgdGVz
dHMgd2lsbCBleHBlY3QgJ2ZhbHNlJy4KLSAgICBpZiAoYXR0cmlidXRlVmFsdWUuaXNFbXB0eSgp
ICYmIGF0a0F0dHJpYnV0ZU5hbWUgPT0gImFyaWEtaW52YWxpZCIpCi0gICAgICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZmFsc2UiKTsKLQotICAgIC8vIFdlIG5lZWQg
dG8gdHJhbnNsYXRlIEFUSyB2YWx1ZXMgZXhwb3NlZCBmb3IgJ2FyaWEtc29ydCcgKGUuZy4gJ2Fz
Y2VuZGluZycpCi0gICAgLy8gaW50byB0aG9zZSBleHBlY3RlZCBieSB0aGUgbGF5b3V0IHRlc3Rz
IChlLmcuICdBWEFzY2VuZGluZ1NvcnREaXJlY3Rpb24nKS4KLSAgICBpZiAoYXRrQXR0cmlidXRl
TmFtZSA9PSAic29ydCIpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlID09ICJhc2NlbmRp
bmciKQotICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
WEFzY2VuZGluZ1NvcnREaXJlY3Rpb24iKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlID09
ICJkZXNjZW5kaW5nIikKLSAgICAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQVhEZXNjZW5kaW5nU29ydERpcmVjdGlvbiIpOwotCi0gICAgICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQVhVbmtub3duU29ydERpcmVjdGlvbiIpOwot
ICAgIH0KKyAgICAvLyBUcnkgdGV4dCBhdHRyaWJ1dGVzIGlmIHRoZSByZXF1ZXN0ZWQgb25lIHdh
cyBub3QgZm91bmQgYW5kIHdlIGhhdmUgYW4gQXRrVGV4dCBvYmplY3QuCisgICAgaWYgKGF0dHJp
YnV0ZVZhbHVlLmlzRW1wdHkoKSAmJiBBVEtfSVNfVEVYVChtX2VsZW1lbnQuZ2V0KCkpKQorICAg
ICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVD
VChtX2VsZW1lbnQuZ2V0KCkpLCBUZXh0QXR0cmlidXRlVHlwZSwgYXRrQXR0cmlidXRlTmFtZSk7
CiAKICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXR0cmlidXRlVmFs
dWUudXRmOCgpLmRhdGEoKSk7CiB9CkBAIC02MjgsNyArNjk0LDExIEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRl
KQogICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVG
b3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIGF0a0F0dHJpYnV0ZU5hbWUudXRmOCgp
LmRhdGEoKSk7CisgICAgLy8gRm9yIG5vdywgYW4gYXR0cmlidXRlIGlzIHN1cHBvcnRlZCB3aGV0
aGVyIGl0J3MgZXhwb3NlZCBhcyBhIG9iamVjdCBvciBhIHRleHQgYXR0cmlidXRlLgorICAgIFN0
cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVD
VChtX2VsZW1lbnQuZ2V0KCkpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCBhdGtBdHRyaWJ1dGVOYW1l
KTsKKyAgICBpZiAoYXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBhdHRyaWJ1dGVW
YWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0
KCkpLCBUZXh0QXR0cmlidXRlVHlwZSwgYXRrQXR0cmlidXRlTmFtZSk7CisKICAgICByZXR1cm4g
IWF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKTsKIH0KIApAQCAtODA3LDcgKzg3Nyw3IEBAIGRvdWJs
ZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0CiAgICAgLy8gYW4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCwgc28gd2UgY2FuIHJldXNlIHNvbWUgdGVzdHMgdG8gY2hlY2sg
dGhlIGxldmVsCiAgICAgLy8gYm90aCBmb3IgSFRNTCBoZWFkaW5ncyBhbmQgb2JqZWN0cyB3aXRo
IHRoZSBhcmlhLWxldmVsIGF0dHJpYnV0ZS4KICAgICBpZiAoYXRrX29iamVjdF9nZXRfcm9sZShB
VEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpID09IEFUS19ST0xFX0hFQURJTkcpIHsKLSAgICAg
ICAgU3RyaW5nIGhlYWRpbmdMZXZlbCA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09C
SkVDVChtX2VsZW1lbnQuZ2V0KCkpLCAibGV2ZWwiKTsKKyAgICAgICAgU3RyaW5nIGhlYWRpbmdM
ZXZlbCA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0
KCkpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCAibGV2ZWwiKTsKICAgICAgICAgYm9vbCBvazsKICAg
ICAgICAgZG91YmxlIGhlYWRpbmdMZXZlbFZhbHVlID0gaGVhZGluZ0xldmVsLnRvRG91YmxlKCZv
ayk7CiAgICAgICAgIGlmIChvaykKQEAgLTEyMTMsNyArMTI4Myw4IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aGFzUG9wdXAoKSBjb25zdAogICAgIGlmICghQVRLX0lTX09CSkVDVCht
X2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZXF1
YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxl
bWVudC5nZXQoKSksICJoYXNwb3B1cCIpLCAidHJ1ZSIpOworICAgIFN0cmluZyBoYXNQb3B1cFZh
bHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQo
KSksIE9iamVjdEF0dHJpYnV0ZVR5cGUsICJoYXNwb3B1cCIpOworICAgIHJldHVybiBlcXVhbEln
bm9yaW5nQ2FzZShoYXNQb3B1cFZhbHVlLCAidHJ1ZSIpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCi0tIAoxLjcuMTAuNAoK
</data>
<flag name="review"
          id="235490"
          type_id="1"
          status="+"
          setter="cfleizach"
    />
          </attachment>
      

    </bug>

</bugzilla>