<?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>200199</bug_id>
          
          <creation_ts>2019-07-27 16:29:10 -0700</creation_ts>
          <short_desc>[ESNext] Implement optional chaining</short_desc>
          <delta_ts>2020-02-05 13:49:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=200072</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=200480</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=200875</see_also>
          <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="Ross Kirsling">ross.kirsling</reporter>
          <assigned_to name="Ross Kirsling">ross.kirsling</assigned_to>
          <cc>chi187</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>keith_miller</cc>
    
    <cc>leo</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
    
    <cc>zmyaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1556400</commentid>
    <comment_count>0</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-27 16:29:10 -0700</bug_when>
    <thetext>[ESNext] Implement optional chaining</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556401</commentid>
    <comment_count>1</comment_count>
      <attachid>375035</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-27 16:30:11 -0700</bug_when>
    <thetext>Created attachment 375035
Naive approach (double-evaluates LHS)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557471</commentid>
    <comment_count>2</comment_count>
      <attachid>375274</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-07-31 17:59:09 -0700</bug_when>
    <thetext>Created attachment 375274
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557774</commentid>
    <comment_count>3</comment_count>
      <attachid>375356</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-01 15:22:40 -0700</bug_when>
    <thetext>Created attachment 375356
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558367</commentid>
    <comment_count>4</comment_count>
      <attachid>375356</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-04 10:58:03 -0700</bug_when>
    <thetext>Comment on attachment 375356
Patch

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

I’m not 100% qualified to review this, but it looks quite good to me. In particular, I think the test covers enough to give me confidence. The main part I don’t feel qualified to review is the byte code generator part; I am not super solid on understanding register allocation and the proper use of reference counting in the byte code generation.

&gt; Source/JavaScriptCore/parser/Nodes.h:1334
&gt; +        RegisterID* emitBytecode(BytecodeGenerator&amp;, RegisterID* = 0) override;
&gt; +
&gt; +        bool isOptionalChain() const override { return true; }

In new code I think we’d want nullptr and final here rather than 0 and override.

&gt; Source/JavaScriptCore/parser/Parser.cpp:4819
&gt; +            semanticFailIfTrue(newCount, &quot;Cannot call constructor in an optional chain&quot;);
&gt; +            semanticFailIfTrue(baseIsSuper, &quot;super is not valid in this context&quot;);

Surprised to see inconsistent capitalization here. I guess because &quot;super&quot; is a keyword we can’t capitalize it.

&gt; Source/JavaScriptCore/runtime/ExceptionHelpers.cpp:181
&gt; +    // Don&apos;t display the ?. of an optional call.
&gt; +    if (idx &gt; 2 &amp;&amp; sourceText[idx] == &apos;.&apos; &amp;&amp; sourceText[idx - 1] == &apos;?&apos;)
&gt; +        idx -= 2;

Which part of the test below covers this?

&gt; JSTests/stress/optional-chaining.js:72
&gt; +shouldBe(({})?.a?.[&apos;b&apos;], undefined);

Do we need some test cases with sequences with more than two &quot;?.&quot; to make sure we don’t have a mistake in the loops in the code? Or are two guaranteed to be enough?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558395</commentid>
    <comment_count>5</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-04 17:34:36 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 375356 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=375356&amp;action=review
&gt; 
&gt; I’m not 100% qualified to review this, but it looks quite good to me. In
&gt; particular, I think the test covers enough to give me confidence. The main
&gt; part I don’t feel qualified to review is the byte code generator part; I am
&gt; not super solid on understanding register allocation and the proper use of
&gt; reference counting in the byte code generation.

Thanks!

&gt; &gt; Source/JavaScriptCore/parser/Nodes.h:1334
&gt; &gt; +        RegisterID* emitBytecode(BytecodeGenerator&amp;, RegisterID* = 0) override;
&gt; &gt; +
&gt; &gt; +        bool isOptionalChain() const override { return true; }
&gt; 
&gt; In new code I think we’d want nullptr and final here rather than 0 and
&gt; override.

Sounds good.

&gt; &gt; Source/JavaScriptCore/parser/Parser.cpp:4819
&gt; &gt; +            semanticFailIfTrue(newCount, &quot;Cannot call constructor in an optional chain&quot;);
&gt; &gt; +            semanticFailIfTrue(baseIsSuper, &quot;super is not valid in this context&quot;);
&gt; 
&gt; Surprised to see inconsistent capitalization here. I guess because &quot;super&quot;
&gt; is a keyword we can’t capitalize it.

Yeah, I reused an existing message for the baseIsSuper case here, but I wouldn&apos;t need to -- &quot;Cannot use super as the base of an optional chain&quot; would work.

&gt; &gt; Source/JavaScriptCore/runtime/ExceptionHelpers.cpp:181
&gt; &gt; +    // Don&apos;t display the ?. of an optional call.
&gt; &gt; +    if (idx &gt; 2 &amp;&amp; sourceText[idx] == &apos;.&apos; &amp;&amp; sourceText[idx - 1] == &apos;?&apos;)
&gt; &gt; +        idx -= 2;
&gt; 
&gt; Which part of the test below covers this?

Good point, I should check the error messages and not just their types.

&gt; &gt; JSTests/stress/optional-chaining.js:72
&gt; &gt; +shouldBe(({})?.a?.[&apos;b&apos;], undefined);
&gt; 
&gt; Do we need some test cases with sequences with more than two &quot;?.&quot; to make
&gt; sure we don’t have a mistake in the loops in the code? Or are two guaranteed
&gt; to be enough?

I believe two *suffices*, but I&apos;m not opposed to adding some more thorough cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558484</commentid>
    <comment_count>6</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-05 11:01:38 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #5)
&gt; I believe two *suffices*, but I&apos;m not opposed to adding some more thorough
&gt; cases.

Ha, turns out two wasn&apos;t sufficient at all. This suggestion helped me identify a couple of remaining issues in the logic. :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558487</commentid>
    <comment_count>7</comment_count>
      <attachid>375536</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-05 11:06:05 -0700</bug_when>
    <thetext>Created attachment 375536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558798</commentid>
    <comment_count>8</comment_count>
      <attachid>375536</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-06 10:02:29 -0700</bug_when>
    <thetext>Comment on attachment 375536
Patch

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

Note to self: I suppose a good follow-up task here would be to add &quot;jump if (not) nullish&quot; ops.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:2428
&gt; +    generator.emitNode(finalDest.get(), m_expr);

Whoops, this ought to be emitNodeInTailPosition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558845</commentid>
    <comment_count>9</comment_count>
      <attachid>375536</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-06 11:32:53 -0700</bug_when>
    <thetext>Comment on attachment 375536
Patch

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

&gt;&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:2428
&gt;&gt; +    generator.emitNode(finalDest.get(), m_expr);
&gt; 
&gt; Whoops, this ought to be emitNodeInTailPosition.

At times like this I always think: &quot;What kind of test could I add that would have failed?&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558878</commentid>
    <comment_count>10</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-06 12:37:28 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; &gt; Whoops, this ought to be emitNodeInTailPosition.
&gt; 
&gt; At times like this I always think: &quot;What kind of test could I add that would
&gt; have failed?&quot;

Indeed. I&apos;ll add a couple of cases to tail-call-recognize.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558896</commentid>
    <comment_count>11</comment_count>
      <attachid>375646</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-06 13:18:10 -0700</bug_when>
    <thetext>Created attachment 375646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559668</commentid>
    <comment_count>12</comment_count>
      <attachid>375841</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-08 14:55:52 -0700</bug_when>
    <thetext>Created attachment 375841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559669</commentid>
    <comment_count>13</comment_count>
      <attachid>375841</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-08 14:56:57 -0700</bug_when>
    <thetext>Comment on attachment 375841
Patch

JITify basic tests and re-run EWS following r248426.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560760</commentid>
    <comment_count>14</comment_count>
      <attachid>375841</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-08-13 04:27:15 -0700</bug_when>
    <thetext>Comment on attachment 375841
Patch

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

Nice! I put quick comment.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4969
&gt; +    m_optionalChainTargetLabelStack.append(newLabel());

Why is stack required? All the labels in m_optionalChainTargetLabelStack is flushed at the same point. So, only holding one label while m_optionalChainDepth &gt; 0 is enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560836</commentid>
    <comment_count>15</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-13 10:11:17 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #14)
&gt; &gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4969
&gt; &gt; +    m_optionalChainTargetLabelStack.append(newLabel());
&gt; 
&gt; Why is stack required? All the labels in m_optionalChainTargetLabelStack is
&gt; flushed at the same point. So, only holding one label while
&gt; m_optionalChainDepth &gt; 0 is enough.

I had convinced myself that labels were single-use because I tried reusing them earlier and the jumps seemed to get all mixed up. Apparently I&apos;m wrong though, because your suggestion appears to work -- thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560840</commentid>
    <comment_count>16</comment_count>
      <attachid>376179</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-13 10:13:51 -0700</bug_when>
    <thetext>Created attachment 376179
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560893</commentid>
    <comment_count>17</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-08-13 12:19:32 -0700</bug_when>
    <thetext>Can we nest the optional chaining? Like,

xxx.?[yyy.?zzz.?aaa].?bbb

Then, what happens when we fail inside []?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560917</commentid>
    <comment_count>18</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-13 12:50:14 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #17)
&gt; Can we nest the optional chaining? Like,
&gt; 
&gt; xxx.?[yyy.?zzz.?aaa].?bbb
&gt; 
&gt; Then, what happens when we fail inside []?

Hmm, good point.

If we have:
  let x = { undefined: 3 };
  let y = null;

Then:
  x[y?.z]
  &gt; 3

But:
  x?.[y?.z]
  &gt; undefined

Will add tests and fix this afternoon, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560923</commentid>
    <comment_count>19</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-08-13 13:21:02 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #18)
&gt; (In reply to Yusuke Suzuki from comment #17)
&gt; &gt; Can we nest the optional chaining? Like,
&gt; &gt; 
&gt; &gt; xxx.?[yyy.?zzz.?aaa].?bbb
&gt; &gt; 
&gt; &gt; Then, what happens when we fail inside []?
&gt; 
&gt; Hmm, good point.
&gt; 
&gt; If we have:
&gt;   let x = { undefined: 3 };
&gt;   let y = null;
&gt; 
&gt; Then:
&gt;   x[y?.z]
&gt;   &gt; 3
&gt; 
&gt; But:
&gt;   x?.[y?.z]
&gt;   &gt; undefined
&gt; 
&gt; Will add tests and fix this afternoon, thanks.

I think, if the nest happens, we need some sort of stack with scope, and depth needs to be managed by the scope instead of BytecodeGenerator. But if the nest does not happen, we can just put one label and depth in BytecodeGenerator.
And label should be one-per-chain. So, maybe, the scope should have that, and scope should have the depth too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560967</commentid>
    <comment_count>20</comment_count>
      <attachid>376217</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-13 14:57:57 -0700</bug_when>
    <thetext>Created attachment 376217
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560969</commentid>
    <comment_count>21</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-13 15:01:15 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #19)
&gt; I think, if the nest happens, we need some sort of stack with scope, and
&gt; depth needs to be managed by the scope instead of BytecodeGenerator. But if
&gt; the nest does not happen, we can just put one label and depth in
&gt; BytecodeGenerator.
&gt; And label should be one-per-chain. So, maybe, the scope should have that,
&gt; and scope should have the depth too.

Yep, I reintroduced a stack for this purpose and added an m_isOutermost to OptionalChainNode to mark the nodes that need to interact with that stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560975</commentid>
    <comment_count>22</comment_count>
      <attachid>376217</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-13 15:12:01 -0700</bug_when>
    <thetext>Comment on attachment 376217
Patch

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

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:963
&gt; +        void beginOptionalChain();
&gt; +        void endOptionalChain(RegisterID* dst, bool isDelete = false);

Self-nit: It&apos;d be clearer to call these push / pop now, as they&apos;re now guarded at the callsite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560989</commentid>
    <comment_count>23</comment_count>
      <attachid>376220</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-13 15:38:34 -0700</bug_when>
    <thetext>Created attachment 376220
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561021</commentid>
    <comment_count>24</comment_count>
      <attachid>376220</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-13 17:54:36 -0700</bug_when>
    <thetext>Comment on attachment 376220
Patch

Attachment 376220 did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/12907455

New failing tests:
mozilla-tests.yaml/js1_5/Array/regress-101964.js.mozilla-dfg-eager-no-cjit-validate-phases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561028</commentid>
    <comment_count>25</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-13 18:14:40 -0700</bug_when>
    <thetext>(Grr, we really need to deal with that flaky test.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561050</commentid>
    <comment_count>26</comment_count>
      <attachid>376231</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-13 20:10:09 -0700</bug_when>
    <thetext>Created attachment 376231
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561051</commentid>
    <comment_count>27</comment_count>
      <attachid>376231</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-13 20:12:03 -0700</bug_when>
    <thetext>Comment on attachment 376231
Patch

(Reuploaded the same patch to make EWS appear green this time...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561158</commentid>
    <comment_count>28</comment_count>
      <attachid>376265</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-14 08:13:02 -0700</bug_when>
    <thetext>Created attachment 376265
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561232</commentid>
    <comment_count>29</comment_count>
      <attachid>376278</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-14 10:37:25 -0700</bug_when>
    <thetext>Created attachment 376278
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561236</commentid>
    <comment_count>30</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-14 10:39:25 -0700</bug_when>
    <thetext>Added tests for (a?.b)?.() and (a?.b)() now too.

Any other concerns, Yusuke?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562102</commentid>
    <comment_count>31</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-16 11:17:26 -0700</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562519</commentid>
    <comment_count>32</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-17 17:08:17 -0700</bug_when>
    <thetext>I would love to review+ but I think Yusuke should.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562556</commentid>
    <comment_count>33</comment_count>
      <attachid>376278</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-08-17 22:03:37 -0700</bug_when>
    <thetext>Comment on attachment 376278
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562563</commentid>
    <comment_count>34</comment_count>
      <attachid>376278</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-17 22:54:20 -0700</bug_when>
    <thetext>Comment on attachment 376278
Patch

Clearing flags on attachment: 376278

Committed r248829: &lt;https://trac.webkit.org/changeset/248829&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562564</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-17 22:54:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562566</commentid>
    <comment_count>36</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-17 22:55:50 -0700</bug_when>
    <thetext>&lt;rdar://problem/54437845&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375035</attachid>
            <date>2019-07-27 16:30:11 -0700</date>
            <delta_ts>2019-07-31 17:59:07 -0700</delta_ts>
            <desc>Naive approach (double-evaluates LHS)</desc>
            <filename>bug-200199-20190727163011.patch</filename>
            <type>text/plain</type>
            <size>32077</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3ODQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
YzAxODA5MmIyYWZjODA1OGZlZGQwZWUxYzMxNWJhMjAyYjVmOWE4Li5jNDZmYzVkMTY1NGJkNDA3
MDM2MjdlZWZjNmNmZDE2NmVhMmIyNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxOS0wNy0yNyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJ5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpDb2FsZXNjZU5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIChKU0M6Ok9wdGlvbmFsQ2hhaW5Ob2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAqIHBhcnNlci9BU1RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZU9wdGlvbmFsQ2hhaW4pOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtl
RGVsZXRlTm9kZSk6CisgICAgICAgICogcGFyc2VyL0xleGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
TGV4ZXI8VD46OmxleFdpdGhvdXRDbGVhcmluZ0xpbmVUZXJtaW5hdG9yKToKKyAgICAgICAgKiBw
YXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpPcHRpb25hbENoYWluTm9k
ZTo6T3B0aW9uYWxDaGFpbk5vZGUpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAg
ICAoSlNDOjpFeHByZXNzaW9uTm9kZTo6aXNPcHRpb25hbENoYWluIGNvbnN0KToKKyAgICAgICAg
KiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBh
cnNlTWVtYmVyRXhwcmVzc2lvbik6CisgICAgICAgICogcGFyc2VyL1BhcnNlclRva2Vucy5oOgor
ICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENo
ZWNrZXI6OmNyZWF0ZU9wdGlvbmFsQ2hhaW4pOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5o
OgorCiAyMDE5LTA3LTI1ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4K
IAogICAgICAgICBMZWdhY3kgbnVtZXJpYyBsaXRlcmFscyBzaG91bGQgbm90IHBlcm1pdCBzZXBh
cmF0b3JzIG9yIEJpZ0ludApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDdjYzA3OGMzYzAyMTVjOWRmNzkwYzg0OGEzMmQx
M2I4MDkwZjA4YTAuLjQxMmY4MjJkMGE0NmIzYzU3YzRmMzU3MDdmMGU0YzU5Mzg3MDY4ZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAKQEAgLTIzNDYsMTMgKzIzNDYsMzUgQEAgUmVnaXN0ZXJJRCogQ29hbGVzY2VOb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCoKICAg
ICBSZWY8TGFiZWw+IHRhcmdldCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCiAgICAgZ2VuZXJh
dG9yLmVtaXROb2RlKHRlbXAuZ2V0KCksIG1fZXhwcjEpOwotICAgIGdlbmVyYXRvci5lbWl0SnVt
cElmRmFsc2UoZ2VuZXJhdG9yLmVtaXRVbmFyeU9wPE9wSXNVbmRlZmluZWRPck51bGw+KGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgdGVtcC5nZXQoKSksIHRhcmdldC5nZXQoKSk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShnZW5lcmF0b3IuZW1pdElzVW5kZWZpbmVkT3JOdWxsKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdGVtcC5nZXQoKSksIHRhcmdldC5nZXQoKSk7CiAgICAg
Z2VuZXJhdG9yLmVtaXROb2RlSW5UYWlsUG9zaXRpb24odGVtcC5nZXQoKSwgbV9leHByMik7CiAg
ICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0YXJnZXQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGdlbmVy
YXRvci5tb3ZlKGRzdCwgdGVtcC5nZXQoKSk7CiB9CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBPcHRpb25hbENoYWluTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK1JlZ2lzdGVySUQqIE9wdGlvbmFsQ2hhaW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiB0ZW1wID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZjxM
YWJlbD4gYmFzZUlzTm90TnVsbGlzaCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgIFJlZjxM
YWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisKKyAgICBnZW5lcmF0b3IuZW1pdE5v
ZGUodGVtcC5nZXQoKSwgbV9iYXNlKTsKKyAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGdl
bmVyYXRvci5lbWl0SXNVbmRlZmluZWRPck51bGwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB0
ZW1wLmdldCgpKSwgYmFzZUlzTm90TnVsbGlzaC5nZXQoKSk7CisKKyAgICBnZW5lcmF0b3IuZW1p
dExvYWQodGVtcC5nZXQoKSwgbV9pc0RlbGV0ZSA/IGpzQm9vbGVhbih0cnVlKSA6IGpzVW5kZWZp
bmVkKCkpOworICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOworCisgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChiYXNlSXNOb3ROdWxsaXNoLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1p
dE5vZGVJblRhaWxQb3NpdGlvbih0ZW1wLmdldCgpLCBtX2Z1bGxFeHByKTsKKworICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKKworICAgIHJldHVybiBnZW5lcmF0b3IubW92ZShk
c3QsIHRlbXAuZ2V0KCkpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Q29uZGl0aW9uYWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3Rl
cklEKiBDb25kaXRpb25hbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNU
QnVpbGRlci5oCmluZGV4IGRlNWIxMzM5MDY2MTEzNDEyYWNhZWVmMmJkNzVlMDMxYTMzM2ExMDAu
LmU0YWEyMGY2OWU0MjQxYTQ4MjY0ZjAyNmM0MmUyMTY5NmY2MDVlMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCkBAIC0zNjAsNiArMzYwLDExIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCisgICAgRXhwcmVzc2lvbk5vZGUqIGNy
ZWF0ZU9wdGlvbmFsQ2hhaW4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBmdWxsRXhwcikKKyAgICB7CisgICAgICAg
IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIE9wdGlvbmFsQ2hhaW5Ob2RlKGxvY2F0aW9uLCBi
YXNlLCBmdWxsRXhwcik7CisgICAgfQorCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUNvbmRp
dGlvbmFsRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogY29uZGl0aW9uLCBFeHByZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSogcmhzKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ29uZGl0aW9uYWxOb2Rl
KGxvY2F0aW9uLCBjb25kaXRpb24sIGxocywgcmhzKTsKQEAgLTExNDgsNiArMTE1MywxMyBAQCBF
eHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcgogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFr
ZURlbGV0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogeworICAgIGlmIChleHByLT5p
c09wdGlvbmFsQ2hhaW4oKSkgeworICAgICAgICBPcHRpb25hbENoYWluTm9kZSogb3B0aW9uYWxD
aGFpbiA9IHN0YXRpY19jYXN0PE9wdGlvbmFsQ2hhaW5Ob2RlKj4oZXhwcik7CisgICAgICAgIG9w
dGlvbmFsQ2hhaW4tPnNldEZ1bGxFeHByKG1ha2VEZWxldGVOb2RlKGxvY2F0aW9uLCBvcHRpb25h
bENoYWluLT5mdWxsRXhwcigpLCBzdGFydCwgZGl2b3QsIGVuZCkpOworICAgICAgICBvcHRpb25h
bENoYWluLT5zZXRJc0RlbGV0ZSgpOworICAgICAgICByZXR1cm4gb3B0aW9uYWxDaGFpbjsKKyAg
ICB9CisKICAgICBpZiAoIWV4cHItPmlzTG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgRGVsZXRlVmFsdWVOb2RlKGxvY2F0aW9uLCBleHByKTsKICAgICBpZiAo
ZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0xleGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIu
Y3BwCmluZGV4IGU5OGNkYjVlNTllMjMwNzJjMTkwMThmODdkMTBjMmQ0NTJkOWNkMzkuLmYxYmQ2
MzZkNmY0NjQ3NzEyZGIwNDRkZjgxMmZmZmQ2ZGExNzQyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTGV4ZXIuY3BwCkBAIC0yMTU3LDEwICsyMTU3LDE3IEBAIHN0YXJ0OgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENoYXJhY3RlclF1ZXN0aW9uOgogICAgICAgICBzaGlmdCgpOwot
ICAgICAgICBpZiAoT3B0aW9uczo6dXNlTnVsbGlzaENvYWxlc2NpbmcoKSAmJiBtX2N1cnJlbnQg
PT0gJz8nKSB7Ci0gICAgICAgICAgICBzaGlmdCgpOwotICAgICAgICAgICAgdG9rZW4gPSBDT0FM
RVNDRTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoT3B0aW9uczo6dXNlTnVsbGlz
aEF3YXJlT3BlcmF0b3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJz8nKSB7
CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IENPQUxF
U0NFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG1fY3VycmVudCA9PSAnLicgJiYgIWlzQVNDSUlEaWdpdChwZWVrKDEpKSkgeworICAgICAg
ICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBRVUVTVElPTkRPVDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICB0b2tlbiA9IFFVRVNUSU9OOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKaW5kZXggZDQxZTNhZWQ4ZTQ1ZjdhOGUy
ZmQzMWMyNDQ3N2RlY2NiOGQ1NjQwZi4uYmJhMzM4NzY0NzJjZDMxMTdlODA1NjRiNjA0Y2Y4OTJi
NzJkOTIyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29u
c3RydWN0b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3Ry
dWN0b3JzLmgKQEAgLTY3Niw2ICs2NzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAg
IH0KIAorICAgIGlubGluZSBPcHRpb25hbENoYWluTm9kZTo6T3B0aW9uYWxDaGFpbk5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJl
c3Npb25Ob2RlKiBmdWxsRXhwcikKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikK
KyAgICAgICAgLCBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBtX2Z1bGxFeHByKGZ1bGxFeHByKQor
ICAgIHsKKyAgICB9CisKICAgICBpbmxpbmUgQ29uZGl0aW9uYWxOb2RlOjpDb25kaXRpb25hbE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGxvZ2lj
YWwsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKQogICAgICAg
ICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1fbG9naWNhbChsb2dpY2Fs
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4IDg2ZmRhZjNkMDRmZDBkOGY3
ZjQ4N2QxNzczNzdlMmEzN2U5NWE3ODcuLjljOTRlN2ZmZGJlYWVkYjZkMzNiNTg4NTBmZTU4YTZi
M2NiOGM1ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTIwNSw2ICsy
MDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzQnl0ZWNvZGVJ
bnRyaW5zaWNOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBi
b29sIGlzQmluYXJ5T3BOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmly
dHVhbCBib29sIGlzRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAg
ICAgdmlydHVhbCBib29sIGlzT3B0aW9uYWxDaGFpbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChC
eXRlY29kZUdlbmVyYXRvciYsIExhYmVsJiwgTGFiZWwmLCBGYWxsVGhyb3VnaE1vZGUpOwogCkBA
IC0xMzE2LDYgKzEzMTcsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEV4cHJlc3Npb25O
b2RlKiBtX2V4cHIyOwogICAgIH07CiAKKyAgICBjbGFzcyBPcHRpb25hbENoYWluTm9kZSBmaW5h
bCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBPcHRpb25h
bENoYWluTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwg
RXhwcmVzc2lvbk5vZGUqIGZ1bGxFeHByKTsKKworICAgICAgICB2b2lkIHNldEZ1bGxFeHByKEV4
cHJlc3Npb25Ob2RlKiBmdWxsRXhwcikgeyBtX2Z1bGxFeHByID0gZnVsbEV4cHI7IH0KKyAgICAg
ICAgRXhwcmVzc2lvbk5vZGUqIGZ1bGxFeHByKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsRXhwcjsg
fQorCisgICAgICAgIHZvaWQgc2V0SXNEZWxldGUoKSB7IG1faXNEZWxldGUgPSB0cnVlOyB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOworCisgICAgICAgIGJvb2wgaXNP
cHRpb25hbENoYWluKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAg
IEV4cHJlc3Npb25Ob2RlKiBtX2Jhc2U7CisgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2Z1bGxF
eHByOworICAgICAgICBib29sIG1faXNEZWxldGUgeyBmYWxzZSB9OworICAgIH07CisKICAgICAv
LyBUaGUgdGVybmFyeSBvcGVyYXRvciwgIm1fbG9naWNhbCA/IG1fZXhwcjEgOiBtX2V4cHIyIgog
ICAgIGNsYXNzIENvbmRpdGlvbmFsTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7
CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4
IGUyNTRkYzkwODQyNzRkZTdkNTM3YjlkYTI2OTI2OTJiMjM4OWNmMDEuLjEwMmMxNjJjMmM1ZDhk
Yjg0MjdmNzNlNDNkNjhhYmI3YTE2OGEyNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAKQEAgLTQ4MDYsMTAzICs0ODA2LDEzMSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4
cHJlcwogICAgIH0KIAogICAgIGZhaWxJZkZhbHNlKGJhc2UsICJDYW5ub3QgcGFyc2UgYmFzZSBl
eHByZXNzaW9uIik7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgbG9jYXRpb24gPSB0b2tl
bkxvY2F0aW9uKCk7Ci0gICAgICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKLSAgICAgICAg
Y2FzZSBPUEVOQlJBQ0tFVDogewotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFs
RXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9u
RW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKworICAgIGRvIHsKKyAgICAgICAgVHJlZUV4
cHJlc3Npb24gb3B0aW9uYWxDaGFpbkJhc2UgPSAwOworICAgICAgICBKU1Rva2VuTG9jYXRpb24g
b3B0aW9uYWxDaGFpbkxvY2F0aW9uOworICAgICAgICBKU1Rva2VuVHlwZSB0eXBlID0gbV90b2tl
bi5tX3R5cGU7CisKKyAgICAgICAgaWYgKG1hdGNoKFFVRVNUSU9ORE9UKSkgeworICAgICAgICAg
ICAgc2VtYW50aWNGYWlsSWZUcnVlKG5ld0NvdW50LCAiQ2Fubm90IGNhbGwgY29uc3RydWN0b3Ig
aW4gYW4gb3B0aW9uYWwgY2hhaW4iKTsKKyAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShi
YXNlSXNTdXBlciwgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKKyAgICAg
ICAgICAgIG9wdGlvbmFsQ2hhaW5CYXNlID0gYmFzZTsKKyAgICAgICAgICAgIG9wdGlvbmFsQ2hh
aW5Mb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKKworICAgICAgICAgICAgU2F2ZVBvaW50IHNh
dmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgpOwogICAgICAgICAgICAgbmV4dCgpOwotICAgICAg
ICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKLSAgICAg
ICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRD
b3VudDsKLSAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIHByb3BlcnR5ID0gcGFyc2VFeHByZXNz
aW9uKGNvbnRleHQpOwotICAgICAgICAgICAgZmFpbElmRmFsc2UocHJvcGVydHksICJDYW5ub3Qg
cGFyc2Ugc3Vic2NyaXB0IGV4cHJlc3Npb24iKTsKLSAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0
LmNyZWF0ZUJyYWNrZXRBY2Nlc3Moc3RhcnRMb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRp
YWxBc3NpZ25tZW50cyAhPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lv
blN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIgJiYgY3VycmVudFNjb3BlKCkt
PmlzQXJyb3dGdW5jdGlvbigpKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb25TY29w
ZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJQcm9wZXJ0eSgpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwgIl0i
LCAiZW5kIiwgInN1YnNjcmlwdCBleHByZXNzaW9uIik7Ci0gICAgICAgICAgICBtX3BhcnNlclN0
YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmIChtYXRjaChPUEVOQlJBQ0tFVCkgfHwgbWF0Y2goT1BFTlBBUkVOKSB8fCBtYXRj
aChCQUNLUVVPVEUpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBtX3Rva2VuLm1fdHlwZTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHR5cGUgPSBET1Q7CisgICAgICAgICAg
ICAgICAgcmVzdG9yZVNhdmVQb2ludChzYXZlUG9pbnQpOworICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgT1BFTlBBUkVOOiB7Ci0gICAgICAgICAgICBtX3BhcnNlclN0YXRl
Lm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAgICAgIGludCBub25MSFNDb3Vu
dCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBpZiAobmV3Q291bnQp
IHsKLSAgICAgICAgICAgICAgICBuZXdDb3VudC0tOwotICAgICAgICAgICAgICAgIEpTVGV4dFBv
c2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwotICAgICAgICAg
ICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCk7
Ci0gICAgICAgICAgICAgICAgZmFpbElmRmFsc2UoYXJndW1lbnRzLCAiQ2Fubm90IHBhcnNlIGNh
bGwgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlTmV3
RXhwcihsb2NhdGlvbiwgYmFzZSwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Np
b25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBzaXplX3QgdXNlZFZhcmlhYmxlc1NpemUgPSBjdXJyZW50U2NvcGUoKS0+
Y3VycmVudFVzZWRWYXJpYWJsZXNTaXplKCk7CisKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOworICAgICAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIE9QRU5CUkFDS0VUOiB7CisgICAgICAgICAgICAg
ICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAgICAgICAg
ICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgT3B0aW9uYWw8Q2FsbE9yQXBwbHlEZXB0aFNjb3BlPiBjYWxs
T3JBcHBseURlcHRoU2NvcGU7Ci0gICAgICAgICAgICAgICAgcmVjb3JkQ2FsbE9yQXBwbHlEZXB0
aDxUcmVlQnVpbGRlcj4odGhpcywgKm1fdm0sIGNhbGxPckFwcGx5RGVwdGhTY29wZSwgYmFzZSk7
CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIGludCBub25MSFNDb3Vu
dCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CisgICAgICAgICAgICAgICAgaW50IGluaXRp
YWxBc3NpZ25tZW50cyA9IG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENvdW50OworICAgICAgICAg
ICAgICAgIFRyZWVFeHByZXNzaW9uIHByb3BlcnR5ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQp
OworICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIHN1
YnNjcmlwdCBleHByZXNzaW9uIik7CisgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3Jl
YXRlQnJhY2tldEFjY2VzcyhzdGFydExvY2F0aW9uLCBiYXNlLCBwcm9wZXJ0eSwgaW5pdGlhbEFz
c2lnbm1lbnRzICE9IG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENvdW50LCBleHByZXNzaW9uU3Rh
cnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7CiAKLSAgICAgICAgICAgICAg
ICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQpOworICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShiYXNlSXNTdXBlciAmJiBjdXJyZW50U2NvcGUoKS0+
aXNBcnJvd0Z1bmN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb25T
Y29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJQcm9wZXJ0eSgpOwogCi0gICAg
ICAgICAgICAgICAgaWYgKGJhc2VJc0FzeW5jS2V5d29yZCAmJiAoIWFyZ3VtZW50cyB8fCBtYXRj
aChBUlJPV0ZVTkNUSU9OKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCkt
PnJldmVydFRvUHJldmlvdXNVc2VkVmFyaWFibGVzKHVzZWRWYXJpYWJsZXNTaXplKTsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yY2VDbGFzc2lmeUV4cHJlc3Npb25FcnJvcihFcnJvckluZGljYXRl
c0FzeW5jQXJyb3dGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGZhaWxEdWVUb1VuZXhw
ZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBoYW5kbGVQ
cm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5kIiwgInN1YnNjcmlwdCBleHBy
ZXNzaW9uIik7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5v
bkxIU0NvdW50OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBPUEVOUEFSRU46IHsKKyAgICAgICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5v
blRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgICAgICAgICBpbnQgbm9uTEhTQ291
bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIGlmIChuZXdD
b3VudCkgeworICAgICAgICAgICAgICAgICAgICBuZXdDb3VudC0tOworICAgICAgICAgICAgICAg
ICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24o
KTsKKyAgICAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFy
Z3VtZW50cyhjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UoYXJndW1l
bnRzLCAiQ2Fubm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7CisgICAgICAgICAgICAgICAgICAg
IGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywg
ZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNl
ZFZhcmlhYmxlc1NpemUgPSBjdXJyZW50U2NvcGUoKS0+Y3VycmVudFVzZWRWYXJpYWJsZXNTaXpl
KCk7CisgICAgICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBs
YXN0VG9rZW5FbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDxDYWxs
T3JBcHBseURlcHRoU2NvcGU+IGNhbGxPckFwcGx5RGVwdGhTY29wZTsKKyAgICAgICAgICAgICAg
ICAgICAgcmVjb3JkQ2FsbE9yQXBwbHlEZXB0aDxUcmVlQnVpbGRlcj4odGhpcywgKm1fdm0sIGNh
bGxPckFwcGx5RGVwdGhTY29wZSwgYmFzZSk7CisKKyAgICAgICAgICAgICAgICAgICAgVHJlZUFy
Z3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKIAotICAgICAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50
cyIpOwotICAgICAgICAgICAgICAgIGlmIChiYXNlSXNTdXBlcikgewotICAgICAgICAgICAgICAg
ICAgICBTY29wZVJlZiBmdW5jdGlvblNjb3BlID0gY3VycmVudEZ1bmN0aW9uU2NvcGUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvblNjb3BlLT5zZXRIYXNEaXJlY3RTdXBlcigp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCB1bm5lY2Vzc2FyeSB0byBjaGVjayBv
ZiB1c2luZyBzdXBlciBkdXJpbmcgcmVwYXJzaW5nIG9uZSBtb3JlIHRpbWUuIEFsc28gaXQgY2Fu
IGxlYWQgdG8gc3ludGF4IGVycm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNl
IG9mIGFycm93IGZ1bmN0aW9uIGJlY2F1c2UgZHVyaW5nIHJlcGFyc2luZyB3ZSBkb24ndCBrbm93
IHdoZXRoZXIgd2UgY3VycmVudGx5IHBhcnNlIHRoZSBhcnJvdyBmdW5jdGlvbgotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9mIHRoZSBjb25zdHJ1Y3RvciBvciBtZXRob2QuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbGV4ZXItPmlzUmVwYXJzaW5nRnVuY3Rpb24o
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjb3BlUmVmIGNsb3Nlc3RPcmRpbmFy
eUZ1bmN0aW9uU2NvcGUgPSBjbG9zZXN0UGFyZW50T3JkaW5hcnlGdW5jdGlvbk5vbkxleGljYWxT
Y29wZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yS2luZCBmdW5j
dGlvbkNvbnN0cnVjdG9yS2luZCA9ICFmdW5jdGlvblNjb3BlLT5pc0Fycm93RnVuY3Rpb24oKSAm
JiAhY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZS0+aXNFdmFsQ29udGV4dCgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gZnVuY3Rpb25TY29wZS0+Y29uc3RydWN0b3JLaW5k
KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbG9zZXN0T3JkaW5hcnlGdW5j
dGlvblNjb3BlLT5jb25zdHJ1Y3RvcktpbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPT0gQ29uc3RydWN0
b3JLaW5kOjpOb25lLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShmdW5jdGlvbkNvbnN0
cnVjdG9yS2luZCAhPSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMsICJzdXBlciBpcyBub3QgdmFs
aWQgaW4gdGhpcyBjb250ZXh0Iik7CisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlSXNBc3lu
Y0tleXdvcmQgJiYgKCFhcmd1bWVudHMgfHwgbWF0Y2goQVJST1dGVU5DVElPTikpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+cmV2ZXJ0VG9QcmV2aW91c1VzZWRW
YXJpYWJsZXModXNlZFZhcmlhYmxlc1NpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
Y2VDbGFzc2lmeUV4cHJlc3Npb25FcnJvcihFcnJvckluZGljYXRlc0FzeW5jQXJyb3dGdW5jdGlv
bik7CisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsRHVlVG9VbmV4cGVjdGVkVG9rZW4oKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNl
KGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50cyIpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNjb3Bl
UmVmIGZ1bmN0aW9uU2NvcGUgPSBjdXJyZW50RnVuY3Rpb25TY29wZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFmdW5jdGlvblNjb3BlLT5zZXRIYXNEaXJlY3RTdXBlcigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQgdW5uZWNlc3NhcnkgdG8gY2hlY2sgb2Yg
dXNpbmcgc3VwZXIgZHVyaW5nIHJlcGFyc2luZyBvbmUgbW9yZSB0aW1lLiBBbHNvIGl0IGNhbiBs
ZWFkIHRvIHN5bnRheCBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGNh
c2Ugb2YgYXJyb3cgZnVuY3Rpb24gYmVjYXVzZSBkdXJpbmcgcmVwYXJzaW5nIHdlIGRvbid0IGtu
b3cgd2hldGhlciB3ZSBjdXJyZW50bHkgcGFyc2UgdGhlIGFycm93IGZ1bmN0aW9uCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9mIHRoZSBjb25zdHJ1Y3RvciBvciBtZXRo
b2QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2xleGVyLT5pc1JlcGFyc2lu
Z0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NvcGVSZWYg
Y2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZSA9IGNsb3Nlc3RQYXJlbnRPcmRpbmFyeUZ1bmN0
aW9uTm9uTGV4aWNhbFNjb3BlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
bnN0cnVjdG9yS2luZCBmdW5jdGlvbkNvbnN0cnVjdG9yS2luZCA9ICFmdW5jdGlvblNjb3BlLT5p
c0Fycm93RnVuY3Rpb24oKSAmJiAhY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZS0+aXNFdmFs
Q29udGV4dCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZ1bmN0aW9u
U2NvcGUtPmNvbnN0cnVjdG9yS2luZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9yS2luZCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rp
b25Db25zdHJ1Y3RvcktpbmQgPT0gQ29uc3RydWN0b3JLaW5kOjpOb25lLCAic3VwZXIgaXMgbm90
IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgIT0gQ29uc3RydWN0
b3JLaW5kOjpFeHRlbmRzLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0
aW9uKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+c2V0SW5u
ZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyQ2FsbCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblNjb3BlLT5zZXRJbm5lckFycm93RnVu
Y3Rpb25Vc2VzU3VwZXJDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0
Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHByZXZpb3VzQmFzZVdh
c1N1cGVyLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGNhbGxPckFwcGx5RGVw
dGhTY29wZSA/IGNhbGxPckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFuY2VUb0lubmVybW9zdENoaWxk
KCkgOiAwKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRl
eHQubWFrZUZ1bmN0aW9uQ2FsbE5vZGUoc3RhcnRMb2NhdGlvbiwgYmFzZSwgcHJldmlvdXNCYXNl
V2FzU3VwZXIsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LAotICAgICAgICAgICAgICAgICAg
ICBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpLCBjYWxsT3JBcHBseURlcHRo
U2NvcGUgPyBjYWxsT3JBcHBseURlcHRoU2NvcGUtPmRpc3RhbmNlVG9Jbm5lcm1vc3RDaGlsZCgp
IDogMCk7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5vbkxI
U0NvdW50OworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBET1Q6IHsKLSAgICAgICAgICAgIG1fcGFy
c2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwotICAgICAgICAgICAgSlNUZXh0
UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7Ci0gICAgICAg
ICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3JkcyB8
IFRyZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7Ci0gICAgICAgICAgICBtYXRjaE9yRmFp
bChJREVOVCwgIkV4cGVjdGVkIGEgcHJvcGVydHkgbmFtZSBhZnRlciAnLiciKTsKLSAgICAgICAg
ICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZURvdEFjY2VzcyhzdGFydExvY2F0aW9uLCBiYXNlLCBt
X3Rva2VuLm1fZGF0YS5pZGVudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tl
bkVuZFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1cGVyICYm
IGN1cnJlbnRTY29wZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkpCi0gICAgICAgICAgICAgICAgY3Vy
cmVudEZ1bmN0aW9uU2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVy
dHkoKTsKLSAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQkFDS1FVT1RFOiB7Ci0gICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRy
dWUoYmFzZUlzU3VwZXIsICJDYW5ub3QgdXNlIHN1cGVyIGFzIHRhZyBmb3IgdGFnZ2VkIHRlbXBs
YXRlcyIpOwotICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RU
b2tlbkVuZFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNl
clN0YXRlLm5vbkxIU0NvdW50OwotICAgICAgICAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OlRl
bXBsYXRlTGl0ZXJhbCB0ZW1wbGF0ZUxpdGVyYWwgPSBwYXJzZVRlbXBsYXRlTGl0ZXJhbChjb250
ZXh0LCBMZXhlclR5cGU6OlJhd1N0cmluZ3NCdWlsZE1vZGU6OkJ1aWxkUmF3U3RyaW5ncyk7Ci0g
ICAgICAgICAgICBmYWlsSWZGYWxzZSh0ZW1wbGF0ZUxpdGVyYWwsICJDYW5ub3QgcGFyc2UgdGVt
cGxhdGUgbGl0ZXJhbCIpOwotICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlVGFnZ2Vk
VGVtcGxhdGUoc3RhcnRMb2NhdGlvbiwgYmFzZSwgdGVtcGxhdGVMaXRlcmFsLCBleHByZXNzaW9u
U3RhcnQsIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAgICAg
ICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OwotICAgICAgICAgICAg
bV9zZWVuVGFnZ2VkVGVtcGxhdGUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGdvdG8gZW5kTWVtYmVyRXhwcmVzc2lv
bjsKKyAgICAgICAgICAgIGNhc2UgRE9UOiB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0
ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CisgICAgICAgICAgICAgICAgSlNUZXh0UG9z
aXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CisgICAgICAgICAg
ICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXJGbGFnc0lnbm9yZVJlc2VydmVkV29yZHMg
fCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkS2V5d29yZHMpOworICAgICAgICAgICAgICAgIG1hdGNo
T3JGYWlsKElERU5ULCAiRXhwZWN0ZWQgYSBwcm9wZXJ0eSBuYW1lIGFmdGVyICIsIG9wdGlvbmFs
Q2hhaW5CYXNlID8gIic/LiciIDogIicuJyIpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250
ZXh0LmNyZWF0ZURvdEFjY2VzcyhzdGFydExvY2F0aW9uLCBiYXNlLCBtX3Rva2VuLm1fZGF0YS5p
ZGVudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9uKCkp
OworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShiYXNlSXNTdXBlciAmJiBjdXJyZW50U2Nv
cGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50RnVu
Y3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJQcm9wZXJ0eSgpOwor
ICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNhc2UgQkFDS1FVT1RFOiB7CisgICAgICAgICAgICAgICAgc2Vt
YW50aWNGYWlsSWZUcnVlKG9wdGlvbmFsQ2hhaW5CYXNlLCAiQ2Fubm90IHVzZSB0YWdnZWQgdGVt
cGxhdGVzIGluIGFuIG9wdGlvbmFsIGNoYWluIik7CisgICAgICAgICAgICAgICAgc2VtYW50aWNG
YWlsSWZUcnVlKGJhc2VJc1N1cGVyLCAiQ2Fubm90IHVzZSBzdXBlciBhcyB0YWcgZm9yIHRhZ2dl
ZCB0ZW1wbGF0ZXMiKTsKKyAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9u
RW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBpbnQgbm9uTEhT
Q291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIHR5cGVu
YW1lIFRyZWVCdWlsZGVyOjpUZW1wbGF0ZUxpdGVyYWwgdGVtcGxhdGVMaXRlcmFsID0gcGFyc2VU
ZW1wbGF0ZUxpdGVyYWwoY29udGV4dCwgTGV4ZXJUeXBlOjpSYXdTdHJpbmdzQnVpbGRNb2RlOjpC
dWlsZFJhd1N0cmluZ3MpOworICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHRlbXBsYXRlTGl0
ZXJhbCwgIkNhbm5vdCBwYXJzZSB0ZW1wbGF0ZSBsaXRlcmFsIik7CisgICAgICAgICAgICAgICAg
YmFzZSA9IGNvbnRleHQuY3JlYXRlVGFnZ2VkVGVtcGxhdGUoc3RhcnRMb2NhdGlvbiwgYmFzZSwg
dGVtcGxhdGVMaXRlcmFsLCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tl
bkVuZFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291
bnQgPSBub25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBtX3NlZW5UYWdnZWRUZW1wbGF0ZSA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGdvdG8gZW5kT2ZDaGFpbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHByZXZpb3VzQmFzZVdhc1N1cGVyID0gYmFzZUlzU3VwZXI7CisgICAg
ICAgICAgICBiYXNlSXNTdXBlciA9IGZhbHNlOworICAgICAgICAgICAgdHlwZSA9IG1fdG9rZW4u
bV90eXBlOwogICAgICAgICB9Ci0gICAgICAgIHByZXZpb3VzQmFzZVdhc1N1cGVyID0gYmFzZUlz
U3VwZXI7Ci0gICAgICAgIGJhc2VJc1N1cGVyID0gZmFsc2U7Ci0gICAgfQotZW5kTWVtYmVyRXhw
cmVzc2lvbjoKK2VuZE9mQ2hhaW46CisgICAgICAgIGlmIChvcHRpb25hbENoYWluQmFzZSkKKyAg
ICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU9wdGlvbmFsQ2hhaW4ob3B0aW9uYWxDaGFp
bkxvY2F0aW9uLCBvcHRpb25hbENoYWluQmFzZSwgYmFzZSk7CisgICAgfSB3aGlsZSAobWF0Y2go
UVVFU1RJT05ET1QpKTsKKwogICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNlSXNTdXBlciwgInN1
cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKICAgICB3aGlsZSAobmV3Q291bnQt
LSkKICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwg
ZXhwcmVzc2lvblN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCmluZGV4IDE1Y2E1ZWFmMjhlNzU5MmY0M2Yz
ZGNlNDFlOGU0MWU2MWE5ZTgxMzYuLjcyMDY0YjkyODQ4MTY2ZjZkZTJiMjNmOGEzZjU4Yzk4MWI3
Njc5ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9r
ZW5zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaApA
QCAtMTM2LDYgKzEzNiw3IEBAIGVudW0gSlNUb2tlblR5cGUgewogICAgIE9SRVFVQUwsCiAgICAg
RE9URE9URE9ULAogICAgIEFSUk9XRlVOQ1RJT04sCisgICAgUVVFU1RJT05ET1QsCiAgICAgTGFz
dFVudGFnZ2VkVG9rZW4sCiAKICAgICAvLyBCZWdpbiB0YWdnZWQgdG9rZW5zCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCmluZGV4IDQxOTk1OGJlZGI0Mjgx
MWIxNjI4NDAxY2Q0YTQyOThhNWE1Y2YzNzYuLmM3YjAyZjgwNGQ2Yzg2ZGVlNmE2YWE5N2QwMDg2
NThjODk1ZTMzMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3lu
dGF4Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hl
Y2tlci5oCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgUmVzb2x2ZUV2YWxFeHBy
LCBSZXNvbHZlRXhwciwgSW50ZWdlckV4cHIsIERvdWJsZUV4cHIsIFN0cmluZ0V4cHIsIEJpZ0lu
dEV4cHIsCiAgICAgICAgIFRoaXNFeHByLCBOdWxsRXhwciwgQm9vbEV4cHIsIFJlZ0V4cEV4cHIs
IE9iamVjdExpdGVyYWxFeHByLAogICAgICAgICBGdW5jdGlvbkV4cHIsIENsYXNzRXhwciwgU3Vw
ZXJFeHByLCBJbXBvcnRFeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwgQ2FsbEV4cHIsCi0gICAg
ICAgIE5ld0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4cHIsCisg
ICAgICAgIE5ld0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4cHIs
IE9wdGlvbmFsQ2hhaW4sCiAgICAgICAgIENvbmRpdGlvbmFsRXhwciwgQXNzaWdubWVudEV4cHIs
IFR5cGVvZkV4cHIsCiAgICAgICAgIERlbGV0ZUV4cHIsIEFycmF5TGl0ZXJhbEV4cHIsIEJpbmRp
bmdEZXN0cnVjdHVyaW5nLCBSZXN0UGFyYW1ldGVyLAogICAgICAgICBBcnJheURlc3RydWN0dXJp
bmcsIE9iamVjdERlc3RydWN0dXJpbmcsIFNvdXJjZUVsZW1lbnRzUmVzdWx0LApAQCAtMTg0LDYg
KzE4NCw3IEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVSZWdFeHAoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYgcGF0dGVybiwgY29uc3QgSWRlbnRp
ZmllciYgZmxhZ3MsIGludCkgeyByZXR1cm4gWWFycjo6aGFzRXJyb3IoWWFycjo6Y2hlY2tTeW50
YXgocGF0dGVybi5zdHJpbmcoKSwgZmxhZ3Muc3RyaW5nKCkpKSA/IDAgOiBSZWdFeHBFeHByOyB9
CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uVHlwZSwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBOZXdFeHByOyB9
CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uVHlwZSwgaW50LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0KKyAgICBFeHBy
ZXNzaW9uVHlwZSBjcmVhdGVPcHRpb25hbENoYWluKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4
cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gT3B0aW9uYWxDaGFpbjsgfQog
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcihjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlKSB7
IHJldHVybiBDb25kaXRpb25hbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVBc3Np
Z25SZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHBy
ZXNzaW9uVHlwZSwgaW50LCBpbnQsIGludCwgQXNzaWdubWVudENvbnRleHQpIHsgcmV0dXJuIEFz
c2lnbm1lbnRFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlRW1wdHlWYXJFeHByZXNz
aW9uKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImKSB7IHJldHVybiBB
c3NpZ25tZW50RXhwcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmlu
ZGV4IGY1ZmUwODg1ZDdmZDBjNDg5NWJmYmIyYzdjM2U5MjcxYjBhZjFmNmQuLmZhMWNiMDIyMjE1
MDllMjI3MWU3OWJhNWFlNzBhNjQ2ZDdhMDJkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgKQEAgLTQ5NCw3ICs0OTQsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVX
ZWJBc3NlbWJseVN0cmVhbWluZ0FwaSA9IGZhbHNlOwogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1i
bHlSZWZlcmVuY2VzLCBmYWxzZSwgTm9ybWFsLCAiQWxsb3cgdHlwZXMgZnJvbSB0aGUgd2FzbSBy
ZWZlcmVuY2VzIHNwZWMuIikgXAogICAgIHYoYm9vbCwgdXNlV2Vha1JlZnMsIGZhbHNlLCBOb3Jt
YWwsICJFeHBvc2UgdGhlIFdlYWtSZWYgY29uc3RydWN0b3IuIikgXAogICAgIHYoYm9vbCwgdXNl
QmlnSW50LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBlbmFibGUgQmlnSW50IHN1
cHBvcnQuIikgXAotICAgIHYoYm9vbCwgdXNlTnVsbGlzaENvYWxlc2NpbmcsIGZhbHNlLCBOb3Jt
YWwsICJFbmFibGUgc3VwcG9ydCBmb3IgdGhlID8/IG9wZXJhdG9yLiIpIFwKKyAgICB2KGJvb2ws
IHVzZU51bGxpc2hBd2FyZU9wZXJhdG9ycywgZmFsc2UsIE5vcm1hbCwgIkVuYWJsZSBzdXBwb3J0
IGZvciA/LiBhbmQgPz8gb3BlcmF0b3JzLiIpIFwKICAgICB2KGJvb2wsIHVzZUFycmF5QWxsb2Nh
dGlvblByb2ZpbGluZywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ugb3VyIG5v
cm1hbCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGluZy4gSWYgZmFsc2UsIHRoZSBhbGxvY2F0aW9u
IHByb2ZpbGUgd2lsbCBhbHdheXMgY2xhaW0gdG8gYmUgdW5kZWNpZGVkLiIpIFwKICAgICB2KGJv
b2wsIGZvcmNlUG9seVByb3RvLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgY3JlYXRlX3RoaXMg
d2lsbCBhbHdheXMgY3JlYXRlIGFuIG9iamVjdCB3aXRoIGEgcG9seSBwcm90byBzdHJ1Y3R1cmUu
IikgXAogICAgIHYoYm9vbCwgZm9yY2VNaW5pVk1Nb2RlLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1
ZSwgaXQgd2lsbCBmb3JjZSBtaW5pIFZNIG1vZGUgb24uIikgXApkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGY2OGRlN2E4NTI1MDRkNmY0YmVkNGRm
YzhhMTIxYzdiYTQ2MjM4MDEuLjA5ZjNlYWJkYjUxMTA4NjljYWU1MWU4ZTE5ZTkzMmEyZjEyNmJk
ODQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMiBAQAorMjAxOS0wNy0yNyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdA
c29ueS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlw
dHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMDctMjUgIFpoaWZlaSBGYW5nICA8emhp
ZmVpX2ZhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFtUaW1lbGluZV06IE1ha2UgdGltZWxpbmUg
aGVhZGVyIHdpZHRoIGF1dG9tYXRpYywgaW5zdGVhZCBvZiBmaXhlZCB3aWR0aApkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggODNkYzA2MmFiMjgyMTE2MWE5MzFjMmFiZTQzZGY1ZjY2
OWE4OGRhOS4uMDk4NzIzNTM2MGQyNDQ0ZDE3YmJlOWMzYThiZWFlMWJjOTFlOTk0ZSAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3Jp
cHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC02OTksOCArNjk5LDggQEAgZGVmIHJ1bkJpZ0lu
dEVuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICBydW4oImJpZy1pbnQt
ZW5hYmxlZCIsICItLXVzZUJpZ0ludD10cnVlIiAsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKLWRlZiBydW5OdWxsaXNoQ29hbGVzY2luZ0VuYWJs
ZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oIm51bGxpc2gtY29hbGVz
Y2luZy1lbmFibGVkIiwgIi0tdXNlTnVsbGlzaENvYWxlc2Npbmc9dHJ1ZSIgLCAqKEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKK2RlZiBydW5OdWxsaXNoQXdhcmVP
cGVyYXRvcnNFbmFibGVkKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCisgICAgcnVuKCJu
dWxsaXNoLWF3YXJlLW9wZXJhdG9ycy1lbmFibGVkIiwgIi0tdXNlTnVsbGlzaEF3YXJlT3BlcmF0
b3JzPXRydWUiICwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
CiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAw
NGQwMTFhZDgxYjJiOWFlOTU0MGI3YzMwMTE2NjcxYWNkMzJiZGFjLi4wMTcwYjZhM2QzM2IwOGIz
ZmE2NzgzZjZiNmFhYzE3YzZmMTEyYWY2IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZwor
KysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTA3LTI3ICBSb3Nz
IEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAgICBbRVNOZXh0XSBJ
bXBsZW1lbnQgb3B0aW9uYWwgY2hhaW5pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMDE5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qczoKKyAgICAg
ICAgKiBzdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxk
QmUpOgorICAgICAgICAoc2hvdWxkVGhyb3dTeW50YXhFcnJvcik6CisgICAgICAgIChzaG91bGRU
aHJvd1R5cGVFcnJvcik6CisgICAgICAgIChjb25zdC5vMS56KToKKwogMjAxOS0wNy0yNSAgUm9z
cyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgTGVnYWN5IG51
bWVyaWMgbGl0ZXJhbHMgc2hvdWxkIG5vdCBwZXJtaXQgc2VwYXJhdG9ycyBvciBCaWdJbnQKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qcyBiL0pTVGVzdHMv
c3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qcwppbmRleCA1OTU4ZjEyNzNhYjE2NDcxMzBhNmVk
NmUxYjg2ZTVlMWY0NGE3YzRlLi5hNTI3MmVkNTQ1YWNmMDZjNThkZmQ5ODc1ZTA1Yzc1ZjdiMDRi
MDUxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanMKKysr
IGIvSlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzCkBAIC0xLDQgKzEsNCBAQAot
Ly9AIHJ1bk51bGxpc2hDb2FsZXNjaW5nRW5hYmxlZAorLy9AIHJ1bk51bGxpc2hBd2FyZU9wZXJh
dG9yc0VuYWJsZWQKIAogZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgewogICAg
IGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvb3B0
aW9uYWwtY2hhaW5pbmcuanMgYi9KU1Rlc3RzL3N0cmVzcy9vcHRpb25hbC1jaGFpbmluZy5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42M2I4MDI3YjBlYzM4ZDkzNGIxZDE0YjU1MTYzODdhZGRkMGIxMGVhCi0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcuanMKQEAgLTAs
MCArMSwxMjEgQEAKKy8vQCBydW5OdWxsaXNoQXdhcmVPcGVyYXRvcnNFbmFibGVkCisKK2Z1bmN0
aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBl
Y3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQg
Z290ICR7YWN0dWFsfWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvd1N5bnRheEVycm9yKHNj
cmlwdCkgeworICAgIGxldCBlcnJvcjsKKyAgICB0cnkgeworICAgICAgICBldmFsKHNjcmlwdCk7
CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorCisgICAgaWYg
KCEoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cignRXhwZWN0ZWQgU3ludGF4RXJyb3IhJyk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93VHlw
ZUVycm9yKGZ1bmMpIHsKKyAgICBsZXQgZXJyb3I7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygp
OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKworICAgIGlm
ICghKGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdFeHBlY3RlZCBUeXBlRXJyb3IhJyk7Cit9CisKK3Nob3VsZEJlKHVuZGVmaW5lZD8udmFsdWVP
ZigpLCB1bmRlZmluZWQpOworc2hvdWxkQmUobnVsbD8udmFsdWVPZigpLCB1bmRlZmluZWQpOwor
c2hvdWxkQmUodHJ1ZT8udmFsdWVPZigpLCB0cnVlKTsKK3Nob3VsZEJlKGZhbHNlPy52YWx1ZU9m
KCksIGZhbHNlKTsKK3Nob3VsZEJlKDA/LnZhbHVlT2YoKSwgMCk7CitzaG91bGRCZSgxPy52YWx1
ZU9mKCksIDEpOworc2hvdWxkQmUoJyc/LnZhbHVlT2YoKSwgJycpOworc2hvdWxkQmUoJ2hpJz8u
dmFsdWVPZigpLCAnaGknKTsKK3Nob3VsZEJlKCh7fSk/LmNvbnN0cnVjdG9yLCBPYmplY3QpOwor
c2hvdWxkQmUoKHsgeDogJ2hpJyB9KT8ueCwgJ2hpJyk7CitzaG91bGRCZShbXT8ubGVuZ3RoLCAw
KTsKK3Nob3VsZEJlKFsnaGknXT8ubGVuZ3RoLCAxKTsKKworc2hvdWxkQmUodW5kZWZpbmVkPy5b
J3ZhbHVlT2YnXSgpLCB1bmRlZmluZWQpOworc2hvdWxkQmUobnVsbD8uWyd2YWx1ZU9mJ10oKSwg
dW5kZWZpbmVkKTsKK3Nob3VsZEJlKHRydWU/LlsndmFsdWVPZiddKCksIHRydWUpOworc2hvdWxk
QmUoZmFsc2U/LlsndmFsdWVPZiddKCksIGZhbHNlKTsKK3Nob3VsZEJlKDA/LlsndmFsdWVPZidd
KCksIDApOworc2hvdWxkQmUoMT8uWyd2YWx1ZU9mJ10oKSwgMSk7CitzaG91bGRCZSgnJz8uWyd2
YWx1ZU9mJ10oKSwgJycpOworc2hvdWxkQmUoJ2hpJz8uWyd2YWx1ZU9mJ10oKSwgJ2hpJyk7Citz
aG91bGRCZSgoe30pPy5bJ2NvbnN0cnVjdG9yJ10sIE9iamVjdCk7CitzaG91bGRCZSgoeyB4OiAn
aGknIH0pPy5bJ3gnXSwgJ2hpJyk7CitzaG91bGRCZShbXT8uWydsZW5ndGgnXSwgMCk7CitzaG91
bGRCZShbJ2hpJ10/LlswXSwgJ2hpJyk7CisKK3Nob3VsZEJlKHVuZGVmaW5lZD8uKCksIHVuZGVm
aW5lZCk7CitzaG91bGRCZShudWxsPy4oKSwgdW5kZWZpbmVkKTsKK3Nob3VsZFRocm93VHlwZUVy
cm9yKCgpID0+IHRydWU/LigpKTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+IGZhbHNlPy4o
KSk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAwPy4oKSk7CitzaG91bGRUaHJvd1R5cGVF
cnJvcigoKSA9PiAxPy4oKSk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAnJz8uKCkpOwor
c2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gJ2hpJz8uKCkpOworc2hvdWxkVGhyb3dUeXBlRXJy
b3IoKCkgPT4gKHt9KT8uKCkpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHsgeDogJ2hp
JyB9KT8uKCkpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gW10/LigpKTsKK3Nob3VsZFRo
cm93VHlwZUVycm9yKCgpID0+IFsnaGknXT8uKCkpOworCitzaG91bGRUaHJvd1R5cGVFcnJvcigo
KSA9PiAoe30pPy5hWydiJ10pOworc2hvdWxkQmUoKHt9KT8uYT8uWydiJ10sIHVuZGVmaW5lZCk7
CitzaG91bGRCZShudWxsPy5hWydiJ10oKS5jLCB1bmRlZmluZWQpOworc2hvdWxkVGhyb3dUeXBl
RXJyb3IoKCkgPT4gKHt9KT8uWydhJ10uYik7CitzaG91bGRCZSgoe30pPy5bJ2EnXT8uYiwgdW5k
ZWZpbmVkKTsKK3Nob3VsZEJlKG51bGw/LlsnYSddLmIoKVsnYyddLCB1bmRlZmluZWQpOworc2hv
dWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKCgpID0+IHt9KT8uKCkoKSk7CitzaG91bGRCZSgoKCkg
PT4ge30pPy4oKT8uKCksIHVuZGVmaW5lZCk7CitzaG91bGRCZShudWxsPy4oKSgpLmFbJ2InXSwg
dW5kZWZpbmVkKTsKKworc2hvdWxkQmUoZGVsZXRlIHVuZGVmaW5lZD8uZm9vLCB0cnVlKTsKK3No
b3VsZEJlKGRlbGV0ZSBudWxsPy5mb28sIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIHVuZGVmaW5l
ZD8uWydmb28nXSwgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgbnVsbD8uWydmb28nXSwgdHJ1ZSk7
CitzaG91bGRCZShkZWxldGUgdW5kZWZpbmVkPy4oKSwgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUg
bnVsbD8uKCksIHRydWUpOworCitjb25zdCBvMSA9IHsgeDogMCwgeTogMCwgeigpIHt9IH07Citz
aG91bGRCZShkZWxldGUgbzE/LngsIHRydWUpOworc2hvdWxkQmUobzEueCwgdW5kZWZpbmVkKTsK
K3Nob3VsZEJlKGRlbGV0ZSBvMT8ueCwgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgbzE/LlsneSdd
LCB0cnVlKTsKK3Nob3VsZEJlKG8xLnksIHVuZGVmaW5lZCk7CitzaG91bGRCZShkZWxldGUgbzE/
LlsneSddLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBvMS56Py4oKSwgdHJ1ZSk7CisKK2NvbnN0
IG1hc3F1ZXJhZGVyID0gbWFrZU1hc3F1ZXJhZGVyKCk7CittYXNxdWVyYWRlci5mb28gPSAzOwor
c2hvdWxkQmUobWFzcXVlcmFkZXI/LmZvbywgMyk7CitzaG91bGRCZShtYXNxdWVyYWRlcj8uWydm
b28nXSwgMyk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiBtYXNxdWVyYWRlcj8uKCkpOwor
CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjbGFzcyBDIHt9IGNsYXNzIEQgZXh0ZW5kcyBDIHsg
Zm9vKCkgeyByZXR1cm4gc3VwZXI/LmJhcjsgfSB9Jyk7CitzaG91bGRUaHJvd1N5bnRheEVycm9y
KCdjbGFzcyBDIHt9IGNsYXNzIEQgZXh0ZW5kcyBDIHsgZm9vKCkgeyByZXR1cm4gc3VwZXI/Llsi
YmFyIl07IH0gfScpOworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBjbGFzcyBE
IGV4dGVuZHMgQyB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcj8uKCk7IH0gfScpOworCitzaG91bGRU
aHJvd1N5bnRheEVycm9yKCdjb25zdCBvID0geyBDOiBjbGFzcyB7fSB9OyBuZXcgbz8uQygpOycp
CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjb25zdCBvID0geyBDOiBjbGFzcyB7fSB9OyBuZXcg
bz8uWyJDIl0oKTsnKQorc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBuZXcgQz8u
KCk7JykKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2Z1bmN0aW9uIGZvbygpIHsgbmV3Py50YXJn
ZXQ7IH0nKTsKKworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignZnVuY3Rpb24gdGFnKCkge30gdGFn
Py5gYDsnKTsKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NvbnN0IG8gPSB7IHRhZygpIHt9IH07
IG8/LnRhZ2BgOycpOworCisvLyBjb25zdCBvMiA9IHsgY291bnQ6IDAsIGdldCB4KCkgeyB0aGlz
LmNvdW50Kys7IHJldHVybiAoKSA9PiB7fTsgfSB9OworLy8gbzIueD8ueTsKKy8vIHNob3VsZEJl
KG8yLmNvdW50LCAxKTsKKy8vIG8yLng/LlsneSddOworLy8gc2hvdWxkQmUobzIuY291bnQsIDIp
OworLy8gbzIueD8uKCk7CisvLyBzaG91bGRCZShvMi5jb3VudCwgMyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375274</attachid>
            <date>2019-07-31 17:59:09 -0700</date>
            <delta_ts>2019-08-01 15:22:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200199-20190731175908.patch</filename>
            <type>text/plain</type>
            <size>61438</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4MDgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
ODRiNTYzMDNkNjJkZjQ0ZWY3YzQyOTNmMzM1ZGNhMjk3ZDNmZTEyLi4yNWYxYmQ1ZDllNDNkZjQ0
NmMzODEwMGJkMDQ2ZThhN2JhMTdhMWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MSBAQAorMjAxOS0wNy0zMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
dGhlIG9wdGlvbmFsIGNoYWluaW5nIHByb3Bvc2FsLCB3aGljaCBoYXMgbm93IHJlYWNoZWQgU3Rh
Z2UgMyBhdCBUQzM5LgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhID8uIG9wZXJhdG9yIHdo
aWNoOgorICAgICAgICAgLSBndWFyZHMgbWVtYmVyIGFjY2VzcyB3aGVuIHRoZSBMSFMgaXMgbnVs
bGlzaCwgaS5lLiBgbnVsbD8uZm9vYCBhbmQgYG51bGw/LlsnZm9vJ11gIGFyZSBgdW5kZWZpbmVk
YAorICAgICAgICAgLSBndWFyZHMgZnVuY3Rpb24gY2FsbHMgd2hlbiB0aGUgTEhTIGlzIG51bGxp
c2gsIGkuZS4gYG51bGw/LigpYCBpcyBgdW5kZWZpbmVkYAorICAgICAgICAgLSBzaG9ydC1jaXJj
dWl0cyBvdmVyIHRoZSBhY2Nlc3MvY2FsbCBjaGFpbiwgaS5lLiBgbnVsbD8uYVsnYiddKGMrKylg
IGlzIGB1bmRlZmluZWRgIGFuZCBkb2VzIG5vdCBpbmNyZW1lbnQgYGNgCisKKyAgICAgICAgVGhp
cyBmZWF0dXJlIGNhbiBiZSBuYWl2ZWx5IHZpZXdlZCBhcyBhIHRlcm5hcnkgaW4gZGlzZ3Vpc2Us
IGkuZS4gYGE/LmJgIGlzIGxpa2UgYGEgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGEuYmAuCisgICAg
ICAgIEhvd2V2ZXIsIHNpbmNlIHdlIG11c3QgYmUgc3VyZSBub3QgdG8gZG91YmxlLWV2YWx1YXRl
IHRoZSBMSFMsIGl0J3MgYWN0dWFsbHkgbW9yZSBha2luIHRvIGEgdHJ5IGJsb2NrIC0tCisgICAg
ICAgIG5hbWVseSwgd2UgaGF2ZSB0aGUgYnl0ZWNvZGUgZ2VuZXJhdG9yIGtlZXAgYSBzdGFjayBv
ZiBlYXJseS1vdXQgdGFyZ2V0IGxhYmVscyBmb3IgYWNjZXNzIGFuZCBjYWxsIG5vZGVzLgorCisg
ICAgICAgIChBbHNvIG5vdGUgdGhhdCBgZG9jdW1lbnQuYWxsYCBiZWhhdmVzIGFzIGFuIG9iamVj
dCwgc28gIm51bGxpc2giIG1lYW5zICpzdHJpY3RseSogZXF1YWwgdG8gbnVsbCBvciB1bmRlZmlu
ZWQuKQorCisgICAgICAgIEFzID8uIGFuZCA/PyBhcmUgYSBkb3VibGUgZmVhdHVyZSBvZiAibnVs
bGlzaC1hd2FyZSIgb3BlcmF0b3JzLCB0aGlzIGFsc28gdXBkYXRlcyB0aGUgZmVhdHVyZSBmbGFn
IGFjY29yZGluZ2x5LgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hPcHRpb25hbENoYWlu
RW5kTGFiZWwpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9w
dGlvbmFsQ2hhaW5FbmRMYWJlbCk6IEFkZGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2spOiBBZGRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgSW1wbGVtZW50IGxhYmVsIHN0YWNrIGFuZCBl
YXJseS1vdXQgZW1pdHRlci4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwOgorICAgICAgICAoSlNDOjpCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChK
U0M6OkV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25D
YWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxs
RG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RGVsZXRlQnJhY2tldE5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkNvYWxlc2NlTm9kZTo6ZW1pdEJ5dGVjb2RlKTogQ2xlYW51cC4K
KyAgICAgICAgKEpTQzo6T3B0aW9uYWxDaGFpbk5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkLgor
ICAgICAgICBJbXBsZW1lbnQgPy4gbm9kZSBhbmQgZW1pdCBjaGVja3Mgd2hlcmUgbmVlZGVkLgor
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICBIYXZlIE9wSXNVbmRl
ZmluZWRPck51bGwgc3VwcG9ydCBjb25zdGFudCByZWdpc3RlcnMuCisKKyAgICAgICAgKiBwYXJz
ZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVPcHRpb25h
bENoYWluKTogQWRkZWQuCisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAg
ICAgICAqIHBhcnNlci9MZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyPFQ+OjpsZXhXaXRo
b3V0Q2xlYXJpbmdMaW5lVGVybWluYXRvcik6CisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1
Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6T3B0aW9uYWxDaGFpbk5vZGU6Ok9wdGlvbmFsQ2hhaW5O
b2RlKTogQWRkZWQuCisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkV4
cHJlc3Npb25Ob2RlOjppc09wdGlvbmFsQ2hhaW4gY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6RXhwcmVzc2lvbk5vZGU6OmlzT3B0aW9uYWxDaGFpbkJhc2UgY29uc3QpOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6RXhwcmVzc2lvbk5vZGU6OnNldElzT3B0aW9uYWxDaGFpbkJhc2UpOiBBZGRl
ZC4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyVG9rZW5zLmg6CisgICAgICAgICogcGFyc2VyL1N5
bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFrZUZ1bmN0aW9u
Q2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVPcHRpb25hbENo
YWluKToKKyAgICAgICAgSW50cm9kdWNlIG5ldyB0b2tlbiBhbmQgQVNUIG5vZGUsIGFzIHdlbGwg
YXMgYW4gRXhwcmVzc2lvbk5vZGUgZmllbGQgdG8gbWFyayBMSFNlcyB3aXRoLgorCisgICAgICAg
ICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZU1lbWJlckV4cHJlc3Npb24pOgorICAgICAgICBQYXJzZSBvcHRpb25hbCBjaGFpbnMgYnkg
d3JhcHBpbmcgdGhlIGFjY2Vzcy9jYWxsIHBhcnNlIGxvb3AuCisKKyAgICAgICAgKiBydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkNhbGxCYXNlKToK
KyAgICAgICAgRW5zdXJlIHRoYXQgVHlwZUVycm9yIG1lc3NhZ2VzIGRvbid0IGluY2x1ZGUgdGhl
ICc/LicuCisKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgVXBkYXRlIGZl
YXR1cmUgZmxhZy4KKwogMjAxOS0wNy0zMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtKU0NdIEVtaXQgd3JpdGUgYmFycmllciBhZnRlciBzdG9yaW5nIGlu
c3RlYWQgb2YgYmVmb3JlIHN0b3JpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggNTE1YjU5ODNmNmEx
ZDU4MDVkMmZiNDgxZWNjMGE5N2NkNTk5ZDdiOS4uMjZhYzVhZTQyM2Y4ODI1NjQ5ZWM4ZjdkYTdl
MjRjZTYyMmFiYWRhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTQ5NTgsNiArNDk1OCwyOCBAQCB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElmKFJlZ2lzdGVySUQqIGNvbXBsZXRpb25U
eXBlUmVnaXN0ZXIsIENvbXBsZXRpbwogICAgIGVtaXRKdW1wSWZUcnVlKGVxdWl2YWxlbmNlUmVz
dWx0LCBqdW1wVGFyZ2V0KTsKIH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaE9wdGlv
bmFsQ2hhaW5FbmRMYWJlbChMYWJlbCYgbGFiZWwpCit7CisgICAgbV9vcHRpb25hbENoYWluRW5k
TGFiZWxTdGFjay5hcHBlbmQobGFiZWwpOworfQorCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpw
b3BPcHRpb25hbENoYWluRW5kTGFiZWwoKQoreworICAgIEFTU0VSVChtX29wdGlvbmFsQ2hhaW5F
bmRMYWJlbFN0YWNrLnNpemUoKSk7CisgICAgbV9vcHRpb25hbENoYWluRW5kTGFiZWxTdGFjay5y
ZW1vdmVMYXN0KCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRPcHRpb25hbENo
ZWNrKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjLCBib29sIGlzRGVsZXRlKQorewor
ICAgIFJlZjxMYWJlbD4gbm90TnVsbGlzaExhYmVsID0gbmV3TGFiZWwoKTsKKyAgICBlbWl0SnVt
cElmRmFsc2UoZW1pdElzVW5kZWZpbmVkT3JOdWxsKG5ld1RlbXBvcmFyeSgpLCBzcmMpLCBub3RO
dWxsaXNoTGFiZWwuZ2V0KCkpOworCisgICAgZW1pdExvYWQoZHN0LCBpc0RlbGV0ZSA/IGpzQm9v
bGVhbih0cnVlKSA6IGpzVW5kZWZpbmVkKCkpOworICAgIGVtaXRKdW1wKG1fb3B0aW9uYWxDaGFp
bkVuZExhYmVsU3RhY2subGFzdCgpLmdldCgpKTsKKworICAgIGVtaXRMYWJlbChub3ROdWxsaXNo
TGFiZWwuZ2V0KCkpOworfQorCiB2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWdu
ZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewogICAgIC8vIExleGljYWxseSBpbnZhbGlkYXRp
bmcgRm9ySW5Db250ZXh0cyBpcyBraW5kIG9mIHdlYWsgc2F1Y2UsIGJ1dCBpdCBvbmx5IG9jY3Vy
cyBpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCmluZGV4IGU5NzY4NmFhM2VkY2RkOGQzZjliNTdjNGE2ZDEyM2JhYzlj
YjM5ODcuLjQwNzRkNmM2NjU3Nzg0NDRkMjJjMGQxYjU2ZjdmZDNmMTQzZDhiOGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKQEAgLTk1OSw2ICs5NTksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
cHVzaEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKEZpbmFsbHlDb250ZXh0Jik7CiAgICAgICAgIHZv
aWQgcG9wRmluYWxseUNvbnRyb2xGbG93U2NvcGUoKTsKIAorICAgICAgICB2b2lkIHB1c2hPcHRp
b25hbENoYWluRW5kTGFiZWwoTGFiZWwmKTsKKyAgICAgICAgdm9pZCBwb3BPcHRpb25hbENoYWlu
RW5kTGFiZWwoKTsKKyAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIHNyYywgYm9vbCBpc0RlbGV0ZSA9IGZhbHNlKTsKKwogICAgICAgICB2
b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCwgUmVnaXN0ZXJJRCog
aW5kZXgpOwogICAgICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsKTsKICAgICAgICAgdm9pZCBwdXNoU3RydWN0dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5LCBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yKTsKQEAgLTEyNjYsNiArMTI3MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFuZ2VzOwogICAgICAgICBTZWdtZW50ZWRWZWN0
b3I8VHJ5RGF0YSwgOD4gbV90cnlEYXRhOwogCisgICAgICAgIFZlY3RvcjxSZWY8TGFiZWw+PiBt
X29wdGlvbmFsQ2hhaW5FbmRMYWJlbFN0YWNrOworCiAgICAgICAgIGludCBtX25leHRDb25zdGFu
dE9mZnNldCB7IDAgfTsKIAogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8RnVuY3Rpb25NZXRhZGF0
YU5vZGUqLCB1bnNpZ25lZD4gRnVuY3Rpb25PZmZzZXRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggN2NjMDc4YzNj
MDIxNWM5ZGY3OTBjODQ4YTMyZDEzYjgwOTBmMDhhMC4uZjkzMjA2OWEzNzEyYzNkZDIxNzhlZmRj
NjNlNzY2ZmQxNmQ3M2YwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtNzQ0LDEyICs3NDQsMTggQEAgUmVnaXN0ZXJJ
RCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2kKICAgICBSZWdpc3RlcklEKiByZXQ7CiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAKLSAgICBp
ZiAoaXNOb25JbmRleFN0cmluZ0VsZW1lbnQoKm1fc3Vic2NyaXB0KSkgewotICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworICAgIGJv
b2wgc3Vic2NyaXB0SXNOb25JbmRleFN0cmluZyA9IGlzTm9uSW5kZXhTdHJpbmdFbGVtZW50KCpt
X3N1YnNjcmlwdCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBzdWJzY3JpcHRJc05v
bkluZGV4U3RyaW5nCisgICAgICAgID8gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSkKKyAgICAg
ICAgOiBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3N1YnNjcmlw
dEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlwdC0+aXNQdXJlKGdlbmVyYXRvcikpOworCisgICAg
aWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1p
dE9wdGlvbmFsQ2hlY2soZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpKTsKKworICAgIGlmIChz
dWJzY3JpcHRJc05vbkluZGV4U3RyaW5nKSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgcmV0
ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZpbmFsRGVzdC5nZXQoKSwgYmFzZS5nZXQoKSwgc3Rh
dGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG1fc3Vic2NyaXB0KS0+dmFsdWUoKSk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGVG
b3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3N1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNj
cmlwdC0+aXNQdXJlKGdlbmVyYXRvcikpOwogICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9
IGdlbmVyYXRvci5lbWl0Tm9kZUZvclByb3BlcnR5KG1fc3Vic2NyaXB0KTsKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCkpOwogICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGZpbmFsRGVzdC5nZXQo
KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkpOwpAQCAtNzYzLDE3ICs3NjksMjYgQEAgUmVnaXN0ZXJJ
RCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2kKIAogUmVnaXN0ZXJJRCogRG90QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpOwogICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7Ci0g
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBiYXNlSXNTdXBlciA/IGVtaXRTdXBlckJhc2VG
b3JDYWxsZWUoZ2VuZXJhdG9yKSA6IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworCisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2U7CisgICAgaWYgKGJhc2VJc1N1cGVyKQorICAgICAgICBi
YXNlID0gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3IpOworICAgIGVsc2UgeworICAg
ICAgICBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisgICAgICAgIGlmIChtX2Jh
c2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0
aW9uYWxDaGVjayhmaW5hbERlc3QuZ2V0KCksIGJhc2UuZ2V0KCkpOworICAgIH0KKwogICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKLSAgICBSZWdpc3RlcklEKiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpOwogICAgIFJlZ2lzdGVySUQqIHJldDsKICAgICBpZiAoYmFzZUlzU3VwZXIpIHsK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNWYWx1ZSA9IGdlbmVyYXRvci5lbnN1cmVU
aGlzKCk7Ci0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJh
c2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQoKSwgbV9pZGVudCk7CisgICAgICAgIHJldCA9IGdlbmVy
YXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QuZ2V0KCksIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5n
ZXQoKSwgbV9pZGVudCk7CiAgICAgfSBlbHNlCi0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0
R2V0QnlJZChmaW5hbERlc3QsIGJhc2UuZ2V0KCksIG1faWRlbnQpOwotICAgIGdlbmVyYXRvci5l
bWl0UHJvZmlsZVR5cGUoZmluYWxEZXN0LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAg
ICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdl
dCgpLCBtX2lkZW50KTsKKyAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKGZpbmFsRGVzdC5n
ZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBA
IC04NDgsMjQgKzg2MywzMSBAQCBSZWdpc3RlcklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZwogICAgICAgICBnZW5l
cmF0b3IuZW1pdExvYWRUaGlzRnJvbUFycm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1lbnQoKTsK
IAogICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShnZW5lcmF0b3IucHJvcGVy
dHlOYW1lcygpLmV2YWwpOwotICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgp
KSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2Fs
LCBudWxscHRyKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3Iu
bW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKLSAgICAgICAgQ2Fs
bEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gbG9jYWwgPSB2YXIubG9jYWwoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuYzsKKyAgICBpZiAobG9jYWwpIHsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lm
TmVjZXNzYXJ5KHZhciwgbG9jYWwuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBmdW5jID0gZ2Vu
ZXJhdG9yLm1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQoKSk7
CisgICAgfSBlbHNlCisgICAgICAgIGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Cisg
ICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKworICAg
IGlmIChsb2NhbCkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhp
c1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpLCBm
dW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCksIERlYnVnZ2FibGVDYWxsOjpObyk7CisgICAgZWxzZSB7CisgICAgICAgIEpTVGV4dFBvc2l0
aW9uIG5ld0Rpdm90ID0gZGl2b3RTdGFydCgpICsgNDsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhuZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7CisgICAgICAg
IGdlbmVyYXRvci5tb3ZlKAorICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIo
KSwKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMu
dGhpc1JlZ2lzdGVyKCksIHZhcikpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29w
ZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZO
b3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIs
IGZ1bmMuZ2V0KCksIG51bGxwdHIpOwogICAgIH0KIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBm
dW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgIENhbGxBcmd1bWVudHMgY2FsbEFy
Z3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7Ci0gICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3Qg
PSBkaXZvdFN0YXJ0KCkgKyA0OwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3
RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOwotICAgIGdlbmVyYXRvci5tb3ZlKAotICAg
ICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLAotICAgICAgICBnZW5lcmF0b3IuZW1p
dFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKLSAgICBn
ZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RGb3VuZCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRURFpD
aGVja0lmTmVjZXNzYXJ5KHZhciwgZnVuYy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0Q2FsbEV2YWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5j
LmdldCgpKSwgZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQo
KSk7CisgICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRPcHRpb25hbENoZWNrKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpKTsKKyAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwg
Y2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dh
YmxlQ2FsbDo6Tm8pOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVu
Y3Rpb25DYWxsVmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTg5OSw4ICs5MjEsMTIgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmUKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiByZXQ7CiAgICAgfQorCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJu
VmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOworICAg
IGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9u
YWxDaGVjayhyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSk7CisKICAgICBDYWxsQXJndW1l
bnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0
TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5W
YWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRz
LCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMp
OwpAQCAtOTIwLDMwICs5NDYsMzQgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgIEV4cGVj
dGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiA9IGdlbmVyYXRvci5leHBlY3RlZEZ1bmN0aW9u
Rm9ySWRlbnRpZmllcihtX2lkZW50KTsKIAogICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52
YXJpYWJsZShtX2lkZW50KTsKLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwo
KSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBsb2Nh
bCwgbnVsbHB0cik7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9y
Lm1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7Ci0gICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCwgZnVuYy5nZXQoKSk7Ci0gICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhn
ZW5lcmF0b3IsIG1fYXJncyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0gdmFyLmxv
Y2FsKCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmM7CisgICAgaWYgKGxvY2FsKSB7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLmdldCgp
LCBudWxscHRyKTsKKyAgICAgICAgZnVuYyA9IGdlbmVyYXRvci5tb3ZlKGdlbmVyYXRvci50ZW1w
RGVzdGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBmdW5j
ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3Vt
ZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisKKyAgICBpZiAobG9jYWwpIHsKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVk
KCkpOwogICAgICAgICAvLyBUaGlzIHBhc3NlcyBOb0V4cGVjdGVkRnVuY3Rpb24gYmVjYXVzZSB3
ZSBleHBlY3QgdGhhdCBpZiB0aGUgZnVuY3Rpb24gaXMgaW4gYQogICAgICAgICAvLyBsb2NhbCB2
YXJpYWJsZSwgdGhlbiBpdCdzIG5vdCBvbmUgb2Ygb3VyIGJ1aWx0LWluIGNvbnN0cnVjdG9ycy4K
LSAgICAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRp
b24ocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2Fs
bEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxl
Q2FsbDo6WWVzKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1
ZS5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICAgICAgcmV0dXJuIHJldDsK
KyAgICAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IE5vRXhwZWN0ZWRGdW5jdGlvbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90U3RhcnQoKSArIG1f
aWRlbnQubGVuZ3RoKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3
RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOworICAgICAgICBnZW5lcmF0b3IubW92ZSgK
KyAgICAgICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCisgICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2
YXIpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2Fs
bEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxs
cHRyKTsKICAgICB9CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwotICAgIENhbGxBcmd1bWVu
dHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAgaWYgKGlzT3B0aW9uYWxD
aGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKHJldHVyblZh
bHVlLmdldCgpLCBmdW5jLmdldCgpKTsKIAotICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0g
ZGl2b3RTdGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKLSAgICBnZW5lcmF0
b3IubW92ZSgKLSAgICAgICAgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwg
dmFyKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOwotICAgIGdlbmVy
YXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGZ1bmMuZ2V0KCksIG51bGxwdHIpOwog
ICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbEluVGFpbFBvc2l0aW9uKHJl
dHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZ
ZXMpOwogICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgcmV0dXJuIHJldDsKQEAgLTEyNzUsNiArMTMw
NSw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNf
ZGVmaW5lRW51bWVyYWJsZVdyaXRhYmxlQ29uZmlnCiAKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0
dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgp
KTsKICAgICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOwogICAgIGJv
b2wgc3Vic2NyaXB0SXNOb25JbmRleFN0cmluZyA9IGlzTm9uSW5kZXhTdHJpbmdFbGVtZW50KCpt
X3N1YnNjcmlwdCk7CiAKQEAgLTEyODYsOSArMTMxOCwxMSBAQCBSZWdpc3RlcklEKiBGdW5jdGlv
bkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsCiAgICAgICAgICAgICBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFu
ZFNpZGUobV9iYXNlLCBtX3N1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlwdC0+aXNQ
dXJlKGdlbmVyYXRvcikpOworCisgICAgICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJh
c2UoKSkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhyZXR1cm5WYWx1
ZS5nZXQoKSwgYmFzZS5nZXQoKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1
bmN0aW9uOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlzUmVnaXN0ZXI7CiAgICAgaWYgKGJh
c2VJc1N1cGVyKSB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhp
cyBvbmNlIGJlY2F1c2Ugd2UgZWl0aGVyIGhhdmUgYSBub24tVERaIHRoaXMgb3Igd2UgdGhyb3cu
IE9uY2Ugd2UgaGF2ZSBhIG5vbi1URFogdGhpcywgd2UgY2FuJ3QgY2hhbmdlIGl0cyB2YWx1ZSBi
YWNrIHRvIFREWi4KQEAgLTEyOTcsMTkgKzEzMzEsMjAgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25D
YWxsQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LAogICAgIGlmIChzdWJzY3JpcHRJc05vbkluZGV4U3RyaW5nKSB7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25T
dGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCi0g
ICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgc3RhdGlj
X2Nhc3Q8U3RyaW5nTm9kZSo+KG1fc3Vic2NyaXB0KS0+dmFsdWUoKSk7CisgICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIGJhc2UuZ2V0KCksIHRoaXNSZWdp
c3Rlci5nZXQoKSwgc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG1fc3Vic2NyaXB0KS0+dmFsdWUo
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRH
ZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgc3RhdGlj
X2Nhc3Q8U3RyaW5nTm9kZSo+KG1fc3Vic2NyaXB0KS0+dmFsdWUoKSk7CisgICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIGJhc2UuZ2V0KCksIHN0YXRpY19j
YXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZv
clByb3BlcnR5KG1fc3Vic2NyaXB0KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJl
c3Npb25FbmQoKSk7CiAgICAgICAgIGlmIChiYXNlSXNTdXBlcikKLSAgICAgICAgICAgIGZ1bmN0
aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCksIGJhc2UuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOworICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChmdW5jdGlvbi5nZXQoKSwgYmFzZS5nZXQo
KSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZnVuY3Rpb24uZ2V0KCksIGJhc2UuZ2V0KCksIHBy
b3BlcnR5LmdldCgpKTsKICAgICB9CisgICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKHJldHVyblZhbHVlLmdldCgpLCBmdW5j
dGlvbi5nZXQoKSk7CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJn
dW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGlmIChiYXNlSXNT
dXBlcikgewogICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrKGdlbmVyYXRvci50aGlzUmVn
aXN0ZXIoKSk7CkBAIC0xMzMxLDE0ICsxMzY2LDIxIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
CiAgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKICAgICBpZiAo
YmFzZUlzU3VwZXIpCiAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGNhbGxBcmd1bWVudHMudGhpc1Jl
Z2lzdGVyKCksIGdlbmVyYXRvci5lbnN1cmVUaGlzKCkpOwotICAgIGVsc2UKKyAgICBlbHNlIHsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCks
IG1fYmFzZSk7CisgICAgICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAg
ICAgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhyZXR1cm5WYWx1ZS5nZXQoKSwg
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSk7CisgICAgfQogICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgp
LCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIGlmIChiYXNlSXNTdXBlcikgewogICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gc3VwZXJCYXNlID0gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5l
cmF0b3IpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIHN1
cGVyQmFzZS5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwg
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CisKKyAgICBpZiAoaXNPcHRp
b25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socmV0
dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpKTsKKwogICAgIFJlZ2lzdGVySUQqIHJldCA9
IGdlbmVyYXRvci5lbWl0Q2FsbEluVGFpbFBvc2l0aW9uKHJldHVyblZhbHVlLmdldCgpLCBmdW5j
dGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOwogICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7CiAgICAgcmV0dXJuIHJldDsKQEAgLTEzNDgsMTcgKzEzOTAsMjQgQEAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbWF4RGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5ID0gMjsK
IAogUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jh
c2UpOworCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBn
ZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCkp
OworCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3Qo
KSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7Ci0gICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZ1bmN0aW9uOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1
ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAKKyAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZnVuY3Rpb247CiAgICAgYXV0byBtYWtlRnVuY3Rpb24gPSBbJl0gewogICAgICAgICBp
ZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gdGhpc1ZhbHVlID0gZ2VuZXJhdG9yLmVuc3VyZVRoaXMoKTsKICAgICAgICAgICAgIGZ1bmN0
aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSwgYmFzZS5nZXQoKSwgdGhpc1ZhbHVlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygp
LmJ1aWx0aW5OYW1lcygpLmNhbGxQdWJsaWNOYW1lKCkpOwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWls
dGluTmFtZXMoKS5jYWxsUHVibGljTmFtZSgpKTsKKworICAgICAgICBpZiAoaXNPcHRpb25hbENo
YWluQmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKHJldHVy
blZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSk7CiAgICAgfTsKIAogICAgIGJvb2wgZW1pdENh
bGxDaGVjayA9ICFnZW5lcmF0b3IuaXNCdWlsdGluRnVuY3Rpb24oKTsKQEAgLTE0MzAsMTUgKzE0
NzksMjIgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwKICAgICAvLyBmdW5jdGlvbi5hcHBseSh0
aGlzQXJnLCBbYXJnMCwgYXJnMSwgLi4uXSkgLT4gY2FuIGJlIHRyaXZpYWxseSBjb2VyY2VkIGlu
dG8gZnVuY3Rpb24uY2FsbCh0aGlzQXJnLCBhcmcwLCBhcmcxLCAuLi4pIGFuZCBzYXZlcyBvYmpl
Y3QgYWxsb2NhdGlvbgogICAgIGJvb2wgbWF5QmVDYWxsID0gYXJlVHJpdmlhbEFwcGx5QXJndW1l
bnRzKG1fYXJncyk7CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb247Ci0gICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fYmFzZSk7CisKKyAgICBpZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAg
ICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhyZXR1cm5WYWx1ZS5nZXQoKSwgYmFzZS5n
ZXQoKSk7CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb247CiAgICAgYXV0byBtYWtl
RnVuY3Rpb24gPSBbJl0gewogICAgICAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKSB7CiAg
ICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1ZhbHVlID0gZ2VuZXJhdG9yLmVuc3Vy
ZVRoaXMoKTsKICAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgdGhpc1ZhbHVlLmdldCgp
LCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFwcGx5UHVibGljTmFt
ZSgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5l
bWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIGdl
bmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuYXBwbHlQdWJsaWNOYW1lKCkp
OworCisgICAgICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgp
KTsKICAgICB9OwogCiAgICAgYm9vbCBlbWl0Q2FsbENoZWNrID0gIWdlbmVyYXRvci5pc0J1aWx0
aW5GdW5jdGlvbigpOwpAQCAtMTY5MiwyNSArMTc0OCwzNyBAQCBSZWdpc3RlcklEKiBEZWxldGVS
ZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdAogCiBSZWdpc3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsK
LSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3Jp
cHQpOwogCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKSB7CisgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RlbGV0ZSA9IHRydWU7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0T3B0aW9uYWxDaGVjayhmaW5hbERlc3QuZ2V0KCksIHIwLmdldCgpLCBpc0RlbGV0ZSk7
CisgICAgfQorCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIxID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fc3Vic2NyaXB0KTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUo
KSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkNh
bm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dERlbGV0ZUJ5VmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCBy
MS5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlWYWwoZmluYWxEZXN0
LmdldCgpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gRGVsZXRlRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBSZWdpc3RlcklEKiBEZWxldGVEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogCisg
ICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKSB7CisgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RlbGV0ZSA9IHRydWU7CisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0
aW9uYWxDaGVjayhmaW5hbERlc3QuZ2V0KCksIHIwLmdldCgpLCBpc0RlbGV0ZSk7CisgICAgfQor
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpCiAgICAgICAgIHJl
dHVybiBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEg
c3VwZXIgcHJvcGVydHkiKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCBtX2lkZW50KTsKKyAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGZpbmFsRGVzdC5nZXQoKSwgcjAuZ2V0KCks
IG1faWRlbnQpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRl
VmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzQ2LDEz
ICsyNDE0LDI4IEBAIFJlZ2lzdGVySUQqIENvYWxlc2NlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqCiAgICAgUmVmPExhYmVsPiB0YXJn
ZXQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAogICAgIGdlbmVyYXRvci5lbWl0Tm9kZSh0ZW1w
LmdldCgpLCBtX2V4cHIxKTsKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGdlbmVyYXRv
ci5lbWl0VW5hcnlPcDxPcElzVW5kZWZpbmVkT3JOdWxsPihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0SnVtcElm
RmFsc2UoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZUluVGFpbFBvc2l0aW9uKHRlbXAuZ2V0KCksIG1fZXhwcjIpOwogICAgIGdlbmVyYXRvci5lbWl0
TGFiZWwodGFyZ2V0LmdldCgpKTsKIAogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZShkc3QsIHRl
bXAuZ2V0KCkpOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3B0aW9u
YWxDaGFpbk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBP
cHRpb25hbENoYWluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0
ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWY8TGFiZWw+IGVuZCA9
IGdlbmVyYXRvci5uZXdMYWJlbCgpOworCisgICAgZ2VuZXJhdG9yLnB1c2hPcHRpb25hbENoYWlu
RW5kTGFiZWwoZW5kLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZmluYWxEZXN0Lmdl
dCgpLCBtX2V4cHIpOworICAgIGdlbmVyYXRvci5wb3BPcHRpb25hbENoYWluRW5kTGFiZWwoKTsK
KyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7CisKKyAgICByZXR1cm4gZmluYWxE
ZXN0LmdldCgpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uZGl0
aW9uYWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBD
b25kaXRpb25hbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDM3ZWYyNzkxYzE1YjYzNzA4
MTk2Y2E5ZmM2OWIxZWM4ZTUwYTkxNTUuLjYyN2E4ODhiYzkzYmYyNzQ1N2VhN2NjMDU2Zjk3OTFi
YmJlY2ZmYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC04NzUsOCArODc1LDcgQEAgZXF1YWxOdWxs
Q29tcGFyaXNvbk9wKG9wX25lcV9udWxsLCBPcE5lcU51bGwsCiAKIGxsaW50T3BXaXRoUmV0dXJu
KG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsLCBPcElzVW5kZWZpbmVkT3JOdWxsLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQogICAgIGdldChtX29wZXJhbmQsIHQwKQotICAgIGFz
c2VydE5vdENvbnN0YW50KHNpemUsIHQwKQotICAgIGxvYWRpIFRhZ09mZnNldFtjZnIsIHQwLCA4
XSwgdDEKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlVGFnKHNpemUsIHQwLCB0MSkKICAgICBv
cmkgMSwgdDEKICAgICBjaWVxIHQxLCBOdWxsVGFnLCB0MQogICAgIHJldHVybihCb29sZWFuVGFn
LCB0MSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20KaW5kZXggZTFlZDcyZjBlYmMxNTFjMzI2ODFmMGEyZjBiNDA5YmQwNTcz
ZmE3Mi4uOTBkZWZiOTczZTdmNWRlODI3ZjQ5NmQ3MjhhMzI4YWNkMjYyMmYwYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20K
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KQEAgLTgyNyw4ICs4MjcsOCBAQCBlcXVhbE51bGxDb21wYXJpc29uT3Aob3BfbmVxX251bGws
IE9wTmVxTnVsbCwKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9pc191bmRlZmluZWRfb3JfbnVs
bCwgT3BJc1VuZGVmaW5lZE9yTnVsbCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVy
bikKLSAgICBnZXQobV9vcGVyYW5kLCB0MCkKLSAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQwCisg
ICAgZ2V0KG1fb3BlcmFuZCwgdDEpCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0
MSwgdDApCiAgICAgYW5kcSB+VGFnQml0VW5kZWZpbmVkLCB0MAogICAgIGNxZXEgdDAsIFZhbHVl
TnVsbCwgdDAKICAgICBvcnEgVmFsdWVGYWxzZSwgdDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9BU1RCdWlsZGVyLmgKaW5kZXggZGU1YjEzMzkwNjYxMTM0MTJhY2FlZWYyYmQ3NWUwMzFh
MzMzYTEwMC4uNDk3MzdkZjg4MmU5MDY2MmMwYTMzYzE0M2RjZDQwOTcyMGM0OTA2NyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAgLTEyOSw3ICsxMjksNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGludCAgRG9udEJ1aWxkU3RyaW5ncyA9IDA7CiAK
ICAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpbmFyeU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgaW50IHRva2VuLCBzdGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+LCBz
dGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+KTsKLSAgICBFeHByZXNzaW9u
Tm9kZSogbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVz
c2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05vZGUq
IGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNhbGxP
ckFwcGx5Q2hpbGREZXB0aCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHBy
ZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJvb2wg
aXNPcHRpb25hbENhbGwpOwogCiAgICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291cmNl
RWxlbWVudHMoKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEpTQzo6U291cmNlRWxlbWVu
dHMoKTsgfQogCkBAIC0zNjAsNiArMzYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5v
ZGU7CiAgICAgfQogCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9wdGlvbmFsQ2hhaW4oY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJl
c3Npb25Ob2RlKiBleHByKQorICAgIHsKKyAgICAgICAgYmFzZS0+c2V0SXNPcHRpb25hbENoYWlu
QmFzZSgpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBPcHRpb25hbENoYWlu
Tm9kZShsb2NhdGlvbiwgZXhwcik7CisgICAgfQorCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0
ZUNvbmRpdGlvbmFsRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogY29uZGl0aW9uLCBFeHByZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSog
cmhzKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ29uZGl0aW9u
YWxOb2RlKGxvY2F0aW9uLCBjb25kaXRpb24sIGxocywgcmhzKTsKQEAgLTExNDgsNiArMTE1NCwx
NSBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcgogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZURlbGV0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogeworICAgIGlmIChl
eHByLT5pc09wdGlvbmFsQ2hhaW4oKSkgeworICAgICAgICBPcHRpb25hbENoYWluTm9kZSogb3B0
aW9uYWxDaGFpbiA9IHN0YXRpY19jYXN0PE9wdGlvbmFsQ2hhaW5Ob2RlKj4oZXhwcik7CisgICAg
ICAgIGlmIChvcHRpb25hbENoYWluLT5leHByKCktPmlzTG9jYXRpb24oKSkgeworICAgICAgICAg
ICAgQVNTRVJUKCFvcHRpb25hbENoYWluLT5leHByKCktPmlzUmVzb2x2ZU5vZGUoKSk7CisgICAg
ICAgICAgICBvcHRpb25hbENoYWluLT5zZXRFeHByKG1ha2VEZWxldGVOb2RlKGxvY2F0aW9uLCBv
cHRpb25hbENoYWluLT5leHByKCksIHN0YXJ0LCBkaXZvdCwgZW5kKSk7CisgICAgICAgICAgICBy
ZXR1cm4gb3B0aW9uYWxDaGFpbjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghZXhwci0+
aXNMb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBEZWxldGVW
YWx1ZU5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgIGlmIChleHByLT5pc1Jlc29sdmVOb2RlKCkp
IHsKQEAgLTEzNDUsMTMgKzEzNjAsMTQgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VCaXRYT3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHIKICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCaXRYT3JOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhw
cjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50
c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90
IGNhbGxPckFwcGx5Q2hpbGREZXB0aCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtl
RnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VXYXNTdXBlciwgQXJndW1lbnRzTm9kZSog
YXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBzaXplX3QgY2FsbE9y
QXBwbHlDaGlsZERlcHRoLCBib29sIGlzT3B0aW9uYWxDYWxsKQogewogICAgIEFTU0VSVChkaXZv
dC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0KTsKICAgICBpZiAoZnVuYy0+aXNTdXBl
ck5vZGUoKSkKICAgICAgICAgdXNlc1N1cGVyQ2FsbCgpOwogCiAgICAgaWYgKGZ1bmMtPmlzQnl0
ZWNvZGVJbnRyaW5zaWNOb2RlKCkpIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpc09wdGlvbmFs
Q2FsbCwgIWlzT3B0aW9uYWxDYWxsKTsKICAgICAgICAgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKiBp
bnRyaW5zaWMgPSBzdGF0aWNfY2FzdDxCeXRlY29kZUludHJpbnNpY05vZGUqPihmdW5jKTsKICAg
ICAgICAgaWYgKGludHJpbnNpYy0+dHlwZSgpID09IEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6VHlw
ZTo6Q29uc3RhbnQpCiAgICAgICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCeXRl
Y29kZUludHJpbnNpY05vZGUoQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjpUeXBlOjpGdW5jdGlvbiwg
bG9jYXRpb24sIGludHJpbnNpYy0+ZW1pdHRlcigpLCBpbnRyaW5zaWMtPmlkZW50aWZpZXIoKSwg
YXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9MZXhlci5jcHAKaW5kZXggZTk4Y2RiNWU1OWUyMzA3MmMxOTAxOGY4N2QxMGMyZDQ1MmQ5
Y2QzOS4uZjFiZDYzNmQ2ZjQ2NDc3MTJkYjA0NGRmODEyZmZmZDZkYTE3NDJiZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKQEAgLTIxNTcsMTAgKzIxNTcsMTcgQEAgc3Rh
cnQ6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2hhcmFjdGVyUXVlc3Rpb246CiAgICAgICAg
IHNoaWZ0KCk7Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VOdWxsaXNoQ29hbGVzY2luZygpICYm
IG1fY3VycmVudCA9PSAnPycpIHsKLSAgICAgICAgICAgIHNoaWZ0KCk7Ci0gICAgICAgICAgICB0
b2tlbiA9IENPQUxFU0NFOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChPcHRpb25z
Ojp1c2VOdWxsaXNoQXdhcmVPcGVyYXRvcnMoKSkgeworICAgICAgICAgICAgaWYgKG1fY3VycmVu
dCA9PSAnPycpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIHRv
a2VuID0gQ09BTEVTQ0U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICcuJyAmJiAhaXNBU0NJSURpZ2l0KHBlZWsoMSkp
KSB7CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFFV
RVNUSU9ORE9UOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIHRva2VuID0gUVVFU1RJT047CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAppbmRleCBkNDFlM2Fl
ZDhlNDVmN2E4ZTJmZDMxYzI0NDc3ZGVjY2I4ZDU2NDBmLi4wNjhiMjZjODI4YTM2ZWI2ZWVlNWFk
MjRkNTQwNTExOTMxODhmYmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVDb25zdHJ1Y3RvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVDb25zdHJ1Y3RvcnMuaApAQCAtNjc2LDYgKzY3NiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB7CiAgICAgfQogCisgICAgaW5saW5lIE9wdGlvbmFsQ2hhaW5Ob2RlOjpPcHRpb25hbENo
YWluTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSog
ZXhwcikKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKKyAgICAgICAgLCBtX2V4
cHIoZXhwcikKKyAgICB7CisgICAgfQorCiAgICAgaW5saW5lIENvbmRpdGlvbmFsTm9kZTo6Q29u
ZGl0aW9uYWxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBsb2dpY2FsLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MikKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX2xvZ2lj
YWwobG9naWNhbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCA4NmZkYWYz
ZDA0ZmQwZDhmN2Y0ODdkMTc3Mzc3ZTJhMzdlOTVhNzg3Li4xMjVjNjM3NTMwMTMyMjBiNGI5Njky
YTEzMGQzYWUzOWQwMjQ1ZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBA
IC0yMDUsMTUgKzIwNSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29s
IGlzQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAg
ICAgdmlydHVhbCBib29sIGlzQmluYXJ5T3BOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICAgICAgdmlydHVhbCBib29sIGlzRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzT3B0aW9uYWxDaGFpbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZUluQ29uZGl0
aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsJiwgTGFiZWwmLCBGYWxsVGhyb3Vn
aE1vZGUpOwogCiAgICAgICAgIHZpcnR1YWwgRXhwcmVzc2lvbk5vZGUqIHN0cmlwVW5hcnlQbHVz
KCkgeyByZXR1cm4gdGhpczsgfQogCiAgICAgICAgIFJlc3VsdFR5cGUgcmVzdWx0RGVzY3JpcHRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0VHlwZTsgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBpc09wdGlvbmFsQ2hhaW5CYXNlKCkgY29uc3QgeyByZXR1cm4gbV9pc09wdGlvbmFsQ2hhaW5C
YXNlOyB9CisgICAgICAgIHZvaWQgc2V0SXNPcHRpb25hbENoYWluQmFzZSgpIHsgbV9pc09wdGlv
bmFsQ2hhaW5CYXNlID0gdHJ1ZTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVzdWx0VHlw
ZSBtX3Jlc3VsdFR5cGU7CisgICAgICAgIGJvb2wgbV9pc09wdGlvbmFsQ2hhaW5CYXNlIHsgZmFs
c2UgfTsKICAgICB9OwogCiAgICAgY2xhc3MgU3RhdGVtZW50Tm9kZSA6IHB1YmxpYyBOb2RlIHsK
QEAgLTEzMTYsNiArMTMyMSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRXhwcmVzc2lv
bk5vZGUqIG1fZXhwcjI7CiAgICAgfTsKIAorICAgIGNsYXNzIE9wdGlvbmFsQ2hhaW5Ob2RlIGZp
bmFsIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE9wdGlv
bmFsQ2hhaW5Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKik7CisK
KyAgICAgICAgdm9pZCBzZXRFeHByKEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IG1fZXhwciA9IGV4
cHI7IH0KKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGV4cHIoKSBjb25zdCB7IHJldHVybiBtX2V4
cHI7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CisKKyAgICAgICAg
Ym9vbCBpc09wdGlvbmFsQ2hhaW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisK
KyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjsKKyAgICB9OworCiAgICAgLy8gVGhlIHRl
cm5hcnkgb3BlcmF0b3IsICJtX2xvZ2ljYWwgPyBtX2V4cHIxIDogbV9leHByMiIKICAgICBjbGFz
cyBDb25kaXRpb25hbE5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1
YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBmOGRiZTcx
OTZmMTExNzE2ZDBhNThmN2Y1N2UzZjhmNjdiN2EyYWNmLi5lZmYwZjZkMjMxZWFlNjcyZGFmNTM1
OWQ5YjVkY2EzMTQyNzZmNzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
Y3BwCkBAIC00ODA4LDEwMyArNDgwOCwxMzYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXMKICAg
ICB9CiAKICAgICBmYWlsSWZGYWxzZShiYXNlLCAiQ2Fubm90IHBhcnNlIGJhc2UgZXhwcmVzc2lv
biIpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlv
bigpOwotICAgICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7Ci0gICAgICAgIGNhc2UgT1BF
TkJSQUNLRVQ6IHsKLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Np
b25Db3VudCsrOwotICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxh
c3RUb2tlbkVuZFBvc2l0aW9uKCk7CisKKyAgICBkbyB7CisgICAgICAgIFRyZWVFeHByZXNzaW9u
IG9wdGlvbmFsQ2hhaW5CYXNlID0gMDsKKyAgICAgICAgSlNUb2tlbkxvY2F0aW9uIG9wdGlvbmFs
Q2hhaW5Mb2NhdGlvbjsKKyAgICAgICAgSlNUb2tlblR5cGUgdHlwZSA9IG1fdG9rZW4ubV90eXBl
OworCisgICAgICAgIGlmIChtYXRjaChRVUVTVElPTkRPVCkpIHsKKyAgICAgICAgICAgIHNlbWFu
dGljRmFpbElmVHJ1ZShuZXdDb3VudCwgIkNhbm5vdCBjYWxsIGNvbnN0cnVjdG9yIGluIGFuIG9w
dGlvbmFsIGNoYWluIik7CisgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3Vw
ZXIsICJzdXBlciBpcyBub3QgdmFsaWQgaW4gdGhpcyBjb250ZXh0Iik7CisgICAgICAgICAgICBv
cHRpb25hbENoYWluQmFzZSA9IGJhc2U7CisgICAgICAgICAgICBvcHRpb25hbENoYWluTG9jYXRp
b24gPSB0b2tlbkxvY2F0aW9uKCk7CisKKyAgICAgICAgICAgIFNhdmVQb2ludCBzYXZlUG9pbnQg
PSBjcmVhdGVTYXZlUG9pbnQoKTsKICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgIGlu
dCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBp
bnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQ7Ci0g
ICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihjb250
ZXh0KTsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIHN1
YnNjcmlwdCBleHByZXNzaW9uIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVC
cmFja2V0QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHByb3BlcnR5LCBpbml0aWFsQXNzaWdu
bWVudHMgIT0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQsIGV4cHJlc3Npb25TdGFydCwg
ZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1cGVyICYmIGN1cnJlbnRTY29wZSgpLT5pc0Fycm93
RnVuY3Rpb24oKSkpCi0gICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uU2NvcGUoKS0+c2V0
SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIs
ICJzdWJzY3JpcHQgZXhwcmVzc2lvbiIpOwotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25M
SFNDb3VudCA9IG5vbkxIU0NvdW50OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBp
ZiAobWF0Y2goT1BFTkJSQUNLRVQpIHx8IG1hdGNoKE9QRU5QQVJFTikgfHwgbWF0Y2goQkFDS1FV
T1RFKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gbV90b2tlbi5tX3R5cGU7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0eXBlID0gRE9UOworICAgICAgICAgICAgICAgIHJl
c3RvcmVTYXZlUG9pbnQoc2F2ZVBvaW50KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBjYXNlIE9QRU5QQVJFTjogewotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2
aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3Bh
cnNlclN0YXRlLm5vbkxIU0NvdW50OwotICAgICAgICAgICAgaWYgKG5ld0NvdW50KSB7Ci0gICAg
ICAgICAgICAgICAgbmV3Q291bnQtLTsKLSAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBl
eHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgICAgICBU
cmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQpOwotICAgICAg
ICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3Vt
ZW50cyIpOwotICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9j
YXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBs
YXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgc2l6ZV90IHVzZWRWYXJpYWJsZXNTaXplID0gY3VycmVudFNjb3BlKCktPmN1cnJlbnRV
c2VkVmFyaWFibGVzU2l6ZSgpOworCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAg
ICBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICAgICAgY2FzZSBPUEVOQlJBQ0tFVDogeworICAgICAgICAgICAgICAgIG1fcGFy
c2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwogICAgICAgICAgICAgICAgIEpT
VGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwotICAg
ICAgICAgICAgICAgIE9wdGlvbmFsPENhbGxPckFwcGx5RGVwdGhTY29wZT4gY2FsbE9yQXBwbHlE
ZXB0aFNjb3BlOwotICAgICAgICAgICAgICAgIHJlY29yZENhbGxPckFwcGx5RGVwdGg8VHJlZUJ1
aWxkZXI+KHRoaXMsICptX3ZtLCBjYWxsT3JBcHBseURlcHRoU2NvcGUsIGJhc2UpOworICAgICAg
ICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3Bh
cnNlclN0YXRlLm5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIGludCBpbml0aWFsQXNzaWdu
bWVudHMgPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudDsKKyAgICAgICAgICAgICAgICBU
cmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAg
ICAgICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJzZSBzdWJzY3JpcHQg
ZXhwcmVzc2lvbiIpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNr
ZXRBY2Nlc3Moc3RhcnRMb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRpYWxBc3NpZ25tZW50
cyAhPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lvblN0YXJ0LCBleHBy
ZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwogCi0gICAgICAgICAgICAgICAgVHJlZUFy
Z3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIgJiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dG
dW5jdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uU2NvcGUoKS0+
c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKIAotICAgICAgICAgICAg
ICAgIGlmIChiYXNlSXNBc3luY0tleXdvcmQgJiYgKCFhcmd1bWVudHMgfHwgbWF0Y2goQVJST1dG
VU5DVElPTikpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT5yZXZlcnRU
b1ByZXZpb3VzVXNlZFZhcmlhYmxlcyh1c2VkVmFyaWFibGVzU2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvcmNlQ2xhc3NpZnlFeHByZXNzaW9uRXJyb3IoRXJyb3JJbmRpY2F0ZXNBc3luY0Fy
cm93RnVuY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBmYWlsRHVlVG9VbmV4cGVjdGVkVG9r
ZW4oKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFuZGxlUHJvZHVjdGlv
bk9yRmFpbChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIsICJzdWJzY3JpcHQgZXhwcmVzc2lvbiIp
OworICAgICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3Vu
dDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2UgT1BFTlBBUkVOOiB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFs
RXhwcmVzc2lvbkNvdW50Kys7CisgICAgICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9w
YXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBpZiAobmV3Q291bnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgbmV3Q291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgSlNU
ZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CisgICAg
ICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMo
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNh
bm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50cyIpOworICAgICAgICAgICAgICAgICAgICBiYXNlID0g
Y29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Np
b25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzZWRWYXJpYWJs
ZXNTaXplID0gY3VycmVudFNjb3BlKCktPmN1cnJlbnRVc2VkVmFyaWFibGVzU2l6ZSgpOworICAg
ICAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2Vu
RW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWw8Q2FsbE9yQXBwbHlE
ZXB0aFNjb3BlPiBjYWxsT3JBcHBseURlcHRoU2NvcGU7CisgICAgICAgICAgICAgICAgICAgIHJl
Y29yZENhbGxPckFwcGx5RGVwdGg8VHJlZUJ1aWxkZXI+KHRoaXMsICptX3ZtLCBjYWxsT3JBcHBs
eURlcHRoU2NvcGUsIGJhc2UpOworCisgICAgICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMg
YXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCk7CiAKLSAgICAgICAgICAgICAgICBm
YWlsSWZGYWxzZShhcmd1bWVudHMsICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1bWVudHMiKTsKLSAg
ICAgICAgICAgICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgU2Nv
cGVSZWYgZnVuY3Rpb25TY29wZSA9IGN1cnJlbnRGdW5jdGlvblNjb3BlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghZnVuY3Rpb25TY29wZS0+c2V0SGFzRGlyZWN0U3VwZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSXQgdW5uZWNlc3NhcnkgdG8gY2hlY2sgb2YgdXNpbmcg
c3VwZXIgZHVyaW5nIHJlcGFyc2luZyBvbmUgbW9yZSB0aW1lLiBBbHNvIGl0IGNhbiBsZWFkIHRv
IHN5bnRheCBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBhcnJv
dyBmdW5jdGlvbiBiZWNhdXNlIGR1cmluZyByZXBhcnNpbmcgd2UgZG9uJ3Qga25vdyB3aGV0aGVy
IHdlIGN1cnJlbnRseSBwYXJzZSB0aGUgYXJyb3cgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGluc2lkZSBvZiB0aGUgY29uc3RydWN0b3Igb3IgbWV0aG9kLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX2xleGVyLT5pc1JlcGFyc2luZ0Z1bmN0aW9uKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTY29wZVJlZiBjbG9zZXN0T3JkaW5hcnlGdW5jdGlv
blNjb3BlID0gY2xvc2VzdFBhcmVudE9yZGluYXJ5RnVuY3Rpb25Ob25MZXhpY2FsU2NvcGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvcktpbmQgZnVuY3Rpb25Db25z
dHJ1Y3RvcktpbmQgPSAhZnVuY3Rpb25TY29wZS0+aXNBcnJvd0Z1bmN0aW9uKCkgJiYgIWNsb3Nl
c3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmlzRXZhbENvbnRleHQoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9yS2luZCgpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29w
ZS0+Y29uc3RydWN0b3JLaW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50
aWNGYWlsSWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kID09IENvbnN0cnVjdG9yS2luZDo6
Tm9uZSwgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3Rvcktp
bmQgIT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRo
aXMgY29udGV4dCIpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZUlzQXN5bmNLZXl3b3Jk
ICYmICghYXJndW1lbnRzIHx8IG1hdGNoKEFSUk9XRlVOQ1RJT04pKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnJldmVydFRvUHJldmlvdXNVc2VkVmFyaWFibGVz
KHVzZWRWYXJpYWJsZXNTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlQ2xhc3Np
ZnlFeHByZXNzaW9uRXJyb3IoRXJyb3JJbmRpY2F0ZXNBc3luY0Fycm93RnVuY3Rpb24pOworICAg
ICAgICAgICAgICAgICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRva2VuKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShhcmd1bWVu
dHMsICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGJhc2VJc1N1cGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTY29wZVJlZiBmdW5j
dGlvblNjb3BlID0gY3VycmVudEZ1bmN0aW9uU2NvcGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghZnVuY3Rpb25TY29wZS0+c2V0SGFzRGlyZWN0U3VwZXIoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEl0IHVubmVjZXNzYXJ5IHRvIGNoZWNrIG9mIHVzaW5nIHN1
cGVyIGR1cmluZyByZXBhcnNpbmcgb25lIG1vcmUgdGltZS4gQWxzbyBpdCBjYW4gbGVhZCB0byBz
eW50YXggZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGFy
cm93IGZ1bmN0aW9uIGJlY2F1c2UgZHVyaW5nIHJlcGFyc2luZyB3ZSBkb24ndCBrbm93IHdoZXRo
ZXIgd2UgY3VycmVudGx5IHBhcnNlIHRoZSBhcnJvdyBmdW5jdGlvbgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGluc2lkZSBvZiB0aGUgY29uc3RydWN0b3Igb3IgbWV0aG9kLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9sZXhlci0+aXNSZXBhcnNpbmdGdW5jdGlv
bigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjb3BlUmVmIGNsb3Nlc3RP
cmRpbmFyeUZ1bmN0aW9uU2NvcGUgPSBjbG9zZXN0UGFyZW50T3JkaW5hcnlGdW5jdGlvbk5vbkxl
eGljYWxTY29wZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdHJ1Y3Rv
cktpbmQgZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPSAhZnVuY3Rpb25TY29wZS0+aXNBcnJvd0Z1
bmN0aW9uKCkgJiYgIWNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmlzRXZhbENvbnRleHQo
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmdW5jdGlvblNjb3BlLT5j
b25zdHJ1Y3RvcktpbmQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBj
bG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlLT5jb25zdHJ1Y3RvcktpbmQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGZ1bmN0aW9uQ29uc3Ry
dWN0b3JLaW5kID09IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgInN1cGVyIGlzIG5vdCB2YWxpZCBp
biB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50
aWNGYWlsSWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kICE9IENvbnN0cnVjdG9yS2luZDo6
RXh0ZW5kcywgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPnNldElubmVyQXJyb3dG
dW5jdGlvblVzZXNTdXBlckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNl
c1N1cGVyQ2FsbCgpOworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNPcHRpb25hbENhbGwg
PSBvcHRpb25hbENoYWluTG9jYXRpb24uZW5kT2Zmc2V0ID09IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihleHByZXNzaW9uRW5kLm9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBjb250
ZXh0Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHByZXZpb3VzQmFz
ZVdhc1N1cGVyLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGNhbGxPckFwcGx5
RGVwdGhTY29wZSA/IGNhbGxPckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFuY2VUb0lubmVybW9zdENo
aWxkKCkgOiAwLCBpc09wdGlvbmFsQ2FsbCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlz
T3B0aW9uYWxDYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxDaGFpbkJhc2Ug
PSBiYXNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4
dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShzdGFydExvY2F0aW9uLCBiYXNlLCBwcmV2aW91c0Jhc2VX
YXNTdXBlciwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQsCi0gICAgICAgICAgICAgICAgICAg
IGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGNhbGxPckFwcGx5RGVwdGhT
Y29wZSA/IGNhbGxPckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFuY2VUb0lubmVybW9zdENoaWxkKCkg
OiAwKTsKKyAgICAgICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhT
Q291bnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIERPVDogewotICAgICAgICAgICAgbV9wYXJz
ZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBKU1RleHRQ
b3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAg
ICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzIHwg
VHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKLSAgICAgICAgICAgIG1hdGNoT3JGYWls
KElERU5ULCAiRXhwZWN0ZWQgYSBwcm9wZXJ0eSBuYW1lIGFmdGVyICcuJyIpOwotICAgICAgICAg
ICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIG1f
dG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2Vu
RW5kUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIgJiYg
Y3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKLSAgICAgICAgICAgICAgICBjdXJy
ZW50RnVuY3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJQcm9wZXJ0
eSgpOwotICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBCQUNLUVVPVEU6IHsKLSAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1
ZShiYXNlSXNTdXBlciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGFnIGZvciB0YWdnZWQgdGVtcGxh
dGVzIik7Ci0gICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRv
a2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2Vy
U3RhdGUubm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6VGVt
cGxhdGVMaXRlcmFsIHRlbXBsYXRlTGl0ZXJhbCA9IHBhcnNlVGVtcGxhdGVMaXRlcmFsKGNvbnRl
eHQsIExleGVyVHlwZTo6UmF3U3RyaW5nc0J1aWxkTW9kZTo6QnVpbGRSYXdTdHJpbmdzKTsKLSAg
ICAgICAgICAgIGZhaWxJZkZhbHNlKHRlbXBsYXRlTGl0ZXJhbCwgIkNhbm5vdCBwYXJzZSB0ZW1w
bGF0ZSBsaXRlcmFsIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVUYWdnZWRU
ZW1wbGF0ZShzdGFydExvY2F0aW9uLCBiYXNlLCB0ZW1wbGF0ZUxpdGVyYWwsIGV4cHJlc3Npb25T
dGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7Ci0gICAgICAgICAg
ICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBt
X3NlZW5UYWdnZWRUZW1wbGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ290byBlbmRNZW1iZXJFeHByZXNzaW9u
OworICAgICAgICAgICAgY2FzZSBET1Q6IHsKKyAgICAgICAgICAgICAgICBtX3BhcnNlclN0YXRl
Lm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgICAgICAgICBKU1RleHRQb3Np
dGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAg
ICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3JkcyB8
IFRyZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CisgICAgICAgICAgICAgICAgbWF0Y2hP
ckZhaWwoSURFTlQsICJFeHBlY3RlZCBhIHByb3BlcnR5IG5hbWUgYWZ0ZXIgIiwgb3B0aW9uYWxD
aGFpbkJhc2UgPyAiJz8uJyIgOiAiJy4nIik7CisgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRl
eHQuY3JlYXRlRG90QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlk
ZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7
CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1cGVyICYmIGN1cnJlbnRTY29w
ZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5j
dGlvblNjb3BlKCktPnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNTdXBlclByb3BlcnR5KCk7Cisg
ICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBCQUNLUVVPVEU6IHsKKyAgICAgICAgICAgICAgICBzZW1h
bnRpY0ZhaWxJZlRydWUob3B0aW9uYWxDaGFpbkJhc2UsICJDYW5ub3QgdXNlIHRhZ2dlZCB0ZW1w
bGF0ZXMgaW4gYW4gb3B0aW9uYWwgY2hhaW4iKTsKKyAgICAgICAgICAgICAgICBzZW1hbnRpY0Zh
aWxJZlRydWUoYmFzZUlzU3VwZXIsICJDYW5ub3QgdXNlIHN1cGVyIGFzIHRhZyBmb3IgdGFnZ2Vk
IHRlbXBsYXRlcyIpOworICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25F
bmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIGludCBub25MSFND
b3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CisgICAgICAgICAgICAgICAgdHlwZW5h
bWUgVHJlZUJ1aWxkZXI6OlRlbXBsYXRlTGl0ZXJhbCB0ZW1wbGF0ZUxpdGVyYWwgPSBwYXJzZVRl
bXBsYXRlTGl0ZXJhbChjb250ZXh0LCBMZXhlclR5cGU6OlJhd1N0cmluZ3NCdWlsZE1vZGU6OkJ1
aWxkUmF3U3RyaW5ncyk7CisgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UodGVtcGxhdGVMaXRl
cmFsLCAiQ2Fubm90IHBhcnNlIHRlbXBsYXRlIGxpdGVyYWwiKTsKKyAgICAgICAgICAgICAgICBi
YXNlID0gY29udGV4dC5jcmVhdGVUYWdnZWRUZW1wbGF0ZShzdGFydExvY2F0aW9uLCBiYXNlLCB0
ZW1wbGF0ZUxpdGVyYWwsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2Vu
RW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3Vu
dCA9IG5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIG1fc2VlblRhZ2dlZFRlbXBsYXRlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZ290byBlbmRPZkNoYWluOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcHJldmlvdXNCYXNlV2FzU3VwZXIgPSBiYXNlSXNTdXBlcjsKKyAgICAg
ICAgICAgIGJhc2VJc1N1cGVyID0gZmFsc2U7CisgICAgICAgICAgICB0eXBlID0gbV90b2tlbi5t
X3R5cGU7CiAgICAgICAgIH0KLSAgICAgICAgcHJldmlvdXNCYXNlV2FzU3VwZXIgPSBiYXNlSXNT
dXBlcjsKLSAgICAgICAgYmFzZUlzU3VwZXIgPSBmYWxzZTsKLSAgICB9Ci1lbmRNZW1iZXJFeHBy
ZXNzaW9uOgorZW5kT2ZDaGFpbjoKKyAgICAgICAgaWYgKG9wdGlvbmFsQ2hhaW5CYXNlKQorICAg
ICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlT3B0aW9uYWxDaGFpbihvcHRpb25hbENoYWlu
TG9jYXRpb24sIG9wdGlvbmFsQ2hhaW5CYXNlLCBiYXNlKTsKKyAgICB9IHdoaWxlIChtYXRjaChR
VUVTVElPTkRPVCkpOworCiAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGJhc2VJc1N1cGVyLCAic3Vw
ZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOwogICAgIHdoaWxlIChuZXdDb3VudC0t
KQogICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBl
eHByZXNzaW9uU3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKaW5kZXggMTVjYTVlYWYyOGU3NTkyZjQzZjNk
Y2U0MWU4ZTQxZTYxYTllODEzNi4uNzIwNjRiOTI4NDgxNjZmNmRlMmIyM2Y4YTNmNThjOTgxYjc2
NzllOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tl
bnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCkBA
IC0xMzYsNiArMTM2LDcgQEAgZW51bSBKU1Rva2VuVHlwZSB7CiAgICAgT1JFUVVBTCwKICAgICBE
T1RET1RET1QsCiAgICAgQVJST1dGVU5DVElPTiwKKyAgICBRVUVTVElPTkRPVCwKICAgICBMYXN0
VW50YWdnZWRUb2tlbiwKIAogICAgIC8vIEJlZ2luIHRhZ2dlZCB0b2tlbnMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKaW5kZXggNDE5OTU4YmVkYjQyODEx
YjE2Mjg0MDFjZDRhNDI5OGE1YTVjZjM3Ni4uNjFkZDc1MDA0YmM0N2JmYTU0ZjM1ZWQ3MWRlMjJm
ZGU0N2NiMmQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50
YXhDaGVja2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVj
a2VyLmgKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgICAgICBSZXNvbHZlRXZhbEV4cHIs
IFJlc29sdmVFeHByLCBJbnRlZ2VyRXhwciwgRG91YmxlRXhwciwgU3RyaW5nRXhwciwgQmlnSW50
RXhwciwKICAgICAgICAgVGhpc0V4cHIsIE51bGxFeHByLCBCb29sRXhwciwgUmVnRXhwRXhwciwg
T2JqZWN0TGl0ZXJhbEV4cHIsCiAgICAgICAgIEZ1bmN0aW9uRXhwciwgQ2xhc3NFeHByLCBTdXBl
ckV4cHIsIEltcG9ydEV4cHIsIEJyYWNrZXRFeHByLCBEb3RFeHByLCBDYWxsRXhwciwKLSAgICAg
ICAgTmV3RXhwciwgUHJlRXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5RXhwciwKKyAg
ICAgICAgTmV3RXhwciwgUHJlRXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5RXhwciwg
T3B0aW9uYWxDaGFpbiwKICAgICAgICAgQ29uZGl0aW9uYWxFeHByLCBBc3NpZ25tZW50RXhwciwg
VHlwZW9mRXhwciwKICAgICAgICAgRGVsZXRlRXhwciwgQXJyYXlMaXRlcmFsRXhwciwgQmluZGlu
Z0Rlc3RydWN0dXJpbmcsIFJlc3RQYXJhbWV0ZXIsCiAgICAgICAgIEFycmF5RGVzdHJ1Y3R1cmlu
ZywgT2JqZWN0RGVzdHJ1Y3R1cmluZywgU291cmNlRWxlbWVudHNSZXN1bHQsCkBAIC0xNDcsNyAr
MTQ3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRTdHJp
bmdzID0gTGV4ZXJGbGFnc0RvbnRCdWlsZFN0cmluZ3M7CiAKICAgICBpbnQgY3JlYXRlU291cmNl
RWxlbWVudHMoKSB7IHJldHVybiBTb3VyY2VFbGVtZW50c1Jlc3VsdDsgfQotICAgIEV4cHJlc3Np
b25UeXBlIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwg
Ym9vbCwgaW50LCBpbnQsIGludCwgaW50LCBzaXplX3QpIHsgcmV0dXJuIENhbGxFeHByOyB9Cisg
ICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGludCwgaW50LCBpbnQsIGludCwgc2l6ZV90LCBi
b29sKSB7IHJldHVybiBDYWxsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNvbW1h
RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSBleHByKSB7IHJldHVy
biBleHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgYXBwZW5kVG9Db21tYUV4cHIoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUmIGhlYWQsIEV4cHJlc3Npb25UeXBlLCBFeHBy
ZXNzaW9uVHlwZSBuZXh0KSB7IGhlYWQgPSBuZXh0OyByZXR1cm4gbmV4dDsgfQogICAgIEV4cHJl
c3Npb25UeXBlIG1ha2VBc3NpZ25Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Np
b25UeXBlLCBPcGVyYXRvciwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGJvb2wsIGludCwgaW50LCBp
bnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CkBAIC0xODQsNiArMTg0LDcgQEAgcHVibGlj
OgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlZ0V4cChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBjb25zdCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBmbGFncywgaW50
KSB7IHJldHVybiBZYXJyOjpoYXNFcnJvcihZYXJyOjpjaGVja1N5bnRheChwYXR0ZXJuLnN0cmlu
ZygpLCBmbGFncy5zdHJpbmcoKSkpID8gMCA6IFJlZ0V4cEV4cHI7IH0KICAgICBFeHByZXNzaW9u
VHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBl
LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0KICAgICBFeHByZXNzaW9u
VHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBl
LCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZU9wdGlvbmFsQ2hhaW4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4
cHJlc3Npb25UeXBlKSB7IHJldHVybiBPcHRpb25hbENoYWluOyB9CiAgICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlQ29uZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Np
b25UeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIENvbmRpdGlv
bmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBpbnQs
IGludCwgaW50LCBBc3NpZ25tZW50Q29udGV4dCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0K
ICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVFbXB0eVZhckV4cHJlc3Npb24oY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
Y3BwCmluZGV4IDE1NmMxODBlMTgzNDdmNDdjOTM5MDQ1OWU1ZDIxNzUxMWI5ODMxZmYuLjA3MTQw
Yzc2MWI0OTgzNDgzYjg1MmIxNGUzNmJkMWQxOTA4ZTZiYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCkBAIC0xNzYsNiArMTc2
LDEwIEBAIHN0YXRpYyBTdHJpbmcgZnVuY3Rpb25DYWxsQmFzZShjb25zdCBTdHJpbmcmIHNvdXJj
ZVRleHQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKKyAgICAvLyBEb24ndCBk
aXNwbGF5IHRoZSA/LiBvZiBhbiBvcHRpb25hbCBjYWxsLgorICAgIGlmIChpZHggPiAyICYmIHNv
dXJjZVRleHRbaWR4XSA9PSAnLicgJiYgc291cmNlVGV4dFtpZHggLSAxXSA9PSAnPycpCisgICAg
ICAgIGlkeCAtPSAyOworCiAgICAgcmV0dXJuIHNvdXJjZVRleHQubGVmdChpZHggKyAxKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDM2NmM0MTljNjlj
OGU4MmY3MzBlMWNkMTQyZjRiN2I1OTBjOTA3YjkuLjAzNjkzOGI1OWEyYWM4OWRhMTg3ZGRmNmUw
ODVjZTA2NmU3MDlkNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgK
QEAgLTQ5NSw3ICs0OTUsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVh
bWluZ0FwaSA9IGZhbHNlOwogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlSZWZlcmVuY2VzLCBm
YWxzZSwgTm9ybWFsLCAiQWxsb3cgdHlwZXMgZnJvbSB0aGUgd2FzbSByZWZlcmVuY2VzIHNwZWMu
IikgXAogICAgIHYoYm9vbCwgdXNlV2Vha1JlZnMsIGZhbHNlLCBOb3JtYWwsICJFeHBvc2UgdGhl
IFdlYWtSZWYgY29uc3RydWN0b3IuIikgXAogICAgIHYoYm9vbCwgdXNlQmlnSW50LCBmYWxzZSwg
Tm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBlbmFibGUgQmlnSW50IHN1cHBvcnQuIikgXAotICAg
IHYoYm9vbCwgdXNlTnVsbGlzaENvYWxlc2NpbmcsIGZhbHNlLCBOb3JtYWwsICJFbmFibGUgc3Vw
cG9ydCBmb3IgdGhlID8/IG9wZXJhdG9yLiIpIFwKKyAgICB2KGJvb2wsIHVzZU51bGxpc2hBd2Fy
ZU9wZXJhdG9ycywgZmFsc2UsIE5vcm1hbCwgIkVuYWJsZSBzdXBwb3J0IGZvciA/LiBhbmQgPz8g
b3BlcmF0b3JzLiIpIFwKICAgICB2KGJvb2wsIHVzZUFycmF5QWxsb2NhdGlvblByb2ZpbGluZywg
dHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ugb3VyIG5vcm1hbCBhcnJheSBhbGxv
Y2F0aW9uIHByb2ZpbGluZy4gSWYgZmFsc2UsIHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUgd2lsbCBh
bHdheXMgY2xhaW0gdG8gYmUgdW5kZWNpZGVkLiIpIFwKICAgICB2KGJvb2wsIGZvcmNlUG9seVBy
b3RvLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgY3JlYXRlX3RoaXMgd2lsbCBhbHdheXMgY3Jl
YXRlIGFuIG9iamVjdCB3aXRoIGEgcG9seSBwcm90byBzdHJ1Y3R1cmUuIikgXAogICAgIHYoYm9v
bCwgZm9yY2VNaW5pVk1Nb2RlLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgaXQgd2lsbCBmb3Jj
ZSBtaW5pIFZNIG1vZGUgb24uIikgXApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IGM1MzZmYWJiZTcxYTg3Y2Q4NjU5NWVmMzgwN2JjMWNmMGM3YzA4
MjguLmY1ZjQ4ZDBiOGMzMWM5NTdmYmM0NzcwZjY5YWU3NzFlZjc4YmRiZDYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAxOS0wNy0zMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CisKKyAg
ICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHM6CisKIDIwMTktMDctMzEgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZywgZGlzYWJsZSBmYWlsaW5n
IHRlc3QgZm9yIHJkYXI6Ly81MTc1MjU5My4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmlu
ZGV4IDgzZGMwNjJhYjI4MjExNjFhOTMxYzJhYmU0M2RmNWY2NjlhODhkYTkuLjA5ODcyMzUzNjBk
MjQ0NGQxN2JiZTljM2E4YmVhZTFiYzkxZTk5NGUgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cwpAQCAtNjk5LDggKzY5OSw4IEBAIGRlZiBydW5CaWdJbnRFbmFibGVkKCpvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpCiAgICAgcnVuKCJiaWctaW50LWVuYWJsZWQiLCAiLS11c2VCaWdJ
bnQ9dHJ1ZSIgLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkK
IGVuZAogCi1kZWYgcnVuTnVsbGlzaENvYWxlc2NpbmdFbmFibGVkKCpvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpCi0gICAgcnVuKCJudWxsaXNoLWNvYWxlc2NpbmctZW5hYmxlZCIsICItLXVz
ZU51bGxpc2hDb2FsZXNjaW5nPXRydWUiICwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykpCitkZWYgcnVuTnVsbGlzaEF3YXJlT3BlcmF0b3JzRW5hYmxlZCgqb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQorICAgIHJ1bigibnVsbGlzaC1hd2FyZS1vcGVyYXRv
cnMtZW5hYmxlZCIsICItLXVzZU51bGxpc2hBd2FyZU9wZXJhdG9ycz10cnVlIiAsICooRlRMX09Q
VElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5GVExO
b0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
Q2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZGUxMzNhMTg5MGQ3ZjA0YjVmNjQ1
YTc0MGRmNWFiYzdlMWI3Zjc5Mi4uMGQyNTNlZTIxZDE5ZTUzY2JiMDA4YmQ1ZjRhZDM2ZjFlNDg2
YTY2MyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAxOS0wNy0zMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2ly
c2xpbmdAc29ueS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNo
YWluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDAxOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHN0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanM6CisgICAgICAgICogc3RyZXNzL29wdGlvbmFs
LWNoYWluaW5nLmpzOiBBZGRlZC4KKwogMjAxOS0wNy0zMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1
a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIE1ha2UgU3RydWN0dXJlQ2hhaW4gbGVzcy10
cmlja3kgYnkgdXNpbmcgQXV4aWxpYXJ5IEJ1ZmZlcgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzIGIvSlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2FsZXNj
aW5nLmpzCmluZGV4IDU5NThmMTI3M2FiMTY0NzEzMGE2ZWQ2ZTFiODZlNWUxZjQ0YTdjNGUuLmE1
MjcyZWQ1NDVhY2YwNmM1OGRmZDk4NzVlMDVjNzVmN2IwNGIwNTEgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9udWxs
aXNoLWNvYWxlc2NpbmcuanMKQEAgLTEsNCArMSw0IEBACi0vL0AgcnVuTnVsbGlzaENvYWxlc2Np
bmdFbmFibGVkCisvL0AgcnVuTnVsbGlzaEF3YXJlT3BlcmF0b3JzRW5hYmxlZAogCiBmdW5jdGlv
biBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CiAgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0
ZWQpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9vcHRpb25hbC1jaGFpbmluZy5qcyBiL0pT
VGVzdHMvc3RyZXNzL29wdGlvbmFsLWNoYWluaW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhMWUyMThmM2Jm
OGRhOGMyMzgwYmEzZTEzMTllYjY0MGFkNzM4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3N0cmVzcy9vcHRpb25hbC1jaGFpbmluZy5qcwpAQCAtMCwwICsxLDEzNyBAQAorLy9AIHJ1bk51
bGxpc2hBd2FyZU9wZXJhdG9yc0VuYWJsZWQKKworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBl
eHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoYGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9YCk7Cit9CisK
K2Z1bmN0aW9uIHNob3VsZFRocm93U3ludGF4RXJyb3Ioc2NyaXB0KSB7CisgICAgbGV0IGVycm9y
OworICAgIHRyeSB7CisgICAgICAgIGV2YWwoc2NyaXB0KTsKKyAgICB9IGNhdGNoIChlKSB7Cisg
ICAgICAgIGVycm9yID0gZTsKKyAgICB9CisKKyAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFN5
bnRheEVycm9yKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBTeW50YXhFcnJv
ciEnKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuYykgeworICAgIGxl
dCBlcnJvcjsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICBlcnJvciA9IGU7CisgICAgfQorCisgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBU
eXBlRXJyb3IpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFR5cGVFcnJvciEn
KTsKK30KKworc2hvdWxkQmUodW5kZWZpbmVkPy52YWx1ZU9mKCksIHVuZGVmaW5lZCk7CitzaG91
bGRCZShudWxsPy52YWx1ZU9mKCksIHVuZGVmaW5lZCk7CitzaG91bGRCZSh0cnVlPy52YWx1ZU9m
KCksIHRydWUpOworc2hvdWxkQmUoZmFsc2U/LnZhbHVlT2YoKSwgZmFsc2UpOworc2hvdWxkQmUo
MD8udmFsdWVPZigpLCAwKTsKK3Nob3VsZEJlKDE/LnZhbHVlT2YoKSwgMSk7CitzaG91bGRCZSgn
Jz8udmFsdWVPZigpLCAnJyk7CitzaG91bGRCZSgnaGknPy52YWx1ZU9mKCksICdoaScpOworc2hv
dWxkQmUoKHt9KT8uY29uc3RydWN0b3IsIE9iamVjdCk7CitzaG91bGRCZSgoeyB4OiAnaGknIH0p
Py54LCAnaGknKTsKK3Nob3VsZEJlKFtdPy5sZW5ndGgsIDApOworc2hvdWxkQmUoWydoaSddPy5s
ZW5ndGgsIDEpOworCitzaG91bGRCZSh1bmRlZmluZWQ/LlsndmFsdWVPZiddKCksIHVuZGVmaW5l
ZCk7CitzaG91bGRCZShudWxsPy5bJ3ZhbHVlT2YnXSgpLCB1bmRlZmluZWQpOworc2hvdWxkQmUo
dHJ1ZT8uWyd2YWx1ZU9mJ10oKSwgdHJ1ZSk7CitzaG91bGRCZShmYWxzZT8uWyd2YWx1ZU9mJ10o
KSwgZmFsc2UpOworc2hvdWxkQmUoMD8uWyd2YWx1ZU9mJ10oKSwgMCk7CitzaG91bGRCZSgxPy5b
J3ZhbHVlT2YnXSgpLCAxKTsKK3Nob3VsZEJlKCcnPy5bJ3ZhbHVlT2YnXSgpLCAnJyk7CitzaG91
bGRCZSgnaGknPy5bJ3ZhbHVlT2YnXSgpLCAnaGknKTsKK3Nob3VsZEJlKCh7fSk/LlsnY29uc3Ry
dWN0b3InXSwgT2JqZWN0KTsKK3Nob3VsZEJlKCh7IHg6ICdoaScgfSk/LlsneCddLCAnaGknKTsK
K3Nob3VsZEJlKFtdPy5bJ2xlbmd0aCddLCAwKTsKK3Nob3VsZEJlKFsnaGknXT8uWzBdLCAnaGkn
KTsKKworc2hvdWxkQmUodW5kZWZpbmVkPy4oKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKG51bGw/
LigpLCB1bmRlZmluZWQpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gdHJ1ZT8uKCkpOwor
c2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gZmFsc2U/LigpKTsKK3Nob3VsZFRocm93VHlwZUVy
cm9yKCgpID0+IDA/LigpKTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+IDE/LigpKTsKK3No
b3VsZFRocm93VHlwZUVycm9yKCgpID0+ICcnPy4oKSk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigo
KSA9PiAnaGknPy4oKSk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoe30pPy4oKSk7Citz
aG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoeyB4OiAnaGknIH0pPy4oKSk7CitzaG91bGRUaHJv
d1R5cGVFcnJvcigoKSA9PiBbXT8uKCkpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gWydo
aSddPy4oKSk7CisKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICh7fSk/LmFbJ2InXSk7Citz
aG91bGRCZSgoe30pPy5hPy5bJ2InXSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKG51bGw/LmFbJ2In
XSgpLmMsIHVuZGVmaW5lZCk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoe30pPy5bJ2En
XS5iKTsKK3Nob3VsZEJlKCh7fSk/LlsnYSddPy5iLCB1bmRlZmluZWQpOworc2hvdWxkQmUobnVs
bD8uWydhJ10uYigpWydjJ10sIHVuZGVmaW5lZCk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9
PiAoKCkgPT4ge30pPy4oKSgpKTsKK3Nob3VsZEJlKCgoKSA9PiB7fSk/LigpPy4oKSwgdW5kZWZp
bmVkKTsKK3Nob3VsZEJlKG51bGw/LigpKCkuYVsnYiddLCB1bmRlZmluZWQpOworCitjb25zdCBv
MSA9IHsgY291bnQ6IDAsIGdldCB4KCkgeyB0aGlzLmNvdW50Kys7IHJldHVybiAoKSA9PiB7fTsg
fSB9OworbzEueD8ueTsKK3Nob3VsZEJlKG8xLmNvdW50LCAxKTsKK28xLng/LlsneSddOworc2hv
dWxkQmUobzEuY291bnQsIDIpOworbzEueD8uKCk7CitzaG91bGRCZShvMS5jb3VudCwgMyk7Citu
dWxsPy4obzEueCk7CitzaG91bGRCZShvMS5jb3VudCwgMyk7CisKK3Nob3VsZEJlKGRlbGV0ZSB1
bmRlZmluZWQ/LmZvbywgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgbnVsbD8uZm9vLCB0cnVlKTsK
K3Nob3VsZEJlKGRlbGV0ZSB1bmRlZmluZWQ/LlsnZm9vJ10sIHRydWUpOworc2hvdWxkQmUoZGVs
ZXRlIG51bGw/LlsnZm9vJ10sIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIHVuZGVmaW5lZD8uKCks
IHRydWUpOworc2hvdWxkQmUoZGVsZXRlIG51bGw/LigpLCB0cnVlKTsKKworY29uc3QgbzIgPSB7
IHg6IDAsIHk6IDAsIHooKSB7fSB9Oworc2hvdWxkQmUoZGVsZXRlIG8yPy54LCB0cnVlKTsKK3No
b3VsZEJlKG8yLngsIHVuZGVmaW5lZCk7CitzaG91bGRCZShkZWxldGUgbzI/LngsIHRydWUpOwor
c2hvdWxkQmUoZGVsZXRlIG8yPy5bJ3knXSwgdHJ1ZSk7CitzaG91bGRCZShvMi55LCB1bmRlZmlu
ZWQpOworc2hvdWxkQmUoZGVsZXRlIG8yPy5bJ3knXSwgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUg
bzIuej8uKCksIHRydWUpOworCitmdW5jdGlvbiBncmVldChuYW1lKSB7IHJldHVybiBgaGV5LCAk
e25hbWV9JHt0aGlzLnN1ZmZpeCA/PyAnLid9YDsgfQorc2hvdWxkQmUoZXZhbD8uKCdncmVldCgi
d29ybGQiKScpLCAnaGV5LCB3b3JsZC4nKTsKK3Nob3VsZEJlKGdyZWV0Py5jYWxsKHsgc3VmZml4
OiAnIScgfSwgJ3dvcmxkJyksICdoZXksIHdvcmxkIScpOworc2hvdWxkQmUoZ3JlZXQuY2FsbD8u
KHsgc3VmZml4OiAnIScgfSwgJ3dvcmxkJyksICdoZXksIHdvcmxkIScpOworc2hvdWxkQmUobnVs
bD8uY2FsbCh7IHN1ZmZpeDogJyEnIH0sICd3b3JsZCcpLCB1bmRlZmluZWQpOworc2hvdWxkQmUo
KHt9KS5jYWxsPy4oeyBzdWZmaXg6ICchJyB9LCAnd29ybGQnKSwgdW5kZWZpbmVkKTsKK3Nob3Vs
ZEJlKGdyZWV0Py5hcHBseSh7IHN1ZmZpeDogJz8nIH0sIFsnd29ybGQnXSksICdoZXksIHdvcmxk
PycpOworc2hvdWxkQmUoZ3JlZXQuYXBwbHk/Lih7IHN1ZmZpeDogJz8nIH0sIFsnd29ybGQnXSks
ICdoZXksIHdvcmxkPycpOworc2hvdWxkQmUobnVsbD8uYXBwbHkoeyBzdWZmaXg6ICc/JyB9LCBb
J3dvcmxkJ10pLCB1bmRlZmluZWQpOworc2hvdWxkQmUoKHt9KS5hcHBseT8uKHsgc3VmZml4OiAn
PycgfSwgWyd3b3JsZCddKSwgdW5kZWZpbmVkKTsKKworY29uc3QgbWFzcXVlcmFkZXIgPSBtYWtl
TWFzcXVlcmFkZXIoKTsKK21hc3F1ZXJhZGVyLmJhciA9IDM7CitzaG91bGRCZShtYXNxdWVyYWRl
cj8uYmFyLCAzKTsKK3Nob3VsZEJlKG1hc3F1ZXJhZGVyPy5bJ2JhciddLCAzKTsKK3Nob3VsZFRo
cm93VHlwZUVycm9yKCgpID0+IG1hc3F1ZXJhZGVyPy4oKSk7CisKK3Nob3VsZFRocm93U3ludGF4
RXJyb3IoJ2NsYXNzIEMge30gY2xhc3MgRCBleHRlbmRzIEMgeyBmb28oKSB7IHJldHVybiBzdXBl
cj8uYmFyOyB9IH0nKTsKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NsYXNzIEMge30gY2xhc3Mg
RCBleHRlbmRzIEMgeyBmb28oKSB7IHJldHVybiBzdXBlcj8uWyJiYXIiXTsgfSB9Jyk7CitzaG91
bGRUaHJvd1N5bnRheEVycm9yKCdjbGFzcyBDIHt9IGNsYXNzIEQgZXh0ZW5kcyBDIHsgY29uc3Ry
dWN0b3IoKSB7IHN1cGVyPy4oKTsgfSB9Jyk7CisKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2Nv
bnN0IG8gPSB7IEM6IGNsYXNzIHt9IH07IG5ldyBvPy5DKCk7JykKK3Nob3VsZFRocm93U3ludGF4
RXJyb3IoJ2NvbnN0IG8gPSB7IEM6IGNsYXNzIHt9IH07IG5ldyBvPy5bIkMiXSgpOycpCitzaG91
bGRUaHJvd1N5bnRheEVycm9yKCdjbGFzcyBDIHt9IG5ldyBDPy4oKTsnKQorc2hvdWxkVGhyb3dT
eW50YXhFcnJvcignZnVuY3Rpb24gZm9vKCkgeyBuZXc/LnRhcmdldDsgfScpOworCitzaG91bGRU
aHJvd1N5bnRheEVycm9yKCdmdW5jdGlvbiB0YWcoKSB7fSB0YWc/LmBgOycpOworc2hvdWxkVGhy
b3dTeW50YXhFcnJvcignY29uc3QgbyA9IHsgdGFnKCkge30gfTsgbz8udGFnYGA7Jyk7CisKKy8v
IE5PVCBhbiBvcHRpb25hbCBjaGFpbgorc2hvdWxkQmUoZmFsc2U/LjQ6NSwgNSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375356</attachid>
            <date>2019-08-01 15:22:40 -0700</date>
            <delta_ts>2019-08-05 11:06:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200199-20190801152237.patch</filename>
            <type>text/plain</type>
            <size>61571</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4MTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
ZjI0ZmE5ZjVhMjI2ZTFiODcxMTBjMjY4ODMzODk2OTcyMThkODc1Li4yNmFjZWY1ZWM5YzVlY2Ux
NzQzMmZkYzMwZDA0NjAxMDNjMjEzYjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MSBAQAorMjAxOS0wNy0zMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
dGhlIG9wdGlvbmFsIGNoYWluaW5nIHByb3Bvc2FsLCB3aGljaCBoYXMgbm93IHJlYWNoZWQgU3Rh
Z2UgMyBhdCBUQzM5LgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhID8uIG9wZXJhdG9yIHdo
aWNoOgorICAgICAgICAgLSBndWFyZHMgbWVtYmVyIGFjY2VzcyB3aGVuIHRoZSBMSFMgaXMgbnVs
bGlzaCwgaS5lLiBgbnVsbD8uZm9vYCBhbmQgYG51bGw/LlsnZm9vJ11gIGFyZSB1bmRlZmluZWQK
KyAgICAgICAgIC0gZ3VhcmRzIGZ1bmN0aW9uIGNhbGxzIHdoZW4gdGhlIExIUyBpcyBudWxsaXNo
LCBpLmUuIGBudWxsPy4oKWAgaXMgdW5kZWZpbmVkCisgICAgICAgICAtIHNob3J0LWNpcmN1aXRz
IG92ZXIgYSB3aG9sZSBhY2Nlc3MvY2FsbCBjaGFpbiwgaS5lLiBgbnVsbD8uYVsnYiddKGMrKylg
IGlzIHVuZGVmaW5lZCBhbmQgZG9lcyBub3QgaW5jcmVtZW50IGMKKworICAgICAgICBUaGlzIGZl
YXR1cmUgY2FuIGJlIG5haXZlbHkgdmlld2VkIGFzIGEgdGVybmFyeSBpbiBkaXNndWlzZSwgaS5l
LiBgYT8uYmAgaXMgbGlrZSBgYSA9PSBudWxsID8gdW5kZWZpbmVkIDogYS5iYC4KKyAgICAgICAg
SG93ZXZlciwgc2luY2Ugd2UgbXVzdCBiZSBzdXJlIG5vdCB0byBkb3VibGUtZXZhbHVhdGUgdGhl
IExIUywgaXQncyBhY3R1YWxseSBtb3JlIGFraW4gdG8gYSB0cnkgYmxvY2sgLS0KKyAgICAgICAg
bmFtZWx5LCB3ZSBoYXZlIHRoZSBieXRlY29kZSBnZW5lcmF0b3Iga2VlcCBhIHN0YWNrIG9mIGVh
cmx5LW91dCB0YXJnZXQgbGFiZWxzIGZvciBhY2Nlc3MgYW5kIGNhbGwgbm9kZXMuCisKKyAgICAg
ICAgKEFsc28gbm90ZSB0aGF0IGBkb2N1bWVudC5hbGxgIGJlaGF2ZXMgYXMgYW4gb2JqZWN0LCBz
byAibnVsbGlzaCIgbWVhbnMgKnN0cmljdGx5KiBlcXVhbCB0byBudWxsIG9yIHVuZGVmaW5lZC4p
CisKKyAgICAgICAgPy4gYW5kID8/IGFyZSBhIGRvdWJsZSBmZWF0dXJlIG9mICJudWxsaXNoLWF3
YXJlIiBvcGVyYXRvcnM7IHRoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgZmVhdHVyZSBmbGFnIGFjY29y
ZGluZ2x5LgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hPcHRpb25hbENoYWluRW5kTGFi
ZWwpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGlvbmFs
Q2hhaW5FbmRMYWJlbCk6IEFkZGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdE9wdGlvbmFsQ2hlY2spOiBBZGRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgSW1wbGVtZW50IGxhYmVsIHN0YWNrIGFuZCBlYXJseS1v
dXQgZW1pdHRlci4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgor
ICAgICAgICAoSlNDOjpCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAg
ICAoSlNDOjpEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkV2
YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2Fs
bFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxC
cmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RGVsZXRlQnJhY2tldE5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OkNvYWxlc2NlTm9kZTo6ZW1pdEJ5dGVjb2RlKTogQ2xlYW51cC4KKyAgICAg
ICAgKEpTQzo6T3B0aW9uYWxDaGFpbk5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkLgorICAgICAg
ICBJbXBsZW1lbnQgPy4gbm9kZSBhbmQgZW1pdCBjaGVja3Mgd2hlcmUgbmVlZGVkLgorCisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICBIYXZlIE9wSXNVbmRlZmluZWRP
ck51bGwgc3VwcG9ydCBjb25zdGFudCByZWdpc3RlcnMuCisKKyAgICAgICAgKiBwYXJzZXIvQVNU
QnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVPcHRpb25hbENoYWlu
KTogQWRkZWQuCisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAq
IHBhcnNlci9MZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyPFQ+OjpsZXhXaXRob3V0Q2xl
YXJpbmdMaW5lVGVybWluYXRvcik6CisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aDoKKyAgICAgICAgKEpTQzo6T3B0aW9uYWxDaGFpbk5vZGU6Ok9wdGlvbmFsQ2hhaW5Ob2RlKTog
QWRkZWQuCisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkV4cHJlc3Np
b25Ob2RlOjppc09wdGlvbmFsQ2hhaW4gY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RXhw
cmVzc2lvbk5vZGU6OmlzT3B0aW9uYWxDaGFpbkJhc2UgY29uc3QpOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6RXhwcmVzc2lvbk5vZGU6OnNldElzT3B0aW9uYWxDaGFpbkJhc2UpOiBBZGRlZC4KKyAg
ICAgICAgKiBwYXJzZXIvUGFyc2VyVG9rZW5zLmg6CisgICAgICAgICogcGFyc2VyL1N5bnRheENo
ZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5v
ZGUpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVPcHRpb25hbENoYWluKToK
KyAgICAgICAgSW50cm9kdWNlIG5ldyB0b2tlbiBhbmQgQVNUIG5vZGUsIGFzIHdlbGwgYXMgYW4g
RXhwcmVzc2lvbk5vZGUgZmllbGQgdG8gbWFyayBMSFNlcyB3aXRoLgorCisgICAgICAgICogcGFy
c2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1l
bWJlckV4cHJlc3Npb24pOgorICAgICAgICBQYXJzZSBvcHRpb25hbCBjaGFpbnMgYnkgd3JhcHBp
bmcgdGhlIGFjY2Vzcy9jYWxsIHBhcnNlIGxvb3AuCisKKyAgICAgICAgKiBydW50aW1lL0V4Y2Vw
dGlvbkhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkNhbGxCYXNlKToKKyAgICAg
ICAgRW5zdXJlIHRoYXQgVHlwZUVycm9yIG1lc3NhZ2VzIGRvbid0IGluY2x1ZGUgdGhlICc/Licu
CisKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgVXBkYXRlIGZlYXR1cmUg
ZmxhZy4KKwogMjAxOS0wNy0zMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVuYW1lIERPTUpJVCBzYWZlL3Vuc2FmZUZ1bmN0aW9uIHRvIGZ1bmN0aW9uV2l0aFR5
cGVDaGVja3MgYW5kIGZ1bmN0aW9uV2l0aG91dFR5cGVDaGVja3MuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmlu
ZGV4IDUxNWI1OTgzZjZhMWQ1ODA1ZDJmYjQ4MWVjYzBhOTdjZDU5OWQ3YjkuLmViNDk3ZWEyYzZm
OWQ3NjQ4MjMxZWU4Zjc5ZDhlNGI3N2VhYjNmNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC00OTU4
LDYgKzQ5NTgsMzcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZihSZWdpc3Rl
cklEKiBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBDb21wbGV0aW8KICAgICBlbWl0SnVtcElmVHJ1
ZShlcXVpdmFsZW5jZVJlc3VsdCwganVtcFRhcmdldCk7CiB9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OnB1c2hPcHRpb25hbENoYWluRW5kTGFiZWwoKQoreworICAgIG1fb3B0aW9uYWxDaGFp
bkVuZExhYmVsU3RhY2suYXBwZW5kKG5ld0xhYmVsKCkpOworICAgIG1fb3B0aW9uYWxDaGFpbkRl
cHRoKys7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGlvbmFsQ2hhaW5FbmRM
YWJlbCgpCit7CisgICAgQVNTRVJUKG1fb3B0aW9uYWxDaGFpbkVuZExhYmVsU3RhY2suc2l6ZSgp
KTsKKyAgICBBU1NFUlQobV9vcHRpb25hbENoYWluRGVwdGgpOworCisgICAgaWYgKC0tbV9vcHRp
b25hbENoYWluRGVwdGgpCisgICAgICAgIHJldHVybjsKKworICAgIHdoaWxlIChtX29wdGlvbmFs
Q2hhaW5FbmRMYWJlbFN0YWNrLnNpemUoKSkKKyAgICAgICAgZW1pdExhYmVsKG1fb3B0aW9uYWxD
aGFpbkVuZExhYmVsU3RhY2sudGFrZUxhc3QoKS5nZXQoKSk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRPcHRpb25hbENoZWNrKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjLCBib29sIGlzRGVsZXRlKQoreworICAgIEFTU0VSVChtX29wdGlvbmFsQ2hhaW5FbmRMYWJl
bFN0YWNrLnNpemUoKSk7CisKKyAgICBSZWY8TGFiZWw+IG5vdE51bGxpc2hMYWJlbCA9IG5ld0xh
YmVsKCk7CisgICAgZW1pdEp1bXBJZkZhbHNlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1w
b3JhcnkoKSwgc3JjKSwgbm90TnVsbGlzaExhYmVsLmdldCgpKTsKKworICAgIGVtaXRMb2FkKGRz
dCwgaXNEZWxldGUgPyBqc0Jvb2xlYW4odHJ1ZSkgOiBqc1VuZGVmaW5lZCgpKTsKKyAgICBlbWl0
SnVtcChtX29wdGlvbmFsQ2hhaW5FbmRMYWJlbFN0YWNrLmxhc3QoKS5nZXQoKSk7CisKKyAgICBl
bWl0TGFiZWwobm90TnVsbGlzaExhYmVsLmdldCgpKTsKK30KKwogdm9pZCBGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKIHsKICAgICAvLyBM
ZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNl
LCBidXQgaXQgb25seSBvY2N1cnMgaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCBlOTc2ODZhYTNlZGNkZDhk
M2Y5YjU3YzRhNmQxMjNiYWM5Y2IzOTg3Li41NzU5ZGMyNjdhZDA3YjZjODA1YzljZDZiY2IxZjRm
Yzk1NmVmMTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC05NTksNiArOTU5LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHB1c2hGaW5hbGx5Q29udHJvbEZsb3dTY29wZShGaW5hbGx5Q29u
dGV4dCYpOwogICAgICAgICB2b2lkIHBvcEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKCk7CiAKKyAg
ICAgICAgdm9pZCBwdXNoT3B0aW9uYWxDaGFpbkVuZExhYmVsKCk7CisgICAgICAgIHZvaWQgcG9w
T3B0aW9uYWxDaGFpbkVuZExhYmVsKCk7CisgICAgICAgIHZvaWQgZW1pdE9wdGlvbmFsQ2hlY2so
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMsIGJvb2wgaXNEZWxldGUgPSBmYWxzZSk7
CisKICAgICAgICAgdm9pZCBwdXNoSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWws
IFJlZ2lzdGVySUQqIGluZGV4KTsKICAgICAgICAgdm9pZCBwb3BJbmRleGVkRm9ySW5TY29wZShS
ZWdpc3RlcklEKiBsb2NhbCk7CiAgICAgICAgIHZvaWQgcHVzaFN0cnVjdHVyZUZvckluU2NvcGUo
UmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBwcm9wZXJ0
eSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7CkBAIC0xMjY2LDYgKzEyNzAsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFRyeVJhbmdlPiBtX3RyeVJhbmdlczsKICAgICAgICAg
U2VnbWVudGVkVmVjdG9yPFRyeURhdGEsIDg+IG1fdHJ5RGF0YTsKIAorICAgICAgICBWZWN0b3I8
UmVmPExhYmVsPj4gbV9vcHRpb25hbENoYWluRW5kTGFiZWxTdGFjazsKKyAgICAgICAgdW5zaWdu
ZWQgbV9vcHRpb25hbENoYWluRGVwdGggeyAwIH07CisKICAgICAgICAgaW50IG1fbmV4dENvbnN0
YW50T2Zmc2V0IHsgMCB9OwogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxGdW5jdGlvbk1ldGFk
YXRhTm9kZSosIHVuc2lnbmVkPiBGdW5jdGlvbk9mZnNldE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCA3Y2MwNzhj
M2MwMjE1YzlkZjc5MGM4NDhhMzJkMTNiODA5MGYwOGEwLi5iMTVkMGNmMGY2YjExMGQ2YTBiMWYw
ZjBlMzBiMDBhNzEyMDRmZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC03NDQsMTIgKzc0NCwxOCBAQCBSZWdpc3Rl
cklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaQogICAgIFJlZ2lzdGVySUQqIHJldDsKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKIAotICAg
IGlmIChpc05vbkluZGV4U3RyaW5nRWxlbWVudCgqbV9zdWJzY3JpcHQpKSB7Ci0gICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisgICAg
Ym9vbCBzdWJzY3JpcHRJc05vbkluZGV4U3RyaW5nID0gaXNOb25JbmRleFN0cmluZ0VsZW1lbnQo
Km1fc3Vic2NyaXB0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IHN1YnNjcmlwdElz
Tm9uSW5kZXhTdHJpbmcKKyAgICAgICAgPyBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKQorICAg
ICAgICA6IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vic2Ny
aXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CisKKyAg
ICBpZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5l
bWl0T3B0aW9uYWxDaGVjayhmaW5hbERlc3QuZ2V0KCksIGJhc2UuZ2V0KCkpOworCisgICAgaWYg
KHN1YnNjcmlwdElzTm9uSW5kZXhTdHJpbmcpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICBy
ZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCBz
dGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKICAgICB9IGVs
c2UgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vi
c2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5
ID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yUHJvcGVydHkobV9zdWJzY3JpcHQpOwogICAgICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7CiAgICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZmluYWxEZXN0Lmdl
dCgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7CkBAIC03NjMsMTcgKzc2OSwyNiBAQCBSZWdpc3Rl
cklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaQogCiBSZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCk7CiAgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsK
LSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGJhc2VJc1N1cGVyID8gZW1pdFN1cGVyQmFz
ZUZvckNhbGxlZShnZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZTsKKyAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAg
IGJhc2UgPSBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcik7CisgICAgZWxzZSB7Cisg
ICAgICAgIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyAgICAgICAgaWYgKG1f
YmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRP
cHRpb25hbENoZWNrKGZpbmFsRGVzdC5nZXQoKSwgYmFzZS5nZXQoKSk7CisgICAgfQorCiAgICAg
Z2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90
RW5kKCkpOwotICAgIFJlZ2lzdGVySUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0OwogICAgIGlmIChiYXNlSXNTdXBlcikg
ewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1ZhbHVlID0gZ2VuZXJhdG9yLmVuc3Vy
ZVRoaXMoKTsKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZpbmFsRGVzdCwg
YmFzZS5nZXQoKSwgdGhpc1ZhbHVlLmdldCgpLCBtX2lkZW50KTsKKyAgICAgICAgcmV0ID0gZ2Vu
ZXJhdG9yLmVtaXRHZXRCeUlkKGZpbmFsRGVzdC5nZXQoKSwgYmFzZS5nZXQoKSwgdGhpc1ZhbHVl
LmdldCgpLCBtX2lkZW50KTsKICAgICB9IGVsc2UKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVt
aXRHZXRCeUlkKGZpbmFsRGVzdCwgYmFzZS5nZXQoKSwgbV9pZGVudCk7Ci0gICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZShmaW5hbERlc3QsIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Cisg
ICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QuZ2V0KCksIGJhc2Uu
Z2V0KCksIG1faWRlbnQpOworICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUoZmluYWxEZXN0
LmdldCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiByZXQ7CiB9CiAK
QEAgLTg0OCwyNCArODYzLDMyIEBAIFJlZ2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnCiAgICAgICAgIGdl
bmVyYXRvci5lbWl0TG9hZFRoaXNGcm9tQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudCgp
OwogCiAgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9w
ZXJ0eU5hbWVzKCkuZXZhbCk7Ci0gICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2Fs
KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgbG9j
YWwsIG51bGxwdHIpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRv
ci5tb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwotICAgICAgICBD
YWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBsb2NhbCA9IHZhci5sb2NhbCgpOworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBmdW5jOworICAgIGlmIChsb2NhbCkgeworICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNr
SWZOZWNlc3NhcnkodmFyLCBsb2NhbC5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIGZ1bmMgPSBn
ZW5lcmF0b3IubW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgp
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsK
KyAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworCisg
ICAgaWYgKGxvY2FsKQogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50
aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSks
IGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSlNUZXh0UG9z
aXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyA0OworICAgICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKKyAgICAg
ICAgZ2VuZXJhdG9yLm1vdmUoCisgICAgICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLAorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoY2FsbEFyZ3VtZW50
cy50aGlzUmVnaXN0ZXIoKSwgdmFyKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNj
b3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhciwgVGhyb3dJ
Zk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZh
ciwgZnVuYy5nZXQoKSwgbnVsbHB0cik7CiAgICAgfQogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgQ2FsbEFyZ3VtZW50cyBjYWxs
QXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKLSAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZv
dCA9IGRpdm90U3RhcnQoKSArIDQ7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhu
ZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7Ci0gICAgZ2VuZXJhdG9yLm1vdmUoCi0g
ICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCi0gICAgICAgIGdlbmVyYXRvci5l
bWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhcikpOwotICAg
IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhp
c1JlZ2lzdGVyKCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKLSAgICBnZW5lcmF0b3IuZW1pdFRE
WkNoZWNrSWZOZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxscHRyKTsKLSAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1
bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdl
dCgpKTsKKyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3Iu
ZW1pdE9wdGlvbmFsQ2hlY2socmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCkpOworCisgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0
KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVi
dWdnYWJsZUNhbGw6Ok5vKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC04OTksOCArOTIyLDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlCiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KKwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5j
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJl
dHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsK
KyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9w
dGlvbmFsQ2hlY2socmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCkpOworCiAgICAgQ2FsbEFy
Z3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBnZW5lcmF0b3Iu
ZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CiAg
ICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0
dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6
WWVzKTsKQEAgLTkyMCwzMCArOTQ3LDM0IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29s
dmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwKICAgICBF
eHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24gPSBnZW5lcmF0b3IuZXhwZWN0ZWRGdW5j
dGlvbkZvcklkZW50aWZpZXIobV9pZGVudCk7CiAKICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0
b3IudmFyaWFibGUobV9pZGVudCk7Ci0gICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxv
Y2FsKCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwg
bG9jYWwsIG51bGxwdHIpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVy
YXRvci5tb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwotICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwotICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVu
dHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsb2NhbCA9IHZh
ci5sb2NhbCgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jOworICAgIGlmIChsb2NhbCkg
eworICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBsb2NhbC5n
ZXQoKSwgbnVsbHB0cik7CisgICAgICAgIGZ1bmMgPSBnZW5lcmF0b3IubW92ZShnZW5lcmF0b3Iu
dGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBDYWxsQXJndW1lbnRzIGNhbGxB
cmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworCisgICAgaWYgKGxvY2FsKSB7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgLy8gVGhpcyBwYXNzZXMgTm9FeHBlY3RlZEZ1bmN0aW9uIGJlY2F1
c2Ugd2UgZXhwZWN0IHRoYXQgaWYgdGhlIGZ1bmN0aW9uIGlzIGluIGEKICAgICAgICAgLy8gbG9j
YWwgdmFyaWFibGUsIHRoZW4gaXQncyBub3Qgb25lIG9mIG91ciBidWlsdC1pbiBjb25zdHJ1Y3Rv
cnMuCi0gICAgICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbEluVGFpbFBv
c2l0aW9uKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdn
YWJsZUNhbGw6Olllcyk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJu
VmFsdWUuZ2V0KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgICAgIHJldHVybiBy
ZXQ7CisgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBOb0V4cGVjdGVkRnVuY3Rpb247CisgICAg
fSBlbHNlIHsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkg
KyBtX2lkZW50Lmxlbmd0aCgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKKyAgICAgICAgZ2VuZXJhdG9yLm1v
dmUoCisgICAgICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLAorICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIo
KSwgdmFyKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGZ1bmMuZ2V0KCks
IGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgZnVuYy5nZXQoKSwg
bnVsbHB0cik7CiAgICAgfQogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0g
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKLSAgICBDYWxsQXJn
dW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworICAgIGlmIChpc09wdGlv
bmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhyZXR1
cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSk7CiAKLSAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZv
dCA9IGRpdm90U3RhcnQoKSArIG1faWRlbnQubGVuZ3RoKCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhuZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7Ci0gICAgZ2Vu
ZXJhdG9yLm1vdmUoCi0gICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCi0gICAg
ICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVy
KCksIHZhcikpOwotICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGZ1bmMuZ2V0KCksIGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKLSAgICBn
ZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxscHRy
KTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlv
bihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2Fs
bDo6WWVzKTsKICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgp
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiByZXQ7CkBAIC0xMjc1LDYg
KzEzMDYsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmlu
c2ljX2RlZmluZUVudW1lcmFibGVXcml0YWJsZUNvbmZpZwogCiBSZWdpc3RlcklEKiBGdW5jdGlv
bkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24g
PSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5n
ZXQoKSk7CiAgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKICAg
ICBib29sIHN1YnNjcmlwdElzTm9uSW5kZXhTdHJpbmcgPSBpc05vbkluZGV4U3RyaW5nRWxlbWVu
dCgqbV9zdWJzY3JpcHQpOwogCkBAIC0xMjg2LDkgKzEzMTksMTEgQEAgUmVnaXN0ZXJJRCogRnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLAogICAgICAgICAgICAgYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVm
dEhhbmRTaWRlKG1fYmFzZSwgbV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQt
PmlzUHVyZShnZW5lcmF0b3IpKTsKKworICAgICAgICBpZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hh
aW5CYXNlKCkpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socmV0dXJu
VmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBmdW5jdGlvbjsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1JlZ2lzdGVyOwogICAgIGlm
IChiYXNlSXNTdXBlcikgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2Ugb25seSBuZWVkIHRvIGRv
IHRoaXMgb25jZSBiZWNhdXNlIHdlIGVpdGhlciBoYXZlIGEgbm9uLVREWiB0aGlzIG9yIHdlIHRo
cm93LiBPbmNlIHdlIGhhdmUgYSBub24tVERaIHRoaXMsIHdlIGNhbid0IGNoYW5nZSBpdHMgdmFs
dWUgYmFjayB0byBURFouCkBAIC0xMjk3LDE5ICsxMzMyLDIwIEBAIFJlZ2lzdGVySUQqIEZ1bmN0
aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwKICAgICBpZiAoc3Vic2NyaXB0SXNOb25JbmRleFN0cmluZykgewogICAgICAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNz
aW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICAgICAgaWYgKGJhc2VJc1N1cGVy
KQotICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIHN0
YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkpOworICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNlLmdldCgpLCB0aGlz
UmVnaXN0ZXIuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZh
bHVlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5l
bWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHN0
YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkpOworICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNlLmdldCgpLCBzdGF0
aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5v
ZGVGb3JQcm9wZXJ0eShtX3N1YnNjcmlwdCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJl
eHByZXNzaW9uRW5kKCkpOwogICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCi0gICAgICAgICAgICBm
dW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsK
KyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZnVuY3Rpb24uZ2V0KCksIGJhc2Uu
Z2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CisgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGZ1bmN0aW9uLmdldCgpLCBiYXNlLmdldCgp
LCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgfQorICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkp
CisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhyZXR1cm5WYWx1ZS5nZXQoKSwg
ZnVuY3Rpb24uZ2V0KCkpOwogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0g
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5nZXQoKSk7CiAgICAgQ2Fs
bEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBpZiAoYmFz
ZUlzU3VwZXIpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVjayhnZW5lcmF0b3IudGhp
c1JlZ2lzdGVyKCkpOwpAQCAtMTMzMSwxNCArMTM2NywyMSBAQCBSZWdpc3RlcklEKiBGdW5jdGlv
bkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaQogICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7CiAgICAg
aWYgKGJhc2VJc1N1cGVyKQogICAgICAgICBnZW5lcmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBnZW5lcmF0b3IuZW5zdXJlVGhpcygpKTsKLSAgICBlbHNlCisgICAgZWxz
ZSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBtX2Jhc2UpOworICAgICAgICBpZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkp
CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socmV0dXJuVmFsdWUuZ2V0
KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCkpOworICAgIH0KICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3Rh
cnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHN1cGVyQmFzZSA9IGVtaXRTdXBlckJhc2VGb3JDYWxsZWUo
Z2VuZXJhdG9yKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgp
LCBzdXBlckJhc2UuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQp
OwogICAgIH0gZWxzZQogICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0
KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOworCisgICAgaWYgKGlz
T3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNr
KHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSk7CisKICAgICBSZWdpc3RlcklEKiBy
ZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwg
ZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6WWVzKTsKICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIHJldHVybiByZXQ7CkBAIC0xMzQ4LDE3ICsxMzkxLDI0IEBAIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heERpc3RhbmNlVG9Jbm5lcm1vc3RDYWxsT3JBcHBseSA9
IDI7CiAKIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
bV9iYXNlKTsKKworICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKHJldHVyblZhbHVlLmdldCgpLCBiYXNlLmdl
dCgpKTsKKwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRp
dm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbjsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJu
VmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogCisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGZ1bmN0aW9uOwogICAgIGF1dG8gbWFrZUZ1bmN0aW9uID0gWyZdIHsKICAgICAg
ICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHRoaXNWYWx1ZSA9IGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7CiAgICAgICAgICAgICBm
dW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9u
KGRzdCksIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFt
ZXMoKS5idWlsdGluTmFtZXMoKS5jYWxsUHVibGljTmFtZSgpKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCku
YnVpbHRpbk5hbWVzKCkuY2FsbFB1YmxpY05hbWUoKSk7CisKKyAgICAgICAgaWYgKGlzT3B0aW9u
YWxDaGFpbkJhc2UoKSkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhy
ZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIH07CiAKICAgICBib29sIGVt
aXRDYWxsQ2hlY2sgPSAhZ2VuZXJhdG9yLmlzQnVpbHRpbkZ1bmN0aW9uKCk7CkBAIC0xNDMwLDE1
ICsxNDgwLDIyIEBAIFJlZ2lzdGVySUQqIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsCiAgICAgLy8gZnVuY3Rpb24uYXBw
bHkodGhpc0FyZywgW2FyZzAsIGFyZzEsIC4uLl0pIC0+IGNhbiBiZSB0cml2aWFsbHkgY29lcmNl
ZCBpbnRvIGZ1bmN0aW9uLmNhbGwodGhpc0FyZywgYXJnMCwgYXJnMSwgLi4uKSBhbmQgc2F2ZXMg
b2JqZWN0IGFsbG9jYXRpb24KICAgICBib29sIG1heUJlQ2FsbCA9IGFyZVRyaXZpYWxBcHBseUFy
Z3VtZW50cyhtX2FyZ3MpOwogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uOwotICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2Jhc2UpOworCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQor
ICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socmV0dXJuVmFsdWUuZ2V0KCksIGJh
c2UuZ2V0KCkpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uOwogICAgIGF1dG8g
bWFrZUZ1bmN0aW9uID0gWyZdIHsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkg
ewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNWYWx1ZSA9IGdlbmVyYXRvci5l
bnN1cmVUaGlzKCk7CiAgICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJ
ZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5n
ZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5hcHBseVB1Ymxp
Y05hbWUoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0
b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgp
LCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFwcGx5UHVibGljTmFt
ZSgpKTsKKworICAgICAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5n
ZXQoKSk7CiAgICAgfTsKIAogICAgIGJvb2wgZW1pdENhbGxDaGVjayA9ICFnZW5lcmF0b3IuaXNC
dWlsdGluRnVuY3Rpb24oKTsKQEAgLTE2OTIsMjUgKzE3NDksMzcgQEAgUmVnaXN0ZXJJRCogRGVs
ZXRlUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3QKIAogUmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFz
ZSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vi
c2NyaXB0KTsKIAorICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkgeworICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEZWxldGUgPSB0cnVlOworICAgICAgICBnZW5l
cmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soZmluYWxEZXN0LmdldCgpLCByMC5nZXQoKSwgaXNEZWxl
dGUpOworICAgIH0KKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMSA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX3N1YnNjcmlwdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJO
b2RlKCkpCiAgICAgICAgIHJldHVybiBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihnZW5lcmF0b3Is
ICJDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVydHkiKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXREZWxldGVCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMC5nZXQo
KSwgcjEuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGZpbmFs
RGVzdC5nZXQoKSwgcjAuZ2V0KCksIHIxLmdldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIERlbGV0ZURvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogRGVsZXRlRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsK
IAorICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkgeworICAgICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEZWxldGUgPSB0cnVlOworICAgICAgICBnZW5lcmF0b3IuZW1p
dE9wdGlvbmFsQ2hlY2soZmluYWxEZXN0LmdldCgpLCByMC5nZXQoKSwgaXNEZWxldGUpOworICAg
IH0KKwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKQogICAgICAg
ICByZXR1cm4gZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAiQ2Fubm90IGRlbGV0
ZSBhIHN1cGVyIHByb3BlcnR5Iik7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJ
ZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMC5nZXQoKSwgbV9pZGVudCk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJZChmaW5hbERlc3QuZ2V0KCksIHIwLmdl
dCgpLCBtX2lkZW50KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERl
bGV0ZVZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjM0
NiwxMyArMjQxNSwyNiBAQCBSZWdpc3RlcklEKiBDb2FsZXNjZU5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKgogICAgIFJlZjxMYWJlbD4g
dGFyZ2V0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUo
dGVtcC5nZXQoKSwgbV9leHByMSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShnZW5l
cmF0b3IuZW1pdFVuYXJ5T3A8T3BJc1VuZGVmaW5lZE9yTnVsbD4oZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCB0ZW1wLmdldCgpKSwgdGFyZ2V0LmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEp1
bXBJZkZhbHNlKGdlbmVyYXRvci5lbWl0SXNVbmRlZmluZWRPck51bGwoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCB0ZW1wLmdldCgpKSwgdGFyZ2V0LmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1p
dE5vZGVJblRhaWxQb3NpdGlvbih0ZW1wLmdldCgpLCBtX2V4cHIyKTsKICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHRhcmdldC5nZXQoKSk7CiAKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZHN0
LCB0ZW1wLmdldCgpKTsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9w
dGlvbmFsQ2hhaW5Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJ
RCogT3B0aW9uYWxDaGFpbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZpbmFs
RGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisKKyAgICBnZW5lcmF0b3Iu
cHVzaE9wdGlvbmFsQ2hhaW5FbmRMYWJlbCgpOworICAgIGdlbmVyYXRvci5lbWl0Tm9kZShmaW5h
bERlc3QuZ2V0KCksIG1fZXhwcik7CisgICAgZ2VuZXJhdG9yLnBvcE9wdGlvbmFsQ2hhaW5FbmRM
YWJlbCgpOworCisgICAgcmV0dXJuIGZpbmFsRGVzdC5nZXQoKTsKK30KKwogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbmRpdGlvbmFsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQ29uZGl0aW9uYWxOb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbQppbmRleCAzN2VmMjc5MWMxNWI2MzcwODE5NmNhOWZjNjliMWVjOGU1MGE5MTU1Li42Mjdh
ODg4YmM5M2JmMjc0NTdlYTdjYzA1NmY5NzkxYmJiZWNmZmM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQpA
QCAtODc1LDggKzg3NSw3IEBAIGVxdWFsTnVsbENvbXBhcmlzb25PcChvcF9uZXFfbnVsbCwgT3BO
ZXFOdWxsLAogCiBsbGludE9wV2l0aFJldHVybihvcF9pc191bmRlZmluZWRfb3JfbnVsbCwgT3BJ
c1VuZGVmaW5lZE9yTnVsbCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKICAg
ICBnZXQobV9vcGVyYW5kLCB0MCkKLSAgICBhc3NlcnROb3RDb25zdGFudChzaXplLCB0MCkKLSAg
ICBsb2FkaSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIHQxCisgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZVRhZyhzaXplLCB0MCwgdDEpCiAgICAgb3JpIDEsIHQxCiAgICAgY2llcSB0MSwgTnVsbFRh
ZywgdDEKICAgICByZXR1cm4oQm9vbGVhblRhZywgdDEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IGUxZWQ3MmYw
ZWJjMTUxYzMyNjgxZjBhMmYwYjQwOWJkMDU3M2ZhNzIuLjkwZGVmYjk3M2U3ZjVkZTgyN2Y0OTZk
NzI4YTMyOGFjZDI2MjJmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC04MjcsOCArODI3LDggQEAgZXF1YWxO
dWxsQ29tcGFyaXNvbk9wKG9wX25lcV9udWxsLCBPcE5lcU51bGwsCiAKIAogbGxpbnRPcFdpdGhS
ZXR1cm4ob3BfaXNfdW5kZWZpbmVkX29yX251bGwsIE9wSXNVbmRlZmluZWRPck51bGwsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG1fb3BlcmFuZCwgdDApCi0g
ICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MAorICAgIGdldChtX29wZXJhbmQsIHQxKQorICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQogICAgIGFuZHEgflRhZ0JpdFVuZGVm
aW5lZCwgdDAKICAgICBjcWVxIHQwLCBWYWx1ZU51bGwsIHQwCiAgICAgb3JxIFZhbHVlRmFsc2Us
IHQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCmluZGV4IGRlNWIx
MzM5MDY2MTEzNDEyYWNhZWVmMmJkNzVlMDMxYTMzM2ExMDAuLjQ5NzM3ZGY4ODJlOTA2NjJjMGEz
M2MxNDNkY2Q0MDk3MjBjNDkwNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvQVNUQnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNU
QnVpbGRlci5oCkBAIC0xMjksNyArMTI5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBp
bnQgIERvbnRCdWlsZFN0cmluZ3MgPSAwOwogCiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaW5h
cnlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCB0b2tlbiwgc3RkOjpwYWlyPEV4cHJl
c3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPiwgc3RkOjpwYWlyPEV4cHJlc3Npb25Ob2RlKiwgQmlu
YXJ5T3BJbmZvPik7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHByZXZpb3Vz
QmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgpOworICAgIEV4cHJl
c3Npb25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VXYXNTdXBlciwgQXJndW1lbnRz
Tm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBzaXplX3Qg
Y2FsbE9yQXBwbHlDaGlsZERlcHRoLCBib29sIGlzT3B0aW9uYWxDYWxsKTsKIAogICAgIEpTQzo6
U291cmNlRWxlbWVudHMqIGNyZWF0ZVNvdXJjZUVsZW1lbnRzKCkgeyByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBKU0M6OlNvdXJjZUVsZW1lbnRzKCk7IH0KIApAQCAtMzYwLDYgKzM2MCwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAorICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVPcHRpb25hbENoYWluKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogZXhwcikKKyAgICB7CisgICAg
ICAgIGJhc2UtPnNldElzT3B0aW9uYWxDaGFpbkJhc2UoKTsKKyAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgT3B0aW9uYWxDaGFpbk5vZGUobG9jYXRpb24sIGV4cHIpOworICAgIH0K
KwogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVDb25kaXRpb25hbEV4cHIoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgRXhwcmVzc2lv
bk5vZGUqIGxocywgRXhwcmVzc2lvbk5vZGUqIHJocykKICAgICB7CiAgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCBs
aHMsIHJocyk7CkBAIC0xMTQ4LDYgKzExNTQsMTUgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxk
ZXI6Om1ha2VUeXBlT2ZOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHIK
IAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGVuZCkKIHsKKyAgICBpZiAoZXhwci0+aXNPcHRpb25hbENoYWluKCkpIHsKKyAg
ICAgICAgT3B0aW9uYWxDaGFpbk5vZGUqIG9wdGlvbmFsQ2hhaW4gPSBzdGF0aWNfY2FzdDxPcHRp
b25hbENoYWluTm9kZSo+KGV4cHIpOworICAgICAgICBpZiAob3B0aW9uYWxDaGFpbi0+ZXhwcigp
LT5pc0xvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghb3B0aW9uYWxDaGFpbi0+ZXhw
cigpLT5pc1Jlc29sdmVOb2RlKCkpOworICAgICAgICAgICAgb3B0aW9uYWxDaGFpbi0+c2V0RXhw
cihtYWtlRGVsZXRlTm9kZShsb2NhdGlvbiwgb3B0aW9uYWxDaGFpbi0+ZXhwcigpLCBzdGFydCwg
ZGl2b3QsIGVuZCkpOworICAgICAgICAgICAgcmV0dXJuIG9wdGlvbmFsQ2hhaW47CisgICAgICAg
IH0KKyAgICB9CisKICAgICBpZiAoIWV4cHItPmlzTG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgRGVsZXRlVmFsdWVOb2RlKGxvY2F0aW9uLCBleHByKTsKICAg
ICBpZiAoZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7CkBAIC0xMzQ1LDEzICsxMzYwLDE0IEBAIEV4
cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0WE9yTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByCiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQml0
WE9yTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0K
IAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHBy
ZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgpCitFeHBy
ZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNC
YXNlV2FzU3VwZXIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNhbGxPckFwcGx5Q2hpbGREZXB0aCwgYm9vbCBpc09wdGlv
bmFsQ2FsbCkKIHsKICAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49IGRpdm90LmxpbmVTdGFydE9m
ZnNldCk7CiAgICAgaWYgKGZ1bmMtPmlzU3VwZXJOb2RlKCkpCiAgICAgICAgIHVzZXNTdXBlckNh
bGwoKTsKIAogICAgIGlmIChmdW5jLT5pc0J5dGVjb2RlSW50cmluc2ljTm9kZSgpKSB7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQoaXNPcHRpb25hbENhbGwsICFpc09wdGlvbmFsQ2FsbCk7CiAgICAg
ICAgIEJ5dGVjb2RlSW50cmluc2ljTm9kZSogaW50cmluc2ljID0gc3RhdGljX2Nhc3Q8Qnl0ZWNv
ZGVJbnRyaW5zaWNOb2RlKj4oZnVuYyk7CiAgICAgICAgIGlmIChpbnRyaW5zaWMtPnR5cGUoKSA9
PSBCeXRlY29kZUludHJpbnNpY05vZGU6OlR5cGU6OkNvbnN0YW50KQogICAgICAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKEJ5dGVjb2RlSW50
cmluc2ljTm9kZTo6VHlwZTo6RnVuY3Rpb24sIGxvY2F0aW9uLCBpbnRyaW5zaWMtPmVtaXR0ZXIo
KSwgaW50cmluc2ljLT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZv
dEVuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCmluZGV4IGU5OGNkYjVl
NTllMjMwNzJjMTkwMThmODdkMTBjMmQ0NTJkOWNkMzkuLmYxYmQ2MzZkNmY0NjQ3NzEyZGIwNDRk
ZjgxMmZmZmQ2ZGExNzQyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTGV4ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3Bw
CkBAIC0yMTU3LDEwICsyMTU3LDE3IEBAIHN0YXJ0OgogICAgICAgICBicmVhazsKICAgICBjYXNl
IENoYXJhY3RlclF1ZXN0aW9uOgogICAgICAgICBzaGlmdCgpOwotICAgICAgICBpZiAoT3B0aW9u
czo6dXNlTnVsbGlzaENvYWxlc2NpbmcoKSAmJiBtX2N1cnJlbnQgPT0gJz8nKSB7Ci0gICAgICAg
ICAgICBzaGlmdCgpOwotICAgICAgICAgICAgdG9rZW4gPSBDT0FMRVNDRTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBpZiAoT3B0aW9uczo6dXNlTnVsbGlzaEF3YXJlT3BlcmF0b3JzKCkp
IHsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJz8nKSB7CisgICAgICAgICAgICAgICAg
c2hpZnQoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IENPQUxFU0NFOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fY3VycmVudCA9PSAn
LicgJiYgIWlzQVNDSUlEaWdpdChwZWVrKDEpKSkgeworICAgICAgICAgICAgICAgIHNoaWZ0KCk7
CisgICAgICAgICAgICAgICAgdG9rZW4gPSBRVUVTVElPTkRPVDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICB0b2tlbiA9IFFVRVNUSU9O
OwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZUNvbnN0cnVjdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
Q29uc3RydWN0b3JzLmgKaW5kZXggZDQxZTNhZWQ4ZTQ1ZjdhOGUyZmQzMWMyNDQ3N2RlY2NiOGQ1
NjQwZi4uMDY4YjI2YzgyOGEzNmViNmVlZTVhZDI0ZDU0MDUxMTkzMTg4ZmJiNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKQEAgLTY3Niw2
ICs2NzYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAorICAgIGlubGluZSBP
cHRpb25hbENoYWluTm9kZTo6T3B0aW9uYWxDaGFpbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCisgICAgICAgIDogRXhwcmVzc2lvbk5v
ZGUobG9jYXRpb24pCisgICAgICAgICwgbV9leHByKGV4cHIpCisgICAgeworICAgIH0KKwogICAg
IGlubGluZSBDb25kaXRpb25hbE5vZGU6OkNvbmRpdGlvbmFsTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbG9naWNhbCwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUo
bG9jYXRpb24pCiAgICAgICAgICwgbV9sb2dpY2FsKGxvZ2ljYWwpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmgKaW5kZXggODZmZGFmM2QwNGZkMGQ4ZjdmNDg3ZDE3NzM3N2UyYTM3ZTk1
YTc4Ny4uMTJlZGVmZjU5ZDMxYjM5ODhlZTYwZDVlMmFmM2FkNmI3NDcwOTZhMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMjA1LDYgKzIwNSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCeXRlY29kZUludHJpbnNpY05vZGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCaW5hcnlPcE5vZGUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlv
bkNhbGwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNP
cHRpb25hbENoYWluKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgICAgICB2aXJ0dWFs
IHZvaWQgZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KEJ5dGVjb2RlR2VuZXJhdG9yJiwg
TGFiZWwmLCBMYWJlbCYsIEZhbGxUaHJvdWdoTW9kZSk7CiAKQEAgLTIxMiw4ICsyMTMsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVzdWx0VHlwZSByZXN1bHREZXNjcmlwdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXN1bHRUeXBlOyB9CiAKKyAgICAgICAgYm9vbCBpc09wdGlvbmFs
Q2hhaW5CYXNlKCkgY29uc3QgeyByZXR1cm4gbV9pc09wdGlvbmFsQ2hhaW5CYXNlOyB9CisgICAg
ICAgIHZvaWQgc2V0SXNPcHRpb25hbENoYWluQmFzZSgpIHsgbV9pc09wdGlvbmFsQ2hhaW5CYXNl
ID0gdHJ1ZTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVzdWx0VHlwZSBtX3Jlc3VsdFR5
cGU7CisgICAgICAgIGJvb2wgbV9pc09wdGlvbmFsQ2hhaW5CYXNlIHsgZmFsc2UgfTsKICAgICB9
OwogCiAgICAgY2xhc3MgU3RhdGVtZW50Tm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTEzMTYsNiAr
MTMyMSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhw
cjI7CiAgICAgfTsKIAorICAgIGNsYXNzIE9wdGlvbmFsQ2hhaW5Ob2RlIGZpbmFsIDogcHVibGlj
IEV4cHJlc3Npb25Ob2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE9wdGlvbmFsQ2hhaW5Ob2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKik7CisKKyAgICAgICAgdm9p
ZCBzZXRFeHByKEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IG1fZXhwciA9IGV4cHI7IH0KKyAgICAg
ICAgRXhwcmVzc2lvbk5vZGUqIGV4cHIoKSBjb25zdCB7IHJldHVybiBtX2V4cHI7IH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CisKKyAgICAgICAgYm9vbCBpc09wdGlv
bmFsQ2hhaW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgRXhw
cmVzc2lvbk5vZGUqIG1fZXhwcjsKKyAgICB9OworCiAgICAgLy8gVGhlIHRlcm5hcnkgb3BlcmF0
b3IsICJtX2xvZ2ljYWwgPyBtX2V4cHIxIDogbV9leHByMiIKICAgICBjbGFzcyBDb25kaXRpb25h
bE5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBmOGRiZTcxOTZmMTExNzE2ZDBh
NThmN2Y1N2UzZjhmNjdiN2EyYWNmLi5lZmYwZjZkMjMxZWFlNjcyZGFmNTM1OWQ5YjVkY2EzMTQy
NzZmNzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC00ODA4
LDEwMyArNDgwOCwxMzYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVz
c2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXMKICAgICB9CiAKICAgICBm
YWlsSWZGYWxzZShiYXNlLCAiQ2Fubm90IHBhcnNlIGJhc2UgZXhwcmVzc2lvbiIpOwotICAgIHdo
aWxlICh0cnVlKSB7Ci0gICAgICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwotICAgICAg
ICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7Ci0gICAgICAgIGNhc2UgT1BFTkJSQUNLRVQ6IHsK
LSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwot
ICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBv
c2l0aW9uKCk7CisKKyAgICBkbyB7CisgICAgICAgIFRyZWVFeHByZXNzaW9uIG9wdGlvbmFsQ2hh
aW5CYXNlID0gMDsKKyAgICAgICAgSlNUb2tlbkxvY2F0aW9uIG9wdGlvbmFsQ2hhaW5Mb2NhdGlv
bjsKKyAgICAgICAgSlNUb2tlblR5cGUgdHlwZSA9IG1fdG9rZW4ubV90eXBlOworCisgICAgICAg
IGlmIChtYXRjaChRVUVTVElPTkRPVCkpIHsKKyAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1
ZShuZXdDb3VudCwgIkNhbm5vdCBjYWxsIGNvbnN0cnVjdG9yIGluIGFuIG9wdGlvbmFsIGNoYWlu
Iik7CisgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3VwZXIsICJzdXBlciBp
cyBub3QgdmFsaWQgaW4gdGhpcyBjb250ZXh0Iik7CisgICAgICAgICAgICBvcHRpb25hbENoYWlu
QmFzZSA9IGJhc2U7CisgICAgICAgICAgICBvcHRpb25hbENoYWluTG9jYXRpb24gPSB0b2tlbkxv
Y2F0aW9uKCk7CisKKyAgICAgICAgICAgIFNhdmVQb2ludCBzYXZlUG9pbnQgPSBjcmVhdGVTYXZl
UG9pbnQoKTsKICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgIGludCBub25MSFNDb3Vu
dCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBpbnQgaW5pdGlhbEFz
c2lnbm1lbnRzID0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQ7Ci0gICAgICAgICAgICBU
cmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIHN1YnNjcmlwdCBleHBy
ZXNzaW9uIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVCcmFja2V0QWNjZXNz
KHN0YXJ0TG9jYXRpb24sIGJhc2UsIHByb3BlcnR5LCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9w
YXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVu
ZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKFVO
TElLRUxZKGJhc2VJc1N1cGVyICYmIGN1cnJlbnRTY29wZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkp
Ci0gICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uU2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1
bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaGFu
ZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIsICJzdWJzY3JpcHQg
ZXhwcmVzc2lvbiIpOwotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5v
bkxIU0NvdW50OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobWF0Y2goT1BF
TkJSQUNLRVQpIHx8IG1hdGNoKE9QRU5QQVJFTikgfHwgbWF0Y2goQkFDS1FVT1RFKSkKKyAgICAg
ICAgICAgICAgICB0eXBlID0gbV90b2tlbi5tX3R5cGU7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB0eXBlID0gRE9UOworICAgICAgICAgICAgICAgIHJlc3RvcmVTYXZlUG9p
bnQoc2F2ZVBvaW50KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjYXNlIE9Q
RU5QQVJFTjogewotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lv
bkNvdW50Kys7Ci0gICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5v
bkxIU0NvdW50OwotICAgICAgICAgICAgaWYgKG5ld0NvdW50KSB7Ci0gICAgICAgICAgICAgICAg
bmV3Q291bnQtLTsKLSAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5k
ID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgICAgICBUcmVlQXJndW1lbnRz
IGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQpOwotICAgICAgICAgICAgICAgIGZh
aWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50cyIpOwotICAg
ICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2Us
IGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQ
b3NpdGlvbigpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90
IHVzZWRWYXJpYWJsZXNTaXplID0gY3VycmVudFNjb3BlKCktPmN1cnJlbnRVc2VkVmFyaWFibGVz
U2l6ZSgpOworCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBsb2NhdGlvbiA9
IHRva2VuTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBPUEVOQlJBQ0tFVDogeworICAgICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9u
VHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwogICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9u
IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwotICAgICAgICAgICAgICAg
IE9wdGlvbmFsPENhbGxPckFwcGx5RGVwdGhTY29wZT4gY2FsbE9yQXBwbHlEZXB0aFNjb3BlOwot
ICAgICAgICAgICAgICAgIHJlY29yZENhbGxPckFwcGx5RGVwdGg8VHJlZUJ1aWxkZXI+KHRoaXMs
ICptX3ZtLCBjYWxsT3JBcHBseURlcHRoU2NvcGUsIGJhc2UpOworICAgICAgICAgICAgICAgIG5l
eHQoKTsKKyAgICAgICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5v
bkxIU0NvdW50OworICAgICAgICAgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX3Bh
cnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudDsKKyAgICAgICAgICAgICAgICBUcmVlRXhwcmVzc2lv
biBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBm
YWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJzZSBzdWJzY3JpcHQgZXhwcmVzc2lvbiIp
OworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3Moc3Rh
cnRMb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRpYWxBc3NpZ25tZW50cyAhPSBtX3BhcnNl
clN0YXRlLmFzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0
b2tlbkVuZFBvc2l0aW9uKCkpOwogCi0gICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1
bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoYmFzZUlzU3VwZXIgJiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uU2NvcGUoKS0+c2V0SW5uZXJBcnJv
d0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKIAotICAgICAgICAgICAgICAgIGlmIChiYXNl
SXNBc3luY0tleXdvcmQgJiYgKCFhcmd1bWVudHMgfHwgbWF0Y2goQVJST1dGVU5DVElPTikpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT5yZXZlcnRUb1ByZXZpb3VzVXNl
ZFZhcmlhYmxlcyh1c2VkVmFyaWFibGVzU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcmNl
Q2xhc3NpZnlFeHByZXNzaW9uRXJyb3IoRXJyb3JJbmRpY2F0ZXNBc3luY0Fycm93RnVuY3Rpb24p
OwotICAgICAgICAgICAgICAgICAgICBmYWlsRHVlVG9VbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9T
RUJSQUNLRVQsICJdIiwgImVuZCIsICJzdWJzY3JpcHQgZXhwcmVzc2lvbiIpOworICAgICAgICAg
ICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgT1BFTlBBUkVO
OiB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNv
dW50Kys7CisgICAgICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5u
b25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBpZiAobmV3Q291bnQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbmV3Q291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24g
ZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAg
ICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBj
YWxsIGFyZ3VtZW50cyIpOworICAgICAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVh
dGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwgZXhw
cmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzZWRWYXJpYWJsZXNTaXplID0gY3Vy
cmVudFNjb3BlKCktPmN1cnJlbnRVc2VkVmFyaWFibGVzU2l6ZSgpOworICAgICAgICAgICAgICAg
ICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24o
KTsKKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWw8Q2FsbE9yQXBwbHlEZXB0aFNjb3BlPiBj
YWxsT3JBcHBseURlcHRoU2NvcGU7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZENhbGxPckFw
cGx5RGVwdGg8VHJlZUJ1aWxkZXI+KHRoaXMsICptX3ZtLCBjYWxsT3JBcHBseURlcHRoU2NvcGUs
IGJhc2UpOworCisgICAgICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0g
cGFyc2VBcmd1bWVudHMoY29udGV4dCk7CiAKLSAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShh
cmd1bWVudHMsICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgICAg
ICBpZiAoYmFzZUlzU3VwZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgU2NvcGVSZWYgZnVuY3Rp
b25TY29wZSA9IGN1cnJlbnRGdW5jdGlvblNjb3BlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghZnVuY3Rpb25TY29wZS0+c2V0SGFzRGlyZWN0U3VwZXIoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSXQgdW5uZWNlc3NhcnkgdG8gY2hlY2sgb2YgdXNpbmcgc3VwZXIgZHVyaW5n
IHJlcGFyc2luZyBvbmUgbW9yZSB0aW1lLiBBbHNvIGl0IGNhbiBsZWFkIHRvIHN5bnRheCBlcnJv
cgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBhcnJvdyBmdW5jdGlvbiBi
ZWNhdXNlIGR1cmluZyByZXBhcnNpbmcgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGN1cnJlbnRs
eSBwYXJzZSB0aGUgYXJyb3cgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlu
c2lkZSBvZiB0aGUgY29uc3RydWN0b3Igb3IgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX2xleGVyLT5pc1JlcGFyc2luZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTY29wZVJlZiBjbG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlID0gY2xv
c2VzdFBhcmVudE9yZGluYXJ5RnVuY3Rpb25Ob25MZXhpY2FsU2NvcGUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvcktpbmQgZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQg
PSAhZnVuY3Rpb25TY29wZS0+aXNBcnJvd0Z1bmN0aW9uKCkgJiYgIWNsb3Nlc3RPcmRpbmFyeUZ1
bmN0aW9uU2NvcGUtPmlzRXZhbENvbnRleHQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA/IGZ1bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9yS2luZCgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZS0+Y29uc3RydWN0
b3JLaW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVl
KGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kID09IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgInN1cGVy
IGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgIT0gQ29uc3Ry
dWN0b3JLaW5kOjpFeHRlbmRzLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIp
OworICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZUlzQXN5bmNLZXl3b3JkICYmICghYXJndW1l
bnRzIHx8IG1hdGNoKEFSUk9XRlVOQ1RJT04pKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFNjb3BlKCktPnJldmVydFRvUHJldmlvdXNVc2VkVmFyaWFibGVzKHVzZWRWYXJpYWJs
ZXNTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlQ2xhc3NpZnlFeHByZXNzaW9u
RXJyb3IoRXJyb3JJbmRpY2F0ZXNBc3luY0Fycm93RnVuY3Rpb24pOworICAgICAgICAgICAgICAg
ICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMsICJDYW5ub3Qg
cGFyc2UgY2FsbCBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VJc1N1
cGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTY29wZVJlZiBmdW5jdGlvblNjb3BlID0g
Y3VycmVudEZ1bmN0aW9uU2NvcGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnVu
Y3Rpb25TY29wZS0+c2V0SGFzRGlyZWN0U3VwZXIoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEl0IHVubmVjZXNzYXJ5IHRvIGNoZWNrIG9mIHVzaW5nIHN1cGVyIGR1cmluZyBy
ZXBhcnNpbmcgb25lIG1vcmUgdGltZS4gQWxzbyBpdCBjYW4gbGVhZCB0byBzeW50YXggZXJyb3IK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGFycm93IGZ1bmN0aW9u
IGJlY2F1c2UgZHVyaW5nIHJlcGFyc2luZyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgd2UgY3VycmVu
dGx5IHBhcnNlIHRoZSBhcnJvdyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGluc2lkZSBvZiB0aGUgY29uc3RydWN0b3Igb3IgbWV0aG9kLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9sZXhlci0+aXNSZXBhcnNpbmdGdW5jdGlvbigpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjb3BlUmVmIGNsb3Nlc3RPcmRpbmFyeUZ1bmN0
aW9uU2NvcGUgPSBjbG9zZXN0UGFyZW50T3JkaW5hcnlGdW5jdGlvbk5vbkxleGljYWxTY29wZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvcktpbmQgZnVuY3Rp
b25Db25zdHJ1Y3RvcktpbmQgPSAhZnVuY3Rpb25TY29wZS0+aXNBcnJvd0Z1bmN0aW9uKCkgJiYg
IWNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmlzRXZhbENvbnRleHQoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmdW5jdGlvblNjb3BlLT5jb25zdHJ1Y3Rvcktp
bmQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbG9zZXN0T3JkaW5h
cnlGdW5jdGlvblNjb3BlLT5jb25zdHJ1Y3RvcktpbmQoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kID09
IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRl
eHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVl
KGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kICE9IENvbnN0cnVjdG9yS2luZDo6RXh0ZW5kcywgInN1
cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNT
dXBlckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb25TY29wZS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyQ2FsbCgp
OworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNPcHRpb25hbENhbGwgPSBvcHRpb25hbENo
YWluTG9jYXRpb24uZW5kT2Zmc2V0ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihleHByZXNzaW9u
RW5kLm9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5j
dGlvbkNhbGxOb2RlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBh
cmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJl
c3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGNhbGxPckFwcGx5RGVwdGhTY29wZSA/
IGNhbGxPckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFuY2VUb0lubmVybW9zdENoaWxkKCkgOiAwLCBp
c09wdGlvbmFsQ2FsbCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzT3B0aW9uYWxDYWxs
KQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxDaGFpbkJhc2UgPSBiYXNlOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5tYWtlRnVuY3Rp
b25DYWxsTm9kZShzdGFydExvY2F0aW9uLCBiYXNlLCBwcmV2aW91c0Jhc2VXYXNTdXBlciwgYXJn
dW1lbnRzLCBleHByZXNzaW9uU3RhcnQsCi0gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25F
bmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGNhbGxPckFwcGx5RGVwdGhTY29wZSA/IGNhbGxP
ckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFuY2VUb0lubmVybW9zdENoaWxkKCkgOiAwKTsKKyAgICAg
ICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3BhcnNlclN0
YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIERPVDogewotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25U
cml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHBy
ZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgIG5leHRFeHBl
Y3RJZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6
OkRvbnRCdWlsZEtleXdvcmRzKTsKLSAgICAgICAgICAgIG1hdGNoT3JGYWlsKElERU5ULCAiRXhw
ZWN0ZWQgYSBwcm9wZXJ0eSBuYW1lIGFmdGVyICcuJyIpOwotICAgICAgICAgICAgYmFzZSA9IGNv
bnRleHQuY3JlYXRlRG90QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIG1fdG9rZW4ubV9kYXRh
LmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24o
KSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIgJiYgY3VycmVudFNjb3Bl
KCktPmlzQXJyb3dGdW5jdGlvbigpKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb25T
Y29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJQcm9wZXJ0eSgpOwotICAgICAg
ICAgICAgbmV4dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBCQUNLUVVPVEU6IHsKLSAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNlSXNTdXBl
ciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGFnIGZvciB0YWdnZWQgdGVtcGxhdGVzIik7Ci0gICAg
ICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRp
b24oKTsKLSAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhT
Q291bnQ7Ci0gICAgICAgICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6VGVtcGxhdGVMaXRlcmFs
IHRlbXBsYXRlTGl0ZXJhbCA9IHBhcnNlVGVtcGxhdGVMaXRlcmFsKGNvbnRleHQsIExleGVyVHlw
ZTo6UmF3U3RyaW5nc0J1aWxkTW9kZTo6QnVpbGRSYXdTdHJpbmdzKTsKLSAgICAgICAgICAgIGZh
aWxJZkZhbHNlKHRlbXBsYXRlTGl0ZXJhbCwgIkNhbm5vdCBwYXJzZSB0ZW1wbGF0ZSBsaXRlcmFs
Iik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVUYWdnZWRUZW1wbGF0ZShzdGFy
dExvY2F0aW9uLCBiYXNlLCB0ZW1wbGF0ZUxpdGVyYWwsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVz
c2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBtX3BhcnNlclN0
YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBtX3NlZW5UYWdnZWRU
ZW1wbGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgZ290byBlbmRNZW1iZXJFeHByZXNzaW9uOworICAgICAgICAg
ICAgY2FzZSBET1Q6IHsKKyAgICAgICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxF
eHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNz
aW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBuZXh0RXhw
ZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVy
OjpEb250QnVpbGRLZXl3b3Jkcyk7CisgICAgICAgICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQs
ICJFeHBlY3RlZCBhIHByb3BlcnR5IG5hbWUgYWZ0ZXIgIiwgb3B0aW9uYWxDaGFpbkJhc2UgPyAi
Jz8uJyIgOiAiJy4nIik7CisgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90
QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNz
aW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7CisgICAgICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1cGVyICYmIGN1cnJlbnRTY29wZSgpLT5pc0Fycm93
RnVuY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblNjb3BlKCkt
PnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNTdXBlclByb3BlcnR5KCk7CisgICAgICAgICAgICAg
ICAgbmV4dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBCQUNLUVVPVEU6IHsKKyAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRy
dWUob3B0aW9uYWxDaGFpbkJhc2UsICJDYW5ub3QgdXNlIHRhZ2dlZCB0ZW1wbGF0ZXMgaW4gYW4g
b3B0aW9uYWwgY2hhaW4iKTsKKyAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFz
ZUlzU3VwZXIsICJDYW5ub3QgdXNlIHN1cGVyIGFzIHRhZyBmb3IgdGFnZ2VkIHRlbXBsYXRlcyIp
OworICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9r
ZW5FbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fcGFy
c2VyU3RhdGUubm9uTEhTQ291bnQ7CisgICAgICAgICAgICAgICAgdHlwZW5hbWUgVHJlZUJ1aWxk
ZXI6OlRlbXBsYXRlTGl0ZXJhbCB0ZW1wbGF0ZUxpdGVyYWwgPSBwYXJzZVRlbXBsYXRlTGl0ZXJh
bChjb250ZXh0LCBMZXhlclR5cGU6OlJhd1N0cmluZ3NCdWlsZE1vZGU6OkJ1aWxkUmF3U3RyaW5n
cyk7CisgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UodGVtcGxhdGVMaXRlcmFsLCAiQ2Fubm90
IHBhcnNlIHRlbXBsYXRlIGxpdGVyYWwiKTsKKyAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4
dC5jcmVhdGVUYWdnZWRUZW1wbGF0ZShzdGFydExvY2F0aW9uLCBiYXNlLCB0ZW1wbGF0ZUxpdGVy
YWwsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24o
KSk7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5vbkxIU0Nv
dW50OworICAgICAgICAgICAgICAgIG1fc2VlblRhZ2dlZFRlbXBsYXRlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgZ290byBlbmRPZkNoYWluOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcHJldmlvdXNCYXNlV2FzU3VwZXIgPSBiYXNlSXNTdXBlcjsKKyAgICAgICAgICAgIGJhc2VJ
c1N1cGVyID0gZmFsc2U7CisgICAgICAgICAgICB0eXBlID0gbV90b2tlbi5tX3R5cGU7CiAgICAg
ICAgIH0KLSAgICAgICAgcHJldmlvdXNCYXNlV2FzU3VwZXIgPSBiYXNlSXNTdXBlcjsKLSAgICAg
ICAgYmFzZUlzU3VwZXIgPSBmYWxzZTsKLSAgICB9Ci1lbmRNZW1iZXJFeHByZXNzaW9uOgorZW5k
T2ZDaGFpbjoKKyAgICAgICAgaWYgKG9wdGlvbmFsQ2hhaW5CYXNlKQorICAgICAgICAgICAgYmFz
ZSA9IGNvbnRleHQuY3JlYXRlT3B0aW9uYWxDaGFpbihvcHRpb25hbENoYWluTG9jYXRpb24sIG9w
dGlvbmFsQ2hhaW5CYXNlLCBiYXNlKTsKKyAgICB9IHdoaWxlIChtYXRjaChRVUVTVElPTkRPVCkp
OworCiAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGJhc2VJc1N1cGVyLCAic3VwZXIgaXMgbm90IHZh
bGlkIGluIHRoaXMgY29udGV4dCIpOwogICAgIHdoaWxlIChuZXdDb3VudC0tKQogICAgICAgICBi
YXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBleHByZXNzaW9uU3Rh
cnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyVG9rZW5zLmgKaW5kZXggMTVjYTVlYWYyOGU3NTkyZjQzZjNkY2U0MWU4ZTQxZTYx
YTllODEzNi4uNzIwNjRiOTI4NDgxNjZmNmRlMmIyM2Y4YTNmNThjOTgxYjc2NzllOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCkBAIC0xMzYsNiArMTM2
LDcgQEAgZW51bSBKU1Rva2VuVHlwZSB7CiAgICAgT1JFUVVBTCwKICAgICBET1RET1RET1QsCiAg
ICAgQVJST1dGVU5DVElPTiwKKyAgICBRVUVTVElPTkRPVCwKICAgICBMYXN0VW50YWdnZWRUb2tl
biwKIAogICAgIC8vIEJlZ2luIHRhZ2dlZCB0b2tlbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9TeW50YXhDaGVja2VyLmgKaW5kZXggNDE5OTU4YmVkYjQyODExYjE2Mjg0MDFjZDRh
NDI5OGE1YTVjZjM3Ni4uNjFkZDc1MDA0YmM0N2JmYTU0ZjM1ZWQ3MWRlMjJmZGU0N2NiMmQ5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKQEAgLTcz
LDcgKzczLDcgQEAgcHVibGljOgogICAgICAgICBSZXNvbHZlRXZhbEV4cHIsIFJlc29sdmVFeHBy
LCBJbnRlZ2VyRXhwciwgRG91YmxlRXhwciwgU3RyaW5nRXhwciwgQmlnSW50RXhwciwKICAgICAg
ICAgVGhpc0V4cHIsIE51bGxFeHByLCBCb29sRXhwciwgUmVnRXhwRXhwciwgT2JqZWN0TGl0ZXJh
bEV4cHIsCiAgICAgICAgIEZ1bmN0aW9uRXhwciwgQ2xhc3NFeHByLCBTdXBlckV4cHIsIEltcG9y
dEV4cHIsIEJyYWNrZXRFeHByLCBEb3RFeHByLCBDYWxsRXhwciwKLSAgICAgICAgTmV3RXhwciwg
UHJlRXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5RXhwciwKKyAgICAgICAgTmV3RXhw
ciwgUHJlRXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5RXhwciwgT3B0aW9uYWxDaGFp
biwKICAgICAgICAgQ29uZGl0aW9uYWxFeHByLCBBc3NpZ25tZW50RXhwciwgVHlwZW9mRXhwciwK
ICAgICAgICAgRGVsZXRlRXhwciwgQXJyYXlMaXRlcmFsRXhwciwgQmluZGluZ0Rlc3RydWN0dXJp
bmcsIFJlc3RQYXJhbWV0ZXIsCiAgICAgICAgIEFycmF5RGVzdHJ1Y3R1cmluZywgT2JqZWN0RGVz
dHJ1Y3R1cmluZywgU291cmNlRWxlbWVudHNSZXN1bHQsCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRTdHJpbmdzID0gTGV4ZXJG
bGFnc0RvbnRCdWlsZFN0cmluZ3M7CiAKICAgICBpbnQgY3JlYXRlU291cmNlRWxlbWVudHMoKSB7
IHJldHVybiBTb3VyY2VFbGVtZW50c1Jlc3VsdDsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VG
dW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgYm9vbCwgaW50LCBp
bnQsIGludCwgaW50LCBzaXplX3QpIHsgcmV0dXJuIENhbGxFeHByOyB9CisgICAgRXhwcmVzc2lv
blR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVz
c2lvblR5cGUsIGJvb2wsIGludCwgaW50LCBpbnQsIGludCwgc2l6ZV90LCBib29sKSB7IHJldHVy
biBDYWxsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNvbW1hRXhwcihjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSBleHByKSB7IHJldHVybiBleHByOyB9CiAg
ICAgRXhwcmVzc2lvblR5cGUgYXBwZW5kVG9Db21tYUV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgRXhwcmVzc2lvblR5cGUmIGhlYWQsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSBu
ZXh0KSB7IGhlYWQgPSBuZXh0OyByZXR1cm4gbmV4dDsgfQogICAgIEV4cHJlc3Npb25UeXBlIG1h
a2VBc3NpZ25Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBPcGVy
YXRvciwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGJvb2wsIGludCwgaW50LCBpbnQpIHsgcmV0dXJu
IEFzc2lnbm1lbnRFeHByOyB9CkBAIC0xODQsNiArMTg0LDcgQEAgcHVibGljOgogICAgIEV4cHJl
c3Npb25UeXBlIGNyZWF0ZVJlZ0V4cChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVu
dGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBmbGFncywgaW50KSB7IHJldHVybiBZ
YXJyOjpoYXNFcnJvcihZYXJyOjpjaGVja1N5bnRheChwYXR0ZXJuLnN0cmluZygpLCBmbGFncy5z
dHJpbmcoKSkpID8gMCA6IFJlZ0V4cEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVO
ZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwg
aW50LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVO
ZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCkg
eyByZXR1cm4gTmV3RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9wdGlvbmFsQ2hh
aW4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBl
KSB7IHJldHVybiBPcHRpb25hbENoYWluOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29u
ZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHBy
ZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIENvbmRpdGlvbmFsRXhwcjsgfQog
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBB
c3NpZ25tZW50Q29udGV4dCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KICAgICBFeHByZXNz
aW9uVHlwZSBjcmVhdGVFbXB0eVZhckV4cHJlc3Npb24oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
Y29uc3QgSWRlbnRpZmllciYpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCmluZGV4IDE1
NmMxODBlMTgzNDdmNDdjOTM5MDQ1OWU1ZDIxNzUxMWI5ODMxZmYuLjA3MTQwYzc2MWI0OTgzNDgz
Yjg1MmIxNGUzNmJkMWQxOTA4ZTZiYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCkBAIC0xNzYsNiArMTc2LDEwIEBAIHN0YXRp
YyBTdHJpbmcgZnVuY3Rpb25DYWxsQmFzZShjb25zdCBTdHJpbmcmIHNvdXJjZVRleHQpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKKyAgICAvLyBEb24ndCBkaXNwbGF5IHRoZSA/
LiBvZiBhbiBvcHRpb25hbCBjYWxsLgorICAgIGlmIChpZHggPiAyICYmIHNvdXJjZVRleHRbaWR4
XSA9PSAnLicgJiYgc291cmNlVGV4dFtpZHggLSAxXSA9PSAnPycpCisgICAgICAgIGlkeCAtPSAy
OworCiAgICAgcmV0dXJuIHNvdXJjZVRleHQubGVmdChpZHggKyAxKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDM2NmM0MTljNjljOGU4MmY3MzBlMWNk
MTQyZjRiN2I1OTBjOTA3YjkuLjAzNjkzOGI1OWEyYWM4OWRhMTg3ZGRmNmUwODVjZTA2NmU3MDlk
NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQ5NSw3ICs0
OTUsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluZ0FwaSA9IGZh
bHNlOwogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlSZWZlcmVuY2VzLCBmYWxzZSwgTm9ybWFs
LCAiQWxsb3cgdHlwZXMgZnJvbSB0aGUgd2FzbSByZWZlcmVuY2VzIHNwZWMuIikgXAogICAgIHYo
Ym9vbCwgdXNlV2Vha1JlZnMsIGZhbHNlLCBOb3JtYWwsICJFeHBvc2UgdGhlIFdlYWtSZWYgY29u
c3RydWN0b3IuIikgXAogICAgIHYoYm9vbCwgdXNlQmlnSW50LCBmYWxzZSwgTm9ybWFsLCAiSWYg
dHJ1ZSwgd2Ugd2lsbCBlbmFibGUgQmlnSW50IHN1cHBvcnQuIikgXAotICAgIHYoYm9vbCwgdXNl
TnVsbGlzaENvYWxlc2NpbmcsIGZhbHNlLCBOb3JtYWwsICJFbmFibGUgc3VwcG9ydCBmb3IgdGhl
ID8/IG9wZXJhdG9yLiIpIFwKKyAgICB2KGJvb2wsIHVzZU51bGxpc2hBd2FyZU9wZXJhdG9ycywg
ZmFsc2UsIE5vcm1hbCwgIkVuYWJsZSBzdXBwb3J0IGZvciA/LiBhbmQgPz8gb3BlcmF0b3JzLiIp
IFwKICAgICB2KGJvb2wsIHVzZUFycmF5QWxsb2NhdGlvblByb2ZpbGluZywgdHJ1ZSwgTm9ybWFs
LCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ugb3VyIG5vcm1hbCBhcnJheSBhbGxvY2F0aW9uIHByb2Zp
bGluZy4gSWYgZmFsc2UsIHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUgd2lsbCBhbHdheXMgY2xhaW0g
dG8gYmUgdW5kZWNpZGVkLiIpIFwKICAgICB2KGJvb2wsIGZvcmNlUG9seVByb3RvLCBmYWxzZSwg
Tm9ybWFsLCAiSWYgdHJ1ZSwgY3JlYXRlX3RoaXMgd2lsbCBhbHdheXMgY3JlYXRlIGFuIG9iamVj
dCB3aXRoIGEgcG9seSBwcm90byBzdHJ1Y3R1cmUuIikgXAogICAgIHYoYm9vbCwgZm9yY2VNaW5p
Vk1Nb2RlLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgaXQgd2lsbCBmb3JjZSBtaW5pIFZNIG1v
ZGUgb24uIikgXApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDQ2OWRjZjU5MzhiODFlMjkwZDY2ODU1NjMzZDk2MWZjYjQyYjg2YmEuLjYxMjFiMmYx
NDU5YTc0Y2Q2MWY1MjFhMmI1ZGY2NWQ2MzMyOGExNDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxOS0wNy0zMSAg
Um9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CisKKyAgICAgICAgW0VTTmV4
dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisK
IDIwMTktMDgtMDEgIFpoaWZlaSBGYW5nICA8emhpZmVpX2ZhbmdAYXBwbGUuY29tPgogCiAgICAg
ICAgIHJlc3VsdHMud2Via2l0Lm9yZzogQ29sbGlzaW9uIGRldGVjdGlvbiBmb3IgZG90cyBpcyBv
ZmYgYnkgMiAqIGRvdE1hcmdpbgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggODNk
YzA2MmFiMjgyMTE2MWE5MzFjMmFiZTQzZGY1ZjY2OWE4OGRhOS4uMDk4NzIzNTM2MGQyNDQ0ZDE3
YmJlOWMzYThiZWFlMWJjOTFlOTk0ZSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNj
LXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBA
IC02OTksOCArNjk5LDggQEAgZGVmIHJ1bkJpZ0ludEVuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykKICAgICBydW4oImJpZy1pbnQtZW5hYmxlZCIsICItLXVzZUJpZ0ludD10cnVl
IiAsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAK
LWRlZiBydW5OdWxsaXNoQ29hbGVzY2luZ0VuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykKLSAgICBydW4oIm51bGxpc2gtY29hbGVzY2luZy1lbmFibGVkIiwgIi0tdXNlTnVsbGlz
aENvYWxlc2Npbmc9dHJ1ZSIgLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKSkKK2RlZiBydW5OdWxsaXNoQXdhcmVPcGVyYXRvcnNFbmFibGVkKCpvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpCisgICAgcnVuKCJudWxsaXNoLWF3YXJlLW9wZXJhdG9ycy1lbmFi
bGVkIiwgIi0tdXNlTnVsbGlzaEF3YXJlT3BlcmF0b3JzPXRydWUiICwgKihGVExfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVCgq
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAxNTU1OWVkZDZhMjM2MmY2ZDg1NzY1YTFiNGU4
OGYwN2UzZmZiNGRlLi5kMmRiYmU3YTY4YjE2Y2VmMDJlMTk3MmFlNjYwNDE4MjA5MTZjMmFiIDEw
MDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDE5LTA3LTMxICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bz
b255LmNvbT4KKworICAgICAgICBbRVNOZXh0XSBJbXBsZW1lbnQgb3B0aW9uYWwgY2hhaW5pbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDE5OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNz
L251bGxpc2gtY29hbGVzY2luZy5qczoKKyAgICAgICAgKiBzdHJlc3Mvb3B0aW9uYWwtY2hhaW5p
bmcuanM6IEFkZGVkLgorCiAyMDE5LTA4LTAxICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGlu
Z0Bzb255LmNvbT4KIAogICAgICAgICBVcGRhdGUgVGVzdDI2MiAoMjAxOS4wOC4wMSkKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qcyBiL0pTVGVzdHMvc3Ry
ZXNzL251bGxpc2gtY29hbGVzY2luZy5qcwppbmRleCA1OTU4ZjEyNzNhYjE2NDcxMzBhNmVkNmUx
Yjg2ZTVlMWY0NGE3YzRlLi5hNTI3MmVkNTQ1YWNmMDZjNThkZmQ5ODc1ZTA1Yzc1ZjdiMDRiMDUx
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanMKKysrIGIv
SlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzCkBAIC0xLDQgKzEsNCBAQAotLy9A
IHJ1bk51bGxpc2hDb2FsZXNjaW5nRW5hYmxlZAorLy9AIHJ1bk51bGxpc2hBd2FyZU9wZXJhdG9y
c0VuYWJsZWQKIAogZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgewogICAgIGlm
IChhY3R1YWwgIT09IGV4cGVjdGVkKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvb3B0aW9u
YWwtY2hhaW5pbmcuanMgYi9KU1Rlc3RzL3N0cmVzcy9vcHRpb25hbC1jaGFpbmluZy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yYTFlMjE4ZjNiZjhkYThjMjM4MGJhM2UxMzE5ZWI2NDBhZDczODMyCi0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcuanMKQEAgLTAsMCAr
MSwxMzcgQEAKKy8vQCBydW5OdWxsaXNoQXdhcmVPcGVyYXRvcnNFbmFibGVkCisKK2Z1bmN0aW9u
IHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3Rl
ZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290
ICR7YWN0dWFsfWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvd1N5bnRheEVycm9yKHNjcmlw
dCkgeworICAgIGxldCBlcnJvcjsKKyAgICB0cnkgeworICAgICAgICBldmFsKHNjcmlwdCk7Cisg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorCisgICAgaWYgKCEo
ZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikpCisgICAgICAgIHRocm93IG5ldyBFcnJvcign
RXhwZWN0ZWQgU3ludGF4RXJyb3IhJyk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93VHlwZUVy
cm9yKGZ1bmMpIHsKKyAgICBsZXQgZXJyb3I7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOwor
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKworICAgIGlmICgh
KGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdF
eHBlY3RlZCBUeXBlRXJyb3IhJyk7Cit9CisKK3Nob3VsZEJlKHVuZGVmaW5lZD8udmFsdWVPZigp
LCB1bmRlZmluZWQpOworc2hvdWxkQmUobnVsbD8udmFsdWVPZigpLCB1bmRlZmluZWQpOworc2hv
dWxkQmUodHJ1ZT8udmFsdWVPZigpLCB0cnVlKTsKK3Nob3VsZEJlKGZhbHNlPy52YWx1ZU9mKCks
IGZhbHNlKTsKK3Nob3VsZEJlKDA/LnZhbHVlT2YoKSwgMCk7CitzaG91bGRCZSgxPy52YWx1ZU9m
KCksIDEpOworc2hvdWxkQmUoJyc/LnZhbHVlT2YoKSwgJycpOworc2hvdWxkQmUoJ2hpJz8udmFs
dWVPZigpLCAnaGknKTsKK3Nob3VsZEJlKCh7fSk/LmNvbnN0cnVjdG9yLCBPYmplY3QpOworc2hv
dWxkQmUoKHsgeDogJ2hpJyB9KT8ueCwgJ2hpJyk7CitzaG91bGRCZShbXT8ubGVuZ3RoLCAwKTsK
K3Nob3VsZEJlKFsnaGknXT8ubGVuZ3RoLCAxKTsKKworc2hvdWxkQmUodW5kZWZpbmVkPy5bJ3Zh
bHVlT2YnXSgpLCB1bmRlZmluZWQpOworc2hvdWxkQmUobnVsbD8uWyd2YWx1ZU9mJ10oKSwgdW5k
ZWZpbmVkKTsKK3Nob3VsZEJlKHRydWU/LlsndmFsdWVPZiddKCksIHRydWUpOworc2hvdWxkQmUo
ZmFsc2U/LlsndmFsdWVPZiddKCksIGZhbHNlKTsKK3Nob3VsZEJlKDA/LlsndmFsdWVPZiddKCks
IDApOworc2hvdWxkQmUoMT8uWyd2YWx1ZU9mJ10oKSwgMSk7CitzaG91bGRCZSgnJz8uWyd2YWx1
ZU9mJ10oKSwgJycpOworc2hvdWxkQmUoJ2hpJz8uWyd2YWx1ZU9mJ10oKSwgJ2hpJyk7CitzaG91
bGRCZSgoe30pPy5bJ2NvbnN0cnVjdG9yJ10sIE9iamVjdCk7CitzaG91bGRCZSgoeyB4OiAnaGkn
IH0pPy5bJ3gnXSwgJ2hpJyk7CitzaG91bGRCZShbXT8uWydsZW5ndGgnXSwgMCk7CitzaG91bGRC
ZShbJ2hpJ10/LlswXSwgJ2hpJyk7CisKK3Nob3VsZEJlKHVuZGVmaW5lZD8uKCksIHVuZGVmaW5l
ZCk7CitzaG91bGRCZShudWxsPy4oKSwgdW5kZWZpbmVkKTsKK3Nob3VsZFRocm93VHlwZUVycm9y
KCgpID0+IHRydWU/LigpKTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+IGZhbHNlPy4oKSk7
CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAwPy4oKSk7CitzaG91bGRUaHJvd1R5cGVFcnJv
cigoKSA9PiAxPy4oKSk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAnJz8uKCkpOworc2hv
dWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gJ2hpJz8uKCkpOworc2hvdWxkVGhyb3dUeXBlRXJyb3Io
KCkgPT4gKHt9KT8uKCkpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHsgeDogJ2hpJyB9
KT8uKCkpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gW10/LigpKTsKK3Nob3VsZFRocm93
VHlwZUVycm9yKCgpID0+IFsnaGknXT8uKCkpOworCitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9
PiAoe30pPy5hWydiJ10pOworc2hvdWxkQmUoKHt9KT8uYT8uWydiJ10sIHVuZGVmaW5lZCk7Citz
aG91bGRCZShudWxsPy5hWydiJ10oKS5jLCB1bmRlZmluZWQpOworc2hvdWxkVGhyb3dUeXBlRXJy
b3IoKCkgPT4gKHt9KT8uWydhJ10uYik7CitzaG91bGRCZSgoe30pPy5bJ2EnXT8uYiwgdW5kZWZp
bmVkKTsKK3Nob3VsZEJlKG51bGw/LlsnYSddLmIoKVsnYyddLCB1bmRlZmluZWQpOworc2hvdWxk
VGhyb3dUeXBlRXJyb3IoKCkgPT4gKCgpID0+IHt9KT8uKCkoKSk7CitzaG91bGRCZSgoKCkgPT4g
e30pPy4oKT8uKCksIHVuZGVmaW5lZCk7CitzaG91bGRCZShudWxsPy4oKSgpLmFbJ2InXSwgdW5k
ZWZpbmVkKTsKKworY29uc3QgbzEgPSB7IGNvdW50OiAwLCBnZXQgeCgpIHsgdGhpcy5jb3VudCsr
OyByZXR1cm4gKCkgPT4ge307IH0gfTsKK28xLng/Lnk7CitzaG91bGRCZShvMS5jb3VudCwgMSk7
CitvMS54Py5bJ3knXTsKK3Nob3VsZEJlKG8xLmNvdW50LCAyKTsKK28xLng/LigpOworc2hvdWxk
QmUobzEuY291bnQsIDMpOworbnVsbD8uKG8xLngpOworc2hvdWxkQmUobzEuY291bnQsIDMpOwor
CitzaG91bGRCZShkZWxldGUgdW5kZWZpbmVkPy5mb28sIHRydWUpOworc2hvdWxkQmUoZGVsZXRl
IG51bGw/LmZvbywgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgdW5kZWZpbmVkPy5bJ2ZvbyddLCB0
cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBudWxsPy5bJ2ZvbyddLCB0cnVlKTsKK3Nob3VsZEJlKGRl
bGV0ZSB1bmRlZmluZWQ/LigpLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBudWxsPy4oKSwgdHJ1
ZSk7CisKK2NvbnN0IG8yID0geyB4OiAwLCB5OiAwLCB6KCkge30gfTsKK3Nob3VsZEJlKGRlbGV0
ZSBvMj8ueCwgdHJ1ZSk7CitzaG91bGRCZShvMi54LCB1bmRlZmluZWQpOworc2hvdWxkQmUoZGVs
ZXRlIG8yPy54LCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBvMj8uWyd5J10sIHRydWUpOworc2hv
dWxkQmUobzIueSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKGRlbGV0ZSBvMj8uWyd5J10sIHRydWUp
Oworc2hvdWxkQmUoZGVsZXRlIG8yLno/LigpLCB0cnVlKTsKKworZnVuY3Rpb24gZ3JlZXQobmFt
ZSkgeyByZXR1cm4gYGhleSwgJHtuYW1lfSR7dGhpcy5zdWZmaXggPz8gJy4nfWA7IH0KK3Nob3Vs
ZEJlKGV2YWw/LignZ3JlZXQoIndvcmxkIiknKSwgJ2hleSwgd29ybGQuJyk7CitzaG91bGRCZShn
cmVldD8uY2FsbCh7IHN1ZmZpeDogJyEnIH0sICd3b3JsZCcpLCAnaGV5LCB3b3JsZCEnKTsKK3No
b3VsZEJlKGdyZWV0LmNhbGw/Lih7IHN1ZmZpeDogJyEnIH0sICd3b3JsZCcpLCAnaGV5LCB3b3Js
ZCEnKTsKK3Nob3VsZEJlKG51bGw/LmNhbGwoeyBzdWZmaXg6ICchJyB9LCAnd29ybGQnKSwgdW5k
ZWZpbmVkKTsKK3Nob3VsZEJlKCh7fSkuY2FsbD8uKHsgc3VmZml4OiAnIScgfSwgJ3dvcmxkJyks
IHVuZGVmaW5lZCk7CitzaG91bGRCZShncmVldD8uYXBwbHkoeyBzdWZmaXg6ICc/JyB9LCBbJ3dv
cmxkJ10pLCAnaGV5LCB3b3JsZD8nKTsKK3Nob3VsZEJlKGdyZWV0LmFwcGx5Py4oeyBzdWZmaXg6
ICc/JyB9LCBbJ3dvcmxkJ10pLCAnaGV5LCB3b3JsZD8nKTsKK3Nob3VsZEJlKG51bGw/LmFwcGx5
KHsgc3VmZml4OiAnPycgfSwgWyd3b3JsZCddKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKCh7fSku
YXBwbHk/Lih7IHN1ZmZpeDogJz8nIH0sIFsnd29ybGQnXSksIHVuZGVmaW5lZCk7CisKK2NvbnN0
IG1hc3F1ZXJhZGVyID0gbWFrZU1hc3F1ZXJhZGVyKCk7CittYXNxdWVyYWRlci5iYXIgPSAzOwor
c2hvdWxkQmUobWFzcXVlcmFkZXI/LmJhciwgMyk7CitzaG91bGRCZShtYXNxdWVyYWRlcj8uWydi
YXInXSwgMyk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiBtYXNxdWVyYWRlcj8uKCkpOwor
CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjbGFzcyBDIHt9IGNsYXNzIEQgZXh0ZW5kcyBDIHsg
Zm9vKCkgeyByZXR1cm4gc3VwZXI/LmJhcjsgfSB9Jyk7CitzaG91bGRUaHJvd1N5bnRheEVycm9y
KCdjbGFzcyBDIHt9IGNsYXNzIEQgZXh0ZW5kcyBDIHsgZm9vKCkgeyByZXR1cm4gc3VwZXI/Llsi
YmFyIl07IH0gfScpOworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBjbGFzcyBE
IGV4dGVuZHMgQyB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcj8uKCk7IH0gfScpOworCitzaG91bGRU
aHJvd1N5bnRheEVycm9yKCdjb25zdCBvID0geyBDOiBjbGFzcyB7fSB9OyBuZXcgbz8uQygpOycp
CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjb25zdCBvID0geyBDOiBjbGFzcyB7fSB9OyBuZXcg
bz8uWyJDIl0oKTsnKQorc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBuZXcgQz8u
KCk7JykKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2Z1bmN0aW9uIGZvbygpIHsgbmV3Py50YXJn
ZXQ7IH0nKTsKKworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignZnVuY3Rpb24gdGFnKCkge30gdGFn
Py5gYDsnKTsKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NvbnN0IG8gPSB7IHRhZygpIHt9IH07
IG8/LnRhZ2BgOycpOworCisvLyBOT1QgYW4gb3B0aW9uYWwgY2hhaW4KK3Nob3VsZEJlKGZhbHNl
Py40OjUsIDUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375536</attachid>
            <date>2019-08-05 11:06:05 -0700</date>
            <delta_ts>2019-08-06 13:18:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200199-20190805110603.patch</filename>
            <type>text/plain</type>
            <size>63783</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4MjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
NGZhYzRmMjg2N2RkMDI4NzU1MTI1MjA1YTgxOTE3M2E0OGE0NTJiLi5lNzZiMGU3ZTgzZjY1Yjcx
ZWQ5MGUyYWIwMzY1ZGRlZjNlM2RlMjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OSBAQAorMjAxOS0wOC0wNSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
dGhlIG9wdGlvbmFsIGNoYWluaW5nIHByb3Bvc2FsLCB3aGljaCBoYXMgbm93IHJlYWNoZWQgU3Rh
Z2UgMyBhdCBUQzM5LgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhID8uIG9wZXJhdG9yIHdo
aWNoOgorICAgICAgICAgLSBndWFyZHMgbWVtYmVyIGFjY2VzcyB3aGVuIHRoZSBMSFMgaXMgbnVs
bGlzaCwgaS5lLiBgbnVsbD8uZm9vYCBhbmQgYG51bGw/LlsnZm9vJ11gIGFyZSB1bmRlZmluZWQK
KyAgICAgICAgIC0gZ3VhcmRzIGZ1bmN0aW9uIGNhbGxzIHdoZW4gdGhlIExIUyBpcyBudWxsaXNo
LCBpLmUuIGBudWxsPy4oKWAgaXMgdW5kZWZpbmVkCisgICAgICAgICAtIHNob3J0LWNpcmN1aXRz
IG92ZXIgYSB3aG9sZSBhY2Nlc3MvY2FsbCBjaGFpbiwgaS5lLiBgbnVsbD8uYVsnYiddKGMrKylg
IGlzIHVuZGVmaW5lZCBhbmQgZG9lcyBub3QgaW5jcmVtZW50IGMKKworICAgICAgICBUaGlzIGZl
YXR1cmUgY2FuIGJlIG5haXZlbHkgdmlld2VkIGFzIGEgdGVybmFyeSBpbiBkaXNndWlzZSwgaS5l
LiBgYT8uYmAgaXMgbGlrZSBgYSA9PSBudWxsID8gdW5kZWZpbmVkIDogYS5iYC4KKyAgICAgICAg
SG93ZXZlciwgc2luY2Ugd2UgbXVzdCBiZSBzdXJlIG5vdCB0byBkb3VibGUtZXZhbHVhdGUgdGhl
IExIUywgaXQncyBhY3R1YWxseSByYXRoZXIgYWtpbiB0byBhIHRyeSBibG9jayAtLQorICAgICAg
ICBuYW1lbHksIHdlIGhhdmUgdGhlIGJ5dGVjb2RlIGdlbmVyYXRvciBrZWVwIGEgc3RhY2sgb2Yg
ZWFybHktb3V0IHRhcmdldCBsYWJlbHMgZm9yIGFjY2VzcyBhbmQgY2FsbCBub2Rlcy4KKworICAg
ICAgICAoQWxzbyBub3RlIHRoYXQgYGRvY3VtZW50LmFsbGAgYmVoYXZlcyBhcyBhbiBvYmplY3Qs
IHNvICJudWxsaXNoIiBtZWFucyAqc3RyaWN0bHkqIGVxdWFsIHRvIG51bGwgb3IgdW5kZWZpbmVk
LikKKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpiZWdpbk9wdGlvbmFsQ2hhaW4pOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVuZE9wdGlvbmFsQ2hhaW4pOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRPcHRpb25hbENoZWNrKTog
QWRkZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAg
ICAgIEltcGxlbWVudCBsYWJlbCBzdGFjayBhbmQgZWFybHktb3V0IGVtaXR0ZXIuCisKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QnJhY2tl
dEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RG90QWNjZXNzb3JO
b2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpFdmFsRnVuY3Rpb25DYWxsTm9kZTo6
ZW1pdEJ5dGVjb2RlKTogUmVmYWN0b3Igc28gd2UgY2FuIGVtaXRPcHRpb25hbENoZWNrIGluIGEg
c2luZ2xlIGxvY2F0aW9uLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0
Qnl0ZWNvZGUpOiBSZWZhY3RvciBzbyB3ZSBjYW4gZW1pdE9wdGlvbmFsQ2hlY2sgaW4gYSBzaW5n
bGUgbG9jYXRpb24uCisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2Rl
KToKKyAgICAgICAgKEpTQzo6QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAoSlNDOjpEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6RGVsZXRlRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29h
bGVzY2VOb2RlOjplbWl0Qnl0ZWNvZGUpOiBDbGVhbiB1cC4KKyAgICAgICAgKEpTQzo6T3B0aW9u
YWxDaGFpbk5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnQgPy4g
bm9kZSBhbmQgZW1pdCBjaGVja3Mgd2hlcmUgbmVlZGVkLgorCisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtOgorICAgICAgICBIYXZlIE9wSXNVbmRlZmluZWRPck51bGwgc3VwcG9ydCBj
b25zdGFudCByZWdpc3RlcnMuCisKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAg
ICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVPcHRpb25hbENoYWluKTogQWRkZWQuCisgICAg
ICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKToKKyAgICAgICAgKEpTQzo6QVNU
QnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAqIHBhcnNlci9MZXhlci5j
cHA6CisgICAgICAgIChKU0M6OkxleGVyPFQ+OjpsZXhXaXRob3V0Q2xlYXJpbmdMaW5lVGVybWlu
YXRvcik6CisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpT
Qzo6T3B0aW9uYWxDaGFpbk5vZGU6Ok9wdGlvbmFsQ2hhaW5Ob2RlKTogQWRkZWQuCisgICAgICAg
ICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjppc09wdGlv
bmFsQ2hhaW4gY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RXhwcmVzc2lvbk5vZGU6Omlz
T3B0aW9uYWxDaGFpbkJhc2UgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RXhwcmVzc2lv
bk5vZGU6OnNldElzT3B0aW9uYWxDaGFpbkJhc2UpOiBBZGRlZC4KKyAgICAgICAgKiBwYXJzZXIv
UGFyc2VyVG9rZW5zLmg6CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAg
ICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAo
SlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVPcHRpb25hbENoYWluKTogQWRkZWQuCisgICAgICAg
IEludHJvZHVjZSBuZXcgdG9rZW4gYW5kIEFTVCBub2RlLCBhcyB3ZWxsIGFzIGFuIEV4cHJlc3Np
b25Ob2RlIGZpZWxkIHRvIG1hcmsgTEhTZXMgd2l0aC4KKworICAgICAgICAqIHBhcnNlci9QYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHBy
ZXNzaW9uKToKKyAgICAgICAgUGFyc2Ugb3B0aW9uYWwgY2hhaW5zIGJ5IHdyYXBwaW5nIHRoZSBh
Y2Nlc3MvY2FsbCBwYXJzZSBsb29wLgorCisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DYWxsQmFzZSk6CisgICAgICAgIEVuc3Vy
ZSB0aGF0IFR5cGVFcnJvciBtZXNzYWdlcyBkb24ndCBpbmNsdWRlIHRoZSAnPy4nLgorCisgICAg
ICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIFVwZGF0ZSBmZWF0dXJlIGZsYWcsIGFz
ID8uIGFuZCA/PyBhcmUgYSBkb3VibGUgZmVhdHVyZSBvZiAibnVsbGlzaC1hd2FyZSIgb3BlcmF0
b3JzLgorCiAyMDE5LTA4LTAzICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBET006IGFkZCBhIHNwZWNpYWwgYnJlYWtwb2ludCBmb3Ig
IkFsbCBFdmVudHMiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDUxNWI1OTgzZjZhMWQ1ODA1ZDJmYjQ4
MWVjYzBhOTdjZDU5OWQ3YjkuLjgwYTFkNzgwODZmYjE3NDM2M2U1ZTFjNzY2ZmE1MTU3YzAzYzQy
MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC00OTU4LDYgKzQ5NTgsNDEgQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZihSZWdpc3RlcklEKiBjb21wbGV0aW9uVHlwZVJlZ2lzdGVy
LCBDb21wbGV0aW8KICAgICBlbWl0SnVtcElmVHJ1ZShlcXVpdmFsZW5jZVJlc3VsdCwganVtcFRh
cmdldCk7CiB9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmJlZ2luT3B0aW9uYWxDaGFpbigp
Cit7CisgICAgbV9vcHRpb25hbENoYWluVGFyZ2V0TGFiZWxTdGFjay5hcHBlbmQobmV3TGFiZWwo
KSk7CisgICAgbV9vcHRpb25hbENoYWluRGVwdGgrKzsKK30KKwordm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW5kT3B0aW9uYWxDaGFpbihSZWdpc3RlcklEKiBkc3QsIGJvb2wgaXNEZWxldGUpCit7
CisgICAgQVNTRVJUKG1fb3B0aW9uYWxDaGFpblRhcmdldExhYmVsU3RhY2suc2l6ZSgpKTsKKyAg
ICBBU1NFUlQobV9vcHRpb25hbENoYWluRGVwdGgpOworCisgICAgaWYgKC0tbV9vcHRpb25hbENo
YWluRGVwdGgpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZjxMYWJlbD4gZW5kTGFiZWwgPSBu
ZXdMYWJlbCgpOworICAgIGVtaXRKdW1wKGVuZExhYmVsLmdldCgpKTsKKworICAgIHdoaWxlICht
X29wdGlvbmFsQ2hhaW5UYXJnZXRMYWJlbFN0YWNrLnNpemUoKSkKKyAgICAgICAgZW1pdExhYmVs
KG1fb3B0aW9uYWxDaGFpblRhcmdldExhYmVsU3RhY2sudGFrZUxhc3QoKS5nZXQoKSk7CisgICAg
ZW1pdExvYWQoZHN0LCBpc0RlbGV0ZSA/IGpzQm9vbGVhbih0cnVlKSA6IGpzVW5kZWZpbmVkKCkp
OworCisgICAgZW1pdExhYmVsKGVuZExhYmVsLmdldCgpKTsKK30KKwordm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjLCBib29sIGlzU2Vjb25k
Q2hlY2tGb3JDdXJyZW50Tm9kZSkKK3sKKyAgICBBU1NFUlQobV9vcHRpb25hbENoYWluVGFyZ2V0
TGFiZWxTdGFjay5zaXplKCkpOworCisgICAgLy8gVXNlZCB3aGVuIGFuIGFjY2Vzcy1hbmQtY2Fs
bCBub2RlIGhhcyBib3RoIHBhcnRzIG1hcmtlZCBvcHRpb25hbCwgbGlrZSBhPy5iPy4oKS4KKyAg
ICBpZiAoaXNTZWNvbmRDaGVja0ZvckN1cnJlbnROb2RlKQorICAgICAgICBtX29wdGlvbmFsQ2hh
aW5UYXJnZXRMYWJlbFN0YWNrLmFwcGVuZChuZXdMYWJlbCgpKTsKKworICAgIGVtaXRKdW1wSWZU
cnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1wb3JhcnkoKSwgc3JjKSwgbV9vcHRpb25h
bENoYWluVGFyZ2V0TGFiZWxTdGFjay5sYXN0KCkuZ2V0KCkpOworfQorCiB2b2lkIEZvckluQ29u
dGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewogICAg
IC8vIExleGljYWxseSBpbnZhbGlkYXRpbmcgRm9ySW5Db250ZXh0cyBpcyBraW5kIG9mIHdlYWsg
c2F1Y2UsIGJ1dCBpdCBvbmx5IG9jY3VycyBpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGU5NzY4NmFhM2Vk
Y2RkOGQzZjliNTdjNGE2ZDEyM2JhYzljYjM5ODcuLmZiZWU1ZDQ4MjYwM2Y3YjM2YTJlZjRhMDdj
YzUzNjJiYjVhZjY2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTk1OSw2ICs5NTksMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHVzaEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKEZpbmFs
bHlDb250ZXh0Jik7CiAgICAgICAgIHZvaWQgcG9wRmluYWxseUNvbnRyb2xGbG93U2NvcGUoKTsK
IAorICAgICAgICB2b2lkIGJlZ2luT3B0aW9uYWxDaGFpbigpOworICAgICAgICB2b2lkIGVuZE9w
dGlvbmFsQ2hhaW4oUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVsZXRlID0gZmFsc2UpOworICAg
ICAgICB2b2lkIGVtaXRPcHRpb25hbENoZWNrKFJlZ2lzdGVySUQqIHNyYywgYm9vbCBpc1NlY29u
ZENoZWNrRm9yQ3VycmVudE5vZGUgPSBmYWxzZSk7CisKICAgICAgICAgdm9pZCBwdXNoSW5kZXhl
ZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVySUQqIGluZGV4KTsKICAgICAg
ICAgdm9pZCBwb3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCk7CiAgICAgICAg
IHZvaWQgcHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVy
SUQqIGluZGV4LCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7
CkBAIC0xMjY2LDYgKzEyNzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFRy
eVJhbmdlPiBtX3RyeVJhbmdlczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFRyeURhdGEsIDg+
IG1fdHJ5RGF0YTsKIAorICAgICAgICBWZWN0b3I8UmVmPExhYmVsPj4gbV9vcHRpb25hbENoYWlu
VGFyZ2V0TGFiZWxTdGFjazsKKyAgICAgICAgdW5zaWduZWQgbV9vcHRpb25hbENoYWluRGVwdGgg
eyAwIH07CisKICAgICAgICAgaW50IG1fbmV4dENvbnN0YW50T2Zmc2V0IHsgMCB9OwogCiAgICAg
ICAgIHR5cGVkZWYgSGFzaE1hcDxGdW5jdGlvbk1ldGFkYXRhTm9kZSosIHVuc2lnbmVkPiBGdW5j
dGlvbk9mZnNldE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCA3Y2MwNzhjM2MwMjE1YzlkZjc5MGM4NDhhMzJkMTNi
ODA5MGYwOGEwLi4xNjI0OTJhNjQ0M2U0YjE0N2MxNDE3NjM4N2M2ODJkMDIzNTU5NzA1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCkBAIC03NDQsMTIgKzc0NCwxOCBAQCBSZWdpc3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2Rl
OjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaQogICAgIFJl
Z2lzdGVySUQqIHJldDsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKIAotICAgIGlmIChpc05vbkluZGV4U3RyaW5nRWxl
bWVudCgqbV9zdWJzY3JpcHQpKSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisgICAgYm9vbCBzdWJzY3JpcHRJc05vbkluZGV4
U3RyaW5nID0gaXNOb25JbmRleFN0cmluZ0VsZW1lbnQoKm1fc3Vic2NyaXB0KTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gYmFzZSA9IHN1YnNjcmlwdElzTm9uSW5kZXhTdHJpbmcKKyAgICAgICAg
PyBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKQorICAgICAgICA6IGdlbmVyYXRvci5lbWl0Tm9k
ZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vi
c2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CisKKyAgICBpZiAobV9iYXNlLT5pc09wdGlvbmFs
Q2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhiYXNlLmdl
dCgpKTsKKworICAgIGlmIChzdWJzY3JpcHRJc05vbkluZGV4U3RyaW5nKSB7CiAgICAgICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZpbmFsRGVzdC5nZXQo
KSwgYmFzZS5nZXQoKSwgc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG1fc3Vic2NyaXB0KS0+dmFs
dWUoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBn
ZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3N1YnNjcmlwdEhhc0Fz
c2lnbm1lbnRzLCBtX3N1YnNjcmlwdC0+aXNQdXJlKGdlbmVyYXRvcikpOwogICAgICAgICBSZWdp
c3RlcklEKiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvclByb3BlcnR5KG1fc3Vic2Ny
aXB0KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5
VmFsKGZpbmFsRGVzdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkpOwpAQCAtNzYzLDE3ICs3
NjksMjYgQEAgUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2kKIAogUmVnaXN0ZXJJRCogRG90QWNjZXNz
b3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtX2Jhc2Ut
PmlzU3VwZXJOb2RlKCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBiYXNlSXNTdXBl
ciA/IGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJhdG9yKSA6IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX2Jhc2UpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2U7CisgICAgaWYgKGJhc2VJ
c1N1cGVyKQorICAgICAgICBiYXNlID0gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3Ip
OworICAgIGVsc2UgeworICAgICAgICBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7
CisgICAgICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhiYXNlLmdldCgpKTsKKyAgICB9CisKICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KTsKICAgICBSZWdpc3RlcklEKiByZXQ7CiAgICAgaWYgKGJhc2VJc1N1cGVyKSB7
CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlzVmFsdWUgPSBnZW5lcmF0b3IuZW5zdXJl
VGhpcygpOwotICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LCBi
YXNlLmdldCgpLCB0aGlzVmFsdWUuZ2V0KCksIG1faWRlbnQpOworICAgICAgICByZXQgPSBnZW5l
cmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCB0aGlzVmFsdWUu
Z2V0KCksIG1faWRlbnQpOwogICAgIH0gZWxzZQotICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZmluYWxEZXN0LCBiYXNlLmdldCgpLCBtX2lkZW50KTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdFByb2ZpbGVUeXBlKGZpbmFsRGVzdCwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAg
ICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZpbmFsRGVzdC5nZXQoKSwgYmFzZS5n
ZXQoKSwgbV9pZGVudCk7CisgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShmaW5hbERlc3Qu
Z2V0KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgcmV0dXJuIHJldDsKIH0KIApA
QCAtODQ4LDI0ICs4NjMsMzIgQEAgUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWcKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMb2FkVGhpc0Zyb21BcnJvd0Z1bmN0aW9uTGV4aWNhbEVudmlyb25tZW50KCk7
CiAKICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoZ2VuZXJhdG9yLnByb3Bl
cnR5TmFtZXMoKS5ldmFsKTsKLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwo
KSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBsb2Nh
bCwgbnVsbHB0cik7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9y
Lm1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7Ci0gICAgICAgIENh
bGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGxvY2FsID0gdmFyLmxvY2FsKCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGZ1bmM7CisgICAgaWYgKGxvY2FsKSB7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJ
Zk5lY2Vzc2FyeSh2YXIsIGxvY2FsLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgZnVuYyA9IGdl
bmVyYXRvci5tb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkp
OworICAgIH0gZWxzZQorICAgICAgICBmdW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwor
ICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisKKyAg
ICBpZiAobG9jYWwpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0Q2FsbEV2YWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKSwg
ZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOworICAgIGVsc2UgeworICAgICAgICBKU1RleHRQb3Np
dGlvbiBuZXdEaXZvdCA9IGRpdm90U3RhcnQoKSArIDQ7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOworICAgICAg
ICBnZW5lcmF0b3IubW92ZSgKKyAgICAgICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVy
KCksCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2Nv
cGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyLCBUaHJvd0lm
Tm90Rm91bmQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFy
LCBmdW5jLmdldCgpLCBudWxscHRyKTsKICAgICB9CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBDYWxsQXJndW1lbnRzIGNhbGxB
cmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwotICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90
ID0gZGl2b3RTdGFydCgpICsgNDsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG5l
d0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKLSAgICBnZW5lcmF0b3IubW92ZSgKLSAg
ICAgICAgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlU2NvcGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyKSk7Ci0gICAg
Z2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOwotICAgIGdlbmVyYXRvci5lbWl0VERa
Q2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGZ1bmMuZ2V0KCksIG51bGxwdHIpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVu
Yy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0
KCkpOworICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5l
bWl0T3B0aW9uYWxDaGVjayhmdW5jLmdldCgpKTsKKworICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dENhbGxFdmFsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxWYWx1ZU5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODk5LDggKzkyMiwxMiBA
QCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZQogICAgICAgICAKICAgICAgICAgcmV0dXJuIHJldDsK
ICAgICB9CisKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX2V4cHIpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CisgICAgaWYgKGlzT3B0aW9uYWxD
aGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmMuZ2V0
KCkpOworCiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdz
KTsKICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwg
anNVbmRlZmluZWQoKSk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxs
SW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRG
dW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
LCBEZWJ1Z2dhYmxlQ2FsbDo6WWVzKTsKQEAgLTkyMCwzMCArOTQ3LDM0IEBAIFJlZ2lzdGVySUQq
IEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwKICAgICBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24gPSBnZW5l
cmF0b3IuZXhwZWN0ZWRGdW5jdGlvbkZvcklkZW50aWZpZXIobV9pZGVudCk7CiAKICAgICBWYXJp
YWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9pZGVudCk7Ci0gICAgaWYgKFJlZ2lzdGVy
SUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVj
a0lmTmVjZXNzYXJ5KHZhciwgbG9jYWwsIG51bGxwdHIpOwotICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5tb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSwgbG9jYWwpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwotICAgICAgICBDYWxsQXJn
dW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBsb2NhbCA9IHZhci5sb2NhbCgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5j
OworICAgIGlmIChsb2NhbCkgeworICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNl
c3NhcnkodmFyLCBsb2NhbC5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIGZ1bmMgPSBnZW5lcmF0
b3IubW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBD
YWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworCisgICAgaWYg
KGxvY2FsKSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgLy8gVGhpcyBwYXNzZXMgTm9FeHBl
Y3RlZEZ1bmN0aW9uIGJlY2F1c2Ugd2UgZXhwZWN0IHRoYXQgaWYgdGhlIGZ1bmN0aW9uIGlzIGlu
IGEKICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGUsIHRoZW4gaXQncyBub3Qgb25lIG9mIG91ciBi
dWlsdC1pbiBjb25zdHJ1Y3RvcnMuCi0gICAgICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRv
ci5lbWl0Q2FsbEluVGFpbFBvc2l0aW9uKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBO
b0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7
Ci0gICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBOb0V4cGVj
dGVkRnVuY3Rpb247CisgICAgfSBlbHNlIHsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2
b3QgPSBkaXZvdFN0YXJ0KCkgKyBtX2lkZW50Lmxlbmd0aCgpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKKyAg
ICAgICAgZ2VuZXJhdG9yLm1vdmUoCisgICAgICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLAorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0RnJv
bVNjb3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhciwgVGhy
b3dJZk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5
KHZhciwgZnVuYy5nZXQoKSwgbnVsbHB0cik7CiAgICAgfQogCi0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdl
dCgpKTsKLSAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3Mp
OworICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0
T3B0aW9uYWxDaGVjayhmdW5jLmdldCgpKTsKIAotICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90
ID0gZGl2b3RTdGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKLSAgICBnZW5l
cmF0b3IubW92ZSgKLSAgICAgICAgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIo
KSwgdmFyKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2Fs
bEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOwotICAgIGdl
bmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGZ1bmMuZ2V0KCksIG51bGxwdHIp
OwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbEluVGFpbFBvc2l0aW9u
KHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxs
OjpZZXMpOwogICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgcmV0dXJuIHJldDsKQEAgLTEyNzUsNiAr
MTMwNiw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5z
aWNfZGVmaW5lRW51bWVyYWJsZVdyaXRhYmxlQ29uZmlnCiAKIFJlZ2lzdGVySUQqIEZ1bmN0aW9u
Q2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9
IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdl
dCgpKTsKICAgICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOwogICAg
IGJvb2wgc3Vic2NyaXB0SXNOb25JbmRleFN0cmluZyA9IGlzTm9uSW5kZXhTdHJpbmdFbGVtZW50
KCptX3N1YnNjcmlwdCk7CiAKQEAgLTEyODYsOSArMTMxOSwxMSBAQCBSZWdpc3RlcklEKiBGdW5j
dGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsCiAgICAgICAgICAgICBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0
SGFuZFNpZGUobV9iYXNlLCBtX3N1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlwdC0+
aXNQdXJlKGdlbmVyYXRvcikpOworCisgICAgICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFp
bkJhc2UoKSkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhiYXNlLmdl
dCgpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb247CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHRoaXNSZWdpc3RlcjsKICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKICAg
ICAgICAgLy8gTm90ZSB0aGF0IHdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIG9uY2UgYmVjYXVzZSB3
ZSBlaXRoZXIgaGF2ZSBhIG5vbi1URFogdGhpcyBvciB3ZSB0aHJvdy4gT25jZSB3ZSBoYXZlIGEg
bm9uLVREWiB0aGlzLCB3ZSBjYW4ndCBjaGFuZ2UgaXRzIHZhbHVlIGJhY2sgdG8gVERaLgpAQCAt
MTI5NywxOSArMTMzMiwyMCBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsCiAgICAgaWYgKHN1YnNj
cmlwdElzTm9uSW5kZXhTdHJpbmcpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJl
c3Npb25FbmQoKSk7CiAgICAgICAgIGlmIChiYXNlSXNTdXBlcikKLSAgICAgICAgICAgIGZ1bmN0
aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSwgYmFzZS5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBzdGF0aWNfY2FzdDxTdHJpbmdOb2Rl
Kj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0
QnlJZChmdW5jdGlvbi5nZXQoKSwgYmFzZS5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBzdGF0
aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBzdGF0aWNfY2FzdDxTdHJpbmdOb2Rl
Kj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0
QnlJZChmdW5jdGlvbi5nZXQoKSwgYmFzZS5nZXQoKSwgc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+
KG1fc3Vic2NyaXB0KS0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yUHJvcGVydHkobV9zdWJz
Y3JpcHQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Np
b25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAg
ICAgICAgaWYgKGJhc2VJc1N1cGVyKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3Iu
ZW1pdEdldEJ5VmFsKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwg
dGhpc1JlZ2lzdGVyLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CisgICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdEdldEJ5VmFsKGZ1bmN0aW9uLmdldCgpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0ZXIu
Z2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZnVuY3Rp
b24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRHZXRCeVZhbChmdW5jdGlvbi5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwog
ICAgIH0KKyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3Iu
ZW1pdE9wdGlvbmFsQ2hlY2soZnVuY3Rpb24uZ2V0KCksIG1fYmFzZS0+aXNPcHRpb25hbENoYWlu
QmFzZSgpKTsKIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIENhbGxBcmd1bWVu
dHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgaWYgKGJhc2VJc1N1cGVy
KSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2soZ2VuZXJhdG9yLnRoaXNSZWdpc3Rl
cigpKTsKQEAgLTEzMzEsMTQgKzEzNjcsMjEgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsRG90
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2kKICAg
ICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOwogICAgIGlmIChiYXNl
SXNTdXBlcikKICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0
ZXIoKSwgZ2VuZXJhdG9yLmVuc3VyZVRoaXMoKSk7Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAg
ICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9i
YXNlKTsKKyAgICAgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCkpOworICAgIH0KICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJl
c3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsK
ICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHN1cGVy
QmFzZSA9IGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJhdG9yKTsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBzdXBlckJhc2UuZ2V0KCksIGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOwogICAgIH0gZWxzZQogICAgICAgICBnZW5l
cmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIG1faWRlbnQpOworCisgICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmN0aW9uLmdldCgpLCBtX2Jhc2UtPmlz
T3B0aW9uYWxDaGFpbkJhc2UoKSk7CisKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3Iu
ZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCks
IE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6WWVzKTsKICAgICBnZW5lcmF0b3IuZW1pdFBy
b2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwog
ICAgIHJldHVybiByZXQ7CkBAIC0xMzQ4LDE3ICsxMzkxLDI0IEBAIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG1heERpc3RhbmNlVG9Jbm5lcm1vc3RDYWxsT3JBcHBseSA9IDI7CiAKIFJlZ2lzdGVy
SUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKworICAg
IGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOworCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4
cHJlc3Npb25FbmQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uOwotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCk7CiAKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb247CiAgICAgYXV0byBtYWtl
RnVuY3Rpb24gPSBbJl0gewogICAgICAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKSB7CiAg
ICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1ZhbHVlID0gZ2VuZXJhdG9yLmVuc3Vy
ZVRoaXMoKTsKICAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgdGhpc1ZhbHVlLmdldCgp
LCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmNhbGxQdWJsaWNOYW1l
KCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVt
aXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgZ2Vu
ZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5jYWxsUHVibGljTmFtZSgpKTsK
KworICAgICAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmN0aW9uLmdldCgpLCBtX2Jhc2UtPmlzT3B0aW9uYWxD
aGFpbkJhc2UoKSk7CiAgICAgfTsKIAogICAgIGJvb2wgZW1pdENhbGxDaGVjayA9ICFnZW5lcmF0
b3IuaXNCdWlsdGluRnVuY3Rpb24oKTsKQEAgLTE0MzAsMTUgKzE0ODAsMjIgQEAgUmVnaXN0ZXJJ
RCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwKICAgICAvLyBmdW5jdGlvbi5hcHBseSh0aGlzQXJnLCBbYXJnMCwgYXJn
MSwgLi4uXSkgLT4gY2FuIGJlIHRyaXZpYWxseSBjb2VyY2VkIGludG8gZnVuY3Rpb24uY2FsbCh0
aGlzQXJnLCBhcmcwLCBhcmcxLCAuLi4pIGFuZCBzYXZlcyBvYmplY3QgYWxsb2NhdGlvbgogICAg
IGJvb2wgbWF5QmVDYWxsID0gYXJlVHJpdmlhbEFwcGx5QXJndW1lbnRzKG1fYXJncyk7CiAKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb247Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJh
c2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisKKyAgICBp
ZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0
T3B0aW9uYWxDaGVjayhiYXNlLmdldCgpKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5j
dGlvbjsKICAgICBhdXRvIG1ha2VGdW5jdGlvbiA9IFsmXSB7CiAgICAgICAgIGlmIChtX2Jhc2Ut
PmlzU3VwZXJOb2RlKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlzVmFs
dWUgPSBnZW5lcmF0b3IuZW5zdXJlVGhpcygpOwogICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5l
cmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdl
dCgpLCB0aGlzVmFsdWUuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5h
bWVzKCkuYXBwbHlQdWJsaWNOYW1lKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGZ1
bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24o
ZHN0KSwgYmFzZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMo
KS5hcHBseVB1YmxpY05hbWUoKSk7CisKKyAgICAgICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJhc2Uo
KSkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5nZXQo
KSwgbV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpOwogICAgIH07CiAKICAgICBib29sIGVt
aXRDYWxsQ2hlY2sgPSAhZ2VuZXJhdG9yLmlzQnVpbHRpbkZ1bmN0aW9uKCk7CkBAIC0xNjkyLDI1
ICsxNzQ5LDMzIEBAIFJlZ2lzdGVySUQqIERlbGV0ZVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0CiAKIFJlZ2lzdGVySUQqIERlbGV0
ZUJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBy
MCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBy
MSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAKKyAgICBpZiAobV9iYXNlLT5p
c09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVj
ayhyMC5nZXQoKSk7CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9zdWJzY3JpcHQpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAobV9iYXNlLT5pc1N1cGVy
Tm9kZSgpKQogICAgICAgICByZXR1cm4gZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9y
LCAiQ2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5Iik7Ci0gICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0RGVsZXRlQnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0
KCksIHIxLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeVZhbChmaW5h
bERlc3QuZ2V0KCksIHIwLmdldCgpLCByMS5nZXQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBEZWxldGVEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIERlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7
CiAKKyAgICBpZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVy
YXRvci5lbWl0T3B0aW9uYWxDaGVjayhyMC5nZXQoKSk7CisKICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYg
KG1fYmFzZS0+aXNTdXBlck5vZGUoKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5j
ZUVycm9yKGdlbmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIpOwotICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0KSwgcjAuZ2V0KCksIG1faWRlbnQpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERl
bGV0ZUJ5SWQoZmluYWxEZXN0LmdldCgpLCByMC5nZXQoKSwgbV9pZGVudCk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxldGVWYWx1ZU5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzNDYsMTMgKzI0MTEsMjYgQEAgUmVnaXN0ZXJJ
RCogQ29hbGVzY2VOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCoKICAgICBSZWY8TGFiZWw+IHRhcmdldCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKHRlbXAuZ2V0KCksIG1fZXhwcjEpOwotICAg
IGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UoZ2VuZXJhdG9yLmVtaXRVbmFyeU9wPE9wSXNVbmRl
ZmluZWRPck51bGw+KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdGVtcC5nZXQoKSksIHRhcmdl
dC5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShnZW5lcmF0b3IuZW1pdElz
VW5kZWZpbmVkT3JOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdGVtcC5nZXQoKSksIHRh
cmdldC5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5UYWlsUG9zaXRpb24odGVtcC5n
ZXQoKSwgbV9leHByMik7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0YXJnZXQuZ2V0KCkpOwog
CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlKGRzdCwgdGVtcC5nZXQoKSk7CiB9CiAKKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcHRpb25hbENoYWluTm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lzdGVySUQqIE9wdGlvbmFsQ2hhaW5Ob2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQor
eworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QpOworCisgICAgZ2VuZXJhdG9yLmJlZ2luT3B0aW9uYWxDaGFpbigpOworICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShmaW5hbERlc3QuZ2V0KCksIG1fZXhwcik7CisgICAgZ2VuZXJh
dG9yLmVuZE9wdGlvbmFsQ2hhaW4oZmluYWxEZXN0LmdldCgpLCBtX2lzRGVsZXRlKTsKKworICAg
IHJldHVybiBmaW5hbERlc3QuZ2V0KCk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBDb25kaXRpb25hbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IFJlZ2lzdGVySUQqIENvbmRpdGlvbmFsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KaW5kZXggMzdl
ZjI3OTFjMTViNjM3MDgxOTZjYTlmYzY5YjFlYzhlNTBhOTE1NS4uNjI3YTg4OGJjOTNiZjI3NDU3
ZWE3Y2MwNTZmOTc5MWJiYmVjZmZjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KQEAgLTg3NSw4ICs4NzUs
NyBAQCBlcXVhbE51bGxDb21wYXJpc29uT3Aob3BfbmVxX251bGwsIE9wTmVxTnVsbCwKIAogbGxp
bnRPcFdpdGhSZXR1cm4ob3BfaXNfdW5kZWZpbmVkX29yX251bGwsIE9wSXNVbmRlZmluZWRPck51
bGwsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCiAgICAgZ2V0KG1fb3BlcmFu
ZCwgdDApCi0gICAgYXNzZXJ0Tm90Q29uc3RhbnQoc2l6ZSwgdDApCi0gICAgbG9hZGkgVGFnT2Zm
c2V0W2NmciwgdDAsIDhdLCB0MQorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVUYWcoc2l6ZSwg
dDAsIHQxKQogICAgIG9yaSAxLCB0MQogICAgIGNpZXEgdDEsIE51bGxUYWcsIHQxCiAgICAgcmV0
dXJuKEJvb2xlYW5UYWcsIHQxKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCBlMWVkNzJmMGViYzE1MWMzMjY4MWYw
YTJmMGI0MDliZDA1NzNmYTcyLi45MGRlZmI5NzNlN2Y1ZGU4MjdmNDk2ZDcyOGEzMjhhY2QyNjIy
ZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQpAQCAtODI3LDggKzgyNyw4IEBAIGVxdWFsTnVsbENvbXBhcmlzb25P
cChvcF9uZXFfbnVsbCwgT3BOZXFOdWxsLAogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX3Vu
ZGVmaW5lZF9vcl9udWxsLCBPcElzVW5kZWZpbmVkT3JOdWxsLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChtX29wZXJhbmQsIHQwKQotICAgIGxvYWRxIFtjZnIs
IHQwLCA4XSwgdDAKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkKKyAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQxLCB0MCkKICAgICBhbmRxIH5UYWdCaXRVbmRlZmluZWQsIHQwCiAgICAg
Y3FlcSB0MCwgVmFsdWVOdWxsLCB0MAogICAgIG9ycSBWYWx1ZUZhbHNlLCB0MApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAppbmRleCBkZTViMTMzOTA2NjExMzQxMmFj
YWVlZjJiZDc1ZTAzMWEzMzNhMTAwLi4zNmJlODdkZGE2NDJhMjkwM2FhNmRiODQ2MWNkY2M1MTZi
MjM3OGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxk
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaApAQCAt
MTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgaW50ICBEb250QnVpbGRT
dHJpbmdzID0gMDsKIAogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQmluYXJ5Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBpbnQgdG9rZW4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJp
bmFyeU9wSW5mbz4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4pOwot
ICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VXYXNTdXBlciwg
QXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5k
LCBzaXplX3QgY2FsbE9yQXBwbHlDaGlsZERlcHRoKTsKKyAgICBFeHByZXNzaW9uTm9kZSogbWFr
ZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUq
IGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNhbGxPckFwcGx5Q2hp
bGREZXB0aCwgYm9vbCBpc09wdGlvbmFsQ2FsbCk7CiAKICAgICBKU0M6OlNvdXJjZUVsZW1lbnRz
KiBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgSlND
OjpTb3VyY2VFbGVtZW50cygpOyB9CiAKQEAgLTM2MCw2ICszNjAsMTIgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT3B0
aW9uYWxDaGFpbihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCisgICAgeworICAgICAgICBiYXNlLT5zZXRJ
c09wdGlvbmFsQ2hhaW5CYXNlKCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IE9wdGlvbmFsQ2hhaW5Ob2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICB9CisKICAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlQ29uZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4
cHJlc3Npb25Ob2RlKiByaHMpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFy
ZW5hKSBDb25kaXRpb25hbE5vZGUobG9jYXRpb24sIGNvbmRpdGlvbiwgbGhzLCByaHMpOwpAQCAt
MTE0OCw2ICsxMTU0LDE2IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlVHlwZU9m
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiAKIEV4cHJlc3Npb25O
b2RlKiBBU1RCdWlsZGVyOjptYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQp
CiB7CisgICAgaWYgKGV4cHItPmlzT3B0aW9uYWxDaGFpbigpKSB7CisgICAgICAgIE9wdGlvbmFs
Q2hhaW5Ob2RlKiBvcHRpb25hbENoYWluID0gc3RhdGljX2Nhc3Q8T3B0aW9uYWxDaGFpbk5vZGUq
PihleHByKTsKKyAgICAgICAgaWYgKG9wdGlvbmFsQ2hhaW4tPmV4cHIoKS0+aXNMb2NhdGlvbigp
KSB7CisgICAgICAgICAgICBBU1NFUlQoIW9wdGlvbmFsQ2hhaW4tPmV4cHIoKS0+aXNSZXNvbHZl
Tm9kZSgpKTsKKyAgICAgICAgICAgIG9wdGlvbmFsQ2hhaW4tPnNldEV4cHIobWFrZURlbGV0ZU5v
ZGUobG9jYXRpb24sIG9wdGlvbmFsQ2hhaW4tPmV4cHIoKSwgc3RhcnQsIGRpdm90LCBlbmQpKTsK
KyAgICAgICAgICAgIG9wdGlvbmFsQ2hhaW4tPnNldElzRGVsZXRlKCk7CisgICAgICAgICAgICBy
ZXR1cm4gb3B0aW9uYWxDaGFpbjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghZXhwci0+
aXNMb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBEZWxldGVW
YWx1ZU5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgIGlmIChleHByLT5pc1Jlc29sdmVOb2RlKCkp
IHsKQEAgLTEzNDUsMTcgKzEzNjEsMjkgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VCaXRYT3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHIKICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCaXRYT3JOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhw
cjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50
c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90
IGNhbGxPckFwcGx5Q2hpbGREZXB0aCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtl
RnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VXYXNTdXBlciwgQXJndW1lbnRzTm9kZSog
YXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBzaXplX3QgY2FsbE9y
QXBwbHlDaGlsZERlcHRoLCBib29sIGlzT3B0aW9uYWxDYWxsKQogewogICAgIEFTU0VSVChkaXZv
dC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0KTsKICAgICBpZiAoZnVuYy0+aXNTdXBl
ck5vZGUoKSkKICAgICAgICAgdXNlc1N1cGVyQ2FsbCgpOwogCiAgICAgaWYgKGZ1bmMtPmlzQnl0
ZWNvZGVJbnRyaW5zaWNOb2RlKCkpIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpc09wdGlvbmFs
Q2FsbCwgIWlzT3B0aW9uYWxDYWxsKTsKICAgICAgICAgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKiBp
bnRyaW5zaWMgPSBzdGF0aWNfY2FzdDxCeXRlY29kZUludHJpbnNpY05vZGUqPihmdW5jKTsKICAg
ICAgICAgaWYgKGludHJpbnNpYy0+dHlwZSgpID09IEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6VHlw
ZTo6Q29uc3RhbnQpCiAgICAgICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCeXRl
Y29kZUludHJpbnNpY05vZGUoQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjpUeXBlOjpGdW5jdGlvbiwg
bG9jYXRpb24sIGludHJpbnNpYy0+ZW1pdHRlcigpLCBpbnRyaW5zaWMtPmlkZW50aWZpZXIoKSwg
YXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICB9CisKKyAgICAvLyBFbnN1
cmVzIHRoYXQgYT8uYj8uKCkgaXMgYSBkb3VibHktb3B0aW9uYWwgRnVuY3Rpb25DYWxsRG90Tm9k
ZSAob3RoZXJ3aXNlIHdlJ2xsIGxvc2Ugb3VyIGB0aGlzYCB2YWx1ZSkuCisgICAgaWYgKGZ1bmMt
PmlzT3B0aW9uYWxDaGFpbigpKSB7CisgICAgICAgIE9wdGlvbmFsQ2hhaW5Ob2RlKiBvcHRpb25h
bENoYWluID0gc3RhdGljX2Nhc3Q8T3B0aW9uYWxDaGFpbk5vZGUqPihmdW5jKTsKKyAgICAgICAg
aWYgKG9wdGlvbmFsQ2hhaW4tPmV4cHIoKS0+aXNMb2NhdGlvbigpKSB7CisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGlzT3B0aW9uYWxDYWxsLCBpc09wdGlvbmFsQ2FsbCk7CisgICAgICAgICAg
ICBBU1NFUlQoIW9wdGlvbmFsQ2hhaW4tPmV4cHIoKS0+aXNSZXNvbHZlTm9kZSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlvbiwgb3B0aW9uYWxDaGFp
bi0+ZXhwcigpLCBwcmV2aW91c0Jhc2VXYXNTdXBlciwgYXJncywgZGl2b3RTdGFydCwgZGl2b3Qs
IGRpdm90RW5kLCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGlzT3B0aW9uYWxDYWxsKTsKKyAgICAg
ICAgfQorICAgIH0KKwogICAgIGlmICghZnVuYy0+aXNMb2NhdGlvbigpKQogICAgICAgICByZXR1
cm4gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1
bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgaWYgKGZ1bmMtPmlz
UmVzb2x2ZU5vZGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9MZXhlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAppbmRl
eCBlOThjZGI1ZTU5ZTIzMDcyYzE5MDE4Zjg3ZDEwYzJkNDUyZDljZDM5Li5mMWJkNjM2ZDZmNDY0
NzcxMmRiMDQ0ZGY4MTJmZmZkNmRhMTc0MmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0xleGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0xleGVyLmNwcApAQCAtMjE1NywxMCArMjE1NywxNyBAQCBzdGFydDoKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDaGFyYWN0ZXJRdWVzdGlvbjoKICAgICAgICAgc2hpZnQoKTsKLSAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZU51bGxpc2hDb2FsZXNjaW5nKCkgJiYgbV9jdXJyZW50ID09ICc/Jykg
ewotICAgICAgICAgICAgc2hpZnQoKTsKLSAgICAgICAgICAgIHRva2VuID0gQ09BTEVTQ0U7Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU51bGxpc2hBd2FyZU9w
ZXJhdG9ycygpKSB7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICc/JykgeworICAgICAg
ICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBDT0FMRVNDRTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2N1
cnJlbnQgPT0gJy4nICYmICFpc0FTQ0lJRGlnaXQocGVlaygxKSkpIHsKKyAgICAgICAgICAgICAg
ICBzaGlmdCgpOworICAgICAgICAgICAgICAgIHRva2VuID0gUVVFU1RJT05ET1Q7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdG9rZW4g
PSBRVUVTVElPTjsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCmluZGV4IGQ0MWUzYWVkOGU0NWY3YThlMmZkMzFjMjQ0
NzdkZWNjYjhkNTY0MGYuLjA2OGIyNmM4MjhhMzZlYjZlZWU1YWQyNGQ1NDA1MTE5MzE4OGZiYjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9y
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5o
CkBAIC02NzYsNiArNjc2LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKKyAg
ICBpbmxpbmUgT3B0aW9uYWxDaGFpbk5vZGU6Ok9wdGlvbmFsQ2hhaW5Ob2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByKQorICAgICAgICA6IEV4
cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQorICAgICAgICAsIG1fZXhwcihleHByKQorICAgIHsKKyAg
ICB9CisKICAgICBpbmxpbmUgQ29uZGl0aW9uYWxOb2RlOjpDb25kaXRpb25hbE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGxvZ2ljYWwsIEV4cHJl
c3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKQogICAgICAgICA6IEV4cHJl
c3Npb25Ob2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1fbG9naWNhbChsb2dpY2FsKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4IDg2ZmRhZjNkMDRmZDBkOGY3ZjQ4N2QxNzcz
NzdlMmEzN2U5NWE3ODcuLjkwOTM0MDQ5YzE2OGM4OTk4MjVlZGVmZjlhMDNhOTlkZjAwMmFkOTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTIwNSw2ICsyMDUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzQnl0ZWNvZGVJbnRyaW5zaWNO
b2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzQmlu
YXJ5T3BOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29s
IGlzRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVh
bCBib29sIGlzT3B0aW9uYWxDaGFpbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAg
ICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdl
bmVyYXRvciYsIExhYmVsJiwgTGFiZWwmLCBGYWxsVGhyb3VnaE1vZGUpOwogCkBAIC0yMTIsOCAr
MjEzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlc3VsdFR5cGUgcmVzdWx0RGVz
Y3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0VHlwZTsgfQogCisgICAgICAgIGJvb2wg
aXNPcHRpb25hbENoYWluQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNPcHRpb25hbENoYWluQmFz
ZTsgfQorICAgICAgICB2b2lkIHNldElzT3B0aW9uYWxDaGFpbkJhc2UoKSB7IG1faXNPcHRpb25h
bENoYWluQmFzZSA9IHRydWU7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIFJlc3VsdFR5cGUg
bV9yZXN1bHRUeXBlOworICAgICAgICBib29sIG1faXNPcHRpb25hbENoYWluQmFzZSB7IGZhbHNl
IH07CiAgICAgfTsKIAogICAgIGNsYXNzIFN0YXRlbWVudE5vZGUgOiBwdWJsaWMgTm9kZSB7CkBA
IC0xMzEwLDEyICsxMzE1LDMwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb2FsZXNjZU5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNz
aW9uTm9kZSogZXhwcjIpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSBudWxscHRyKSBmaW5hbDsKIAogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9l
eHByMTsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjI7CiAgICAgfTsKIAorICAgIGNs
YXNzIE9wdGlvbmFsQ2hhaW5Ob2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIE9wdGlvbmFsQ2hhaW5Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIEV4cHJlc3Npb25Ob2RlKik7CisKKyAgICAgICAgdm9pZCBzZXRFeHByKEV4cHJlc3Npb25O
b2RlKiBleHByKSB7IG1fZXhwciA9IGV4cHI7IH0KKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGV4
cHIoKSBjb25zdCB7IHJldHVybiBtX2V4cHI7IH0KKworICAgICAgICB2b2lkIHNldElzRGVsZXRl
KCkgeyBtX2lzRGVsZXRlID0gdHJ1ZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSBudWxs
cHRyKSBmaW5hbDsKKworICAgICAgICBib29sIGlzT3B0aW9uYWxDaGFpbigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9leHByOworICAg
ICAgICBib29sIG1faXNEZWxldGUgeyBmYWxzZSB9OworICAgIH07CisKICAgICAvLyBUaGUgdGVy
bmFyeSBvcGVyYXRvciwgIm1fbG9naWNhbCA/IG1fZXhwcjEgOiBtX2V4cHIyIgogICAgIGNsYXNz
IENvbmRpdGlvbmFsTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVi
bGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IGY4ZGJlNzE5
NmYxMTE3MTZkMGE1OGY3ZjU3ZTNmOGY2N2I3YTJhY2YuLmJmZjIyY2ZmODFlZmYwZDliZjgxMzY2
Yjk5ODE2MmZjMjQ0YmEwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAKQEAgLTQ4MDgsMTAzICs0ODA4LDEzNiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlcwogICAg
IH0KIAogICAgIGZhaWxJZkZhbHNlKGJhc2UsICJDYW5ub3QgcGFyc2UgYmFzZSBleHByZXNzaW9u
Iik7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9u
KCk7Ci0gICAgICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKLSAgICAgICAgY2FzZSBPUEVO
QlJBQ0tFVDogewotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lv
bkNvdW50Kys7Ci0gICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFz
dFRva2VuRW5kUG9zaXRpb24oKTsKKworICAgIGRvIHsKKyAgICAgICAgVHJlZUV4cHJlc3Npb24g
b3B0aW9uYWxDaGFpbkJhc2UgPSAwOworICAgICAgICBKU1Rva2VuTG9jYXRpb24gb3B0aW9uYWxD
aGFpbkxvY2F0aW9uOworICAgICAgICBKU1Rva2VuVHlwZSB0eXBlID0gbV90b2tlbi5tX3R5cGU7
CisKKyAgICAgICAgaWYgKG1hdGNoKFFVRVNUSU9ORE9UKSkgeworICAgICAgICAgICAgc2VtYW50
aWNGYWlsSWZUcnVlKG5ld0NvdW50LCAiQ2Fubm90IGNhbGwgY29uc3RydWN0b3IgaW4gYW4gb3B0
aW9uYWwgY2hhaW4iKTsKKyAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNlSXNTdXBl
ciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGhlIGJhc2Ugb2YgYW4gb3B0aW9uYWwgY2hhaW4iKTsK
KyAgICAgICAgICAgIG9wdGlvbmFsQ2hhaW5CYXNlID0gYmFzZTsKKyAgICAgICAgICAgIG9wdGlv
bmFsQ2hhaW5Mb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKKworICAgICAgICAgICAgU2F2ZVBv
aW50IHNhdmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgpOwogICAgICAgICAgICAgbmV4dCgpOwot
ICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsK
LSAgICAgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX3BhcnNlclN0YXRlLmFzc2ln
bm1lbnRDb3VudDsKLSAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIHByb3BlcnR5ID0gcGFyc2VF
eHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICAgICAgZmFpbElmRmFsc2UocHJvcGVydHksICJD
YW5ub3QgcGFyc2Ugc3Vic2NyaXB0IGV4cHJlc3Npb24iKTsKLSAgICAgICAgICAgIGJhc2UgPSBj
b250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3Moc3RhcnRMb2NhdGlvbiwgYmFzZSwgcHJvcGVydHks
IGluaXRpYWxBc3NpZ25tZW50cyAhPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudCwgZXhw
cmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIgJiYgY3VycmVudFNj
b3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rp
b25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJQcm9wZXJ0eSgpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tF
VCwgIl0iLCAiZW5kIiwgInN1YnNjcmlwdCBleHByZXNzaW9uIik7Ci0gICAgICAgICAgICBtX3Bh
cnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGlmIChtYXRjaChPUEVOQlJBQ0tFVCkgfHwgbWF0Y2goT1BFTlBBUkVOKSB8
fCBtYXRjaChCQUNLUVVPVEUpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBtX3Rva2VuLm1fdHlw
ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHR5cGUgPSBET1Q7CisgICAg
ICAgICAgICAgICAgcmVzdG9yZVNhdmVQb2ludChzYXZlUG9pbnQpOworICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgT1BFTlBBUkVOOiB7Ci0gICAgICAgICAgICBtX3BhcnNl
clN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAgICAgIGludCBub25M
SFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBpZiAobmV3
Q291bnQpIHsKLSAgICAgICAgICAgICAgICBuZXdDb3VudC0tOwotICAgICAgICAgICAgICAgIEpT
VGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwotICAg
ICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29u
dGV4dCk7Ci0gICAgICAgICAgICAgICAgZmFpbElmRmFsc2UoYXJndW1lbnRzLCAiQ2Fubm90IHBh
cnNlIGNhbGwgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3Jl
YXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQsIGV4
cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBzaXplX3QgdXNlZFZhcmlhYmxlc1NpemUgPSBjdXJyZW50U2Nv
cGUoKS0+Y3VycmVudFVzZWRWYXJpYWJsZXNTaXplKCk7CisKKyAgICAgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOworICAgICAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIE9QRU5CUkFDS0VUOiB7CisgICAgICAg
ICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAg
ICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBv
c2l0aW9uKCk7Ci0gICAgICAgICAgICAgICAgT3B0aW9uYWw8Q2FsbE9yQXBwbHlEZXB0aFNjb3Bl
PiBjYWxsT3JBcHBseURlcHRoU2NvcGU7Ci0gICAgICAgICAgICAgICAgcmVjb3JkQ2FsbE9yQXBw
bHlEZXB0aDxUcmVlQnVpbGRlcj4odGhpcywgKm1fdm0sIGNhbGxPckFwcGx5RGVwdGhTY29wZSwg
YmFzZSk7CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIGludCBub25M
SFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CisgICAgICAgICAgICAgICAgaW50
IGluaXRpYWxBc3NpZ25tZW50cyA9IG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENvdW50OworICAg
ICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIHByb3BlcnR5ID0gcGFyc2VFeHByZXNzaW9uKGNv
bnRleHQpOworICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBh
cnNlIHN1YnNjcmlwdCBleHByZXNzaW9uIik7CisgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRl
eHQuY3JlYXRlQnJhY2tldEFjY2VzcyhzdGFydExvY2F0aW9uLCBiYXNlLCBwcm9wZXJ0eSwgaW5p
dGlhbEFzc2lnbm1lbnRzICE9IG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENvdW50LCBleHByZXNz
aW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7CiAKLSAgICAgICAg
ICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQp
OworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShiYXNlSXNTdXBlciAmJiBjdXJyZW50U2Nv
cGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50RnVu
Y3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJQcm9wZXJ0eSgpOwog
Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VJc0FzeW5jS2V5d29yZCAmJiAoIWFyZ3VtZW50cyB8
fCBtYXRjaChBUlJPV0ZVTkNUSU9OKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNj
b3BlKCktPnJldmVydFRvUHJldmlvdXNVc2VkVmFyaWFibGVzKHVzZWRWYXJpYWJsZXNTaXplKTsK
LSAgICAgICAgICAgICAgICAgICAgZm9yY2VDbGFzc2lmeUV4cHJlc3Npb25FcnJvcihFcnJvcklu
ZGljYXRlc0FzeW5jQXJyb3dGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGZhaWxEdWVU
b1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBo
YW5kbGVQcm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5kIiwgInN1YnNjcmlw
dCBleHByZXNzaW9uIik7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3Vu
dCA9IG5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBPUEVOUEFSRU46IHsKKyAgICAgICAgICAgICAgICBtX3BhcnNlclN0
YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgICAgICAgICBpbnQgbm9u
TEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIGlm
IChuZXdDb3VudCkgeworICAgICAgICAgICAgICAgICAgICBuZXdDb3VudC0tOworICAgICAgICAg
ICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9z
aXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBw
YXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgZmFpbElmRmFsc2Uo
YXJndW1lbnRzLCAiQ2Fubm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7CisgICAgICAgICAgICAg
ICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGFyZ3Vt
ZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgdXNlZFZhcmlhYmxlc1NpemUgPSBjdXJyZW50U2NvcGUoKS0+Y3VycmVudFVzZWRWYXJpYWJs
ZXNTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25F
bmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgICAgICBPcHRpb25h
bDxDYWxsT3JBcHBseURlcHRoU2NvcGU+IGNhbGxPckFwcGx5RGVwdGhTY29wZTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVjb3JkQ2FsbE9yQXBwbHlEZXB0aDxUcmVlQnVpbGRlcj4odGhpcywgKm1f
dm0sIGNhbGxPckFwcGx5RGVwdGhTY29wZSwgYmFzZSk7CisKKyAgICAgICAgICAgICAgICAgICAg
VHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKIAotICAg
ICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFy
Z3VtZW50cyIpOwotICAgICAgICAgICAgICAgIGlmIChiYXNlSXNTdXBlcikgewotICAgICAgICAg
ICAgICAgICAgICBTY29wZVJlZiBmdW5jdGlvblNjb3BlID0gY3VycmVudEZ1bmN0aW9uU2NvcGUo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvblNjb3BlLT5zZXRIYXNEaXJlY3RT
dXBlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCB1bm5lY2Vzc2FyeSB0byBj
aGVjayBvZiB1c2luZyBzdXBlciBkdXJpbmcgcmVwYXJzaW5nIG9uZSBtb3JlIHRpbWUuIEFsc28g
aXQgY2FuIGxlYWQgdG8gc3ludGF4IGVycm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBp
biBjYXNlIG9mIGFycm93IGZ1bmN0aW9uIGJlY2F1c2UgZHVyaW5nIHJlcGFyc2luZyB3ZSBkb24n
dCBrbm93IHdoZXRoZXIgd2UgY3VycmVudGx5IHBhcnNlIHRoZSBhcnJvdyBmdW5jdGlvbgotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9mIHRoZSBjb25zdHJ1Y3RvciBvciBtZXRo
b2QuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbGV4ZXItPmlzUmVwYXJzaW5nRnVu
Y3Rpb24oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjb3BlUmVmIGNsb3Nlc3RP
cmRpbmFyeUZ1bmN0aW9uU2NvcGUgPSBjbG9zZXN0UGFyZW50T3JkaW5hcnlGdW5jdGlvbk5vbkxl
eGljYWxTY29wZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yS2lu
ZCBmdW5jdGlvbkNvbnN0cnVjdG9yS2luZCA9ICFmdW5jdGlvblNjb3BlLT5pc0Fycm93RnVuY3Rp
b24oKSAmJiAhY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZS0+aXNFdmFsQ29udGV4dCgpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZnVuY3Rpb25TY29wZS0+Y29uc3RydWN0
b3JLaW5kKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbG9zZXN0T3JkaW5h
cnlGdW5jdGlvblNjb3BlLT5jb25zdHJ1Y3RvcktpbmQoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPT0gQ29u
c3RydWN0b3JLaW5kOjpOb25lLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShmdW5jdGlv
bkNvbnN0cnVjdG9yS2luZCAhPSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMsICJzdXBlciBpcyBu
b3QgdmFsaWQgaW4gdGhpcyBjb250ZXh0Iik7CisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNl
SXNBc3luY0tleXdvcmQgJiYgKCFhcmd1bWVudHMgfHwgbWF0Y2goQVJST1dGVU5DVElPTikpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+cmV2ZXJ0VG9QcmV2aW91
c1VzZWRWYXJpYWJsZXModXNlZFZhcmlhYmxlc1NpemUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yY2VDbGFzc2lmeUV4cHJlc3Npb25FcnJvcihFcnJvckluZGljYXRlc0FzeW5jQXJyb3dG
dW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsRHVlVG9VbmV4cGVjdGVkVG9r
ZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGZhaWxJ
ZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50cyIpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFNjb3BlUmVmIGZ1bmN0aW9uU2NvcGUgPSBjdXJyZW50RnVuY3Rpb25TY29wZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvblNjb3BlLT5zZXRIYXNEaXJlY3RTdXBlcigp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQgdW5uZWNlc3NhcnkgdG8gY2hl
Y2sgb2YgdXNpbmcgc3VwZXIgZHVyaW5nIHJlcGFyc2luZyBvbmUgbW9yZSB0aW1lLiBBbHNvIGl0
IGNhbiBsZWFkIHRvIHN5bnRheCBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGluIGNhc2Ugb2YgYXJyb3cgZnVuY3Rpb24gYmVjYXVzZSBkdXJpbmcgcmVwYXJzaW5nIHdlIGRv
bid0IGtub3cgd2hldGhlciB3ZSBjdXJyZW50bHkgcGFyc2UgdGhlIGFycm93IGZ1bmN0aW9uCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9mIHRoZSBjb25zdHJ1Y3RvciBv
ciBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2xleGVyLT5pc1Jl
cGFyc2luZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nv
cGVSZWYgY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZSA9IGNsb3Nlc3RQYXJlbnRPcmRpbmFy
eUZ1bmN0aW9uTm9uTGV4aWNhbFNjb3BlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbnN0cnVjdG9yS2luZCBmdW5jdGlvbkNvbnN0cnVjdG9yS2luZCA9ICFmdW5jdGlvblNj
b3BlLT5pc0Fycm93RnVuY3Rpb24oKSAmJiAhY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZS0+
aXNFdmFsQ29udGV4dCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZ1
bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9yS2luZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9yS2lu
ZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUo
ZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPT0gQ29uc3RydWN0b3JLaW5kOjpOb25lLCAic3VwZXIg
aXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgIT0gQ29u
c3RydWN0b3JLaW5kOjpFeHRlbmRzLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4
dCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcGUoKS0+aXNBcnJv
d0Z1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+
c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyQ2FsbCgpOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0
aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblNjb3BlLT5zZXRJbm5lckFy
cm93RnVuY3Rpb25Vc2VzU3VwZXJDYWxsKCk7CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBp
c09wdGlvbmFsQ2FsbCA9IG9wdGlvbmFsQ2hhaW5Mb2NhdGlvbi5lbmRPZmZzZXQgPT0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGV4cHJlc3Npb25FbmQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgYmFzZSA9IGNvbnRleHQubWFrZUZ1bmN0aW9uQ2FsbE5vZGUoc3RhcnRMb2NhdGlvbiwgYmFz
ZSwgcHJldmlvdXNCYXNlV2FzU3VwZXIsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24o
KSwgY2FsbE9yQXBwbHlEZXB0aFNjb3BlID8gY2FsbE9yQXBwbHlEZXB0aFNjb3BlLT5kaXN0YW5j
ZVRvSW5uZXJtb3N0Q2hpbGQoKSA6IDAsIGlzT3B0aW9uYWxDYWxsKTsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNPcHRpb25hbENhbGwpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25hbENoYWluQmFzZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKHN0YXJ0TG9jYXRpb24sIGJhc2Us
IHByZXZpb3VzQmFzZVdhc1N1cGVyLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwKLSAgICAg
ICAgICAgICAgICAgICAgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSwgY2Fs
bE9yQXBwbHlEZXB0aFNjb3BlID8gY2FsbE9yQXBwbHlEZXB0aFNjb3BlLT5kaXN0YW5jZVRvSW5u
ZXJtb3N0Q2hpbGQoKSA6IDApOworICAgICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhT
Q291bnQgPSBub25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRE9UOiB7Ci0gICAg
ICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAg
ICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpOwotICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXJGbGFnc0lnbm9yZVJl
c2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkS2V5d29yZHMpOwotICAgICAgICAg
ICAgbWF0Y2hPckZhaWwoSURFTlQsICJFeHBlY3RlZCBhIHByb3BlcnR5IG5hbWUgYWZ0ZXIgJy4n
Iik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVEb3RBY2Nlc3Moc3RhcnRMb2Nh
dGlvbiwgYmFzZSwgbV90b2tlbi5tX2RhdGEuaWRlbnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVz
c2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShi
YXNlSXNTdXBlciAmJiBjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpKQotICAgICAg
ICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblNjb3BlKCktPnNldElubmVyQXJyb3dGdW5jdGlvblVz
ZXNTdXBlclByb3BlcnR5KCk7Ci0gICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEJBQ0tRVU9URTogewotICAgICAgICAgICAgc2Vt
YW50aWNGYWlsSWZUcnVlKGJhc2VJc1N1cGVyLCAiQ2Fubm90IHVzZSBzdXBlciBhcyB0YWcgZm9y
IHRhZ2dlZCB0ZW1wbGF0ZXMiKTsKLSAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Np
b25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwotICAgICAgICAgICAgaW50IG5vbkxIU0Nv
dW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKLSAgICAgICAgICAgIHR5cGVuYW1lIFRy
ZWVCdWlsZGVyOjpUZW1wbGF0ZUxpdGVyYWwgdGVtcGxhdGVMaXRlcmFsID0gcGFyc2VUZW1wbGF0
ZUxpdGVyYWwoY29udGV4dCwgTGV4ZXJUeXBlOjpSYXdTdHJpbmdzQnVpbGRNb2RlOjpCdWlsZFJh
d1N0cmluZ3MpOwotICAgICAgICAgICAgZmFpbElmRmFsc2UodGVtcGxhdGVMaXRlcmFsLCAiQ2Fu
bm90IHBhcnNlIHRlbXBsYXRlIGxpdGVyYWwiKTsKLSAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0
LmNyZWF0ZVRhZ2dlZFRlbXBsYXRlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHRlbXBsYXRlTGl0ZXJh
bCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigp
KTsKLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsK
LSAgICAgICAgICAgIG1fc2VlblRhZ2dlZFRlbXBsYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBnb3RvIGVuZE1l
bWJlckV4cHJlc3Npb247CisgICAgICAgICAgICBjYXNlIERPVDogeworICAgICAgICAgICAgICAg
IG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgICAgICAgICAg
ICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigp
OworICAgICAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVS
ZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKKyAgICAgICAg
ICAgICAgICBtYXRjaE9yRmFpbChJREVOVCwgIkV4cGVjdGVkIGEgcHJvcGVydHkgbmFtZSBhZnRl
ciAiLCBvcHRpb25hbENoYWluQmFzZSA/ICInPy4nIiA6ICInLiciKTsKKyAgICAgICAgICAgICAg
ICBiYXNlID0gY29udGV4dC5jcmVhdGVEb3RBY2Nlc3Moc3RhcnRMb2NhdGlvbiwgYmFzZSwgbV90
b2tlbi5tX2RhdGEuaWRlbnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5F
bmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIg
JiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudEZ1bmN0aW9uU2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVy
UHJvcGVydHkoKTsKKyAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEJBQ0tRVU9URTogeworICAgICAg
ICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShvcHRpb25hbENoYWluQmFzZSwgIkNhbm5vdCB1
c2UgdGFnZ2VkIHRlbXBsYXRlcyBpbiBhbiBvcHRpb25hbCBjaGFpbiIpOworICAgICAgICAgICAg
ICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNlSXNTdXBlciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMg
dGFnIGZvciB0YWdnZWQgdGVtcGxhdGVzIik7CisgICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRp
b24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CisgICAgICAgICAgICAg
ICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKKyAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6VGVtcGxhdGVMaXRlcmFsIHRlbXBsYXRlTGl0
ZXJhbCA9IHBhcnNlVGVtcGxhdGVMaXRlcmFsKGNvbnRleHQsIExleGVyVHlwZTo6UmF3U3RyaW5n
c0J1aWxkTW9kZTo6QnVpbGRSYXdTdHJpbmdzKTsKKyAgICAgICAgICAgICAgICBmYWlsSWZGYWxz
ZSh0ZW1wbGF0ZUxpdGVyYWwsICJDYW5ub3QgcGFyc2UgdGVtcGxhdGUgbGl0ZXJhbCIpOworICAg
ICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZVRhZ2dlZFRlbXBsYXRlKHN0YXJ0TG9j
YXRpb24sIGJhc2UsIHRlbXBsYXRlTGl0ZXJhbCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9u
RW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICBtX3BhcnNlclN0
YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CisgICAgICAgICAgICAgICAgbV9zZWVuVGFn
Z2VkVGVtcGxhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBnb3RvIGVuZE9mQ2hhaW47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmV2aW91c0Jhc2VXYXNTdXBlciA9IGJhc2VJ
c1N1cGVyOworICAgICAgICAgICAgYmFzZUlzU3VwZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIHR5
cGUgPSBtX3Rva2VuLm1fdHlwZTsKICAgICAgICAgfQotICAgICAgICBwcmV2aW91c0Jhc2VXYXNT
dXBlciA9IGJhc2VJc1N1cGVyOwotICAgICAgICBiYXNlSXNTdXBlciA9IGZhbHNlOwotICAgIH0K
LWVuZE1lbWJlckV4cHJlc3Npb246CitlbmRPZkNoYWluOgorICAgICAgICBpZiAob3B0aW9uYWxD
aGFpbkJhc2UpCisgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVPcHRpb25hbENoYWlu
KG9wdGlvbmFsQ2hhaW5Mb2NhdGlvbiwgb3B0aW9uYWxDaGFpbkJhc2UsIGJhc2UpOworICAgIH0g
d2hpbGUgKG1hdGNoKFFVRVNUSU9ORE9UKSk7CisKICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFz
ZUlzU3VwZXIsICJzdXBlciBpcyBub3QgdmFsaWQgaW4gdGhpcyBjb250ZXh0Iik7CiAgICAgd2hp
bGUgKG5ld0NvdW50LS0pCiAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9j
YXRpb24sIGJhc2UsIGV4cHJlc3Npb25TdGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAppbmRleCAxNWNhNWVh
ZjI4ZTc1OTJmNDNmM2RjZTQxZThlNDFlNjFhOWU4MTM2Li43MjA2NGI5Mjg0ODE2NmY2ZGUyYjIz
ZjhhM2Y1OGM5ODFiNzY3OWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlclRva2Vucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyVG9rZW5zLmgKQEAgLTEzNiw2ICsxMzYsNyBAQCBlbnVtIEpTVG9rZW5UeXBlIHsKICAgICBP
UkVRVUFMLAogICAgIERPVERPVERPVCwKICAgICBBUlJPV0ZVTkNUSU9OLAorICAgIFFVRVNUSU9O
RE9ULAogICAgIExhc3RVbnRhZ2dlZFRva2VuLAogCiAgICAgLy8gQmVnaW4gdGFnZ2VkIHRva2Vu
cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2Vy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAppbmRleCA0
MTk5NThiZWRiNDI4MTFiMTYyODQwMWNkNGE0Mjk4YTVhNWNmMzc2Li42MWRkNzUwMDRiYzQ3YmZh
NTRmMzVlZDcxZGUyMmZkZTQ3Y2IyZDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1N5bnRheENoZWNrZXIuaApAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJl
c29sdmVFdmFsRXhwciwgUmVzb2x2ZUV4cHIsIEludGVnZXJFeHByLCBEb3VibGVFeHByLCBTdHJp
bmdFeHByLCBCaWdJbnRFeHByLAogICAgICAgICBUaGlzRXhwciwgTnVsbEV4cHIsIEJvb2xFeHBy
LCBSZWdFeHBFeHByLCBPYmplY3RMaXRlcmFsRXhwciwKICAgICAgICAgRnVuY3Rpb25FeHByLCBD
bGFzc0V4cHIsIFN1cGVyRXhwciwgSW1wb3J0RXhwciwgQnJhY2tldEV4cHIsIERvdEV4cHIsIENh
bGxFeHByLAotICAgICAgICBOZXdFeHByLCBQcmVFeHByLCBQb3N0RXhwciwgVW5hcnlFeHByLCBC
aW5hcnlFeHByLAorICAgICAgICBOZXdFeHByLCBQcmVFeHByLCBQb3N0RXhwciwgVW5hcnlFeHBy
LCBCaW5hcnlFeHByLCBPcHRpb25hbENoYWluLAogICAgICAgICBDb25kaXRpb25hbEV4cHIsIEFz
c2lnbm1lbnRFeHByLCBUeXBlb2ZFeHByLAogICAgICAgICBEZWxldGVFeHByLCBBcnJheUxpdGVy
YWxFeHByLCBCaW5kaW5nRGVzdHJ1Y3R1cmluZywgUmVzdFBhcmFtZXRlciwKICAgICAgICAgQXJy
YXlEZXN0cnVjdHVyaW5nLCBPYmplY3REZXN0cnVjdHVyaW5nLCBTb3VyY2VFbGVtZW50c1Jlc3Vs
dCwKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IERvbnRCdWlsZFN0cmluZ3MgPSBMZXhlckZsYWdzRG9udEJ1aWxkU3RyaW5nczsKIAogICAgIGlu
dCBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIFNvdXJjZUVsZW1lbnRzUmVzdWx0OyB9
Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgaW50LCBib29sLCBpbnQsIGludCwgaW50LCBpbnQsIHNpemVfdCkgeyByZXR1cm4g
Q2FsbEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgaW50LCBpbnQsIGludCwg
aW50LCBzaXplX3QsIGJvb2wpIHsgcmV0dXJuIENhbGxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlQ29tbWFFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBl
IGV4cHIpIHsgcmV0dXJuIGV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBhcHBlbmRUb0NvbW1h
RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSYgaGVhZCwgRXhwcmVz
c2lvblR5cGUsIEV4cHJlc3Npb25UeXBlIG5leHQpIHsgaGVhZCA9IG5leHQ7IHJldHVybiBuZXh0
OyB9CiAgICAgRXhwcmVzc2lvblR5cGUgbWFrZUFzc2lnbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgYm9v
bCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KQEAgLTE4NCw2ICsx
ODQsNyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlUmVnRXhwKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImIHBhdHRlcm4sIGNvbnN0IElkZW50aWZp
ZXImIGZsYWdzLCBpbnQpIHsgcmV0dXJuIFlhcnI6Omhhc0Vycm9yKFlhcnI6OmNoZWNrU3ludGF4
KHBhdHRlcm4uc3RyaW5nKCksIGZsYWdzLnN0cmluZygpKSkgPyAwIDogUmVnRXhwRXhwcjsgfQog
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQog
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvblR5cGUsIGludCwgaW50KSB7IHJldHVybiBOZXdFeHByOyB9CisgICAgRXhwcmVz
c2lvblR5cGUgY3JlYXRlT3B0aW9uYWxDaGFpbihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHBy
ZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIE9wdGlvbmFsQ2hhaW47IH0KICAg
ICBFeHByZXNzaW9uVHlwZSBjcmVhdGVDb25kaXRpb25hbEV4cHIoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSkgeyBy
ZXR1cm4gQ29uZGl0aW9uYWxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXNzaWdu
UmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVz
c2lvblR5cGUsIGludCwgaW50LCBpbnQsIEFzc2lnbm1lbnRDb250ZXh0KSB7IHJldHVybiBBc3Np
Z25tZW50RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUVtcHR5VmFyRXhwcmVzc2lv
bihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJikgeyByZXR1cm4gQXNz
aWdubWVudEV4cHI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhj
ZXB0aW9uSGVscGVycy5jcHAKaW5kZXggMTU2YzE4MGUxODM0N2Y0N2M5MzkwNDU5ZTVkMjE3NTEx
Yjk4MzFmZi4uOWU3NTg5MmU1MDc2NTcxNTJiY2IzNzNiNmYwYjU4ODI2YzE1NGMyOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAK
QEAgLTE3Niw2ICsxNzYsMTAgQEAgc3RhdGljIFN0cmluZyBmdW5jdGlvbkNhbGxCYXNlKGNvbnN0
IFN0cmluZyYgc291cmNlVGV4dCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAor
ICAgIC8vIERvbid0IGRpc3BsYXkgdGhlID8uIG9mIGFuIG9wdGlvbmFsIGNhbGwuCisgICAgaWYg
KGlkeCA+IDEgJiYgc291cmNlVGV4dFtpZHhdID09ICcuJyAmJiBzb3VyY2VUZXh0W2lkeCAtIDFd
ID09ICc/JykKKyAgICAgICAgaWR4IC09IDI7CisKICAgICByZXR1cm4gc291cmNlVGV4dC5sZWZ0
KGlkeCArIDEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5k
ZXggMGQ1ODJlZWFjMzNlY2EwZTRhZDhlNDg5NjU5YjQzMDE5ZDQ0ZTdhYy4uN2JiMTNlNGVlOTgw
YzU4ZjcwZDgxMTQ4YjgxODY5MDYzNzk0ZWU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaApAQCAtNDk2LDcgKzQ5Niw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdl
YkFzc2VtYmx5U3RyZWFtaW5nQXBpID0gZmFsc2U7CiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJs
eVJlZmVyZW5jZXMsIGZhbHNlLCBOb3JtYWwsICJBbGxvdyB0eXBlcyBmcm9tIHRoZSB3YXNtIHJl
ZmVyZW5jZXMgc3BlYy4iKSBcCiAgICAgdihib29sLCB1c2VXZWFrUmVmcywgZmFsc2UsIE5vcm1h
bCwgIkV4cG9zZSB0aGUgV2Vha1JlZiBjb25zdHJ1Y3Rvci4iKSBcCiAgICAgdihib29sLCB1c2VC
aWdJbnQsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIGVuYWJsZSBCaWdJbnQgc3Vw
cG9ydC4iKSBcCi0gICAgdihib29sLCB1c2VOdWxsaXNoQ29hbGVzY2luZywgZmFsc2UsIE5vcm1h
bCwgIkVuYWJsZSBzdXBwb3J0IGZvciB0aGUgPz8gb3BlcmF0b3IuIikgXAorICAgIHYoYm9vbCwg
dXNlTnVsbGlzaEF3YXJlT3BlcmF0b3JzLCBmYWxzZSwgTm9ybWFsLCAiRW5hYmxlIHN1cHBvcnQg
Zm9yID8uIGFuZCA/PyBvcGVyYXRvcnMuIikgXAogICAgIHYoYm9vbCwgdXNlQXJyYXlBbGxvY2F0
aW9uUHJvZmlsaW5nLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHVzZSBvdXIgbm9y
bWFsIGFycmF5IGFsbG9jYXRpb24gcHJvZmlsaW5nLiBJZiBmYWxzZSwgdGhlIGFsbG9jYXRpb24g
cHJvZmlsZSB3aWxsIGFsd2F5cyBjbGFpbSB0byBiZSB1bmRlY2lkZWQuIikgXAogICAgIHYoYm9v
bCwgZm9yY2VQb2x5UHJvdG8sIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCBjcmVhdGVfdGhpcyB3
aWxsIGFsd2F5cyBjcmVhdGUgYW4gb2JqZWN0IHdpdGggYSBwb2x5IHByb3RvIHN0cnVjdHVyZS4i
KSBcCiAgICAgdihib29sLCBmb3JjZU1pbmlWTU1vZGUsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVl
LCBpdCB3aWxsIGZvcmNlIG1pbmkgVk0gbW9kZSBvbi4iKSBcCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODJlY2IyOWY0YjAyOWRkOTAwMzU5NmNj
YTVmOGE5MzFkMGNlNmM2Ny4uYTdhZDE3YTUzNjYyMWQ4NWJlOGE5MWE3NmIzNzI1ZTU3MWI4NzVl
YiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyIEBACisyMDE5LTA4LTA1ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bz
b255LmNvbT4KKworICAgICAgICBbRVNOZXh0XSBJbXBsZW1lbnQgb3B0aW9uYWwgY2hhaW5pbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDE5OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0
cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0wOC0wNCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFBpbmcgbG9hZHMgc2hvdWxkIG5vdCBwcmV2ZW50IHBh
Z2UgY2FjaGluZwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggODNkYzA2MmFiMjgy
MTE2MWE5MzFjMmFiZTQzZGY1ZjY2OWE4OGRhOS4uMDk4NzIzNTM2MGQyNDQ0ZDE3YmJlOWMzYThi
ZWFlMWJjOTFlOTk0ZSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC02OTksOCAr
Njk5LDggQEAgZGVmIHJ1bkJpZ0ludEVuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKICAgICBydW4oImJpZy1pbnQtZW5hYmxlZCIsICItLXVzZUJpZ0ludD10cnVlIiAsICooRlRM
X09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKLWRlZiBydW5O
dWxsaXNoQ29hbGVzY2luZ0VuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAg
ICBydW4oIm51bGxpc2gtY29hbGVzY2luZy1lbmFibGVkIiwgIi0tdXNlTnVsbGlzaENvYWxlc2Np
bmc9dHJ1ZSIgLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkK
K2RlZiBydW5OdWxsaXNoQXdhcmVPcGVyYXRvcnNFbmFibGVkKCpvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpCisgICAgcnVuKCJudWxsaXNoLWF3YXJlLW9wZXJhdG9ycy1lbmFibGVkIiwgIi0t
dXNlTnVsbGlzaEF3YXJlT3BlcmF0b3JzPXRydWUiICwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVCgqb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rl
c3RzL0NoYW5nZUxvZwppbmRleCA0MzI0ZTZjNzAxODkxMzBkYzc0Y2UwMmI0NjVkNTYwZTNkMWNk
ZjNlLi42YjRmOGI0NDU4ZmQ4ZjIzZGQxNTc1MzNhMzIxZDJmNzcyOTYzZGQwIDEwMDY0NAotLS0g
YS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDE5LTA4LTA1ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4K
KworICAgICAgICBbRVNOZXh0XSBJbXBsZW1lbnQgb3B0aW9uYWwgY2hhaW5pbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDE5OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL251bGxpc2gt
Y29hbGVzY2luZy5qczoKKyAgICAgICAgKiBzdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcuanM6IEFk
ZGVkLgorCiAyMDE5LTA4LTAyICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0pTQ10gU3VwcG9ydCBXZWJBc3NlbWJseSBpbiBTYW1wbGluZ1Byb2ZpbGVyCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanMgYi9KU1Rlc3Rz
L3N0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanMKaW5kZXggNTk1OGYxMjczYWIxNjQ3MTMwYTZl
ZDZlMWI4NmU1ZTFmNDRhN2M0ZS4uYTUyNzJlZDU0NWFjZjA2YzU4ZGZkOTg3NWUwNWM3NWY3YjA0
YjA1MSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzCisr
KyBiL0pTVGVzdHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qcwpAQCAtMSw0ICsxLDQgQEAK
LS8vQCBydW5OdWxsaXNoQ29hbGVzY2luZ0VuYWJsZWQKKy8vQCBydW5OdWxsaXNoQXdhcmVPcGVy
YXRvcnNFbmFibGVkCiAKIGZ1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKICAg
ICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL29w
dGlvbmFsLWNoYWluaW5nLmpzIGIvSlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzYyNzYzNzM5NTBlOTNiMDAzZGQyOGYwNWE1MDQ5MzZhNDAwZjY3NgotLS0g
L2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL29wdGlvbmFsLWNoYWluaW5nLmpzCkBAIC0w
LDAgKzEsMTUxIEBACisvL0AgcnVuTnVsbGlzaEF3YXJlT3BlcmF0b3JzRW5hYmxlZAorCitmdW5j
dGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhw
ZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0
IGdvdCAke2FjdHVhbH1gKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3dTeW50YXhFcnJvcihz
Y3JpcHQpIHsKKyAgICBsZXQgZXJyb3I7CisgICAgdHJ5IHsKKyAgICAgICAgZXZhbChzY3JpcHQp
OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKworICAgIGlm
ICghKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoJ0V4cGVjdGVkIFN5bnRheEVycm9yIScpOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvd1R5
cGVFcnJvcihmdW5jLCBtZXNzYWdlUHJlZml4KSB7CisgICAgbGV0IGVycm9yOworICAgIHRyeSB7
CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsK
KyAgICB9CisKKyAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcikpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgVHlwZUVycm9yIScpOworCisgICAgaWYgKCFlcnJv
ci5tZXNzYWdlLnN0YXJ0c1dpdGgobWVzc2FnZVByZWZpeCkpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcignVHlwZUVycm9yIGhhcyB3cm9uZyBtZXNzYWdlIScpOworfQorCitzaG91bGRCZSh1bmRl
ZmluZWQ/LnZhbHVlT2YoKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKG51bGw/LnZhbHVlT2YoKSwg
dW5kZWZpbmVkKTsKK3Nob3VsZEJlKHRydWU/LnZhbHVlT2YoKSwgdHJ1ZSk7CitzaG91bGRCZShm
YWxzZT8udmFsdWVPZigpLCBmYWxzZSk7CitzaG91bGRCZSgwPy52YWx1ZU9mKCksIDApOworc2hv
dWxkQmUoMT8udmFsdWVPZigpLCAxKTsKK3Nob3VsZEJlKCcnPy52YWx1ZU9mKCksICcnKTsKK3No
b3VsZEJlKCdoaSc/LnZhbHVlT2YoKSwgJ2hpJyk7CitzaG91bGRCZSgoe30pPy5jb25zdHJ1Y3Rv
ciwgT2JqZWN0KTsKK3Nob3VsZEJlKCh7IHg6ICdoaScgfSk/LngsICdoaScpOworc2hvdWxkQmUo
W10/Lmxlbmd0aCwgMCk7CitzaG91bGRCZShbJ2hpJ10/Lmxlbmd0aCwgMSk7CisKK3Nob3VsZEJl
KHVuZGVmaW5lZD8uWyd2YWx1ZU9mJ10oKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKG51bGw/Llsn
dmFsdWVPZiddKCksIHVuZGVmaW5lZCk7CitzaG91bGRCZSh0cnVlPy5bJ3ZhbHVlT2YnXSgpLCB0
cnVlKTsKK3Nob3VsZEJlKGZhbHNlPy5bJ3ZhbHVlT2YnXSgpLCBmYWxzZSk7CitzaG91bGRCZSgw
Py5bJ3ZhbHVlT2YnXSgpLCAwKTsKK3Nob3VsZEJlKDE/LlsndmFsdWVPZiddKCksIDEpOworc2hv
dWxkQmUoJyc/LlsndmFsdWVPZiddKCksICcnKTsKK3Nob3VsZEJlKCdoaSc/LlsndmFsdWVPZidd
KCksICdoaScpOworc2hvdWxkQmUoKHt9KT8uWydjb25zdHJ1Y3RvciddLCBPYmplY3QpOworc2hv
dWxkQmUoKHsgeDogJ2hpJyB9KT8uWyd4J10sICdoaScpOworc2hvdWxkQmUoW10/LlsnbGVuZ3Ro
J10sIDApOworc2hvdWxkQmUoWydoaSddPy5bMF0sICdoaScpOworCitzaG91bGRCZSh1bmRlZmlu
ZWQ/LigpLCB1bmRlZmluZWQpOworc2hvdWxkQmUobnVsbD8uKCksIHVuZGVmaW5lZCk7CitzaG91
bGRUaHJvd1R5cGVFcnJvcigoKSA9PiB0cnVlPy4oKSwgJ3RydWUgaXMgbm90IGEgZnVuY3Rpb24n
KTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+IGZhbHNlPy4oKSwgJ2ZhbHNlIGlzIG5vdCBh
IGZ1bmN0aW9uJyk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAwPy4oKSwgJzAgaXMgbm90
IGEgZnVuY3Rpb24nKTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+IDE/LigpLCAnMSBpcyBu
b3QgYSBmdW5jdGlvbicpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gJyc/LigpLCAnXCdc
JyBpcyBub3QgYSBmdW5jdGlvbicpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gJ2hpJz8u
KCksICdcJ2hpXCcgaXMgbm90IGEgZnVuY3Rpb24nKTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgp
ID0+ICh7fSk/LigpLCAnKHt9KSBpcyBub3QgYSBmdW5jdGlvbicpOworc2hvdWxkVGhyb3dUeXBl
RXJyb3IoKCkgPT4gKHsgeDogJ2hpJyB9KT8uKCksICcoeyB4OiBcJ2hpXCcgfSkgaXMgbm90IGEg
ZnVuY3Rpb24nKTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+IFtdPy4oKSwgJ1tdIGlzIG5v
dCBhIGZ1bmN0aW9uJyk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiBbJ2hpJ10/LigpLCAn
W1wnaGlcJ10gaXMgbm90IGEgZnVuY3Rpb24nKTsKKworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkg
PT4gKHt9KT8uaSgpLCAnKHt9KT8uaSBpcyBub3QgYSBmdW5jdGlvbicpOworc2hvdWxkQmUoKHt9
KS5pPy4oKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKCh7fSk/Lmk/LigpLCB1bmRlZmluZWQpOwor
c2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHt9KT8uWydpJ10oKSwgJyh7fSk/LltcJ2lcJ10g
aXMgbm90IGEgZnVuY3Rpb24nKTsKK3Nob3VsZEJlKCh7fSlbJ2knXT8uKCksIHVuZGVmaW5lZCk7
CitzaG91bGRCZSgoe30pPy5bJ2knXT8uKCksIHVuZGVmaW5lZCk7CisKK3Nob3VsZFRocm93VHlw
ZUVycm9yKCgpID0+ICh7fSk/LmFbJ2InXSwgJ3VuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0Jyk7
CitzaG91bGRCZSgoe30pPy5hPy5bJ2InXSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKG51bGw/LmFb
J2InXSgpLmMsIHVuZGVmaW5lZCk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoe30pPy5b
J2EnXS5iLCAndW5kZWZpbmVkIGlzIG5vdCBhbiBvYmplY3QnKTsKK3Nob3VsZEJlKCh7fSk/Llsn
YSddPy5iLCB1bmRlZmluZWQpOworc2hvdWxkQmUobnVsbD8uWydhJ10uYigpWydjJ10sIHVuZGVm
aW5lZCk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoKCkgPT4ge30pPy4oKSgpLCAnKCgp
ID0+IHt9KT8uKCkgaXMgbm90IGEgZnVuY3Rpb24nKTsKK3Nob3VsZEJlKCgoKSA9PiB7fSk/Ligp
Py4oKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKG51bGw/LigpKCkuYVsnYiddLCB1bmRlZmluZWQp
OworCitjb25zdCBvMCA9IHsgYTogeyBiKCkgeyByZXR1cm4gdGhpcy5fYi5iaW5kKHRoaXMpOyB9
LCBfYigpIHsgcmV0dXJuIHRoaXMuX19iOyB9LCBfX2I6IHsgYzogNDIgfSB9IH07CitzaG91bGRC
ZShvMD8uYT8uWydiJ10/LigpPy4oKT8uYywgNDIpOworc2hvdWxkQmUobzA/Lmk/LlsnaiddPy4o
KT8uKCk/LmssIHVuZGVmaW5lZCk7CisKK2NvbnN0IG8xID0geyBjb3VudDogMCwgZ2V0IHgoKSB7
IHRoaXMuY291bnQrKzsgcmV0dXJuICgpID0+IHt9OyB9IH07CitvMS54Py55Oworc2hvdWxkQmUo
bzEuY291bnQsIDEpOworbzEueD8uWyd5J107CitzaG91bGRCZShvMS5jb3VudCwgMik7CitvMS54
Py4oKTsKK3Nob3VsZEJlKG8xLmNvdW50LCAzKTsKK251bGw/LihvMS54KTsKK3Nob3VsZEJlKG8x
LmNvdW50LCAzKTsKKworc2hvdWxkQmUoZGVsZXRlIHVuZGVmaW5lZD8uZm9vLCB0cnVlKTsKK3No
b3VsZEJlKGRlbGV0ZSBudWxsPy5mb28sIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIHVuZGVmaW5l
ZD8uWydmb28nXSwgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgbnVsbD8uWydmb28nXSwgdHJ1ZSk7
CitzaG91bGRCZShkZWxldGUgdW5kZWZpbmVkPy4oKSwgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUg
bnVsbD8uKCksIHRydWUpOworCitjb25zdCBvMiA9IHsgeDogMCwgeTogMCwgeigpIHt9IH07Citz
aG91bGRCZShkZWxldGUgbzI/LngsIHRydWUpOworc2hvdWxkQmUobzIueCwgdW5kZWZpbmVkKTsK
K3Nob3VsZEJlKGRlbGV0ZSBvMj8ueCwgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgbzI/LlsneSdd
LCB0cnVlKTsKK3Nob3VsZEJlKG8yLnksIHVuZGVmaW5lZCk7CitzaG91bGRCZShkZWxldGUgbzI/
LlsneSddLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBvMi56Py4oKSwgdHJ1ZSk7CisKK2Z1bmN0
aW9uIGdyZWV0KG5hbWUpIHsgcmV0dXJuIGBoZXksICR7bmFtZX0ke3RoaXMuc3VmZml4ID8/ICcu
J31gOyB9CitzaG91bGRCZShldmFsPy4oJ2dyZWV0KCJ3b3JsZCIpJyksICdoZXksIHdvcmxkLicp
Oworc2hvdWxkQmUoZ3JlZXQ/LmNhbGwoeyBzdWZmaXg6ICchJyB9LCAnd29ybGQnKSwgJ2hleSwg
d29ybGQhJyk7CitzaG91bGRCZShncmVldC5jYWxsPy4oeyBzdWZmaXg6ICchJyB9LCAnd29ybGQn
KSwgJ2hleSwgd29ybGQhJyk7CitzaG91bGRCZShudWxsPy5jYWxsKHsgc3VmZml4OiAnIScgfSwg
J3dvcmxkJyksIHVuZGVmaW5lZCk7CitzaG91bGRCZSgoe30pLmNhbGw/Lih7IHN1ZmZpeDogJyEn
IH0sICd3b3JsZCcpLCB1bmRlZmluZWQpOworc2hvdWxkQmUoZ3JlZXQ/LmFwcGx5KHsgc3VmZml4
OiAnPycgfSwgWyd3b3JsZCddKSwgJ2hleSwgd29ybGQ/Jyk7CitzaG91bGRCZShncmVldC5hcHBs
eT8uKHsgc3VmZml4OiAnPycgfSwgWyd3b3JsZCddKSwgJ2hleSwgd29ybGQ/Jyk7CitzaG91bGRC
ZShudWxsPy5hcHBseSh7IHN1ZmZpeDogJz8nIH0sIFsnd29ybGQnXSksIHVuZGVmaW5lZCk7Citz
aG91bGRCZSgoe30pLmFwcGx5Py4oeyBzdWZmaXg6ICc/JyB9LCBbJ3dvcmxkJ10pLCB1bmRlZmlu
ZWQpOworCitjb25zdCBtYXNxdWVyYWRlciA9IG1ha2VNYXNxdWVyYWRlcigpOworbWFzcXVlcmFk
ZXIuYmFyID0gMzsKK3Nob3VsZEJlKG1hc3F1ZXJhZGVyPy5iYXIsIDMpOworc2hvdWxkQmUobWFz
cXVlcmFkZXI/LlsnYmFyJ10sIDMpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gbWFzcXVl
cmFkZXI/LigpLCAnbWFzcXVlcmFkZXIgaXMgbm90IGEgZnVuY3Rpb24nKTsKKworc2hvdWxkVGhy
b3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBjbGFzcyBEIGV4dGVuZHMgQyB7IGZvbygpIHsgcmV0
dXJuIHN1cGVyPy5iYXI7IH0gfScpOworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7
fSBjbGFzcyBEIGV4dGVuZHMgQyB7IGZvbygpIHsgcmV0dXJuIHN1cGVyPy5bImJhciJdOyB9IH0n
KTsKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NsYXNzIEMge30gY2xhc3MgRCBleHRlbmRzIEMg
eyBjb25zdHJ1Y3RvcigpIHsgc3VwZXI/LigpOyB9IH0nKTsKKworc2hvdWxkVGhyb3dTeW50YXhF
cnJvcignY29uc3QgbyA9IHsgQzogY2xhc3Mge30gfTsgbmV3IG8/LkMoKTsnKQorc2hvdWxkVGhy
b3dTeW50YXhFcnJvcignY29uc3QgbyA9IHsgQzogY2xhc3Mge30gfTsgbmV3IG8/LlsiQyJdKCk7
JykKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NsYXNzIEMge30gbmV3IEM/LigpOycpCitzaG91
bGRUaHJvd1N5bnRheEVycm9yKCdmdW5jdGlvbiBmb28oKSB7IG5ldz8udGFyZ2V0OyB9Jyk7CisK
K3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2Z1bmN0aW9uIHRhZygpIHt9IHRhZz8uYGA7Jyk7Citz
aG91bGRUaHJvd1N5bnRheEVycm9yKCdjb25zdCBvID0geyB0YWcoKSB7fSB9OyBvPy50YWdgYDsn
KTsKKworLy8gTk9UIGFuIG9wdGlvbmFsIGNoYWluCitzaG91bGRCZShmYWxzZT8uNDo1LCA1KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375646</attachid>
            <date>2019-08-06 13:18:10 -0700</date>
            <delta_ts>2019-08-08 14:55:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200199-20190806131806.patch</filename>
            <type>text/plain</type>
            <size>64983</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4MzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MzM1YmY4ZDdjMjY4MGNmY2Y2Mjk2ZjUzMGY2NDhiZWMzOTJiZWEwLi4yMmQ4ZTEzMzFlODdkYmZi
Y2FmZTQ5MDM3OWIzYzE5MTZmMWE4MjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OSBAQAorMjAxOS0wOC0wNiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
dGhlIG9wdGlvbmFsIGNoYWluaW5nIHByb3Bvc2FsLCB3aGljaCBoYXMgbm93IHJlYWNoZWQgU3Rh
Z2UgMyBhdCBUQzM5LgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhID8uIG9wZXJhdG9yIHdo
aWNoOgorICAgICAgICAgLSBndWFyZHMgbWVtYmVyIGFjY2VzcyB3aGVuIHRoZSBMSFMgaXMgbnVs
bGlzaCwgaS5lLiBgbnVsbD8uZm9vYCBhbmQgYG51bGw/LlsnZm9vJ11gIGFyZSB1bmRlZmluZWQK
KyAgICAgICAgIC0gZ3VhcmRzIGZ1bmN0aW9uIGNhbGxzIHdoZW4gdGhlIExIUyBpcyBudWxsaXNo
LCBpLmUuIGBudWxsPy4oKWAgaXMgdW5kZWZpbmVkCisgICAgICAgICAtIHNob3J0LWNpcmN1aXRz
IG92ZXIgYSB3aG9sZSBhY2Nlc3MvY2FsbCBjaGFpbiwgaS5lLiBgbnVsbD8uYVsnYiddKGMrKylg
IGlzIHVuZGVmaW5lZCBhbmQgZG9lcyBub3QgaW5jcmVtZW50IGMKKworICAgICAgICBUaGlzIGZl
YXR1cmUgY2FuIGJlIG5haXZlbHkgdmlld2VkIGFzIGEgdGVybmFyeSBpbiBkaXNndWlzZSwgaS5l
LiBgYT8uYmAgaXMgbGlrZSBgYSA9PSBudWxsID8gdW5kZWZpbmVkIDogYS5iYC4KKyAgICAgICAg
SG93ZXZlciwgc2luY2Ugd2UgbXVzdCBiZSBzdXJlIG5vdCB0byBkb3VibGUtZXZhbHVhdGUgdGhl
IExIUywgaXQncyBhY3R1YWxseSByYXRoZXIgYWtpbiB0byBhIHRyeSBibG9jayAtLQorICAgICAg
ICBuYW1lbHksIHdlIGhhdmUgdGhlIGJ5dGVjb2RlIGdlbmVyYXRvciBrZWVwIGEgc3RhY2sgb2Yg
ZWFybHktb3V0IHRhcmdldCBsYWJlbHMgZm9yIGFjY2VzcyBhbmQgY2FsbCBub2Rlcy4KKworICAg
ICAgICAoQWxzbyBub3RlIHRoYXQgZG9jdW1lbnQuYWxsIGJlaGF2ZXMgYXMgYW4gb2JqZWN0LCBz
byAibnVsbGlzaCIgbWVhbnMgKnN0cmljdGx5KiBlcXVhbCB0byBudWxsIG9yIHVuZGVmaW5lZC4p
CisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YmVnaW5PcHRpb25hbENoYWluKTogQWRkZWQuCisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbmRPcHRpb25hbENoYWluKTogQWRkZWQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3B0aW9uYWxDaGVjayk6IEFk
ZGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAg
ICBJbXBsZW1lbnQgbGFiZWwgc3RhY2sgYW5kIGVhcmx5LW91dCBlbWl0dGVyLgorCisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkJyYWNrZXRB
Y2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRvdEFjY2Vzc29yTm9k
ZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVt
aXRCeXRlY29kZSk6IFJlZmFjdG9yIHNvIHdlIGNhbiBlbWl0T3B0aW9uYWxDaGVjayBpbiBhIHNp
bmdsZSBsb2NhdGlvbi4KKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5
dGVjb2RlKTogUmVmYWN0b3Igc28gd2UgY2FuIGVtaXRPcHRpb25hbENoZWNrIGluIGEgc2luZ2xl
IGxvY2F0aW9uLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2Rl
KToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToK
KyAgICAgICAgKEpTQzo6RGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OkRlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvYWxl
c2NlTm9kZTo6ZW1pdEJ5dGVjb2RlKTogQ2xlYW4gdXAuCisgICAgICAgIChKU0M6Ok9wdGlvbmFs
Q2hhaW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZC4KKyAgICAgICAgSW1wbGVtZW50ID8uIG5v
ZGUgYW5kIGVtaXQgY2hlY2tzIHdoZXJlIG5lZWRlZC4KKworICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbToKKyAgICAgICAgSGF2ZSBPcElzVW5kZWZpbmVkT3JOdWxsIHN1cHBvcnQgY29u
c3RhbnQgcmVnaXN0ZXJzLgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlT3B0aW9uYWxDaGFpbik6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRGVsZXRlTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1
aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpMZXhlcjxUPjo6bGV4V2l0aG91dENsZWFyaW5nTGluZVRlcm1pbmF0
b3IpOgorICAgICAgICAqIHBhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6
Ok9wdGlvbmFsQ2hhaW5Ob2RlOjpPcHRpb25hbENoYWluTm9kZSk6IEFkZGVkLgorICAgICAgICAq
IHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAoSlNDOjpFeHByZXNzaW9uTm9kZTo6aXNPcHRpb25h
bENoYWluIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjppc09w
dGlvbmFsQ2hhaW5CYXNlIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChKU0M6OkV4cHJlc3Npb25O
b2RlOjpzZXRJc09wdGlvbmFsQ2hhaW5CYXNlKTogQWRkZWQuCisgICAgICAgICogcGFyc2VyL1Bh
cnNlclRva2Vucy5oOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAg
IChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlT3B0aW9uYWxDaGFpbik6IEFkZGVkLgorICAgICAgICBJ
bnRyb2R1Y2UgbmV3IHRva2VuIGFuZCBBU1Qgbm9kZSwgYXMgd2VsbCBhcyBhbiBFeHByZXNzaW9u
Tm9kZSBmaWVsZCB0byBtYXJrIExIU2VzIHdpdGguCisKKyAgICAgICAgKiBwYXJzZXIvUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVz
c2lvbik6CisgICAgICAgIFBhcnNlIG9wdGlvbmFsIGNoYWlucyBieSB3cmFwcGluZyB0aGUgYWNj
ZXNzL2NhbGwgcGFyc2UgbG9vcC4KKworICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5jcHA6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ2FsbEJhc2UpOgorICAgICAgICBFbnN1cmUg
dGhhdCBUeXBlRXJyb3IgbWVzc2FnZXMgZG9uJ3QgaW5jbHVkZSB0aGUgJz8uJy4KKworICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICBVcGRhdGUgZmVhdHVyZSBmbGFnLCBhcyA/
LiBhbmQgPz8gYXJlIGEgZG91YmxlIGZlYXR1cmUgb2YgIm51bGxpc2gtYXdhcmUiIG9wZXJhdG9y
cy4KKwogMjAxOS0wOC0wNiAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW1dpbl0gRml4IEFwcGxlV2luIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDUx
NWI1OTgzZjZhMWQ1ODA1ZDJmYjQ4MWVjYzBhOTdjZDU5OWQ3YjkuLmUzNzFkZWUyMWYyYjA0MjA4
NDI4YWY2YTA2M2ZiNWRlMTRlYmEzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC00OTU4LDYgKzQ5
NTgsNDEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZihSZWdpc3RlcklEKiBj
b21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBDb21wbGV0aW8KICAgICBlbWl0SnVtcElmVHJ1ZShlcXVp
dmFsZW5jZVJlc3VsdCwganVtcFRhcmdldCk7CiB9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmJlZ2luT3B0aW9uYWxDaGFpbigpCit7CisgICAgbV9vcHRpb25hbENoYWluVGFyZ2V0TGFiZWxT
dGFjay5hcHBlbmQobmV3TGFiZWwoKSk7CisgICAgbV9vcHRpb25hbENoYWluRGVwdGgrKzsKK30K
Kwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW5kT3B0aW9uYWxDaGFpbihSZWdpc3RlcklEKiBk
c3QsIGJvb2wgaXNEZWxldGUpCit7CisgICAgQVNTRVJUKG1fb3B0aW9uYWxDaGFpblRhcmdldExh
YmVsU3RhY2suc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9vcHRpb25hbENoYWluRGVwdGgpOworCisg
ICAgaWYgKC0tbV9vcHRpb25hbENoYWluRGVwdGgpCisgICAgICAgIHJldHVybjsKKworICAgIFJl
ZjxMYWJlbD4gZW5kTGFiZWwgPSBuZXdMYWJlbCgpOworICAgIGVtaXRKdW1wKGVuZExhYmVsLmdl
dCgpKTsKKworICAgIHdoaWxlIChtX29wdGlvbmFsQ2hhaW5UYXJnZXRMYWJlbFN0YWNrLnNpemUo
KSkKKyAgICAgICAgZW1pdExhYmVsKG1fb3B0aW9uYWxDaGFpblRhcmdldExhYmVsU3RhY2sudGFr
ZUxhc3QoKS5nZXQoKSk7CisgICAgZW1pdExvYWQoZHN0LCBpc0RlbGV0ZSA/IGpzQm9vbGVhbih0
cnVlKSA6IGpzVW5kZWZpbmVkKCkpOworCisgICAgZW1pdExhYmVsKGVuZExhYmVsLmdldCgpKTsK
K30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJ
RCogc3JjLCBib29sIGlzU2Vjb25kQ2hlY2tGb3JDdXJyZW50Tm9kZSkKK3sKKyAgICBBU1NFUlQo
bV9vcHRpb25hbENoYWluVGFyZ2V0TGFiZWxTdGFjay5zaXplKCkpOworCisgICAgLy8gSW1tZWRp
YXRlIGJlZ2luLWFuZC1lbmQsIHVzZWQgd2hlbiBhbiBhY2Nlc3MtYW5kLWNhbGwgbm9kZSBoYXMg
Ym90aCBwYXJ0cyBtYXJrZWQgb3B0aW9uYWwgKGUuZy4gYGE/LmI/LigpYCkuCisgICAgaWYgKGlz
U2Vjb25kQ2hlY2tGb3JDdXJyZW50Tm9kZSkKKyAgICAgICAgbV9vcHRpb25hbENoYWluVGFyZ2V0
TGFiZWxTdGFjay5hcHBlbmQobmV3TGFiZWwoKSk7CisKKyAgICBlbWl0SnVtcElmVHJ1ZShlbWl0
SXNVbmRlZmluZWRPck51bGwobmV3VGVtcG9yYXJ5KCksIHNyYyksIG1fb3B0aW9uYWxDaGFpblRh
cmdldExhYmVsU3RhY2subGFzdCgpLmdldCgpKTsKK30KKwogdm9pZCBGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKIHsKICAgICAvLyBMZXhp
Y2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBi
dXQgaXQgb25seSBvY2N1cnMgaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCBlOTc2ODZhYTNlZGNkZDhkM2Y5
YjU3YzRhNmQxMjNiYWM5Y2IzOTg3Li5mYmVlNWQ0ODI2MDNmN2IzNmEyZWY0YTA3Y2M1MzYyYmI1
YWY2NjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC05NTksNiArOTU5LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIHB1c2hGaW5hbGx5Q29udHJvbEZsb3dTY29wZShGaW5hbGx5Q29udGV4
dCYpOwogICAgICAgICB2b2lkIHBvcEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKCk7CiAKKyAgICAg
ICAgdm9pZCBiZWdpbk9wdGlvbmFsQ2hhaW4oKTsKKyAgICAgICAgdm9pZCBlbmRPcHRpb25hbENo
YWluKFJlZ2lzdGVySUQqIGRzdCwgYm9vbCBpc0RlbGV0ZSA9IGZhbHNlKTsKKyAgICAgICAgdm9p
ZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMsIGJvb2wgaXNTZWNvbmRDaGVja0Zv
ckN1cnJlbnROb2RlID0gZmFsc2UpOworCiAgICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNj
b3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCk7CiAgICAgICAgIHZvaWQg
cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwogICAgICAgICB2b2lkIHB1
c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRl
eCwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOwpAQCAtMTI2
Niw2ICsxMjcwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxUcnlSYW5nZT4g
bV90cnlSYW5nZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxUcnlEYXRhLCA4PiBtX3RyeURh
dGE7CiAKKyAgICAgICAgVmVjdG9yPFJlZjxMYWJlbD4+IG1fb3B0aW9uYWxDaGFpblRhcmdldExh
YmVsU3RhY2s7CisgICAgICAgIHVuc2lnbmVkIG1fb3B0aW9uYWxDaGFpbkRlcHRoIHsgMCB9Owor
CiAgICAgICAgIGludCBtX25leHRDb25zdGFudE9mZnNldCB7IDAgfTsKIAogICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8RnVuY3Rpb25NZXRhZGF0YU5vZGUqLCB1bnNpZ25lZD4gRnVuY3Rpb25PZmZz
ZXRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAKaW5kZXggN2NjMDc4YzNjMDIxNWM5ZGY3OTBjODQ4YTMyZDEzYjgwOTBmMDhh
MC4uNWE1YzFmZGYyYjYzYTJhZTA4NzkwNjRjZTVmYmJlOTM5N2NjNWEyMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAt
NzQ0LDEyICs3NDQsMTggQEAgUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2kKICAgICBSZWdpc3RlcklE
KiByZXQ7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCk7CiAKLSAgICBpZiAoaXNOb25JbmRleFN0cmluZ0VsZW1lbnQoKm1f
c3Vic2NyaXB0KSkgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2Jhc2UpOworICAgIGJvb2wgc3Vic2NyaXB0SXNOb25JbmRleFN0cmluZyA9
IGlzTm9uSW5kZXhTdHJpbmdFbGVtZW50KCptX3N1YnNjcmlwdCk7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBzdWJzY3JpcHRJc05vbkluZGV4U3RyaW5nCisgICAgICAgID8gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fYmFzZSkKKyAgICAgICAgOiBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0
SGFuZFNpZGUobV9iYXNlLCBtX3N1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlwdC0+
aXNQdXJlKGdlbmVyYXRvcikpOworCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFz
ZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soYmFzZS5nZXQoKSk7CisK
KyAgICBpZiAoc3Vic2NyaXB0SXNOb25JbmRleFN0cmluZykgewogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QuZ2V0KCksIGJhc2Uu
Z2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9y
LmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwgbV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50
cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKICAgICAgICAgUmVnaXN0ZXJJRCog
cHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JQcm9wZXJ0eShtX3N1YnNjcmlwdCk7CiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKICAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChmaW5h
bERlc3QuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKQEAgLTc2MywxNyArNzY5LDI2IEBA
IFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAKIFJlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KTsKICAgICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVy
Tm9kZSgpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gYmFzZUlzU3VwZXIgPyBlbWl0
U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNl
KTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlOworICAgIGlmIChiYXNlSXNTdXBlcikK
KyAgICAgICAgYmFzZSA9IGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJhdG9yKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworICAgICAg
ICBpZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdE9wdGlvbmFsQ2hlY2soYmFzZS5nZXQoKSk7CisgICAgfQorCiAgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwot
ICAgIFJlZ2lzdGVySUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0OwogICAgIGlmIChiYXNlSXNTdXBlcikgewogICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1ZhbHVlID0gZ2VuZXJhdG9yLmVuc3VyZVRoaXMoKTsK
LSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZpbmFsRGVzdCwgYmFzZS5nZXQo
KSwgdGhpc1ZhbHVlLmdldCgpLCBtX2lkZW50KTsKKyAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVt
aXRHZXRCeUlkKGZpbmFsRGVzdC5nZXQoKSwgYmFzZS5nZXQoKSwgdGhpc1ZhbHVlLmdldCgpLCBt
X2lkZW50KTsKICAgICB9IGVsc2UKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlk
KGZpbmFsRGVzdCwgYmFzZS5nZXQoKSwgbV9pZGVudCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQcm9m
aWxlVHlwZShmaW5hbERlc3QsIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAgICAgIHJl
dCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QuZ2V0KCksIGJhc2UuZ2V0KCksIG1f
aWRlbnQpOworICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUoZmluYWxEZXN0LmdldCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTg0OCwy
NCArODYzLDMyIEBAIFJlZ2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TG9hZFRoaXNGcm9tQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudCgpOwogCiAgICAg
VmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVz
KCkuZXZhbCk7Ci0gICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgbG9jYWwsIG51bGxw
dHIpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5tb3ZlKGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwotICAgICAgICBDYWxsQXJndW1l
bnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBsb2NhbCA9IHZhci5sb2NhbCgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jOwor
ICAgIGlmIChsb2NhbCkgeworICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3Nh
cnkodmFyLCBsb2NhbC5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIGZ1bmMgPSBnZW5lcmF0b3Iu
bW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworCisgICAgaWYgKGxv
Y2FsKQogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0
ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxF
dmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0
KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVi
dWdnYWJsZUNhbGw6Ok5vKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbmV3
RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyA0OworICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKKyAgICAgICAgZ2VuZXJh
dG9yLm1vdmUoCisgICAgICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLAorICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgdmFyKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGZ1bmMu
Z2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhciwgVGhyb3dJZk5vdEZvdW5k
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgZnVuYy5n
ZXQoKSwgbnVsbHB0cik7CiAgICAgfQogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRz
KGdlbmVyYXRvciwgbV9hcmdzKTsKLSAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90
U3RhcnQoKSArIDQ7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhuZXdEaXZvdCwg
ZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7Ci0gICAgZ2VuZXJhdG9yLm1vdmUoCi0gICAgICAgIGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2
ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhcikpOwotICAgIGdlbmVyYXRv
ci5lbWl0R2V0RnJvbVNjb3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVy
KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKLSAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZO
ZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxscHRyKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkp
LCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90
RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVy
blZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKKyAg
ICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlv
bmFsQ2hlY2soZnVuYy5nZXQoKSk7CisKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZh
bChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOwogfQogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsVmFsdWVOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg5OSw4ICs5MjIsMTIgQEAgUmVnaXN0
ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmUKICAgICAgICAgCiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQor
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHBy
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOworICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNl
KCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jLmdldCgpKTsKKwog
ICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAg
Z2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZp
bmVkKCkpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbEluVGFpbFBv
c2l0aW9uKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdn
YWJsZUNhbGw6Olllcyk7CkBAIC05MjAsMzAgKzk0NywzNCBAQCBSZWdpc3RlcklEKiBGdW5jdGlv
bkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsCiAgICAgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmV4
cGVjdGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKG1faWRlbnQpOwogCiAgICAgVmFyaWFibGUgdmFy
ID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1faWRlbnQpOwotICAgIGlmIChSZWdpc3RlcklEKiBsb2Nh
bCA9IHZhci5sb2NhbCgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vz
c2FyeSh2YXIsIGxvY2FsLCBudWxscHRyKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1
bmMgPSBnZW5lcmF0b3IubW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2Fs
KTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBj
YWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
bG9jYWwgPSB2YXIubG9jYWwoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYzsKKyAgICBp
ZiAobG9jYWwpIHsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZh
ciwgbG9jYWwuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBmdW5jID0gZ2VuZXJhdG9yLm1vdmUo
Z2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQoKSk7CisgICAgfSBlbHNl
CisgICAgICAgIGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgQ2FsbEFyZ3Vt
ZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKworICAgIGlmIChsb2NhbCkg
ewogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIo
KSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgIC8vIFRoaXMgcGFzc2VzIE5vRXhwZWN0ZWRGdW5j
dGlvbiBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0IGlmIHRoZSBmdW5jdGlvbiBpcyBpbiBhCiAgICAg
ICAgIC8vIGxvY2FsIHZhcmlhYmxlLCB0aGVuIGl0J3Mgbm90IG9uZSBvZiBvdXIgYnVpbHQtaW4g
Y29uc3RydWN0b3JzLgotICAgICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENh
bGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3Rl
ZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVU
eXBlKHJldHVyblZhbHVlLmdldCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgICAg
ICByZXR1cm4gcmV0OworICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gTm9FeHBlY3RlZEZ1bmN0
aW9uOworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2
b3RTdGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhuZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7CisgICAgICAgIGdl
bmVyYXRvci5tb3ZlKAorICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwK
KyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhp
c1JlZ2lzdGVyKCksIHZhcikpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShm
dW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RG
b3VuZCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGZ1
bmMuZ2V0KCksIG51bGxwdHIpOwogICAgIH0KIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5j
ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1
cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7Ci0g
ICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKyAgICBp
ZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFs
Q2hlY2soZnVuYy5nZXQoKSk7CiAKLSAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90
U3RhcnQoKSArIG1faWRlbnQubGVuZ3RoKCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhuZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7Ci0gICAgZ2VuZXJhdG9yLm1v
dmUoCi0gICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhcikp
OwotICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVu
dHMudGhpc1JlZ2lzdGVyKCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxscHRyKTsKICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5W
YWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywg
ZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6WWVzKTsK
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiByZXQ7CkBAIC0xMjc1LDYgKzEzMDYsOCBA
QCBSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmluc2ljX2RlZmlu
ZUVudW1lcmFibGVXcml0YWJsZUNvbmZpZwogCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0
b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZh
bHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5nZXQoKSk7CiAg
ICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKICAgICBib29sIHN1
YnNjcmlwdElzTm9uSW5kZXhTdHJpbmcgPSBpc05vbkluZGV4U3RyaW5nRWxlbWVudCgqbV9zdWJz
Y3JpcHQpOwogCkBAIC0xMjg2LDkgKzEzMTksMTEgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxs
QnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAog
ICAgICAgICAgICAgYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRl
KG1fYmFzZSwgbV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShn
ZW5lcmF0b3IpKTsKKworICAgICAgICBpZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkp
CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soYmFzZS5nZXQoKSk7CiAg
ICAgfQogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uOwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiB0aGlzUmVnaXN0ZXI7CiAgICAgaWYgKGJhc2VJc1N1cGVyKSB7CiAgICAgICAgIC8v
IE5vdGUgdGhhdCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNlIGJlY2F1c2Ugd2UgZWl0aGVy
IGhhdmUgYSBub24tVERaIHRoaXMgb3Igd2UgdGhyb3cuIE9uY2Ugd2UgaGF2ZSBhIG5vbi1URFog
dGhpcywgd2UgY2FuJ3QgY2hhbmdlIGl0cyB2YWx1ZSBiYWNrIHRvIFREWi4KQEAgLTEyOTcsMTkg
KzEzMzIsMjAgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgIGlmIChzdWJzY3JpcHRJc05v
bkluZGV4U3RyaW5nKSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3Vi
ZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5k
KCkpOwogICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCi0gICAgICAgICAgICBmdW5jdGlvbiA9IGdl
bmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2Uu
Z2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG1fc3Vi
c2NyaXB0KS0+dmFsdWUoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVu
Y3Rpb24uZ2V0KCksIGJhc2UuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgc3RhdGljX2Nhc3Q8
U3RyaW5nTm9kZSo+KG1fc3Vic2NyaXB0KS0+dmFsdWUoKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG1fc3Vi
c2NyaXB0KS0+dmFsdWUoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVu
Y3Rpb24uZ2V0KCksIGJhc2UuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNj
cmlwdCktPnZhbHVlKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvclByb3BlcnR5KG1fc3Vic2NyaXB0KTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3Qo
KSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAgICAgICAgIGlm
IChiYXNlSXNTdXBlcikKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRC
eVZhbChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHRoaXNSZWdp
c3Rlci5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRH
ZXRCeVZhbChmdW5jdGlvbi5nZXQoKSwgYmFzZS5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBw
cm9wZXJ0eS5nZXQoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2Vu
ZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2Uu
Z2V0KCksIHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlW
YWwoZnVuY3Rpb24uZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAgICB9Cisg
ICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRp
b25hbENoZWNrKGZ1bmN0aW9uLmdldCgpLCBtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSk7
CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxB
cmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGlmIChiYXNlSXNTdXBlcikgewogICAg
ICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrKGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CkBA
IC0xMzMxLDE0ICsxMzY3LDIxIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAgICAgYm9vbCBi
YXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKICAgICBpZiAoYmFzZUlzU3VwZXIp
CiAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdl
bmVyYXRvci5lbnN1cmVUaGlzKCkpOwotICAgIGVsc2UKKyAgICBlbHNlIHsKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1fYmFzZSk7Cisg
ICAgICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpKTsK
KyAgICB9CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2
b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAgICAgaWYg
KGJhc2VJc1N1cGVyKSB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzdXBlckJhc2UgPSBl
bWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0
R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgc3VwZXJCYXNlLmdldCgpLCBjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBtX2lkZW50KTsKICAgICB9IGVsc2UKICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBt
X2lkZW50KTsKKworICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVy
YXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5nZXQoKSwgbV9iYXNlLT5pc09wdGlvbmFs
Q2hhaW5CYXNlKCkpOworCiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxs
SW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVj
dGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlw
ZShyZXR1cm5WYWx1ZS5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICByZXR1
cm4gcmV0OwpAQCAtMTM0OCwxNyArMTM5MSwyNCBAQCBzdGF0aWMgY29uc3RleHByIHNpemVfdCBt
YXhEaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkgPSAyOwogCiBSZWdpc3RlcklEKiBDYWxs
RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJu
VmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisKKyAgICBpZiAobV9i
YXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9u
YWxDaGVjayhiYXNlLmdldCgpKTsKKwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
c3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9u
RW5kKCkpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbjsKLSAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwog
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uOwogICAgIGF1dG8gbWFrZUZ1bmN0aW9u
ID0gWyZdIHsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkgewogICAgICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNWYWx1ZSA9IGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7
CiAgICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3Iu
dGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQoKSwgZ2VuZXJh
dG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5jYWxsUHVibGljTmFtZSgpKTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJ
ZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5w
cm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuY2FsbFB1YmxpY05hbWUoKSk7CisKKyAgICAg
ICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5nZXQoKSwgbV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNl
KCkpOwogICAgIH07CiAKICAgICBib29sIGVtaXRDYWxsQ2hlY2sgPSAhZ2VuZXJhdG9yLmlzQnVp
bHRpbkZ1bmN0aW9uKCk7CkBAIC0xNDMwLDE1ICsxNDgwLDIyIEBAIFJlZ2lzdGVySUQqIEFwcGx5
RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsCiAgICAgLy8gZnVuY3Rpb24uYXBwbHkodGhpc0FyZywgW2FyZzAsIGFyZzEsIC4uLl0p
IC0+IGNhbiBiZSB0cml2aWFsbHkgY29lcmNlZCBpbnRvIGZ1bmN0aW9uLmNhbGwodGhpc0FyZywg
YXJnMCwgYXJnMSwgLi4uKSBhbmQgc2F2ZXMgb2JqZWN0IGFsbG9jYXRpb24KICAgICBib29sIG1h
eUJlQ2FsbCA9IGFyZVRyaXZpYWxBcHBseUFyZ3VtZW50cyhtX2FyZ3MpOwogCi0gICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZ1bmN0aW9uOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZh
bHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworCisgICAgaWYgKG1fYmFz
ZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFs
Q2hlY2soYmFzZS5nZXQoKSk7CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb247CiAg
ICAgYXV0byBtYWtlRnVuY3Rpb24gPSBbJl0gewogICAgICAgICBpZiAobV9iYXNlLT5pc1N1cGVy
Tm9kZSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1ZhbHVlID0gZ2Vu
ZXJhdG9yLmVuc3VyZVRoaXMoKTsKICAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVt
aXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgdGhp
c1ZhbHVlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFw
cGx5UHVibGljTmFtZSgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBmdW5jdGlvbiA9
IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJh
c2UuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuYXBwbHlQ
dWJsaWNOYW1lKCkpOworCisgICAgICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soZnVuY3Rpb24uZ2V0KCksIG1fYmFz
ZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKTsKICAgICB9OwogCiAgICAgYm9vbCBlbWl0Q2FsbENo
ZWNrID0gIWdlbmVyYXRvci5pc0J1aWx0aW5GdW5jdGlvbigpOwpAQCAtMTY5MiwyNSArMTc0OSwz
MyBAQCBSZWdpc3RlcklEKiBEZWxldGVSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAogCiBSZWdpc3RlcklEKiBEZWxldGVCcmFja2V0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwogCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25h
bENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socjAuZ2V0
KCkpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
c3Vic2NyaXB0KTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkK
ICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkNhbm5v
dCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERl
bGV0ZUJ5VmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMS5n
ZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlWYWwoZmluYWxEZXN0Lmdl
dCgpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRGVsZXRlRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiBSZWdpc3RlcklEKiBEZWxldGVEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogCisgICAg
aWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1p
dE9wdGlvbmFsQ2hlY2socjAuZ2V0KCkpOworCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChtX2Jhc2Ut
PmlzU3VwZXJOb2RlKCkpCiAgICAgICAgIHJldHVybiBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihn
ZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVydHkiKTsKLSAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IHIwLmdldCgpLCBtX2lkZW50KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlk
KGZpbmFsRGVzdC5nZXQoKSwgcjAuZ2V0KCksIG1faWRlbnQpOwogfQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlVmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC0yMzQ2LDEzICsyNDExLDI2IEBAIFJlZ2lzdGVySUQqIENvYWxl
c2NlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqCiAgICAgUmVmPExhYmVsPiB0YXJnZXQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAog
ICAgIGdlbmVyYXRvci5lbWl0Tm9kZSh0ZW1wLmdldCgpLCBtX2V4cHIxKTsKLSAgICBnZW5lcmF0
b3IuZW1pdEp1bXBJZkZhbHNlKGdlbmVyYXRvci5lbWl0VW5hcnlPcDxPcElzVW5kZWZpbmVkT3JO
dWxsPihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0KCkp
OworICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5l
ZE9yTnVsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0
KCkpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluVGFpbFBvc2l0aW9uKHRlbXAuZ2V0KCksIG1f
ZXhwcjIpOwogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodGFyZ2V0LmdldCgpKTsKIAogICAgIHJl
dHVybiBnZW5lcmF0b3IubW92ZShkc3QsIHRlbXAuZ2V0KCkpOwogfQogCisvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gT3B0aW9uYWxDaGFpbk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBPcHRpb25hbENoYWluTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KTsKKworICAgIGdlbmVyYXRvci5iZWdpbk9wdGlvbmFsQ2hhaW4oKTsKKyAgICBnZW5lcmF0
b3IuZW1pdE5vZGVJblRhaWxQb3NpdGlvbihmaW5hbERlc3QuZ2V0KCksIG1fZXhwcik7CisgICAg
Z2VuZXJhdG9yLmVuZE9wdGlvbmFsQ2hhaW4oZmluYWxEZXN0LmdldCgpLCBtX2lzRGVsZXRlKTsK
KworICAgIHJldHVybiBmaW5hbERlc3QuZ2V0KCk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBDb25kaXRpb25hbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIFJlZ2lzdGVySUQqIENvbmRpdGlvbmFsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KaW5k
ZXggMzdlZjI3OTFjMTViNjM3MDgxOTZjYTlmYzY5YjFlYzhlNTBhOTE1NS4uNjI3YTg4OGJjOTNi
ZjI3NDU3ZWE3Y2MwNTZmOTc5MWJiYmVjZmZjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KQEAgLTg3NSw4
ICs4NzUsNyBAQCBlcXVhbE51bGxDb21wYXJpc29uT3Aob3BfbmVxX251bGwsIE9wTmVxTnVsbCwK
IAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfaXNfdW5kZWZpbmVkX29yX251bGwsIE9wSXNVbmRlZmlu
ZWRPck51bGwsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCiAgICAgZ2V0KG1f
b3BlcmFuZCwgdDApCi0gICAgYXNzZXJ0Tm90Q29uc3RhbnQoc2l6ZSwgdDApCi0gICAgbG9hZGkg
VGFnT2Zmc2V0W2NmciwgdDAsIDhdLCB0MQorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVUYWco
c2l6ZSwgdDAsIHQxKQogICAgIG9yaSAxLCB0MQogICAgIGNpZXEgdDEsIE51bGxUYWcsIHQxCiAg
ICAgcmV0dXJuKEJvb2xlYW5UYWcsIHQxKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCBlMWVkNzJmMGViYzE1MWMz
MjY4MWYwYTJmMGI0MDliZDA1NzNmYTcyLi45MGRlZmI5NzNlN2Y1ZGU4MjdmNDk2ZDcyOGEzMjhh
Y2QyNjIyZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtODI3LDggKzgyNyw4IEBAIGVxdWFsTnVsbENvbXBh
cmlzb25PcChvcF9uZXFfbnVsbCwgT3BOZXFOdWxsLAogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9w
X2lzX3VuZGVmaW5lZF9vcl9udWxsLCBPcElzVW5kZWZpbmVkT3JOdWxsLCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChtX29wZXJhbmQsIHQwKQotICAgIGxvYWRx
IFtjZnIsIHQwLCA4XSwgdDAKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkKKyAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MCkKICAgICBhbmRxIH5UYWdCaXRVbmRlZmluZWQsIHQw
CiAgICAgY3FlcSB0MCwgVmFsdWVOdWxsLCB0MAogICAgIG9ycSBWYWx1ZUZhbHNlLCB0MApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAppbmRleCBkZTViMTMzOTA2NjEx
MzQxMmFjYWVlZjJiZDc1ZTAzMWEzMzNhMTAwLi4wZjEyYmYxMjY5YWY4OGJlYjA0ZDg3YzA0NWJi
Y2M4NDAxNjEyNzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FT
VEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIu
aApAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgaW50ICBEb250
QnVpbGRTdHJpbmdzID0gMDsKIAogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQmluYXJ5Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQgdG9rZW4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9k
ZSosIEJpbmFyeU9wSW5mbz4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5m
bz4pOwotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VXYXNT
dXBlciwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3Rh
cnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90RW5kLCBzaXplX3QgY2FsbE9yQXBwbHlDaGlsZERlcHRoKTsKKyAgICBFeHByZXNzaW9uTm9k
ZSogbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lv
bk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05vZGUqIGFy
Z3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNhbGxPckFw
cGx5Q2hpbGREZXB0aCwgYm9vbCBpc09wdGlvbmFsQ2FsbCk7CiAKICAgICBKU0M6OlNvdXJjZUVs
ZW1lbnRzKiBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVu
YSkgSlNDOjpTb3VyY2VFbGVtZW50cygpOyB9CiAKQEAgLTM2MCw2ICszNjAsMTIgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKKyAgICBFeHByZXNzaW9uTm9kZSogY3Jl
YXRlT3B0aW9uYWxDaGFpbihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCisgICAgeworICAgICAgICBiYXNl
LT5zZXRJc09wdGlvbmFsQ2hhaW5CYXNlKCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIE9wdGlvbmFsQ2hhaW5Ob2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICB9CisKICAgICBF
eHByZXNzaW9uTm9kZSogY3JlYXRlQ29uZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIEV4cHJlc3Npb25Ob2RlKiBs
aHMsIEV4cHJlc3Npb25Ob2RlKiByaHMpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBDb25kaXRpb25hbE5vZGUobG9jYXRpb24sIGNvbmRpdGlvbiwgbGhzLCByaHMp
OwpAQCAtMTE0OCw2ICsxMTU0LDE2IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtl
VHlwZU9mTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiAKIEV4cHJl
c3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBlbmQpCiB7CisgICAgaWYgKGV4cHItPmlzT3B0aW9uYWxDaGFpbigpKSB7CisgICAgICAgIE9w
dGlvbmFsQ2hhaW5Ob2RlKiBvcHRpb25hbENoYWluID0gc3RhdGljX2Nhc3Q8T3B0aW9uYWxDaGFp
bk5vZGUqPihleHByKTsKKyAgICAgICAgaWYgKG9wdGlvbmFsQ2hhaW4tPmV4cHIoKS0+aXNMb2Nh
dGlvbigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW9wdGlvbmFsQ2hhaW4tPmV4cHIoKS0+aXNS
ZXNvbHZlTm9kZSgpKTsKKyAgICAgICAgICAgIG9wdGlvbmFsQ2hhaW4tPnNldEV4cHIobWFrZURl
bGV0ZU5vZGUobG9jYXRpb24sIG9wdGlvbmFsQ2hhaW4tPmV4cHIoKSwgc3RhcnQsIGRpdm90LCBl
bmQpKTsKKyAgICAgICAgICAgIG9wdGlvbmFsQ2hhaW4tPnNldElzRGVsZXRlKCk7CisgICAgICAg
ICAgICByZXR1cm4gb3B0aW9uYWxDaGFpbjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICgh
ZXhwci0+aXNMb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBE
ZWxldGVWYWx1ZU5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgIGlmIChleHByLT5pc1Jlc29sdmVO
b2RlKCkpIHsKQEAgLTEzNDUsMTcgKzEzNjEsMjkgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxk
ZXI6Om1ha2VCaXRYT3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHIK
ICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCaXRYT3JOb2RlKGxvY2F0aW9uLCBleHBy
MSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFy
Z3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwg
c2l6ZV90IGNhbGxPckFwcGx5Q2hpbGREZXB0aCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVy
OjptYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VXYXNTdXBlciwgQXJndW1lbnRz
Tm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBzaXplX3Qg
Y2FsbE9yQXBwbHlDaGlsZERlcHRoLCBib29sIGlzT3B0aW9uYWxDYWxsKQogewogICAgIEFTU0VS
VChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0KTsKICAgICBpZiAoZnVuYy0+
aXNTdXBlck5vZGUoKSkKICAgICAgICAgdXNlc1N1cGVyQ2FsbCgpOwogCiAgICAgaWYgKGZ1bmMt
PmlzQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKCkpIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpc09w
dGlvbmFsQ2FsbCwgIWlzT3B0aW9uYWxDYWxsKTsKICAgICAgICAgQnl0ZWNvZGVJbnRyaW5zaWNO
b2RlKiBpbnRyaW5zaWMgPSBzdGF0aWNfY2FzdDxCeXRlY29kZUludHJpbnNpY05vZGUqPihmdW5j
KTsKICAgICAgICAgaWYgKGludHJpbnNpYy0+dHlwZSgpID09IEJ5dGVjb2RlSW50cmluc2ljTm9k
ZTo6VHlwZTo6Q29uc3RhbnQpCiAgICAgICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
KSBCeXRlY29kZUludHJpbnNpY05vZGUoQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjpUeXBlOjpGdW5j
dGlvbiwgbG9jYXRpb24sIGludHJpbnNpYy0+ZW1pdHRlcigpLCBpbnRyaW5zaWMtPmlkZW50aWZp
ZXIoKSwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICB9CisKKyAgICAv
LyBEb24ndCBwYXJzZSBhIGRvdWJseS1vcHRpb25hbCBhY2Nlc3MtYW5kLWNhbGwgbm9kZSAoZS5n
LiBgYT8uYj8uKClgKSBhcyB0d28gb3B0aW9uYWwgY2hhaW5zLCBvciB3ZSdsbCBsb3NlIG91ciBg
dGhpc2AgdmFsdWUuCisgICAgaWYgKGZ1bmMtPmlzT3B0aW9uYWxDaGFpbigpKSB7CisgICAgICAg
IE9wdGlvbmFsQ2hhaW5Ob2RlKiBvcHRpb25hbENoYWluID0gc3RhdGljX2Nhc3Q8T3B0aW9uYWxD
aGFpbk5vZGUqPihmdW5jKTsKKyAgICAgICAgaWYgKG9wdGlvbmFsQ2hhaW4tPmV4cHIoKS0+aXNM
b2NhdGlvbigpKSB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGlzT3B0aW9uYWxDYWxsLCBp
c09wdGlvbmFsQ2FsbCk7CisgICAgICAgICAgICBBU1NFUlQoIW9wdGlvbmFsQ2hhaW4tPmV4cHIo
KS0+aXNSZXNvbHZlTm9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlRnVuY3Rpb25DYWxs
Tm9kZShsb2NhdGlvbiwgb3B0aW9uYWxDaGFpbi0+ZXhwcigpLCBwcmV2aW91c0Jhc2VXYXNTdXBl
ciwgYXJncywgZGl2b3RTdGFydCwgZGl2b3QsIGRpdm90RW5kLCBjYWxsT3JBcHBseUNoaWxkRGVw
dGgsIGlzT3B0aW9uYWxDYWxsKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghZnVuYy0+
aXNMb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jdGlv
bkNhbGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCk7CiAgICAgaWYgKGZ1bmMtPmlzUmVzb2x2ZU5vZGUoKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0xleGVyLmNwcAppbmRleCBlOThjZGI1ZTU5ZTIzMDcyYzE5MDE4Zjg3ZDEw
YzJkNDUyZDljZDM5Li5mMWJkNjM2ZDZmNDY0NzcxMmRiMDQ0ZGY4MTJmZmZkNmRhMTc0MmJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcApAQCAtMjE1NywxMCArMjE1Nywx
NyBAQCBzdGFydDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGFyYWN0ZXJRdWVzdGlvbjoK
ICAgICAgICAgc2hpZnQoKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU51bGxpc2hDb2FsZXNj
aW5nKCkgJiYgbV9jdXJyZW50ID09ICc/JykgewotICAgICAgICAgICAgc2hpZnQoKTsKLSAgICAg
ICAgICAgIHRva2VuID0gQ09BTEVTQ0U7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg
KE9wdGlvbnM6OnVzZU51bGxpc2hBd2FyZU9wZXJhdG9ycygpKSB7CisgICAgICAgICAgICBpZiAo
bV9jdXJyZW50ID09ICc/JykgeworICAgICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAg
ICAgICAgdG9rZW4gPSBDT0FMRVNDRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJy4nICYmICFpc0FTQ0lJRGlnaXQo
cGVlaygxKSkpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIHRv
a2VuID0gUVVFU1RJT05ET1Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgdG9rZW4gPSBRVUVTVElPTjsKICAgICAgICAgYnJlYWs7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCmluZGV4
IGQ0MWUzYWVkOGU0NWY3YThlMmZkMzFjMjQ0NzdkZWNjYjhkNTY0MGYuLjA2OGIyNmM4MjhhMzZl
YjZlZWU1YWQyNGQ1NDA1MTE5MzE4OGZiYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCkBAIC02NzYsNiArNjc2LDEyIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHsKICAgICB9CiAKKyAgICBpbmxpbmUgT3B0aW9uYWxDaGFpbk5vZGU6Ok9w
dGlvbmFsQ2hhaW5Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Np
b25Ob2RlKiBleHByKQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQorICAgICAg
ICAsIG1fZXhwcihleHByKQorICAgIHsKKyAgICB9CisKICAgICBpbmxpbmUgQ29uZGl0aW9uYWxO
b2RlOjpDb25kaXRpb25hbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGxvZ2ljYWwsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIyKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQogICAgICAgICAs
IG1fbG9naWNhbChsb2dpY2FsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4
IDg2ZmRhZjNkMDRmZDBkOGY3ZjQ4N2QxNzczNzdlMmEzN2U5NWE3ODcuLjkwOTM0MDQ5YzE2OGM4
OTk4MjVlZGVmZjlhMDNhOTlkZjAwMmFkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmgKQEAgLTIwNSw2ICsyMDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVh
bCBib29sIGlzQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICAgICAgdmlydHVhbCBib29sIGlzQmluYXJ5T3BOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzT3B0aW9uYWxDaGFpbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZUlu
Q29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsJiwgTGFiZWwmLCBGYWxs
VGhyb3VnaE1vZGUpOwogCkBAIC0yMTIsOCArMjEzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIFJlc3VsdFR5cGUgcmVzdWx0RGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
dWx0VHlwZTsgfQogCisgICAgICAgIGJvb2wgaXNPcHRpb25hbENoYWluQmFzZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNPcHRpb25hbENoYWluQmFzZTsgfQorICAgICAgICB2b2lkIHNldElzT3B0aW9u
YWxDaGFpbkJhc2UoKSB7IG1faXNPcHRpb25hbENoYWluQmFzZSA9IHRydWU7IH0KKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIFJlc3VsdFR5cGUgbV9yZXN1bHRUeXBlOworICAgICAgICBib29sIG1f
aXNPcHRpb25hbENoYWluQmFzZSB7IGZhbHNlIH07CiAgICAgfTsKIAogICAgIGNsYXNzIFN0YXRl
bWVudE5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC0xMzEwLDEyICsxMzE1LDMwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBDb2FsZXNjZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpOwogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSBudWxscHRyKSBmaW5hbDsKIAog
ICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9leHByMTsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUq
IG1fZXhwcjI7CiAgICAgfTsKIAorICAgIGNsYXNzIE9wdGlvbmFsQ2hhaW5Ob2RlIGZpbmFsIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE9wdGlvbmFsQ2hh
aW5Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKik7CisKKyAgICAg
ICAgdm9pZCBzZXRFeHByKEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IG1fZXhwciA9IGV4cHI7IH0K
KyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGV4cHIoKSBjb25zdCB7IHJldHVybiBtX2V4cHI7IH0K
KworICAgICAgICB2b2lkIHNldElzRGVsZXRlKCkgeyBtX2lzRGVsZXRlID0gdHJ1ZTsgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSBudWxscHRyKSBmaW5hbDsKKworICAgICAgICBib29sIGlz
T3B0aW9uYWxDaGFpbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICBF
eHByZXNzaW9uTm9kZSogbV9leHByOworICAgICAgICBib29sIG1faXNEZWxldGUgeyBmYWxzZSB9
OworICAgIH07CisKICAgICAvLyBUaGUgdGVybmFyeSBvcGVyYXRvciwgIm1fbG9naWNhbCA/IG1f
ZXhwcjEgOiBtX2V4cHIyIgogICAgIGNsYXNzIENvbmRpdGlvbmFsTm9kZSBmaW5hbCA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwCmluZGV4IGY4ZGJlNzE5NmYxMTE3MTZkMGE1OGY3ZjU3ZTNmOGY2N2I3YTJh
Y2YuLmJmZjIyY2ZmODFlZmYwZDliZjgxMzY2Yjk5ODE2MmZjMjQ0YmEwOGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKQEAgLTQ4MDgsMTAzICs0ODA4LDEzNiBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZU1lbWJlckV4cHJlcwogICAgIH0KIAogICAgIGZhaWxJZkZhbHNlKGJhc2UsICJD
YW5ub3QgcGFyc2UgYmFzZSBleHByZXNzaW9uIik7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKCk7Ci0gICAgICAgIHN3aXRjaCAobV90b2tlbi5t
X3R5cGUpIHsKLSAgICAgICAgY2FzZSBPUEVOQlJBQ0tFVDogewotICAgICAgICAgICAgbV9wYXJz
ZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBKU1RleHRQ
b3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKworICAgIGRv
IHsKKyAgICAgICAgVHJlZUV4cHJlc3Npb24gb3B0aW9uYWxDaGFpbkJhc2UgPSAwOworICAgICAg
ICBKU1Rva2VuTG9jYXRpb24gb3B0aW9uYWxDaGFpbkxvY2F0aW9uOworICAgICAgICBKU1Rva2Vu
VHlwZSB0eXBlID0gbV90b2tlbi5tX3R5cGU7CisKKyAgICAgICAgaWYgKG1hdGNoKFFVRVNUSU9O
RE9UKSkgeworICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG5ld0NvdW50LCAiQ2Fubm90
IGNhbGwgY29uc3RydWN0b3IgaW4gYW4gb3B0aW9uYWwgY2hhaW4iKTsKKyAgICAgICAgICAgIHNl
bWFudGljRmFpbElmVHJ1ZShiYXNlSXNTdXBlciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGhlIGJh
c2Ugb2YgYW4gb3B0aW9uYWwgY2hhaW4iKTsKKyAgICAgICAgICAgIG9wdGlvbmFsQ2hhaW5CYXNl
ID0gYmFzZTsKKyAgICAgICAgICAgIG9wdGlvbmFsQ2hhaW5Mb2NhdGlvbiA9IHRva2VuTG9jYXRp
b24oKTsKKworICAgICAgICAgICAgU2F2ZVBvaW50IHNhdmVQb2ludCA9IGNyZWF0ZVNhdmVQb2lu
dCgpOwogICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0g
bV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKLSAgICAgICAgICAgIGludCBpbml0aWFsQXNzaWdu
bWVudHMgPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudDsKLSAgICAgICAgICAgIFRyZWVF
eHByZXNzaW9uIHByb3BlcnR5ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICAg
ICAgZmFpbElmRmFsc2UocHJvcGVydHksICJDYW5ub3QgcGFyc2Ugc3Vic2NyaXB0IGV4cHJlc3Np
b24iKTsKLSAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3Moc3Rh
cnRMb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRpYWxBc3NpZ25tZW50cyAhPSBtX3BhcnNl
clN0YXRlLmFzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0
b2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoVU5MSUtF
TFkoYmFzZUlzU3VwZXIgJiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKLSAg
ICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rp
b25Vc2VzU3VwZXJQcm9wZXJ0eSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVQ
cm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5kIiwgInN1YnNjcmlwdCBleHBy
ZXNzaW9uIik7Ci0gICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhT
Q291bnQ7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChtYXRjaChPUEVOQlJB
Q0tFVCkgfHwgbWF0Y2goT1BFTlBBUkVOKSB8fCBtYXRjaChCQUNLUVVPVEUpKQorICAgICAgICAg
ICAgICAgIHR5cGUgPSBtX3Rva2VuLm1fdHlwZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHR5cGUgPSBET1Q7CisgICAgICAgICAgICAgICAgcmVzdG9yZVNhdmVQb2ludChz
YXZlUG9pbnQpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGNhc2UgT1BFTlBB
UkVOOiB7Ci0gICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291
bnQrKzsKLSAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhT
Q291bnQ7Ci0gICAgICAgICAgICBpZiAobmV3Q291bnQpIHsKLSAgICAgICAgICAgICAgICBuZXdD
b3VudC0tOwotICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBs
YXN0VG9rZW5FbmRQb3NpdGlvbigpOwotICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJn
dW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgZmFpbElm
RmFsc2UoYXJndW1lbnRzLCAiQ2Fubm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7Ci0gICAgICAg
ICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgYXJn
dW1lbnRzLCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0
aW9uKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgdXNl
ZFZhcmlhYmxlc1NpemUgPSBjdXJyZW50U2NvcGUoKS0+Y3VycmVudFVzZWRWYXJpYWJsZXNTaXpl
KCk7CisKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGxvY2F0aW9uID0gdG9r
ZW5Mb2NhdGlvbigpOworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBj
YXNlIE9QRU5CUkFDS0VUOiB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2
aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhw
cmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICAgICAgT3B0
aW9uYWw8Q2FsbE9yQXBwbHlEZXB0aFNjb3BlPiBjYWxsT3JBcHBseURlcHRoU2NvcGU7Ci0gICAg
ICAgICAgICAgICAgcmVjb3JkQ2FsbE9yQXBwbHlEZXB0aDxUcmVlQnVpbGRlcj4odGhpcywgKm1f
dm0sIGNhbGxPckFwcGx5RGVwdGhTY29wZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgbmV4dCgp
OworICAgICAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhT
Q291bnQ7CisgICAgICAgICAgICAgICAgaW50IGluaXRpYWxBc3NpZ25tZW50cyA9IG1fcGFyc2Vy
U3RhdGUuYXNzaWdubWVudENvdW50OworICAgICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIHBy
b3BlcnR5ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICAgICAgICAgIGZhaWxJ
ZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIHN1YnNjcmlwdCBleHByZXNzaW9uIik7Cisg
ICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlQnJhY2tldEFjY2VzcyhzdGFydExv
Y2F0aW9uLCBiYXNlLCBwcm9wZXJ0eSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fcGFyc2VyU3Rh
dGUuYXNzaWdubWVudENvdW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2Vu
RW5kUG9zaXRpb24oKSk7CiAKLSAgICAgICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50
cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VM
WShiYXNlSXNTdXBlciAmJiBjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpKQorICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVu
Y3Rpb25Vc2VzU3VwZXJQcm9wZXJ0eSgpOwogCi0gICAgICAgICAgICAgICAgaWYgKGJhc2VJc0Fz
eW5jS2V5d29yZCAmJiAoIWFyZ3VtZW50cyB8fCBtYXRjaChBUlJPV0ZVTkNUSU9OKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnJldmVydFRvUHJldmlvdXNVc2VkVmFy
aWFibGVzKHVzZWRWYXJpYWJsZXNTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yY2VDbGFz
c2lmeUV4cHJlc3Npb25FcnJvcihFcnJvckluZGljYXRlc0FzeW5jQXJyb3dGdW5jdGlvbik7Ci0g
ICAgICAgICAgICAgICAgICAgIGZhaWxEdWVUb1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsKENMT1NFQlJB
Q0tFVCwgIl0iLCAiZW5kIiwgInN1YnNjcmlwdCBleHByZXNzaW9uIik7CisgICAgICAgICAgICAg
ICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBPUEVOUEFSRU46IHsK
KyAgICAgICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQr
KzsKKyAgICAgICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxI
U0NvdW50OworICAgICAgICAgICAgICAgIGlmIChuZXdDb3VudCkgeworICAgICAgICAgICAgICAg
ICAgICBuZXdDb3VudC0tOworICAgICAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHBy
ZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAg
VHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKKyAgICAg
ICAgICAgICAgICAgICAgZmFpbElmRmFsc2UoYXJndW1lbnRzLCAiQ2Fubm90IHBhcnNlIGNhbGwg
YXJndW1lbnRzIik7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5l
d0V4cHIobG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNz
aW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNlZFZhcmlhYmxlc1NpemUgPSBjdXJyZW50
U2NvcGUoKS0+Y3VycmVudFVzZWRWYXJpYWJsZXNTaXplKCk7CisgICAgICAgICAgICAgICAgICAg
IEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwor
ICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDxDYWxsT3JBcHBseURlcHRoU2NvcGU+IGNhbGxP
ckFwcGx5RGVwdGhTY29wZTsKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkQ2FsbE9yQXBwbHlE
ZXB0aDxUcmVlQnVpbGRlcj4odGhpcywgKm1fdm0sIGNhbGxPckFwcGx5RGVwdGhTY29wZSwgYmFz
ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJz
ZUFyZ3VtZW50cyhjb250ZXh0KTsKIAotICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3Vt
ZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgIGlm
IChiYXNlSXNTdXBlcikgewotICAgICAgICAgICAgICAgICAgICBTY29wZVJlZiBmdW5jdGlvblNj
b3BlID0gY3VycmVudEZ1bmN0aW9uU2NvcGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFm
dW5jdGlvblNjb3BlLT5zZXRIYXNEaXJlY3RTdXBlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJdCB1bm5lY2Vzc2FyeSB0byBjaGVjayBvZiB1c2luZyBzdXBlciBkdXJpbmcgcmVw
YXJzaW5nIG9uZSBtb3JlIHRpbWUuIEFsc28gaXQgY2FuIGxlYWQgdG8gc3ludGF4IGVycm9yCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGFycm93IGZ1bmN0aW9uIGJlY2F1
c2UgZHVyaW5nIHJlcGFyc2luZyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgd2UgY3VycmVudGx5IHBh
cnNlIHRoZSBhcnJvdyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zaWRl
IG9mIHRoZSBjb25zdHJ1Y3RvciBvciBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1fbGV4ZXItPmlzUmVwYXJzaW5nRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNjb3BlUmVmIGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUgPSBjbG9zZXN0
UGFyZW50T3JkaW5hcnlGdW5jdGlvbk5vbkxleGljYWxTY29wZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvbnN0cnVjdG9yS2luZCBmdW5jdGlvbkNvbnN0cnVjdG9yS2luZCA9ICFm
dW5jdGlvblNjb3BlLT5pc0Fycm93RnVuY3Rpb24oKSAmJiAhY2xvc2VzdE9yZGluYXJ5RnVuY3Rp
b25TY29wZS0+aXNFdmFsQ29udGV4dCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ID8gZnVuY3Rpb25TY29wZS0+Y29uc3RydWN0b3JLaW5kKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBjbG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlLT5jb25zdHJ1Y3Rvcktp
bmQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVu
Y3Rpb25Db25zdHJ1Y3RvcktpbmQgPT0gQ29uc3RydWN0b3JLaW5kOjpOb25lLCAic3VwZXIgaXMg
bm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbWFudGljRmFpbElmVHJ1ZShmdW5jdGlvbkNvbnN0cnVjdG9yS2luZCAhPSBDb25zdHJ1Y3Rv
cktpbmQ6OkV4dGVuZHMsICJzdXBlciBpcyBub3QgdmFsaWQgaW4gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChiYXNlSXNBc3luY0tleXdvcmQgJiYgKCFhcmd1bWVudHMg
fHwgbWF0Y2goQVJST1dGVU5DVElPTikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50U2NvcGUoKS0+cmV2ZXJ0VG9QcmV2aW91c1VzZWRWYXJpYWJsZXModXNlZFZhcmlhYmxlc1Np
emUpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VDbGFzc2lmeUV4cHJlc3Npb25FcnJv
cihFcnJvckluZGljYXRlc0FzeW5jQXJyb3dGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmYWlsRHVlVG9VbmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJz
ZSBjYWxsIGFyZ3VtZW50cyIpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZUlzU3VwZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNjb3BlUmVmIGZ1bmN0aW9uU2NvcGUgPSBjdXJy
ZW50RnVuY3Rpb25TY29wZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlv
blNjb3BlLT5zZXRIYXNEaXJlY3RTdXBlcigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSXQgdW5uZWNlc3NhcnkgdG8gY2hlY2sgb2YgdXNpbmcgc3VwZXIgZHVyaW5nIHJlcGFy
c2luZyBvbmUgbW9yZSB0aW1lLiBBbHNvIGl0IGNhbiBsZWFkIHRvIHN5bnRheCBlcnJvcgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgYXJyb3cgZnVuY3Rpb24gYmVj
YXVzZSBkdXJpbmcgcmVwYXJzaW5nIHdlIGRvbid0IGtub3cgd2hldGhlciB3ZSBjdXJyZW50bHkg
cGFyc2UgdGhlIGFycm93IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aW5zaWRlIG9mIHRoZSBjb25zdHJ1Y3RvciBvciBtZXRob2QuCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2xleGVyLT5pc1JlcGFyc2luZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2NvcGVSZWYgY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25T
Y29wZSA9IGNsb3Nlc3RQYXJlbnRPcmRpbmFyeUZ1bmN0aW9uTm9uTGV4aWNhbFNjb3BlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yS2luZCBmdW5jdGlvbkNv
bnN0cnVjdG9yS2luZCA9ICFmdW5jdGlvblNjb3BlLT5pc0Fycm93RnVuY3Rpb24oKSAmJiAhY2xv
c2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZS0+aXNFdmFsQ29udGV4dCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9yS2luZCgp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNsb3Nlc3RPcmRpbmFyeUZ1
bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9yS2luZCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPT0gQ29u
c3RydWN0b3JLaW5kOjpOb25lLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVu
Y3Rpb25Db25zdHJ1Y3RvcktpbmQgIT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzLCAic3VwZXIg
aXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVy
Q2FsbCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvblNjb3BlLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJDYWxsKCk7CisK
KyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc09wdGlvbmFsQ2FsbCA9IG9wdGlvbmFsQ2hhaW5M
b2NhdGlvbi5lbmRPZmZzZXQgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cHJlc3Npb25FbmQu
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQubWFrZUZ1bmN0aW9u
Q2FsbE5vZGUoc3RhcnRMb2NhdGlvbiwgYmFzZSwgcHJldmlvdXNCYXNlV2FzU3VwZXIsIGFyZ3Vt
ZW50cywgZXhwcmVzc2lvblN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lv
bkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSwgY2FsbE9yQXBwbHlEZXB0aFNjb3BlID8gY2Fs
bE9yQXBwbHlEZXB0aFNjb3BlLT5kaXN0YW5jZVRvSW5uZXJtb3N0Q2hpbGQoKSA6IDAsIGlzT3B0
aW9uYWxDYWxsKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaXNPcHRpb25hbENhbGwpCisg
ICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbENoYWluQmFzZSA9IGJhc2U7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNh
bGxOb2RlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBhcmd1bWVu
dHMsIGV4cHJlc3Npb25TdGFydCwKLSAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkVuZCwg
bGFzdFRva2VuRW5kUG9zaXRpb24oKSwgY2FsbE9yQXBwbHlEZXB0aFNjb3BlID8gY2FsbE9yQXBw
bHlEZXB0aFNjb3BlLT5kaXN0YW5jZVRvSW5uZXJtb3N0Q2hpbGQoKSA6IDApOworICAgICAgICAg
ICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUu
bm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgRE9UOiB7Ci0gICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZp
YWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Np
b25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwotICAgICAgICAgICAgbmV4dEV4cGVjdElk
ZW50aWZpZXIoTGV4ZXJGbGFnc0lnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9u
dEJ1aWxkS2V5d29yZHMpOwotICAgICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQsICJFeHBlY3Rl
ZCBhIHByb3BlcnR5IG5hbWUgYWZ0ZXIgJy4nIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4
dC5jcmVhdGVEb3RBY2Nlc3Moc3RhcnRMb2NhdGlvbiwgYmFzZSwgbV90b2tlbi5tX2RhdGEuaWRl
bnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsK
LSAgICAgICAgICAgIGlmIChVTkxJS0VMWShiYXNlSXNTdXBlciAmJiBjdXJyZW50U2NvcGUoKS0+
aXNBcnJvd0Z1bmN0aW9uKCkpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblNjb3Bl
KCktPnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNTdXBlclByb3BlcnR5KCk7Ci0gICAgICAgICAg
ICBuZXh0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEJB
Q0tRVU9URTogewotICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGJhc2VJc1N1cGVyLCAi
Q2Fubm90IHVzZSBzdXBlciBhcyB0YWcgZm9yIHRhZ2dlZCB0ZW1wbGF0ZXMiKTsKLSAgICAgICAg
ICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigp
OwotICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3Vu
dDsKLSAgICAgICAgICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpUZW1wbGF0ZUxpdGVyYWwgdGVt
cGxhdGVMaXRlcmFsID0gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoY29udGV4dCwgTGV4ZXJUeXBlOjpS
YXdTdHJpbmdzQnVpbGRNb2RlOjpCdWlsZFJhd1N0cmluZ3MpOwotICAgICAgICAgICAgZmFpbElm
RmFsc2UodGVtcGxhdGVMaXRlcmFsLCAiQ2Fubm90IHBhcnNlIHRlbXBsYXRlIGxpdGVyYWwiKTsK
LSAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZVRhZ2dlZFRlbXBsYXRlKHN0YXJ0TG9j
YXRpb24sIGJhc2UsIHRlbXBsYXRlTGl0ZXJhbCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9u
RW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUu
bm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKLSAgICAgICAgICAgIG1fc2VlblRhZ2dlZFRlbXBs
YXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBnb3RvIGVuZE1lbWJlckV4cHJlc3Npb247CisgICAgICAgICAgICBj
YXNlIERPVDogeworICAgICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJl
c3Npb25Db3VudCsrOworICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25F
bmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIG5leHRFeHBlY3RJ
ZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRv
bnRCdWlsZEtleXdvcmRzKTsKKyAgICAgICAgICAgICAgICBtYXRjaE9yRmFpbChJREVOVCwgIkV4
cGVjdGVkIGEgcHJvcGVydHkgbmFtZSBhZnRlciAiLCBvcHRpb25hbENoYWluQmFzZSA/ICInPy4n
IiA6ICInLiciKTsKKyAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVEb3RBY2Nl
c3Moc3RhcnRMb2NhdGlvbiwgYmFzZSwgbV90b2tlbi5tX2RhdGEuaWRlbnQsIGV4cHJlc3Npb25T
dGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIgJiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5j
dGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uU2NvcGUoKS0+c2V0
SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKKyAgICAgICAgICAgICAgICBu
ZXh0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIEJBQ0tRVU9URTogeworICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShv
cHRpb25hbENoYWluQmFzZSwgIkNhbm5vdCB1c2UgdGFnZ2VkIHRlbXBsYXRlcyBpbiBhbiBvcHRp
b25hbCBjaGFpbiIpOworICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNlSXNT
dXBlciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGFnIGZvciB0YWdnZWQgdGVtcGxhdGVzIik7Cisg
ICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVu
ZFBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJT
dGF0ZS5ub25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6
VGVtcGxhdGVMaXRlcmFsIHRlbXBsYXRlTGl0ZXJhbCA9IHBhcnNlVGVtcGxhdGVMaXRlcmFsKGNv
bnRleHQsIExleGVyVHlwZTo6UmF3U3RyaW5nc0J1aWxkTW9kZTo6QnVpbGRSYXdTdHJpbmdzKTsK
KyAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZSh0ZW1wbGF0ZUxpdGVyYWwsICJDYW5ub3QgcGFy
c2UgdGVtcGxhdGUgbGl0ZXJhbCIpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNy
ZWF0ZVRhZ2dlZFRlbXBsYXRlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHRlbXBsYXRlTGl0ZXJhbCwg
ZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsK
KyAgICAgICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7
CisgICAgICAgICAgICAgICAgbV9zZWVuVGFnZ2VkVGVtcGxhdGUgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBnb3RvIGVuZE9mQ2hhaW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBw
cmV2aW91c0Jhc2VXYXNTdXBlciA9IGJhc2VJc1N1cGVyOworICAgICAgICAgICAgYmFzZUlzU3Vw
ZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIHR5cGUgPSBtX3Rva2VuLm1fdHlwZTsKICAgICAgICAg
fQotICAgICAgICBwcmV2aW91c0Jhc2VXYXNTdXBlciA9IGJhc2VJc1N1cGVyOwotICAgICAgICBi
YXNlSXNTdXBlciA9IGZhbHNlOwotICAgIH0KLWVuZE1lbWJlckV4cHJlc3Npb246CitlbmRPZkNo
YWluOgorICAgICAgICBpZiAob3B0aW9uYWxDaGFpbkJhc2UpCisgICAgICAgICAgICBiYXNlID0g
Y29udGV4dC5jcmVhdGVPcHRpb25hbENoYWluKG9wdGlvbmFsQ2hhaW5Mb2NhdGlvbiwgb3B0aW9u
YWxDaGFpbkJhc2UsIGJhc2UpOworICAgIH0gd2hpbGUgKG1hdGNoKFFVRVNUSU9ORE9UKSk7CisK
ICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3VwZXIsICJzdXBlciBpcyBub3QgdmFsaWQg
aW4gdGhpcyBjb250ZXh0Iik7CiAgICAgd2hpbGUgKG5ld0NvdW50LS0pCiAgICAgICAgIGJhc2Ug
PSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGV4cHJlc3Npb25TdGFydCwg
bGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlclRva2Vucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXJUb2tlbnMuaAppbmRleCAxNWNhNWVhZjI4ZTc1OTJmNDNmM2RjZTQxZThlNDFlNjFhOWU4
MTM2Li43MjA2NGI5Mjg0ODE2NmY2ZGUyYjIzZjhhM2Y1OGM5ODFiNzY3OWU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKQEAgLTEzNiw2ICsxMzYsNyBA
QCBlbnVtIEpTVG9rZW5UeXBlIHsKICAgICBPUkVRVUFMLAogICAgIERPVERPVERPVCwKICAgICBB
UlJPV0ZVTkNUSU9OLAorICAgIFFVRVNUSU9ORE9ULAogICAgIExhc3RVbnRhZ2dlZFRva2VuLAog
CiAgICAgLy8gQmVnaW4gdGFnZ2VkIHRva2VucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1N5bnRheENoZWNrZXIuaAppbmRleCA0MTk5NThiZWRiNDI4MTFiMTYyODQwMWNkNGE0Mjk4
YTVhNWNmMzc2Li42MWRkNzUwMDRiYzQ3YmZhNTRmMzVlZDcxZGUyMmZkZTQ3Y2IyZDlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaApAQCAtNzMsNyAr
NzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJlc29sdmVFdmFsRXhwciwgUmVzb2x2ZUV4cHIsIElu
dGVnZXJFeHByLCBEb3VibGVFeHByLCBTdHJpbmdFeHByLCBCaWdJbnRFeHByLAogICAgICAgICBU
aGlzRXhwciwgTnVsbEV4cHIsIEJvb2xFeHByLCBSZWdFeHBFeHByLCBPYmplY3RMaXRlcmFsRXhw
ciwKICAgICAgICAgRnVuY3Rpb25FeHByLCBDbGFzc0V4cHIsIFN1cGVyRXhwciwgSW1wb3J0RXhw
ciwgQnJhY2tldEV4cHIsIERvdEV4cHIsIENhbGxFeHByLAotICAgICAgICBOZXdFeHByLCBQcmVF
eHByLCBQb3N0RXhwciwgVW5hcnlFeHByLCBCaW5hcnlFeHByLAorICAgICAgICBOZXdFeHByLCBQ
cmVFeHByLCBQb3N0RXhwciwgVW5hcnlFeHByLCBCaW5hcnlFeHByLCBPcHRpb25hbENoYWluLAog
ICAgICAgICBDb25kaXRpb25hbEV4cHIsIEFzc2lnbm1lbnRFeHByLCBUeXBlb2ZFeHByLAogICAg
ICAgICBEZWxldGVFeHByLCBBcnJheUxpdGVyYWxFeHByLCBCaW5kaW5nRGVzdHJ1Y3R1cmluZywg
UmVzdFBhcmFtZXRlciwKICAgICAgICAgQXJyYXlEZXN0cnVjdHVyaW5nLCBPYmplY3REZXN0cnVj
dHVyaW5nLCBTb3VyY2VFbGVtZW50c1Jlc3VsdCwKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIERvbnRCdWlsZFN0cmluZ3MgPSBMZXhlckZsYWdz
RG9udEJ1aWxkU3RyaW5nczsKIAogICAgIGludCBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0
dXJuIFNvdXJjZUVsZW1lbnRzUmVzdWx0OyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0
aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBib29sLCBpbnQsIGludCwg
aW50LCBpbnQsIHNpemVfdCkgeyByZXR1cm4gQ2FsbEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlw
ZSBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9u
VHlwZSwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50LCBzaXplX3QsIGJvb2wpIHsgcmV0dXJuIENh
bGxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29tbWFFeHByKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlIGV4cHIpIHsgcmV0dXJuIGV4cHI7IH0KICAgICBF
eHByZXNzaW9uVHlwZSBhcHBlbmRUb0NvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uVHlwZSYgaGVhZCwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlIG5leHQp
IHsgaGVhZCA9IG5leHQ7IHJldHVybiBuZXh0OyB9CiAgICAgRXhwcmVzc2lvblR5cGUgbWFrZUFz
c2lnbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9y
LCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgYm9vbCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNz
aWdubWVudEV4cHI7IH0KQEAgLTE4NCw2ICsxODQsNyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lv
blR5cGUgY3JlYXRlUmVnRXhwKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZp
ZXImIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXImIGZsYWdzLCBpbnQpIHsgcmV0dXJuIFlhcnI6
Omhhc0Vycm9yKFlhcnI6OmNoZWNrU3ludGF4KHBhdHRlcm4uc3RyaW5nKCksIGZsYWdzLnN0cmlu
ZygpKSkgPyAwIDogUmVnRXhwRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU5ld0V4
cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQs
IGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU5ld0V4
cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50KSB7IHJl
dHVybiBOZXdFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT3B0aW9uYWxDaGFpbihj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUpIHsg
cmV0dXJuIE9wdGlvbmFsQ2hhaW47IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVDb25kaXRp
b25hbEV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Np
b25UeXBlLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gQ29uZGl0aW9uYWxFeHByOyB9CiAgICAg
RXhwcmVzc2lvblR5cGUgY3JlYXRlQXNzaWduUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQsIEFzc2ln
bm1lbnRDb250ZXh0KSB7IHJldHVybiBBc3NpZ25tZW50RXhwcjsgfQogICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZUVtcHR5VmFyRXhwcmVzc2lvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25z
dCBJZGVudGlmaWVyJikgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKaW5kZXggMTU2YzE4
MGUxODM0N2Y0N2M5MzkwNDU5ZTVkMjE3NTExYjk4MzFmZi4uOWU3NTg5MmU1MDc2NTcxNTJiY2Iz
NzNiNmYwYjU4ODI2YzE1NGMyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKQEAgLTE3Niw2ICsxNzYsMTAgQEAgc3RhdGljIFN0
cmluZyBmdW5jdGlvbkNhbGxCYXNlKGNvbnN0IFN0cmluZyYgc291cmNlVGV4dCkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgIH0KIAorICAgIC8vIERvbid0IGRpc3BsYXkgdGhlID8uIG9m
IGFuIG9wdGlvbmFsIGNhbGwuCisgICAgaWYgKGlkeCA+IDEgJiYgc291cmNlVGV4dFtpZHhdID09
ICcuJyAmJiBzb3VyY2VUZXh0W2lkeCAtIDFdID09ICc/JykKKyAgICAgICAgaWR4IC09IDI7CisK
ICAgICByZXR1cm4gc291cmNlVGV4dC5sZWZ0KGlkeCArIDEpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggMGQ1ODJlZWFjMzNlY2EwZTRhZDhlNDg5NjU5
YjQzMDE5ZDQ0ZTdhYy4uN2JiMTNlNGVlOTgwYzU4ZjcwZDgxMTQ4YjgxODY5MDYzNzk0ZWU0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDk2LDcgKzQ5Niw3
IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW5nQXBpID0gZmFsc2U7
CiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseVJlZmVyZW5jZXMsIGZhbHNlLCBOb3JtYWwsICJB
bGxvdyB0eXBlcyBmcm9tIHRoZSB3YXNtIHJlZmVyZW5jZXMgc3BlYy4iKSBcCiAgICAgdihib29s
LCB1c2VXZWFrUmVmcywgZmFsc2UsIE5vcm1hbCwgIkV4cG9zZSB0aGUgV2Vha1JlZiBjb25zdHJ1
Y3Rvci4iKSBcCiAgICAgdihib29sLCB1c2VCaWdJbnQsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSB3aWxsIGVuYWJsZSBCaWdJbnQgc3VwcG9ydC4iKSBcCi0gICAgdihib29sLCB1c2VOdWxs
aXNoQ29hbGVzY2luZywgZmFsc2UsIE5vcm1hbCwgIkVuYWJsZSBzdXBwb3J0IGZvciB0aGUgPz8g
b3BlcmF0b3IuIikgXAorICAgIHYoYm9vbCwgdXNlTnVsbGlzaEF3YXJlT3BlcmF0b3JzLCBmYWxz
ZSwgTm9ybWFsLCAiRW5hYmxlIHN1cHBvcnQgZm9yID8uIGFuZCA/PyBvcGVyYXRvcnMuIikgXAog
ICAgIHYoYm9vbCwgdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nLCB0cnVlLCBOb3JtYWwsICJJ
ZiB0cnVlLCB3ZSB3aWxsIHVzZSBvdXIgbm9ybWFsIGFycmF5IGFsbG9jYXRpb24gcHJvZmlsaW5n
LiBJZiBmYWxzZSwgdGhlIGFsbG9jYXRpb24gcHJvZmlsZSB3aWxsIGFsd2F5cyBjbGFpbSB0byBi
ZSB1bmRlY2lkZWQuIikgXAogICAgIHYoYm9vbCwgZm9yY2VQb2x5UHJvdG8sIGZhbHNlLCBOb3Jt
YWwsICJJZiB0cnVlLCBjcmVhdGVfdGhpcyB3aWxsIGFsd2F5cyBjcmVhdGUgYW4gb2JqZWN0IHdp
dGggYSBwb2x5IHByb3RvIHN0cnVjdHVyZS4iKSBcCiAgICAgdihib29sLCBmb3JjZU1pbmlWTU1v
ZGUsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCBpdCB3aWxsIGZvcmNlIG1pbmkgVk0gbW9kZSBv
bi4iKSBcCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggOTQ0M2YyZjM5YWQ2MGNkNDIxNTVlZDFiZjNiOTBmMDFlNGNjYWNlNS4uZmJhOTNjZDI1MWZl
YmQ0NjMxMjg0MjQxNWU0NTJkNWZhODZlMTBkMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE5LTA4LTA2ICBSb3Nz
IEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAgICBbRVNOZXh0XSBJ
bXBsZW1lbnQgb3B0aW9uYWwgY2hhaW5pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMDE5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAx
OS0wOC0wNiAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtX
ZWJBdXRoTl0gRW5hYmxlIExvY2FsQXV0aGVudGljYXRvciBmb3IgbWFjT1MKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1q
c2Mtc3RyZXNzLXRlc3RzCmluZGV4IDgzZGMwNjJhYjI4MjExNjFhOTMxYzJhYmU0M2RmNWY2Njlh
ODhkYTkuLjA5ODcyMzUzNjBkMjQ0NGQxN2JiZTljM2E4YmVhZTFiYzkxZTk5NGUgMTAwNzU1Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0
cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtNjk5LDggKzY5OSw4IEBAIGRlZiBydW5CaWdJbnRF
bmFibGVkKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAgcnVuKCJiaWctaW50LWVu
YWJsZWQiLCAiLS11c2VCaWdJbnQ9dHJ1ZSIgLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCi1kZWYgcnVuTnVsbGlzaENvYWxlc2NpbmdFbmFibGVk
KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJudWxsaXNoLWNvYWxlc2Np
bmctZW5hYmxlZCIsICItLXVzZU51bGxpc2hDb2FsZXNjaW5nPXRydWUiICwgKihGVExfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCitkZWYgcnVuTnVsbGlzaEF3YXJlT3Bl
cmF0b3JzRW5hYmxlZCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQorICAgIHJ1bigibnVs
bGlzaC1hd2FyZS1vcGVyYXRvcnMtZW5hYmxlZCIsICItLXVzZU51bGxpc2hBd2FyZU9wZXJhdG9y
cz10cnVlIiAsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQog
ZW5kCiAKIGRlZiBydW5GVExOb0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjI0
NzMyZDFlMzJmODNjMWM4OThhZDM3YzEwZWFhNzNiM2RjYzNiNC4uZGU2ZTMzOTNiZGM4MzRiMmU4
MmZmMGExZTgyMzY1N2Q2MmFhNmUyZSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0wOC0wNSAgUm9zcyBL
aXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1w
bGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHN0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanM6CisgICAgICAg
ICogc3RyZXNzL29wdGlvbmFsLWNoYWluaW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3Mv
dGFpbC1jYWxsLXJlY29nbml6ZS5qczoKKwogMjAxOS0wOC0wNSAgTWljaGFlbCBTYWJvZmYgIDxt
c2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0M6IGFzc2VydGlvbiBmYWlsdXJlIGluIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qcyBiL0pTVGVzdHMvc3RyZXNzL251
bGxpc2gtY29hbGVzY2luZy5qcwppbmRleCA1OTU4ZjEyNzNhYjE2NDcxMzBhNmVkNmUxYjg2ZTVl
MWY0NGE3YzRlLi5hNTI3MmVkNTQ1YWNmMDZjNThkZmQ5ODc1ZTA1Yzc1ZjdiMDRiMDUxIDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanMKKysrIGIvSlNUZXN0
cy9zdHJlc3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzCkBAIC0xLDQgKzEsNCBAQAotLy9AIHJ1bk51
bGxpc2hDb2FsZXNjaW5nRW5hYmxlZAorLy9AIHJ1bk51bGxpc2hBd2FyZU9wZXJhdG9yc0VuYWJs
ZWQKIAogZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgewogICAgIGlmIChhY3R1
YWwgIT09IGV4cGVjdGVkKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwtY2hh
aW5pbmcuanMgYi9KU1Rlc3RzL3N0cmVzcy9vcHRpb25hbC1jaGFpbmluZy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jNjI3NjM3Mzk1MGU5M2IwMDNkZDI4ZjA1YTUwNDkzNmE0MDBmNjc2Ci0tLSAvZGV2L251bGwK
KysrIGIvSlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcuanMKQEAgLTAsMCArMSwxNTEg
QEAKKy8vQCBydW5OdWxsaXNoQXdhcmVPcGVyYXRvcnNFbmFibGVkCisKK2Z1bmN0aW9uIHNob3Vs
ZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0
dWFsfWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvd1N5bnRheEVycm9yKHNjcmlwdCkgewor
ICAgIGxldCBlcnJvcjsKKyAgICB0cnkgeworICAgICAgICBldmFsKHNjcmlwdCk7CisgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorCisgICAgaWYgKCEoZXJyb3Ig
aW5zdGFuY2VvZiBTeW50YXhFcnJvcikpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0
ZWQgU3ludGF4RXJyb3IhJyk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93VHlwZUVycm9yKGZ1
bmMsIG1lc3NhZ2VQcmVmaXgpIHsKKyAgICBsZXQgZXJyb3I7CisgICAgdHJ5IHsKKyAgICAgICAg
ZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKwor
ICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yKSkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCdFeHBlY3RlZCBUeXBlRXJyb3IhJyk7CisKKyAgICBpZiAoIWVycm9yLm1lc3NhZ2Uu
c3RhcnRzV2l0aChtZXNzYWdlUHJlZml4KSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeXBl
RXJyb3IgaGFzIHdyb25nIG1lc3NhZ2UhJyk7Cit9CisKK3Nob3VsZEJlKHVuZGVmaW5lZD8udmFs
dWVPZigpLCB1bmRlZmluZWQpOworc2hvdWxkQmUobnVsbD8udmFsdWVPZigpLCB1bmRlZmluZWQp
Oworc2hvdWxkQmUodHJ1ZT8udmFsdWVPZigpLCB0cnVlKTsKK3Nob3VsZEJlKGZhbHNlPy52YWx1
ZU9mKCksIGZhbHNlKTsKK3Nob3VsZEJlKDA/LnZhbHVlT2YoKSwgMCk7CitzaG91bGRCZSgxPy52
YWx1ZU9mKCksIDEpOworc2hvdWxkQmUoJyc/LnZhbHVlT2YoKSwgJycpOworc2hvdWxkQmUoJ2hp
Jz8udmFsdWVPZigpLCAnaGknKTsKK3Nob3VsZEJlKCh7fSk/LmNvbnN0cnVjdG9yLCBPYmplY3Qp
Oworc2hvdWxkQmUoKHsgeDogJ2hpJyB9KT8ueCwgJ2hpJyk7CitzaG91bGRCZShbXT8ubGVuZ3Ro
LCAwKTsKK3Nob3VsZEJlKFsnaGknXT8ubGVuZ3RoLCAxKTsKKworc2hvdWxkQmUodW5kZWZpbmVk
Py5bJ3ZhbHVlT2YnXSgpLCB1bmRlZmluZWQpOworc2hvdWxkQmUobnVsbD8uWyd2YWx1ZU9mJ10o
KSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKHRydWU/LlsndmFsdWVPZiddKCksIHRydWUpOworc2hv
dWxkQmUoZmFsc2U/LlsndmFsdWVPZiddKCksIGZhbHNlKTsKK3Nob3VsZEJlKDA/LlsndmFsdWVP
ZiddKCksIDApOworc2hvdWxkQmUoMT8uWyd2YWx1ZU9mJ10oKSwgMSk7CitzaG91bGRCZSgnJz8u
Wyd2YWx1ZU9mJ10oKSwgJycpOworc2hvdWxkQmUoJ2hpJz8uWyd2YWx1ZU9mJ10oKSwgJ2hpJyk7
CitzaG91bGRCZSgoe30pPy5bJ2NvbnN0cnVjdG9yJ10sIE9iamVjdCk7CitzaG91bGRCZSgoeyB4
OiAnaGknIH0pPy5bJ3gnXSwgJ2hpJyk7CitzaG91bGRCZShbXT8uWydsZW5ndGgnXSwgMCk7Citz
aG91bGRCZShbJ2hpJ10/LlswXSwgJ2hpJyk7CisKK3Nob3VsZEJlKHVuZGVmaW5lZD8uKCksIHVu
ZGVmaW5lZCk7CitzaG91bGRCZShudWxsPy4oKSwgdW5kZWZpbmVkKTsKK3Nob3VsZFRocm93VHlw
ZUVycm9yKCgpID0+IHRydWU/LigpLCAndHJ1ZSBpcyBub3QgYSBmdW5jdGlvbicpOworc2hvdWxk
VGhyb3dUeXBlRXJyb3IoKCkgPT4gZmFsc2U/LigpLCAnZmFsc2UgaXMgbm90IGEgZnVuY3Rpb24n
KTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+IDA/LigpLCAnMCBpcyBub3QgYSBmdW5jdGlv
bicpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gMT8uKCksICcxIGlzIG5vdCBhIGZ1bmN0
aW9uJyk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAnJz8uKCksICdcJ1wnIGlzIG5vdCBh
IGZ1bmN0aW9uJyk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAnaGknPy4oKSwgJ1wnaGlc
JyBpcyBub3QgYSBmdW5jdGlvbicpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHt9KT8u
KCksICcoe30pIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9
PiAoeyB4OiAnaGknIH0pPy4oKSwgJyh7IHg6IFwnaGlcJyB9KSBpcyBub3QgYSBmdW5jdGlvbicp
Oworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gW10/LigpLCAnW10gaXMgbm90IGEgZnVuY3Rp
b24nKTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+IFsnaGknXT8uKCksICdbXCdoaVwnXSBp
cyBub3QgYSBmdW5jdGlvbicpOworCitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoe30pPy5p
KCksICcoe30pPy5pIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CitzaG91bGRCZSgoe30pLmk/LigpLCB1
bmRlZmluZWQpOworc2hvdWxkQmUoKHt9KT8uaT8uKCksIHVuZGVmaW5lZCk7CitzaG91bGRUaHJv
d1R5cGVFcnJvcigoKSA9PiAoe30pPy5bJ2knXSgpLCAnKHt9KT8uW1wnaVwnXSBpcyBub3QgYSBm
dW5jdGlvbicpOworc2hvdWxkQmUoKHt9KVsnaSddPy4oKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJl
KCh7fSk/LlsnaSddPy4oKSwgdW5kZWZpbmVkKTsKKworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkg
PT4gKHt9KT8uYVsnYiddLCAndW5kZWZpbmVkIGlzIG5vdCBhbiBvYmplY3QnKTsKK3Nob3VsZEJl
KCh7fSk/LmE/LlsnYiddLCB1bmRlZmluZWQpOworc2hvdWxkQmUobnVsbD8uYVsnYiddKCkuYywg
dW5kZWZpbmVkKTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICh7fSk/LlsnYSddLmIsICd1
bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCcpOworc2hvdWxkQmUoKHt9KT8uWydhJ10/LmIsIHVu
ZGVmaW5lZCk7CitzaG91bGRCZShudWxsPy5bJ2EnXS5iKClbJ2MnXSwgdW5kZWZpbmVkKTsKK3No
b3VsZFRocm93VHlwZUVycm9yKCgpID0+ICgoKSA9PiB7fSk/LigpKCksICcoKCkgPT4ge30pPy4o
KSBpcyBub3QgYSBmdW5jdGlvbicpOworc2hvdWxkQmUoKCgpID0+IHt9KT8uKCk/LigpLCB1bmRl
ZmluZWQpOworc2hvdWxkQmUobnVsbD8uKCkoKS5hWydiJ10sIHVuZGVmaW5lZCk7CisKK2NvbnN0
IG8wID0geyBhOiB7IGIoKSB7IHJldHVybiB0aGlzLl9iLmJpbmQodGhpcyk7IH0sIF9iKCkgeyBy
ZXR1cm4gdGhpcy5fX2I7IH0sIF9fYjogeyBjOiA0MiB9IH0gfTsKK3Nob3VsZEJlKG8wPy5hPy5b
J2InXT8uKCk/LigpPy5jLCA0Mik7CitzaG91bGRCZShvMD8uaT8uWydqJ10/LigpPy4oKT8uaywg
dW5kZWZpbmVkKTsKKworY29uc3QgbzEgPSB7IGNvdW50OiAwLCBnZXQgeCgpIHsgdGhpcy5jb3Vu
dCsrOyByZXR1cm4gKCkgPT4ge307IH0gfTsKK28xLng/Lnk7CitzaG91bGRCZShvMS5jb3VudCwg
MSk7CitvMS54Py5bJ3knXTsKK3Nob3VsZEJlKG8xLmNvdW50LCAyKTsKK28xLng/LigpOworc2hv
dWxkQmUobzEuY291bnQsIDMpOworbnVsbD8uKG8xLngpOworc2hvdWxkQmUobzEuY291bnQsIDMp
OworCitzaG91bGRCZShkZWxldGUgdW5kZWZpbmVkPy5mb28sIHRydWUpOworc2hvdWxkQmUoZGVs
ZXRlIG51bGw/LmZvbywgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgdW5kZWZpbmVkPy5bJ2Zvbydd
LCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBudWxsPy5bJ2ZvbyddLCB0cnVlKTsKK3Nob3VsZEJl
KGRlbGV0ZSB1bmRlZmluZWQ/LigpLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBudWxsPy4oKSwg
dHJ1ZSk7CisKK2NvbnN0IG8yID0geyB4OiAwLCB5OiAwLCB6KCkge30gfTsKK3Nob3VsZEJlKGRl
bGV0ZSBvMj8ueCwgdHJ1ZSk7CitzaG91bGRCZShvMi54LCB1bmRlZmluZWQpOworc2hvdWxkQmUo
ZGVsZXRlIG8yPy54LCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBvMj8uWyd5J10sIHRydWUpOwor
c2hvdWxkQmUobzIueSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKGRlbGV0ZSBvMj8uWyd5J10sIHRy
dWUpOworc2hvdWxkQmUoZGVsZXRlIG8yLno/LigpLCB0cnVlKTsKKworZnVuY3Rpb24gZ3JlZXQo
bmFtZSkgeyByZXR1cm4gYGhleSwgJHtuYW1lfSR7dGhpcy5zdWZmaXggPz8gJy4nfWA7IH0KK3No
b3VsZEJlKGV2YWw/LignZ3JlZXQoIndvcmxkIiknKSwgJ2hleSwgd29ybGQuJyk7CitzaG91bGRC
ZShncmVldD8uY2FsbCh7IHN1ZmZpeDogJyEnIH0sICd3b3JsZCcpLCAnaGV5LCB3b3JsZCEnKTsK
K3Nob3VsZEJlKGdyZWV0LmNhbGw/Lih7IHN1ZmZpeDogJyEnIH0sICd3b3JsZCcpLCAnaGV5LCB3
b3JsZCEnKTsKK3Nob3VsZEJlKG51bGw/LmNhbGwoeyBzdWZmaXg6ICchJyB9LCAnd29ybGQnKSwg
dW5kZWZpbmVkKTsKK3Nob3VsZEJlKCh7fSkuY2FsbD8uKHsgc3VmZml4OiAnIScgfSwgJ3dvcmxk
JyksIHVuZGVmaW5lZCk7CitzaG91bGRCZShncmVldD8uYXBwbHkoeyBzdWZmaXg6ICc/JyB9LCBb
J3dvcmxkJ10pLCAnaGV5LCB3b3JsZD8nKTsKK3Nob3VsZEJlKGdyZWV0LmFwcGx5Py4oeyBzdWZm
aXg6ICc/JyB9LCBbJ3dvcmxkJ10pLCAnaGV5LCB3b3JsZD8nKTsKK3Nob3VsZEJlKG51bGw/LmFw
cGx5KHsgc3VmZml4OiAnPycgfSwgWyd3b3JsZCddKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKCh7
fSkuYXBwbHk/Lih7IHN1ZmZpeDogJz8nIH0sIFsnd29ybGQnXSksIHVuZGVmaW5lZCk7CisKK2Nv
bnN0IG1hc3F1ZXJhZGVyID0gbWFrZU1hc3F1ZXJhZGVyKCk7CittYXNxdWVyYWRlci5iYXIgPSAz
Oworc2hvdWxkQmUobWFzcXVlcmFkZXI/LmJhciwgMyk7CitzaG91bGRCZShtYXNxdWVyYWRlcj8u
WydiYXInXSwgMyk7CitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiBtYXNxdWVyYWRlcj8uKCks
ICdtYXNxdWVyYWRlciBpcyBub3QgYSBmdW5jdGlvbicpOworCitzaG91bGRUaHJvd1N5bnRheEVy
cm9yKCdjbGFzcyBDIHt9IGNsYXNzIEQgZXh0ZW5kcyBDIHsgZm9vKCkgeyByZXR1cm4gc3VwZXI/
LmJhcjsgfSB9Jyk7CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjbGFzcyBDIHt9IGNsYXNzIEQg
ZXh0ZW5kcyBDIHsgZm9vKCkgeyByZXR1cm4gc3VwZXI/LlsiYmFyIl07IH0gfScpOworc2hvdWxk
VGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBjbGFzcyBEIGV4dGVuZHMgQyB7IGNvbnN0cnVj
dG9yKCkgeyBzdXBlcj8uKCk7IH0gfScpOworCitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjb25z
dCBvID0geyBDOiBjbGFzcyB7fSB9OyBuZXcgbz8uQygpOycpCitzaG91bGRUaHJvd1N5bnRheEVy
cm9yKCdjb25zdCBvID0geyBDOiBjbGFzcyB7fSB9OyBuZXcgbz8uWyJDIl0oKTsnKQorc2hvdWxk
VGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBuZXcgQz8uKCk7JykKK3Nob3VsZFRocm93U3lu
dGF4RXJyb3IoJ2Z1bmN0aW9uIGZvbygpIHsgbmV3Py50YXJnZXQ7IH0nKTsKKworc2hvdWxkVGhy
b3dTeW50YXhFcnJvcignZnVuY3Rpb24gdGFnKCkge30gdGFnPy5gYDsnKTsKK3Nob3VsZFRocm93
U3ludGF4RXJyb3IoJ2NvbnN0IG8gPSB7IHRhZygpIHt9IH07IG8/LnRhZ2BgOycpOworCisvLyBO
T1QgYW4gb3B0aW9uYWwgY2hhaW4KK3Nob3VsZEJlKGZhbHNlPy40OjUsIDUpOwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXJlY29nbml6ZS5qcyBiL0pTVGVzdHMvc3RyZXNz
L3RhaWwtY2FsbC1yZWNvZ25pemUuanMKaW5kZXggMTY4MWU0MDIwMWVkM2NlN2U3OTE2YzljYWI4
ZTUyYjE2Y2ExN2FjMC4uOWNjMGUzMDZmYWNkNzQ0NzUxYTc5NjJhNmU2NTcwMjczZGQ1ZTNjMSAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXJlY29nbml6ZS5qcworKysgYi9K
U1Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtcmVjb2duaXplLmpzCkBAIC0xLDMgKzEsNSBAQAorLy9A
IHJ1bk51bGxpc2hBd2FyZU9wZXJhdG9yc0VuYWJsZWQKKwogZnVuY3Rpb24gY2FsbGVyTXVzdEJl
UnVuKCkgewogICAgIGlmICghT2JqZWN0LmlzKGNhbGxlck11c3RCZVJ1bi5jYWxsZXIsIHJ1blRl
c3RzKSkKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBjYWxsZXIsIGV4cGVjdGVkIHJ1
biBidXQgZ290ICIsIGNhbGxlck11c3RCZVJ1bi5jYWxsZXIpOwpAQCAtMTUwLDYgKzE1MiwxMSBA
QCBmdW5jdGlvbiBydW5UZXN0cygpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlIHx8IGNhbGxlck11
c3RCZVJ1bigpOwogICAgIH0pKCk7CiAKKyAgICAoZnVuY3Rpb24gdGFpbENhbGxDb2FsZXNjZSgp
IHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICByZXR1cm4gZmFsc2UgPz8gY2FsbGVy
TXVzdEJlUnVuKCk7CisgICAgfSkoKTsKKwogICAgIChmdW5jdGlvbiBtZW1iZXJUYWlsQ2FsbCgp
IHsKICAgICAgICAgInVzZSBzdHJpY3QiOwogICAgICAgICByZXR1cm4geyBmOiBjYWxsZXJNdXN0
QmVSdW4gfS5mKCk7CkBAIC0xNjAsNiArMTY3LDExIEBAIGZ1bmN0aW9uIHJ1blRlc3RzKCkgewog
ICAgICAgICByZXR1cm4gY2FsbGVyTXVzdEJlUnVuLmJpbmQoKSgpOwogICAgIH0pKCk7CiAKKyAg
ICAoZnVuY3Rpb24gb3B0aW9uYWxUYWlsQ2FsbCgpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOwor
ICAgICAgICByZXR1cm4gY2FsbGVyTXVzdEJlUnVuPy4oKTsKKyAgICB9KSgpOworCiAgICAgLy8g
RnVuY3Rpb24ucHJvdG90eXBlIHRlc3RzCiAKICAgICAoZnVuY3Rpb24gYXBwbHlUYWlsQ2FsbCgp
IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375841</attachid>
            <date>2019-08-08 14:55:52 -0700</date>
            <delta_ts>2019-08-13 10:13:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200199-20190808145551.patch</filename>
            <type>text/plain</type>
            <size>65305</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
OTZiMTM5YjU0MzJiZTBiNTEwYmVjZTQyMTVmYTBmOTJmZjYyMDdkLi5jN2ViYThkYjg2NTM1ZGYy
ZDI5ZDE1NWI2ZDRhMDRlMDk5ZWNiZmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OSBAQAorMjAxOS0wOC0wOCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
dGhlIG9wdGlvbmFsIGNoYWluaW5nIHByb3Bvc2FsLCB3aGljaCBoYXMgbm93IHJlYWNoZWQgU3Rh
Z2UgMyBhdCBUQzM5LgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhID8uIG9wZXJhdG9yIHdo
aWNoOgorICAgICAgICAgLSBndWFyZHMgbWVtYmVyIGFjY2VzcyB3aGVuIHRoZSBMSFMgaXMgbnVs
bGlzaCwgaS5lLiBgbnVsbD8uZm9vYCBhbmQgYG51bGw/LlsnZm9vJ11gIGFyZSB1bmRlZmluZWQK
KyAgICAgICAgIC0gZ3VhcmRzIGZ1bmN0aW9uIGNhbGxzIHdoZW4gdGhlIExIUyBpcyBudWxsaXNo
LCBpLmUuIGBudWxsPy4oKWAgaXMgdW5kZWZpbmVkCisgICAgICAgICAtIHNob3J0LWNpcmN1aXRz
IG92ZXIgYSB3aG9sZSBhY2Nlc3MvY2FsbCBjaGFpbiwgaS5lLiBgbnVsbD8uYVsnYiddKGMrKylg
IGlzIHVuZGVmaW5lZCBhbmQgZG9lcyBub3QgaW5jcmVtZW50IGMKKworICAgICAgICBUaGlzIGZl
YXR1cmUgY2FuIGJlIG5haXZlbHkgdmlld2VkIGFzIGEgdGVybmFyeSBpbiBkaXNndWlzZSwgaS5l
LiBgYT8uYmAgaXMgbGlrZSBgYSA9PSBudWxsID8gdW5kZWZpbmVkIDogYS5iYC4KKyAgICAgICAg
SG93ZXZlciwgc2luY2Ugd2UgbXVzdCBiZSBzdXJlIG5vdCB0byBkb3VibGUtZXZhbHVhdGUgdGhl
IExIUywgaXQncyBhY3R1YWxseSByYXRoZXIgYWtpbiB0byBhIHRyeSBibG9jayAtLQorICAgICAg
ICBuYW1lbHksIHdlIGhhdmUgdGhlIGJ5dGVjb2RlIGdlbmVyYXRvciBrZWVwIGEgc3RhY2sgb2Yg
ZWFybHktb3V0IHRhcmdldCBsYWJlbHMgZm9yIGFjY2VzcyBhbmQgY2FsbCBub2Rlcy4KKworICAg
ICAgICAoQWxzbyBub3RlIHRoYXQgZG9jdW1lbnQuYWxsIGJlaGF2ZXMgYXMgYW4gb2JqZWN0LCBz
byAibnVsbGlzaCIgbWVhbnMgKnN0cmljdGx5KiBlcXVhbCB0byBudWxsIG9yIHVuZGVmaW5lZC4p
CisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YmVnaW5PcHRpb25hbENoYWluKTogQWRkZWQuCisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbmRPcHRpb25hbENoYWluKTogQWRkZWQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3B0aW9uYWxDaGVjayk6IEFk
ZGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAg
ICBJbXBsZW1lbnQgbGFiZWwgc3RhY2sgYW5kIGVhcmx5LW91dCBlbWl0dGVyLgorCisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkJyYWNrZXRB
Y2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRvdEFjY2Vzc29yTm9k
ZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVt
aXRCeXRlY29kZSk6IFJlZmFjdG9yIHNvIHdlIGNhbiBlbWl0T3B0aW9uYWxDaGVjayBpbiBhIHNp
bmdsZSBsb2NhdGlvbi4KKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5
dGVjb2RlKTogUmVmYWN0b3Igc28gd2UgY2FuIGVtaXRPcHRpb25hbENoZWNrIGluIGEgc2luZ2xl
IGxvY2F0aW9uLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2Rl
KToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToK
KyAgICAgICAgKEpTQzo6RGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OkRlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvYWxl
c2NlTm9kZTo6ZW1pdEJ5dGVjb2RlKTogQ2xlYW4gdXAuCisgICAgICAgIChKU0M6Ok9wdGlvbmFs
Q2hhaW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZC4KKyAgICAgICAgSW1wbGVtZW50ID8uIG5v
ZGUgYW5kIGVtaXQgY2hlY2tzIHdoZXJlIG5lZWRlZC4KKworICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbToKKyAgICAgICAgSGF2ZSBPcElzVW5kZWZpbmVkT3JOdWxsIHN1cHBvcnQgY29u
c3RhbnQgcmVnaXN0ZXJzLgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlT3B0aW9uYWxDaGFpbik6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRGVsZXRlTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1
aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpMZXhlcjxUPjo6bGV4V2l0aG91dENsZWFyaW5nTGluZVRlcm1pbmF0
b3IpOgorICAgICAgICAqIHBhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6
Ok9wdGlvbmFsQ2hhaW5Ob2RlOjpPcHRpb25hbENoYWluTm9kZSk6IEFkZGVkLgorICAgICAgICAq
IHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAoSlNDOjpFeHByZXNzaW9uTm9kZTo6aXNPcHRpb25h
bENoYWluIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjppc09w
dGlvbmFsQ2hhaW5CYXNlIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChKU0M6OkV4cHJlc3Npb25O
b2RlOjpzZXRJc09wdGlvbmFsQ2hhaW5CYXNlKTogQWRkZWQuCisgICAgICAgICogcGFyc2VyL1Bh
cnNlclRva2Vucy5oOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAg
IChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlT3B0aW9uYWxDaGFpbik6IEFkZGVkLgorICAgICAgICBJ
bnRyb2R1Y2UgbmV3IHRva2VuIGFuZCBBU1Qgbm9kZSwgYXMgd2VsbCBhcyBhbiBFeHByZXNzaW9u
Tm9kZSBmaWVsZCB0byBtYXJrIExIU2VzIHdpdGguCisKKyAgICAgICAgKiBwYXJzZXIvUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVz
c2lvbik6CisgICAgICAgIFBhcnNlIG9wdGlvbmFsIGNoYWlucyBieSB3cmFwcGluZyB0aGUgYWNj
ZXNzL2NhbGwgcGFyc2UgbG9vcC4KKworICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5jcHA6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ2FsbEJhc2UpOgorICAgICAgICBFbnN1cmUg
dGhhdCBUeXBlRXJyb3IgbWVzc2FnZXMgZG9uJ3QgaW5jbHVkZSB0aGUgJz8uJy4KKworICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICBVcGRhdGUgZmVhdHVyZSBmbGFnLCBhcyA/
LiBhbmQgPz8gYXJlIGEgZG91YmxlIGZlYXR1cmUgb2YgIm51bGxpc2gtYXdhcmUiIG9wZXJhdG9y
cy4KKwogMjAxOS0wOC0wOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAog
ICAgICAgICBPcGVuU291cmNlIE1lbW9yeUZvb3RwcmludCBBUEkgZm9yIEpTQyBjb21tYW5kIGxp
bmUgdG9vbApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCAyYzMwYTRkOWI0MzFiMGU1NTI3NDFkMzI1YWM4
MTQ5YzM4ZTlkNTgwLi45ZjIxY2I1ZjUxYmFlMTYyOGFkZTQ5ODk4MjM0MDMyYzVhODJlYTM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtNDk2NCw2ICs0OTY0LDQxIEBAIHZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRKdW1wSWYoUmVnaXN0ZXJJRCogY29tcGxldGlvblR5cGVSZWdpc3RlciwgQ29t
cGxldGlvCiAgICAgZW1pdEp1bXBJZlRydWUoZXF1aXZhbGVuY2VSZXN1bHQsIGp1bXBUYXJnZXQp
OwogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpiZWdpbk9wdGlvbmFsQ2hhaW4oKQorewor
ICAgIG1fb3B0aW9uYWxDaGFpblRhcmdldExhYmVsU3RhY2suYXBwZW5kKG5ld0xhYmVsKCkpOwor
ICAgIG1fb3B0aW9uYWxDaGFpbkRlcHRoKys7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVuZE9wdGlvbmFsQ2hhaW4oUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVsZXRlKQoreworICAg
IEFTU0VSVChtX29wdGlvbmFsQ2hhaW5UYXJnZXRMYWJlbFN0YWNrLnNpemUoKSk7CisgICAgQVNT
RVJUKG1fb3B0aW9uYWxDaGFpbkRlcHRoKTsKKworICAgIGlmICgtLW1fb3B0aW9uYWxDaGFpbkRl
cHRoKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWY8TGFiZWw+IGVuZExhYmVsID0gbmV3TGFi
ZWwoKTsKKyAgICBlbWl0SnVtcChlbmRMYWJlbC5nZXQoKSk7CisKKyAgICB3aGlsZSAobV9vcHRp
b25hbENoYWluVGFyZ2V0TGFiZWxTdGFjay5zaXplKCkpCisgICAgICAgIGVtaXRMYWJlbChtX29w
dGlvbmFsQ2hhaW5UYXJnZXRMYWJlbFN0YWNrLnRha2VMYXN0KCkuZ2V0KCkpOworICAgIGVtaXRM
b2FkKGRzdCwgaXNEZWxldGUgPyBqc0Jvb2xlYW4odHJ1ZSkgOiBqc1VuZGVmaW5lZCgpKTsKKwor
ICAgIGVtaXRMYWJlbChlbmRMYWJlbC5nZXQoKSk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRPcHRpb25hbENoZWNrKFJlZ2lzdGVySUQqIHNyYywgYm9vbCBpc1NlY29uZENoZWNr
Rm9yQ3VycmVudE5vZGUpCit7CisgICAgQVNTRVJUKG1fb3B0aW9uYWxDaGFpblRhcmdldExhYmVs
U3RhY2suc2l6ZSgpKTsKKworICAgIC8vIEltbWVkaWF0ZSBiZWdpbi1hbmQtZW5kLCB1c2VkIHdo
ZW4gYW4gYWNjZXNzLWFuZC1jYWxsIG5vZGUgaGFzIGJvdGggcGFydHMgbWFya2VkIG9wdGlvbmFs
IChlLmcuIGBhPy5iPy4oKWApLgorICAgIGlmIChpc1NlY29uZENoZWNrRm9yQ3VycmVudE5vZGUp
CisgICAgICAgIG1fb3B0aW9uYWxDaGFpblRhcmdldExhYmVsU3RhY2suYXBwZW5kKG5ld0xhYmVs
KCkpOworCisgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5kZWZpbmVkT3JOdWxsKG5ld1RlbXBv
cmFyeSgpLCBzcmMpLCBtX29wdGlvbmFsQ2hhaW5UYXJnZXRMYWJlbFN0YWNrLmxhc3QoKS5nZXQo
KSk7Cit9CisKIHZvaWQgRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpCiB7CiAgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNv
bnRleHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKaW5kZXggZTk3Njg2YWEzZWRjZGQ4ZDNmOWI1N2M0YTZkMTIzYmFjOWNiMzk4Ny4uZmJl
ZTVkNDgyNjAzZjdiMzZhMmVmNGEwN2NjNTM2MmJiNWFmNjYxMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAt
OTU5LDYgKzk1OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwdXNoRmluYWxs
eUNvbnRyb2xGbG93U2NvcGUoRmluYWxseUNvbnRleHQmKTsKICAgICAgICAgdm9pZCBwb3BGaW5h
bGx5Q29udHJvbEZsb3dTY29wZSgpOwogCisgICAgICAgIHZvaWQgYmVnaW5PcHRpb25hbENoYWlu
KCk7CisgICAgICAgIHZvaWQgZW5kT3B0aW9uYWxDaGFpbihSZWdpc3RlcklEKiBkc3QsIGJvb2wg
aXNEZWxldGUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0
ZXJJRCogc3JjLCBib29sIGlzU2Vjb25kQ2hlY2tGb3JDdXJyZW50Tm9kZSA9IGZhbHNlKTsKKwog
ICAgICAgICB2b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCwgUmVn
aXN0ZXJJRCogaW5kZXgpOwogICAgICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lz
dGVySUQqIGxvY2FsKTsKICAgICAgICAgdm9pZCBwdXNoU3RydWN0dXJlRm9ySW5TY29wZShSZWdp
c3RlcklEKiBsb2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5LCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKQEAgLTEyNjYsNiArMTI3MCw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFuZ2VzOwogICAgICAgICBTZWdt
ZW50ZWRWZWN0b3I8VHJ5RGF0YSwgOD4gbV90cnlEYXRhOwogCisgICAgICAgIFZlY3RvcjxSZWY8
TGFiZWw+PiBtX29wdGlvbmFsQ2hhaW5UYXJnZXRMYWJlbFN0YWNrOworICAgICAgICB1bnNpZ25l
ZCBtX29wdGlvbmFsQ2hhaW5EZXB0aCB7IDAgfTsKKwogICAgICAgICBpbnQgbV9uZXh0Q29uc3Rh
bnRPZmZzZXQgeyAwIH07CiAKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEZ1bmN0aW9uTWV0YWRh
dGFOb2RlKiwgdW5zaWduZWQ+IEZ1bmN0aW9uT2Zmc2V0TWFwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDdjYzA3OGMz
YzAyMTVjOWRmNzkwYzg0OGEzMmQxM2I4MDkwZjA4YTAuLjVhNWMxZmRmMmI2M2EyYWUwODc5MDY0
Y2U1ZmJiZTkzOTdjYzVhMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTc0NCwxMiArNzQ0LDE4IEBAIFJlZ2lzdGVy
SUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpCiAgICAgUmVnaXN0ZXJJRCogcmV0OwogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogCi0gICAg
aWYgKGlzTm9uSW5kZXhTdHJpbmdFbGVtZW50KCptX3N1YnNjcmlwdCkpIHsKLSAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyAgICBi
b29sIHN1YnNjcmlwdElzTm9uSW5kZXhTdHJpbmcgPSBpc05vbkluZGV4U3RyaW5nRWxlbWVudCgq
bV9zdWJzY3JpcHQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gc3Vic2NyaXB0SXNO
b25JbmRleFN0cmluZworICAgICAgICA/IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpCisgICAg
ICAgIDogZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwgbV9zdWJzY3Jp
cHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKKworICAg
IGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOworCisgICAgaWYgKHN1YnNjcmlwdElzTm9uSW5k
ZXhTdHJpbmcpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgp
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCBzdGF0aWNfY2FzdDxTdHJpbmdO
b2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZSht
X2Jhc2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2Vu
ZXJhdG9yKSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXRO
b2RlRm9yUHJvcGVydHkobV9zdWJzY3JpcHQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIHJl
dCA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCBw
cm9wZXJ0eSk7CkBAIC03NjMsMTcgKzc2OSwyNiBAQCBSZWdpc3RlcklEKiBCcmFja2V0QWNjZXNz
b3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaQog
CiBSZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAgICAgYm9v
bCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gYmFzZSA9IGJhc2VJc1N1cGVyID8gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0
b3IpIDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZTsKKyAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAgIGJhc2UgPSBlbWl0U3VwZXJC
YXNlRm9yQ2FsbGVlKGdlbmVyYXRvcik7CisgICAgZWxzZSB7CisgICAgICAgIGJhc2UgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyAgICAgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENo
YWluQmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2Uu
Z2V0KCkpOworICAgIH0KKwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICBSZWdpc3RlcklEKiBmaW5hbERlc3Qg
PSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZ2lzdGVySUQqIHJldDsK
ICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNW
YWx1ZSA9IGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7Ci0gICAgICAgIHJldCA9IGdlbmVyYXRvci5l
bWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQoKSwgbV9pZGVu
dCk7CisgICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QuZ2V0KCks
IGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQoKSwgbV9pZGVudCk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2UuZ2V0KCksIG1f
aWRlbnQpOwotICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUoZmluYWxEZXN0LCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOworICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQo
ZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKKyAgICBnZW5lcmF0b3IuZW1p
dFByb2ZpbGVUeXBlKGZpbmFsRGVzdC5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICByZXR1cm4gcmV0OwogfQogCkBAIC04NDgsMjQgKzg2MywzMiBAQCBSZWdpc3RlcklEKiBF
dmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZwogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWRUaGlzRnJvbUFycm93RnVuY3Rp
b25MZXhpY2FsRW52aXJvbm1lbnQoKTsKIAogICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52
YXJpYWJsZShnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwpOwotICAgIGlmIChSZWdpc3Rl
cklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0VERaQ2hl
Y2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLCBudWxscHRyKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCksIGxvY2FsKTsKLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRv
ciwgbV9hcmdzKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB2YXIubG9jYWwoKTsK
KyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYzsKKyAgICBpZiAobG9jYWwpIHsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgbG9jYWwuZ2V0KCksIG51bGxw
dHIpOworICAgICAgICBmdW5jID0gZ2VuZXJhdG9yLm1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5h
dGlvbihkc3QpLCBsb2NhbC5nZXQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGZ1bmMgPSBnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdl
bmVyYXRvciwgbV9hcmdzKTsKKworICAgIGlmIChsb2NhbCkKICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgp
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7CisgICAgZWxz
ZSB7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RTdGFydCgpICsgNDsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhuZXdEaXZvdCwgZGl2b3RTdGFy
dCgpLCBuZXdEaXZvdCk7CisgICAgICAgIGdlbmVyYXRvci5tb3ZlKAorICAgICAgICAgICAgY2Fs
bEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UmVz
b2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhcikpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGZ1bmMuZ2V0KCksIG51bGxwdHIpOwogICAgIH0KIAot
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwot
ICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7Ci0gICAg
SlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyA0OwotICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOwot
ICAgIGdlbmVyYXRvci5tb3ZlKAotICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LAotICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLCB2YXIpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdl
dCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RGb3VuZCk7
Ci0gICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgZnVuYy5nZXQoKSwg
bnVsbHB0cik7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50
cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8p
OworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CisgICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJhc2Uo
KSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmMuZ2V0KCkpOworCisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMu
Z2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwg
RGVidWdnYWJsZUNhbGw6Ok5vKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCkBAIC04OTksOCArOTIyLDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlCiAgICAgICAg
IAogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KKwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBm
dW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgp
KTsKKyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1p
dE9wdGlvbmFsQ2hlY2soZnVuYy5nZXQoKSk7CisKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1
bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBSZWdpc3RlcklEKiBy
ZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwg
ZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOwpAQCAtOTIwLDMw
ICs5NDcsMzQgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgIEV4cGVjdGVkRnVuY3Rpb24g
ZXhwZWN0ZWRGdW5jdGlvbiA9IGdlbmVyYXRvci5leHBlY3RlZEZ1bmN0aW9uRm9ySWRlbnRpZmll
cihtX2lkZW50KTsKIAogICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX2lk
ZW50KTsKLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgewotICAgICAg
ICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBsb2NhbCwgbnVsbHB0cik7
Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm1vdmUoZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5n
ZXQoKSk7Ci0gICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1f
YXJncyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0gdmFyLmxvY2FsKCk7CisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmM7CisgICAgaWYgKGxvY2FsKSB7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLmdldCgpLCBudWxscHRyKTsK
KyAgICAgICAgZnVuYyA9IGdlbmVyYXRvci5tb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24o
ZHN0KSwgbG9jYWwuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBmdW5jID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOworICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0
b3IsIG1fYXJncyk7CisKKyAgICBpZiAobG9jYWwpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRM
b2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICAvLyBUaGlzIHBhc3NlcyBOb0V4cGVjdGVkRnVuY3Rpb24gYmVjYXVzZSB3ZSBleHBlY3QgdGhh
dCBpZiB0aGUgZnVuY3Rpb24gaXMgaW4gYQogICAgICAgICAvLyBsb2NhbCB2YXJpYWJsZSwgdGhl
biBpdCdzIG5vdCBvbmUgb2Ygb3VyIGJ1aWx0LWluIGNvbnN0cnVjdG9ycy4KLSAgICAgICAgUmVn
aXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFs
dWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywg
ZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6WWVzKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgZXhw
ZWN0ZWRGdW5jdGlvbiA9IE5vRXhwZWN0ZWRGdW5jdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90U3RhcnQoKSArIG1faWRlbnQubGVuZ3Ro
KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90
U3RhcnQoKSwgbmV3RGl2b3QpOworICAgICAgICBnZW5lcmF0b3IubW92ZSgKKyAgICAgICAgICAg
IGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50
aGlzUmVnaXN0ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxscHRyKTsKICAgICB9
CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwotICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3Vt
ZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJhc2UoKSkK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmMuZ2V0KCkpOwogCi0gICAg
SlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyBtX2lkZW50Lmxlbmd0aCgp
OwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQo
KSwgbmV3RGl2b3QpOwotICAgIGdlbmVyYXRvci5tb3ZlKAotICAgICAgICBjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpLAotICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxs
QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEdldEZy
b21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRo
cm93SWZOb3RGb3VuZCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZh
ciwgZnVuYy5nZXQoKSwgbnVsbHB0cik7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9y
LmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIGV4
cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBy
ZXR1cm4gcmV0OwpAQCAtMTI3NSw2ICsxMzA2LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRy
aW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19kZWZpbmVFbnVtZXJhYmxlV3JpdGFibGVDb25maWcK
IAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwor
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtX2Jh
c2UtPmlzU3VwZXJOb2RlKCk7CiAgICAgYm9vbCBzdWJzY3JpcHRJc05vbkluZGV4U3RyaW5nID0g
aXNOb25JbmRleFN0cmluZ0VsZW1lbnQoKm1fc3Vic2NyaXB0KTsKIApAQCAtMTI4Niw5ICsxMzE5
LDExIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwKICAgICAgICAgICAgIGJhc2UgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYmFzZSA9IGdl
bmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vic2NyaXB0SGFzQXNz
aWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CisKKyAgICAgICAgaWYg
KG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBmdW5jdGlvbjsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1JlZ2lzdGVyOwogICAg
IGlmIChiYXNlSXNTdXBlcikgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2Ugb25seSBuZWVkIHRv
IGRvIHRoaXMgb25jZSBiZWNhdXNlIHdlIGVpdGhlciBoYXZlIGEgbm9uLVREWiB0aGlzIG9yIHdl
IHRocm93LiBPbmNlIHdlIGhhdmUgYSBub24tVERaIHRoaXMsIHdlIGNhbid0IGNoYW5nZSBpdHMg
dmFsdWUgYmFjayB0byBURFouCkBAIC0xMjk3LDE5ICsxMzMyLDIwIEBAIFJlZ2lzdGVySUQqIEZ1
bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwKICAgICBpZiAoc3Vic2NyaXB0SXNOb25JbmRleFN0cmluZykgewogICAgICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHBy
ZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICAgICAgaWYgKGJhc2VJc1N1
cGVyKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCks
IHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkpOworICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNlLmdldCgpLCB0
aGlzUmVnaXN0ZXIuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCkt
PnZhbHVlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRv
ci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCks
IHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkpOworICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNlLmdldCgpLCBz
dGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKICAgICB9IGVs
c2UgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1p
dE5vZGVGb3JQcm9wZXJ0eShtX3N1YnNjcmlwdCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBz
dWJleHByZXNzaW9uRW5kKCkpOwogICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCi0gICAgICAgICAg
ICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRlbXBEZXN0aW5h
dGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIHByb3BlcnR5LmdldCgp
KTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZnVuY3Rpb24uZ2V0KCksIGJh
c2UuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7Cisg
ICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGZ1bmN0aW9uLmdldCgpLCBiYXNlLmdl
dCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgfQorICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNl
KCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5nZXQoKSwg
bV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpOwogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5n
ZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdz
KTsKICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVj
ayhnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCkpOwpAQCAtMTMzMSwxNCArMTM2NywyMSBAQCBSZWdp
c3RlcklEKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaQogICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtX2Jhc2UtPmlzU3Vw
ZXJOb2RlKCk7CiAgICAgaWYgKGJhc2VJc1N1cGVyKQogICAgICAgICBnZW5lcmF0b3IubW92ZShj
YWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBnZW5lcmF0b3IuZW5zdXJlVGhpcygpKTsKLSAg
ICBlbHNlCisgICAgZWxzZSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBtX2Jhc2UpOworICAgICAgICBpZiAobV9iYXNlLT5pc09wdGlv
bmFsQ2hhaW5CYXNlKCkpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2so
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSk7CisgICAgfQogICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgp
LCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIGlmIChiYXNlSXNTdXBlcikgewogICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gc3VwZXJCYXNlID0gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5l
cmF0b3IpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIHN1
cGVyQmFzZS5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwg
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CisKKyAgICBpZiAoaXNPcHRp
b25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soZnVu
Y3Rpb24uZ2V0KCksIG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKTsKKwogICAgIFJlZ2lz
dGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbEluVGFpbFBvc2l0aW9uKHJldHVyblZhbHVl
LmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRz
LCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMp
OwogICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgcmV0dXJuIHJldDsKQEAgLTEzNDgsMTcgKzEzOTEs
MjQgQEAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4RGlzdGFuY2VUb0lubmVybW9zdENhbGxP
ckFwcGx5ID0gMjsKIAogUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2Jhc2UpOworCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgp
KQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soYmFzZS5nZXQoKSk7CisKICAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJl
eHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZnVuY3Rpb247Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKIAorICAgIFJlZlB0cjxSZWdpc3RlcklEPiBm
dW5jdGlvbjsKICAgICBhdXRvIG1ha2VGdW5jdGlvbiA9IFsmXSB7CiAgICAgICAgIGlmIChtX2Jh
c2UtPmlzU3VwZXJOb2RlKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlz
VmFsdWUgPSBnZW5lcmF0b3IuZW5zdXJlVGhpcygpOwogICAgICAgICAgICAgZnVuY3Rpb24gPSBn
ZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNl
LmdldCgpLCB0aGlzVmFsdWUuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRp
bk5hbWVzKCkuY2FsbFB1YmxpY05hbWUoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
ZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpLCBiYXNlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1l
cygpLmNhbGxQdWJsaWNOYW1lKCkpOworCisgICAgICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNl
KCkpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soZnVuY3Rpb24uZ2V0
KCksIG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKTsKICAgICB9OwogCiAgICAgYm9vbCBl
bWl0Q2FsbENoZWNrID0gIWdlbmVyYXRvci5pc0J1aWx0aW5GdW5jdGlvbigpOwpAQCAtMTQzMCwx
NSArMTQ4MCwyMiBAQCBSZWdpc3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgIC8vIGZ1bmN0aW9uLmFw
cGx5KHRoaXNBcmcsIFthcmcwLCBhcmcxLCAuLi5dKSAtPiBjYW4gYmUgdHJpdmlhbGx5IGNvZXJj
ZWQgaW50byBmdW5jdGlvbi5jYWxsKHRoaXNBcmcsIGFyZzAsIGFyZzEsIC4uLikgYW5kIHNhdmVz
IG9iamVjdCBhbGxvY2F0aW9uCiAgICAgYm9vbCBtYXlCZUNhbGwgPSBhcmVUcml2aWFsQXBwbHlB
cmd1bWVudHMobV9hcmdzKTsKIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbjsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9iYXNlKTsKKworICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOworCisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uOwogICAgIGF1dG8gbWFrZUZ1bmN0aW9uID0gWyZd
IHsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkgewogICAgICAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHRoaXNWYWx1ZSA9IGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7CiAgICAg
ICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERl
c3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQoKSwgZ2VuZXJhdG9yLnBy
b3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5hcHBseVB1YmxpY05hbWUoKSk7CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2Vu
ZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVy
dHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFwcGx5UHVibGljTmFtZSgpKTsKKworICAgICAgICBp
ZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRp
b25hbENoZWNrKGZ1bmN0aW9uLmdldCgpLCBtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSk7
CiAgICAgfTsKIAogICAgIGJvb2wgZW1pdENhbGxDaGVjayA9ICFnZW5lcmF0b3IuaXNCdWlsdGlu
RnVuY3Rpb24oKTsKQEAgLTE2OTIsMjUgKzE3NDksMzMgQEAgUmVnaXN0ZXJJRCogRGVsZXRlUmVz
b2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3QKIAogUmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7Ci0g
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0
KTsKIAorICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKHIwLmdldCgpKTsKKworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwog
ICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpCiAgICAgICAgIHJldHVybiBlbWl0VGhyb3dS
ZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVydHki
KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeVZhbChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdERlbGV0ZUJ5VmFsKGZpbmFsRGVzdC5nZXQoKSwgcjAuZ2V0KCksIHIxLmdldCgpKTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0ZURvdE5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogRGVsZXRlRG90
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKIAorICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFp
bkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKHIwLmdldCgpKTsK
KwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKICAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKQogICAgICAgICBy
ZXR1cm4gZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAiQ2Fubm90IGRlbGV0ZSBh
IHN1cGVyIHByb3BlcnR5Iik7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJZChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMC5nZXQoKSwgbV9pZGVudCk7CisgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJZChmaW5hbERlc3QuZ2V0KCksIHIwLmdldCgp
LCBtX2lkZW50KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0
ZVZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjM0Niwx
MyArMjQxMSwyNiBAQCBSZWdpc3RlcklEKiBDb2FsZXNjZU5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKgogICAgIFJlZjxMYWJlbD4gdGFy
Z2V0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUodGVt
cC5nZXQoKSwgbV9leHByMSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShnZW5lcmF0
b3IuZW1pdFVuYXJ5T3A8T3BJc1VuZGVmaW5lZE9yTnVsbD4oZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCB0ZW1wLmdldCgpKSwgdGFyZ2V0LmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEp1bXBJ
ZkZhbHNlKGdlbmVyYXRvci5lbWl0SXNVbmRlZmluZWRPck51bGwoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCB0ZW1wLmdldCgpKSwgdGFyZ2V0LmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdE5v
ZGVJblRhaWxQb3NpdGlvbih0ZW1wLmdldCgpLCBtX2V4cHIyKTsKICAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKHRhcmdldC5nZXQoKSk7CiAKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZHN0LCB0
ZW1wLmdldCgpKTsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wdGlv
bmFsQ2hhaW5Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCog
T3B0aW9uYWxDaGFpbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZpbmFsRGVz
dCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisKKyAgICBnZW5lcmF0b3IuYmVn
aW5PcHRpb25hbENoYWluKCk7CisgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5UYWlsUG9zaXRpb24o
ZmluYWxEZXN0LmdldCgpLCBtX2V4cHIpOworICAgIGdlbmVyYXRvci5lbmRPcHRpb25hbENoYWlu
KGZpbmFsRGVzdC5nZXQoKSwgbV9pc0RlbGV0ZSk7CisKKyAgICByZXR1cm4gZmluYWxEZXN0Lmdl
dCgpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uZGl0aW9uYWxO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBDb25kaXRp
b25hbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IGFjNDE1OWI4YWY1ZDcwMjFkODg0Njc2
OTM3ODFhMGIwOTMzNjViYjAuLjU1MDA2ZDRmZmJiNGE5NmQwZjk1MWQ2MzZiNDM5NzVlMWJiYjU2
OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCkBAIC04NzUsOCArODc1LDcgQEAgZXF1YWxOdWxsQ29tcGFy
aXNvbk9wKG9wX25lcV9udWxsLCBPcE5lcU51bGwsCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lz
X3VuZGVmaW5lZF9vcl9udWxsLCBPcElzVW5kZWZpbmVkT3JOdWxsLCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgcmV0dXJuKQogICAgIGdldChtX29wZXJhbmQsIHQwKQotICAgIGFzc2VydE5v
dENvbnN0YW50KHNpemUsIHQwKQotICAgIGxvYWRpIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgdDEK
KyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlVGFnKHNpemUsIHQwLCB0MSkKICAgICBvcmkgMSwg
dDEKICAgICBjaWVxIHQxLCBOdWxsVGFnLCB0MQogICAgIHJldHVybihCb29sZWFuVGFnLCB0MSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20KaW5kZXggZTA5Zjg5ODVmZTUzMTdhOGRkOWJiNDcxZWE5MmJhZGJiOGQ1MWNhYy4u
MTUzNGVhOGIzOGU2OGUwNjFmYjk5MWRmNDYwZjU5YTU1N2NkZjRlOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAg
LTgyNyw4ICs4MjcsOCBAQCBlcXVhbE51bGxDb21wYXJpc29uT3Aob3BfbmVxX251bGwsIE9wTmVx
TnVsbCwKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9pc191bmRlZmluZWRfb3JfbnVsbCwgT3BJ
c1VuZGVmaW5lZE9yTnVsbCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAg
ICBnZXQobV9vcGVyYW5kLCB0MCkKLSAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQwCisgICAgZ2V0
KG1fb3BlcmFuZCwgdDEpCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDAp
CiAgICAgYW5kcSB+VGFnQml0VW5kZWZpbmVkLCB0MAogICAgIGNxZXEgdDAsIFZhbHVlTnVsbCwg
dDAKICAgICBvcnEgVmFsdWVGYWxzZSwgdDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9B
U1RCdWlsZGVyLmgKaW5kZXggZGU1YjEzMzkwNjYxMTM0MTJhY2FlZWYyYmQ3NWUwMzFhMzMzYTEw
MC4uMGYxMmJmMTI2OWFmODhiZWIwNGQ4N2MwNDViYmNjODQwMTYxMjcxYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAgLTEyOSw3ICsxMjksNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0IGludCAgRG9udEJ1aWxkU3RyaW5ncyA9IDA7CiAKICAgICBF
eHByZXNzaW9uTm9kZSogbWFrZUJpbmFyeU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50
IHRva2VuLCBzdGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+LCBzdGQ6OnBh
aXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+KTsKLSAgICBFeHByZXNzaW9uTm9kZSog
bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5v
ZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05vZGUqIGFyZ3Ms
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNhbGxPckFwcGx5
Q2hpbGREZXB0aCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHByZXZpb3Vz
QmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJvb2wgaXNPcHRp
b25hbENhbGwpOwogCiAgICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291cmNlRWxlbWVu
dHMoKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEpTQzo6U291cmNlRWxlbWVudHMoKTsg
fQogCkBAIC0zNjAsNiArMzYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5vZGU7CiAg
ICAgfQogCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9wdGlvbmFsQ2hhaW4oY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25O
b2RlKiBleHByKQorICAgIHsKKyAgICAgICAgYmFzZS0+c2V0SXNPcHRpb25hbENoYWluQmFzZSgp
OworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBPcHRpb25hbENoYWluTm9kZShs
b2NhdGlvbiwgZXhwcik7CisgICAgfQorCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUNvbmRp
dGlvbmFsRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogY29uZGl0aW9uLCBFeHByZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSogcmhzKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ29uZGl0aW9uYWxOb2Rl
KGxvY2F0aW9uLCBjb25kaXRpb24sIGxocywgcmhzKTsKQEAgLTExNDgsNiArMTE1NCwxNiBAQCBF
eHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcgogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFr
ZURlbGV0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogeworICAgIGlmIChleHByLT5p
c09wdGlvbmFsQ2hhaW4oKSkgeworICAgICAgICBPcHRpb25hbENoYWluTm9kZSogb3B0aW9uYWxD
aGFpbiA9IHN0YXRpY19jYXN0PE9wdGlvbmFsQ2hhaW5Ob2RlKj4oZXhwcik7CisgICAgICAgIGlm
IChvcHRpb25hbENoYWluLT5leHByKCktPmlzTG9jYXRpb24oKSkgeworICAgICAgICAgICAgQVNT
RVJUKCFvcHRpb25hbENoYWluLT5leHByKCktPmlzUmVzb2x2ZU5vZGUoKSk7CisgICAgICAgICAg
ICBvcHRpb25hbENoYWluLT5zZXRFeHByKG1ha2VEZWxldGVOb2RlKGxvY2F0aW9uLCBvcHRpb25h
bENoYWluLT5leHByKCksIHN0YXJ0LCBkaXZvdCwgZW5kKSk7CisgICAgICAgICAgICBvcHRpb25h
bENoYWluLT5zZXRJc0RlbGV0ZSgpOworICAgICAgICAgICAgcmV0dXJuIG9wdGlvbmFsQ2hhaW47
CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIWV4cHItPmlzTG9jYXRpb24oKSkKICAgICAg
ICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRGVsZXRlVmFsdWVOb2RlKGxvY2F0aW9uLCBl
eHByKTsKICAgICBpZiAoZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7CkBAIC0xMzQ1LDE3ICsxMzYx
LDI5IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0WE9yTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgQml0WE9yTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1l
bnRzKTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBmdW5j
LCBib29sIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVw
dGgpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wg
cHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNhbGxPckFwcGx5Q2hpbGREZXB0aCwgYm9v
bCBpc09wdGlvbmFsQ2FsbCkKIHsKICAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49IGRpdm90Lmxp
bmVTdGFydE9mZnNldCk7CiAgICAgaWYgKGZ1bmMtPmlzU3VwZXJOb2RlKCkpCiAgICAgICAgIHVz
ZXNTdXBlckNhbGwoKTsKIAogICAgIGlmIChmdW5jLT5pc0J5dGVjb2RlSW50cmluc2ljTm9kZSgp
KSB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaXNPcHRpb25hbENhbGwsICFpc09wdGlvbmFsQ2Fs
bCk7CiAgICAgICAgIEJ5dGVjb2RlSW50cmluc2ljTm9kZSogaW50cmluc2ljID0gc3RhdGljX2Nh
c3Q8Qnl0ZWNvZGVJbnRyaW5zaWNOb2RlKj4oZnVuYyk7CiAgICAgICAgIGlmIChpbnRyaW5zaWMt
PnR5cGUoKSA9PSBCeXRlY29kZUludHJpbnNpY05vZGU6OlR5cGU6OkNvbnN0YW50KQogICAgICAg
ICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKEJ5
dGVjb2RlSW50cmluc2ljTm9kZTo6VHlwZTo6RnVuY3Rpb24sIGxvY2F0aW9uLCBpbnRyaW5zaWMt
PmVtaXR0ZXIoKSwgaW50cmluc2ljLT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0
YXJ0LCBkaXZvdEVuZCk7CiAgICAgfQorCisgICAgLy8gRG9uJ3QgcGFyc2UgYSBkb3VibHktb3B0
aW9uYWwgYWNjZXNzLWFuZC1jYWxsIG5vZGUgKGUuZy4gYGE/LmI/LigpYCkgYXMgdHdvIG9wdGlv
bmFsIGNoYWlucywgb3Igd2UnbGwgbG9zZSBvdXIgYHRoaXNgIHZhbHVlLgorICAgIGlmIChmdW5j
LT5pc09wdGlvbmFsQ2hhaW4oKSkgeworICAgICAgICBPcHRpb25hbENoYWluTm9kZSogb3B0aW9u
YWxDaGFpbiA9IHN0YXRpY19jYXN0PE9wdGlvbmFsQ2hhaW5Ob2RlKj4oZnVuYyk7CisgICAgICAg
IGlmIChvcHRpb25hbENoYWluLT5leHByKCktPmlzTG9jYXRpb24oKSkgeworICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChpc09wdGlvbmFsQ2FsbCwgaXNPcHRpb25hbENhbGwpOworICAgICAgICAg
ICAgQVNTRVJUKCFvcHRpb25hbENoYWluLT5leHByKCktPmlzUmVzb2x2ZU5vZGUoKSk7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZUZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIG9wdGlvbmFsQ2hh
aW4tPmV4cHIoKSwgcHJldmlvdXNCYXNlV2FzU3VwZXIsIGFyZ3MsIGRpdm90U3RhcnQsIGRpdm90
LCBkaXZvdEVuZCwgY2FsbE9yQXBwbHlDaGlsZERlcHRoLCBpc09wdGlvbmFsQ2FsbCk7CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBpZiAoIWZ1bmMtPmlzTG9jYXRpb24oKSkKICAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGxvY2F0aW9uLCBm
dW5jLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgIGlmIChmdW5jLT5p
c1Jlc29sdmVOb2RlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTGV4ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKaW5k
ZXggZTk4Y2RiNWU1OWUyMzA3MmMxOTAxOGY4N2QxMGMyZDQ1MmQ5Y2QzOS4uZjFiZDYzNmQ2ZjQ2
NDc3MTJkYjA0NGRmODEyZmZmZDZkYTE3NDJiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9MZXhlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9MZXhlci5jcHAKQEAgLTIxNTcsMTAgKzIxNTcsMTcgQEAgc3RhcnQ6CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ2hhcmFjdGVyUXVlc3Rpb246CiAgICAgICAgIHNoaWZ0KCk7Ci0gICAgICAg
IGlmIChPcHRpb25zOjp1c2VOdWxsaXNoQ29hbGVzY2luZygpICYmIG1fY3VycmVudCA9PSAnPycp
IHsKLSAgICAgICAgICAgIHNoaWZ0KCk7Ci0gICAgICAgICAgICB0b2tlbiA9IENPQUxFU0NFOwot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VOdWxsaXNoQXdhcmVP
cGVyYXRvcnMoKSkgeworICAgICAgICAgICAgaWYgKG1fY3VycmVudCA9PSAnPycpIHsKKyAgICAg
ICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIHRva2VuID0gQ09BTEVTQ0U7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9j
dXJyZW50ID09ICcuJyAmJiAhaXNBU0NJSURpZ2l0KHBlZWsoMSkpKSB7CisgICAgICAgICAgICAg
ICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFFVRVNUSU9ORE9UOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHRva2Vu
ID0gUVVFU1RJT047CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAppbmRleCBkNDFlM2FlZDhlNDVmN2E4ZTJmZDMxYzI0
NDc3ZGVjY2I4ZDU2NDBmLi4wNjhiMjZjODI4YTM2ZWI2ZWVlNWFkMjRkNTQwNTExOTMxODhmYmI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3Rv
cnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aApAQCAtNjc2LDYgKzY3NiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCisg
ICAgaW5saW5lIE9wdGlvbmFsQ2hhaW5Ob2RlOjpPcHRpb25hbENoYWluTm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcikKKyAgICAgICAgOiBF
eHByZXNzaW9uTm9kZShsb2NhdGlvbikKKyAgICAgICAgLCBtX2V4cHIoZXhwcikKKyAgICB7Cisg
ICAgfQorCiAgICAgaW5saW5lIENvbmRpdGlvbmFsTm9kZTo6Q29uZGl0aW9uYWxOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsb2dpY2FsLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMikKICAgICAgICAgOiBFeHBy
ZXNzaW9uTm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX2xvZ2ljYWwobG9naWNhbCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCA4NmZkYWYzZDA0ZmQwZDhmN2Y0ODdkMTc3
Mzc3ZTJhMzdlOTVhNzg3Li45MDkzNDA0OWMxNjhjODk5ODI1ZWRlZmY5YTAzYTk5ZGYwMDJhZDkw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC0yMDUsNiArMjA1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0J5dGVjb2RlSW50cmluc2lj
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0Jp
bmFyeU9wTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc0Z1bmN0aW9uQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1
YWwgYm9vbCBpc09wdGlvbmFsQ2hhaW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBMYWJlbCYsIExhYmVsJiwgRmFsbFRocm91Z2hNb2RlKTsKIApAQCAtMjEyLDgg
KzIxMywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBSZXN1bHRUeXBlIHJlc3VsdERl
c2NyaXB0b3IoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdFR5cGU7IH0KIAorICAgICAgICBib29s
IGlzT3B0aW9uYWxDaGFpbkJhc2UoKSBjb25zdCB7IHJldHVybiBtX2lzT3B0aW9uYWxDaGFpbkJh
c2U7IH0KKyAgICAgICAgdm9pZCBzZXRJc09wdGlvbmFsQ2hhaW5CYXNlKCkgeyBtX2lzT3B0aW9u
YWxDaGFpbkJhc2UgPSB0cnVlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBSZXN1bHRUeXBl
IG1fcmVzdWx0VHlwZTsKKyAgICAgICAgYm9vbCBtX2lzT3B0aW9uYWxDaGFpbkJhc2UgeyBmYWxz
ZSB9OwogICAgIH07CiAKICAgICBjbGFzcyBTdGF0ZW1lbnROb2RlIDogcHVibGljIE5vZGUgewpA
QCAtMTMxMCwxMiArMTMxNSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29hbGVzY2VO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIyKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gbnVsbHB0cikgZmluYWw7CiAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1f
ZXhwcjE7CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHIyOwogICAgIH07CiAKKyAgICBj
bGFzcyBPcHRpb25hbENoYWluTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBPcHRpb25hbENoYWluTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uTm9kZSopOworCisgICAgICAgIHZvaWQgc2V0RXhwcihFeHByZXNzaW9u
Tm9kZSogZXhwcikgeyBtX2V4cHIgPSBleHByOyB9CisgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBl
eHByKCkgY29uc3QgeyByZXR1cm4gbV9leHByOyB9CisKKyAgICAgICAgdm9pZCBzZXRJc0RlbGV0
ZSgpIHsgbV9pc0RlbGV0ZSA9IHRydWU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gbnVs
bHB0cikgZmluYWw7CisKKyAgICAgICAgYm9vbCBpc09wdGlvbmFsQ2hhaW4oKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjsKKyAg
ICAgICAgYm9vbCBtX2lzRGVsZXRlIHsgZmFsc2UgfTsKKyAgICB9OworCiAgICAgLy8gVGhlIHRl
cm5hcnkgb3BlcmF0b3IsICJtX2xvZ2ljYWwgPyBtX2V4cHIxIDogbV9leHByMiIKICAgICBjbGFz
cyBDb25kaXRpb25hbE5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1
YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBmOGRiZTcx
OTZmMTExNzE2ZDBhNThmN2Y1N2UzZjhmNjdiN2EyYWNmLi5iZmYyMmNmZjgxZWZmMGQ5YmY4MTM2
NmI5OTgxNjJmYzI0NGJhMDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
Y3BwCkBAIC00ODA4LDEwMyArNDgwOCwxMzYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXMKICAg
ICB9CiAKICAgICBmYWlsSWZGYWxzZShiYXNlLCAiQ2Fubm90IHBhcnNlIGJhc2UgZXhwcmVzc2lv
biIpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlv
bigpOwotICAgICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7Ci0gICAgICAgIGNhc2UgT1BF
TkJSQUNLRVQ6IHsKLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Np
b25Db3VudCsrOwotICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxh
c3RUb2tlbkVuZFBvc2l0aW9uKCk7CisKKyAgICBkbyB7CisgICAgICAgIFRyZWVFeHByZXNzaW9u
IG9wdGlvbmFsQ2hhaW5CYXNlID0gMDsKKyAgICAgICAgSlNUb2tlbkxvY2F0aW9uIG9wdGlvbmFs
Q2hhaW5Mb2NhdGlvbjsKKyAgICAgICAgSlNUb2tlblR5cGUgdHlwZSA9IG1fdG9rZW4ubV90eXBl
OworCisgICAgICAgIGlmIChtYXRjaChRVUVTVElPTkRPVCkpIHsKKyAgICAgICAgICAgIHNlbWFu
dGljRmFpbElmVHJ1ZShuZXdDb3VudCwgIkNhbm5vdCBjYWxsIGNvbnN0cnVjdG9yIGluIGFuIG9w
dGlvbmFsIGNoYWluIik7CisgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3Vw
ZXIsICJDYW5ub3QgdXNlIHN1cGVyIGFzIHRoZSBiYXNlIG9mIGFuIG9wdGlvbmFsIGNoYWluIik7
CisgICAgICAgICAgICBvcHRpb25hbENoYWluQmFzZSA9IGJhc2U7CisgICAgICAgICAgICBvcHRp
b25hbENoYWluTG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKCk7CisKKyAgICAgICAgICAgIFNhdmVQ
b2ludCBzYXZlUG9pbnQgPSBjcmVhdGVTYXZlUG9pbnQoKTsKICAgICAgICAgICAgIG5leHQoKTsK
LSAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7
Ci0gICAgICAgICAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9wYXJzZXJTdGF0ZS5hc3Np
Z25tZW50Q291bnQ7Ci0gICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNl
RXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAi
Q2Fubm90IHBhcnNlIHN1YnNjcmlwdCBleHByZXNzaW9uIik7Ci0gICAgICAgICAgICBiYXNlID0g
Y29udGV4dC5jcmVhdGVCcmFja2V0QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHByb3BlcnR5
LCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQsIGV4
cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1cGVyICYmIGN1cnJlbnRT
Y29wZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkpCi0gICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0
aW9uU2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNL
RVQsICJdIiwgImVuZCIsICJzdWJzY3JpcHQgZXhwcmVzc2lvbiIpOwotICAgICAgICAgICAgbV9w
YXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OwotICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAobWF0Y2goT1BFTkJSQUNLRVQpIHx8IG1hdGNoKE9QRU5QQVJFTikg
fHwgbWF0Y2goQkFDS1FVT1RFKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gbV90b2tlbi5tX3R5
cGU7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0eXBlID0gRE9UOworICAg
ICAgICAgICAgICAgIHJlc3RvcmVTYXZlUG9pbnQoc2F2ZVBvaW50KTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBjYXNlIE9QRU5QQVJFTjogewotICAgICAgICAgICAgbV9wYXJz
ZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBpbnQgbm9u
TEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OwotICAgICAgICAgICAgaWYgKG5l
d0NvdW50KSB7Ci0gICAgICAgICAgICAgICAgbmV3Q291bnQtLTsKLSAgICAgICAgICAgICAgICBK
U1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAg
ICAgICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNv
bnRleHQpOwotICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBw
YXJzZSBjYWxsIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNy
ZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBl
eHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHVzZWRWYXJpYWJsZXNTaXplID0gY3VycmVudFNj
b3BlKCktPmN1cnJlbnRVc2VkVmFyaWFibGVzU2l6ZSgpOworCisgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKKyAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBPUEVOQlJBQ0tFVDogeworICAgICAg
ICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwogICAg
ICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQ
b3NpdGlvbigpOwotICAgICAgICAgICAgICAgIE9wdGlvbmFsPENhbGxPckFwcGx5RGVwdGhTY29w
ZT4gY2FsbE9yQXBwbHlEZXB0aFNjb3BlOwotICAgICAgICAgICAgICAgIHJlY29yZENhbGxPckFw
cGx5RGVwdGg8VHJlZUJ1aWxkZXI+KHRoaXMsICptX3ZtLCBjYWxsT3JBcHBseURlcHRoU2NvcGUs
IGJhc2UpOworICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICBpbnQgbm9u
TEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIGlu
dCBpbml0aWFsQXNzaWdubWVudHMgPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudDsKKyAg
ICAgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBw
YXJzZSBzdWJzY3JpcHQgZXhwcmVzc2lvbiIpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250
ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3Moc3RhcnRMb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGlu
aXRpYWxBc3NpZ25tZW50cyAhPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudCwgZXhwcmVz
c2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwogCi0gICAgICAg
ICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIgJiYgY3VycmVudFNj
b3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1
bmN0aW9uU2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsK
IAotICAgICAgICAgICAgICAgIGlmIChiYXNlSXNBc3luY0tleXdvcmQgJiYgKCFhcmd1bWVudHMg
fHwgbWF0Y2goQVJST1dGVU5DVElPTikpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRT
Y29wZSgpLT5yZXZlcnRUb1ByZXZpb3VzVXNlZFZhcmlhYmxlcyh1c2VkVmFyaWFibGVzU2l6ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGZvcmNlQ2xhc3NpZnlFeHByZXNzaW9uRXJyb3IoRXJyb3JJ
bmRpY2F0ZXNBc3luY0Fycm93RnVuY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBmYWlsRHVl
VG9VbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIsICJzdWJzY3Jp
cHQgZXhwcmVzc2lvbiIpOworICAgICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291
bnQgPSBub25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgT1BFTlBBUkVOOiB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJT
dGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CisgICAgICAgICAgICAgICAgaW50IG5v
bkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBp
ZiAobmV3Q291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q291bnQtLTsKKyAgICAgICAg
ICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBv
c2l0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0g
cGFyc2VBcmd1bWVudHMoY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNl
KGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50cyIpOworICAgICAgICAgICAg
ICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBhcmd1
bWVudHMsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRp
b24oKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IHVzZWRWYXJpYWJsZXNTaXplID0gY3VycmVudFNjb3BlKCktPmN1cnJlbnRVc2VkVmFyaWFi
bGVzU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9u
RW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgT3B0aW9u
YWw8Q2FsbE9yQXBwbHlEZXB0aFNjb3BlPiBjYWxsT3JBcHBseURlcHRoU2NvcGU7CisgICAgICAg
ICAgICAgICAgICAgIHJlY29yZENhbGxPckFwcGx5RGVwdGg8VHJlZUJ1aWxkZXI+KHRoaXMsICpt
X3ZtLCBjYWxsT3JBcHBseURlcHRoU2NvcGUsIGJhc2UpOworCisgICAgICAgICAgICAgICAgICAg
IFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCk7CiAKLSAg
ICAgICAgICAgICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMsICJDYW5ub3QgcGFyc2UgY2FsbCBh
cmd1bWVudHMiKTsKLSAgICAgICAgICAgICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgU2NvcGVSZWYgZnVuY3Rpb25TY29wZSA9IGN1cnJlbnRGdW5jdGlvblNjb3Bl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZnVuY3Rpb25TY29wZS0+c2V0SGFzRGlyZWN0
U3VwZXIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQgdW5uZWNlc3NhcnkgdG8g
Y2hlY2sgb2YgdXNpbmcgc3VwZXIgZHVyaW5nIHJlcGFyc2luZyBvbmUgbW9yZSB0aW1lLiBBbHNv
IGl0IGNhbiBsZWFkIHRvIHN5bnRheCBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aW4gY2FzZSBvZiBhcnJvdyBmdW5jdGlvbiBiZWNhdXNlIGR1cmluZyByZXBhcnNpbmcgd2UgZG9u
J3Qga25vdyB3aGV0aGVyIHdlIGN1cnJlbnRseSBwYXJzZSB0aGUgYXJyb3cgZnVuY3Rpb24KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGluc2lkZSBvZiB0aGUgY29uc3RydWN0b3Igb3IgbWV0
aG9kLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2xleGVyLT5pc1JlcGFyc2luZ0Z1
bmN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY29wZVJlZiBjbG9zZXN0
T3JkaW5hcnlGdW5jdGlvblNjb3BlID0gY2xvc2VzdFBhcmVudE9yZGluYXJ5RnVuY3Rpb25Ob25M
ZXhpY2FsU2NvcGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdHJ1Y3Rvcktp
bmQgZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPSAhZnVuY3Rpb25TY29wZS0+aXNBcnJvd0Z1bmN0
aW9uKCkgJiYgIWNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmlzRXZhbENvbnRleHQoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uU2NvcGUtPmNvbnN0cnVj
dG9yS2luZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2xvc2VzdE9yZGlu
YXJ5RnVuY3Rpb25TY29wZS0+Y29uc3RydWN0b3JLaW5kKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kID09IENv
bnN0cnVjdG9yS2luZDo6Tm9uZSwgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQi
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rp
b25Db25zdHJ1Y3RvcktpbmQgIT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzLCAic3VwZXIgaXMg
bm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmFz
ZUlzQXN5bmNLZXl3b3JkICYmICghYXJndW1lbnRzIHx8IG1hdGNoKEFSUk9XRlVOQ1RJT04pKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnJldmVydFRvUHJldmlv
dXNVc2VkVmFyaWFibGVzKHVzZWRWYXJpYWJsZXNTaXplKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcmNlQ2xhc3NpZnlFeHByZXNzaW9uRXJyb3IoRXJyb3JJbmRpY2F0ZXNBc3luY0Fycm93
RnVuY3Rpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRv
a2VuKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBmYWls
SWZGYWxzZShhcmd1bWVudHMsICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1bWVudHMiKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGJhc2VJc1N1cGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBTY29wZVJlZiBmdW5jdGlvblNjb3BlID0gY3VycmVudEZ1bmN0aW9uU2NvcGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghZnVuY3Rpb25TY29wZS0+c2V0SGFzRGlyZWN0U3VwZXIo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0IHVubmVjZXNzYXJ5IHRvIGNo
ZWNrIG9mIHVzaW5nIHN1cGVyIGR1cmluZyByZXBhcnNpbmcgb25lIG1vcmUgdGltZS4gQWxzbyBp
dCBjYW4gbGVhZCB0byBzeW50YXggZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbiBjYXNlIG9mIGFycm93IGZ1bmN0aW9uIGJlY2F1c2UgZHVyaW5nIHJlcGFyc2luZyB3ZSBk
b24ndCBrbm93IHdoZXRoZXIgd2UgY3VycmVudGx5IHBhcnNlIHRoZSBhcnJvdyBmdW5jdGlvbgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc2lkZSBvZiB0aGUgY29uc3RydWN0b3Ig
b3IgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9sZXhlci0+aXNS
ZXBhcnNpbmdGdW5jdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNj
b3BlUmVmIGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUgPSBjbG9zZXN0UGFyZW50T3JkaW5h
cnlGdW5jdGlvbk5vbkxleGljYWxTY29wZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb25zdHJ1Y3RvcktpbmQgZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPSAhZnVuY3Rpb25T
Y29wZS0+aXNBcnJvd0Z1bmN0aW9uKCkgJiYgIWNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUt
PmlzRXZhbENvbnRleHQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBm
dW5jdGlvblNjb3BlLT5jb25zdHJ1Y3RvcktpbmQoKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBjbG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlLT5jb25zdHJ1Y3Rvcktp
bmQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVl
KGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kID09IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgInN1cGVy
IGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kICE9IENv
bnN0cnVjdG9yS2luZDo6RXh0ZW5kcywgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRl
eHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3BlKCktPmlzQXJy
b3dGdW5jdGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uU2NvcGUt
PnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNTdXBlckNhbGwoKTsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5j
dGlvbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+c2V0SW5uZXJB
cnJvd0Z1bmN0aW9uVXNlc1N1cGVyQ2FsbCgpOworCisgICAgICAgICAgICAgICAgICAgIGJvb2wg
aXNPcHRpb25hbENhbGwgPSBvcHRpb25hbENoYWluTG9jYXRpb24uZW5kT2Zmc2V0ID09IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihleHByZXNzaW9uRW5kLm9mZnNldCk7CisgICAgICAgICAgICAgICAg
ICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKHN0YXJ0TG9jYXRpb24sIGJh
c2UsIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9u
KCksIGNhbGxPckFwcGx5RGVwdGhTY29wZSA/IGNhbGxPckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFu
Y2VUb0lubmVybW9zdENoaWxkKCkgOiAwLCBpc09wdGlvbmFsQ2FsbCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzT3B0aW9uYWxDYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9uYWxDaGFpbkJhc2UgPSBiYXNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBiYXNlID0gY29udGV4dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShzdGFydExvY2F0aW9uLCBiYXNl
LCBwcmV2aW91c0Jhc2VXYXNTdXBlciwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQsCi0gICAg
ICAgICAgICAgICAgICAgIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGNh
bGxPckFwcGx5RGVwdGhTY29wZSA/IGNhbGxPckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFuY2VUb0lu
bmVybW9zdENoaWxkKCkgOiAwKTsKKyAgICAgICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxI
U0NvdW50ID0gbm9uTEhTQ291bnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIERPVDogewotICAg
ICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAg
ICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRp
b24oKTsKLSAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVS
ZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKLSAgICAgICAg
ICAgIG1hdGNoT3JGYWlsKElERU5ULCAiRXhwZWN0ZWQgYSBwcm9wZXJ0eSBuYW1lIGFmdGVyICcu
JyIpOwotICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKHN0YXJ0TG9j
YXRpb24sIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJl
c3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFko
YmFzZUlzU3VwZXIgJiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKLSAgICAg
ICAgICAgICAgICBjdXJyZW50RnVuY3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25V
c2VzU3VwZXJQcm9wZXJ0eSgpOwotICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBCQUNLUVVPVEU6IHsKLSAgICAgICAgICAgIHNl
bWFudGljRmFpbElmVHJ1ZShiYXNlSXNTdXBlciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGFnIGZv
ciB0YWdnZWQgdGVtcGxhdGVzIik7Ci0gICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNz
aW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgIGludCBub25MSFND
b3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICB0eXBlbmFtZSBU
cmVlQnVpbGRlcjo6VGVtcGxhdGVMaXRlcmFsIHRlbXBsYXRlTGl0ZXJhbCA9IHBhcnNlVGVtcGxh
dGVMaXRlcmFsKGNvbnRleHQsIExleGVyVHlwZTo6UmF3U3RyaW5nc0J1aWxkTW9kZTo6QnVpbGRS
YXdTdHJpbmdzKTsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKHRlbXBsYXRlTGl0ZXJhbCwgIkNh
bm5vdCBwYXJzZSB0ZW1wbGF0ZSBsaXRlcmFsIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4
dC5jcmVhdGVUYWdnZWRUZW1wbGF0ZShzdGFydExvY2F0aW9uLCBiYXNlLCB0ZW1wbGF0ZUxpdGVy
YWwsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24o
KSk7Ci0gICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7
Ci0gICAgICAgICAgICBtX3NlZW5UYWdnZWRUZW1wbGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ290byBlbmRN
ZW1iZXJFeHByZXNzaW9uOworICAgICAgICAgICAgY2FzZSBET1Q6IHsKKyAgICAgICAgICAgICAg
ICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgICAg
ICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24o
KTsKKyAgICAgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3Jl
UmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CisgICAgICAg
ICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQsICJFeHBlY3RlZCBhIHByb3BlcnR5IG5hbWUgYWZ0
ZXIgIiwgb3B0aW9uYWxDaGFpbkJhc2UgPyAiJz8uJyIgOiAiJy4nIik7CisgICAgICAgICAgICAg
ICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIG1f
dG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2Vu
RW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1cGVy
ICYmIGN1cnJlbnRTY29wZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkpCisgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRGdW5jdGlvblNjb3BlKCktPnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNTdXBl
clByb3BlcnR5KCk7CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBCQUNLUVVPVEU6IHsKKyAgICAg
ICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUob3B0aW9uYWxDaGFpbkJhc2UsICJDYW5ub3Qg
dXNlIHRhZ2dlZCB0ZW1wbGF0ZXMgaW4gYW4gb3B0aW9uYWwgY2hhaW4iKTsKKyAgICAgICAgICAg
ICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3VwZXIsICJDYW5ub3QgdXNlIHN1cGVyIGFz
IHRhZyBmb3IgdGFnZ2VkIHRlbXBsYXRlcyIpOworICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0
aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOworICAgICAgICAgICAg
ICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CisgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OlRlbXBsYXRlTGl0ZXJhbCB0ZW1wbGF0ZUxp
dGVyYWwgPSBwYXJzZVRlbXBsYXRlTGl0ZXJhbChjb250ZXh0LCBMZXhlclR5cGU6OlJhd1N0cmlu
Z3NCdWlsZE1vZGU6OkJ1aWxkUmF3U3RyaW5ncyk7CisgICAgICAgICAgICAgICAgZmFpbElmRmFs
c2UodGVtcGxhdGVMaXRlcmFsLCAiQ2Fubm90IHBhcnNlIHRlbXBsYXRlIGxpdGVyYWwiKTsKKyAg
ICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVUYWdnZWRUZW1wbGF0ZShzdGFydExv
Y2F0aW9uLCBiYXNlLCB0ZW1wbGF0ZUxpdGVyYWwsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lv
bkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJT
dGF0ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIG1fc2VlblRh
Z2dlZFRlbXBsYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZ290byBlbmRPZkNoYWlu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJldmlvdXNCYXNlV2FzU3VwZXIgPSBiYXNl
SXNTdXBlcjsKKyAgICAgICAgICAgIGJhc2VJc1N1cGVyID0gZmFsc2U7CisgICAgICAgICAgICB0
eXBlID0gbV90b2tlbi5tX3R5cGU7CiAgICAgICAgIH0KLSAgICAgICAgcHJldmlvdXNCYXNlV2Fz
U3VwZXIgPSBiYXNlSXNTdXBlcjsKLSAgICAgICAgYmFzZUlzU3VwZXIgPSBmYWxzZTsKLSAgICB9
Ci1lbmRNZW1iZXJFeHByZXNzaW9uOgorZW5kT2ZDaGFpbjoKKyAgICAgICAgaWYgKG9wdGlvbmFs
Q2hhaW5CYXNlKQorICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlT3B0aW9uYWxDaGFp
bihvcHRpb25hbENoYWluTG9jYXRpb24sIG9wdGlvbmFsQ2hhaW5CYXNlLCBiYXNlKTsKKyAgICB9
IHdoaWxlIChtYXRjaChRVUVTVElPTkRPVCkpOworCiAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGJh
c2VJc1N1cGVyLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOwogICAgIHdo
aWxlIChuZXdDb3VudC0tKQogICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxv
Y2F0aW9uLCBiYXNlLCBleHByZXNzaW9uU3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKaW5kZXggMTVjYTVl
YWYyOGU3NTkyZjQzZjNkY2U0MWU4ZTQxZTYxYTllODEzNi4uNzIwNjRiOTI4NDgxNjZmNmRlMmIy
M2Y4YTNmNThjOTgxYjc2NzllOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJUb2tlbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlclRva2Vucy5oCkBAIC0xMzYsNiArMTM2LDcgQEAgZW51bSBKU1Rva2VuVHlwZSB7CiAgICAg
T1JFUVVBTCwKICAgICBET1RET1RET1QsCiAgICAgQVJST1dGVU5DVElPTiwKKyAgICBRVUVTVElP
TkRPVCwKICAgICBMYXN0VW50YWdnZWRUb2tlbiwKIAogICAgIC8vIEJlZ2luIHRhZ2dlZCB0b2tl
bnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKaW5kZXgg
NDE5OTU4YmVkYjQyODExYjE2Mjg0MDFjZDRhNDI5OGE1YTVjZjM3Ni4uNjFkZDc1MDA0YmM0N2Jm
YTU0ZjM1ZWQ3MWRlMjJmZGU0N2NiMmQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9TeW50YXhDaGVja2VyLmgKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgICAgICBS
ZXNvbHZlRXZhbEV4cHIsIFJlc29sdmVFeHByLCBJbnRlZ2VyRXhwciwgRG91YmxlRXhwciwgU3Ry
aW5nRXhwciwgQmlnSW50RXhwciwKICAgICAgICAgVGhpc0V4cHIsIE51bGxFeHByLCBCb29sRXhw
ciwgUmVnRXhwRXhwciwgT2JqZWN0TGl0ZXJhbEV4cHIsCiAgICAgICAgIEZ1bmN0aW9uRXhwciwg
Q2xhc3NFeHByLCBTdXBlckV4cHIsIEltcG9ydEV4cHIsIEJyYWNrZXRFeHByLCBEb3RFeHByLCBD
YWxsRXhwciwKLSAgICAgICAgTmV3RXhwciwgUHJlRXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwg
QmluYXJ5RXhwciwKKyAgICAgICAgTmV3RXhwciwgUHJlRXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhw
ciwgQmluYXJ5RXhwciwgT3B0aW9uYWxDaGFpbiwKICAgICAgICAgQ29uZGl0aW9uYWxFeHByLCBB
c3NpZ25tZW50RXhwciwgVHlwZW9mRXhwciwKICAgICAgICAgRGVsZXRlRXhwciwgQXJyYXlMaXRl
cmFsRXhwciwgQmluZGluZ0Rlc3RydWN0dXJpbmcsIFJlc3RQYXJhbWV0ZXIsCiAgICAgICAgIEFy
cmF5RGVzdHJ1Y3R1cmluZywgT2JqZWN0RGVzdHJ1Y3R1cmluZywgU291cmNlRWxlbWVudHNSZXN1
bHQsCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBEb250QnVpbGRTdHJpbmdzID0gTGV4ZXJGbGFnc0RvbnRCdWlsZFN0cmluZ3M7CiAKICAgICBp
bnQgY3JlYXRlU291cmNlRWxlbWVudHMoKSB7IHJldHVybiBTb3VyY2VFbGVtZW50c1Jlc3VsdDsg
fQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIGludCwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50LCBzaXplX3QpIHsgcmV0dXJu
IENhbGxFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGludCwgaW50LCBpbnQs
IGludCwgc2l6ZV90LCBib29sKSB7IHJldHVybiBDYWxsRXhwcjsgfQogICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZUNvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlw
ZSBleHByKSB7IHJldHVybiBleHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgYXBwZW5kVG9Db21t
YUV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUmIGhlYWQsIEV4cHJl
c3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSBuZXh0KSB7IGhlYWQgPSBuZXh0OyByZXR1cm4gbmV4
dDsgfQogICAgIEV4cHJlc3Npb25UeXBlIG1ha2VBc3NpZ25Ob2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGJv
b2wsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CkBAIC0xODQsNiAr
MTg0LDcgQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlZ0V4cChjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlm
aWVyJiBmbGFncywgaW50KSB7IHJldHVybiBZYXJyOjpoYXNFcnJvcihZYXJyOjpjaGVja1N5bnRh
eChwYXR0ZXJuLnN0cmluZygpLCBmbGFncy5zdHJpbmcoKSkpID8gMCA6IFJlZ0V4cEV4cHI7IH0K
ICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0K
ICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQorICAgIEV4cHJl
c3Npb25UeXBlIGNyZWF0ZU9wdGlvbmFsQ2hhaW4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBPcHRpb25hbENoYWluOyB9CiAg
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29uZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUpIHsg
cmV0dXJuIENvbmRpdGlvbmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFzc2ln
blJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJl
c3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBBc3NpZ25tZW50Q29udGV4dCkgeyByZXR1cm4gQXNz
aWdubWVudEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVFbXB0eVZhckV4cHJlc3Np
b24oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYpIHsgcmV0dXJuIEFz
c2lnbm1lbnRFeHByOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuY3BwCmluZGV4IDE1NmMxODBlMTgzNDdmNDdjOTM5MDQ1OWU1ZDIxNzUx
MWI5ODMxZmYuLjllNzU4OTJlNTA3NjU3MTUyYmNiMzczYjZmMGI1ODgyNmMxNTRjMjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3Bw
CkBAIC0xNzYsNiArMTc2LDEwIEBAIHN0YXRpYyBTdHJpbmcgZnVuY3Rpb25DYWxsQmFzZShjb25z
dCBTdHJpbmcmIHNvdXJjZVRleHQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAK
KyAgICAvLyBEb24ndCBkaXNwbGF5IHRoZSA/LiBvZiBhbiBvcHRpb25hbCBjYWxsLgorICAgIGlm
IChpZHggPiAxICYmIHNvdXJjZVRleHRbaWR4XSA9PSAnLicgJiYgc291cmNlVGV4dFtpZHggLSAx
XSA9PSAnPycpCisgICAgICAgIGlkeCAtPSAyOworCiAgICAgcmV0dXJuIHNvdXJjZVRleHQubGVm
dChpZHggKyAxKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmlu
ZGV4IDBkNTgyZWVhYzMzZWNhMGU0YWQ4ZTQ4OTY1OWI0MzAxOWQ0NGU3YWMuLjdiYjEzZTRlZTk4
MGM1OGY3MGQ4MTE0OGI4MTg2OTA2Mzc5NGVlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgKQEAgLTQ5Niw3ICs0OTYsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVX
ZWJBc3NlbWJseVN0cmVhbWluZ0FwaSA9IGZhbHNlOwogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1i
bHlSZWZlcmVuY2VzLCBmYWxzZSwgTm9ybWFsLCAiQWxsb3cgdHlwZXMgZnJvbSB0aGUgd2FzbSBy
ZWZlcmVuY2VzIHNwZWMuIikgXAogICAgIHYoYm9vbCwgdXNlV2Vha1JlZnMsIGZhbHNlLCBOb3Jt
YWwsICJFeHBvc2UgdGhlIFdlYWtSZWYgY29uc3RydWN0b3IuIikgXAogICAgIHYoYm9vbCwgdXNl
QmlnSW50LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBlbmFibGUgQmlnSW50IHN1
cHBvcnQuIikgXAotICAgIHYoYm9vbCwgdXNlTnVsbGlzaENvYWxlc2NpbmcsIGZhbHNlLCBOb3Jt
YWwsICJFbmFibGUgc3VwcG9ydCBmb3IgdGhlID8/IG9wZXJhdG9yLiIpIFwKKyAgICB2KGJvb2ws
IHVzZU51bGxpc2hBd2FyZU9wZXJhdG9ycywgZmFsc2UsIE5vcm1hbCwgIkVuYWJsZSBzdXBwb3J0
IGZvciA/LiBhbmQgPz8gb3BlcmF0b3JzLiIpIFwKICAgICB2KGJvb2wsIHVzZUFycmF5QWxsb2Nh
dGlvblByb2ZpbGluZywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ugb3VyIG5v
cm1hbCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGluZy4gSWYgZmFsc2UsIHRoZSBhbGxvY2F0aW9u
IHByb2ZpbGUgd2lsbCBhbHdheXMgY2xhaW0gdG8gYmUgdW5kZWNpZGVkLiIpIFwKICAgICB2KGJv
b2wsIGZvcmNlUG9seVByb3RvLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgY3JlYXRlX3RoaXMg
d2lsbCBhbHdheXMgY3JlYXRlIGFuIG9iamVjdCB3aXRoIGEgcG9seSBwcm90byBzdHJ1Y3R1cmUu
IikgXAogICAgIHYoYm9vbCwgZm9yY2VNaW5pVk1Nb2RlLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1
ZSwgaXQgd2lsbCBmb3JjZSBtaW5pIFZNIG1vZGUgb24uIikgXApkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDAwZGIzMzdkYjEzNjI2MzBlYThiMjYw
NzQ2ZDVlNjUyODQ0NGYxYmMuLjQ0MDQxNDA4ZTU0YzZiNzA1ZTNlNzdjMDhiNWY4MTBiNWNlYjUy
ZGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMiBAQAorMjAxOS0wOC0wOCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdA
c29ueS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlw
dHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMDgtMDggIFNhaWQgQWJvdS1IYWxsYXdh
ICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBQb3NpdGlvbiBpbWFn
ZSBpbmZvcm1hdGlvbiBzaG91bGQgcmVzcGVjdCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24KZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRz
L3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IDgzZGMwNjJhYjI4MjExNjFhOTMxYzJhYmU0M2Rm
NWY2NjlhODhkYTkuLjA5ODcyMzUzNjBkMjQ0NGQxN2JiZTljM2E4YmVhZTFiYzkxZTk5NGUgMTAw
NzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtNjk5LDggKzY5OSw4IEBAIGRlZiBydW5C
aWdJbnRFbmFibGVkKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAgcnVuKCJiaWct
aW50LWVuYWJsZWQiLCAiLS11c2VCaWdJbnQ9dHJ1ZSIgLCAqKEZUTF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCi1kZWYgcnVuTnVsbGlzaENvYWxlc2NpbmdF
bmFibGVkKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJudWxsaXNoLWNv
YWxlc2NpbmctZW5hYmxlZCIsICItLXVzZU51bGxpc2hDb2FsZXNjaW5nPXRydWUiICwgKihGVExf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCitkZWYgcnVuTnVsbGlzaEF3
YXJlT3BlcmF0b3JzRW5hYmxlZCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQorICAgIHJ1
bigibnVsbGlzaC1hd2FyZS1vcGVyYXRvcnMtZW5hYmxlZCIsICItLXVzZU51bGxpc2hBd2FyZU9w
ZXJhdG9ycz10cnVlIiAsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMpKQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggZDBhNDgzNTI3MmFiYTkyMzFhMDRhNjkxZmZlZTcxNWZmMWI2NmE1Yy4uYjZiZjQ2NzM2ODFk
OTAxMWRjZTg4N2M4ZDE3Zjg3YWU1NGQxY2U1MyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0wOC0wOCAg
Um9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CisKKyAgICAgICAgW0VTTmV4
dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanM6Cisg
ICAgICAgICogc3RyZXNzL29wdGlvbmFsLWNoYWluaW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKiBz
dHJlc3MvdGFpbC1jYWxsLXJlY29nbml6ZS5qczoKKwogMjAxOS0wOC0wOCAgUm9zcyBLaXJzbGlu
ZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgW0pTQ10gQWRkICJqdW1wIGlm
IChub3QpIHVuZGVmaW5lZCBvciBudWxsIiBieXRlY29kZSBvcHMKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qcyBiL0pTVGVzdHMvc3RyZXNzL251bGxpc2gt
Y29hbGVzY2luZy5qcwppbmRleCBmM2RkY2E3MDViZDMxNDUyY2E2YTQ1NTUxMzk2MGE5ZDExYWUz
MTlkLi44Y2JhZDQ0NDM1ZjJmY2QwNTI4NjQxMzhlZTBiN2M1YzNmOGIwMjgxIDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3N0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanMKKysrIGIvSlNUZXN0cy9zdHJl
c3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzCkBAIC0xLDQgKzEsNCBAQAotLy9AIHJ1bk51bGxpc2hD
b2FsZXNjaW5nRW5hYmxlZAorLy9AIHJ1bk51bGxpc2hBd2FyZU9wZXJhdG9yc0VuYWJsZWQKIAog
ZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgewogICAgIGlmIChhY3R1YWwgIT09
IGV4cGVjdGVkKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcu
anMgYi9KU1Rlc3RzL3N0cmVzcy9vcHRpb25hbC1jaGFpbmluZy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTA2
ZDk3YTBhOWYwYjJiOTE4NDhjZWUzMWQ0ZjJjYjAxM2FlNTc5Ci0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcuanMKQEAgLTAsMCArMSwxNTcgQEAKKy8v
QCBydW5OdWxsaXNoQXdhcmVPcGVyYXRvcnNFbmFibGVkCisKK2Z1bmN0aW9uIHNob3VsZEJlKGFj
dHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfWAp
OworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvd1N5bnRheEVycm9yKHNjcmlwdCkgeworICAgIGxl
dCBlcnJvcjsKKyAgICB0cnkgeworICAgICAgICBldmFsKHNjcmlwdCk7CisgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorCisgICAgaWYgKCEoZXJyb3IgaW5zdGFu
Y2VvZiBTeW50YXhFcnJvcikpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgU3lu
dGF4RXJyb3IhJyk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93VHlwZUVycm9yKGZ1bmMsIG1l
c3NhZ2VQcmVmaXgpIHsKKyAgICBsZXQgZXJyb3I7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygp
OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKworICAgIGlm
ICghKGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdFeHBlY3RlZCBUeXBlRXJyb3IhJyk7CisKKyAgICBpZiAoIWVycm9yLm1lc3NhZ2Uuc3RhcnRz
V2l0aChtZXNzYWdlUHJlZml4KSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeXBlRXJyb3Ig
aGFzIHdyb25nIG1lc3NhZ2UhJyk7Cit9CisKK2NvbnN0IG1hc3F1ZXJhZGVyID0gbWFrZU1hc3F1
ZXJhZGVyKCk7CittYXNxdWVyYWRlci5mb28gPSAzOworCitmdW5jdGlvbiB0ZXN0QmFzaWNDYXNl
cygpIHsKKyAgICBzaG91bGRCZSh1bmRlZmluZWQ/LnZhbHVlT2YoKSwgdW5kZWZpbmVkKTsKKyAg
ICBzaG91bGRCZShudWxsPy52YWx1ZU9mKCksIHVuZGVmaW5lZCk7CisgICAgc2hvdWxkQmUodHJ1
ZT8udmFsdWVPZigpLCB0cnVlKTsKKyAgICBzaG91bGRCZShmYWxzZT8udmFsdWVPZigpLCBmYWxz
ZSk7CisgICAgc2hvdWxkQmUoMD8udmFsdWVPZigpLCAwKTsKKyAgICBzaG91bGRCZSgxPy52YWx1
ZU9mKCksIDEpOworICAgIHNob3VsZEJlKCcnPy52YWx1ZU9mKCksICcnKTsKKyAgICBzaG91bGRC
ZSgnaGknPy52YWx1ZU9mKCksICdoaScpOworICAgIHNob3VsZEJlKCh7fSk/LmNvbnN0cnVjdG9y
LCBPYmplY3QpOworICAgIHNob3VsZEJlKCh7IHg6ICdoaScgfSk/LngsICdoaScpOworICAgIHNo
b3VsZEJlKFtdPy5sZW5ndGgsIDApOworICAgIHNob3VsZEJlKFsnaGknXT8ubGVuZ3RoLCAxKTsK
KyAgICBzaG91bGRCZShtYXNxdWVyYWRlcj8uZm9vLCAzKTsKKworICAgIHNob3VsZEJlKHVuZGVm
aW5lZD8uWyd2YWx1ZU9mJ10oKSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRCZShudWxsPy5bJ3Zh
bHVlT2YnXSgpLCB1bmRlZmluZWQpOworICAgIHNob3VsZEJlKHRydWU/LlsndmFsdWVPZiddKCks
IHRydWUpOworICAgIHNob3VsZEJlKGZhbHNlPy5bJ3ZhbHVlT2YnXSgpLCBmYWxzZSk7CisgICAg
c2hvdWxkQmUoMD8uWyd2YWx1ZU9mJ10oKSwgMCk7CisgICAgc2hvdWxkQmUoMT8uWyd2YWx1ZU9m
J10oKSwgMSk7CisgICAgc2hvdWxkQmUoJyc/LlsndmFsdWVPZiddKCksICcnKTsKKyAgICBzaG91
bGRCZSgnaGknPy5bJ3ZhbHVlT2YnXSgpLCAnaGknKTsKKyAgICBzaG91bGRCZSgoe30pPy5bJ2Nv
bnN0cnVjdG9yJ10sIE9iamVjdCk7CisgICAgc2hvdWxkQmUoKHsgeDogJ2hpJyB9KT8uWyd4J10s
ICdoaScpOworICAgIHNob3VsZEJlKFtdPy5bJ2xlbmd0aCddLCAwKTsKKyAgICBzaG91bGRCZShb
J2hpJ10/LlswXSwgJ2hpJyk7CisgICAgc2hvdWxkQmUobWFzcXVlcmFkZXI/LlsnZm9vJ10sIDMp
OworCisgICAgc2hvdWxkQmUodW5kZWZpbmVkPy4oKSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRC
ZShudWxsPy4oKSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiB0
cnVlPy4oKSwgJ3RydWUgaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVF
cnJvcigoKSA9PiBmYWxzZT8uKCksICdmYWxzZSBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNo
b3VsZFRocm93VHlwZUVycm9yKCgpID0+IDA/LigpLCAnMCBpcyBub3QgYSBmdW5jdGlvbicpOwor
ICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgpID0+IDE/LigpLCAnMSBpcyBub3QgYSBmdW5jdGlv
bicpOworICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICcnPy4oKSwgJ1wnXCcgaXMgbm90
IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAnaGknPy4oKSwg
J1wnaGlcJyBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgp
ID0+ICh7fSk/LigpLCAnKHt9KSBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3VsZFRocm93
VHlwZUVycm9yKCgpID0+ICh7IHg6ICdoaScgfSk/LigpLCAnKHsgeDogXCdoaVwnIH0pIGlzIG5v
dCBhIGZ1bmN0aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gW10/LigpLCAn
W10gaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiBb
J2hpJ10/LigpLCAnW1wnaGlcJ10gaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJv
d1R5cGVFcnJvcigoKSA9PiBtYXNxdWVyYWRlcj8uKCksICdtYXNxdWVyYWRlciBpcyBub3QgYSBm
dW5jdGlvbicpOworfQorbm9JbmxpbmUodGVzdEJhc2ljQ2FzZXMpOworCitmb3IgKGxldCBpID0g
MDsgaSA8IDFlNTsgaSsrKQorICAgIHRlc3RCYXNpY0Nhc2VzKCk7CisKK3Nob3VsZFRocm93VHlw
ZUVycm9yKCgpID0+ICh7fSk/LmkoKSwgJyh7fSk/LmkgaXMgbm90IGEgZnVuY3Rpb24nKTsKK3No
b3VsZEJlKCh7fSkuaT8uKCksIHVuZGVmaW5lZCk7CitzaG91bGRCZSgoe30pPy5pPy4oKSwgdW5k
ZWZpbmVkKTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICh7fSk/LlsnaSddKCksICcoe30p
Py5bXCdpXCddIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CitzaG91bGRCZSgoe30pWydpJ10/LigpLCB1
bmRlZmluZWQpOworc2hvdWxkQmUoKHt9KT8uWydpJ10/LigpLCB1bmRlZmluZWQpOworCitzaG91
bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoe30pPy5hWydiJ10sICd1bmRlZmluZWQgaXMgbm90IGFu
IG9iamVjdCcpOworc2hvdWxkQmUoKHt9KT8uYT8uWydiJ10sIHVuZGVmaW5lZCk7CitzaG91bGRC
ZShudWxsPy5hWydiJ10oKS5jLCB1bmRlZmluZWQpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkg
PT4gKHt9KT8uWydhJ10uYiwgJ3VuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0Jyk7CitzaG91bGRC
ZSgoe30pPy5bJ2EnXT8uYiwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKG51bGw/LlsnYSddLmIoKVsn
YyddLCB1bmRlZmluZWQpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKCgpID0+IHt9KT8u
KCkoKSwgJygoKSA9PiB7fSk/LigpIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CitzaG91bGRCZSgoKCkg
PT4ge30pPy4oKT8uKCksIHVuZGVmaW5lZCk7CitzaG91bGRCZShudWxsPy4oKSgpLmFbJ2InXSwg
dW5kZWZpbmVkKTsKKworY29uc3QgbzAgPSB7IGE6IHsgYigpIHsgcmV0dXJuIHRoaXMuX2IuYmlu
ZCh0aGlzKTsgfSwgX2IoKSB7IHJldHVybiB0aGlzLl9fYjsgfSwgX19iOiB7IGM6IDQyIH0gfSB9
Oworc2hvdWxkQmUobzA/LmE/LlsnYiddPy4oKT8uKCk/LmMsIDQyKTsKK3Nob3VsZEJlKG8wPy5p
Py5bJ2onXT8uKCk/LigpPy5rLCB1bmRlZmluZWQpOworCitjb25zdCBvMSA9IHsgY291bnQ6IDAs
IGdldCB4KCkgeyB0aGlzLmNvdW50Kys7IHJldHVybiAoKSA9PiB7fTsgfSB9OworbzEueD8ueTsK
K3Nob3VsZEJlKG8xLmNvdW50LCAxKTsKK28xLng/LlsneSddOworc2hvdWxkQmUobzEuY291bnQs
IDIpOworbzEueD8uKCk7CitzaG91bGRCZShvMS5jb3VudCwgMyk7CitudWxsPy4obzEueCk7Citz
aG91bGRCZShvMS5jb3VudCwgMyk7CisKK3Nob3VsZEJlKGRlbGV0ZSB1bmRlZmluZWQ/LmZvbywg
dHJ1ZSk7CitzaG91bGRCZShkZWxldGUgbnVsbD8uZm9vLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0
ZSB1bmRlZmluZWQ/LlsnZm9vJ10sIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIG51bGw/LlsnZm9v
J10sIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIHVuZGVmaW5lZD8uKCksIHRydWUpOworc2hvdWxk
QmUoZGVsZXRlIG51bGw/LigpLCB0cnVlKTsKKworY29uc3QgbzIgPSB7IHg6IDAsIHk6IDAsIHoo
KSB7fSB9Oworc2hvdWxkQmUoZGVsZXRlIG8yPy54LCB0cnVlKTsKK3Nob3VsZEJlKG8yLngsIHVu
ZGVmaW5lZCk7CitzaG91bGRCZShkZWxldGUgbzI/LngsIHRydWUpOworc2hvdWxkQmUoZGVsZXRl
IG8yPy5bJ3knXSwgdHJ1ZSk7CitzaG91bGRCZShvMi55LCB1bmRlZmluZWQpOworc2hvdWxkQmUo
ZGVsZXRlIG8yPy5bJ3knXSwgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgbzIuej8uKCksIHRydWUp
OworCitmdW5jdGlvbiBncmVldChuYW1lKSB7IHJldHVybiBgaGV5LCAke25hbWV9JHt0aGlzLnN1
ZmZpeCA/PyAnLid9YDsgfQorc2hvdWxkQmUoZXZhbD8uKCdncmVldCgid29ybGQiKScpLCAnaGV5
LCB3b3JsZC4nKTsKK3Nob3VsZEJlKGdyZWV0Py5jYWxsKHsgc3VmZml4OiAnIScgfSwgJ3dvcmxk
JyksICdoZXksIHdvcmxkIScpOworc2hvdWxkQmUoZ3JlZXQuY2FsbD8uKHsgc3VmZml4OiAnIScg
fSwgJ3dvcmxkJyksICdoZXksIHdvcmxkIScpOworc2hvdWxkQmUobnVsbD8uY2FsbCh7IHN1ZmZp
eDogJyEnIH0sICd3b3JsZCcpLCB1bmRlZmluZWQpOworc2hvdWxkQmUoKHt9KS5jYWxsPy4oeyBz
dWZmaXg6ICchJyB9LCAnd29ybGQnKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKGdyZWV0Py5hcHBs
eSh7IHN1ZmZpeDogJz8nIH0sIFsnd29ybGQnXSksICdoZXksIHdvcmxkPycpOworc2hvdWxkQmUo
Z3JlZXQuYXBwbHk/Lih7IHN1ZmZpeDogJz8nIH0sIFsnd29ybGQnXSksICdoZXksIHdvcmxkPycp
Oworc2hvdWxkQmUobnVsbD8uYXBwbHkoeyBzdWZmaXg6ICc/JyB9LCBbJ3dvcmxkJ10pLCB1bmRl
ZmluZWQpOworc2hvdWxkQmUoKHt9KS5hcHBseT8uKHsgc3VmZml4OiAnPycgfSwgWyd3b3JsZCdd
KSwgdW5kZWZpbmVkKTsKKworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBjbGFz
cyBEIGV4dGVuZHMgQyB7IGZvbygpIHsgcmV0dXJuIHN1cGVyPy5iYXI7IH0gfScpOworc2hvdWxk
VGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBjbGFzcyBEIGV4dGVuZHMgQyB7IGZvbygpIHsg
cmV0dXJuIHN1cGVyPy5bImJhciJdOyB9IH0nKTsKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2Ns
YXNzIEMge30gY2xhc3MgRCBleHRlbmRzIEMgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXI/LigpOyB9
IH0nKTsKKworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY29uc3QgbyA9IHsgQzogY2xhc3Mge30g
fTsgbmV3IG8/LkMoKTsnKQorc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY29uc3QgbyA9IHsgQzog
Y2xhc3Mge30gfTsgbmV3IG8/LlsiQyJdKCk7JykKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2Ns
YXNzIEMge30gbmV3IEM/LigpOycpCitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdmdW5jdGlvbiBm
b28oKSB7IG5ldz8udGFyZ2V0OyB9Jyk7CisKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2Z1bmN0
aW9uIHRhZygpIHt9IHRhZz8uYGA7Jyk7CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjb25zdCBv
ID0geyB0YWcoKSB7fSB9OyBvPy50YWdgYDsnKTsKKworLy8gTk9UIGFuIG9wdGlvbmFsIGNoYWlu
CitzaG91bGRCZShmYWxzZT8uNDo1LCA1KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3Rh
aWwtY2FsbC1yZWNvZ25pemUuanMgYi9KU1Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtcmVjb2duaXpl
LmpzCmluZGV4IDE2ODFlNDAyMDFlZDNjZTdlNzkxNmM5Y2FiOGU1MmIxNmNhMTdhYzAuLjljYzBl
MzA2ZmFjZDc0NDc1MWE3OTYyYTZlNjU3MDI3M2RkNWUzYzEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
c3RyZXNzL3RhaWwtY2FsbC1yZWNvZ25pemUuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvdGFpbC1j
YWxsLXJlY29nbml6ZS5qcwpAQCAtMSwzICsxLDUgQEAKKy8vQCBydW5OdWxsaXNoQXdhcmVPcGVy
YXRvcnNFbmFibGVkCisKIGZ1bmN0aW9uIGNhbGxlck11c3RCZVJ1bigpIHsKICAgICBpZiAoIU9i
amVjdC5pcyhjYWxsZXJNdXN0QmVSdW4uY2FsbGVyLCBydW5UZXN0cykpCiAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiV3JvbmcgY2FsbGVyLCBleHBlY3RlZCBydW4gYnV0IGdvdCAiLCBjYWxsZXJN
dXN0QmVSdW4uY2FsbGVyKTsKQEAgLTE1MCw2ICsxNTIsMTEgQEAgZnVuY3Rpb24gcnVuVGVzdHMo
KSB7CiAgICAgICAgIHJldHVybiBmYWxzZSB8fCBjYWxsZXJNdXN0QmVSdW4oKTsKICAgICB9KSgp
OwogCisgICAgKGZ1bmN0aW9uIHRhaWxDYWxsQ29hbGVzY2UoKSB7CisgICAgICAgICJ1c2Ugc3Ry
aWN0IjsKKyAgICAgICAgcmV0dXJuIGZhbHNlID8/IGNhbGxlck11c3RCZVJ1bigpOworICAgIH0p
KCk7CisKICAgICAoZnVuY3Rpb24gbWVtYmVyVGFpbENhbGwoKSB7CiAgICAgICAgICJ1c2Ugc3Ry
aWN0IjsKICAgICAgICAgcmV0dXJuIHsgZjogY2FsbGVyTXVzdEJlUnVuIH0uZigpOwpAQCAtMTYw
LDYgKzE2NywxMSBAQCBmdW5jdGlvbiBydW5UZXN0cygpIHsKICAgICAgICAgcmV0dXJuIGNhbGxl
ck11c3RCZVJ1bi5iaW5kKCkoKTsKICAgICB9KSgpOwogCisgICAgKGZ1bmN0aW9uIG9wdGlvbmFs
VGFpbENhbGwoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgcmV0dXJuIGNhbGxl
ck11c3RCZVJ1bj8uKCk7CisgICAgfSkoKTsKKwogICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZSB0
ZXN0cwogCiAgICAgKGZ1bmN0aW9uIGFwcGx5VGFpbENhbGwoKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376179</attachid>
            <date>2019-08-13 10:13:51 -0700</date>
            <delta_ts>2019-08-13 14:57:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200199-20190813101351.patch</filename>
            <type>text/plain</type>
            <size>64885</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
MDkyMDFmZjM5Y2JiMDFhNDJhYWQ1MTg2YzRkZWIxMDgzYWZiOWZhLi4xN2Y0YmFkMjBlODAyMDJh
NTM0OTRiMzFiNTk2NGZkNTg3YTZiYjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OSBAQAorMjAxOS0wOC0xMyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
dGhlIG9wdGlvbmFsIGNoYWluaW5nIHByb3Bvc2FsLCB3aGljaCBoYXMgbm93IHJlYWNoZWQgU3Rh
Z2UgMyBhdCBUQzM5LgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhID8uIG9wZXJhdG9yIHdo
aWNoOgorICAgICAgICAgLSBndWFyZHMgbWVtYmVyIGFjY2VzcyB3aGVuIHRoZSBMSFMgaXMgbnVs
bGlzaCwgaS5lLiBgbnVsbD8uZm9vYCBhbmQgYG51bGw/LlsnZm9vJ11gIGFyZSB1bmRlZmluZWQK
KyAgICAgICAgIC0gZ3VhcmRzIGZ1bmN0aW9uIGNhbGxzIHdoZW4gdGhlIExIUyBpcyBudWxsaXNo
LCBpLmUuIGBudWxsPy4oKWAgaXMgdW5kZWZpbmVkCisgICAgICAgICAtIHNob3J0LWNpcmN1aXRz
IG92ZXIgYSB3aG9sZSBhY2Nlc3MvY2FsbCBjaGFpbiwgaS5lLiBgbnVsbD8uYVsnYiddKGMrKylg
IGlzIHVuZGVmaW5lZCBhbmQgZG9lcyBub3QgaW5jcmVtZW50IGMKKworICAgICAgICBUaGlzIGZl
YXR1cmUgY2FuIGJlIG5haXZlbHkgdmlld2VkIGFzIGEgdGVybmFyeSBpbiBkaXNndWlzZSwgaS5l
LiBgYT8uYmAgaXMgbGlrZSBgYSA9PSBudWxsID8gdW5kZWZpbmVkIDogYS5iYC4KKyAgICAgICAg
SG93ZXZlciwgc2luY2Ugd2UgbXVzdCBiZSBzdXJlIG5vdCB0byBkb3VibGUtZXZhbHVhdGUgdGhl
IExIUywgaXQncyBhY3R1YWxseSByYXRoZXIgYWtpbiB0byBhIHRyeSBibG9jayAtLQorICAgICAg
ICBuYW1lbHksIHdlIGhhdmUgdGhlIGJ5dGVjb2RlIGdlbmVyYXRvciBrZWVwIGFuIGVhcmx5LW91
dCBsYWJlbCBmb3IgdXNlIHRocm91Z2hvdXQgdGhlIGFjY2VzcyBhbmQgY2FsbCBjaGFpbi4KKwor
ICAgICAgICAoQWxzbyBub3RlIHRoYXQgZG9jdW1lbnQuYWxsIGJlaGF2ZXMgYXMgYW4gb2JqZWN0
LCBzbyAibnVsbGlzaCIgbWVhbnMgKnN0cmljdGx5KiBlcXVhbCB0byBudWxsIG9yIHVuZGVmaW5l
ZC4pCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YmVnaW5PcHRpb25hbENoYWluKTogQWRkZWQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbmRPcHRpb25hbENoYWluKTogQWRk
ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3B0aW9uYWxDaGVjayk6
IEFkZGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAg
ICAgICBJbXBsZW1lbnQgZWFybHktb3V0IGxvZ2ljLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2Rl
KToKKyAgICAgICAgKEpTQzo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRCeXRlY29kZSk6IFJl
ZmFjdG9yIHNvIHdlIGNhbiBlbWl0T3B0aW9uYWxDaGVjayBpbiBhIHNpbmdsZSBsb2NhdGlvbi4K
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKTogUmVmYWN0
b3Igc28gd2UgY2FuIGVtaXRPcHRpb25hbENoZWNrIGluIGEgc2luZ2xlIGxvY2F0aW9uLgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6
OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6
RGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZURv
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvYWxlc2NlTm9kZTo6ZW1pdEJ5
dGVjb2RlKTogQ2xlYW4gdXAuCisgICAgICAgIChKU0M6Ok9wdGlvbmFsQ2hhaW5Ob2RlOjplbWl0
Qnl0ZWNvZGUpOiBBZGRlZC4KKyAgICAgICAgSW1wbGVtZW50ID8uIG5vZGUgYW5kIGVtaXQgY2hl
Y2tzIHdoZXJlIG5lZWRlZC4KKworICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAg
ICAgICAgSGF2ZSBPcElzVW5kZWZpbmVkT3JOdWxsIHN1cHBvcnQgY29uc3RhbnQgcmVnaXN0ZXJz
LgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVp
bGRlcjo6Y3JlYXRlT3B0aW9uYWxDaGFpbik6IEFkZGVkLgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjptYWtlRGVsZXRlTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5j
dGlvbkNhbGxOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlND
OjpMZXhlcjxUPjo6bGV4V2l0aG91dENsZWFyaW5nTGluZVRlcm1pbmF0b3IpOgorICAgICAgICAq
IHBhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6Ok9wdGlvbmFsQ2hhaW5O
b2RlOjpPcHRpb25hbENoYWluTm9kZSk6IEFkZGVkLgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5o
OgorICAgICAgICAoSlNDOjpFeHByZXNzaW9uTm9kZTo6aXNPcHRpb25hbENoYWluIGNvbnN0KTog
QWRkZWQuCisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjppc09wdGlvbmFsQ2hhaW5CYXNl
IGNvbnN0KTogQWRkZWQuCisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjpzZXRJc09wdGlv
bmFsQ2hhaW5CYXNlKTogQWRkZWQuCisgICAgICAgICogcGFyc2VyL1BhcnNlclRva2Vucy5oOgor
ICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENo
ZWNrZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tl
cjo6Y3JlYXRlT3B0aW9uYWxDaGFpbik6IEFkZGVkLgorICAgICAgICBJbnRyb2R1Y2UgbmV3IHRv
a2VuIGFuZCBBU1Qgbm9kZSwgYXMgd2VsbCBhcyBhbiBFeHByZXNzaW9uTm9kZSBmaWVsZCB0byBt
YXJrIExIU2VzIHdpdGguCisKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAg
KEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6CisgICAgICAg
IFBhcnNlIG9wdGlvbmFsIGNoYWlucyBieSB3cmFwcGluZyB0aGUgYWNjZXNzL2NhbGwgcGFyc2Ug
bG9vcC4KKworICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAg
IChKU0M6OmZ1bmN0aW9uQ2FsbEJhc2UpOgorICAgICAgICBFbnN1cmUgdGhhdCBUeXBlRXJyb3Ig
bWVzc2FnZXMgZG9uJ3QgaW5jbHVkZSB0aGUgJz8uJy4KKworICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5oOgorICAgICAgICBVcGRhdGUgZmVhdHVyZSBmbGFnLCBhcyA/LiBhbmQgPz8gYXJlIGEg
ZG91YmxlIGZlYXR1cmUgb2YgIm51bGxpc2gtYXdhcmUiIG9wZXJhdG9ycy4KKwogMjAxOS0wOC0x
MiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBtdWx0
aXBhcmFtZXRlciBvdmVybG9hZHMgb2YgYXBwZW5kKCkgaW4gU3RyaW5nQnVpbGRlciBhcyBhIGZp
cnN0IHN0ZXAgdG93YXJkIHN0YW5kYXJkaXppbmdpbmcgb24gdGhlIGZsZXhpYmxlQXBwZW5kKCkg
aW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggMmMzMGE0ZDliNDMxYjBlNTUyNzQx
ZDMyNWFjODE0OWMzOGU5ZDU4MC4uMDNiNTAwYWM3MTU5MjkwNGIyZmMxYjI0ZmEwYWY4YTM3MTNk
MzQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTQ5NjQsNiArNDk2NCwzOCBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0SnVtcElmKFJlZ2lzdGVySUQqIGNvbXBsZXRpb25UeXBlUmVnaXN0
ZXIsIENvbXBsZXRpbwogICAgIGVtaXRKdW1wSWZUcnVlKGVxdWl2YWxlbmNlUmVzdWx0LCBqdW1w
VGFyZ2V0KTsKIH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YmVnaW5PcHRpb25hbENoYWlu
KCkKK3sKKyAgICBBU1NFUlQoIW1fb3B0aW9uYWxDaGFpblRhcmdldExhYmVsIHx8IG1fb3B0aW9u
YWxDaGFpbkRlcHRoKTsKKworICAgIGlmIChtX29wdGlvbmFsQ2hhaW5EZXB0aCsrKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX29wdGlvbmFsQ2hhaW5UYXJnZXRMYWJlbCA9IG5ld0xhYmVsKCk7
Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVuZE9wdGlvbmFsQ2hhaW4oUmVnaXN0ZXJJ
RCogZHN0LCBib29sIGlzRGVsZXRlKQoreworICAgIEFTU0VSVChtX29wdGlvbmFsQ2hhaW5UYXJn
ZXRMYWJlbCAmJiBtX29wdGlvbmFsQ2hhaW5EZXB0aCk7CisKKyAgICBpZiAoLS1tX29wdGlvbmFs
Q2hhaW5EZXB0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmPExhYmVsPiBlbmRMYWJlbCA9
IG5ld0xhYmVsKCk7CisgICAgZW1pdEp1bXAoZW5kTGFiZWwuZ2V0KCkpOworCisgICAgZW1pdExh
YmVsKCptX29wdGlvbmFsQ2hhaW5UYXJnZXRMYWJlbC5sZWFrUmVmKCkpOworICAgIGVtaXRMb2Fk
KGRzdCwgaXNEZWxldGUgPyBqc0Jvb2xlYW4odHJ1ZSkgOiBqc1VuZGVmaW5lZCgpKTsKKworICAg
IGVtaXRMYWJlbChlbmRMYWJlbC5nZXQoKSk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRPcHRpb25hbENoZWNrKFJlZ2lzdGVySUQqIHNyYykKK3sKKyAgICBBU1NFUlQobV9vcHRp
b25hbENoYWluVGFyZ2V0TGFiZWwpOworICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5l
ZE9yTnVsbChuZXdUZW1wb3JhcnkoKSwgc3JjKSwgKm1fb3B0aW9uYWxDaGFpblRhcmdldExhYmVs
KTsKK30KKwogdm9pZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRl
Y29kZUVuZE9mZnNldCkKIHsKICAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29u
dGV4dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAppbmRleCBlOTc2ODZhYTNlZGNkZDhkM2Y5YjU3YzRhNmQxMjNiYWM5Y2IzOTg3Li4yYjAy
NTNjNTEyNWFlYjYwYzljNDg2NDM4Mzg2NDc2ZjIwOTBjZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC05
NTksNiArOTU5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHB1c2hGaW5hbGx5
Q29udHJvbEZsb3dTY29wZShGaW5hbGx5Q29udGV4dCYpOwogICAgICAgICB2b2lkIHBvcEZpbmFs
bHlDb250cm9sRmxvd1Njb3BlKCk7CiAKKyAgICAgICAgdm9pZCBiZWdpbk9wdGlvbmFsQ2hhaW4o
KTsKKyAgICAgICAgdm9pZCBlbmRPcHRpb25hbENoYWluKFJlZ2lzdGVySUQqIGRzdCwgYm9vbCBp
c0RlbGV0ZSA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3Rl
cklEKiBzcmMpOworCiAgICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVy
SUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCk7CiAgICAgICAgIHZvaWQgcG9wSW5kZXhlZEZv
ckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwogICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVG
b3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJ
RCogcHJvcGVydHksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOwpAQCAtMTI2Niw2ICsxMjcwLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxUcnlSYW5nZT4gbV90cnlSYW5nZXM7
CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxUcnlEYXRhLCA4PiBtX3RyeURhdGE7CiAKKyAgICAg
ICAgUmVmUHRyPExhYmVsPiBtX29wdGlvbmFsQ2hhaW5UYXJnZXRMYWJlbDsKKyAgICAgICAgdW5z
aWduZWQgbV9vcHRpb25hbENoYWluRGVwdGggeyAwIH07CisKICAgICAgICAgaW50IG1fbmV4dENv
bnN0YW50T2Zmc2V0IHsgMCB9OwogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxGdW5jdGlvbk1l
dGFkYXRhTm9kZSosIHVuc2lnbmVkPiBGdW5jdGlvbk9mZnNldE1hcDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCA3Y2Mw
NzhjM2MwMjE1YzlkZjc5MGM4NDhhMzJkMTNiODA5MGYwOGEwLi5jNTkwMGVmYTY2NjNkMmY4NTJh
MDk1MGIwMmVlMzBiNTAzZGIzNzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC03NDQsMTIgKzc0NCwxOCBAQCBSZWdp
c3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaQogICAgIFJlZ2lzdGVySUQqIHJldDsKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKIAot
ICAgIGlmIChpc05vbkluZGV4U3RyaW5nRWxlbWVudCgqbV9zdWJzY3JpcHQpKSB7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7Cisg
ICAgYm9vbCBzdWJzY3JpcHRJc05vbkluZGV4U3RyaW5nID0gaXNOb25JbmRleFN0cmluZ0VsZW1l
bnQoKm1fc3Vic2NyaXB0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IHN1YnNjcmlw
dElzTm9uSW5kZXhTdHJpbmcKKyAgICAgICAgPyBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKQor
ICAgICAgICA6IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vi
c2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CisK
KyAgICBpZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRv
ci5lbWl0T3B0aW9uYWxDaGVjayhiYXNlLmdldCgpKTsKKworICAgIGlmIChzdWJzY3JpcHRJc05v
bkluZGV4U3RyaW5nKSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgcmV0ID0gZ2VuZXJhdG9y
LmVtaXRHZXRCeUlkKGZpbmFsRGVzdC5nZXQoKSwgYmFzZS5nZXQoKSwgc3RhdGljX2Nhc3Q8U3Ry
aW5nTm9kZSo+KG1fc3Vic2NyaXB0KS0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNp
ZGUobV9iYXNlLCBtX3N1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlwdC0+aXNQdXJl
KGdlbmVyYXRvcikpOwogICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5l
bWl0Tm9kZUZvclByb3BlcnR5KG1fc3Vic2NyaXB0KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAg
ICByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGZpbmFsRGVzdC5nZXQoKSwgYmFzZS5nZXQo
KSwgcHJvcGVydHkpOwpAQCAtNzYzLDE3ICs3NjksMjYgQEAgUmVnaXN0ZXJJRCogQnJhY2tldEFj
Y2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2kKIAogUmVnaXN0ZXJJRCogRG90QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAg
IGJvb2wgYmFzZUlzU3VwZXIgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7Ci0gICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGJhc2UgPSBiYXNlSXNTdXBlciA/IGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoZ2Vu
ZXJhdG9yKSA6IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworCisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2U7CisgICAgaWYgKGJhc2VJc1N1cGVyKQorICAgICAgICBiYXNlID0gZW1pdFN1
cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3IpOworICAgIGVsc2UgeworICAgICAgICBiYXNlID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisgICAgICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9u
YWxDaGFpbkJhc2UoKSkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhi
YXNlLmdldCgpKTsKKyAgICB9CisKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRp
dm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogZmluYWxE
ZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAgICBSZWdpc3RlcklEKiBy
ZXQ7CiAgICAgaWYgKGJhc2VJc1N1cGVyKSB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0
aGlzVmFsdWUgPSBnZW5lcmF0b3IuZW5zdXJlVGhpcygpOwotICAgICAgICByZXQgPSBnZW5lcmF0
b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LCBiYXNlLmdldCgpLCB0aGlzVmFsdWUuZ2V0KCksIG1f
aWRlbnQpOworICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0Lmdl
dCgpLCBiYXNlLmdldCgpLCB0aGlzVmFsdWUuZ2V0KCksIG1faWRlbnQpOwogICAgIH0gZWxzZQot
ICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LCBiYXNlLmdldCgp
LCBtX2lkZW50KTsKLSAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKGZpbmFsRGVzdCwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRC
eUlkKGZpbmFsRGVzdC5nZXQoKSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7CisgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZShmaW5hbERlc3QuZ2V0KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtODQ4LDI0ICs4NjMsMzIgQEAgUmVnaXN0ZXJJ
RCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWcKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkVGhpc0Zyb21BcnJvd0Z1
bmN0aW9uTGV4aWNhbEVudmlyb25tZW50KCk7CiAKICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0
b3IudmFyaWFibGUoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ldmFsKTsKLSAgICBpZiAoUmVn
aXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFRE
WkNoZWNrSWZOZWNlc3NhcnkodmFyLCBsb2NhbCwgbnVsbHB0cik7Ci0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpLCBsb2NhbCk7Ci0gICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5l
cmF0b3IsIG1fYXJncyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0gdmFyLmxvY2Fs
KCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmM7CisgICAgaWYgKGxvY2FsKSB7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLmdldCgpLCBu
dWxscHRyKTsKKyAgICAgICAgZnVuYyA9IGdlbmVyYXRvci5tb3ZlKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBmdW5jID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50
cyhnZW5lcmF0b3IsIG1fYXJncyk7CisKKyAgICBpZiAobG9jYWwpCiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsK
LSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOworICAg
IGVsc2UgeworICAgICAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90U3RhcnQoKSAr
IDQ7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90
U3RhcnQoKSwgbmV3RGl2b3QpOworICAgICAgICBnZW5lcmF0b3IubW92ZSgKKyAgICAgICAgICAg
IGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50
aGlzUmVnaXN0ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxscHRyKTsKICAgICB9
CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KTsKLSAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwot
ICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RTdGFydCgpICsgNDsKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90
KTsKLSAgICBnZW5lcmF0b3IubW92ZSgKLSAgICAgICAgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0
ZXIoKSwKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoY2FsbEFyZ3VtZW50cy50
aGlzUmVnaXN0ZXIoKSwgdmFyKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVu
Yy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91
bmQpOwotICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGZ1bmMuZ2V0
KCksIG51bGxwdHIpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1
bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6
Ok5vKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOworICAgIGlmIChpc09wdGlvbmFsQ2hhaW5C
YXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jLmdldCgpKTsK
KworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKHJldHVyblZhbHVlLmdldCgpLCBm
dW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCksIERlYnVnZ2FibGVDYWxsOjpObyk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtODk5LDggKzkyMiwxMiBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1
ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZQogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9CisKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5n
ZXQoKSk7CisgICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRPcHRpb25hbENoZWNrKGZ1bmMuZ2V0KCkpOworCiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxs
QXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2Fs
bEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CiAgICAgUmVnaXN0ZXJJ
RCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0
KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6WWVzKTsKQEAgLTky
MCwzMCArOTQ3LDM0IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwKICAgICBFeHBlY3RlZEZ1bmN0
aW9uIGV4cGVjdGVkRnVuY3Rpb24gPSBnZW5lcmF0b3IuZXhwZWN0ZWRGdW5jdGlvbkZvcklkZW50
aWZpZXIobV9pZGVudCk7CiAKICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUo
bV9pZGVudCk7Ci0gICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgbG9jYWwsIG51bGxw
dHIpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5tb3ZlKGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwotICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1
bmMuZ2V0KCkpOwotICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9y
LCBtX2FyZ3MpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsb2NhbCA9IHZhci5sb2NhbCgpOwor
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jOworICAgIGlmIChsb2NhbCkgeworICAgICAgICBn
ZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBsb2NhbC5nZXQoKSwgbnVsbHB0
cik7CisgICAgICAgIGZ1bmMgPSBnZW5lcmF0b3IubW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0
aW9uKGRzdCksIGxvY2FsLmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZnVuYyA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2Vu
ZXJhdG9yLCBtX2FyZ3MpOworCisgICAgaWYgKGxvY2FsKSB7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAg
ICAgICAgLy8gVGhpcyBwYXNzZXMgTm9FeHBlY3RlZEZ1bmN0aW9uIGJlY2F1c2Ugd2UgZXhwZWN0
IHRoYXQgaWYgdGhlIGZ1bmN0aW9uIGlzIGluIGEKICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGUs
IHRoZW4gaXQncyBub3Qgb25lIG9mIG91ciBidWlsdC1pbiBjb25zdHJ1Y3RvcnMuCi0gICAgICAg
IFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbEluVGFpbFBvc2l0aW9uKHJldHVy
blZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVu
dHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olll
cyk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgICAgIHJldHVybiByZXQ7CisgICAgICAg
IGV4cGVjdGVkRnVuY3Rpb24gPSBOb0V4cGVjdGVkRnVuY3Rpb247CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyBtX2lkZW50Lmxl
bmd0aCgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBk
aXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKKyAgICAgICAgZ2VuZXJhdG9yLm1vdmUoCisgICAgICAg
ICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLAorICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRSZXNvbHZlU2NvcGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVu
dHMudGhpc1JlZ2lzdGVyKCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgZnVuYy5nZXQoKSwgbnVsbHB0cik7CiAg
ICAgfQogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKLSAgICBDYWxsQXJndW1lbnRzIGNhbGxB
cmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNl
KCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jLmdldCgpKTsKIAot
ICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RTdGFydCgpICsgbV9pZGVudC5sZW5n
dGgoKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0
YXJ0KCksIG5ld0Rpdm90KTsKLSAgICBnZW5lcmF0b3IubW92ZSgKLSAgICAgICAgY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUo
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRH
ZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFy
LCBUaHJvd0lmTm90Rm91bmQpOwotICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2Fy
eSh2YXIsIGZ1bmMuZ2V0KCksIG51bGxwdHIpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVy
YXRvci5lbWl0Q2FsbEluVGFpbFBvc2l0aW9uKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgp
LCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOwogICAgIGdlbmVyYXRvci5lbWl0UHJv
ZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgcmV0dXJuIHJldDsKQEAgLTEyNzUsNiArMTMwNiw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
SW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfZGVmaW5lRW51bWVyYWJsZVdyaXRhYmxlQ29u
ZmlnCiAKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBib29sIGJhc2VJc1N1cGVyID0g
bV9iYXNlLT5pc1N1cGVyTm9kZSgpOwogICAgIGJvb2wgc3Vic2NyaXB0SXNOb25JbmRleFN0cmlu
ZyA9IGlzTm9uSW5kZXhTdHJpbmdFbGVtZW50KCptX3N1YnNjcmlwdCk7CiAKQEAgLTEyODYsOSAr
MTMxOSwxMSBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsCiAgICAgICAgICAgICBiYXNlID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3N1YnNjcmlwdEhh
c0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlwdC0+aXNQdXJlKGdlbmVyYXRvcikpOworCisgICAgICAg
IGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0T3B0aW9uYWxDaGVjayhiYXNlLmdldCgpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gZnVuY3Rpb247CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNSZWdpc3RlcjsK
ICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIG9ubHkgbmVl
ZCB0byBkbyB0aGlzIG9uY2UgYmVjYXVzZSB3ZSBlaXRoZXIgaGF2ZSBhIG5vbi1URFogdGhpcyBv
ciB3ZSB0aHJvdy4gT25jZSB3ZSBoYXZlIGEgbm9uLVREWiB0aGlzLCB3ZSBjYW4ndCBjaGFuZ2Ug
aXRzIHZhbHVlIGJhY2sgdG8gVERaLgpAQCAtMTI5NywxOSArMTMzMiwyMCBAQCBSZWdpc3RlcklE
KiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsCiAgICAgaWYgKHN1YnNjcmlwdElzTm9uSW5kZXhTdHJpbmcpIHsKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3Vi
ZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAgICAgICAgIGlmIChiYXNl
SXNTdXBlcikKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdl
dCgpLCBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKKyAg
ICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgYmFzZS5nZXQo
KSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3Jp
cHQpLT52YWx1ZSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5l
cmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdl
dCgpLCBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKKyAg
ICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgYmFzZS5nZXQo
KSwgc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG1fc3Vic2NyaXB0KS0+dmFsdWUoKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9y
LmVtaXROb2RlRm9yUHJvcGVydHkobV9zdWJzY3JpcHQpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQo
KSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICAgICAgaWYgKGJhc2VJc1N1cGVyKQotICAgICAg
ICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBwcm9wZXJ0eS5n
ZXQoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGZ1bmN0aW9uLmdldCgp
LCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChmdW5jdGlvbi5nZXQoKSwgYmFz
ZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwogICAgIH0KKyAgICBpZiAoaXNPcHRpb25hbENoYWlu
QmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soZnVuY3Rpb24uZ2V0
KCkpOwogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBj
YWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBpZiAoYmFzZUlzU3VwZXIpIHsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVjayhnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCkp
OwpAQCAtMTMzMSwxNCArMTM2NywyMSBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxEb3ROb2Rl
OjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaQogICAgIGJv
b2wgYmFzZUlzU3VwZXIgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7CiAgICAgaWYgKGJhc2VJc1N1
cGVyKQogICAgICAgICBnZW5lcmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LCBnZW5lcmF0b3IuZW5zdXJlVGhpcygpKTsKLSAgICBlbHNlCisgICAgZWxzZSB7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2Jhc2Up
OworICAgICAgICBpZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIo
KSk7CisgICAgfQogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lv
bkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAg
IGlmIChiYXNlSXNTdXBlcikgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3VwZXJCYXNl
ID0gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3IpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIHN1cGVyQmFzZS5nZXQoKSwgY2FsbEFyZ3VtZW50
cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CiAgICAgfSBlbHNlCiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIo
KSwgbV9pZGVudCk7CisKKyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBn
ZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soZnVuY3Rpb24uZ2V0KCkpOworCiAgICAgUmVnaXN0
ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUu
Z2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICByZXR1cm4gcmV0OwpAQCAtMTM0OCwxNyArMTM5MSwy
NCBAQCBzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhEaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9y
QXBwbHkgPSAyOwogCiBSZWdpc3RlcklEKiBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
KyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fYmFzZSk7CisKKyAgICBpZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkp
CisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhiYXNlLmdldCgpKTsKKwogICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4
cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBmdW5jdGlvbjsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1
bmN0aW9uOwogICAgIGF1dG8gbWFrZUZ1bmN0aW9uID0gWyZdIHsKICAgICAgICAgaWYgKG1fYmFz
ZS0+aXNTdXBlck5vZGUoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNW
YWx1ZSA9IGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7CiAgICAgICAgICAgICBmdW5jdGlvbiA9IGdl
bmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2Uu
Z2V0KCksIHRoaXNWYWx1ZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGlu
TmFtZXMoKS5jYWxsUHVibGljTmFtZSgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBm
dW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9u
KGRzdCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVz
KCkuY2FsbFB1YmxpY05hbWUoKSk7CisKKyAgICAgICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJhc2Uo
KSkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5nZXQo
KSk7CiAgICAgfTsKIAogICAgIGJvb2wgZW1pdENhbGxDaGVjayA9ICFnZW5lcmF0b3IuaXNCdWls
dGluRnVuY3Rpb24oKTsKQEAgLTE0MzAsMTUgKzE0ODAsMjIgQEAgUmVnaXN0ZXJJRCogQXBwbHlG
dW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwKICAgICAvLyBmdW5jdGlvbi5hcHBseSh0aGlzQXJnLCBbYXJnMCwgYXJnMSwgLi4uXSkg
LT4gY2FuIGJlIHRyaXZpYWxseSBjb2VyY2VkIGludG8gZnVuY3Rpb24uY2FsbCh0aGlzQXJnLCBh
cmcwLCBhcmcxLCAuLi4pIGFuZCBzYXZlcyBvYmplY3QgYWxsb2NhdGlvbgogICAgIGJvb2wgbWF5
QmVDYWxsID0gYXJlVHJpdmlhbEFwcGx5QXJndW1lbnRzKG1fYXJncyk7CiAKLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gZnVuY3Rpb247Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFs
dWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisKKyAgICBpZiAobV9iYXNl
LT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxD
aGVjayhiYXNlLmdldCgpKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbjsKICAg
ICBhdXRvIG1ha2VGdW5jdGlvbiA9IFsmXSB7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJO
b2RlKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlzVmFsdWUgPSBnZW5l
cmF0b3IuZW5zdXJlVGhpcygpOwogICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlz
VmFsdWUuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuYXBw
bHlQdWJsaWNOYW1lKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGZ1bmN0aW9uID0g
Z2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFz
ZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5hcHBseVB1
YmxpY05hbWUoKSk7CisKKyAgICAgICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5nZXQoKSk7CiAgICAg
fTsKIAogICAgIGJvb2wgZW1pdENhbGxDaGVjayA9ICFnZW5lcmF0b3IuaXNCdWlsdGluRnVuY3Rp
b24oKTsKQEAgLTE2OTIsMjUgKzE3NDksMzMgQEAgUmVnaXN0ZXJJRCogRGVsZXRlUmVzb2x2ZU5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3QKIAog
UmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7Ci0gICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKIAor
ICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRPcHRpb25hbENoZWNrKHIwLmdldCgpKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBy
MSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlm
IChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpCiAgICAgICAgIHJldHVybiBlbWl0VGhyb3dSZWZlcmVu
Y2VFcnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVydHkiKTsKLSAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dERlbGV0ZUJ5VmFsKGZpbmFsRGVzdC5nZXQoKSwgcjAuZ2V0KCksIHIxLmdldCgpKTsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0ZURvdE5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogRGVsZXRlRG90Tm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9iYXNlKTsKIAorICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2Uo
KSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKHIwLmdldCgpKTsKKwogICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKQogICAgICAgICByZXR1cm4g
ZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAiQ2Fubm90IGRlbGV0ZSBhIHN1cGVy
IHByb3BlcnR5Iik7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJZChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMC5nZXQoKSwgbV9pZGVudCk7CisgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJZChmaW5hbERlc3QuZ2V0KCksIHIwLmdldCgpLCBtX2lk
ZW50KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0ZVZhbHVl
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjM0NiwxMyArMjQx
MSwyNiBAQCBSZWdpc3RlcklEKiBDb2FsZXNjZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKgogICAgIFJlZjxMYWJlbD4gdGFyZ2V0ID0g
Z2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUodGVtcC5nZXQo
KSwgbV9leHByMSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShnZW5lcmF0b3IuZW1p
dFVuYXJ5T3A8T3BJc1VuZGVmaW5lZE9yTnVsbD4oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB0
ZW1wLmdldCgpKSwgdGFyZ2V0LmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNl
KGdlbmVyYXRvci5lbWl0SXNVbmRlZmluZWRPck51bGwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCB0ZW1wLmdldCgpKSwgdGFyZ2V0LmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJblRh
aWxQb3NpdGlvbih0ZW1wLmdldCgpLCBtX2V4cHIyKTsKICAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KHRhcmdldC5nZXQoKSk7CiAKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZHN0LCB0ZW1wLmdl
dCgpKTsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wdGlvbmFsQ2hh
aW5Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCogT3B0aW9u
YWxDaGFpbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZpbmFsRGVzdCA9IGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisKKyAgICBnZW5lcmF0b3IuYmVnaW5PcHRp
b25hbENoYWluKCk7CisgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5UYWlsUG9zaXRpb24oZmluYWxE
ZXN0LmdldCgpLCBtX2V4cHIpOworICAgIGdlbmVyYXRvci5lbmRPcHRpb25hbENoYWluKGZpbmFs
RGVzdC5nZXQoKSwgbV9pc0RlbGV0ZSk7CisKKyAgICByZXR1cm4gZmluYWxEZXN0LmdldCgpOwor
fQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uZGl0aW9uYWxOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBDb25kaXRpb25hbE5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IGFjNDE1OWI4YWY1ZDcwMjFkODg0Njc2OTM3ODFh
MGIwOTMzNjViYjAuLjU1MDA2ZDRmZmJiNGE5NmQwZjk1MWQ2MzZiNDM5NzVlMWJiYjU2OGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCkBAIC04NzUsOCArODc1LDcgQEAgZXF1YWxOdWxsQ29tcGFyaXNvbk9w
KG9wX25lcV9udWxsLCBPcE5lcU51bGwsCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX3VuZGVm
aW5lZF9vcl9udWxsLCBPcElzVW5kZWZpbmVkT3JOdWxsLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgcmV0dXJuKQogICAgIGdldChtX29wZXJhbmQsIHQwKQotICAgIGFzc2VydE5vdENvbnN0
YW50KHNpemUsIHQwKQotICAgIGxvYWRpIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgdDEKKyAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlVGFnKHNpemUsIHQwLCB0MSkKICAgICBvcmkgMSwgdDEKICAg
ICBjaWVxIHQxLCBOdWxsVGFnLCB0MQogICAgIHJldHVybihCb29sZWFuVGFnLCB0MSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KaW5kZXggZTA5Zjg5ODVmZTUzMTdhOGRkOWJiNDcxZWE5MmJhZGJiOGQ1MWNhYy4uMTUzNGVh
OGIzOGU2OGUwNjFmYjk5MWRmNDYwZjU5YTU1N2NkZjRlOCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTgyNyw4
ICs4MjcsOCBAQCBlcXVhbE51bGxDb21wYXJpc29uT3Aob3BfbmVxX251bGwsIE9wTmVxTnVsbCwK
IAogCiBsbGludE9wV2l0aFJldHVybihvcF9pc191bmRlZmluZWRfb3JfbnVsbCwgT3BJc1VuZGVm
aW5lZE9yTnVsbCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQo
bV9vcGVyYW5kLCB0MCkKLSAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQwCisgICAgZ2V0KG1fb3Bl
cmFuZCwgdDEpCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDApCiAgICAg
YW5kcSB+VGFnQml0VW5kZWZpbmVkLCB0MAogICAgIGNxZXEgdDAsIFZhbHVlTnVsbCwgdDAKICAg
ICBvcnEgVmFsdWVGYWxzZSwgdDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWls
ZGVyLmgKaW5kZXggZGU1YjEzMzkwNjYxMTM0MTJhY2FlZWYyYmQ3NWUwMzFhMzMzYTEwMC4uMGYx
MmJmMTI2OWFmODhiZWIwNGQ4N2MwNDViYmNjODQwMTYxMjcxYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAgLTEyOSw3ICsxMjksNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IGludCAgRG9udEJ1aWxkU3RyaW5ncyA9IDA7CiAKICAgICBFeHByZXNz
aW9uTm9kZSogbWFrZUJpbmFyeU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50IHRva2Vu
LCBzdGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+LCBzdGQ6OnBhaXI8RXhw
cmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+KTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZUZ1
bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGZ1
bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNhbGxPckFwcGx5Q2hpbGRE
ZXB0aCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHByZXZpb3VzQmFzZVdh
c1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJvb2wgaXNPcHRpb25hbENh
bGwpOwogCiAgICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291cmNlRWxlbWVudHMoKSB7
IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEpTQzo6U291cmNlRWxlbWVudHMoKTsgfQogCkBA
IC0zNjAsNiArMzYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQog
CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9wdGlvbmFsQ2hhaW4oY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBl
eHByKQorICAgIHsKKyAgICAgICAgYmFzZS0+c2V0SXNPcHRpb25hbENoYWluQmFzZSgpOworICAg
ICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBPcHRpb25hbENoYWluTm9kZShsb2NhdGlv
biwgZXhwcik7CisgICAgfQorCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUNvbmRpdGlvbmFs
RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogY29u
ZGl0aW9uLCBFeHByZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSogcmhzKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ29uZGl0aW9uYWxOb2RlKGxvY2F0
aW9uLCBjb25kaXRpb24sIGxocywgcmhzKTsKQEAgLTExNDgsNiArMTE1NCwxNiBAQCBFeHByZXNz
aW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcgogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZURlbGV0
ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogeworICAgIGlmIChleHByLT5pc09wdGlv
bmFsQ2hhaW4oKSkgeworICAgICAgICBPcHRpb25hbENoYWluTm9kZSogb3B0aW9uYWxDaGFpbiA9
IHN0YXRpY19jYXN0PE9wdGlvbmFsQ2hhaW5Ob2RlKj4oZXhwcik7CisgICAgICAgIGlmIChvcHRp
b25hbENoYWluLT5leHByKCktPmlzTG9jYXRpb24oKSkgeworICAgICAgICAgICAgQVNTRVJUKCFv
cHRpb25hbENoYWluLT5leHByKCktPmlzUmVzb2x2ZU5vZGUoKSk7CisgICAgICAgICAgICBvcHRp
b25hbENoYWluLT5zZXRFeHByKG1ha2VEZWxldGVOb2RlKGxvY2F0aW9uLCBvcHRpb25hbENoYWlu
LT5leHByKCksIHN0YXJ0LCBkaXZvdCwgZW5kKSk7CisgICAgICAgICAgICBvcHRpb25hbENoYWlu
LT5zZXRJc0RlbGV0ZSgpOworICAgICAgICAgICAgcmV0dXJuIG9wdGlvbmFsQ2hhaW47CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBpZiAoIWV4cHItPmlzTG9jYXRpb24oKSkKICAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRGVsZXRlVmFsdWVOb2RlKGxvY2F0aW9uLCBleHByKTsK
ICAgICBpZiAoZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7CkBAIC0xMzQ1LDE3ICsxMzYxLDI5IEBA
IEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0WE9yTm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkg
Qml0WE9yTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsK
IH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29s
IHByZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgpCitF
eHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlv
dXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNhbGxPckFwcGx5Q2hpbGREZXB0aCwgYm9vbCBpc09w
dGlvbmFsQ2FsbCkKIHsKICAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49IGRpdm90LmxpbmVTdGFy
dE9mZnNldCk7CiAgICAgaWYgKGZ1bmMtPmlzU3VwZXJOb2RlKCkpCiAgICAgICAgIHVzZXNTdXBl
ckNhbGwoKTsKIAogICAgIGlmIChmdW5jLT5pc0J5dGVjb2RlSW50cmluc2ljTm9kZSgpKSB7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoaXNPcHRpb25hbENhbGwsICFpc09wdGlvbmFsQ2FsbCk7CiAg
ICAgICAgIEJ5dGVjb2RlSW50cmluc2ljTm9kZSogaW50cmluc2ljID0gc3RhdGljX2Nhc3Q8Qnl0
ZWNvZGVJbnRyaW5zaWNOb2RlKj4oZnVuYyk7CiAgICAgICAgIGlmIChpbnRyaW5zaWMtPnR5cGUo
KSA9PSBCeXRlY29kZUludHJpbnNpY05vZGU6OlR5cGU6OkNvbnN0YW50KQogICAgICAgICAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKEJ5dGVjb2Rl
SW50cmluc2ljTm9kZTo6VHlwZTo6RnVuY3Rpb24sIGxvY2F0aW9uLCBpbnRyaW5zaWMtPmVtaXR0
ZXIoKSwgaW50cmluc2ljLT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCk7CiAgICAgfQorCisgICAgLy8gRG9uJ3QgcGFyc2UgYSBkb3VibHktb3B0aW9uYWwg
YWNjZXNzLWFuZC1jYWxsIG5vZGUgKGUuZy4gYGE/LmI/LigpYCkgYXMgdHdvIG9wdGlvbmFsIGNo
YWlucywgb3Igd2UnbGwgbG9zZSBvdXIgYHRoaXNgIHZhbHVlLgorICAgIGlmIChmdW5jLT5pc09w
dGlvbmFsQ2hhaW4oKSkgeworICAgICAgICBPcHRpb25hbENoYWluTm9kZSogb3B0aW9uYWxDaGFp
biA9IHN0YXRpY19jYXN0PE9wdGlvbmFsQ2hhaW5Ob2RlKj4oZnVuYyk7CisgICAgICAgIGlmIChv
cHRpb25hbENoYWluLT5leHByKCktPmlzTG9jYXRpb24oKSkgeworICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChpc09wdGlvbmFsQ2FsbCwgaXNPcHRpb25hbENhbGwpOworICAgICAgICAgICAgQVNT
RVJUKCFvcHRpb25hbENoYWluLT5leHByKCktPmlzUmVzb2x2ZU5vZGUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gbWFrZUZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIG9wdGlvbmFsQ2hhaW4tPmV4
cHIoKSwgcHJldmlvdXNCYXNlV2FzU3VwZXIsIGFyZ3MsIGRpdm90U3RhcnQsIGRpdm90LCBkaXZv
dEVuZCwgY2FsbE9yQXBwbHlDaGlsZERlcHRoLCBpc09wdGlvbmFsQ2FsbCk7CisgICAgICAgIH0K
KyAgICB9CisKICAgICBpZiAoIWZ1bmMtPmlzTG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuIG5l
dyAobV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGxvY2F0aW9uLCBmdW5jLCBh
cmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgIGlmIChmdW5jLT5pc1Jlc29s
dmVOb2RlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKaW5kZXggZTk4
Y2RiNWU1OWUyMzA3MmMxOTAxOGY4N2QxMGMyZDQ1MmQ5Y2QzOS4uZjFiZDYzNmQ2ZjQ2NDc3MTJk
YjA0NGRmODEyZmZmZDZkYTE3NDJiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9MZXhlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhl
ci5jcHAKQEAgLTIxNTcsMTAgKzIxNTcsMTcgQEAgc3RhcnQ6CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQ2hhcmFjdGVyUXVlc3Rpb246CiAgICAgICAgIHNoaWZ0KCk7Ci0gICAgICAgIGlmIChP
cHRpb25zOjp1c2VOdWxsaXNoQ29hbGVzY2luZygpICYmIG1fY3VycmVudCA9PSAnPycpIHsKLSAg
ICAgICAgICAgIHNoaWZ0KCk7Ci0gICAgICAgICAgICB0b2tlbiA9IENPQUxFU0NFOwotICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VOdWxsaXNoQXdhcmVPcGVyYXRv
cnMoKSkgeworICAgICAgICAgICAgaWYgKG1fY3VycmVudCA9PSAnPycpIHsKKyAgICAgICAgICAg
ICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIHRva2VuID0gQ09BTEVTQ0U7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9jdXJyZW50
ID09ICcuJyAmJiAhaXNBU0NJSURpZ2l0KHBlZWsoMSkpKSB7CisgICAgICAgICAgICAgICAgc2hp
ZnQoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFFVRVNUSU9ORE9UOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHRva2VuID0gUVVF
U1RJT047CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVDb25zdHJ1Y3RvcnMuaAppbmRleCBkNDFlM2FlZDhlNDVmN2E4ZTJmZDMxYzI0NDc3ZGVj
Y2I4ZDU2NDBmLi4wNjhiMjZjODI4YTM2ZWI2ZWVlNWFkMjRkNTQwNTExOTMxODhmYmI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaApAQCAt
Njc2LDYgKzY3NiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCisgICAgaW5s
aW5lIE9wdGlvbmFsQ2hhaW5Ob2RlOjpPcHRpb25hbENoYWluTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcikKKyAgICAgICAgOiBFeHByZXNz
aW9uTm9kZShsb2NhdGlvbikKKyAgICAgICAgLCBtX2V4cHIoZXhwcikKKyAgICB7CisgICAgfQor
CiAgICAgaW5saW5lIENvbmRpdGlvbmFsTm9kZTo6Q29uZGl0aW9uYWxOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsb2dpY2FsLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMikKICAgICAgICAgOiBFeHByZXNzaW9u
Tm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX2xvZ2ljYWwobG9naWNhbCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCA4NmZkYWYzZDA0ZmQwZDhmN2Y0ODdkMTc3Mzc3ZTJh
MzdlOTVhNzg3Li45MDkzNDA0OWMxNjhjODk5ODI1ZWRlZmY5YTAzYTk5ZGYwMDJhZDkwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC0yMDUsNiArMjA1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0J5dGVjb2RlSW50cmluc2ljTm9kZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0JpbmFyeU9w
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0Z1
bmN0aW9uQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9v
bCBpc09wdGlvbmFsQ2hhaW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0
b3ImLCBMYWJlbCYsIExhYmVsJiwgRmFsbFRocm91Z2hNb2RlKTsKIApAQCAtMjEyLDggKzIxMywx
MiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBSZXN1bHRUeXBlIHJlc3VsdERlc2NyaXB0
b3IoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdFR5cGU7IH0KIAorICAgICAgICBib29sIGlzT3B0
aW9uYWxDaGFpbkJhc2UoKSBjb25zdCB7IHJldHVybiBtX2lzT3B0aW9uYWxDaGFpbkJhc2U7IH0K
KyAgICAgICAgdm9pZCBzZXRJc09wdGlvbmFsQ2hhaW5CYXNlKCkgeyBtX2lzT3B0aW9uYWxDaGFp
bkJhc2UgPSB0cnVlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBSZXN1bHRUeXBlIG1fcmVz
dWx0VHlwZTsKKyAgICAgICAgYm9vbCBtX2lzT3B0aW9uYWxDaGFpbkJhc2UgeyBmYWxzZSB9Owog
ICAgIH07CiAKICAgICBjbGFzcyBTdGF0ZW1lbnROb2RlIDogcHVibGljIE5vZGUgewpAQCAtMTMx
MCwxMiArMTMxNSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29hbGVzY2VOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIyKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CisgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gbnVsbHB0cikgZmluYWw7CiAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjE7
CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHIyOwogICAgIH07CiAKKyAgICBjbGFzcyBP
cHRpb25hbENoYWluTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgcHVi
bGljOgorICAgICAgICBPcHRpb25hbENoYWluTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uTm9kZSopOworCisgICAgICAgIHZvaWQgc2V0RXhwcihFeHByZXNzaW9uTm9kZSog
ZXhwcikgeyBtX2V4cHIgPSBleHByOyB9CisgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBleHByKCkg
Y29uc3QgeyByZXR1cm4gbV9leHByOyB9CisKKyAgICAgICAgdm9pZCBzZXRJc0RlbGV0ZSgpIHsg
bV9pc0RlbGV0ZSA9IHRydWU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gbnVsbHB0cikg
ZmluYWw7CisKKyAgICAgICAgYm9vbCBpc09wdGlvbmFsQ2hhaW4oKSBjb25zdCBmaW5hbCB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjsKKyAgICAgICAg
Ym9vbCBtX2lzRGVsZXRlIHsgZmFsc2UgfTsKKyAgICB9OworCiAgICAgLy8gVGhlIHRlcm5hcnkg
b3BlcmF0b3IsICJtX2xvZ2ljYWwgPyBtX2V4cHIxIDogbV9leHByMiIKICAgICBjbGFzcyBDb25k
aXRpb25hbE5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBmOGRiZTcxOTZmMTEx
NzE2ZDBhNThmN2Y1N2UzZjhmNjdiN2EyYWNmLi5iZmYyMmNmZjgxZWZmMGQ5YmY4MTM2NmI5OTgx
NjJmYzI0NGJhMDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBA
IC00ODA4LDEwMyArNDgwOCwxMzYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXMKICAgICB9CiAK
ICAgICBmYWlsSWZGYWxzZShiYXNlLCAiQ2Fubm90IHBhcnNlIGJhc2UgZXhwcmVzc2lvbiIpOwot
ICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwot
ICAgICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7Ci0gICAgICAgIGNhc2UgT1BFTkJSQUNL
RVQ6IHsKLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3Vu
dCsrOwotICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tl
bkVuZFBvc2l0aW9uKCk7CisKKyAgICBkbyB7CisgICAgICAgIFRyZWVFeHByZXNzaW9uIG9wdGlv
bmFsQ2hhaW5CYXNlID0gMDsKKyAgICAgICAgSlNUb2tlbkxvY2F0aW9uIG9wdGlvbmFsQ2hhaW5M
b2NhdGlvbjsKKyAgICAgICAgSlNUb2tlblR5cGUgdHlwZSA9IG1fdG9rZW4ubV90eXBlOworCisg
ICAgICAgIGlmIChtYXRjaChRVUVTVElPTkRPVCkpIHsKKyAgICAgICAgICAgIHNlbWFudGljRmFp
bElmVHJ1ZShuZXdDb3VudCwgIkNhbm5vdCBjYWxsIGNvbnN0cnVjdG9yIGluIGFuIG9wdGlvbmFs
IGNoYWluIik7CisgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3VwZXIsICJD
YW5ub3QgdXNlIHN1cGVyIGFzIHRoZSBiYXNlIG9mIGFuIG9wdGlvbmFsIGNoYWluIik7CisgICAg
ICAgICAgICBvcHRpb25hbENoYWluQmFzZSA9IGJhc2U7CisgICAgICAgICAgICBvcHRpb25hbENo
YWluTG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKCk7CisKKyAgICAgICAgICAgIFNhdmVQb2ludCBz
YXZlUG9pbnQgPSBjcmVhdGVTYXZlUG9pbnQoKTsKICAgICAgICAgICAgIG5leHQoKTsKLSAgICAg
ICAgICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Ci0gICAg
ICAgICAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50
Q291bnQ7Ci0gICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVz
c2lvbihjb250ZXh0KTsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90
IHBhcnNlIHN1YnNjcmlwdCBleHByZXNzaW9uIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4
dC5jcmVhdGVCcmFja2V0QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHByb3BlcnR5LCBpbml0
aWFsQXNzaWdubWVudHMgIT0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQsIGV4cHJlc3Np
b25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1cGVyICYmIGN1cnJlbnRTY29wZSgp
LT5pc0Fycm93RnVuY3Rpb24oKSkpCi0gICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uU2Nv
cGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNLRVQsICJd
IiwgImVuZCIsICJzdWJzY3JpcHQgZXhwcmVzc2lvbiIpOwotICAgICAgICAgICAgbV9wYXJzZXJT
dGF0ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OwotICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBpZiAobWF0Y2goT1BFTkJSQUNLRVQpIHx8IG1hdGNoKE9QRU5QQVJFTikgfHwgbWF0
Y2goQkFDS1FVT1RFKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gbV90b2tlbi5tX3R5cGU7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0eXBlID0gRE9UOworICAgICAgICAg
ICAgICAgIHJlc3RvcmVTYXZlUG9pbnQoc2F2ZVBvaW50KTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBjYXNlIE9QRU5QQVJFTjogewotICAgICAgICAgICAgbV9wYXJzZXJTdGF0
ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBpbnQgbm9uTEhTQ291
bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OwotICAgICAgICAgICAgaWYgKG5ld0NvdW50
KSB7Ci0gICAgICAgICAgICAgICAgbmV3Q291bnQtLTsKLSAgICAgICAgICAgICAgICBKU1RleHRQ
b3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAg
ICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQp
OwotICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBj
YWxsIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5l
d0V4cHIobG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNz
aW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgc2l6ZV90IHVzZWRWYXJpYWJsZXNTaXplID0gY3VycmVudFNjb3BlKCkt
PmN1cnJlbnRVc2VkVmFyaWFibGVzU2l6ZSgpOworCisgICAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBPUEVOQlJBQ0tFVDogeworICAgICAgICAgICAg
ICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwogICAgICAgICAg
ICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpOwotICAgICAgICAgICAgICAgIE9wdGlvbmFsPENhbGxPckFwcGx5RGVwdGhTY29wZT4gY2Fs
bE9yQXBwbHlEZXB0aFNjb3BlOwotICAgICAgICAgICAgICAgIHJlY29yZENhbGxPckFwcGx5RGVw
dGg8VHJlZUJ1aWxkZXI+KHRoaXMsICptX3ZtLCBjYWxsT3JBcHBseURlcHRoU2NvcGUsIGJhc2Up
OworICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICBpbnQgbm9uTEhTQ291
bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIGludCBpbml0
aWFsQXNzaWdubWVudHMgPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudDsKKyAgICAgICAg
ICAgICAgICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJzZSBz
dWJzY3JpcHQgZXhwcmVzc2lvbiIpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNy
ZWF0ZUJyYWNrZXRBY2Nlc3Moc3RhcnRMb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRpYWxB
c3NpZ25tZW50cyAhPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lvblN0
YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwogCi0gICAgICAgICAgICAg
ICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIgJiYgY3VycmVudFNjb3BlKCkt
PmlzQXJyb3dGdW5jdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9u
U2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKIAotICAg
ICAgICAgICAgICAgIGlmIChiYXNlSXNBc3luY0tleXdvcmQgJiYgKCFhcmd1bWVudHMgfHwgbWF0
Y2goQVJST1dGVU5DVElPTikpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZSgp
LT5yZXZlcnRUb1ByZXZpb3VzVXNlZFZhcmlhYmxlcyh1c2VkVmFyaWFibGVzU2l6ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvcmNlQ2xhc3NpZnlFeHByZXNzaW9uRXJyb3IoRXJyb3JJbmRpY2F0
ZXNBc3luY0Fycm93RnVuY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBmYWlsRHVlVG9VbmV4
cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFuZGxl
UHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIsICJzdWJzY3JpcHQgZXhw
cmVzc2lvbiIpOworICAgICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBu
b25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgT1BFTlBBUkVOOiB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5u
b25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CisgICAgICAgICAgICAgICAgaW50IG5vbkxIU0Nv
dW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBpZiAobmV3
Q291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q291bnQtLTsKKyAgICAgICAgICAgICAg
ICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9u
KCk7CisgICAgICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VB
cmd1bWVudHMoY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3Vt
ZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50cyIpOworICAgICAgICAgICAgICAgICAg
ICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMs
IGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVz
ZWRWYXJpYWJsZXNTaXplID0gY3VycmVudFNjb3BlKCktPmN1cnJlbnRVc2VkVmFyaWFibGVzU2l6
ZSgpOworICAgICAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0g
bGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWw8Q2Fs
bE9yQXBwbHlEZXB0aFNjb3BlPiBjYWxsT3JBcHBseURlcHRoU2NvcGU7CisgICAgICAgICAgICAg
ICAgICAgIHJlY29yZENhbGxPckFwcGx5RGVwdGg8VHJlZUJ1aWxkZXI+KHRoaXMsICptX3ZtLCBj
YWxsT3JBcHBseURlcHRoU2NvcGUsIGJhc2UpOworCisgICAgICAgICAgICAgICAgICAgIFRyZWVB
cmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCk7CiAKLSAgICAgICAg
ICAgICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMsICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1bWVu
dHMiKTsKLSAgICAgICAgICAgICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgU2NvcGVSZWYgZnVuY3Rpb25TY29wZSA9IGN1cnJlbnRGdW5jdGlvblNjb3BlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghZnVuY3Rpb25TY29wZS0+c2V0SGFzRGlyZWN0U3VwZXIo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQgdW5uZWNlc3NhcnkgdG8gY2hlY2sg
b2YgdXNpbmcgc3VwZXIgZHVyaW5nIHJlcGFyc2luZyBvbmUgbW9yZSB0aW1lLiBBbHNvIGl0IGNh
biBsZWFkIHRvIHN5bnRheCBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2Fz
ZSBvZiBhcnJvdyBmdW5jdGlvbiBiZWNhdXNlIGR1cmluZyByZXBhcnNpbmcgd2UgZG9uJ3Qga25v
dyB3aGV0aGVyIHdlIGN1cnJlbnRseSBwYXJzZSB0aGUgYXJyb3cgZnVuY3Rpb24KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGluc2lkZSBvZiB0aGUgY29uc3RydWN0b3Igb3IgbWV0aG9kLgot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2xleGVyLT5pc1JlcGFyc2luZ0Z1bmN0aW9u
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY29wZVJlZiBjbG9zZXN0T3JkaW5h
cnlGdW5jdGlvblNjb3BlID0gY2xvc2VzdFBhcmVudE9yZGluYXJ5RnVuY3Rpb25Ob25MZXhpY2Fs
U2NvcGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvcktpbmQgZnVu
Y3Rpb25Db25zdHJ1Y3RvcktpbmQgPSAhZnVuY3Rpb25TY29wZS0+aXNBcnJvd0Z1bmN0aW9uKCkg
JiYgIWNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmlzRXZhbENvbnRleHQoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9yS2lu
ZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2xvc2VzdE9yZGluYXJ5RnVu
Y3Rpb25TY29wZS0+Y29uc3RydWN0b3JLaW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VtYW50aWNGYWlsSWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kID09IENvbnN0cnVj
dG9yS2luZDo6Tm9uZSwgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25z
dHJ1Y3RvcktpbmQgIT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzLCAic3VwZXIgaXMgbm90IHZh
bGlkIGluIHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZUlzQXN5
bmNLZXl3b3JkICYmICghYXJndW1lbnRzIHx8IG1hdGNoKEFSUk9XRlVOQ1RJT04pKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnJldmVydFRvUHJldmlvdXNVc2Vk
VmFyaWFibGVzKHVzZWRWYXJpYWJsZXNTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
cmNlQ2xhc3NpZnlFeHByZXNzaW9uRXJyb3IoRXJyb3JJbmRpY2F0ZXNBc3luY0Fycm93RnVuY3Rp
b24pOworICAgICAgICAgICAgICAgICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRva2VuKCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBmYWlsSWZGYWxz
ZShhcmd1bWVudHMsICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1bWVudHMiKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGJhc2VJc1N1cGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTY29w
ZVJlZiBmdW5jdGlvblNjb3BlID0gY3VycmVudEZ1bmN0aW9uU2NvcGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghZnVuY3Rpb25TY29wZS0+c2V0SGFzRGlyZWN0U3VwZXIoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0IHVubmVjZXNzYXJ5IHRvIGNoZWNrIG9m
IHVzaW5nIHN1cGVyIGR1cmluZyByZXBhcnNpbmcgb25lIG1vcmUgdGltZS4gQWxzbyBpdCBjYW4g
bGVhZCB0byBzeW50YXggZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBj
YXNlIG9mIGFycm93IGZ1bmN0aW9uIGJlY2F1c2UgZHVyaW5nIHJlcGFyc2luZyB3ZSBkb24ndCBr
bm93IHdoZXRoZXIgd2UgY3VycmVudGx5IHBhcnNlIHRoZSBhcnJvdyBmdW5jdGlvbgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGluc2lkZSBvZiB0aGUgY29uc3RydWN0b3Igb3IgbWV0
aG9kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9sZXhlci0+aXNSZXBhcnNp
bmdGdW5jdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjb3BlUmVm
IGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUgPSBjbG9zZXN0UGFyZW50T3JkaW5hcnlGdW5j
dGlvbk5vbkxleGljYWxTY29wZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b25zdHJ1Y3RvcktpbmQgZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPSAhZnVuY3Rpb25TY29wZS0+
aXNBcnJvd0Z1bmN0aW9uKCkgJiYgIWNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmlzRXZh
bENvbnRleHQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmdW5jdGlv
blNjb3BlLT5jb25zdHJ1Y3RvcktpbmQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBjbG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlLT5jb25zdHJ1Y3RvcktpbmQoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGZ1bmN0
aW9uQ29uc3RydWN0b3JLaW5kID09IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgInN1cGVyIGlzIG5v
dCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VtYW50aWNGYWlsSWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kICE9IENvbnN0cnVj
dG9yS2luZDo6RXh0ZW5kcywgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5j
dGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPnNldElu
bmVyQXJyb3dGdW5jdGlvblVzZXNTdXBlckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigp
KQotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+c2V0SW5uZXJBcnJvd0Z1
bmN0aW9uVXNlc1N1cGVyQ2FsbCgpOworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNPcHRp
b25hbENhbGwgPSBvcHRpb25hbENoYWluTG9jYXRpb24uZW5kT2Zmc2V0ID09IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihleHByZXNzaW9uRW5kLm9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGJh
c2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHBy
ZXZpb3VzQmFzZVdhc1N1cGVyLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGNh
bGxPckFwcGx5RGVwdGhTY29wZSA/IGNhbGxPckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFuY2VUb0lu
bmVybW9zdENoaWxkKCkgOiAwLCBpc09wdGlvbmFsQ2FsbCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzT3B0aW9uYWxDYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxD
aGFpbkJhc2UgPSBiYXNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBiYXNl
ID0gY29udGV4dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShzdGFydExvY2F0aW9uLCBiYXNlLCBwcmV2
aW91c0Jhc2VXYXNTdXBlciwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQsCi0gICAgICAgICAg
ICAgICAgICAgIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGNhbGxPckFw
cGx5RGVwdGhTY29wZSA/IGNhbGxPckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFuY2VUb0lubmVybW9z
dENoaWxkKCkgOiAwKTsKKyAgICAgICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50
ID0gbm9uTEhTQ291bnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIERPVDogewotICAgICAgICAg
ICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAg
ICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsK
LSAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVSZXNlcnZl
ZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKLSAgICAgICAgICAgIG1h
dGNoT3JGYWlsKElERU5ULCAiRXhwZWN0ZWQgYSBwcm9wZXJ0eSBuYW1lIGFmdGVyICcuJyIpOwot
ICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKHN0YXJ0TG9jYXRpb24s
IGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25F
bmQsIHRva2VuRW5kUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZUlz
U3VwZXIgJiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKLSAgICAgICAgICAg
ICAgICBjdXJyZW50RnVuY3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3Vw
ZXJQcm9wZXJ0eSgpOwotICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBCQUNLUVVPVEU6IHsKLSAgICAgICAgICAgIHNlbWFudGlj
RmFpbElmVHJ1ZShiYXNlSXNTdXBlciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGFnIGZvciB0YWdn
ZWQgdGVtcGxhdGVzIik7Ci0gICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5k
ID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9
IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICB0eXBlbmFtZSBUcmVlQnVp
bGRlcjo6VGVtcGxhdGVMaXRlcmFsIHRlbXBsYXRlTGl0ZXJhbCA9IHBhcnNlVGVtcGxhdGVMaXRl
cmFsKGNvbnRleHQsIExleGVyVHlwZTo6UmF3U3RyaW5nc0J1aWxkTW9kZTo6QnVpbGRSYXdTdHJp
bmdzKTsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKHRlbXBsYXRlTGl0ZXJhbCwgIkNhbm5vdCBw
YXJzZSB0ZW1wbGF0ZSBsaXRlcmFsIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVh
dGVUYWdnZWRUZW1wbGF0ZShzdGFydExvY2F0aW9uLCBiYXNlLCB0ZW1wbGF0ZUxpdGVyYWwsIGV4
cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7Ci0g
ICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAg
ICAgICAgICBtX3NlZW5UYWdnZWRUZW1wbGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ290byBlbmRNZW1iZXJF
eHByZXNzaW9uOworICAgICAgICAgICAgY2FzZSBET1Q6IHsKKyAgICAgICAgICAgICAgICBtX3Bh
cnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgICAgICAgICBK
U1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKyAg
ICAgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2
ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CisgICAgICAgICAgICAg
ICAgbWF0Y2hPckZhaWwoSURFTlQsICJFeHBlY3RlZCBhIHByb3BlcnR5IG5hbWUgYWZ0ZXIgIiwg
b3B0aW9uYWxDaGFpbkJhc2UgPyAiJz8uJyIgOiAiJy4nIik7CisgICAgICAgICAgICAgICAgYmFz
ZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIG1fdG9rZW4u
bV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9z
aXRpb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1cGVyICYmIGN1
cnJlbnRTY29wZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRGdW5jdGlvblNjb3BlKCktPnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNTdXBlclByb3Bl
cnR5KCk7CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBCQUNLUVVPVEU6IHsKKyAgICAgICAgICAg
ICAgICBzZW1hbnRpY0ZhaWxJZlRydWUob3B0aW9uYWxDaGFpbkJhc2UsICJDYW5ub3QgdXNlIHRh
Z2dlZCB0ZW1wbGF0ZXMgaW4gYW4gb3B0aW9uYWwgY2hhaW4iKTsKKyAgICAgICAgICAgICAgICBz
ZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3VwZXIsICJDYW5ub3QgdXNlIHN1cGVyIGFzIHRhZyBm
b3IgdGFnZ2VkIHRlbXBsYXRlcyIpOworICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4
cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIGlu
dCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CisgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OlRlbXBsYXRlTGl0ZXJhbCB0ZW1wbGF0ZUxpdGVyYWwg
PSBwYXJzZVRlbXBsYXRlTGl0ZXJhbChjb250ZXh0LCBMZXhlclR5cGU6OlJhd1N0cmluZ3NCdWls
ZE1vZGU6OkJ1aWxkUmF3U3RyaW5ncyk7CisgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UodGVt
cGxhdGVMaXRlcmFsLCAiQ2Fubm90IHBhcnNlIHRlbXBsYXRlIGxpdGVyYWwiKTsKKyAgICAgICAg
ICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVUYWdnZWRUZW1wbGF0ZShzdGFydExvY2F0aW9u
LCBiYXNlLCB0ZW1wbGF0ZUxpdGVyYWwsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwg
bGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5u
b25MSFNDb3VudCA9IG5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIG1fc2VlblRhZ2dlZFRl
bXBsYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZ290byBlbmRPZkNoYWluOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcHJldmlvdXNCYXNlV2FzU3VwZXIgPSBiYXNlSXNTdXBl
cjsKKyAgICAgICAgICAgIGJhc2VJc1N1cGVyID0gZmFsc2U7CisgICAgICAgICAgICB0eXBlID0g
bV90b2tlbi5tX3R5cGU7CiAgICAgICAgIH0KLSAgICAgICAgcHJldmlvdXNCYXNlV2FzU3VwZXIg
PSBiYXNlSXNTdXBlcjsKLSAgICAgICAgYmFzZUlzU3VwZXIgPSBmYWxzZTsKLSAgICB9Ci1lbmRN
ZW1iZXJFeHByZXNzaW9uOgorZW5kT2ZDaGFpbjoKKyAgICAgICAgaWYgKG9wdGlvbmFsQ2hhaW5C
YXNlKQorICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlT3B0aW9uYWxDaGFpbihvcHRp
b25hbENoYWluTG9jYXRpb24sIG9wdGlvbmFsQ2hhaW5CYXNlLCBiYXNlKTsKKyAgICB9IHdoaWxl
IChtYXRjaChRVUVTVElPTkRPVCkpOworCiAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGJhc2VJc1N1
cGVyLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOwogICAgIHdoaWxlIChu
ZXdDb3VudC0tKQogICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9u
LCBiYXNlLCBleHByZXNzaW9uU3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKaW5kZXggMTVjYTVlYWYyOGU3
NTkyZjQzZjNkY2U0MWU4ZTQxZTYxYTllODEzNi4uNzIwNjRiOTI4NDgxNjZmNmRlMmIyM2Y4YTNm
NThjOTgxYjc2NzllOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXJUb2tlbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRv
a2Vucy5oCkBAIC0xMzYsNiArMTM2LDcgQEAgZW51bSBKU1Rva2VuVHlwZSB7CiAgICAgT1JFUVVB
TCwKICAgICBET1RET1RET1QsCiAgICAgQVJST1dGVU5DVElPTiwKKyAgICBRVUVTVElPTkRPVCwK
ICAgICBMYXN0VW50YWdnZWRUb2tlbiwKIAogICAgIC8vIEJlZ2luIHRhZ2dlZCB0b2tlbnMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKaW5kZXggNDE5OTU4
YmVkYjQyODExYjE2Mjg0MDFjZDRhNDI5OGE1YTVjZjM3Ni4uNjFkZDc1MDA0YmM0N2JmYTU0ZjM1
ZWQ3MWRlMjJmZGU0N2NiMmQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9TeW50YXhDaGVja2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
eW50YXhDaGVja2VyLmgKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgICAgICBSZXNvbHZl
RXZhbEV4cHIsIFJlc29sdmVFeHByLCBJbnRlZ2VyRXhwciwgRG91YmxlRXhwciwgU3RyaW5nRXhw
ciwgQmlnSW50RXhwciwKICAgICAgICAgVGhpc0V4cHIsIE51bGxFeHByLCBCb29sRXhwciwgUmVn
RXhwRXhwciwgT2JqZWN0TGl0ZXJhbEV4cHIsCiAgICAgICAgIEZ1bmN0aW9uRXhwciwgQ2xhc3NF
eHByLCBTdXBlckV4cHIsIEltcG9ydEV4cHIsIEJyYWNrZXRFeHByLCBEb3RFeHByLCBDYWxsRXhw
ciwKLSAgICAgICAgTmV3RXhwciwgUHJlRXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5
RXhwciwKKyAgICAgICAgTmV3RXhwciwgUHJlRXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwgQmlu
YXJ5RXhwciwgT3B0aW9uYWxDaGFpbiwKICAgICAgICAgQ29uZGl0aW9uYWxFeHByLCBBc3NpZ25t
ZW50RXhwciwgVHlwZW9mRXhwciwKICAgICAgICAgRGVsZXRlRXhwciwgQXJyYXlMaXRlcmFsRXhw
ciwgQmluZGluZ0Rlc3RydWN0dXJpbmcsIFJlc3RQYXJhbWV0ZXIsCiAgICAgICAgIEFycmF5RGVz
dHJ1Y3R1cmluZywgT2JqZWN0RGVzdHJ1Y3R1cmluZywgU291cmNlRWxlbWVudHNSZXN1bHQsCkBA
IC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250
QnVpbGRTdHJpbmdzID0gTGV4ZXJGbGFnc0RvbnRCdWlsZFN0cmluZ3M7CiAKICAgICBpbnQgY3Jl
YXRlU291cmNlRWxlbWVudHMoKSB7IHJldHVybiBTb3VyY2VFbGVtZW50c1Jlc3VsdDsgfQotICAg
IEV4cHJlc3Npb25UeXBlIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGludCwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50LCBzaXplX3QpIHsgcmV0dXJuIENhbGxF
eHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGludCwgaW50LCBpbnQsIGludCwg
c2l6ZV90LCBib29sKSB7IHJldHVybiBDYWxsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNy
ZWF0ZUNvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSBleHBy
KSB7IHJldHVybiBleHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgYXBwZW5kVG9Db21tYUV4cHIo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUmIGhlYWQsIEV4cHJlc3Npb25U
eXBlLCBFeHByZXNzaW9uVHlwZSBuZXh0KSB7IGhlYWQgPSBuZXh0OyByZXR1cm4gbmV4dDsgfQog
ICAgIEV4cHJlc3Npb25UeXBlIG1ha2VBc3NpZ25Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGJvb2wsIGlu
dCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CkBAIC0xODQsNiArMTg0LDcg
QEAgcHVibGljOgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlZ0V4cChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBm
bGFncywgaW50KSB7IHJldHVybiBZYXJyOjpoYXNFcnJvcihZYXJyOjpjaGVja1N5bnRheChwYXR0
ZXJuLnN0cmluZygpLCBmbGFncy5zdHJpbmcoKSkpID8gMCA6IFJlZ0V4cEV4cHI7IH0KICAgICBF
eHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0KICAgICBF
eHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25UeXBlLCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQorICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZU9wdGlvbmFsQ2hhaW4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lv
blR5cGUsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBPcHRpb25hbENoYWluOyB9CiAgICAgRXhw
cmVzc2lvblR5cGUgY3JlYXRlQ29uZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJu
IENvbmRpdGlvbmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFzc2lnblJlc29s
dmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25U
eXBlLCBpbnQsIGludCwgaW50LCBBc3NpZ25tZW50Q29udGV4dCkgeyByZXR1cm4gQXNzaWdubWVu
dEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVFbXB0eVZhckV4cHJlc3Npb24oY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYpIHsgcmV0dXJuIEFzc2lnbm1l
bnRFeHByOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkhlbHBlcnMuY3BwCmluZGV4IDE1NmMxODBlMTgzNDdmNDdjOTM5MDQ1OWU1ZDIxNzUxMWI5ODMx
ZmYuLjllNzU4OTJlNTA3NjU3MTUyYmNiMzczYjZmMGI1ODgyNmMxNTRjMjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCkBAIC0x
NzYsNiArMTc2LDEwIEBAIHN0YXRpYyBTdHJpbmcgZnVuY3Rpb25DYWxsQmFzZShjb25zdCBTdHJp
bmcmIHNvdXJjZVRleHQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKKyAgICAv
LyBEb24ndCBkaXNwbGF5IHRoZSA/LiBvZiBhbiBvcHRpb25hbCBjYWxsLgorICAgIGlmIChpZHgg
PiAxICYmIHNvdXJjZVRleHRbaWR4XSA9PSAnLicgJiYgc291cmNlVGV4dFtpZHggLSAxXSA9PSAn
PycpCisgICAgICAgIGlkeCAtPSAyOworCiAgICAgcmV0dXJuIHNvdXJjZVRleHQubGVmdChpZHgg
KyAxKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDBk
NTgyZWVhYzMzZWNhMGU0YWQ4ZTQ4OTY1OWI0MzAxOWQ0NGU3YWMuLjdiYjEzZTRlZTk4MGM1OGY3
MGQ4MTE0OGI4MTg2OTA2Mzc5NGVlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgKQEAgLTQ5Niw3ICs0OTYsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3Nl
bWJseVN0cmVhbWluZ0FwaSA9IGZhbHNlOwogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlSZWZl
cmVuY2VzLCBmYWxzZSwgTm9ybWFsLCAiQWxsb3cgdHlwZXMgZnJvbSB0aGUgd2FzbSByZWZlcmVu
Y2VzIHNwZWMuIikgXAogICAgIHYoYm9vbCwgdXNlV2Vha1JlZnMsIGZhbHNlLCBOb3JtYWwsICJF
eHBvc2UgdGhlIFdlYWtSZWYgY29uc3RydWN0b3IuIikgXAogICAgIHYoYm9vbCwgdXNlQmlnSW50
LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBlbmFibGUgQmlnSW50IHN1cHBvcnQu
IikgXAotICAgIHYoYm9vbCwgdXNlTnVsbGlzaENvYWxlc2NpbmcsIGZhbHNlLCBOb3JtYWwsICJF
bmFibGUgc3VwcG9ydCBmb3IgdGhlID8/IG9wZXJhdG9yLiIpIFwKKyAgICB2KGJvb2wsIHVzZU51
bGxpc2hBd2FyZU9wZXJhdG9ycywgZmFsc2UsIE5vcm1hbCwgIkVuYWJsZSBzdXBwb3J0IGZvciA/
LiBhbmQgPz8gb3BlcmF0b3JzLiIpIFwKICAgICB2KGJvb2wsIHVzZUFycmF5QWxsb2NhdGlvblBy
b2ZpbGluZywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ugb3VyIG5vcm1hbCBh
cnJheSBhbGxvY2F0aW9uIHByb2ZpbGluZy4gSWYgZmFsc2UsIHRoZSBhbGxvY2F0aW9uIHByb2Zp
bGUgd2lsbCBhbHdheXMgY2xhaW0gdG8gYmUgdW5kZWNpZGVkLiIpIFwKICAgICB2KGJvb2wsIGZv
cmNlUG9seVByb3RvLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgY3JlYXRlX3RoaXMgd2lsbCBh
bHdheXMgY3JlYXRlIGFuIG9iamVjdCB3aXRoIGEgcG9seSBwcm90byBzdHJ1Y3R1cmUuIikgXAog
ICAgIHYoYm9vbCwgZm9yY2VNaW5pVk1Nb2RlLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgaXQg
d2lsbCBmb3JjZSBtaW5pIFZNIG1vZGUgb24uIikgXApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDYyZmYzZWViMmQ3MGMwOTgwMTE0ZGMxODdjNzBm
OTgwM2YxY2U5MDguLmRlZjliMjJjYmIzOTFlZmEzZGRkNGExYTRjMzc1MjkxZTM2NWUyYjAgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMiBAQAorMjAxOS0wOC0xMyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5j
b20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMDgtMTIgIFRha2FzaGkgS29tb3JpICA8VGFrYXNo
aS5Lb21vcmlAc29ueS5jb20+CiAKICAgICAgICAgW1dURl0gVGhyZWFkOjpyZW1vdmVGcm9tVGhy
ZWFkR3JvdXAgbGVha3Mgd2VhayBwb2ludGVycy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3Rz
CmluZGV4IDgzZGMwNjJhYjI4MjExNjFhOTMxYzJhYmU0M2RmNWY2NjlhODhkYTkuLjA5ODcyMzUz
NjBkMjQ0NGQxN2JiZTljM2E4YmVhZTFiYzkxZTk5NGUgMTAwNzU1Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVz
cy10ZXN0cwpAQCAtNjk5LDggKzY5OSw4IEBAIGRlZiBydW5CaWdJbnRFbmFibGVkKCpvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAgcnVuKCJiaWctaW50LWVuYWJsZWQiLCAiLS11c2VC
aWdJbnQ9dHJ1ZSIgLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KSkKIGVuZAogCi1kZWYgcnVuTnVsbGlzaENvYWxlc2NpbmdFbmFibGVkKCpvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJudWxsaXNoLWNvYWxlc2NpbmctZW5hYmxlZCIsICIt
LXVzZU51bGxpc2hDb2FsZXNjaW5nPXRydWUiICwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCitkZWYgcnVuTnVsbGlzaEF3YXJlT3BlcmF0b3JzRW5hYmxlZCgq
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQorICAgIHJ1bigibnVsbGlzaC1hd2FyZS1vcGVy
YXRvcnMtZW5hYmxlZCIsICItLXVzZU51bGxpc2hBd2FyZU9wZXJhdG9ycz10cnVlIiAsICooRlRM
X09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5G
VExOb0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZDBhNDgzNTI3MmFiYTkyMzFh
MDRhNjkxZmZlZTcxNWZmMWI2NmE1Yy4uZjYwYzA2N2I4NTZjZmY3ZDBmMjNkM2UyNjA2ZWE1ZDc3
ZWEzOTU3NyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0wOC0xMyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mu
a2lyc2xpbmdAc29ueS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFs
IGNoYWluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDAxOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHN0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanM6CisgICAgICAgICogc3RyZXNzL29wdGlv
bmFsLWNoYWluaW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvdGFpbC1jYWxsLXJlY29n
bml6ZS5qczoKKwogMjAxOS0wOC0wOCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CiAKICAgICAgICAgW0pTQ10gQWRkICJqdW1wIGlmIChub3QpIHVuZGVmaW5lZCBvciBu
dWxsIiBieXRlY29kZSBvcHMKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL251bGxpc2gtY29h
bGVzY2luZy5qcyBiL0pTVGVzdHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qcwppbmRleCBm
M2RkY2E3MDViZDMxNDUyY2E2YTQ1NTUxMzk2MGE5ZDExYWUzMTlkLi44Y2JhZDQ0NDM1ZjJmY2Qw
NTI4NjQxMzhlZTBiN2M1YzNmOGIwMjgxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9udWxs
aXNoLWNvYWxlc2NpbmcuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2FsZXNjaW5n
LmpzCkBAIC0xLDQgKzEsNCBAQAotLy9AIHJ1bk51bGxpc2hDb2FsZXNjaW5nRW5hYmxlZAorLy9A
IHJ1bk51bGxpc2hBd2FyZU9wZXJhdG9yc0VuYWJsZWQKIAogZnVuY3Rpb24gc2hvdWxkQmUoYWN0
dWFsLCBleHBlY3RlZCkgewogICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcuanMgYi9KU1Rlc3RzL3N0cmVzcy9v
cHRpb25hbC1jaGFpbmluZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTA2ZDk3YTBhOWYwYjJiOTE4NDhjZWUz
MWQ0ZjJjYjAxM2FlNTc5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mvb3B0aW9u
YWwtY2hhaW5pbmcuanMKQEAgLTAsMCArMSwxNTcgQEAKKy8vQCBydW5OdWxsaXNoQXdhcmVPcGVy
YXRvcnNFbmFibGVkCisKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAg
ICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBleHBl
Y3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfWApOworfQorCitmdW5jdGlvbiBzaG91
bGRUaHJvd1N5bnRheEVycm9yKHNjcmlwdCkgeworICAgIGxldCBlcnJvcjsKKyAgICB0cnkgewor
ICAgICAgICBldmFsKHNjcmlwdCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9
IGU7CisgICAgfQorCisgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgU3ludGF4RXJyb3IhJyk7Cit9CisKK2Z1
bmN0aW9uIHNob3VsZFRocm93VHlwZUVycm9yKGZ1bmMsIG1lc3NhZ2VQcmVmaXgpIHsKKyAgICBs
ZXQgZXJyb3I7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKworICAgIGlmICghKGVycm9yIGluc3RhbmNlb2Yg
VHlwZUVycm9yKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBUeXBlRXJyb3Ih
Jyk7CisKKyAgICBpZiAoIWVycm9yLm1lc3NhZ2Uuc3RhcnRzV2l0aChtZXNzYWdlUHJlZml4KSkK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeXBlRXJyb3IgaGFzIHdyb25nIG1lc3NhZ2UhJyk7
Cit9CisKK2NvbnN0IG1hc3F1ZXJhZGVyID0gbWFrZU1hc3F1ZXJhZGVyKCk7CittYXNxdWVyYWRl
ci5mb28gPSAzOworCitmdW5jdGlvbiB0ZXN0QmFzaWNDYXNlcygpIHsKKyAgICBzaG91bGRCZSh1
bmRlZmluZWQ/LnZhbHVlT2YoKSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRCZShudWxsPy52YWx1
ZU9mKCksIHVuZGVmaW5lZCk7CisgICAgc2hvdWxkQmUodHJ1ZT8udmFsdWVPZigpLCB0cnVlKTsK
KyAgICBzaG91bGRCZShmYWxzZT8udmFsdWVPZigpLCBmYWxzZSk7CisgICAgc2hvdWxkQmUoMD8u
dmFsdWVPZigpLCAwKTsKKyAgICBzaG91bGRCZSgxPy52YWx1ZU9mKCksIDEpOworICAgIHNob3Vs
ZEJlKCcnPy52YWx1ZU9mKCksICcnKTsKKyAgICBzaG91bGRCZSgnaGknPy52YWx1ZU9mKCksICdo
aScpOworICAgIHNob3VsZEJlKCh7fSk/LmNvbnN0cnVjdG9yLCBPYmplY3QpOworICAgIHNob3Vs
ZEJlKCh7IHg6ICdoaScgfSk/LngsICdoaScpOworICAgIHNob3VsZEJlKFtdPy5sZW5ndGgsIDAp
OworICAgIHNob3VsZEJlKFsnaGknXT8ubGVuZ3RoLCAxKTsKKyAgICBzaG91bGRCZShtYXNxdWVy
YWRlcj8uZm9vLCAzKTsKKworICAgIHNob3VsZEJlKHVuZGVmaW5lZD8uWyd2YWx1ZU9mJ10oKSwg
dW5kZWZpbmVkKTsKKyAgICBzaG91bGRCZShudWxsPy5bJ3ZhbHVlT2YnXSgpLCB1bmRlZmluZWQp
OworICAgIHNob3VsZEJlKHRydWU/LlsndmFsdWVPZiddKCksIHRydWUpOworICAgIHNob3VsZEJl
KGZhbHNlPy5bJ3ZhbHVlT2YnXSgpLCBmYWxzZSk7CisgICAgc2hvdWxkQmUoMD8uWyd2YWx1ZU9m
J10oKSwgMCk7CisgICAgc2hvdWxkQmUoMT8uWyd2YWx1ZU9mJ10oKSwgMSk7CisgICAgc2hvdWxk
QmUoJyc/LlsndmFsdWVPZiddKCksICcnKTsKKyAgICBzaG91bGRCZSgnaGknPy5bJ3ZhbHVlT2Yn
XSgpLCAnaGknKTsKKyAgICBzaG91bGRCZSgoe30pPy5bJ2NvbnN0cnVjdG9yJ10sIE9iamVjdCk7
CisgICAgc2hvdWxkQmUoKHsgeDogJ2hpJyB9KT8uWyd4J10sICdoaScpOworICAgIHNob3VsZEJl
KFtdPy5bJ2xlbmd0aCddLCAwKTsKKyAgICBzaG91bGRCZShbJ2hpJ10/LlswXSwgJ2hpJyk7Cisg
ICAgc2hvdWxkQmUobWFzcXVlcmFkZXI/LlsnZm9vJ10sIDMpOworCisgICAgc2hvdWxkQmUodW5k
ZWZpbmVkPy4oKSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRCZShudWxsPy4oKSwgdW5kZWZpbmVk
KTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiB0cnVlPy4oKSwgJ3RydWUgaXMgbm90
IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiBmYWxzZT8uKCks
ICdmYWxzZSBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgp
ID0+IDA/LigpLCAnMCBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3VsZFRocm93VHlwZUVy
cm9yKCgpID0+IDE/LigpLCAnMSBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3VsZFRocm93
VHlwZUVycm9yKCgpID0+ICcnPy4oKSwgJ1wnXCcgaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBz
aG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAnaGknPy4oKSwgJ1wnaGlcJyBpcyBub3QgYSBmdW5j
dGlvbicpOworICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICh7fSk/LigpLCAnKHt9KSBp
cyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICh7IHg6
ICdoaScgfSk/LigpLCAnKHsgeDogXCdoaVwnIH0pIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CisgICAg
c2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gW10/LigpLCAnW10gaXMgbm90IGEgZnVuY3Rpb24n
KTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiBbJ2hpJ10/LigpLCAnW1wnaGlcJ10g
aXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiBtYXNx
dWVyYWRlcj8uKCksICdtYXNxdWVyYWRlciBpcyBub3QgYSBmdW5jdGlvbicpOworfQorbm9Jbmxp
bmUodGVzdEJhc2ljQ2FzZXMpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKQorICAg
IHRlc3RCYXNpY0Nhc2VzKCk7CisKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICh7fSk/Lmko
KSwgJyh7fSk/LmkgaXMgbm90IGEgZnVuY3Rpb24nKTsKK3Nob3VsZEJlKCh7fSkuaT8uKCksIHVu
ZGVmaW5lZCk7CitzaG91bGRCZSgoe30pPy5pPy4oKSwgdW5kZWZpbmVkKTsKK3Nob3VsZFRocm93
VHlwZUVycm9yKCgpID0+ICh7fSk/LlsnaSddKCksICcoe30pPy5bXCdpXCddIGlzIG5vdCBhIGZ1
bmN0aW9uJyk7CitzaG91bGRCZSgoe30pWydpJ10/LigpLCB1bmRlZmluZWQpOworc2hvdWxkQmUo
KHt9KT8uWydpJ10/LigpLCB1bmRlZmluZWQpOworCitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9
PiAoe30pPy5hWydiJ10sICd1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCcpOworc2hvdWxkQmUo
KHt9KT8uYT8uWydiJ10sIHVuZGVmaW5lZCk7CitzaG91bGRCZShudWxsPy5hWydiJ10oKS5jLCB1
bmRlZmluZWQpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHt9KT8uWydhJ10uYiwgJ3Vu
ZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0Jyk7CitzaG91bGRCZSgoe30pPy5bJ2EnXT8uYiwgdW5k
ZWZpbmVkKTsKK3Nob3VsZEJlKG51bGw/LlsnYSddLmIoKVsnYyddLCB1bmRlZmluZWQpOworc2hv
dWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKCgpID0+IHt9KT8uKCkoKSwgJygoKSA9PiB7fSk/Ligp
IGlzIG5vdCBhIGZ1bmN0aW9uJyk7CitzaG91bGRCZSgoKCkgPT4ge30pPy4oKT8uKCksIHVuZGVm
aW5lZCk7CitzaG91bGRCZShudWxsPy4oKSgpLmFbJ2InXSwgdW5kZWZpbmVkKTsKKworY29uc3Qg
bzAgPSB7IGE6IHsgYigpIHsgcmV0dXJuIHRoaXMuX2IuYmluZCh0aGlzKTsgfSwgX2IoKSB7IHJl
dHVybiB0aGlzLl9fYjsgfSwgX19iOiB7IGM6IDQyIH0gfSB9Oworc2hvdWxkQmUobzA/LmE/Llsn
YiddPy4oKT8uKCk/LmMsIDQyKTsKK3Nob3VsZEJlKG8wPy5pPy5bJ2onXT8uKCk/LigpPy5rLCB1
bmRlZmluZWQpOworCitjb25zdCBvMSA9IHsgY291bnQ6IDAsIGdldCB4KCkgeyB0aGlzLmNvdW50
Kys7IHJldHVybiAoKSA9PiB7fTsgfSB9OworbzEueD8ueTsKK3Nob3VsZEJlKG8xLmNvdW50LCAx
KTsKK28xLng/LlsneSddOworc2hvdWxkQmUobzEuY291bnQsIDIpOworbzEueD8uKCk7CitzaG91
bGRCZShvMS5jb3VudCwgMyk7CitudWxsPy4obzEueCk7CitzaG91bGRCZShvMS5jb3VudCwgMyk7
CisKK3Nob3VsZEJlKGRlbGV0ZSB1bmRlZmluZWQ/LmZvbywgdHJ1ZSk7CitzaG91bGRCZShkZWxl
dGUgbnVsbD8uZm9vLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSB1bmRlZmluZWQ/LlsnZm9vJ10s
IHRydWUpOworc2hvdWxkQmUoZGVsZXRlIG51bGw/LlsnZm9vJ10sIHRydWUpOworc2hvdWxkQmUo
ZGVsZXRlIHVuZGVmaW5lZD8uKCksIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIG51bGw/LigpLCB0
cnVlKTsKKworY29uc3QgbzIgPSB7IHg6IDAsIHk6IDAsIHooKSB7fSB9Oworc2hvdWxkQmUoZGVs
ZXRlIG8yPy54LCB0cnVlKTsKK3Nob3VsZEJlKG8yLngsIHVuZGVmaW5lZCk7CitzaG91bGRCZShk
ZWxldGUgbzI/LngsIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIG8yPy5bJ3knXSwgdHJ1ZSk7Citz
aG91bGRCZShvMi55LCB1bmRlZmluZWQpOworc2hvdWxkQmUoZGVsZXRlIG8yPy5bJ3knXSwgdHJ1
ZSk7CitzaG91bGRCZShkZWxldGUgbzIuej8uKCksIHRydWUpOworCitmdW5jdGlvbiBncmVldChu
YW1lKSB7IHJldHVybiBgaGV5LCAke25hbWV9JHt0aGlzLnN1ZmZpeCA/PyAnLid9YDsgfQorc2hv
dWxkQmUoZXZhbD8uKCdncmVldCgid29ybGQiKScpLCAnaGV5LCB3b3JsZC4nKTsKK3Nob3VsZEJl
KGdyZWV0Py5jYWxsKHsgc3VmZml4OiAnIScgfSwgJ3dvcmxkJyksICdoZXksIHdvcmxkIScpOwor
c2hvdWxkQmUoZ3JlZXQuY2FsbD8uKHsgc3VmZml4OiAnIScgfSwgJ3dvcmxkJyksICdoZXksIHdv
cmxkIScpOworc2hvdWxkQmUobnVsbD8uY2FsbCh7IHN1ZmZpeDogJyEnIH0sICd3b3JsZCcpLCB1
bmRlZmluZWQpOworc2hvdWxkQmUoKHt9KS5jYWxsPy4oeyBzdWZmaXg6ICchJyB9LCAnd29ybGQn
KSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKGdyZWV0Py5hcHBseSh7IHN1ZmZpeDogJz8nIH0sIFsn
d29ybGQnXSksICdoZXksIHdvcmxkPycpOworc2hvdWxkQmUoZ3JlZXQuYXBwbHk/Lih7IHN1ZmZp
eDogJz8nIH0sIFsnd29ybGQnXSksICdoZXksIHdvcmxkPycpOworc2hvdWxkQmUobnVsbD8uYXBw
bHkoeyBzdWZmaXg6ICc/JyB9LCBbJ3dvcmxkJ10pLCB1bmRlZmluZWQpOworc2hvdWxkQmUoKHt9
KS5hcHBseT8uKHsgc3VmZml4OiAnPycgfSwgWyd3b3JsZCddKSwgdW5kZWZpbmVkKTsKKworc2hv
dWxkVGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBjbGFzcyBEIGV4dGVuZHMgQyB7IGZvbygp
IHsgcmV0dXJuIHN1cGVyPy5iYXI7IH0gfScpOworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY2xh
c3MgQyB7fSBjbGFzcyBEIGV4dGVuZHMgQyB7IGZvbygpIHsgcmV0dXJuIHN1cGVyPy5bImJhciJd
OyB9IH0nKTsKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NsYXNzIEMge30gY2xhc3MgRCBleHRl
bmRzIEMgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXI/LigpOyB9IH0nKTsKKworc2hvdWxkVGhyb3dT
eW50YXhFcnJvcignY29uc3QgbyA9IHsgQzogY2xhc3Mge30gfTsgbmV3IG8/LkMoKTsnKQorc2hv
dWxkVGhyb3dTeW50YXhFcnJvcignY29uc3QgbyA9IHsgQzogY2xhc3Mge30gfTsgbmV3IG8/Llsi
QyJdKCk7JykKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NsYXNzIEMge30gbmV3IEM/LigpOycp
CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdmdW5jdGlvbiBmb28oKSB7IG5ldz8udGFyZ2V0OyB9
Jyk7CisKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2Z1bmN0aW9uIHRhZygpIHt9IHRhZz8uYGA7
Jyk7CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjb25zdCBvID0geyB0YWcoKSB7fSB9OyBvPy50
YWdgYDsnKTsKKworLy8gTk9UIGFuIG9wdGlvbmFsIGNoYWluCitzaG91bGRCZShmYWxzZT8uNDo1
LCA1KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1yZWNvZ25pemUuanMg
Yi9KU1Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtcmVjb2duaXplLmpzCmluZGV4IDE2ODFlNDAyMDFl
ZDNjZTdlNzkxNmM5Y2FiOGU1MmIxNmNhMTdhYzAuLjljYzBlMzA2ZmFjZDc0NDc1MWE3OTYyYTZl
NjU3MDI3M2RkNWUzYzEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1yZWNv
Z25pemUuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXJlY29nbml6ZS5qcwpAQCAt
MSwzICsxLDUgQEAKKy8vQCBydW5OdWxsaXNoQXdhcmVPcGVyYXRvcnNFbmFibGVkCisKIGZ1bmN0
aW9uIGNhbGxlck11c3RCZVJ1bigpIHsKICAgICBpZiAoIU9iamVjdC5pcyhjYWxsZXJNdXN0QmVS
dW4uY2FsbGVyLCBydW5UZXN0cykpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgY2Fs
bGVyLCBleHBlY3RlZCBydW4gYnV0IGdvdCAiLCBjYWxsZXJNdXN0QmVSdW4uY2FsbGVyKTsKQEAg
LTE1MCw2ICsxNTIsMTEgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CiAgICAgICAgIHJldHVybiBm
YWxzZSB8fCBjYWxsZXJNdXN0QmVSdW4oKTsKICAgICB9KSgpOwogCisgICAgKGZ1bmN0aW9uIHRh
aWxDYWxsQ29hbGVzY2UoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlID8/IGNhbGxlck11c3RCZVJ1bigpOworICAgIH0pKCk7CisKICAgICAoZnVuY3Rpb24g
bWVtYmVyVGFpbENhbGwoKSB7CiAgICAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgICAgcmV0dXJu
IHsgZjogY2FsbGVyTXVzdEJlUnVuIH0uZigpOwpAQCAtMTYwLDYgKzE2NywxMSBAQCBmdW5jdGlv
biBydW5UZXN0cygpIHsKICAgICAgICAgcmV0dXJuIGNhbGxlck11c3RCZVJ1bi5iaW5kKCkoKTsK
ICAgICB9KSgpOwogCisgICAgKGZ1bmN0aW9uIG9wdGlvbmFsVGFpbENhbGwoKSB7CisgICAgICAg
ICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgcmV0dXJuIGNhbGxlck11c3RCZVJ1bj8uKCk7CisgICAg
fSkoKTsKKwogICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZSB0ZXN0cwogCiAgICAgKGZ1bmN0aW9u
IGFwcGx5VGFpbENhbGwoKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376217</attachid>
            <date>2019-08-13 14:57:57 -0700</date>
            <delta_ts>2019-08-13 15:38:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200199-20190813145756.patch</filename>
            <type>text/plain</type>
            <size>65169</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
MDkyMDFmZjM5Y2JiMDFhNDJhYWQ1MTg2YzRkZWIxMDgzYWZiOWZhLi4xN2Y0YmFkMjBlODAyMDJh
NTM0OTRiMzFiNTk2NGZkNTg3YTZiYjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OSBAQAorMjAxOS0wOC0xMyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
dGhlIG9wdGlvbmFsIGNoYWluaW5nIHByb3Bvc2FsLCB3aGljaCBoYXMgbm93IHJlYWNoZWQgU3Rh
Z2UgMyBhdCBUQzM5LgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhID8uIG9wZXJhdG9yIHdo
aWNoOgorICAgICAgICAgLSBndWFyZHMgbWVtYmVyIGFjY2VzcyB3aGVuIHRoZSBMSFMgaXMgbnVs
bGlzaCwgaS5lLiBgbnVsbD8uZm9vYCBhbmQgYG51bGw/LlsnZm9vJ11gIGFyZSB1bmRlZmluZWQK
KyAgICAgICAgIC0gZ3VhcmRzIGZ1bmN0aW9uIGNhbGxzIHdoZW4gdGhlIExIUyBpcyBudWxsaXNo
LCBpLmUuIGBudWxsPy4oKWAgaXMgdW5kZWZpbmVkCisgICAgICAgICAtIHNob3J0LWNpcmN1aXRz
IG92ZXIgYSB3aG9sZSBhY2Nlc3MvY2FsbCBjaGFpbiwgaS5lLiBgbnVsbD8uYVsnYiddKGMrKylg
IGlzIHVuZGVmaW5lZCBhbmQgZG9lcyBub3QgaW5jcmVtZW50IGMKKworICAgICAgICBUaGlzIGZl
YXR1cmUgY2FuIGJlIG5haXZlbHkgdmlld2VkIGFzIGEgdGVybmFyeSBpbiBkaXNndWlzZSwgaS5l
LiBgYT8uYmAgaXMgbGlrZSBgYSA9PSBudWxsID8gdW5kZWZpbmVkIDogYS5iYC4KKyAgICAgICAg
SG93ZXZlciwgc2luY2Ugd2UgbXVzdCBiZSBzdXJlIG5vdCB0byBkb3VibGUtZXZhbHVhdGUgdGhl
IExIUywgaXQncyBhY3R1YWxseSByYXRoZXIgYWtpbiB0byBhIHRyeSBibG9jayAtLQorICAgICAg
ICBuYW1lbHksIHdlIGhhdmUgdGhlIGJ5dGVjb2RlIGdlbmVyYXRvciBrZWVwIGFuIGVhcmx5LW91
dCBsYWJlbCBmb3IgdXNlIHRocm91Z2hvdXQgdGhlIGFjY2VzcyBhbmQgY2FsbCBjaGFpbi4KKwor
ICAgICAgICAoQWxzbyBub3RlIHRoYXQgZG9jdW1lbnQuYWxsIGJlaGF2ZXMgYXMgYW4gb2JqZWN0
LCBzbyAibnVsbGlzaCIgbWVhbnMgKnN0cmljdGx5KiBlcXVhbCB0byBudWxsIG9yIHVuZGVmaW5l
ZC4pCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YmVnaW5PcHRpb25hbENoYWluKTogQWRkZWQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbmRPcHRpb25hbENoYWluKTogQWRk
ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3B0aW9uYWxDaGVjayk6
IEFkZGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAg
ICAgICBJbXBsZW1lbnQgZWFybHktb3V0IGxvZ2ljLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2Rl
KToKKyAgICAgICAgKEpTQzo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRCeXRlY29kZSk6IFJl
ZmFjdG9yIHNvIHdlIGNhbiBlbWl0T3B0aW9uYWxDaGVjayBpbiBhIHNpbmdsZSBsb2NhdGlvbi4K
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKTogUmVmYWN0
b3Igc28gd2UgY2FuIGVtaXRPcHRpb25hbENoZWNrIGluIGEgc2luZ2xlIGxvY2F0aW9uLgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6
OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6
RGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZURv
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvYWxlc2NlTm9kZTo6ZW1pdEJ5
dGVjb2RlKTogQ2xlYW4gdXAuCisgICAgICAgIChKU0M6Ok9wdGlvbmFsQ2hhaW5Ob2RlOjplbWl0
Qnl0ZWNvZGUpOiBBZGRlZC4KKyAgICAgICAgSW1wbGVtZW50ID8uIG5vZGUgYW5kIGVtaXQgY2hl
Y2tzIHdoZXJlIG5lZWRlZC4KKworICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAg
ICAgICAgSGF2ZSBPcElzVW5kZWZpbmVkT3JOdWxsIHN1cHBvcnQgY29uc3RhbnQgcmVnaXN0ZXJz
LgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVp
bGRlcjo6Y3JlYXRlT3B0aW9uYWxDaGFpbik6IEFkZGVkLgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjptYWtlRGVsZXRlTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5j
dGlvbkNhbGxOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlND
OjpMZXhlcjxUPjo6bGV4V2l0aG91dENsZWFyaW5nTGluZVRlcm1pbmF0b3IpOgorICAgICAgICAq
IHBhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6Ok9wdGlvbmFsQ2hhaW5O
b2RlOjpPcHRpb25hbENoYWluTm9kZSk6IEFkZGVkLgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5o
OgorICAgICAgICAoSlNDOjpFeHByZXNzaW9uTm9kZTo6aXNPcHRpb25hbENoYWluIGNvbnN0KTog
QWRkZWQuCisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjppc09wdGlvbmFsQ2hhaW5CYXNl
IGNvbnN0KTogQWRkZWQuCisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjpzZXRJc09wdGlv
bmFsQ2hhaW5CYXNlKTogQWRkZWQuCisgICAgICAgICogcGFyc2VyL1BhcnNlclRva2Vucy5oOgor
ICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENo
ZWNrZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tl
cjo6Y3JlYXRlT3B0aW9uYWxDaGFpbik6IEFkZGVkLgorICAgICAgICBJbnRyb2R1Y2UgbmV3IHRv
a2VuIGFuZCBBU1Qgbm9kZSwgYXMgd2VsbCBhcyBhbiBFeHByZXNzaW9uTm9kZSBmaWVsZCB0byBt
YXJrIExIU2VzIHdpdGguCisKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAg
KEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6CisgICAgICAg
IFBhcnNlIG9wdGlvbmFsIGNoYWlucyBieSB3cmFwcGluZyB0aGUgYWNjZXNzL2NhbGwgcGFyc2Ug
bG9vcC4KKworICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAg
IChKU0M6OmZ1bmN0aW9uQ2FsbEJhc2UpOgorICAgICAgICBFbnN1cmUgdGhhdCBUeXBlRXJyb3Ig
bWVzc2FnZXMgZG9uJ3QgaW5jbHVkZSB0aGUgJz8uJy4KKworICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5oOgorICAgICAgICBVcGRhdGUgZmVhdHVyZSBmbGFnLCBhcyA/LiBhbmQgPz8gYXJlIGEg
ZG91YmxlIGZlYXR1cmUgb2YgIm51bGxpc2gtYXdhcmUiIG9wZXJhdG9ycy4KKwogMjAxOS0wOC0x
MiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBtdWx0
aXBhcmFtZXRlciBvdmVybG9hZHMgb2YgYXBwZW5kKCkgaW4gU3RyaW5nQnVpbGRlciBhcyBhIGZp
cnN0IHN0ZXAgdG93YXJkIHN0YW5kYXJkaXppbmdpbmcgb24gdGhlIGZsZXhpYmxlQXBwZW5kKCkg
aW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggMmMzMGE0ZDliNDMxYjBlNTUyNzQx
ZDMyNWFjODE0OWMzOGU5ZDU4MC4uZWMyNjBjYTkxMTg1OGUxYjQ3OGI5NmEyZTY1M2EyN2NkNTEx
YjlkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTQ5NjQsNiArNDk2NCwzMCBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0SnVtcElmKFJlZ2lzdGVySUQqIGNvbXBsZXRpb25UeXBlUmVnaXN0
ZXIsIENvbXBsZXRpbwogICAgIGVtaXRKdW1wSWZUcnVlKGVxdWl2YWxlbmNlUmVzdWx0LCBqdW1w
VGFyZ2V0KTsKIH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YmVnaW5PcHRpb25hbENoYWlu
KCkKK3sKKyAgICBtX29wdGlvbmFsQ2hhaW5UYXJnZXRMYWJlbFN0YWNrLmFwcGVuZChuZXdMYWJl
bCgpKTsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW5kT3B0aW9uYWxDaGFpbihSZWdp
c3RlcklEKiBkc3QsIGJvb2wgaXNEZWxldGUpCit7CisgICAgQVNTRVJUKG1fb3B0aW9uYWxDaGFp
blRhcmdldExhYmVsU3RhY2suc2l6ZSgpKTsKKworICAgIFJlZjxMYWJlbD4gZW5kTGFiZWwgPSBu
ZXdMYWJlbCgpOworICAgIGVtaXRKdW1wKGVuZExhYmVsLmdldCgpKTsKKworICAgIGVtaXRMYWJl
bChtX29wdGlvbmFsQ2hhaW5UYXJnZXRMYWJlbFN0YWNrLnRha2VMYXN0KCkuZ2V0KCkpOworICAg
IGVtaXRMb2FkKGRzdCwgaXNEZWxldGUgPyBqc0Jvb2xlYW4odHJ1ZSkgOiBqc1VuZGVmaW5lZCgp
KTsKKworICAgIGVtaXRMYWJlbChlbmRMYWJlbC5nZXQoKSk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRPcHRpb25hbENoZWNrKFJlZ2lzdGVySUQqIHNyYykKK3sKKyAgICBBU1NF
UlQobV9vcHRpb25hbENoYWluVGFyZ2V0TGFiZWxTdGFjay5zaXplKCkpOworICAgIGVtaXRKdW1w
SWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1wb3JhcnkoKSwgc3JjKSwgbV9vcHRp
b25hbENoYWluVGFyZ2V0TGFiZWxTdGFjay5sYXN0KCkuZ2V0KCkpOworfQorCiB2b2lkIEZvcklu
Q29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRD
b2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewog
ICAgIC8vIExleGljYWxseSBpbnZhbGlkYXRpbmcgRm9ySW5Db250ZXh0cyBpcyBraW5kIG9mIHdl
YWsgc2F1Y2UsIGJ1dCBpdCBvbmx5IG9jY3VycyBpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGU5NzY4NmFh
M2VkY2RkOGQzZjliNTdjNGE2ZDEyM2JhYzljYjM5ODcuLmM0NTBiZDgzZjYzODIyMTRjZmQzOWJj
MGRlNTdmNjZiNTBiMDVjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTk1OSw2ICs5NTksMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHVzaEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKEZp
bmFsbHlDb250ZXh0Jik7CiAgICAgICAgIHZvaWQgcG9wRmluYWxseUNvbnRyb2xGbG93U2NvcGUo
KTsKIAorICAgICAgICB2b2lkIGJlZ2luT3B0aW9uYWxDaGFpbigpOworICAgICAgICB2b2lkIGVu
ZE9wdGlvbmFsQ2hhaW4oUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVsZXRlID0gZmFsc2UpOwor
ICAgICAgICB2b2lkIGVtaXRPcHRpb25hbENoZWNrKFJlZ2lzdGVySUQqIHNyYyk7CisKICAgICAg
ICAgdm9pZCBwdXNoSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVy
SUQqIGluZGV4KTsKICAgICAgICAgdm9pZCBwb3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbCk7CiAgICAgICAgIHZvaWQgcHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJ
RCogbG9jYWwsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvcik7CkBAIC0xMjY2LDYgKzEyNzAsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgVmVjdG9yPFRyeVJhbmdlPiBtX3RyeVJhbmdlczsKICAgICAgICAgU2VnbWVudGVk
VmVjdG9yPFRyeURhdGEsIDg+IG1fdHJ5RGF0YTsKIAorICAgICAgICBWZWN0b3I8UmVmPExhYmVs
Pj4gbV9vcHRpb25hbENoYWluVGFyZ2V0TGFiZWxTdGFjazsKKwogICAgICAgICBpbnQgbV9uZXh0
Q29uc3RhbnRPZmZzZXQgeyAwIH07CiAKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEZ1bmN0aW9u
TWV0YWRhdGFOb2RlKiwgdW5zaWduZWQ+IEZ1bmN0aW9uT2Zmc2V0TWFwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDdj
YzA3OGMzYzAyMTVjOWRmNzkwYzg0OGEzMmQxM2I4MDkwZjA4YTAuLjc4OWM4MGI2YmI2OGJmMTAz
MmY3MWM1ZjVlYTBhYzcyMGU2OGM5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTc0NCwxMiArNzQ0LDE4IEBAIFJl
Z2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAgICAgUmVnaXN0ZXJJRCogcmV0OwogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwog
Ci0gICAgaWYgKGlzTm9uSW5kZXhTdHJpbmdFbGVtZW50KCptX3N1YnNjcmlwdCkpIHsKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsK
KyAgICBib29sIHN1YnNjcmlwdElzTm9uSW5kZXhTdHJpbmcgPSBpc05vbkluZGV4U3RyaW5nRWxl
bWVudCgqbV9zdWJzY3JpcHQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gc3Vic2Ny
aXB0SXNOb25JbmRleFN0cmluZworICAgICAgICA/IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2Up
CisgICAgICAgIDogZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwgbV9z
dWJzY3JpcHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3IpKTsK
KworICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOworCisgICAgaWYgKHN1YnNjcmlwdElz
Tm9uSW5kZXhTdHJpbmcpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICByZXQgPSBnZW5lcmF0
b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCBzdGF0aWNfY2FzdDxT
dHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5k
U2lkZShtX2Jhc2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1
cmUoZ2VuZXJhdG9yKSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9y
LmVtaXROb2RlRm9yUHJvcGVydHkobV9zdWJzY3JpcHQpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAg
ICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdl
dCgpLCBwcm9wZXJ0eSk7CkBAIC03NjMsMTcgKzc2OSwyNiBAQCBSZWdpc3RlcklEKiBCcmFja2V0
QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaQogCiBSZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAg
ICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZSA9IGJhc2VJc1N1cGVyID8gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShn
ZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisKKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gYmFzZTsKKyAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAgIGJhc2UgPSBlbWl0
U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcik7CisgICAgZWxzZSB7CisgICAgICAgIGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyAgICAgICAgaWYgKG1fYmFzZS0+aXNPcHRp
b25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNr
KGJhc2UuZ2V0KCkpOworICAgIH0KKwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICBSZWdpc3RlcklEKiBmaW5h
bERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZ2lzdGVySUQq
IHJldDsKICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHRoaXNWYWx1ZSA9IGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7Ci0gICAgICAgIHJldCA9IGdlbmVy
YXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQoKSwg
bV9pZGVudCk7CisgICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3Qu
Z2V0KCksIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQoKSwgbV9pZGVudCk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2UuZ2V0
KCksIG1faWRlbnQpOwotICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUoZmluYWxEZXN0LCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdEdl
dEJ5SWQoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKKyAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlKGZpbmFsRGVzdC5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC04NDgsMjQgKzg2MywzMiBAQCBSZWdpc3Rl
cklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZwogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWRUaGlzRnJvbUFycm93
RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1lbnQoKTsKIAogICAgIFZhcmlhYmxlIHZhciA9IGdlbmVy
YXRvci52YXJpYWJsZShnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwpOwotICAgIGlmIChS
ZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLCBudWxscHRyKTsKLSAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0
aW9uKGRzdCksIGxvY2FsKTsKLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdl
bmVyYXRvciwgbV9hcmdzKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB2YXIubG9j
YWwoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYzsKKyAgICBpZiAobG9jYWwpIHsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgbG9jYWwuZ2V0KCks
IG51bGxwdHIpOworICAgICAgICBmdW5jID0gZ2VuZXJhdG9yLm1vdmUoZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGZ1bmMg
PSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1l
bnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKworICAgIGlmIChsb2NhbCkKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkp
OwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7Cisg
ICAgZWxzZSB7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RTdGFydCgp
ICsgNDsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhuZXdEaXZvdCwgZGl2
b3RTdGFydCgpLCBuZXdEaXZvdCk7CisgICAgICAgIGdlbmVyYXRvci5tb3ZlKAorICAgICAgICAg
ICAgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhcikpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGZ1bmMuZ2V0KCksIG51bGxwdHIpOwogICAg
IH0KIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwotICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7
Ci0gICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyA0OwotICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2
b3QpOwotICAgIGdlbmVyYXRvci5tb3ZlKAotICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLAotICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShm
dW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RG
b3VuZCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgZnVuYy5n
ZXQoKSwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2Fs
bDo6Tm8pOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CisgICAgaWYgKGlzT3B0aW9uYWxDaGFp
bkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmMuZ2V0KCkp
OworCisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwocmV0dXJuVmFsdWUuZ2V0KCks
IGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC04OTksOCArOTIyLDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZh
bHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlCiAg
ICAgICAgIAogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KKwogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5j
LmdldCgpKTsKKyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0
b3IuZW1pdE9wdGlvbmFsQ2hlY2soZnVuYy5nZXQoKSk7CisKICAgICBDYWxsQXJndW1lbnRzIGNh
bGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0TG9hZChj
YWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBSZWdpc3Rl
cklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5n
ZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZv
dCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOwpAQCAt
OTIwLDMwICs5NDcsMzQgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgIEV4cGVjdGVkRnVu
Y3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiA9IGdlbmVyYXRvci5leHBlY3RlZEZ1bmN0aW9uRm9ySWRl
bnRpZmllcihtX2lkZW50KTsKIAogICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJs
ZShtX2lkZW50KTsKLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgewot
ICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBsb2NhbCwgbnVs
bHB0cik7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm1vdmUo
Z2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7Ci0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwg
ZnVuYy5nZXQoKSk7Ci0gICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0
b3IsIG1fYXJncyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0gdmFyLmxvY2FsKCk7
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmM7CisgICAgaWYgKGxvY2FsKSB7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLmdldCgpLCBudWxs
cHRyKTsKKyAgICAgICAgZnVuYyA9IGdlbmVyYXRvci5tb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBmdW5jID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhn
ZW5lcmF0b3IsIG1fYXJncyk7CisKKyAgICBpZiAobG9jYWwpIHsKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICAvLyBUaGlzIHBhc3NlcyBOb0V4cGVjdGVkRnVuY3Rpb24gYmVjYXVzZSB3ZSBleHBl
Y3QgdGhhdCBpZiB0aGUgZnVuY3Rpb24gaXMgaW4gYQogICAgICAgICAvLyBsb2NhbCB2YXJpYWJs
ZSwgdGhlbiBpdCdzIG5vdCBvbmUgb2Ygb3VyIGJ1aWx0LWluIGNvbnN0cnVjdG9ycy4KLSAgICAg
ICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0
dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6
WWVzKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICAgICAgcmV0dXJuIHJldDsKKyAgICAg
ICAgZXhwZWN0ZWRGdW5jdGlvbiA9IE5vRXhwZWN0ZWRGdW5jdGlvbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90U3RhcnQoKSArIG1faWRlbnQu
bGVuZ3RoKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3Qs
IGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOworICAgICAgICBnZW5lcmF0b3IubW92ZSgKKyAgICAg
ICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCisgICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxscHRyKTsK
ICAgICB9CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwotICAgIENhbGxBcmd1bWVudHMgY2Fs
bEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJh
c2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmMuZ2V0KCkpOwog
Ci0gICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyBtX2lkZW50Lmxl
bmd0aCgpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90
U3RhcnQoKSwgbmV3RGl2b3QpOwotICAgIGdlbmVyYXRvci5tb3ZlKAotICAgICAgICBjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLAotICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29w
ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKLSAgICBnZW5lcmF0b3IuZW1p
dEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2
YXIsIFRocm93SWZOb3RGb3VuZCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNz
YXJ5KHZhciwgZnVuYy5nZXQoKSwgbnVsbHB0cik7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2Vu
ZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0
KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICByZXR1cm4gcmV0OwpAQCAtMTI3NSw2ICsxMzA2LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVJbnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19kZWZpbmVFbnVtZXJhYmxlV3JpdGFibGVD
b25maWcKIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihk
c3QpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIGJvb2wgYmFzZUlzU3VwZXIg
PSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7CiAgICAgYm9vbCBzdWJzY3JpcHRJc05vbkluZGV4U3Ry
aW5nID0gaXNOb25JbmRleFN0cmluZ0VsZW1lbnQoKm1fc3Vic2NyaXB0KTsKIApAQCAtMTI4Niw5
ICsxMzE5LDExIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwKICAgICAgICAgICAgIGJhc2UgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYmFz
ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vic2NyaXB0
SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CisKKyAgICAg
ICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBmdW5jdGlvbjsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1JlZ2lzdGVy
OwogICAgIGlmIChiYXNlSXNTdXBlcikgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2Ugb25seSBu
ZWVkIHRvIGRvIHRoaXMgb25jZSBiZWNhdXNlIHdlIGVpdGhlciBoYXZlIGEgbm9uLVREWiB0aGlz
IG9yIHdlIHRocm93LiBPbmNlIHdlIGhhdmUgYSBub24tVERaIHRoaXMsIHdlIGNhbid0IGNoYW5n
ZSBpdHMgdmFsdWUgYmFjayB0byBURFouCkBAIC0xMjk3LDE5ICsxMzMyLDIwIEBAIFJlZ2lzdGVy
SUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwKICAgICBpZiAoc3Vic2NyaXB0SXNOb25JbmRleFN0cmluZykgewogICAg
ICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBz
dWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICAgICAgaWYgKGJh
c2VJc1N1cGVyKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQo
Z2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0ZXIu
Z2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkpOwor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNlLmdl
dCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNj
cmlwdCktPnZhbHVlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9IGdl
bmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2Uu
Z2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkpOwor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNlLmdl
dCgpLCBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0
b3IuZW1pdE5vZGVGb3JQcm9wZXJ0eShtX3N1YnNjcmlwdCk7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFy
dCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCi0gICAg
ICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIHByb3BlcnR5
LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZnVuY3Rpb24uZ2V0
KCksIGJhc2UuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwo
Z2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQo
KSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGZ1bmN0aW9uLmdldCgpLCBi
YXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgfQorICAgIGlmIChpc09wdGlvbmFsQ2hh
aW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5n
ZXQoKSk7CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRz
IGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGlmIChiYXNlSXNTdXBlcikg
ewogICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrKGdlbmVyYXRvci50aGlzUmVnaXN0ZXIo
KSk7CkBAIC0xMzMxLDE0ICsxMzY3LDIxIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAgICAg
Ym9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKICAgICBpZiAoYmFzZUlz
U3VwZXIpCiAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVy
KCksIGdlbmVyYXRvci5lbnN1cmVUaGlzKCkpOwotICAgIGVsc2UKKyAgICBlbHNlIHsKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1fYmFz
ZSk7CisgICAgICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpKTsKKyAgICB9CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNz
aW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAg
ICAgaWYgKGJhc2VJc1N1cGVyKSB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzdXBlckJh
c2UgPSBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcik7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgc3VwZXJCYXNlLmdldCgpLCBjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50KTsKICAgICB9IGVsc2UKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBtX2lkZW50KTsKKworICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAg
IGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5nZXQoKSk7CisKICAgICBSZWdp
c3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1
ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50
cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6WWVz
KTsKICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiByZXQ7CkBAIC0xMzQ4LDE3ICsxMzkx
LDI0IEBAIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heERpc3RhbmNlVG9Jbm5lcm1vc3RDYWxs
T3JBcHBseSA9IDI7CiAKIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
eworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9iYXNlKTsKKworICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2Uo
KSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOworCiAg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3Vi
ZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGZ1bmN0aW9uOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuY3Rpb247CiAgICAgYXV0byBtYWtlRnVuY3Rpb24gPSBbJl0gewogICAgICAgICBpZiAobV9i
YXNlLT5pc1N1cGVyTm9kZSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhp
c1ZhbHVlID0gZ2VuZXJhdG9yLmVuc3VyZVRoaXMoKTsKICAgICAgICAgICAgIGZ1bmN0aW9uID0g
Z2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFz
ZS5nZXQoKSwgdGhpc1ZhbHVlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0
aW5OYW1lcygpLmNhbGxQdWJsaWNOYW1lKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRp
b24oZHN0KSwgYmFzZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFt
ZXMoKS5jYWxsUHVibGljTmFtZSgpKTsKKworICAgICAgICBpZiAoaXNPcHRpb25hbENoYWluQmFz
ZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmN0aW9uLmdl
dCgpKTsKICAgICB9OwogCiAgICAgYm9vbCBlbWl0Q2FsbENoZWNrID0gIWdlbmVyYXRvci5pc0J1
aWx0aW5GdW5jdGlvbigpOwpAQCAtMTQzMCwxNSArMTQ4MCwyMiBAQCBSZWdpc3RlcklEKiBBcHBs
eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLAogICAgIC8vIGZ1bmN0aW9uLmFwcGx5KHRoaXNBcmcsIFthcmcwLCBhcmcxLCAuLi5d
KSAtPiBjYW4gYmUgdHJpdmlhbGx5IGNvZXJjZWQgaW50byBmdW5jdGlvbi5jYWxsKHRoaXNBcmcs
IGFyZzAsIGFyZzEsIC4uLikgYW5kIHNhdmVzIG9iamVjdCBhbGxvY2F0aW9uCiAgICAgYm9vbCBt
YXlCZUNhbGwgPSBhcmVUcml2aWFsQXBwbHlBcmd1bWVudHMobV9hcmdzKTsKIAotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBmdW5jdGlvbjsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5W
YWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKworICAgIGlmIChtX2Jh
c2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25h
bENoZWNrKGJhc2UuZ2V0KCkpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uOwog
ICAgIGF1dG8gbWFrZUZ1bmN0aW9uID0gWyZdIHsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNTdXBl
ck5vZGUoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNWYWx1ZSA9IGdl
bmVyYXRvci5lbnN1cmVUaGlzKCk7CiAgICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5l
bWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHRo
aXNWYWx1ZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5h
cHBseVB1YmxpY05hbWUoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZnVuY3Rpb24g
PSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBi
YXNlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFwcGx5
UHVibGljTmFtZSgpKTsKKworICAgICAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmN0aW9uLmdldCgpKTsKICAg
ICB9OwogCiAgICAgYm9vbCBlbWl0Q2FsbENoZWNrID0gIWdlbmVyYXRvci5pc0J1aWx0aW5GdW5j
dGlvbigpOwpAQCAtMTY5MiwyNSArMTc0OSwzMyBAQCBSZWdpc3RlcklEKiBEZWxldGVSZXNvbHZl
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAog
CiBSZWdpc3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKLSAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwog
CisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0
b3IuZW1pdE9wdGlvbmFsQ2hlY2socjAuZ2V0KCkpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAg
aWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVy
ZW5jZUVycm9yKGdlbmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIpOwot
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCksIHIwLmdldCgpLCByMS5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0RGVsZXRlQnlWYWwoZmluYWxEZXN0LmdldCgpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOwogfQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlRG90Tm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBEZWxldGVEb3ROb2Rl
OjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2Jhc2UpOwogCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFz
ZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socjAuZ2V0KCkpOworCiAg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpCiAgICAgICAgIHJldHVy
biBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEgc3Vw
ZXIgcHJvcGVydHkiKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCBtX2lkZW50KTsKKyAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGZpbmFsRGVzdC5nZXQoKSwgcjAuZ2V0KCksIG1f
aWRlbnQpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlVmFs
dWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzQ2LDEzICsy
NDExLDI4IEBAIFJlZ2lzdGVySUQqIENvYWxlc2NlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqCiAgICAgUmVmPExhYmVsPiB0YXJnZXQg
PSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAogICAgIGdlbmVyYXRvci5lbWl0Tm9kZSh0ZW1wLmdl
dCgpLCBtX2V4cHIxKTsKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGdlbmVyYXRvci5l
bWl0VW5hcnlPcDxPcElzVW5kZWZpbmVkT3JOdWxsPihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFs
c2UoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZUlu
VGFpbFBvc2l0aW9uKHRlbXAuZ2V0KCksIG1fZXhwcjIpOwogICAgIGdlbmVyYXRvci5lbWl0TGFi
ZWwodGFyZ2V0LmdldCgpKTsKIAogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZShkc3QsIHRlbXAu
Z2V0KCkpOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3B0aW9uYWxD
aGFpbk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBPcHRp
b25hbENoYWluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0ID0g
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKworICAgIGlmIChtX2lzT3V0ZXJtb3N0
KQorICAgICAgICBnZW5lcmF0b3IuYmVnaW5PcHRpb25hbENoYWluKCk7CisgICAgZ2VuZXJhdG9y
LmVtaXROb2RlSW5UYWlsUG9zaXRpb24oZmluYWxEZXN0LmdldCgpLCBtX2V4cHIpOworICAgIGlm
IChtX2lzT3V0ZXJtb3N0KQorICAgICAgICBnZW5lcmF0b3IuZW5kT3B0aW9uYWxDaGFpbihmaW5h
bERlc3QuZ2V0KCksIG1faXNEZWxldGUpOworCisgICAgcmV0dXJuIGZpbmFsRGVzdC5nZXQoKTsK
K30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbmRpdGlvbmFsTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQ29uZGl0aW9uYWxO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQppbmRleCBhYzQxNTliOGFmNWQ3MDIxZDg4NDY3NjkzNzgx
YTBiMDkzMzY1YmIwLi41NTAwNmQ0ZmZiYjRhOTZkMGY5NTFkNjM2YjQzOTc1ZTFiYmI1NjhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQpAQCAtODc1LDggKzg3NSw3IEBAIGVxdWFsTnVsbENvbXBhcmlzb25P
cChvcF9uZXFfbnVsbCwgT3BOZXFOdWxsLAogCiBsbGludE9wV2l0aFJldHVybihvcF9pc191bmRl
ZmluZWRfb3JfbnVsbCwgT3BJc1VuZGVmaW5lZE9yTnVsbCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIHJldHVybikKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKLSAgICBhc3NlcnROb3RDb25z
dGFudChzaXplLCB0MCkKLSAgICBsb2FkaSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIHQxCisgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZVRhZyhzaXplLCB0MCwgdDEpCiAgICAgb3JpIDEsIHQxCiAg
ICAgY2llcSB0MSwgTnVsbFRhZywgdDEKICAgICByZXR1cm4oQm9vbGVhblRhZywgdDEpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCmluZGV4IGUwOWY4OTg1ZmU1MzE3YThkZDliYjQ3MWVhOTJiYWRiYjhkNTFjYWMuLjE1MzRl
YThiMzhlNjhlMDYxZmI5OTFkZjQ2MGY1OWE1NTdjZGY0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC04Mjcs
OCArODI3LDggQEAgZXF1YWxOdWxsQ29tcGFyaXNvbk9wKG9wX25lcV9udWxsLCBPcE5lcU51bGws
CiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfaXNfdW5kZWZpbmVkX29yX251bGwsIE9wSXNVbmRl
ZmluZWRPck51bGwsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0
KG1fb3BlcmFuZCwgdDApCi0gICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MAorICAgIGdldChtX29w
ZXJhbmQsIHQxKQorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQogICAg
IGFuZHEgflRhZ0JpdFVuZGVmaW5lZCwgdDAKICAgICBjcWVxIHQwLCBWYWx1ZU51bGwsIHQwCiAg
ICAgb3JxIFZhbHVlRmFsc2UsIHQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVp
bGRlci5oCmluZGV4IGRlNWIxMzM5MDY2MTEzNDEyYWNhZWVmMmJkNzVlMDMxYTMzM2ExMDAuLmQ0
NmEwYTBhMWVjYjYzMTlkMDE3ZDAzN2JiMmY2NmQ2OTllNWMzMzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCkBAIC0xMjksNyArMTI5LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdCBpbnQgIERvbnRCdWlsZFN0cmluZ3MgPSAwOwogCiAgICAgRXhwcmVz
c2lvbk5vZGUqIG1ha2VCaW5hcnlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCB0b2tl
biwgc3RkOjpwYWlyPEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPiwgc3RkOjpwYWlyPEV4
cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPik7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VG
dW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBm
dW5jLCBib29sIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxk
RGVwdGgpOworICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VX
YXNTdXBlciwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90RW5kLCBzaXplX3QgY2FsbE9yQXBwbHlDaGlsZERlcHRoLCBib29sIGlzT3B0aW9uYWxD
YWxsKTsKIAogICAgIEpTQzo6U291cmNlRWxlbWVudHMqIGNyZWF0ZVNvdXJjZUVsZW1lbnRzKCkg
eyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBKU0M6OlNvdXJjZUVsZW1lbnRzKCk7IH0KIApA
QCAtMzYwLDYgKzM2MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0K
IAorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPcHRpb25hbENoYWluKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSog
ZXhwciwgYm9vbCBpc091dGVybW9zdCkKKyAgICB7CisgICAgICAgIGJhc2UtPnNldElzT3B0aW9u
YWxDaGFpbkJhc2UoKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgT3B0aW9u
YWxDaGFpbk5vZGUobG9jYXRpb24sIGV4cHIsIGlzT3V0ZXJtb3N0KTsKKyAgICB9CisKICAgICBF
eHByZXNzaW9uTm9kZSogY3JlYXRlQ29uZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIEV4cHJlc3Npb25Ob2RlKiBs
aHMsIEV4cHJlc3Npb25Ob2RlKiByaHMpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBDb25kaXRpb25hbE5vZGUobG9jYXRpb24sIGNvbmRpdGlvbiwgbGhzLCByaHMp
OwpAQCAtMTE0OCw2ICsxMTU0LDE3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtl
VHlwZU9mTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiAKIEV4cHJl
c3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBlbmQpCiB7CisgICAgaWYgKGV4cHItPmlzT3B0aW9uYWxDaGFpbigpKSB7CisgICAgICAgIE9w
dGlvbmFsQ2hhaW5Ob2RlKiBvcHRpb25hbENoYWluID0gc3RhdGljX2Nhc3Q8T3B0aW9uYWxDaGFp
bk5vZGUqPihleHByKTsKKyAgICAgICAgaWYgKG9wdGlvbmFsQ2hhaW4tPmV4cHIoKS0+aXNMb2Nh
dGlvbigpKSB7CisgICAgICAgICAgICBBU1NFUlQob3B0aW9uYWxDaGFpbi0+aXNPdXRlcm1vc3Qo
KSk7CisgICAgICAgICAgICBBU1NFUlQoIW9wdGlvbmFsQ2hhaW4tPmV4cHIoKS0+aXNSZXNvbHZl
Tm9kZSgpKTsKKyAgICAgICAgICAgIG9wdGlvbmFsQ2hhaW4tPnNldEV4cHIobWFrZURlbGV0ZU5v
ZGUobG9jYXRpb24sIG9wdGlvbmFsQ2hhaW4tPmV4cHIoKSwgc3RhcnQsIGRpdm90LCBlbmQpKTsK
KyAgICAgICAgICAgIG9wdGlvbmFsQ2hhaW4tPnNldElzRGVsZXRlKCk7CisgICAgICAgICAgICBy
ZXR1cm4gb3B0aW9uYWxDaGFpbjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghZXhwci0+
aXNMb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBEZWxldGVW
YWx1ZU5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgIGlmIChleHByLT5pc1Jlc29sdmVOb2RlKCkp
IHsKQEAgLTEzNDUsMTcgKzEzNjIsMzAgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VCaXRYT3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHIKICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCaXRYT3JOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhw
cjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50
c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90
IGNhbGxPckFwcGx5Q2hpbGREZXB0aCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtl
RnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VXYXNTdXBlciwgQXJndW1lbnRzTm9kZSog
YXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBzaXplX3QgY2FsbE9y
QXBwbHlDaGlsZERlcHRoLCBib29sIGlzT3B0aW9uYWxDYWxsKQogewogICAgIEFTU0VSVChkaXZv
dC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0KTsKICAgICBpZiAoZnVuYy0+aXNTdXBl
ck5vZGUoKSkKICAgICAgICAgdXNlc1N1cGVyQ2FsbCgpOwogCiAgICAgaWYgKGZ1bmMtPmlzQnl0
ZWNvZGVJbnRyaW5zaWNOb2RlKCkpIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpc09wdGlvbmFs
Q2FsbCwgIWlzT3B0aW9uYWxDYWxsKTsKICAgICAgICAgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKiBp
bnRyaW5zaWMgPSBzdGF0aWNfY2FzdDxCeXRlY29kZUludHJpbnNpY05vZGUqPihmdW5jKTsKICAg
ICAgICAgaWYgKGludHJpbnNpYy0+dHlwZSgpID09IEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6VHlw
ZTo6Q29uc3RhbnQpCiAgICAgICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCeXRl
Y29kZUludHJpbnNpY05vZGUoQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjpUeXBlOjpGdW5jdGlvbiwg
bG9jYXRpb24sIGludHJpbnNpYy0+ZW1pdHRlcigpLCBpbnRyaW5zaWMtPmlkZW50aWZpZXIoKSwg
YXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICB9CisKKyAgICAvLyBEb24n
dCBwYXJzZSBhIGRvdWJseS1vcHRpb25hbCBhY2Nlc3MtYW5kLWNhbGwgbm9kZSAoZS5nLiBgYT8u
Yj8uKClgKSBhcyB0d28gb3B0aW9uYWwgY2hhaW5zLCBvciB3ZSdsbCBsb3NlIG91ciBgdGhpc2Ag
dmFsdWUuCisgICAgaWYgKGZ1bmMtPmlzT3B0aW9uYWxDaGFpbigpKSB7CisgICAgICAgIE9wdGlv
bmFsQ2hhaW5Ob2RlKiBvcHRpb25hbENoYWluID0gc3RhdGljX2Nhc3Q8T3B0aW9uYWxDaGFpbk5v
ZGUqPihmdW5jKTsKKyAgICAgICAgaWYgKG9wdGlvbmFsQ2hhaW4tPmV4cHIoKS0+aXNMb2NhdGlv
bigpKSB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGlzT3B0aW9uYWxDYWxsLCBpc09wdGlv
bmFsQ2FsbCk7CisgICAgICAgICAgICBBU1NFUlQoIW9wdGlvbmFsQ2hhaW4tPmlzT3V0ZXJtb3N0
KCkpOworICAgICAgICAgICAgQVNTRVJUKCFvcHRpb25hbENoYWluLT5leHByKCktPmlzUmVzb2x2
ZU5vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRp
b24sIG9wdGlvbmFsQ2hhaW4tPmV4cHIoKSwgcHJldmlvdXNCYXNlV2FzU3VwZXIsIGFyZ3MsIGRp
dm90U3RhcnQsIGRpdm90LCBkaXZvdEVuZCwgY2FsbE9yQXBwbHlDaGlsZERlcHRoLCBpc09wdGlv
bmFsQ2FsbCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIWZ1bmMtPmlzTG9jYXRpb24o
KSkKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25DYWxsVmFsdWVO
b2RlKGxvY2F0aW9uLCBmdW5jLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwog
ICAgIGlmIChmdW5jLT5pc1Jlc29sdmVOb2RlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9MZXhlci5jcHAKaW5kZXggZTk4Y2RiNWU1OWUyMzA3MmMxOTAxOGY4N2QxMGMyZDQ1MmQ5Y2Qz
OS4uZjFiZDYzNmQ2ZjQ2NDc3MTJkYjA0NGRmODEyZmZmZDZkYTE3NDJiZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKQEAgLTIxNTcsMTAgKzIxNTcsMTcgQEAgc3RhcnQ6
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2hhcmFjdGVyUXVlc3Rpb246CiAgICAgICAgIHNo
aWZ0KCk7Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VOdWxsaXNoQ29hbGVzY2luZygpICYmIG1f
Y3VycmVudCA9PSAnPycpIHsKLSAgICAgICAgICAgIHNoaWZ0KCk7Ci0gICAgICAgICAgICB0b2tl
biA9IENPQUxFU0NFOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChPcHRpb25zOjp1
c2VOdWxsaXNoQXdhcmVPcGVyYXRvcnMoKSkgeworICAgICAgICAgICAgaWYgKG1fY3VycmVudCA9
PSAnPycpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIHRva2Vu
ID0gQ09BTEVTQ0U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAobV9jdXJyZW50ID09ICcuJyAmJiAhaXNBU0NJSURpZ2l0KHBlZWsoMSkpKSB7
CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFFVRVNU
SU9ORE9UOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIHRva2VuID0gUVVFU1RJT047CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAppbmRleCBkNDFlM2FlZDhl
NDVmN2E4ZTJmZDMxYzI0NDc3ZGVjY2I4ZDU2NDBmLi5kNjViMDhiNzk4ODMwYmIxZjU5ZjdiYmE2
MWJhYmM4M2YyYTA2YjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVDb25zdHJ1Y3RvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVDb25zdHJ1Y3RvcnMuaApAQCAtNjc2LDYgKzY3NiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICB7CiAgICAgfQogCisgICAgaW5saW5lIE9wdGlvbmFsQ2hhaW5Ob2RlOjpPcHRpb25hbENoYWlu
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhw
ciwgYm9vbCBpc091dGVybW9zdCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikK
KyAgICAgICAgLCBtX2V4cHIoZXhwcikKKyAgICAgICAgLCBtX2lzT3V0ZXJtb3N0KGlzT3V0ZXJt
b3N0KQorICAgIHsKKyAgICB9CisKICAgICBpbmxpbmUgQ29uZGl0aW9uYWxOb2RlOjpDb25kaXRp
b25hbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGxvZ2ljYWwsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKQog
ICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1fbG9naWNhbChs
b2dpY2FsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4IDg2ZmRhZjNkMDRm
ZDBkOGY3ZjQ4N2QxNzczNzdlMmEzN2U5NWE3ODcuLmY2M2MwMjhlYWJmNzIwMzI1NzJhNjlmN2I4
YWEzNTUyZDllZjQxNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTIw
NSw2ICsyMDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzQnl0
ZWNvZGVJbnRyaW5zaWNOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmly
dHVhbCBib29sIGlzQmluYXJ5T3BOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAg
ICAgdmlydHVhbCBib29sIGlzRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICAgICAgdmlydHVhbCBib29sIGlzT3B0aW9uYWxDaGFpbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29u
dGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsJiwgTGFiZWwmLCBGYWxsVGhyb3VnaE1vZGUp
OwogCkBAIC0yMTIsOCArMjEzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlc3Vs
dFR5cGUgcmVzdWx0RGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0VHlwZTsgfQog
CisgICAgICAgIGJvb2wgaXNPcHRpb25hbENoYWluQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNP
cHRpb25hbENoYWluQmFzZTsgfQorICAgICAgICB2b2lkIHNldElzT3B0aW9uYWxDaGFpbkJhc2Uo
KSB7IG1faXNPcHRpb25hbENoYWluQmFzZSA9IHRydWU7IH0KKwogICAgIHByaXZhdGU6CiAgICAg
ICAgIFJlc3VsdFR5cGUgbV9yZXN1bHRUeXBlOworICAgICAgICBib29sIG1faXNPcHRpb25hbENo
YWluQmFzZSB7IGZhbHNlIH07CiAgICAgfTsKIAogICAgIGNsYXNzIFN0YXRlbWVudE5vZGUgOiBw
dWJsaWMgTm9kZSB7CkBAIC0xMzEwLDEyICsxMzE1LDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBDb2FsZXNjZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBvdmVycmlkZTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSBudWxscHRyKSBmaW5hbDsKIAogICAgICAgICBFeHBy
ZXNzaW9uTm9kZSogbV9leHByMTsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjI7CiAg
ICAgfTsKIAorICAgIGNsYXNzIE9wdGlvbmFsQ2hhaW5Ob2RlIGZpbmFsIDogcHVibGljIEV4cHJl
c3Npb25Ob2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE9wdGlvbmFsQ2hhaW5Ob2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgYm9vbCk7CisKKyAgICAgICAgdm9p
ZCBzZXRFeHByKEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IG1fZXhwciA9IGV4cHI7IH0KKyAgICAg
ICAgRXhwcmVzc2lvbk5vZGUqIGV4cHIoKSBjb25zdCB7IHJldHVybiBtX2V4cHI7IH0KKworICAg
ICAgICBib29sIGlzT3V0ZXJtb3N0KCkgY29uc3QgeyByZXR1cm4gbV9pc091dGVybW9zdDsgfQor
CisgICAgICAgIHZvaWQgc2V0SXNEZWxldGUoKSB7IG1faXNEZWxldGUgPSB0cnVlOyB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IG51bGxwdHIpIGZpbmFsOworCisgICAgICAgIGJvb2wgaXNP
cHRpb25hbENoYWluKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIEV4
cHJlc3Npb25Ob2RlKiBtX2V4cHI7CisgICAgICAgIGJvb2wgbV9pc091dGVybW9zdDsKKyAgICAg
ICAgYm9vbCBtX2lzRGVsZXRlIHsgZmFsc2UgfTsKKyAgICB9OworCiAgICAgLy8gVGhlIHRlcm5h
cnkgb3BlcmF0b3IsICJtX2xvZ2ljYWwgPyBtX2V4cHIxIDogbV9leHByMiIKICAgICBjbGFzcyBD
b25kaXRpb25hbE5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1Ymxp
YzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBmOGRiZTcxOTZm
MTExNzE2ZDBhNThmN2Y1N2UzZjhmNjdiN2EyYWNmLi5lNjQ0NWNkNjYxNjVhYTZmYzNkYzk1OTRh
ZGVmZThiMmJhYTg3NzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
CkBAIC00ODA4LDEwMyArNDgwOCwxMzYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXMKICAgICB9
CiAKICAgICBmYWlsSWZGYWxzZShiYXNlLCAiQ2Fubm90IHBhcnNlIGJhc2UgZXhwcmVzc2lvbiIp
OwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigp
OwotICAgICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7Ci0gICAgICAgIGNhc2UgT1BFTkJS
QUNLRVQ6IHsKLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25D
b3VudCsrOwotICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RU
b2tlbkVuZFBvc2l0aW9uKCk7CisKKyAgICBkbyB7CisgICAgICAgIFRyZWVFeHByZXNzaW9uIG9w
dGlvbmFsQ2hhaW5CYXNlID0gMDsKKyAgICAgICAgSlNUb2tlbkxvY2F0aW9uIG9wdGlvbmFsQ2hh
aW5Mb2NhdGlvbjsKKyAgICAgICAgSlNUb2tlblR5cGUgdHlwZSA9IG1fdG9rZW4ubV90eXBlOwor
CisgICAgICAgIGlmIChtYXRjaChRVUVTVElPTkRPVCkpIHsKKyAgICAgICAgICAgIHNlbWFudGlj
RmFpbElmVHJ1ZShuZXdDb3VudCwgIkNhbm5vdCBjYWxsIGNvbnN0cnVjdG9yIGluIGFuIG9wdGlv
bmFsIGNoYWluIik7CisgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3VwZXIs
ICJDYW5ub3QgdXNlIHN1cGVyIGFzIHRoZSBiYXNlIG9mIGFuIG9wdGlvbmFsIGNoYWluIik7Cisg
ICAgICAgICAgICBvcHRpb25hbENoYWluQmFzZSA9IGJhc2U7CisgICAgICAgICAgICBvcHRpb25h
bENoYWluTG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKCk7CisKKyAgICAgICAgICAgIFNhdmVQb2lu
dCBzYXZlUG9pbnQgPSBjcmVhdGVTYXZlUG9pbnQoKTsKICAgICAgICAgICAgIG5leHQoKTsKLSAg
ICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Ci0g
ICAgICAgICAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25t
ZW50Q291bnQ7Ci0gICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhw
cmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fu
bm90IHBhcnNlIHN1YnNjcmlwdCBleHByZXNzaW9uIik7Ci0gICAgICAgICAgICBiYXNlID0gY29u
dGV4dC5jcmVhdGVCcmFja2V0QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHByb3BlcnR5LCBp
bml0aWFsQXNzaWdubWVudHMgIT0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQsIGV4cHJl
c3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1cGVyICYmIGN1cnJlbnRTY29w
ZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkpCi0gICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9u
U2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNLRVQs
ICJdIiwgImVuZCIsICJzdWJzY3JpcHQgZXhwcmVzc2lvbiIpOwotICAgICAgICAgICAgbV9wYXJz
ZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OwotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBpZiAobWF0Y2goT1BFTkJSQUNLRVQpIHx8IG1hdGNoKE9QRU5QQVJFTikgfHwg
bWF0Y2goQkFDS1FVT1RFKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gbV90b2tlbi5tX3R5cGU7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0eXBlID0gRE9UOworICAgICAg
ICAgICAgICAgIHJlc3RvcmVTYXZlUG9pbnQoc2F2ZVBvaW50KTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBjYXNlIE9QRU5QQVJFTjogewotICAgICAgICAgICAgbV9wYXJzZXJT
dGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBpbnQgbm9uTEhT
Q291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OwotICAgICAgICAgICAgaWYgKG5ld0Nv
dW50KSB7Ci0gICAgICAgICAgICAgICAgbmV3Q291bnQtLTsKLSAgICAgICAgICAgICAgICBKU1Rl
eHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAg
ICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRl
eHQpOwotICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJz
ZSBjYWxsIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0
ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHBy
ZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHVzZWRWYXJpYWJsZXNTaXplID0gY3VycmVudFNjb3Bl
KCktPmN1cnJlbnRVc2VkVmFyaWFibGVzU2l6ZSgpOworCisgICAgICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgICAgICBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBPUEVOQlJBQ0tFVDogeworICAgICAgICAg
ICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwogICAgICAg
ICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3Np
dGlvbigpOwotICAgICAgICAgICAgICAgIE9wdGlvbmFsPENhbGxPckFwcGx5RGVwdGhTY29wZT4g
Y2FsbE9yQXBwbHlEZXB0aFNjb3BlOwotICAgICAgICAgICAgICAgIHJlY29yZENhbGxPckFwcGx5
RGVwdGg8VHJlZUJ1aWxkZXI+KHRoaXMsICptX3ZtLCBjYWxsT3JBcHBseURlcHRoU2NvcGUsIGJh
c2UpOworICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICBpbnQgbm9uTEhT
Q291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIGludCBp
bml0aWFsQXNzaWdubWVudHMgPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudDsKKyAgICAg
ICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJz
ZSBzdWJzY3JpcHQgZXhwcmVzc2lvbiIpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0
LmNyZWF0ZUJyYWNrZXRBY2Nlc3Moc3RhcnRMb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRp
YWxBc3NpZ25tZW50cyAhPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lv
blN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwogCi0gICAgICAgICAg
ICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIgJiYgY3VycmVudFNjb3Bl
KCktPmlzQXJyb3dGdW5jdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0
aW9uU2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKIAot
ICAgICAgICAgICAgICAgIGlmIChiYXNlSXNBc3luY0tleXdvcmQgJiYgKCFhcmd1bWVudHMgfHwg
bWF0Y2goQVJST1dGVU5DVElPTikpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29w
ZSgpLT5yZXZlcnRUb1ByZXZpb3VzVXNlZFZhcmlhYmxlcyh1c2VkVmFyaWFibGVzU2l6ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvcmNlQ2xhc3NpZnlFeHByZXNzaW9uRXJyb3IoRXJyb3JJbmRp
Y2F0ZXNBc3luY0Fycm93RnVuY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBmYWlsRHVlVG9V
bmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFu
ZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIsICJzdWJzY3JpcHQg
ZXhwcmVzc2lvbiIpOworICAgICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQg
PSBub25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgT1BFTlBBUkVOOiB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0
ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CisgICAgICAgICAgICAgICAgaW50IG5vbkxI
U0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBpZiAo
bmV3Q291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q291bnQtLTsKKyAgICAgICAgICAg
ICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0
aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFy
c2VBcmd1bWVudHMoY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFy
Z3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50cyIpOworICAgICAgICAgICAgICAg
ICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBhcmd1bWVu
dHMsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24o
KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IHVzZWRWYXJpYWJsZXNTaXplID0gY3VycmVudFNjb3BlKCktPmN1cnJlbnRVc2VkVmFyaWFibGVz
U2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5k
ID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWw8
Q2FsbE9yQXBwbHlEZXB0aFNjb3BlPiBjYWxsT3JBcHBseURlcHRoU2NvcGU7CisgICAgICAgICAg
ICAgICAgICAgIHJlY29yZENhbGxPckFwcGx5RGVwdGg8VHJlZUJ1aWxkZXI+KHRoaXMsICptX3Zt
LCBjYWxsT3JBcHBseURlcHRoU2NvcGUsIGJhc2UpOworCisgICAgICAgICAgICAgICAgICAgIFRy
ZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCk7CiAKLSAgICAg
ICAgICAgICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMsICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1
bWVudHMiKTsKLSAgICAgICAgICAgICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgU2NvcGVSZWYgZnVuY3Rpb25TY29wZSA9IGN1cnJlbnRGdW5jdGlvblNjb3BlKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZnVuY3Rpb25TY29wZS0+c2V0SGFzRGlyZWN0U3Vw
ZXIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQgdW5uZWNlc3NhcnkgdG8gY2hl
Y2sgb2YgdXNpbmcgc3VwZXIgZHVyaW5nIHJlcGFyc2luZyBvbmUgbW9yZSB0aW1lLiBBbHNvIGl0
IGNhbiBsZWFkIHRvIHN5bnRheCBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4g
Y2FzZSBvZiBhcnJvdyBmdW5jdGlvbiBiZWNhdXNlIGR1cmluZyByZXBhcnNpbmcgd2UgZG9uJ3Qg
a25vdyB3aGV0aGVyIHdlIGN1cnJlbnRseSBwYXJzZSB0aGUgYXJyb3cgZnVuY3Rpb24KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGluc2lkZSBvZiB0aGUgY29uc3RydWN0b3Igb3IgbWV0aG9k
LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2xleGVyLT5pc1JlcGFyc2luZ0Z1bmN0
aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY29wZVJlZiBjbG9zZXN0T3Jk
aW5hcnlGdW5jdGlvblNjb3BlID0gY2xvc2VzdFBhcmVudE9yZGluYXJ5RnVuY3Rpb25Ob25MZXhp
Y2FsU2NvcGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvcktpbmQg
ZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPSAhZnVuY3Rpb25TY29wZS0+aXNBcnJvd0Z1bmN0aW9u
KCkgJiYgIWNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmlzRXZhbENvbnRleHQoKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9y
S2luZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2xvc2VzdE9yZGluYXJ5
RnVuY3Rpb25TY29wZS0+Y29uc3RydWN0b3JLaW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kID09IENvbnN0
cnVjdG9yS2luZDo6Tm9uZSwgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25D
b25zdHJ1Y3RvcktpbmQgIT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzLCAic3VwZXIgaXMgbm90
IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZUlz
QXN5bmNLZXl3b3JkICYmICghYXJndW1lbnRzIHx8IG1hdGNoKEFSUk9XRlVOQ1RJT04pKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnJldmVydFRvUHJldmlvdXNV
c2VkVmFyaWFibGVzKHVzZWRWYXJpYWJsZXNTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvcmNlQ2xhc3NpZnlFeHByZXNzaW9uRXJyb3IoRXJyb3JJbmRpY2F0ZXNBc3luY0Fycm93RnVu
Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRva2Vu
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBmYWlsSWZG
YWxzZShhcmd1bWVudHMsICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1bWVudHMiKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGJhc2VJc1N1cGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBT
Y29wZVJlZiBmdW5jdGlvblNjb3BlID0gY3VycmVudEZ1bmN0aW9uU2NvcGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghZnVuY3Rpb25TY29wZS0+c2V0SGFzRGlyZWN0U3VwZXIoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0IHVubmVjZXNzYXJ5IHRvIGNoZWNr
IG9mIHVzaW5nIHN1cGVyIGR1cmluZyByZXBhcnNpbmcgb25lIG1vcmUgdGltZS4gQWxzbyBpdCBj
YW4gbGVhZCB0byBzeW50YXggZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
biBjYXNlIG9mIGFycm93IGZ1bmN0aW9uIGJlY2F1c2UgZHVyaW5nIHJlcGFyc2luZyB3ZSBkb24n
dCBrbm93IHdoZXRoZXIgd2UgY3VycmVudGx5IHBhcnNlIHRoZSBhcnJvdyBmdW5jdGlvbgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc2lkZSBvZiB0aGUgY29uc3RydWN0b3Igb3Ig
bWV0aG9kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9sZXhlci0+aXNSZXBh
cnNpbmdGdW5jdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjb3Bl
UmVmIGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUgPSBjbG9zZXN0UGFyZW50T3JkaW5hcnlG
dW5jdGlvbk5vbkxleGljYWxTY29wZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb25zdHJ1Y3RvcktpbmQgZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPSAhZnVuY3Rpb25TY29w
ZS0+aXNBcnJvd0Z1bmN0aW9uKCkgJiYgIWNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmlz
RXZhbENvbnRleHQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmdW5j
dGlvblNjb3BlLT5jb25zdHJ1Y3RvcktpbmQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiBjbG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlLT5jb25zdHJ1Y3RvcktpbmQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGZ1
bmN0aW9uQ29uc3RydWN0b3JLaW5kID09IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgInN1cGVyIGlz
IG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kICE9IENvbnN0
cnVjdG9yS2luZDo6RXh0ZW5kcywgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3BlKCktPmlzQXJyb3dG
dW5jdGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPnNl
dElubmVyQXJyb3dGdW5jdGlvblVzZXNTdXBlckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlv
bigpKQotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+c2V0SW5uZXJBcnJv
d0Z1bmN0aW9uVXNlc1N1cGVyQ2FsbCgpOworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNP
cHRpb25hbENhbGwgPSBvcHRpb25hbENoYWluTG9jYXRpb24uZW5kT2Zmc2V0ID09IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihleHByZXNzaW9uRW5kLm9mZnNldCk7CisgICAgICAgICAgICAgICAgICAg
IGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKHN0YXJ0TG9jYXRpb24sIGJhc2Us
IHByZXZpb3VzQmFzZVdhc1N1cGVyLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCks
IGNhbGxPckFwcGx5RGVwdGhTY29wZSA/IGNhbGxPckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFuY2VU
b0lubmVybW9zdENoaWxkKCkgOiAwLCBpc09wdGlvbmFsQ2FsbCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzT3B0aW9uYWxDYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
YWxDaGFpbkJhc2UgPSBiYXNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
YXNlID0gY29udGV4dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShzdGFydExvY2F0aW9uLCBiYXNlLCBw
cmV2aW91c0Jhc2VXYXNTdXBlciwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQsCi0gICAgICAg
ICAgICAgICAgICAgIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGNhbGxP
ckFwcGx5RGVwdGhTY29wZSA/IGNhbGxPckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFuY2VUb0lubmVy
bW9zdENoaWxkKCkgOiAwKTsKKyAgICAgICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0Nv
dW50ID0gbm9uTEhTQ291bnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIERPVDogewotICAgICAg
ICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAg
ICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24o
KTsKLSAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVSZXNl
cnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKLSAgICAgICAgICAg
IG1hdGNoT3JGYWlsKElERU5ULCAiRXhwZWN0ZWQgYSBwcm9wZXJ0eSBuYW1lIGFmdGVyICcuJyIp
OwotICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKHN0YXJ0TG9jYXRp
b24sIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Np
b25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFz
ZUlzU3VwZXIgJiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKLSAgICAgICAg
ICAgICAgICBjdXJyZW50RnVuY3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2Vz
U3VwZXJQcm9wZXJ0eSgpOwotICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBCQUNLUVVPVEU6IHsKLSAgICAgICAgICAgIHNlbWFu
dGljRmFpbElmVHJ1ZShiYXNlSXNTdXBlciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGFnIGZvciB0
YWdnZWQgdGVtcGxhdGVzIik7Ci0gICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9u
RW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgIGludCBub25MSFNDb3Vu
dCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICB0eXBlbmFtZSBUcmVl
QnVpbGRlcjo6VGVtcGxhdGVMaXRlcmFsIHRlbXBsYXRlTGl0ZXJhbCA9IHBhcnNlVGVtcGxhdGVM
aXRlcmFsKGNvbnRleHQsIExleGVyVHlwZTo6UmF3U3RyaW5nc0J1aWxkTW9kZTo6QnVpbGRSYXdT
dHJpbmdzKTsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKHRlbXBsYXRlTGl0ZXJhbCwgIkNhbm5v
dCBwYXJzZSB0ZW1wbGF0ZSBsaXRlcmFsIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5j
cmVhdGVUYWdnZWRUZW1wbGF0ZShzdGFydExvY2F0aW9uLCBiYXNlLCB0ZW1wbGF0ZUxpdGVyYWws
IGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7
Ci0gICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0g
ICAgICAgICAgICBtX3NlZW5UYWdnZWRUZW1wbGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ290byBlbmRNZW1i
ZXJFeHByZXNzaW9uOworICAgICAgICAgICAgY2FzZSBET1Q6IHsKKyAgICAgICAgICAgICAgICBt
X3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgICAgICAg
ICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsK
KyAgICAgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVz
ZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CisgICAgICAgICAg
ICAgICAgbWF0Y2hPckZhaWwoSURFTlQsICJFeHBlY3RlZCBhIHByb3BlcnR5IG5hbWUgYWZ0ZXIg
Iiwgb3B0aW9uYWxDaGFpbkJhc2UgPyAiJz8uJyIgOiAiJy4nIik7CisgICAgICAgICAgICAgICAg
YmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIG1fdG9r
ZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5k
UG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1cGVyICYm
IGN1cnJlbnRTY29wZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRGdW5jdGlvblNjb3BlKCktPnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNTdXBlclBy
b3BlcnR5KCk7CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBCQUNLUVVPVEU6IHsKKyAgICAgICAg
ICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUob3B0aW9uYWxDaGFpbkJhc2UsICJDYW5ub3QgdXNl
IHRhZ2dlZCB0ZW1wbGF0ZXMgaW4gYW4gb3B0aW9uYWwgY2hhaW4iKTsKKyAgICAgICAgICAgICAg
ICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3VwZXIsICJDYW5ub3QgdXNlIHN1cGVyIGFzIHRh
ZyBmb3IgdGFnZ2VkIHRlbXBsYXRlcyIpOworICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9u
IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAg
IGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CisgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OlRlbXBsYXRlTGl0ZXJhbCB0ZW1wbGF0ZUxpdGVy
YWwgPSBwYXJzZVRlbXBsYXRlTGl0ZXJhbChjb250ZXh0LCBMZXhlclR5cGU6OlJhd1N0cmluZ3NC
dWlsZE1vZGU6OkJ1aWxkUmF3U3RyaW5ncyk7CisgICAgICAgICAgICAgICAgZmFpbElmRmFsc2Uo
dGVtcGxhdGVMaXRlcmFsLCAiQ2Fubm90IHBhcnNlIHRlbXBsYXRlIGxpdGVyYWwiKTsKKyAgICAg
ICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVUYWdnZWRUZW1wbGF0ZShzdGFydExvY2F0
aW9uLCBiYXNlLCB0ZW1wbGF0ZUxpdGVyYWwsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVu
ZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0
ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIG1fc2VlblRhZ2dl
ZFRlbXBsYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZ290byBlbmRPZkNoYWluOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJldmlvdXNCYXNlV2FzU3VwZXIgPSBiYXNlSXNT
dXBlcjsKKyAgICAgICAgICAgIGJhc2VJc1N1cGVyID0gZmFsc2U7CisgICAgICAgICAgICB0eXBl
ID0gbV90b2tlbi5tX3R5cGU7CiAgICAgICAgIH0KLSAgICAgICAgcHJldmlvdXNCYXNlV2FzU3Vw
ZXIgPSBiYXNlSXNTdXBlcjsKLSAgICAgICAgYmFzZUlzU3VwZXIgPSBmYWxzZTsKLSAgICB9Ci1l
bmRNZW1iZXJFeHByZXNzaW9uOgorZW5kT2ZDaGFpbjoKKyAgICAgICAgaWYgKG9wdGlvbmFsQ2hh
aW5CYXNlKQorICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlT3B0aW9uYWxDaGFpbihv
cHRpb25hbENoYWluTG9jYXRpb24sIG9wdGlvbmFsQ2hhaW5CYXNlLCBiYXNlLCAhbWF0Y2goUVVF
U1RJT05ET1QpKTsKKyAgICB9IHdoaWxlIChtYXRjaChRVUVTVElPTkRPVCkpOworCiAgICAgc2Vt
YW50aWNGYWlsSWZUcnVlKGJhc2VJc1N1cGVyLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMg
Y29udGV4dCIpOwogICAgIHdoaWxlIChuZXdDb3VudC0tKQogICAgICAgICBiYXNlID0gY29udGV4
dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBleHByZXNzaW9uU3RhcnQsIGxhc3RUb2tl
bkVuZFBvc2l0aW9uKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXJUb2tlbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9r
ZW5zLmgKaW5kZXggMTVjYTVlYWYyOGU3NTkyZjQzZjNkY2U0MWU4ZTQxZTYxYTllODEzNi4uNzIw
NjRiOTI4NDgxNjZmNmRlMmIyM2Y4YTNmNThjOTgxYjc2NzllOSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCkBAIC0xMzYsNiArMTM2LDcgQEAgZW51bSBK
U1Rva2VuVHlwZSB7CiAgICAgT1JFUVVBTCwKICAgICBET1RET1RET1QsCiAgICAgQVJST1dGVU5D
VElPTiwKKyAgICBRVUVTVElPTkRPVCwKICAgICBMYXN0VW50YWdnZWRUb2tlbiwKIAogICAgIC8v
IEJlZ2luIHRhZ2dlZCB0b2tlbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvU3ludGF4Q2hlY2tlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50
YXhDaGVja2VyLmgKaW5kZXggNDE5OTU4YmVkYjQyODExYjE2Mjg0MDFjZDRhNDI5OGE1YTVjZjM3
Ni4uNmNlNzNmN2ZjYzMzMDkxN2Q2OGY5ZDFiZGQxYmVkOWJiZjg1MGM3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKQEAgLTczLDcgKzczLDcgQEAg
cHVibGljOgogICAgICAgICBSZXNvbHZlRXZhbEV4cHIsIFJlc29sdmVFeHByLCBJbnRlZ2VyRXhw
ciwgRG91YmxlRXhwciwgU3RyaW5nRXhwciwgQmlnSW50RXhwciwKICAgICAgICAgVGhpc0V4cHIs
IE51bGxFeHByLCBCb29sRXhwciwgUmVnRXhwRXhwciwgT2JqZWN0TGl0ZXJhbEV4cHIsCiAgICAg
ICAgIEZ1bmN0aW9uRXhwciwgQ2xhc3NFeHByLCBTdXBlckV4cHIsIEltcG9ydEV4cHIsIEJyYWNr
ZXRFeHByLCBEb3RFeHByLCBDYWxsRXhwciwKLSAgICAgICAgTmV3RXhwciwgUHJlRXhwciwgUG9z
dEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5RXhwciwKKyAgICAgICAgTmV3RXhwciwgUHJlRXhwciwg
UG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5RXhwciwgT3B0aW9uYWxDaGFpbiwKICAgICAgICAg
Q29uZGl0aW9uYWxFeHByLCBBc3NpZ25tZW50RXhwciwgVHlwZW9mRXhwciwKICAgICAgICAgRGVs
ZXRlRXhwciwgQXJyYXlMaXRlcmFsRXhwciwgQmluZGluZ0Rlc3RydWN0dXJpbmcsIFJlc3RQYXJh
bWV0ZXIsCiAgICAgICAgIEFycmF5RGVzdHJ1Y3R1cmluZywgT2JqZWN0RGVzdHJ1Y3R1cmluZywg
U291cmNlRWxlbWVudHNSZXN1bHQsCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRTdHJpbmdzID0gTGV4ZXJGbGFnc0RvbnRCdWls
ZFN0cmluZ3M7CiAKICAgICBpbnQgY3JlYXRlU291cmNlRWxlbWVudHMoKSB7IHJldHVybiBTb3Vy
Y2VFbGVtZW50c1Jlc3VsdDsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VGdW5jdGlvbkNhbGxO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50
LCBzaXplX3QpIHsgcmV0dXJuIENhbGxFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1
bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGJv
b2wsIGludCwgaW50LCBpbnQsIGludCwgc2l6ZV90LCBib29sKSB7IHJldHVybiBDYWxsRXhwcjsg
fQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uVHlwZSBleHByKSB7IHJldHVybiBleHByOyB9CiAgICAgRXhwcmVzc2lv
blR5cGUgYXBwZW5kVG9Db21tYUV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lv
blR5cGUmIGhlYWQsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSBuZXh0KSB7IGhlYWQg
PSBuZXh0OyByZXR1cm4gbmV4dDsgfQogICAgIEV4cHJlc3Npb25UeXBlIG1ha2VBc3NpZ25Ob2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgRXhwcmVz
c2lvblR5cGUsIGJvb2wsIGJvb2wsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRF
eHByOyB9CkBAIC0xODQsNiArMTg0LDcgQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25UeXBlIGNy
ZWF0ZVJlZ0V4cChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiBwYXR0
ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBmbGFncywgaW50KSB7IHJldHVybiBZYXJyOjpoYXNFcnJv
cihZYXJyOjpjaGVja1N5bnRheChwYXR0ZXJuLnN0cmluZygpLCBmbGFncy5zdHJpbmcoKSkpID8g
MCA6IFJlZ0V4cEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIE5ld0V4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCkgeyByZXR1cm4gTmV3
RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9wdGlvbmFsQ2hhaW4oY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBib29sKSB7IHJl
dHVybiBPcHRpb25hbENoYWluOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29uZGl0aW9u
YWxFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9u
VHlwZSwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIENvbmRpdGlvbmFsRXhwcjsgfQogICAgIEV4
cHJlc3Npb25UeXBlIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
Y29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBBc3NpZ25t
ZW50Q29udGV4dCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlw
ZSBjcmVhdGVFbXB0eVZhckV4cHJlc3Npb24oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciYpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCmluZGV4IDE1NmMxODBl
MTgzNDdmNDdjOTM5MDQ1OWU1ZDIxNzUxMWI5ODMxZmYuLjllNzU4OTJlNTA3NjU3MTUyYmNiMzcz
YjZmMGI1ODgyNmMxNTRjMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCkBAIC0xNzYsNiArMTc2LDEwIEBAIHN0YXRpYyBTdHJp
bmcgZnVuY3Rpb25DYWxsQmFzZShjb25zdCBTdHJpbmcmIHNvdXJjZVRleHQpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKICAgICB9CiAKKyAgICAvLyBEb24ndCBkaXNwbGF5IHRoZSA/LiBvZiBh
biBvcHRpb25hbCBjYWxsLgorICAgIGlmIChpZHggPiAxICYmIHNvdXJjZVRleHRbaWR4XSA9PSAn
LicgJiYgc291cmNlVGV4dFtpZHggLSAxXSA9PSAnPycpCisgICAgICAgIGlkeCAtPSAyOworCiAg
ICAgcmV0dXJuIHNvdXJjZVRleHQubGVmdChpZHggKyAxKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDBkNTgyZWVhYzMzZWNhMGU0YWQ4ZTQ4OTY1OWI0
MzAxOWQ0NGU3YWMuLjdiYjEzZTRlZTk4MGM1OGY3MGQ4MTE0OGI4MTg2OTA2Mzc5NGVlNGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQ5Niw3ICs0OTYsNyBA
QCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluZ0FwaSA9IGZhbHNlOwog
ICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlSZWZlcmVuY2VzLCBmYWxzZSwgTm9ybWFsLCAiQWxs
b3cgdHlwZXMgZnJvbSB0aGUgd2FzbSByZWZlcmVuY2VzIHNwZWMuIikgXAogICAgIHYoYm9vbCwg
dXNlV2Vha1JlZnMsIGZhbHNlLCBOb3JtYWwsICJFeHBvc2UgdGhlIFdlYWtSZWYgY29uc3RydWN0
b3IuIikgXAogICAgIHYoYm9vbCwgdXNlQmlnSW50LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwg
d2Ugd2lsbCBlbmFibGUgQmlnSW50IHN1cHBvcnQuIikgXAotICAgIHYoYm9vbCwgdXNlTnVsbGlz
aENvYWxlc2NpbmcsIGZhbHNlLCBOb3JtYWwsICJFbmFibGUgc3VwcG9ydCBmb3IgdGhlID8/IG9w
ZXJhdG9yLiIpIFwKKyAgICB2KGJvb2wsIHVzZU51bGxpc2hBd2FyZU9wZXJhdG9ycywgZmFsc2Us
IE5vcm1hbCwgIkVuYWJsZSBzdXBwb3J0IGZvciA/LiBhbmQgPz8gb3BlcmF0b3JzLiIpIFwKICAg
ICB2KGJvb2wsIHVzZUFycmF5QWxsb2NhdGlvblByb2ZpbGluZywgdHJ1ZSwgTm9ybWFsLCAiSWYg
dHJ1ZSwgd2Ugd2lsbCB1c2Ugb3VyIG5vcm1hbCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGluZy4g
SWYgZmFsc2UsIHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUgd2lsbCBhbHdheXMgY2xhaW0gdG8gYmUg
dW5kZWNpZGVkLiIpIFwKICAgICB2KGJvb2wsIGZvcmNlUG9seVByb3RvLCBmYWxzZSwgTm9ybWFs
LCAiSWYgdHJ1ZSwgY3JlYXRlX3RoaXMgd2lsbCBhbHdheXMgY3JlYXRlIGFuIG9iamVjdCB3aXRo
IGEgcG9seSBwcm90byBzdHJ1Y3R1cmUuIikgXAogICAgIHYoYm9vbCwgZm9yY2VNaW5pVk1Nb2Rl
LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgaXQgd2lsbCBmb3JjZSBtaW5pIFZNIG1vZGUgb24u
IikgXApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDYyZmYzZWViMmQ3MGMwOTgwMTE0ZGMxODdjNzBmOTgwM2YxY2U5MDguLmRlZjliMjJjYmIzOTFl
ZmEzZGRkNGExYTRjMzc1MjkxZTM2NWUyYjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxOS0wOC0xMyAgUm9zcyBL
aXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1w
bGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTkt
MDgtMTIgIFRha2FzaGkgS29tb3JpICA8VGFrYXNoaS5Lb21vcmlAc29ueS5jb20+CiAKICAgICAg
ICAgW1dURl0gVGhyZWFkOjpyZW1vdmVGcm9tVGhyZWFkR3JvdXAgbGVha3Mgd2VhayBwb2ludGVy
cy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29s
cy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IDgzZGMwNjJhYjI4MjExNjFhOTMx
YzJhYmU0M2RmNWY2NjlhODhkYTkuLjA5ODcyMzUzNjBkMjQ0NGQxN2JiZTljM2E4YmVhZTFiYzkx
ZTk5NGUgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysr
IGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtNjk5LDggKzY5OSw4IEBA
IGRlZiBydW5CaWdJbnRFbmFibGVkKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAg
cnVuKCJiaWctaW50LWVuYWJsZWQiLCAiLS11c2VCaWdJbnQ9dHJ1ZSIgLCAqKEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCi1kZWYgcnVuTnVsbGlzaENv
YWxlc2NpbmdFbmFibGVkKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJu
dWxsaXNoLWNvYWxlc2NpbmctZW5hYmxlZCIsICItLXVzZU51bGxpc2hDb2FsZXNjaW5nPXRydWUi
ICwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCitkZWYgcnVu
TnVsbGlzaEF3YXJlT3BlcmF0b3JzRW5hYmxlZCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KQorICAgIHJ1bigibnVsbGlzaC1hd2FyZS1vcGVyYXRvcnMtZW5hYmxlZCIsICItLXVzZU51bGxp
c2hBd2FyZU9wZXJhdG9ycz10cnVlIiAsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggZDBhNDgzNTI3MmFiYTkyMzFhMDRhNjkxZmZlZTcxNWZmMWI2NmE1Yy4uZjYw
YzA2N2I4NTZjZmY3ZDBmMjNkM2UyNjA2ZWE1ZDc3ZWEzOTU3NyAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAx
OS0wOC0xMyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CisKKyAgICAg
ICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9udWxsaXNoLWNvYWxlc2Np
bmcuanM6CisgICAgICAgICogc3RyZXNzL29wdGlvbmFsLWNoYWluaW5nLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBzdHJlc3MvdGFpbC1jYWxsLXJlY29nbml6ZS5qczoKKwogMjAxOS0wOC0wOCAgUm9z
cyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgW0pTQ10gQWRk
ICJqdW1wIGlmIChub3QpIHVuZGVmaW5lZCBvciBudWxsIiBieXRlY29kZSBvcHMKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qcyBiL0pTVGVzdHMvc3RyZXNz
L251bGxpc2gtY29hbGVzY2luZy5qcwppbmRleCBmM2RkY2E3MDViZDMxNDUyY2E2YTQ1NTUxMzk2
MGE5ZDExYWUzMTlkLi44Y2JhZDQ0NDM1ZjJmY2QwNTI4NjQxMzhlZTBiN2M1YzNmOGIwMjgxIDEw
MDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanMKKysrIGIvSlNU
ZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzCkBAIC0xLDQgKzEsNCBAQAotLy9AIHJ1
bk51bGxpc2hDb2FsZXNjaW5nRW5hYmxlZAorLy9AIHJ1bk51bGxpc2hBd2FyZU9wZXJhdG9yc0Vu
YWJsZWQKIAogZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgewogICAgIGlmIChh
Y3R1YWwgIT09IGV4cGVjdGVkKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwt
Y2hhaW5pbmcuanMgYi9KU1Rlc3RzL3N0cmVzcy9vcHRpb25hbC1jaGFpbmluZy5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43OTU2ZjZkZDdlNjYxNmYwNGZhNzkxYTllMjkyY2E5NTY5MjhjYTU0Ci0tLSAvZGV2L251
bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcuanMKQEAgLTAsMCArMSwx
NjAgQEAKKy8vQCBydW5OdWxsaXNoQXdhcmVPcGVyYXRvcnNFbmFibGVkCisKK2Z1bmN0aW9uIHNo
b3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7
YWN0dWFsfWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvd1N5bnRheEVycm9yKHNjcmlwdCkg
eworICAgIGxldCBlcnJvcjsKKyAgICB0cnkgeworICAgICAgICBldmFsKHNjcmlwdCk7CisgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorCisgICAgaWYgKCEoZXJy
b3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhw
ZWN0ZWQgU3ludGF4RXJyb3IhJyk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93VHlwZUVycm9y
KGZ1bmMsIG1lc3NhZ2VQcmVmaXgpIHsKKyAgICBsZXQgZXJyb3I7CisgICAgdHJ5IHsKKyAgICAg
ICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0K
KworICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yKSkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdFeHBlY3RlZCBUeXBlRXJyb3IhJyk7CisKKyAgICBpZiAoIWVycm9yLm1lc3Nh
Z2Uuc3RhcnRzV2l0aChtZXNzYWdlUHJlZml4KSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdU
eXBlRXJyb3IgaGFzIHdyb25nIG1lc3NhZ2UhJyk7Cit9CisKK2NvbnN0IG1hc3F1ZXJhZGVyID0g
bWFrZU1hc3F1ZXJhZGVyKCk7CittYXNxdWVyYWRlci5mb28gPSAzOworCitmdW5jdGlvbiB0ZXN0
QmFzaWNDYXNlcygpIHsKKyAgICBzaG91bGRCZSh1bmRlZmluZWQ/LnZhbHVlT2YoKSwgdW5kZWZp
bmVkKTsKKyAgICBzaG91bGRCZShudWxsPy52YWx1ZU9mKCksIHVuZGVmaW5lZCk7CisgICAgc2hv
dWxkQmUodHJ1ZT8udmFsdWVPZigpLCB0cnVlKTsKKyAgICBzaG91bGRCZShmYWxzZT8udmFsdWVP
ZigpLCBmYWxzZSk7CisgICAgc2hvdWxkQmUoMD8udmFsdWVPZigpLCAwKTsKKyAgICBzaG91bGRC
ZSgxPy52YWx1ZU9mKCksIDEpOworICAgIHNob3VsZEJlKCcnPy52YWx1ZU9mKCksICcnKTsKKyAg
ICBzaG91bGRCZSgnaGknPy52YWx1ZU9mKCksICdoaScpOworICAgIHNob3VsZEJlKCh7fSk/LmNv
bnN0cnVjdG9yLCBPYmplY3QpOworICAgIHNob3VsZEJlKCh7IHg6ICdoaScgfSk/LngsICdoaScp
OworICAgIHNob3VsZEJlKFtdPy5sZW5ndGgsIDApOworICAgIHNob3VsZEJlKFsnaGknXT8ubGVu
Z3RoLCAxKTsKKyAgICBzaG91bGRCZShtYXNxdWVyYWRlcj8uZm9vLCAzKTsKKworICAgIHNob3Vs
ZEJlKHVuZGVmaW5lZD8uWyd2YWx1ZU9mJ10oKSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRCZShu
dWxsPy5bJ3ZhbHVlT2YnXSgpLCB1bmRlZmluZWQpOworICAgIHNob3VsZEJlKHRydWU/LlsndmFs
dWVPZiddKCksIHRydWUpOworICAgIHNob3VsZEJlKGZhbHNlPy5bJ3ZhbHVlT2YnXSgpLCBmYWxz
ZSk7CisgICAgc2hvdWxkQmUoMD8uWyd2YWx1ZU9mJ10oKSwgMCk7CisgICAgc2hvdWxkQmUoMT8u
Wyd2YWx1ZU9mJ10oKSwgMSk7CisgICAgc2hvdWxkQmUoJyc/LlsndmFsdWVPZiddKCksICcnKTsK
KyAgICBzaG91bGRCZSgnaGknPy5bJ3ZhbHVlT2YnXSgpLCAnaGknKTsKKyAgICBzaG91bGRCZSgo
e30pPy5bJ2NvbnN0cnVjdG9yJ10sIE9iamVjdCk7CisgICAgc2hvdWxkQmUoKHsgeDogJ2hpJyB9
KT8uWyd4J10sICdoaScpOworICAgIHNob3VsZEJlKFtdPy5bJ2xlbmd0aCddLCAwKTsKKyAgICBz
aG91bGRCZShbJ2hpJ10/LlswXSwgJ2hpJyk7CisgICAgc2hvdWxkQmUobWFzcXVlcmFkZXI/Llsn
Zm9vJ10sIDMpOworCisgICAgc2hvdWxkQmUodW5kZWZpbmVkPy4oKSwgdW5kZWZpbmVkKTsKKyAg
ICBzaG91bGRCZShudWxsPy4oKSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJv
cigoKSA9PiB0cnVlPy4oKSwgJ3RydWUgaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRU
aHJvd1R5cGVFcnJvcigoKSA9PiBmYWxzZT8uKCksICdmYWxzZSBpcyBub3QgYSBmdW5jdGlvbicp
OworICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgpID0+IDA/LigpLCAnMCBpcyBub3QgYSBmdW5j
dGlvbicpOworICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgpID0+IDE/LigpLCAnMSBpcyBub3Qg
YSBmdW5jdGlvbicpOworICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICcnPy4oKSwgJ1wn
XCcgaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAn
aGknPy4oKSwgJ1wnaGlcJyBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3VsZFRocm93VHlw
ZUVycm9yKCgpID0+ICh7fSk/LigpLCAnKHt9KSBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNo
b3VsZFRocm93VHlwZUVycm9yKCgpID0+ICh7IHg6ICdoaScgfSk/LigpLCAnKHsgeDogXCdoaVwn
IH0pIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4g
W10/LigpLCAnW10gaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJv
cigoKSA9PiBbJ2hpJ10/LigpLCAnW1wnaGlcJ10gaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBz
aG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiBtYXNxdWVyYWRlcj8uKCksICdtYXNxdWVyYWRlciBp
cyBub3QgYSBmdW5jdGlvbicpOworfQorbm9JbmxpbmUodGVzdEJhc2ljQ2FzZXMpOworCitmb3Ig
KGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKQorICAgIHRlc3RCYXNpY0Nhc2VzKCk7CisKK3Nob3Vs
ZFRocm93VHlwZUVycm9yKCgpID0+ICh7fSk/LmkoKSwgJyh7fSk/LmkgaXMgbm90IGEgZnVuY3Rp
b24nKTsKK3Nob3VsZEJlKCh7fSkuaT8uKCksIHVuZGVmaW5lZCk7CitzaG91bGRCZSgoe30pPy5p
Py4oKSwgdW5kZWZpbmVkKTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICh7fSk/LlsnaSdd
KCksICcoe30pPy5bXCdpXCddIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CitzaG91bGRCZSgoe30pWydp
J10/LigpLCB1bmRlZmluZWQpOworc2hvdWxkQmUoKHt9KT8uWydpJ10/LigpLCB1bmRlZmluZWQp
OworCitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoe30pPy5hWydiJ10sICd1bmRlZmluZWQg
aXMgbm90IGFuIG9iamVjdCcpOworc2hvdWxkQmUoKHt9KT8uYT8uWydiJ10sIHVuZGVmaW5lZCk7
CitzaG91bGRCZShudWxsPy5hWydiJ10oKS5jLCB1bmRlZmluZWQpOworc2hvdWxkVGhyb3dUeXBl
RXJyb3IoKCkgPT4gKHt9KT8uWydhJ10uYiwgJ3VuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0Jyk7
CitzaG91bGRCZSgoe30pPy5bJ2EnXT8uYiwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKG51bGw/Llsn
YSddLmIoKVsnYyddLCB1bmRlZmluZWQpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKCgp
ID0+IHt9KT8uKCkoKSwgJygoKSA9PiB7fSk/LigpIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CitzaG91
bGRCZSgoKCkgPT4ge30pPy4oKT8uKCksIHVuZGVmaW5lZCk7CitzaG91bGRCZShudWxsPy4oKSgp
LmFbJ2InXSwgdW5kZWZpbmVkKTsKKworY29uc3QgbzAgPSB7IGE6IHsgYigpIHsgcmV0dXJuIHRo
aXMuX2IuYmluZCh0aGlzKTsgfSwgX2IoKSB7IHJldHVybiB0aGlzLl9fYjsgfSwgX19iOiB7IGM6
IDQyIH0gfSB9Oworc2hvdWxkQmUobzA/LmE/LlsnYiddPy4oKT8uKCk/LmMsIDQyKTsKK3Nob3Vs
ZEJlKG8wPy5pPy5bJ2onXT8uKCk/LigpPy5rLCB1bmRlZmluZWQpOworCitzaG91bGRCZSgoeyB1
bmRlZmluZWQ6IDMgfSk/LltudWxsPy5hXSwgMyk7CitzaG91bGRCZSgoKCkgPT4gMyk/LihudWxs
Py5hKSwgMyk7CisKK2NvbnN0IG8xID0geyBjb3VudDogMCwgZ2V0IHgoKSB7IHRoaXMuY291bnQr
KzsgcmV0dXJuICgpID0+IHt9OyB9IH07CitvMS54Py55Oworc2hvdWxkQmUobzEuY291bnQsIDEp
OworbzEueD8uWyd5J107CitzaG91bGRCZShvMS5jb3VudCwgMik7CitvMS54Py4oKTsKK3Nob3Vs
ZEJlKG8xLmNvdW50LCAzKTsKK251bGw/LihvMS54KTsKK3Nob3VsZEJlKG8xLmNvdW50LCAzKTsK
Kworc2hvdWxkQmUoZGVsZXRlIHVuZGVmaW5lZD8uZm9vLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0
ZSBudWxsPy5mb28sIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIHVuZGVmaW5lZD8uWydmb28nXSwg
dHJ1ZSk7CitzaG91bGRCZShkZWxldGUgbnVsbD8uWydmb28nXSwgdHJ1ZSk7CitzaG91bGRCZShk
ZWxldGUgdW5kZWZpbmVkPy4oKSwgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgbnVsbD8uKCksIHRy
dWUpOworCitjb25zdCBvMiA9IHsgeDogMCwgeTogMCwgeigpIHt9IH07CitzaG91bGRCZShkZWxl
dGUgbzI/LngsIHRydWUpOworc2hvdWxkQmUobzIueCwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKGRl
bGV0ZSBvMj8ueCwgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgbzI/LlsneSddLCB0cnVlKTsKK3No
b3VsZEJlKG8yLnksIHVuZGVmaW5lZCk7CitzaG91bGRCZShkZWxldGUgbzI/LlsneSddLCB0cnVl
KTsKK3Nob3VsZEJlKGRlbGV0ZSBvMi56Py4oKSwgdHJ1ZSk7CisKK2Z1bmN0aW9uIGdyZWV0KG5h
bWUpIHsgcmV0dXJuIGBoZXksICR7bmFtZX0ke3RoaXMuc3VmZml4ID8/ICcuJ31gOyB9CitzaG91
bGRCZShldmFsPy4oJ2dyZWV0KCJ3b3JsZCIpJyksICdoZXksIHdvcmxkLicpOworc2hvdWxkQmUo
Z3JlZXQ/LmNhbGwoeyBzdWZmaXg6ICchJyB9LCAnd29ybGQnKSwgJ2hleSwgd29ybGQhJyk7Citz
aG91bGRCZShncmVldC5jYWxsPy4oeyBzdWZmaXg6ICchJyB9LCAnd29ybGQnKSwgJ2hleSwgd29y
bGQhJyk7CitzaG91bGRCZShudWxsPy5jYWxsKHsgc3VmZml4OiAnIScgfSwgJ3dvcmxkJyksIHVu
ZGVmaW5lZCk7CitzaG91bGRCZSgoe30pLmNhbGw/Lih7IHN1ZmZpeDogJyEnIH0sICd3b3JsZCcp
LCB1bmRlZmluZWQpOworc2hvdWxkQmUoZ3JlZXQ/LmFwcGx5KHsgc3VmZml4OiAnPycgfSwgWyd3
b3JsZCddKSwgJ2hleSwgd29ybGQ/Jyk7CitzaG91bGRCZShncmVldC5hcHBseT8uKHsgc3VmZml4
OiAnPycgfSwgWyd3b3JsZCddKSwgJ2hleSwgd29ybGQ/Jyk7CitzaG91bGRCZShudWxsPy5hcHBs
eSh7IHN1ZmZpeDogJz8nIH0sIFsnd29ybGQnXSksIHVuZGVmaW5lZCk7CitzaG91bGRCZSgoe30p
LmFwcGx5Py4oeyBzdWZmaXg6ICc/JyB9LCBbJ3dvcmxkJ10pLCB1bmRlZmluZWQpOworCitzaG91
bGRUaHJvd1N5bnRheEVycm9yKCdjbGFzcyBDIHt9IGNsYXNzIEQgZXh0ZW5kcyBDIHsgZm9vKCkg
eyByZXR1cm4gc3VwZXI/LmJhcjsgfSB9Jyk7CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjbGFz
cyBDIHt9IGNsYXNzIEQgZXh0ZW5kcyBDIHsgZm9vKCkgeyByZXR1cm4gc3VwZXI/LlsiYmFyIl07
IH0gfScpOworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBjbGFzcyBEIGV4dGVu
ZHMgQyB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcj8uKCk7IH0gfScpOworCitzaG91bGRUaHJvd1N5
bnRheEVycm9yKCdjb25zdCBvID0geyBDOiBjbGFzcyB7fSB9OyBuZXcgbz8uQygpOycpCitzaG91
bGRUaHJvd1N5bnRheEVycm9yKCdjb25zdCBvID0geyBDOiBjbGFzcyB7fSB9OyBuZXcgbz8uWyJD
Il0oKTsnKQorc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBuZXcgQz8uKCk7JykK
K3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2Z1bmN0aW9uIGZvbygpIHsgbmV3Py50YXJnZXQ7IH0n
KTsKKworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignZnVuY3Rpb24gdGFnKCkge30gdGFnPy5gYDsn
KTsKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NvbnN0IG8gPSB7IHRhZygpIHt9IH07IG8/LnRh
Z2BgOycpOworCisvLyBOT1QgYW4gb3B0aW9uYWwgY2hhaW4KK3Nob3VsZEJlKGZhbHNlPy40OjUs
IDUpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXJlY29nbml6ZS5qcyBi
L0pTVGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1yZWNvZ25pemUuanMKaW5kZXggMTY4MWU0MDIwMWVk
M2NlN2U3OTE2YzljYWI4ZTUyYjE2Y2ExN2FjMC4uOWNjMGUzMDZmYWNkNzQ0NzUxYTc5NjJhNmU2
NTcwMjczZGQ1ZTNjMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXJlY29n
bml6ZS5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtcmVjb2duaXplLmpzCkBAIC0x
LDMgKzEsNSBAQAorLy9AIHJ1bk51bGxpc2hBd2FyZU9wZXJhdG9yc0VuYWJsZWQKKwogZnVuY3Rp
b24gY2FsbGVyTXVzdEJlUnVuKCkgewogICAgIGlmICghT2JqZWN0LmlzKGNhbGxlck11c3RCZVJ1
bi5jYWxsZXIsIHJ1blRlc3RzKSkKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBjYWxs
ZXIsIGV4cGVjdGVkIHJ1biBidXQgZ290ICIsIGNhbGxlck11c3RCZVJ1bi5jYWxsZXIpOwpAQCAt
MTUwLDYgKzE1MiwxMSBAQCBmdW5jdGlvbiBydW5UZXN0cygpIHsKICAgICAgICAgcmV0dXJuIGZh
bHNlIHx8IGNhbGxlck11c3RCZVJ1bigpOwogICAgIH0pKCk7CiAKKyAgICAoZnVuY3Rpb24gdGFp
bENhbGxDb2FsZXNjZSgpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICByZXR1cm4g
ZmFsc2UgPz8gY2FsbGVyTXVzdEJlUnVuKCk7CisgICAgfSkoKTsKKwogICAgIChmdW5jdGlvbiBt
ZW1iZXJUYWlsQ2FsbCgpIHsKICAgICAgICAgInVzZSBzdHJpY3QiOwogICAgICAgICByZXR1cm4g
eyBmOiBjYWxsZXJNdXN0QmVSdW4gfS5mKCk7CkBAIC0xNjAsNiArMTY3LDExIEBAIGZ1bmN0aW9u
IHJ1blRlc3RzKCkgewogICAgICAgICByZXR1cm4gY2FsbGVyTXVzdEJlUnVuLmJpbmQoKSgpOwog
ICAgIH0pKCk7CiAKKyAgICAoZnVuY3Rpb24gb3B0aW9uYWxUYWlsQ2FsbCgpIHsKKyAgICAgICAg
InVzZSBzdHJpY3QiOworICAgICAgICByZXR1cm4gY2FsbGVyTXVzdEJlUnVuPy4oKTsKKyAgICB9
KSgpOworCiAgICAgLy8gRnVuY3Rpb24ucHJvdG90eXBlIHRlc3RzCiAKICAgICAoZnVuY3Rpb24g
YXBwbHlUYWlsQ2FsbCgpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376220</attachid>
            <date>2019-08-13 15:38:34 -0700</date>
            <delta_ts>2019-08-13 20:10:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200199-20190813153833.patch</filename>
            <type>text/plain</type>
            <size>65183</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
MDkyMDFmZjM5Y2JiMDFhNDJhYWQ1MTg2YzRkZWIxMDgzYWZiOWZhLi5jMDM3YTdmNjc4ZWVkNDQz
NTRiYWIyZGI2ZThkMjY2Njg4YjgxOTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OSBAQAorMjAxOS0wOC0xMyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
dGhlIG9wdGlvbmFsIGNoYWluaW5nIHByb3Bvc2FsLCB3aGljaCBoYXMgbm93IHJlYWNoZWQgU3Rh
Z2UgMyBhdCBUQzM5LgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhID8uIG9wZXJhdG9yIHdo
aWNoOgorICAgICAgICAgLSBndWFyZHMgbWVtYmVyIGFjY2VzcyB3aGVuIHRoZSBMSFMgaXMgbnVs
bGlzaCwgaS5lLiBgbnVsbD8uZm9vYCBhbmQgYG51bGw/LlsnZm9vJ11gIGFyZSB1bmRlZmluZWQK
KyAgICAgICAgIC0gZ3VhcmRzIGZ1bmN0aW9uIGNhbGxzIHdoZW4gdGhlIExIUyBpcyBudWxsaXNo
LCBpLmUuIGBudWxsPy4oKWAgaXMgdW5kZWZpbmVkCisgICAgICAgICAtIHNob3J0LWNpcmN1aXRz
IG92ZXIgYSB3aG9sZSBhY2Nlc3MvY2FsbCBjaGFpbiwgaS5lLiBgbnVsbD8uYVsnYiddKGMrKylg
IGlzIHVuZGVmaW5lZCBhbmQgZG9lcyBub3QgaW5jcmVtZW50IGMKKworICAgICAgICBUaGlzIGZl
YXR1cmUgY2FuIGJlIG5haXZlbHkgdmlld2VkIGFzIGEgdGVybmFyeSBpbiBkaXNndWlzZSwgaS5l
LiBgYT8uYmAgaXMgbGlrZSBgYSA9PSBudWxsID8gdW5kZWZpbmVkIDogYS5iYC4KKyAgICAgICAg
SG93ZXZlciwgc2luY2Ugd2UgbXVzdCBiZSBzdXJlIG5vdCB0byBkb3VibGUtZXZhbHVhdGUgdGhl
IExIUywgaXQncyBhY3R1YWxseSByYXRoZXIgYWtpbiB0byBhIHRyeSBibG9jayAtLQorICAgICAg
ICBuYW1lbHksIHdlIGhhdmUgdGhlIGJ5dGVjb2RlIGdlbmVyYXRvciBrZWVwIGFuIGVhcmx5LW91
dCBsYWJlbCBmb3IgdXNlIHRocm91Z2hvdXQgdGhlIGFjY2VzcyBhbmQgY2FsbCBjaGFpbi4KKwor
ICAgICAgICAoQWxzbyBub3RlIHRoYXQgZG9jdW1lbnQuYWxsIGJlaGF2ZXMgYXMgYW4gb2JqZWN0
LCBzbyAibnVsbGlzaCIgbWVhbnMgKnN0cmljdGx5KiBlcXVhbCB0byBudWxsIG9yIHVuZGVmaW5l
ZC4pCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaE9wdGlvbmFsQ2hhaW5UYXJnZXQpOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGlvbmFsQ2hhaW5U
YXJnZXQpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRPcHRp
b25hbENoZWNrKTogQWRkZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgIEltcGxlbWVudCBlYXJseS1vdXQgbG9naWMuCisKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QnJhY2tldEFjY2Vz
c29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RG90QWNjZXNzb3JOb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5
dGVjb2RlKTogUmVmYWN0b3Igc28gd2UgY2FuIGVtaXRPcHRpb25hbENoZWNrIGluIGEgc2luZ2xl
IGxvY2F0aW9uLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNv
ZGUpOiBSZWZhY3RvciBzbyB3ZSBjYW4gZW1pdE9wdGlvbmFsQ2hlY2sgaW4gYSBzaW5nbGUgbG9j
YXRpb24uCisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6RGVsZXRlRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29hbGVzY2VO
b2RlOjplbWl0Qnl0ZWNvZGUpOiBDbGVhbiB1cC4KKyAgICAgICAgKEpTQzo6T3B0aW9uYWxDaGFp
bk5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnQgPy4gbm9kZSBh
bmQgZW1pdCBjaGVja3Mgd2hlcmUgbmVlZGVkLgorCisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtOgorICAgICAgICBIYXZlIE9wSXNVbmRlZmluZWRPck51bGwgc3VwcG9ydCBjb25zdGFu
dCByZWdpc3RlcnMuCisKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVPcHRpb25hbENoYWluKTogQWRkZWQuCisgICAgICAgIChK
U0M6OkFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6Cisg
ICAgICAgIChKU0M6OkxleGVyPFQ+OjpsZXhXaXRob3V0Q2xlYXJpbmdMaW5lVGVybWluYXRvcik6
CisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6T3B0
aW9uYWxDaGFpbk5vZGU6Ok9wdGlvbmFsQ2hhaW5Ob2RlKTogQWRkZWQuCisgICAgICAgICogcGFy
c2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjppc09wdGlvbmFsQ2hh
aW4gY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RXhwcmVzc2lvbk5vZGU6OmlzT3B0aW9u
YWxDaGFpbkJhc2UgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RXhwcmVzc2lvbk5vZGU6
OnNldElzT3B0aW9uYWxDaGFpbkJhc2UpOiBBZGRlZC4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2Vy
VG9rZW5zLmg6CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpT
eW50YXhDaGVja2VyOjpjcmVhdGVPcHRpb25hbENoYWluKTogQWRkZWQuCisgICAgICAgIEludHJv
ZHVjZSBuZXcgdG9rZW4gYW5kIEFTVCBub2RlLCBhcyB3ZWxsIGFzIGFuIEV4cHJlc3Npb25Ob2Rl
IGZpZWxkIHRvIG1hcmsgTEhTZXMgd2l0aC4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXNzaW9u
KToKKyAgICAgICAgUGFyc2Ugb3B0aW9uYWwgY2hhaW5zIGJ5IHdyYXBwaW5nIHRoZSBhY2Nlc3Mv
Y2FsbCBwYXJzZSBsb29wLgorCisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNw
cDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DYWxsQmFzZSk6CisgICAgICAgIEVuc3VyZSB0aGF0
IFR5cGVFcnJvciBtZXNzYWdlcyBkb24ndCBpbmNsdWRlIHRoZSAnPy4nLgorCisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIFVwZGF0ZSBmZWF0dXJlIGZsYWcsIGFzID8uIGFu
ZCA/PyBhcmUgYSBkb3VibGUgZmVhdHVyZSBvZiAibnVsbGlzaC1hd2FyZSIgb3BlcmF0b3JzLgor
CiAyMDE5LTA4LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXBsYWNlIG11bHRpcGFyYW1ldGVyIG92ZXJsb2FkcyBvZiBhcHBlbmQoKSBpbiBTdHJpbmdCdWls
ZGVyIGFzIGEgZmlyc3Qgc3RlcCB0b3dhcmQgc3RhbmRhcmRpemluZ2luZyBvbiB0aGUgZmxleGli
bGVBcHBlbmQoKSBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCAyYzMwYTRkOWI0
MzFiMGU1NTI3NDFkMzI1YWM4MTQ5YzM4ZTlkNTgwLi45NTBhYWEyMDNkMzhlZjg4ZTMxYjdiOWE4
Nzk5MzU0MGI2OTA3OGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtNDk2NCw2ICs0OTY0LDMwIEBA
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWYoUmVnaXN0ZXJJRCogY29tcGxldGlv
blR5cGVSZWdpc3RlciwgQ29tcGxldGlvCiAgICAgZW1pdEp1bXBJZlRydWUoZXF1aXZhbGVuY2VS
ZXN1bHQsIGp1bXBUYXJnZXQpOwogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoT3B0
aW9uYWxDaGFpblRhcmdldCgpCit7CisgICAgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2suYXBw
ZW5kKG5ld0xhYmVsKCkpOworfQorCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BPcHRpb25h
bENoYWluVGFyZ2V0KFJlZ2lzdGVySUQqIGRzdCwgYm9vbCBpc0RlbGV0ZSkKK3sKKyAgICBBU1NF
UlQobV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2suc2l6ZSgpKTsKKworICAgIFJlZjxMYWJlbD4g
ZW5kTGFiZWwgPSBuZXdMYWJlbCgpOworICAgIGVtaXRKdW1wKGVuZExhYmVsLmdldCgpKTsKKwor
ICAgIGVtaXRMYWJlbChtX29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFjay50YWtlTGFzdCgpLmdldCgp
KTsKKyAgICBlbWl0TG9hZChkc3QsIGlzRGVsZXRlID8ganNCb29sZWFuKHRydWUpIDoganNVbmRl
ZmluZWQoKSk7CisKKyAgICBlbWl0TGFiZWwoZW5kTGFiZWwuZ2V0KCkpOworfQorCit2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpCit7Cisg
ICAgQVNTRVJUKG1fb3B0aW9uYWxDaGFpblRhcmdldFN0YWNrLnNpemUoKSk7CisgICAgZW1pdEp1
bXBJZlRydWUoZW1pdElzVW5kZWZpbmVkT3JOdWxsKG5ld1RlbXBvcmFyeSgpLCBzcmMpLCBtX29w
dGlvbmFsQ2hhaW5UYXJnZXRTdGFjay5sYXN0KCkuZ2V0KCkpOworfQorCiB2b2lkIEZvckluQ29u
dGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewogICAg
IC8vIExleGljYWxseSBpbnZhbGlkYXRpbmcgRm9ySW5Db250ZXh0cyBpcyBraW5kIG9mIHdlYWsg
c2F1Y2UsIGJ1dCBpdCBvbmx5IG9jY3VycyBpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGU5NzY4NmFhM2Vk
Y2RkOGQzZjliNTdjNGE2ZDEyM2JhYzljYjM5ODcuLjNjYjMzYzM3ZWNmZDZiZmU3NDI4ZTUwMTFl
ZDZhYWM1ZDliYWYyMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTk1OSw2ICs5NTksMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHVzaEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKEZpbmFs
bHlDb250ZXh0Jik7CiAgICAgICAgIHZvaWQgcG9wRmluYWxseUNvbnRyb2xGbG93U2NvcGUoKTsK
IAorICAgICAgICB2b2lkIHB1c2hPcHRpb25hbENoYWluVGFyZ2V0KCk7CisgICAgICAgIHZvaWQg
cG9wT3B0aW9uYWxDaGFpblRhcmdldChSZWdpc3RlcklEKiBkc3QsIGJvb2wgaXNEZWxldGUgPSBm
YWxzZSk7CisgICAgICAgIHZvaWQgZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKTsK
KwogICAgICAgICB2b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCwg
UmVnaXN0ZXJJRCogaW5kZXgpOwogICAgICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsKTsKICAgICAgICAgdm9pZCBwdXNoU3RydWN0dXJlRm9ySW5TY29wZShS
ZWdpc3RlcklEKiBsb2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5
LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKQEAgLTEyNjYsNiArMTI3MCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFuZ2VzOwogICAgICAgICBT
ZWdtZW50ZWRWZWN0b3I8VHJ5RGF0YSwgOD4gbV90cnlEYXRhOwogCisgICAgICAgIFZlY3RvcjxS
ZWY8TGFiZWw+PiBtX29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFjazsKKwogICAgICAgICBpbnQgbV9u
ZXh0Q29uc3RhbnRPZmZzZXQgeyAwIH07CiAKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEZ1bmN0
aW9uTWV0YWRhdGFOb2RlKiwgdW5zaWduZWQ+IEZ1bmN0aW9uT2Zmc2V0TWFwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4
IDdjYzA3OGMzYzAyMTVjOWRmNzkwYzg0OGEzMmQxM2I4MDkwZjA4YTAuLjg2MmYwZTVmMmE4NGQ0
NDMxNjMzOWE5ZTI4MTk4OGU5MTkzNzkyNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTc0NCwxMiArNzQ0LDE4IEBA
IFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAgICAgUmVnaXN0ZXJJRCogcmV0OwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
OwogCi0gICAgaWYgKGlzTm9uSW5kZXhTdHJpbmdFbGVtZW50KCptX3N1YnNjcmlwdCkpIHsKLSAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNl
KTsKKyAgICBib29sIHN1YnNjcmlwdElzTm9uSW5kZXhTdHJpbmcgPSBpc05vbkluZGV4U3RyaW5n
RWxlbWVudCgqbV9zdWJzY3JpcHQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gc3Vi
c2NyaXB0SXNOb25JbmRleFN0cmluZworICAgICAgICA/IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jh
c2UpCisgICAgICAgIDogZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwg
bV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3Ip
KTsKKworICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOworCisgICAgaWYgKHN1YnNjcmlw
dElzTm9uSW5kZXhTdHJpbmcpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICByZXQgPSBnZW5l
cmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCBzdGF0aWNfY2Fz
dDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRI
YW5kU2lkZShtX2Jhc2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5p
c1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJh
dG9yLmVtaXROb2RlRm9yUHJvcGVydHkobV9zdWJzY3JpcHQpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZmluYWxEZXN0LmdldCgpLCBiYXNl
LmdldCgpLCBwcm9wZXJ0eSk7CkBAIC03NjMsMTcgKzc2OSwyNiBAQCBSZWdpc3RlcklEKiBCcmFj
a2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaQogCiBSZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7
CiAgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKLSAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGJhc2VJc1N1cGVyID8gZW1pdFN1cGVyQmFzZUZvckNhbGxl
ZShnZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZTsKKyAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAgIGJhc2UgPSBl
bWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcik7CisgICAgZWxzZSB7CisgICAgICAgIGJh
c2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyAgICAgICAgaWYgKG1fYmFzZS0+aXNP
cHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENo
ZWNrKGJhc2UuZ2V0KCkpOworICAgIH0KKwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICBSZWdpc3RlcklEKiBm
aW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZ2lzdGVy
SUQqIHJldDsKICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHRoaXNWYWx1ZSA9IGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7Ci0gICAgICAgIHJldCA9IGdl
bmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQo
KSwgbV9pZGVudCk7CisgICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERl
c3QuZ2V0KCksIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQoKSwgbV9pZGVudCk7CiAgICAgfSBl
bHNlCi0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2Uu
Z2V0KCksIG1faWRlbnQpOwotICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUoZmluYWxEZXN0
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKKyAgICBnZW5l
cmF0b3IuZW1pdFByb2ZpbGVUeXBlKGZpbmFsRGVzdC5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC04NDgsMjQgKzg2MywzMiBAQCBSZWdp
c3RlcklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZwogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWRUaGlzRnJvbUFy
cm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1lbnQoKTsKIAogICAgIFZhcmlhYmxlIHZhciA9IGdl
bmVyYXRvci52YXJpYWJsZShnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwpOwotICAgIGlm
IChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLCBudWxscHRyKTsKLSAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubW92ZShnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCksIGxvY2FsKTsKLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRz
KGdlbmVyYXRvciwgbV9hcmdzKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB2YXIu
bG9jYWwoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYzsKKyAgICBpZiAobG9jYWwpIHsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgbG9jYWwuZ2V0
KCksIG51bGxwdHIpOworICAgICAgICBmdW5jID0gZ2VuZXJhdG9yLm1vdmUoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGZ1
bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJn
dW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKworICAgIGlmIChsb2NhbCkKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVk
KCkpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRz
LCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7
CisgICAgZWxzZSB7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RTdGFy
dCgpICsgNDsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhuZXdEaXZvdCwg
ZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7CisgICAgICAgIGdlbmVyYXRvci5tb3ZlKAorICAgICAg
ICAgICAgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhcikpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGZ1bmMuZ2V0KCksIG51bGxwdHIpOwog
ICAgIH0KIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpOwotICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJn
cyk7Ci0gICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyA0OwotICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3
RGl2b3QpOwotICAgIGdlbmVyYXRvci5tb3ZlKAotICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLAotICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29w
ZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZO
b3RGb3VuZCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgZnVu
Yy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgY2Fs
bEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxl
Q2FsbDo6Tm8pOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CisgICAgaWYgKGlzT3B0aW9uYWxD
aGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmMuZ2V0
KCkpOworCisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwocmV0dXJuVmFsdWUuZ2V0
KCksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC04OTksOCArOTIyLDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KKwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBm
dW5jLmdldCgpKTsKKyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5l
cmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soZnVuYy5nZXQoKSk7CisKICAgICBDYWxsQXJndW1lbnRz
IGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0TG9h
ZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBSZWdp
c3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1
ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOwpA
QCAtOTIwLDMwICs5NDcsMzQgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgIEV4cGVjdGVk
RnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiA9IGdlbmVyYXRvci5leHBlY3RlZEZ1bmN0aW9uRm9y
SWRlbnRpZmllcihtX2lkZW50KTsKIAogICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJp
YWJsZShtX2lkZW50KTsKLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkg
ewotICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBsb2NhbCwg
bnVsbHB0cik7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm1v
dmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7Ci0gICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgZnVuYy5nZXQoKSk7Ci0gICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5l
cmF0b3IsIG1fYXJncyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0gdmFyLmxvY2Fs
KCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmM7CisgICAgaWYgKGxvY2FsKSB7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLmdldCgpLCBu
dWxscHRyKTsKKyAgICAgICAgZnVuYyA9IGdlbmVyYXRvci5tb3ZlKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBmdW5jID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50
cyhnZW5lcmF0b3IsIG1fYXJncyk7CisKKyAgICBpZiAobG9jYWwpIHsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICAvLyBUaGlzIHBhc3NlcyBOb0V4cGVjdGVkRnVuY3Rpb24gYmVjYXVzZSB3ZSBl
eHBlY3QgdGhhdCBpZiB0aGUgZnVuY3Rpb24gaXMgaW4gYQogICAgICAgICAvLyBsb2NhbCB2YXJp
YWJsZSwgdGhlbiBpdCdzIG5vdCBvbmUgb2Ygb3VyIGJ1aWx0LWluIGNvbnN0cnVjdG9ycy4KLSAg
ICAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24o
cmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2Fs
bDo6WWVzKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5n
ZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICAgICAgcmV0dXJuIHJldDsKKyAg
ICAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IE5vRXhwZWN0ZWRGdW5jdGlvbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90U3RhcnQoKSArIG1faWRl
bnQubGVuZ3RoKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2
b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOworICAgICAgICBnZW5lcmF0b3IubW92ZSgKKyAg
ICAgICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCisgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxscHRy
KTsKICAgICB9CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwotICAgIENhbGxBcmd1bWVudHMg
Y2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAgaWYgKGlzT3B0aW9uYWxDaGFp
bkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmMuZ2V0KCkp
OwogCi0gICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyBtX2lkZW50
Lmxlbmd0aCgpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRp
dm90U3RhcnQoKSwgbmV3RGl2b3QpOwotICAgIGdlbmVyYXRvci5tb3ZlKAotICAgICAgICBjYWxs
QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLAotICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVT
Y29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LCB2YXIsIFRocm93SWZOb3RGb3VuZCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVj
ZXNzYXJ5KHZhciwgZnVuYy5nZXQoKSwgbnVsbHB0cik7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0g
Z2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMu
Z2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3Rh
cnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICByZXR1cm4gcmV0OwpAQCAtMTI3NSw2ICsxMzA2LDggQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19kZWZpbmVFbnVtZXJhYmxlV3JpdGFi
bGVDb25maWcKIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIGJvb2wgYmFzZUlzU3Vw
ZXIgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7CiAgICAgYm9vbCBzdWJzY3JpcHRJc05vbkluZGV4
U3RyaW5nID0gaXNOb25JbmRleFN0cmluZ0VsZW1lbnQoKm1fc3Vic2NyaXB0KTsKIApAQCAtMTI4
Niw5ICsxMzE5LDExIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwKICAgICAgICAgICAgIGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
YmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vic2Ny
aXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CisKKyAg
ICAgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOwogICAgIH0KIAotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBmdW5jdGlvbjsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1JlZ2lz
dGVyOwogICAgIGlmIChiYXNlSXNTdXBlcikgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2Ugb25s
eSBuZWVkIHRvIGRvIHRoaXMgb25jZSBiZWNhdXNlIHdlIGVpdGhlciBoYXZlIGEgbm9uLVREWiB0
aGlzIG9yIHdlIHRocm93LiBPbmNlIHdlIGhhdmUgYSBub24tVERaIHRoaXMsIHdlIGNhbid0IGNo
YW5nZSBpdHMgdmFsdWUgYmFjayB0byBURFouCkBAIC0xMjk3LDE5ICsxMzMyLDIwIEBAIFJlZ2lz
dGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwKICAgICBpZiAoc3Vic2NyaXB0SXNOb25JbmRleFN0cmluZykgewog
ICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgp
LCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICAgICAgaWYg
KGJhc2VJc1N1cGVyKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5
SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0
ZXIuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNl
LmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1
YnNjcmlwdCktPnZhbHVlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9
IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJh
c2UuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNl
LmdldCgpLCBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5l
cmF0b3IuZW1pdE5vZGVGb3JQcm9wZXJ0eShtX3N1YnNjcmlwdCk7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25T
dGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCi0g
ICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIHByb3Bl
cnR5LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZnVuY3Rpb24u
Z2V0KCksIGJhc2UuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlW
YWwoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5n
ZXQoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGZ1bmN0aW9uLmdldCgp
LCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgfQorICAgIGlmIChpc09wdGlvbmFs
Q2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlv
bi5nZXQoKSk7CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1l
bnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGlmIChiYXNlSXNTdXBl
cikgewogICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrKGdlbmVyYXRvci50aGlzUmVnaXN0
ZXIoKSk7CkBAIC0xMzMxLDE0ICsxMzY3LDIxIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAg
ICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKICAgICBpZiAoYmFz
ZUlzU3VwZXIpCiAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIGdlbmVyYXRvci5lbnN1cmVUaGlzKCkpOwotICAgIGVsc2UKKyAgICBlbHNlIHsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1f
YmFzZSk7CisgICAgICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpKTsKKyAgICB9CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHBy
ZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7
CiAgICAgaWYgKGJhc2VJc1N1cGVyKSB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzdXBl
ckJhc2UgPSBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcik7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgc3VwZXJCYXNlLmdldCgpLCBjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50KTsKICAgICB9IGVsc2UKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBtX2lkZW50KTsKKworICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAg
ICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5nZXQoKSk7CisKICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5W
YWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6
WWVzKTsKICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiByZXQ7CkBAIC0xMzQ4LDE3ICsx
MzkxLDI0IEBAIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heERpc3RhbmNlVG9Jbm5lcm1vc3RD
YWxsT3JBcHBseSA9IDI7CiAKIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9iYXNlKTsKKworICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJh
c2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOwor
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwg
c3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7Ci0gICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGZ1bmN0aW9uOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9
IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gZnVuY3Rpb247CiAgICAgYXV0byBtYWtlRnVuY3Rpb24gPSBbJl0gewogICAgICAgICBpZiAo
bV9iYXNlLT5pc1N1cGVyTm9kZSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
dGhpc1ZhbHVlID0gZ2VuZXJhdG9yLmVuc3VyZVRoaXMoKTsKICAgICAgICAgICAgIGZ1bmN0aW9u
ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwg
YmFzZS5nZXQoKSwgdGhpc1ZhbHVlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1
aWx0aW5OYW1lcygpLmNhbGxQdWJsaWNOYW1lKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGlu
TmFtZXMoKS5jYWxsUHVibGljTmFtZSgpKTsKKworICAgICAgICBpZiAoaXNPcHRpb25hbENoYWlu
QmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmN0aW9u
LmdldCgpKTsKICAgICB9OwogCiAgICAgYm9vbCBlbWl0Q2FsbENoZWNrID0gIWdlbmVyYXRvci5p
c0J1aWx0aW5GdW5jdGlvbigpOwpAQCAtMTQzMCwxNSArMTQ4MCwyMiBAQCBSZWdpc3RlcklEKiBB
cHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLAogICAgIC8vIGZ1bmN0aW9uLmFwcGx5KHRoaXNBcmcsIFthcmcwLCBhcmcxLCAu
Li5dKSAtPiBjYW4gYmUgdHJpdmlhbGx5IGNvZXJjZWQgaW50byBmdW5jdGlvbi5jYWxsKHRoaXNB
cmcsIGFyZzAsIGFyZzEsIC4uLikgYW5kIHNhdmVzIG9iamVjdCBhbGxvY2F0aW9uCiAgICAgYm9v
bCBtYXlCZUNhbGwgPSBhcmVUcml2aWFsQXBwbHlBcmd1bWVudHMobV9hcmdzKTsKIAotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbjsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1
cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKworICAgIGlmICht
X2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRp
b25hbENoZWNrKGJhc2UuZ2V0KCkpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9u
OwogICAgIGF1dG8gbWFrZUZ1bmN0aW9uID0gWyZdIHsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNT
dXBlck5vZGUoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNWYWx1ZSA9
IGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7CiAgICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRv
ci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCks
IHRoaXNWYWx1ZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMo
KS5hcHBseVB1YmxpY05hbWUoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZnVuY3Rp
b24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3Qp
LCBiYXNlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFw
cGx5UHVibGljTmFtZSgpKTsKKworICAgICAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmN0aW9uLmdldCgpKTsK
ICAgICB9OwogCiAgICAgYm9vbCBlbWl0Q2FsbENoZWNrID0gIWdlbmVyYXRvci5pc0J1aWx0aW5G
dW5jdGlvbigpOwpAQCAtMTY5MiwyNSArMTc0OSwzMyBAQCBSZWdpc3RlcklEKiBEZWxldGVSZXNv
bHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dAogCiBSZWdpc3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQp
OwogCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5l
cmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socjAuZ2V0KCkpOworCisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1Jl
ZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIp
OwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMS5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0RGVsZXRlQnlWYWwoZmluYWxEZXN0LmdldCgpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOwog
fQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlRG90Tm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBEZWxldGVEb3RO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWlu
QmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socjAuZ2V0KCkpOwor
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpCiAgICAgICAgIHJl
dHVybiBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEg
c3VwZXIgcHJvcGVydHkiKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCBtX2lkZW50KTsKKyAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGZpbmFsRGVzdC5nZXQoKSwgcjAuZ2V0KCks
IG1faWRlbnQpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRl
VmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzQ2LDEz
ICsyNDExLDI4IEBAIFJlZ2lzdGVySUQqIENvYWxlc2NlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqCiAgICAgUmVmPExhYmVsPiB0YXJn
ZXQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAogICAgIGdlbmVyYXRvci5lbWl0Tm9kZSh0ZW1w
LmdldCgpLCBtX2V4cHIxKTsKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGdlbmVyYXRv
ci5lbWl0VW5hcnlPcDxPcElzVW5kZWZpbmVkT3JOdWxsPihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0SnVtcElm
RmFsc2UoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZUluVGFpbFBvc2l0aW9uKHRlbXAuZ2V0KCksIG1fZXhwcjIpOwogICAgIGdlbmVyYXRvci5lbWl0
TGFiZWwodGFyZ2V0LmdldCgpKTsKIAogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZShkc3QsIHRl
bXAuZ2V0KCkpOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3B0aW9u
YWxDaGFpbk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBP
cHRpb25hbENoYWluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0
ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKworICAgIGlmIChtX2lzT3V0ZXJt
b3N0KQorICAgICAgICBnZW5lcmF0b3IucHVzaE9wdGlvbmFsQ2hhaW5UYXJnZXQoKTsKKyAgICBn
ZW5lcmF0b3IuZW1pdE5vZGVJblRhaWxQb3NpdGlvbihmaW5hbERlc3QuZ2V0KCksIG1fZXhwcik7
CisgICAgaWYgKG1faXNPdXRlcm1vc3QpCisgICAgICAgIGdlbmVyYXRvci5wb3BPcHRpb25hbENo
YWluVGFyZ2V0KGZpbmFsRGVzdC5nZXQoKSwgbV9pc0RlbGV0ZSk7CisKKyAgICByZXR1cm4gZmlu
YWxEZXN0LmdldCgpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29u
ZGl0aW9uYWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklE
KiBDb25kaXRpb25hbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IGFjNDE1OWI4YWY1ZDcw
MjFkODg0Njc2OTM3ODFhMGIwOTMzNjViYjAuLjU1MDA2ZDRmZmJiNGE5NmQwZjk1MWQ2MzZiNDM5
NzVlMWJiYjU2OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC04NzUsOCArODc1LDcgQEAgZXF1YWxO
dWxsQ29tcGFyaXNvbk9wKG9wX25lcV9udWxsLCBPcE5lcU51bGwsCiAKIGxsaW50T3BXaXRoUmV0
dXJuKG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsLCBPcElzVW5kZWZpbmVkT3JOdWxsLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQogICAgIGdldChtX29wZXJhbmQsIHQwKQotICAg
IGFzc2VydE5vdENvbnN0YW50KHNpemUsIHQwKQotICAgIGxvYWRpIFRhZ09mZnNldFtjZnIsIHQw
LCA4XSwgdDEKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlVGFnKHNpemUsIHQwLCB0MSkKICAg
ICBvcmkgMSwgdDEKICAgICBjaWVxIHQxLCBOdWxsVGFnLCB0MQogICAgIHJldHVybihCb29sZWFu
VGFnLCB0MSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggZTA5Zjg5ODVmZTUzMTdhOGRkOWJiNDcxZWE5MmJhZGJi
OGQ1MWNhYy4uMTUzNGVhOGIzOGU2OGUwNjFmYjk5MWRmNDYwZjU5YTU1N2NkZjRlOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KQEAgLTgyNyw4ICs4MjcsOCBAQCBlcXVhbE51bGxDb21wYXJpc29uT3Aob3BfbmVxX251
bGwsIE9wTmVxTnVsbCwKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9pc191bmRlZmluZWRfb3Jf
bnVsbCwgT3BJc1VuZGVmaW5lZE9yTnVsbCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJl
dHVybikKLSAgICBnZXQobV9vcGVyYW5kLCB0MCkKLSAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQw
CisgICAgZ2V0KG1fb3BlcmFuZCwgdDEpCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXpl
LCB0MSwgdDApCiAgICAgYW5kcSB+VGFnQml0VW5kZWZpbmVkLCB0MAogICAgIGNxZXEgdDAsIFZh
bHVlTnVsbCwgdDAKICAgICBvcnEgVmFsdWVGYWxzZSwgdDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmgKaW5kZXggZGU1YjEzMzkwNjYxMTM0MTJhY2FlZWYyYmQ3NWUw
MzFhMzMzYTEwMC4uZDQ2YTBhMGExZWNiNjMxOWQwMTdkMDM3YmIyZjY2ZDY5OWU1YzMzMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAgLTEyOSw3ICsxMjks
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGludCAgRG9udEJ1aWxkU3RyaW5ncyA9IDA7
CiAKICAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpbmFyeU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgaW50IHRva2VuLCBzdGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+
LCBzdGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+KTsKLSAgICBFeHByZXNz
aW9uTm9kZSogbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05v
ZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNh
bGxPckFwcGx5Q2hpbGREZXB0aCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNh
bGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29s
IHByZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJv
b2wgaXNPcHRpb25hbENhbGwpOwogCiAgICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291
cmNlRWxlbWVudHMoKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEpTQzo6U291cmNlRWxl
bWVudHMoKTsgfQogCkBAIC0zNjAsNiArMzYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQogCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9wdGlvbmFsQ2hhaW4o
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4
cHJlc3Npb25Ob2RlKiBleHByLCBib29sIGlzT3V0ZXJtb3N0KQorICAgIHsKKyAgICAgICAgYmFz
ZS0+c2V0SXNPcHRpb25hbENoYWluQmFzZSgpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBPcHRpb25hbENoYWluTm9kZShsb2NhdGlvbiwgZXhwciwgaXNPdXRlcm1vc3QpOwor
ICAgIH0KKwogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVDb25kaXRpb25hbEV4cHIoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGxocywgRXhwcmVzc2lvbk5vZGUqIHJocykKICAgICB7CiAgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0
aW9uLCBsaHMsIHJocyk7CkBAIC0xMTQ4LDYgKzExNTQsMTcgQEAgRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VUeXBlT2ZOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHIKIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGVuZCkKIHsKKyAgICBpZiAoZXhwci0+aXNPcHRpb25hbENoYWluKCkp
IHsKKyAgICAgICAgT3B0aW9uYWxDaGFpbk5vZGUqIG9wdGlvbmFsQ2hhaW4gPSBzdGF0aWNfY2Fz
dDxPcHRpb25hbENoYWluTm9kZSo+KGV4cHIpOworICAgICAgICBpZiAob3B0aW9uYWxDaGFpbi0+
ZXhwcigpLT5pc0xvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcHRpb25hbENoYWlu
LT5pc091dGVybW9zdCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghb3B0aW9uYWxDaGFpbi0+ZXhw
cigpLT5pc1Jlc29sdmVOb2RlKCkpOworICAgICAgICAgICAgb3B0aW9uYWxDaGFpbi0+c2V0RXhw
cihtYWtlRGVsZXRlTm9kZShsb2NhdGlvbiwgb3B0aW9uYWxDaGFpbi0+ZXhwcigpLCBzdGFydCwg
ZGl2b3QsIGVuZCkpOworICAgICAgICAgICAgb3B0aW9uYWxDaGFpbi0+c2V0SXNEZWxldGUoKTsK
KyAgICAgICAgICAgIHJldHVybiBvcHRpb25hbENoYWluOworICAgICAgICB9CisgICAgfQorCiAg
ICAgaWYgKCFleHByLT5pc0xvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIERlbGV0ZVZhbHVlTm9kZShsb2NhdGlvbiwgZXhwcik7CiAgICAgaWYgKGV4cHItPmlz
UmVzb2x2ZU5vZGUoKSkgewpAQCAtMTM0NSwxNyArMTM2MiwzMCBAQCBFeHByZXNzaW9uTm9kZSog
QVNUQnVpbGRlcjo6bWFrZUJpdFhPck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcgogICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpdFhPck5vZGUobG9jYXRp
b24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKLUV4cHJlc3Npb25O
b2RlKiBBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VXYXNT
dXBlciwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3Rh
cnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90RW5kLCBzaXplX3QgY2FsbE9yQXBwbHlDaGlsZERlcHRoKQorRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBB
cmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQs
IHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJvb2wgaXNPcHRpb25hbENhbGwpCiB7CiAg
ICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQpOwogICAgIGlm
IChmdW5jLT5pc1N1cGVyTm9kZSgpKQogICAgICAgICB1c2VzU3VwZXJDYWxsKCk7CiAKICAgICBp
ZiAoZnVuYy0+aXNCeXRlY29kZUludHJpbnNpY05vZGUoKSkgeworICAgICAgICBBU1NFUlRfVU5V
U0VEKGlzT3B0aW9uYWxDYWxsLCAhaXNPcHRpb25hbENhbGwpOwogICAgICAgICBCeXRlY29kZUlu
dHJpbnNpY05vZGUqIGludHJpbnNpYyA9IHN0YXRpY19jYXN0PEJ5dGVjb2RlSW50cmluc2ljTm9k
ZSo+KGZ1bmMpOwogICAgICAgICBpZiAoaW50cmluc2ljLT50eXBlKCkgPT0gQnl0ZWNvZGVJbnRy
aW5zaWNOb2RlOjpUeXBlOjpDb25zdGFudCkKICAgICAgICAgICAgIHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEpIEJ5dGVjb2RlSW50cmluc2ljTm9kZShCeXRlY29kZUludHJpbnNpY05vZGU6OlR5
cGU6OkZ1bmN0aW9uLCBsb2NhdGlvbiwgaW50cmluc2ljLT5lbWl0dGVyKCksIGludHJpbnNpYy0+
aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgIH0K
KworICAgIC8vIERvbid0IHBhcnNlIGEgZG91Ymx5LW9wdGlvbmFsIGFjY2Vzcy1hbmQtY2FsbCBu
b2RlIChlLmcuIGBhPy5iPy4oKWApIGFzIHR3byBvcHRpb25hbCBjaGFpbnMsIG9yIHdlJ2xsIGxv
c2Ugb3VyIGB0aGlzYCB2YWx1ZS4KKyAgICBpZiAoZnVuYy0+aXNPcHRpb25hbENoYWluKCkpIHsK
KyAgICAgICAgT3B0aW9uYWxDaGFpbk5vZGUqIG9wdGlvbmFsQ2hhaW4gPSBzdGF0aWNfY2FzdDxP
cHRpb25hbENoYWluTm9kZSo+KGZ1bmMpOworICAgICAgICBpZiAob3B0aW9uYWxDaGFpbi0+ZXhw
cigpLT5pc0xvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaXNPcHRpb25h
bENhbGwsIGlzT3B0aW9uYWxDYWxsKTsKKyAgICAgICAgICAgIEFTU0VSVCghb3B0aW9uYWxDaGFp
bi0+aXNPdXRlcm1vc3QoKSk7CisgICAgICAgICAgICBBU1NFUlQoIW9wdGlvbmFsQ2hhaW4tPmV4
cHIoKS0+aXNSZXNvbHZlTm9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlRnVuY3Rpb25D
YWxsTm9kZShsb2NhdGlvbiwgb3B0aW9uYWxDaGFpbi0+ZXhwcigpLCBwcmV2aW91c0Jhc2VXYXNT
dXBlciwgYXJncywgZGl2b3RTdGFydCwgZGl2b3QsIGRpdm90RW5kLCBjYWxsT3JBcHBseUNoaWxk
RGVwdGgsIGlzT3B0aW9uYWxDYWxsKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghZnVu
Yy0+aXNMb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5j
dGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCk7CiAgICAgaWYgKGZ1bmMtPmlzUmVzb2x2ZU5vZGUoKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAppbmRleCBlOThjZGI1ZTU5ZTIzMDcyYzE5MDE4Zjg3
ZDEwYzJkNDUyZDljZDM5Li5mMWJkNjM2ZDZmNDY0NzcxMmRiMDQ0ZGY4MTJmZmZkNmRhMTc0MmJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcApAQCAtMjE1NywxMCArMjE1
NywxNyBAQCBzdGFydDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGFyYWN0ZXJRdWVzdGlv
bjoKICAgICAgICAgc2hpZnQoKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU51bGxpc2hDb2Fs
ZXNjaW5nKCkgJiYgbV9jdXJyZW50ID09ICc/JykgewotICAgICAgICAgICAgc2hpZnQoKTsKLSAg
ICAgICAgICAgIHRva2VuID0gQ09BTEVTQ0U7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZU51bGxpc2hBd2FyZU9wZXJhdG9ycygpKSB7CisgICAgICAgICAgICBp
ZiAobV9jdXJyZW50ID09ICc/JykgeworICAgICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAg
ICAgICAgICAgdG9rZW4gPSBDT0FMRVNDRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJy4nICYmICFpc0FTQ0lJRGln
aXQocGVlaygxKSkpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAg
IHRva2VuID0gUVVFU1RJT05ET1Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgdG9rZW4gPSBRVUVTVElPTjsKICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3Rv
cnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCmlu
ZGV4IGQ0MWUzYWVkOGU0NWY3YThlMmZkMzFjMjQ0NzdkZWNjYjhkNTY0MGYuLmQ2NWIwOGI3OTg4
MzBiYjFmNTlmN2JiYTYxYmFiYzgzZjJhMDZiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCkBAIC02NzYsNiArNjc2LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKKyAgICBpbmxpbmUgT3B0aW9uYWxDaGFpbk5vZGU6
Ok9wdGlvbmFsQ2hhaW5Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBleHByLCBib29sIGlzT3V0ZXJtb3N0KQorICAgICAgICA6IEV4cHJlc3Npb25O
b2RlKGxvY2F0aW9uKQorICAgICAgICAsIG1fZXhwcihleHByKQorICAgICAgICAsIG1faXNPdXRl
cm1vc3QoaXNPdXRlcm1vc3QpCisgICAgeworICAgIH0KKwogICAgIGlubGluZSBDb25kaXRpb25h
bE5vZGU6OkNvbmRpdGlvbmFsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogbG9naWNhbCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjIpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAg
ICwgbV9sb2dpY2FsKGxvZ2ljYWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5k
ZXggODZmZGFmM2QwNGZkMGQ4ZjdmNDg3ZDE3NzM3N2UyYTM3ZTk1YTc4Ny4uZjYzYzAyOGVhYmY3
MjAzMjU3MmE2OWY3YjhhYTM1NTJkOWVmNDE2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuaApAQCAtMjA1LDYgKzIwNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNCeXRlY29kZUludHJpbnNpY05vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCaW5hcnlPcE5vZGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbkNhbGwoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNPcHRpb25hbENoYWluKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2Rl
SW5Db25kaXRpb25Db250ZXh0KEJ5dGVjb2RlR2VuZXJhdG9yJiwgTGFiZWwmLCBMYWJlbCYsIEZh
bGxUaHJvdWdoTW9kZSk7CiAKQEAgLTIxMiw4ICsyMTMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgUmVzdWx0VHlwZSByZXN1bHREZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXN1bHRUeXBlOyB9CiAKKyAgICAgICAgYm9vbCBpc09wdGlvbmFsQ2hhaW5CYXNlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc09wdGlvbmFsQ2hhaW5CYXNlOyB9CisgICAgICAgIHZvaWQgc2V0SXNPcHRp
b25hbENoYWluQmFzZSgpIHsgbV9pc09wdGlvbmFsQ2hhaW5CYXNlID0gdHJ1ZTsgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgUmVzdWx0VHlwZSBtX3Jlc3VsdFR5cGU7CisgICAgICAgIGJvb2wg
bV9pc09wdGlvbmFsQ2hhaW5CYXNlIHsgZmFsc2UgfTsKICAgICB9OwogCiAgICAgY2xhc3MgU3Rh
dGVtZW50Tm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTEzMTAsMTIgKzEzMTUsMzMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIENvYWxlc2NlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMik7CiAKICAgICBwcml2
YXRlOgotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IG51bGxwdHIpIGZpbmFsOwog
CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHIxOwogICAgICAgICBFeHByZXNzaW9uTm9k
ZSogbV9leHByMjsKICAgICB9OwogCisgICAgY2xhc3MgT3B0aW9uYWxDaGFpbk5vZGUgZmluYWwg
OiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgT3B0aW9uYWxD
aGFpbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBib29sKTsK
KworICAgICAgICB2b2lkIHNldEV4cHIoRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgbV9leHByID0g
ZXhwcjsgfQorICAgICAgICBFeHByZXNzaW9uTm9kZSogZXhwcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwcjsgfQorCisgICAgICAgIGJvb2wgaXNPdXRlcm1vc3QoKSBjb25zdCB7IHJldHVybiBtX2lz
T3V0ZXJtb3N0OyB9CisKKyAgICAgICAgdm9pZCBzZXRJc0RlbGV0ZSgpIHsgbV9pc0RlbGV0ZSA9
IHRydWU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gbnVsbHB0cikgZmluYWw7CisKKyAg
ICAgICAgYm9vbCBpc09wdGlvbmFsQ2hhaW4oKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
CisKKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjsKKyAgICAgICAgYm9vbCBtX2lzT3V0
ZXJtb3N0OworICAgICAgICBib29sIG1faXNEZWxldGUgeyBmYWxzZSB9OworICAgIH07CisKICAg
ICAvLyBUaGUgdGVybmFyeSBvcGVyYXRvciwgIm1fbG9naWNhbCA/IG1fZXhwcjEgOiBtX2V4cHIy
IgogICAgIGNsYXNzIENvbmRpdGlvbmFsTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9k
ZSB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmlu
ZGV4IGY4ZGJlNzE5NmYxMTE3MTZkMGE1OGY3ZjU3ZTNmOGY2N2I3YTJhY2YuLmU2NDQ1Y2Q2NjE2
NWFhNmZjM2RjOTU5NGFkZWZlOGIyYmFhODc3M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAKQEAgLTQ4MDgsMTAzICs0ODA4LDEzNiBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJl
ckV4cHJlcwogICAgIH0KIAogICAgIGZhaWxJZkZhbHNlKGJhc2UsICJDYW5ub3QgcGFyc2UgYmFz
ZSBleHByZXNzaW9uIik7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgbG9jYXRpb24gPSB0
b2tlbkxvY2F0aW9uKCk7Ci0gICAgICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKLSAgICAg
ICAgY2FzZSBPUEVOQlJBQ0tFVDogewotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2
aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNz
aW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKworICAgIGRvIHsKKyAgICAgICAgVHJl
ZUV4cHJlc3Npb24gb3B0aW9uYWxDaGFpbkJhc2UgPSAwOworICAgICAgICBKU1Rva2VuTG9jYXRp
b24gb3B0aW9uYWxDaGFpbkxvY2F0aW9uOworICAgICAgICBKU1Rva2VuVHlwZSB0eXBlID0gbV90
b2tlbi5tX3R5cGU7CisKKyAgICAgICAgaWYgKG1hdGNoKFFVRVNUSU9ORE9UKSkgeworICAgICAg
ICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG5ld0NvdW50LCAiQ2Fubm90IGNhbGwgY29uc3RydWN0
b3IgaW4gYW4gb3B0aW9uYWwgY2hhaW4iKTsKKyAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1
ZShiYXNlSXNTdXBlciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGhlIGJhc2Ugb2YgYW4gb3B0aW9u
YWwgY2hhaW4iKTsKKyAgICAgICAgICAgIG9wdGlvbmFsQ2hhaW5CYXNlID0gYmFzZTsKKyAgICAg
ICAgICAgIG9wdGlvbmFsQ2hhaW5Mb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKKworICAgICAg
ICAgICAgU2F2ZVBvaW50IHNhdmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgpOwogICAgICAgICAg
ICAgbmV4dCgpOwotICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5u
b25MSFNDb3VudDsKLSAgICAgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX3BhcnNl
clN0YXRlLmFzc2lnbm1lbnRDb3VudDsKLSAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIHByb3Bl
cnR5ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICAgICAgZmFpbElmRmFsc2Uo
cHJvcGVydHksICJDYW5ub3QgcGFyc2Ugc3Vic2NyaXB0IGV4cHJlc3Npb24iKTsKLSAgICAgICAg
ICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3Moc3RhcnRMb2NhdGlvbiwgYmFz
ZSwgcHJvcGVydHksIGluaXRpYWxBc3NpZ25tZW50cyAhPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1l
bnRDb3VudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9u
KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIg
JiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKLSAgICAgICAgICAgICAgICBj
dXJyZW50RnVuY3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJQcm9w
ZXJ0eSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWls
KENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5kIiwgInN1YnNjcmlwdCBleHByZXNzaW9uIik7Ci0gICAg
ICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChtYXRjaChPUEVOQlJBQ0tFVCkgfHwgbWF0Y2go
T1BFTlBBUkVOKSB8fCBtYXRjaChCQUNLUVVPVEUpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBt
X3Rva2VuLm1fdHlwZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHR5cGUg
PSBET1Q7CisgICAgICAgICAgICAgICAgcmVzdG9yZVNhdmVQb2ludChzYXZlUG9pbnQpOworICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGNhc2UgT1BFTlBBUkVOOiB7Ci0gICAgICAg
ICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAg
ICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Ci0gICAgICAg
ICAgICBpZiAobmV3Q291bnQpIHsKLSAgICAgICAgICAgICAgICBuZXdDb3VudC0tOwotICAgICAg
ICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3Np
dGlvbigpOwotICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VB
cmd1bWVudHMoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgZmFpbElmRmFsc2UoYXJndW1lbnRz
LCAiQ2Fubm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgYmFzZSA9
IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgYXJndW1lbnRzLCBleHByZXNz
aW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgdXNlZFZhcmlhYmxlc1NpemUg
PSBjdXJyZW50U2NvcGUoKS0+Y3VycmVudFVzZWRWYXJpYWJsZXNTaXplKCk7CisKKyAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwor
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIE9QRU5CUkFDS0VU
OiB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNv
dW50Kys7CiAgICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxh
c3RUb2tlbkVuZFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICAgICAgT3B0aW9uYWw8Q2FsbE9yQXBw
bHlEZXB0aFNjb3BlPiBjYWxsT3JBcHBseURlcHRoU2NvcGU7Ci0gICAgICAgICAgICAgICAgcmVj
b3JkQ2FsbE9yQXBwbHlEZXB0aDxUcmVlQnVpbGRlcj4odGhpcywgKm1fdm0sIGNhbGxPckFwcGx5
RGVwdGhTY29wZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAg
ICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CisgICAgICAg
ICAgICAgICAgaW50IGluaXRpYWxBc3NpZ25tZW50cyA9IG1fcGFyc2VyU3RhdGUuYXNzaWdubWVu
dENvdW50OworICAgICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIHByb3BlcnR5ID0gcGFyc2VF
eHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5
LCAiQ2Fubm90IHBhcnNlIHN1YnNjcmlwdCBleHByZXNzaW9uIik7CisgICAgICAgICAgICAgICAg
YmFzZSA9IGNvbnRleHQuY3JlYXRlQnJhY2tldEFjY2VzcyhzdGFydExvY2F0aW9uLCBiYXNlLCBw
cm9wZXJ0eSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENv
dW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7
CiAKLSAgICAgICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1l
bnRzKGNvbnRleHQpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShiYXNlSXNTdXBlciAm
JiBjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50RnVuY3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJQ
cm9wZXJ0eSgpOwogCi0gICAgICAgICAgICAgICAgaWYgKGJhc2VJc0FzeW5jS2V5d29yZCAmJiAo
IWFyZ3VtZW50cyB8fCBtYXRjaChBUlJPV0ZVTkNUSU9OKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNjb3BlKCktPnJldmVydFRvUHJldmlvdXNVc2VkVmFyaWFibGVzKHVzZWRWYXJp
YWJsZXNTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yY2VDbGFzc2lmeUV4cHJlc3Npb25F
cnJvcihFcnJvckluZGljYXRlc0FzeW5jQXJyb3dGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAg
ICAgIGZhaWxEdWVUb1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5k
IiwgInN1YnNjcmlwdCBleHByZXNzaW9uIik7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0
ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBPUEVOUEFSRU46IHsKKyAgICAgICAgICAgICAg
ICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgICAg
ICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OworICAgICAg
ICAgICAgICAgIGlmIChuZXdDb3VudCkgeworICAgICAgICAgICAgICAgICAgICBuZXdDb3VudC0t
OworICAgICAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFz
dFRva2VuRW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBh
cmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAg
ZmFpbElmRmFsc2UoYXJndW1lbnRzLCAiQ2Fubm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7Cisg
ICAgICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24s
IGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9r
ZW5FbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgdXNlZFZhcmlhYmxlc1NpemUgPSBjdXJyZW50U2NvcGUoKS0+Y3VycmVu
dFVzZWRWYXJpYWJsZXNTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9u
IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAg
ICAgICBPcHRpb25hbDxDYWxsT3JBcHBseURlcHRoU2NvcGU+IGNhbGxPckFwcGx5RGVwdGhTY29w
ZTsKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkQ2FsbE9yQXBwbHlEZXB0aDxUcmVlQnVpbGRl
cj4odGhpcywgKm1fdm0sIGNhbGxPckFwcGx5RGVwdGhTY29wZSwgYmFzZSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250
ZXh0KTsKIAotICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBw
YXJzZSBjYWxsIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgIGlmIChiYXNlSXNTdXBlcikg
ewotICAgICAgICAgICAgICAgICAgICBTY29wZVJlZiBmdW5jdGlvblNjb3BlID0gY3VycmVudEZ1
bmN0aW9uU2NvcGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvblNjb3BlLT5z
ZXRIYXNEaXJlY3RTdXBlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCB1bm5l
Y2Vzc2FyeSB0byBjaGVjayBvZiB1c2luZyBzdXBlciBkdXJpbmcgcmVwYXJzaW5nIG9uZSBtb3Jl
IHRpbWUuIEFsc28gaXQgY2FuIGxlYWQgdG8gc3ludGF4IGVycm9yCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpbiBjYXNlIG9mIGFycm93IGZ1bmN0aW9uIGJlY2F1c2UgZHVyaW5nIHJlcGFy
c2luZyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgd2UgY3VycmVudGx5IHBhcnNlIHRoZSBhcnJvdyBm
dW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9mIHRoZSBjb25zdHJ1
Y3RvciBvciBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbGV4ZXItPmlz
UmVwYXJzaW5nRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjb3Bl
UmVmIGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUgPSBjbG9zZXN0UGFyZW50T3JkaW5hcnlG
dW5jdGlvbk5vbkxleGljYWxTY29wZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
bnN0cnVjdG9yS2luZCBmdW5jdGlvbkNvbnN0cnVjdG9yS2luZCA9ICFmdW5jdGlvblNjb3BlLT5p
c0Fycm93RnVuY3Rpb24oKSAmJiAhY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZS0+aXNFdmFs
Q29udGV4dCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZnVuY3Rpb25TY29w
ZS0+Y29uc3RydWN0b3JLaW5kKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBj
bG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlLT5jb25zdHJ1Y3RvcktpbmQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3Rv
cktpbmQgPT0gQ29uc3RydWN0b3JLaW5kOjpOb25lLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRo
aXMgY29udGV4dCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElm
VHJ1ZShmdW5jdGlvbkNvbnN0cnVjdG9yS2luZCAhPSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMs
ICJzdXBlciBpcyBub3QgdmFsaWQgaW4gdGhpcyBjb250ZXh0Iik7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChiYXNlSXNBc3luY0tleXdvcmQgJiYgKCFhcmd1bWVudHMgfHwgbWF0Y2goQVJST1dG
VU5DVElPTikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+cmV2
ZXJ0VG9QcmV2aW91c1VzZWRWYXJpYWJsZXModXNlZFZhcmlhYmxlc1NpemUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yY2VDbGFzc2lmeUV4cHJlc3Npb25FcnJvcihFcnJvckluZGljYXRl
c0FzeW5jQXJyb3dGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsRHVlVG9V
bmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50
cyIpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFNjb3BlUmVmIGZ1bmN0aW9uU2NvcGUgPSBjdXJyZW50RnVuY3Rpb25TY29w
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvblNjb3BlLT5zZXRIYXNE
aXJlY3RTdXBlcigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQgdW5uZWNl
c3NhcnkgdG8gY2hlY2sgb2YgdXNpbmcgc3VwZXIgZHVyaW5nIHJlcGFyc2luZyBvbmUgbW9yZSB0
aW1lLiBBbHNvIGl0IGNhbiBsZWFkIHRvIHN5bnRheCBlcnJvcgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGluIGNhc2Ugb2YgYXJyb3cgZnVuY3Rpb24gYmVjYXVzZSBkdXJpbmcgcmVw
YXJzaW5nIHdlIGRvbid0IGtub3cgd2hldGhlciB3ZSBjdXJyZW50bHkgcGFyc2UgdGhlIGFycm93
IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9mIHRoZSBj
b25zdHJ1Y3RvciBvciBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X2xleGVyLT5pc1JlcGFyc2luZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2NvcGVSZWYgY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZSA9IGNsb3Nlc3RQ
YXJlbnRPcmRpbmFyeUZ1bmN0aW9uTm9uTGV4aWNhbFNjb3BlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yS2luZCBmdW5jdGlvbkNvbnN0cnVjdG9yS2luZCA9
ICFmdW5jdGlvblNjb3BlLT5pc0Fycm93RnVuY3Rpb24oKSAmJiAhY2xvc2VzdE9yZGluYXJ5RnVu
Y3Rpb25TY29wZS0+aXNFdmFsQ29udGV4dCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA/IGZ1bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9yS2luZCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmNv
bnN0cnVjdG9yS2luZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRp
Y0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPT0gQ29uc3RydWN0b3JLaW5kOjpO
b25lLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3Rv
cktpbmQgIT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzLCAic3VwZXIgaXMgbm90IHZhbGlkIGlu
IHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2Nv
cGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb25TY29wZS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyQ2FsbCgpOwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcGUoKS0+
aXNBcnJvd0Z1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblNjb3Bl
LT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJDYWxsKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgYm9vbCBpc09wdGlvbmFsQ2FsbCA9IG9wdGlvbmFsQ2hhaW5Mb2NhdGlvbi5lbmRPZmZz
ZXQgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cHJlc3Npb25FbmQub2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQubWFrZUZ1bmN0aW9uQ2FsbE5vZGUoc3RhcnRM
b2NhdGlvbiwgYmFzZSwgcHJldmlvdXNCYXNlV2FzU3VwZXIsIGFyZ3VtZW50cywgZXhwcmVzc2lv
blN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2Vu
RW5kUG9zaXRpb24oKSwgY2FsbE9yQXBwbHlEZXB0aFNjb3BlID8gY2FsbE9yQXBwbHlEZXB0aFNj
b3BlLT5kaXN0YW5jZVRvSW5uZXJtb3N0Q2hpbGQoKSA6IDAsIGlzT3B0aW9uYWxDYWxsKTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNPcHRpb25hbENhbGwpCisgICAgICAgICAgICAgICAg
ICAgICAgICBvcHRpb25hbENoYWluQmFzZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKHN0YXJ0TG9j
YXRpb24sIGJhc2UsIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBhcmd1bWVudHMsIGV4cHJlc3Npb25T
dGFydCwKLSAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9z
aXRpb24oKSwgY2FsbE9yQXBwbHlEZXB0aFNjb3BlID8gY2FsbE9yQXBwbHlEZXB0aFNjb3BlLT5k
aXN0YW5jZVRvSW5uZXJtb3N0Q2hpbGQoKSA6IDApOworICAgICAgICAgICAgICAgIG1fcGFyc2Vy
U3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBu
b25MSFNDb3VudDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RE9UOiB7Ci0gICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291
bnQrKzsKLSAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9r
ZW5FbmRQb3NpdGlvbigpOwotICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXJG
bGFnc0lnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkS2V5d29yZHMp
OwotICAgICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQsICJFeHBlY3RlZCBhIHByb3BlcnR5IG5h
bWUgYWZ0ZXIgJy4nIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVEb3RBY2Nl
c3Moc3RhcnRMb2NhdGlvbiwgYmFzZSwgbV90b2tlbi5tX2RhdGEuaWRlbnQsIGV4cHJlc3Npb25T
dGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIGlm
IChVTkxJS0VMWShiYXNlSXNTdXBlciAmJiBjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9u
KCkpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblNjb3BlKCktPnNldElubmVyQXJy
b3dGdW5jdGlvblVzZXNTdXBlclByb3BlcnR5KCk7Ci0gICAgICAgICAgICBuZXh0KCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEJBQ0tRVU9URTogewotICAg
ICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGJhc2VJc1N1cGVyLCAiQ2Fubm90IHVzZSBzdXBl
ciBhcyB0YWcgZm9yIHRhZ2dlZCB0ZW1wbGF0ZXMiKTsKLSAgICAgICAgICAgIEpTVGV4dFBvc2l0
aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwotICAgICAgICAgICAg
aW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKLSAgICAgICAgICAg
IHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpUZW1wbGF0ZUxpdGVyYWwgdGVtcGxhdGVMaXRlcmFsID0g
cGFyc2VUZW1wbGF0ZUxpdGVyYWwoY29udGV4dCwgTGV4ZXJUeXBlOjpSYXdTdHJpbmdzQnVpbGRN
b2RlOjpCdWlsZFJhd1N0cmluZ3MpOwotICAgICAgICAgICAgZmFpbElmRmFsc2UodGVtcGxhdGVM
aXRlcmFsLCAiQ2Fubm90IHBhcnNlIHRlbXBsYXRlIGxpdGVyYWwiKTsKLSAgICAgICAgICAgIGJh
c2UgPSBjb250ZXh0LmNyZWF0ZVRhZ2dlZFRlbXBsYXRlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHRl
bXBsYXRlTGl0ZXJhbCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5F
bmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBu
b25MSFNDb3VudDsKLSAgICAgICAgICAgIG1fc2VlblRhZ2dlZFRlbXBsYXRlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBnb3RvIGVuZE1lbWJlckV4cHJlc3Npb247CisgICAgICAgICAgICBjYXNlIERPVDogeworICAg
ICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwor
ICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5F
bmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVy
RmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRz
KTsKKyAgICAgICAgICAgICAgICBtYXRjaE9yRmFpbChJREVOVCwgIkV4cGVjdGVkIGEgcHJvcGVy
dHkgbmFtZSBhZnRlciAiLCBvcHRpb25hbENoYWluQmFzZSA/ICInPy4nIiA6ICInLiciKTsKKyAg
ICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVEb3RBY2Nlc3Moc3RhcnRMb2NhdGlv
biwgYmFzZSwgbV90b2tlbi5tX2RhdGEuaWRlbnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lv
bkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFko
YmFzZUlzU3VwZXIgJiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uU2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0
aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKKyAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEJBQ0tRVU9U
RTogeworICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShvcHRpb25hbENoYWluQmFz
ZSwgIkNhbm5vdCB1c2UgdGFnZ2VkIHRlbXBsYXRlcyBpbiBhbiBvcHRpb25hbCBjaGFpbiIpOwor
ICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNlSXNTdXBlciwgIkNhbm5vdCB1
c2Ugc3VwZXIgYXMgdGFnIGZvciB0YWdnZWQgdGVtcGxhdGVzIik7CisgICAgICAgICAgICAgICAg
SlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3Vu
dDsKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6VGVtcGxhdGVMaXRlcmFs
IHRlbXBsYXRlTGl0ZXJhbCA9IHBhcnNlVGVtcGxhdGVMaXRlcmFsKGNvbnRleHQsIExleGVyVHlw
ZTo6UmF3U3RyaW5nc0J1aWxkTW9kZTo6QnVpbGRSYXdTdHJpbmdzKTsKKyAgICAgICAgICAgICAg
ICBmYWlsSWZGYWxzZSh0ZW1wbGF0ZUxpdGVyYWwsICJDYW5ub3QgcGFyc2UgdGVtcGxhdGUgbGl0
ZXJhbCIpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZVRhZ2dlZFRlbXBs
YXRlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHRlbXBsYXRlTGl0ZXJhbCwgZXhwcmVzc2lvblN0YXJ0
LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAg
ICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CisgICAgICAgICAgICAg
ICAgbV9zZWVuVGFnZ2VkVGVtcGxhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBnb3Rv
IGVuZE9mQ2hhaW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmV2aW91c0Jhc2VXYXNT
dXBlciA9IGJhc2VJc1N1cGVyOworICAgICAgICAgICAgYmFzZUlzU3VwZXIgPSBmYWxzZTsKKyAg
ICAgICAgICAgIHR5cGUgPSBtX3Rva2VuLm1fdHlwZTsKICAgICAgICAgfQotICAgICAgICBwcmV2
aW91c0Jhc2VXYXNTdXBlciA9IGJhc2VJc1N1cGVyOwotICAgICAgICBiYXNlSXNTdXBlciA9IGZh
bHNlOwotICAgIH0KLWVuZE1lbWJlckV4cHJlc3Npb246CitlbmRPZkNoYWluOgorICAgICAgICBp
ZiAob3B0aW9uYWxDaGFpbkJhc2UpCisgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVP
cHRpb25hbENoYWluKG9wdGlvbmFsQ2hhaW5Mb2NhdGlvbiwgb3B0aW9uYWxDaGFpbkJhc2UsIGJh
c2UsICFtYXRjaChRVUVTVElPTkRPVCkpOworICAgIH0gd2hpbGUgKG1hdGNoKFFVRVNUSU9ORE9U
KSk7CisKICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3VwZXIsICJzdXBlciBpcyBub3Qg
dmFsaWQgaW4gdGhpcyBjb250ZXh0Iik7CiAgICAgd2hpbGUgKG5ld0NvdW50LS0pCiAgICAgICAg
IGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGV4cHJlc3Npb25T
dGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJUb2tlbnMuaAppbmRleCAxNWNhNWVhZjI4ZTc1OTJmNDNmM2RjZTQxZThlNDFl
NjFhOWU4MTM2Li43MjA2NGI5Mjg0ODE2NmY2ZGUyYjIzZjhhM2Y1OGM5ODFiNzY3OWU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKQEAgLTEzNiw2ICsx
MzYsNyBAQCBlbnVtIEpTVG9rZW5UeXBlIHsKICAgICBPUkVRVUFMLAogICAgIERPVERPVERPVCwK
ICAgICBBUlJPV0ZVTkNUSU9OLAorICAgIFFVRVNUSU9ORE9ULAogICAgIExhc3RVbnRhZ2dlZFRv
a2VuLAogCiAgICAgLy8gQmVnaW4gdGFnZ2VkIHRva2VucwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAppbmRleCA0MTk5NThiZWRiNDI4MTFiMTYyODQwMWNk
NGE0Mjk4YTVhNWNmMzc2Li42Y2U3M2Y3ZmNjMzMwOTE3ZDY4ZjlkMWJkZDFiZWQ5YmJmODUwYzdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaApAQCAt
NzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJlc29sdmVFdmFsRXhwciwgUmVzb2x2ZUV4
cHIsIEludGVnZXJFeHByLCBEb3VibGVFeHByLCBTdHJpbmdFeHByLCBCaWdJbnRFeHByLAogICAg
ICAgICBUaGlzRXhwciwgTnVsbEV4cHIsIEJvb2xFeHByLCBSZWdFeHBFeHByLCBPYmplY3RMaXRl
cmFsRXhwciwKICAgICAgICAgRnVuY3Rpb25FeHByLCBDbGFzc0V4cHIsIFN1cGVyRXhwciwgSW1w
b3J0RXhwciwgQnJhY2tldEV4cHIsIERvdEV4cHIsIENhbGxFeHByLAotICAgICAgICBOZXdFeHBy
LCBQcmVFeHByLCBQb3N0RXhwciwgVW5hcnlFeHByLCBCaW5hcnlFeHByLAorICAgICAgICBOZXdF
eHByLCBQcmVFeHByLCBQb3N0RXhwciwgVW5hcnlFeHByLCBCaW5hcnlFeHByLCBPcHRpb25hbENo
YWluLAogICAgICAgICBDb25kaXRpb25hbEV4cHIsIEFzc2lnbm1lbnRFeHByLCBUeXBlb2ZFeHBy
LAogICAgICAgICBEZWxldGVFeHByLCBBcnJheUxpdGVyYWxFeHByLCBCaW5kaW5nRGVzdHJ1Y3R1
cmluZywgUmVzdFBhcmFtZXRlciwKICAgICAgICAgQXJyYXlEZXN0cnVjdHVyaW5nLCBPYmplY3RE
ZXN0cnVjdHVyaW5nLCBTb3VyY2VFbGVtZW50c1Jlc3VsdCwKQEAgLTE0Nyw3ICsxNDcsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIERvbnRCdWlsZFN0cmluZ3MgPSBMZXhl
ckZsYWdzRG9udEJ1aWxkU3RyaW5nczsKIAogICAgIGludCBjcmVhdGVTb3VyY2VFbGVtZW50cygp
IHsgcmV0dXJuIFNvdXJjZUVsZW1lbnRzUmVzdWx0OyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFr
ZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBib29sLCBpbnQs
IGludCwgaW50LCBpbnQsIHNpemVfdCkgeyByZXR1cm4gQ2FsbEV4cHI7IH0KKyAgICBFeHByZXNz
aW9uVHlwZSBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHBy
ZXNzaW9uVHlwZSwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50LCBzaXplX3QsIGJvb2wpIHsgcmV0
dXJuIENhbGxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29tbWFFeHByKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlIGV4cHIpIHsgcmV0dXJuIGV4cHI7IH0K
ICAgICBFeHByZXNzaW9uVHlwZSBhcHBlbmRUb0NvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uVHlwZSYgaGVhZCwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBl
IG5leHQpIHsgaGVhZCA9IG5leHQ7IHJldHVybiBuZXh0OyB9CiAgICAgRXhwcmVzc2lvblR5cGUg
bWFrZUFzc2lnbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9w
ZXJhdG9yLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgYm9vbCwgaW50LCBpbnQsIGludCkgeyByZXR1
cm4gQXNzaWdubWVudEV4cHI7IH0KQEAgLTE4NCw2ICsxODQsNyBAQCBwdWJsaWM6CiAgICAgRXhw
cmVzc2lvblR5cGUgY3JlYXRlUmVnRXhwKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElk
ZW50aWZpZXImIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXImIGZsYWdzLCBpbnQpIHsgcmV0dXJu
IFlhcnI6Omhhc0Vycm9yKFlhcnI6OmNoZWNrU3ludGF4KHBhdHRlcm4uc3RyaW5nKCksIGZsYWdz
LnN0cmluZygpKSkgPyAwIDogUmVnRXhwRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50
LCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50
KSB7IHJldHVybiBOZXdFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT3B0aW9uYWxD
aGFpbihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5
cGUsIGJvb2wpIHsgcmV0dXJuIE9wdGlvbmFsQ2hhaW47IH0KICAgICBFeHByZXNzaW9uVHlwZSBj
cmVhdGVDb25kaXRpb25hbEV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5
cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gQ29uZGl0aW9uYWxF
eHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXNzaWduUmVzb2x2ZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50
LCBpbnQsIEFzc2lnbm1lbnRDb250ZXh0KSB7IHJldHVybiBBc3NpZ25tZW50RXhwcjsgfQogICAg
IEV4cHJlc3Npb25UeXBlIGNyZWF0ZUVtcHR5VmFyRXhwcmVzc2lvbihjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBjb25zdCBJZGVudGlmaWVyJikgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAK
aW5kZXggMTU2YzE4MGUxODM0N2Y0N2M5MzkwNDU5ZTVkMjE3NTExYjk4MzFmZi4uOWU3NTg5MmU1
MDc2NTcxNTJiY2IzNzNiNmYwYjU4ODI2YzE1NGMyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKQEAgLTE3Niw2ICsxNzYsMTAg
QEAgc3RhdGljIFN0cmluZyBmdW5jdGlvbkNhbGxCYXNlKGNvbnN0IFN0cmluZyYgc291cmNlVGV4
dCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAorICAgIC8vIERvbid0IGRpc3Bs
YXkgdGhlID8uIG9mIGFuIG9wdGlvbmFsIGNhbGwuCisgICAgaWYgKGlkeCA+IDEgJiYgc291cmNl
VGV4dFtpZHhdID09ICcuJyAmJiBzb3VyY2VUZXh0W2lkeCAtIDFdID09ICc/JykKKyAgICAgICAg
aWR4IC09IDI7CisKICAgICByZXR1cm4gc291cmNlVGV4dC5sZWZ0KGlkeCArIDEpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggMGQ1ODJlZWFjMzNlY2Ew
ZTRhZDhlNDg5NjU5YjQzMDE5ZDQ0ZTdhYy4uN2JiMTNlNGVlOTgwYzU4ZjcwZDgxMTQ4YjgxODY5
MDYzNzk0ZWU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAt
NDk2LDcgKzQ5Niw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW5n
QXBpID0gZmFsc2U7CiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseVJlZmVyZW5jZXMsIGZhbHNl
LCBOb3JtYWwsICJBbGxvdyB0eXBlcyBmcm9tIHRoZSB3YXNtIHJlZmVyZW5jZXMgc3BlYy4iKSBc
CiAgICAgdihib29sLCB1c2VXZWFrUmVmcywgZmFsc2UsIE5vcm1hbCwgIkV4cG9zZSB0aGUgV2Vh
a1JlZiBjb25zdHJ1Y3Rvci4iKSBcCiAgICAgdihib29sLCB1c2VCaWdJbnQsIGZhbHNlLCBOb3Jt
YWwsICJJZiB0cnVlLCB3ZSB3aWxsIGVuYWJsZSBCaWdJbnQgc3VwcG9ydC4iKSBcCi0gICAgdihi
b29sLCB1c2VOdWxsaXNoQ29hbGVzY2luZywgZmFsc2UsIE5vcm1hbCwgIkVuYWJsZSBzdXBwb3J0
IGZvciB0aGUgPz8gb3BlcmF0b3IuIikgXAorICAgIHYoYm9vbCwgdXNlTnVsbGlzaEF3YXJlT3Bl
cmF0b3JzLCBmYWxzZSwgTm9ybWFsLCAiRW5hYmxlIHN1cHBvcnQgZm9yID8uIGFuZCA/PyBvcGVy
YXRvcnMuIikgXAogICAgIHYoYm9vbCwgdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nLCB0cnVl
LCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHVzZSBvdXIgbm9ybWFsIGFycmF5IGFsbG9jYXRp
b24gcHJvZmlsaW5nLiBJZiBmYWxzZSwgdGhlIGFsbG9jYXRpb24gcHJvZmlsZSB3aWxsIGFsd2F5
cyBjbGFpbSB0byBiZSB1bmRlY2lkZWQuIikgXAogICAgIHYoYm9vbCwgZm9yY2VQb2x5UHJvdG8s
IGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCBjcmVhdGVfdGhpcyB3aWxsIGFsd2F5cyBjcmVhdGUg
YW4gb2JqZWN0IHdpdGggYSBwb2x5IHByb3RvIHN0cnVjdHVyZS4iKSBcCiAgICAgdihib29sLCBm
b3JjZU1pbmlWTU1vZGUsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCBpdCB3aWxsIGZvcmNlIG1p
bmkgVk0gbW9kZSBvbi4iKSBcCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggNjJmZjNlZWIyZDcwYzA5ODAxMTRkYzE4N2M3MGY5ODAzZjFjZTkwOC4u
ZGVmOWIyMmNiYjM5MWVmYTNkZGQ0YTFhNGMzNzUyOTFlMzY1ZTJiMCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE5
LTA4LTEzICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAg
ICBbRVNOZXh0XSBJbXBsZW1lbnQgb3B0aW9uYWwgY2hhaW5pbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDE5OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0czoKKwogMjAxOS0wOC0xMiAgVGFrYXNoaSBLb21vcmkgIDxUYWthc2hpLktvbW9yaUBzb255
LmNvbT4KIAogICAgICAgICBbV1RGXSBUaHJlYWQ6OnJlbW92ZUZyb21UaHJlYWRHcm91cCBsZWFr
cyB3ZWFrIHBvaW50ZXJzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVz
cy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggODNkYzA2
MmFiMjgyMTE2MWE5MzFjMmFiZTQzZGY1ZjY2OWE4OGRhOS4uMDk4NzIzNTM2MGQyNDQ0ZDE3YmJl
OWMzYThiZWFlMWJjOTFlOTk0ZSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC02
OTksOCArNjk5LDggQEAgZGVmIHJ1bkJpZ0ludEVuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKICAgICBydW4oImJpZy1pbnQtZW5hYmxlZCIsICItLXVzZUJpZ0ludD10cnVlIiAs
ICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKLWRl
ZiBydW5OdWxsaXNoQ29hbGVzY2luZ0VuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKLSAgICBydW4oIm51bGxpc2gtY29hbGVzY2luZy1lbmFibGVkIiwgIi0tdXNlTnVsbGlzaENv
YWxlc2Npbmc9dHJ1ZSIgLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKK2RlZiBydW5OdWxsaXNoQXdhcmVPcGVyYXRvcnNFbmFibGVkKCpvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpCisgICAgcnVuKCJudWxsaXNoLWF3YXJlLW9wZXJhdG9ycy1lbmFibGVk
IiwgIi0tdXNlTnVsbGlzaEF3YXJlT3BlcmF0b3JzPXRydWUiICwgKihGVExfT1BUSU9OUyArIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVCgqb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBkMGE0ODM1MjcyYWJhOTIzMWEwNGE2OTFmZmVlNzE1
ZmYxYjY2YTVjLi5mNjBjMDY3Yjg1NmNmZjdkMGYyM2QzZTI2MDZlYTVkNzdlYTM5NTc3IDEwMDY0
NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDE5LTA4LTEzICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255
LmNvbT4KKworICAgICAgICBbRVNOZXh0XSBJbXBsZW1lbnQgb3B0aW9uYWwgY2hhaW5pbmcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDE5OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL251
bGxpc2gtY29hbGVzY2luZy5qczoKKyAgICAgICAgKiBzdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcu
anM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy90YWlsLWNhbGwtcmVjb2duaXplLmpzOgorCiAy
MDE5LTA4LTA4ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAg
ICAgICBbSlNDXSBBZGQgImp1bXAgaWYgKG5vdCkgdW5kZWZpbmVkIG9yIG51bGwiIGJ5dGVjb2Rl
IG9wcwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzIGIv
SlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzCmluZGV4IGYzZGRjYTcwNWJkMzE0
NTJjYTZhNDU1NTEzOTYwYTlkMTFhZTMxOWQuLjhjYmFkNDQ0MzVmMmZjZDA1Mjg2NDEzOGVlMGI3
YzVjM2Y4YjAyODEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2lu
Zy5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanMKQEAgLTEsNCAr
MSw0IEBACi0vL0AgcnVuTnVsbGlzaENvYWxlc2NpbmdFbmFibGVkCisvL0AgcnVuTnVsbGlzaEF3
YXJlT3BlcmF0b3JzRW5hYmxlZAogCiBmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVk
KSB7CiAgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9vcHRpb25hbC1jaGFpbmluZy5qcyBiL0pTVGVzdHMvc3RyZXNzL29wdGlvbmFsLWNoYWlu
aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc5NTZmNmRkN2U2NjE2ZjA0ZmE3OTFhOWUyOTJjYTk1NjkyOGNh
NTQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9vcHRpb25hbC1jaGFpbmluZy5q
cwpAQCAtMCwwICsxLDE2MCBAQAorLy9AIHJ1bk51bGxpc2hBd2FyZU9wZXJhdG9yc0VuYWJsZWQK
KworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwg
IT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7ZXhwZWN0
ZWR9IGJ1dCBnb3QgJHthY3R1YWx9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93U3ludGF4
RXJyb3Ioc2NyaXB0KSB7CisgICAgbGV0IGVycm9yOworICAgIHRyeSB7CisgICAgICAgIGV2YWwo
c2NyaXB0KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisK
KyAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdFeHBlY3RlZCBTeW50YXhFcnJvciEnKTsKK30KKworZnVuY3Rpb24gc2hvdWxk
VGhyb3dUeXBlRXJyb3IoZnVuYywgbWVzc2FnZVByZWZpeCkgeworICAgIGxldCBlcnJvcjsKKyAg
ICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJv
ciA9IGU7CisgICAgfQorCisgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3IpKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFR5cGVFcnJvciEnKTsKKworICAgIGlm
ICghZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKG1lc3NhZ2VQcmVmaXgpKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ1R5cGVFcnJvciBoYXMgd3JvbmcgbWVzc2FnZSEnKTsKK30KKworY29uc3Qg
bWFzcXVlcmFkZXIgPSBtYWtlTWFzcXVlcmFkZXIoKTsKK21hc3F1ZXJhZGVyLmZvbyA9IDM7CisK
K2Z1bmN0aW9uIHRlc3RCYXNpY0Nhc2VzKCkgeworICAgIHNob3VsZEJlKHVuZGVmaW5lZD8udmFs
dWVPZigpLCB1bmRlZmluZWQpOworICAgIHNob3VsZEJlKG51bGw/LnZhbHVlT2YoKSwgdW5kZWZp
bmVkKTsKKyAgICBzaG91bGRCZSh0cnVlPy52YWx1ZU9mKCksIHRydWUpOworICAgIHNob3VsZEJl
KGZhbHNlPy52YWx1ZU9mKCksIGZhbHNlKTsKKyAgICBzaG91bGRCZSgwPy52YWx1ZU9mKCksIDAp
OworICAgIHNob3VsZEJlKDE/LnZhbHVlT2YoKSwgMSk7CisgICAgc2hvdWxkQmUoJyc/LnZhbHVl
T2YoKSwgJycpOworICAgIHNob3VsZEJlKCdoaSc/LnZhbHVlT2YoKSwgJ2hpJyk7CisgICAgc2hv
dWxkQmUoKHt9KT8uY29uc3RydWN0b3IsIE9iamVjdCk7CisgICAgc2hvdWxkQmUoKHsgeDogJ2hp
JyB9KT8ueCwgJ2hpJyk7CisgICAgc2hvdWxkQmUoW10/Lmxlbmd0aCwgMCk7CisgICAgc2hvdWxk
QmUoWydoaSddPy5sZW5ndGgsIDEpOworICAgIHNob3VsZEJlKG1hc3F1ZXJhZGVyPy5mb28sIDMp
OworCisgICAgc2hvdWxkQmUodW5kZWZpbmVkPy5bJ3ZhbHVlT2YnXSgpLCB1bmRlZmluZWQpOwor
ICAgIHNob3VsZEJlKG51bGw/LlsndmFsdWVPZiddKCksIHVuZGVmaW5lZCk7CisgICAgc2hvdWxk
QmUodHJ1ZT8uWyd2YWx1ZU9mJ10oKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUoZmFsc2U/LlsndmFs
dWVPZiddKCksIGZhbHNlKTsKKyAgICBzaG91bGRCZSgwPy5bJ3ZhbHVlT2YnXSgpLCAwKTsKKyAg
ICBzaG91bGRCZSgxPy5bJ3ZhbHVlT2YnXSgpLCAxKTsKKyAgICBzaG91bGRCZSgnJz8uWyd2YWx1
ZU9mJ10oKSwgJycpOworICAgIHNob3VsZEJlKCdoaSc/LlsndmFsdWVPZiddKCksICdoaScpOwor
ICAgIHNob3VsZEJlKCh7fSk/LlsnY29uc3RydWN0b3InXSwgT2JqZWN0KTsKKyAgICBzaG91bGRC
ZSgoeyB4OiAnaGknIH0pPy5bJ3gnXSwgJ2hpJyk7CisgICAgc2hvdWxkQmUoW10/LlsnbGVuZ3Ro
J10sIDApOworICAgIHNob3VsZEJlKFsnaGknXT8uWzBdLCAnaGknKTsKKyAgICBzaG91bGRCZSht
YXNxdWVyYWRlcj8uWydmb28nXSwgMyk7CisKKyAgICBzaG91bGRCZSh1bmRlZmluZWQ/LigpLCB1
bmRlZmluZWQpOworICAgIHNob3VsZEJlKG51bGw/LigpLCB1bmRlZmluZWQpOworICAgIHNob3Vs
ZFRocm93VHlwZUVycm9yKCgpID0+IHRydWU/LigpLCAndHJ1ZSBpcyBub3QgYSBmdW5jdGlvbicp
OworICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgpID0+IGZhbHNlPy4oKSwgJ2ZhbHNlIGlzIG5v
dCBhIGZ1bmN0aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gMD8uKCksICcw
IGlzIG5vdCBhIGZ1bmN0aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gMT8u
KCksICcxIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkg
PT4gJyc/LigpLCAnXCdcJyBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3VsZFRocm93VHlw
ZUVycm9yKCgpID0+ICdoaSc/LigpLCAnXCdoaVwnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CisgICAg
c2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHt9KT8uKCksICcoe30pIGlzIG5vdCBhIGZ1bmN0
aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHsgeDogJ2hpJyB9KT8uKCks
ICcoeyB4OiBcJ2hpXCcgfSkgaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5
cGVFcnJvcigoKSA9PiBbXT8uKCksICdbXSBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3Vs
ZFRocm93VHlwZUVycm9yKCgpID0+IFsnaGknXT8uKCksICdbXCdoaVwnXSBpcyBub3QgYSBmdW5j
dGlvbicpOworICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgpID0+IG1hc3F1ZXJhZGVyPy4oKSwg
J21hc3F1ZXJhZGVyIGlzIG5vdCBhIGZ1bmN0aW9uJyk7Cit9Citub0lubGluZSh0ZXN0QmFzaWND
YXNlcyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspCisgICAgdGVzdEJhc2ljQ2Fz
ZXMoKTsKKworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHt9KT8uaSgpLCAnKHt9KT8uaSBp
cyBub3QgYSBmdW5jdGlvbicpOworc2hvdWxkQmUoKHt9KS5pPy4oKSwgdW5kZWZpbmVkKTsKK3No
b3VsZEJlKCh7fSk/Lmk/LigpLCB1bmRlZmluZWQpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkg
PT4gKHt9KT8uWydpJ10oKSwgJyh7fSk/LltcJ2lcJ10gaXMgbm90IGEgZnVuY3Rpb24nKTsKK3No
b3VsZEJlKCh7fSlbJ2knXT8uKCksIHVuZGVmaW5lZCk7CitzaG91bGRCZSgoe30pPy5bJ2knXT8u
KCksIHVuZGVmaW5lZCk7CisKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICh7fSk/LmFbJ2In
XSwgJ3VuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0Jyk7CitzaG91bGRCZSgoe30pPy5hPy5bJ2In
XSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKG51bGw/LmFbJ2InXSgpLmMsIHVuZGVmaW5lZCk7Citz
aG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoe30pPy5bJ2EnXS5iLCAndW5kZWZpbmVkIGlzIG5v
dCBhbiBvYmplY3QnKTsKK3Nob3VsZEJlKCh7fSk/LlsnYSddPy5iLCB1bmRlZmluZWQpOworc2hv
dWxkQmUobnVsbD8uWydhJ10uYigpWydjJ10sIHVuZGVmaW5lZCk7CitzaG91bGRUaHJvd1R5cGVF
cnJvcigoKSA9PiAoKCkgPT4ge30pPy4oKSgpLCAnKCgpID0+IHt9KT8uKCkgaXMgbm90IGEgZnVu
Y3Rpb24nKTsKK3Nob3VsZEJlKCgoKSA9PiB7fSk/LigpPy4oKSwgdW5kZWZpbmVkKTsKK3Nob3Vs
ZEJlKG51bGw/LigpKCkuYVsnYiddLCB1bmRlZmluZWQpOworCitjb25zdCBvMCA9IHsgYTogeyBi
KCkgeyByZXR1cm4gdGhpcy5fYi5iaW5kKHRoaXMpOyB9LCBfYigpIHsgcmV0dXJuIHRoaXMuX19i
OyB9LCBfX2I6IHsgYzogNDIgfSB9IH07CitzaG91bGRCZShvMD8uYT8uWydiJ10/LigpPy4oKT8u
YywgNDIpOworc2hvdWxkQmUobzA/Lmk/LlsnaiddPy4oKT8uKCk/LmssIHVuZGVmaW5lZCk7CisK
K3Nob3VsZEJlKCh7IHVuZGVmaW5lZDogMyB9KT8uW251bGw/LmFdLCAzKTsKK3Nob3VsZEJlKCgo
KSA9PiAzKT8uKG51bGw/LmEpLCAzKTsKKworY29uc3QgbzEgPSB7IGNvdW50OiAwLCBnZXQgeCgp
IHsgdGhpcy5jb3VudCsrOyByZXR1cm4gKCkgPT4ge307IH0gfTsKK28xLng/Lnk7CitzaG91bGRC
ZShvMS5jb3VudCwgMSk7CitvMS54Py5bJ3knXTsKK3Nob3VsZEJlKG8xLmNvdW50LCAyKTsKK28x
Lng/LigpOworc2hvdWxkQmUobzEuY291bnQsIDMpOworbnVsbD8uKG8xLngpOworc2hvdWxkQmUo
bzEuY291bnQsIDMpOworCitzaG91bGRCZShkZWxldGUgdW5kZWZpbmVkPy5mb28sIHRydWUpOwor
c2hvdWxkQmUoZGVsZXRlIG51bGw/LmZvbywgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgdW5kZWZp
bmVkPy5bJ2ZvbyddLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBudWxsPy5bJ2ZvbyddLCB0cnVl
KTsKK3Nob3VsZEJlKGRlbGV0ZSB1bmRlZmluZWQ/LigpLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0
ZSBudWxsPy4oKSwgdHJ1ZSk7CisKK2NvbnN0IG8yID0geyB4OiAwLCB5OiAwLCB6KCkge30gfTsK
K3Nob3VsZEJlKGRlbGV0ZSBvMj8ueCwgdHJ1ZSk7CitzaG91bGRCZShvMi54LCB1bmRlZmluZWQp
Oworc2hvdWxkQmUoZGVsZXRlIG8yPy54LCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBvMj8uWyd5
J10sIHRydWUpOworc2hvdWxkQmUobzIueSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKGRlbGV0ZSBv
Mj8uWyd5J10sIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIG8yLno/LigpLCB0cnVlKTsKKworZnVu
Y3Rpb24gZ3JlZXQobmFtZSkgeyByZXR1cm4gYGhleSwgJHtuYW1lfSR7dGhpcy5zdWZmaXggPz8g
Jy4nfWA7IH0KK3Nob3VsZEJlKGV2YWw/LignZ3JlZXQoIndvcmxkIiknKSwgJ2hleSwgd29ybGQu
Jyk7CitzaG91bGRCZShncmVldD8uY2FsbCh7IHN1ZmZpeDogJyEnIH0sICd3b3JsZCcpLCAnaGV5
LCB3b3JsZCEnKTsKK3Nob3VsZEJlKGdyZWV0LmNhbGw/Lih7IHN1ZmZpeDogJyEnIH0sICd3b3Js
ZCcpLCAnaGV5LCB3b3JsZCEnKTsKK3Nob3VsZEJlKG51bGw/LmNhbGwoeyBzdWZmaXg6ICchJyB9
LCAnd29ybGQnKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKCh7fSkuY2FsbD8uKHsgc3VmZml4OiAn
IScgfSwgJ3dvcmxkJyksIHVuZGVmaW5lZCk7CitzaG91bGRCZShncmVldD8uYXBwbHkoeyBzdWZm
aXg6ICc/JyB9LCBbJ3dvcmxkJ10pLCAnaGV5LCB3b3JsZD8nKTsKK3Nob3VsZEJlKGdyZWV0LmFw
cGx5Py4oeyBzdWZmaXg6ICc/JyB9LCBbJ3dvcmxkJ10pLCAnaGV5LCB3b3JsZD8nKTsKK3Nob3Vs
ZEJlKG51bGw/LmFwcGx5KHsgc3VmZml4OiAnPycgfSwgWyd3b3JsZCddKSwgdW5kZWZpbmVkKTsK
K3Nob3VsZEJlKCh7fSkuYXBwbHk/Lih7IHN1ZmZpeDogJz8nIH0sIFsnd29ybGQnXSksIHVuZGVm
aW5lZCk7CisKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NsYXNzIEMge30gY2xhc3MgRCBleHRl
bmRzIEMgeyBmb28oKSB7IHJldHVybiBzdXBlcj8uYmFyOyB9IH0nKTsKK3Nob3VsZFRocm93U3lu
dGF4RXJyb3IoJ2NsYXNzIEMge30gY2xhc3MgRCBleHRlbmRzIEMgeyBmb28oKSB7IHJldHVybiBz
dXBlcj8uWyJiYXIiXTsgfSB9Jyk7CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjbGFzcyBDIHt9
IGNsYXNzIEQgZXh0ZW5kcyBDIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyPy4oKTsgfSB9Jyk7CisK
K3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NvbnN0IG8gPSB7IEM6IGNsYXNzIHt9IH07IG5ldyBv
Py5DKCk7JykKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NvbnN0IG8gPSB7IEM6IGNsYXNzIHt9
IH07IG5ldyBvPy5bIkMiXSgpOycpCitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjbGFzcyBDIHt9
IG5ldyBDPy4oKTsnKQorc2hvdWxkVGhyb3dTeW50YXhFcnJvcignZnVuY3Rpb24gZm9vKCkgeyBu
ZXc/LnRhcmdldDsgfScpOworCitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdmdW5jdGlvbiB0YWco
KSB7fSB0YWc/LmBgOycpOworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY29uc3QgbyA9IHsgdGFn
KCkge30gfTsgbz8udGFnYGA7Jyk7CisKKy8vIE5PVCBhbiBvcHRpb25hbCBjaGFpbgorc2hvdWxk
QmUoZmFsc2U/LjQ6NSwgNSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy90YWlsLWNhbGwt
cmVjb2duaXplLmpzIGIvSlNUZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXJlY29nbml6ZS5qcwppbmRl
eCAxNjgxZTQwMjAxZWQzY2U3ZTc5MTZjOWNhYjhlNTJiMTZjYTE3YWMwLi45Y2MwZTMwNmZhY2Q3
NDQ3NTFhNzk2MmE2ZTY1NzAyNzNkZDVlM2MxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy90
YWlsLWNhbGwtcmVjb2duaXplLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1yZWNv
Z25pemUuanMKQEAgLTEsMyArMSw1IEBACisvL0AgcnVuTnVsbGlzaEF3YXJlT3BlcmF0b3JzRW5h
YmxlZAorCiBmdW5jdGlvbiBjYWxsZXJNdXN0QmVSdW4oKSB7CiAgICAgaWYgKCFPYmplY3QuaXMo
Y2FsbGVyTXVzdEJlUnVuLmNhbGxlciwgcnVuVGVzdHMpKQogICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIldyb25nIGNhbGxlciwgZXhwZWN0ZWQgcnVuIGJ1dCBnb3QgIiwgY2FsbGVyTXVzdEJlUnVu
LmNhbGxlcik7CkBAIC0xNTAsNiArMTUyLDExIEBAIGZ1bmN0aW9uIHJ1blRlc3RzKCkgewogICAg
ICAgICByZXR1cm4gZmFsc2UgfHwgY2FsbGVyTXVzdEJlUnVuKCk7CiAgICAgfSkoKTsKIAorICAg
IChmdW5jdGlvbiB0YWlsQ2FsbENvYWxlc2NlKCkgeworICAgICAgICAidXNlIHN0cmljdCI7Cisg
ICAgICAgIHJldHVybiBmYWxzZSA/PyBjYWxsZXJNdXN0QmVSdW4oKTsKKyAgICB9KSgpOworCiAg
ICAgKGZ1bmN0aW9uIG1lbWJlclRhaWxDYWxsKCkgewogICAgICAgICAidXNlIHN0cmljdCI7CiAg
ICAgICAgIHJldHVybiB7IGY6IGNhbGxlck11c3RCZVJ1biB9LmYoKTsKQEAgLTE2MCw2ICsxNjcs
MTEgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CiAgICAgICAgIHJldHVybiBjYWxsZXJNdXN0QmVS
dW4uYmluZCgpKCk7CiAgICAgfSkoKTsKIAorICAgIChmdW5jdGlvbiBvcHRpb25hbFRhaWxDYWxs
KCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHJldHVybiBjYWxsZXJNdXN0QmVS
dW4/LigpOworICAgIH0pKCk7CisKICAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUgdGVzdHMKIAog
ICAgIChmdW5jdGlvbiBhcHBseVRhaWxDYWxsKCkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376231</attachid>
            <date>2019-08-13 20:10:09 -0700</date>
            <delta_ts>2019-08-14 08:13:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200199-20190813201008.patch</filename>
            <type>text/plain</type>
            <size>65183</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
MDkyMDFmZjM5Y2JiMDFhNDJhYWQ1MTg2YzRkZWIxMDgzYWZiOWZhLi5jMDM3YTdmNjc4ZWVkNDQz
NTRiYWIyZGI2ZThkMjY2Njg4YjgxOTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OSBAQAorMjAxOS0wOC0xMyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
dGhlIG9wdGlvbmFsIGNoYWluaW5nIHByb3Bvc2FsLCB3aGljaCBoYXMgbm93IHJlYWNoZWQgU3Rh
Z2UgMyBhdCBUQzM5LgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhID8uIG9wZXJhdG9yIHdo
aWNoOgorICAgICAgICAgLSBndWFyZHMgbWVtYmVyIGFjY2VzcyB3aGVuIHRoZSBMSFMgaXMgbnVs
bGlzaCwgaS5lLiBgbnVsbD8uZm9vYCBhbmQgYG51bGw/LlsnZm9vJ11gIGFyZSB1bmRlZmluZWQK
KyAgICAgICAgIC0gZ3VhcmRzIGZ1bmN0aW9uIGNhbGxzIHdoZW4gdGhlIExIUyBpcyBudWxsaXNo
LCBpLmUuIGBudWxsPy4oKWAgaXMgdW5kZWZpbmVkCisgICAgICAgICAtIHNob3J0LWNpcmN1aXRz
IG92ZXIgYSB3aG9sZSBhY2Nlc3MvY2FsbCBjaGFpbiwgaS5lLiBgbnVsbD8uYVsnYiddKGMrKylg
IGlzIHVuZGVmaW5lZCBhbmQgZG9lcyBub3QgaW5jcmVtZW50IGMKKworICAgICAgICBUaGlzIGZl
YXR1cmUgY2FuIGJlIG5haXZlbHkgdmlld2VkIGFzIGEgdGVybmFyeSBpbiBkaXNndWlzZSwgaS5l
LiBgYT8uYmAgaXMgbGlrZSBgYSA9PSBudWxsID8gdW5kZWZpbmVkIDogYS5iYC4KKyAgICAgICAg
SG93ZXZlciwgc2luY2Ugd2UgbXVzdCBiZSBzdXJlIG5vdCB0byBkb3VibGUtZXZhbHVhdGUgdGhl
IExIUywgaXQncyBhY3R1YWxseSByYXRoZXIgYWtpbiB0byBhIHRyeSBibG9jayAtLQorICAgICAg
ICBuYW1lbHksIHdlIGhhdmUgdGhlIGJ5dGVjb2RlIGdlbmVyYXRvciBrZWVwIGFuIGVhcmx5LW91
dCBsYWJlbCBmb3IgdXNlIHRocm91Z2hvdXQgdGhlIGFjY2VzcyBhbmQgY2FsbCBjaGFpbi4KKwor
ICAgICAgICAoQWxzbyBub3RlIHRoYXQgZG9jdW1lbnQuYWxsIGJlaGF2ZXMgYXMgYW4gb2JqZWN0
LCBzbyAibnVsbGlzaCIgbWVhbnMgKnN0cmljdGx5KiBlcXVhbCB0byBudWxsIG9yIHVuZGVmaW5l
ZC4pCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaE9wdGlvbmFsQ2hhaW5UYXJnZXQpOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGlvbmFsQ2hhaW5U
YXJnZXQpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRPcHRp
b25hbENoZWNrKTogQWRkZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgIEltcGxlbWVudCBlYXJseS1vdXQgbG9naWMuCisKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QnJhY2tldEFjY2Vz
c29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RG90QWNjZXNzb3JOb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5
dGVjb2RlKTogUmVmYWN0b3Igc28gd2UgY2FuIGVtaXRPcHRpb25hbENoZWNrIGluIGEgc2luZ2xl
IGxvY2F0aW9uLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNv
ZGUpOiBSZWZhY3RvciBzbyB3ZSBjYW4gZW1pdE9wdGlvbmFsQ2hlY2sgaW4gYSBzaW5nbGUgbG9j
YXRpb24uCisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6RGVsZXRlRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29hbGVzY2VO
b2RlOjplbWl0Qnl0ZWNvZGUpOiBDbGVhbiB1cC4KKyAgICAgICAgKEpTQzo6T3B0aW9uYWxDaGFp
bk5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnQgPy4gbm9kZSBh
bmQgZW1pdCBjaGVja3Mgd2hlcmUgbmVlZGVkLgorCisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtOgorICAgICAgICBIYXZlIE9wSXNVbmRlZmluZWRPck51bGwgc3VwcG9ydCBjb25zdGFu
dCByZWdpc3RlcnMuCisKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVPcHRpb25hbENoYWluKTogQWRkZWQuCisgICAgICAgIChK
U0M6OkFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6Cisg
ICAgICAgIChKU0M6OkxleGVyPFQ+OjpsZXhXaXRob3V0Q2xlYXJpbmdMaW5lVGVybWluYXRvcik6
CisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6T3B0
aW9uYWxDaGFpbk5vZGU6Ok9wdGlvbmFsQ2hhaW5Ob2RlKTogQWRkZWQuCisgICAgICAgICogcGFy
c2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjppc09wdGlvbmFsQ2hh
aW4gY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RXhwcmVzc2lvbk5vZGU6OmlzT3B0aW9u
YWxDaGFpbkJhc2UgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RXhwcmVzc2lvbk5vZGU6
OnNldElzT3B0aW9uYWxDaGFpbkJhc2UpOiBBZGRlZC4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2Vy
VG9rZW5zLmg6CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpT
eW50YXhDaGVja2VyOjpjcmVhdGVPcHRpb25hbENoYWluKTogQWRkZWQuCisgICAgICAgIEludHJv
ZHVjZSBuZXcgdG9rZW4gYW5kIEFTVCBub2RlLCBhcyB3ZWxsIGFzIGFuIEV4cHJlc3Npb25Ob2Rl
IGZpZWxkIHRvIG1hcmsgTEhTZXMgd2l0aC4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXNzaW9u
KToKKyAgICAgICAgUGFyc2Ugb3B0aW9uYWwgY2hhaW5zIGJ5IHdyYXBwaW5nIHRoZSBhY2Nlc3Mv
Y2FsbCBwYXJzZSBsb29wLgorCisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNw
cDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DYWxsQmFzZSk6CisgICAgICAgIEVuc3VyZSB0aGF0
IFR5cGVFcnJvciBtZXNzYWdlcyBkb24ndCBpbmNsdWRlIHRoZSAnPy4nLgorCisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIFVwZGF0ZSBmZWF0dXJlIGZsYWcsIGFzID8uIGFu
ZCA/PyBhcmUgYSBkb3VibGUgZmVhdHVyZSBvZiAibnVsbGlzaC1hd2FyZSIgb3BlcmF0b3JzLgor
CiAyMDE5LTA4LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXBsYWNlIG11bHRpcGFyYW1ldGVyIG92ZXJsb2FkcyBvZiBhcHBlbmQoKSBpbiBTdHJpbmdCdWls
ZGVyIGFzIGEgZmlyc3Qgc3RlcCB0b3dhcmQgc3RhbmRhcmRpemluZ2luZyBvbiB0aGUgZmxleGli
bGVBcHBlbmQoKSBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCAyYzMwYTRkOWI0
MzFiMGU1NTI3NDFkMzI1YWM4MTQ5YzM4ZTlkNTgwLi45NTBhYWEyMDNkMzhlZjg4ZTMxYjdiOWE4
Nzk5MzU0MGI2OTA3OGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtNDk2NCw2ICs0OTY0LDMwIEBA
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWYoUmVnaXN0ZXJJRCogY29tcGxldGlv
blR5cGVSZWdpc3RlciwgQ29tcGxldGlvCiAgICAgZW1pdEp1bXBJZlRydWUoZXF1aXZhbGVuY2VS
ZXN1bHQsIGp1bXBUYXJnZXQpOwogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoT3B0
aW9uYWxDaGFpblRhcmdldCgpCit7CisgICAgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2suYXBw
ZW5kKG5ld0xhYmVsKCkpOworfQorCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BPcHRpb25h
bENoYWluVGFyZ2V0KFJlZ2lzdGVySUQqIGRzdCwgYm9vbCBpc0RlbGV0ZSkKK3sKKyAgICBBU1NF
UlQobV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2suc2l6ZSgpKTsKKworICAgIFJlZjxMYWJlbD4g
ZW5kTGFiZWwgPSBuZXdMYWJlbCgpOworICAgIGVtaXRKdW1wKGVuZExhYmVsLmdldCgpKTsKKwor
ICAgIGVtaXRMYWJlbChtX29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFjay50YWtlTGFzdCgpLmdldCgp
KTsKKyAgICBlbWl0TG9hZChkc3QsIGlzRGVsZXRlID8ganNCb29sZWFuKHRydWUpIDoganNVbmRl
ZmluZWQoKSk7CisKKyAgICBlbWl0TGFiZWwoZW5kTGFiZWwuZ2V0KCkpOworfQorCit2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpCit7Cisg
ICAgQVNTRVJUKG1fb3B0aW9uYWxDaGFpblRhcmdldFN0YWNrLnNpemUoKSk7CisgICAgZW1pdEp1
bXBJZlRydWUoZW1pdElzVW5kZWZpbmVkT3JOdWxsKG5ld1RlbXBvcmFyeSgpLCBzcmMpLCBtX29w
dGlvbmFsQ2hhaW5UYXJnZXRTdGFjay5sYXN0KCkuZ2V0KCkpOworfQorCiB2b2lkIEZvckluQ29u
dGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewogICAg
IC8vIExleGljYWxseSBpbnZhbGlkYXRpbmcgRm9ySW5Db250ZXh0cyBpcyBraW5kIG9mIHdlYWsg
c2F1Y2UsIGJ1dCBpdCBvbmx5IG9jY3VycyBpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGU5NzY4NmFhM2Vk
Y2RkOGQzZjliNTdjNGE2ZDEyM2JhYzljYjM5ODcuLjNjYjMzYzM3ZWNmZDZiZmU3NDI4ZTUwMTFl
ZDZhYWM1ZDliYWYyMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTk1OSw2ICs5NTksMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHVzaEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKEZpbmFs
bHlDb250ZXh0Jik7CiAgICAgICAgIHZvaWQgcG9wRmluYWxseUNvbnRyb2xGbG93U2NvcGUoKTsK
IAorICAgICAgICB2b2lkIHB1c2hPcHRpb25hbENoYWluVGFyZ2V0KCk7CisgICAgICAgIHZvaWQg
cG9wT3B0aW9uYWxDaGFpblRhcmdldChSZWdpc3RlcklEKiBkc3QsIGJvb2wgaXNEZWxldGUgPSBm
YWxzZSk7CisgICAgICAgIHZvaWQgZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKTsK
KwogICAgICAgICB2b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCwg
UmVnaXN0ZXJJRCogaW5kZXgpOwogICAgICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsKTsKICAgICAgICAgdm9pZCBwdXNoU3RydWN0dXJlRm9ySW5TY29wZShS
ZWdpc3RlcklEKiBsb2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5
LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKQEAgLTEyNjYsNiArMTI3MCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFuZ2VzOwogICAgICAgICBT
ZWdtZW50ZWRWZWN0b3I8VHJ5RGF0YSwgOD4gbV90cnlEYXRhOwogCisgICAgICAgIFZlY3RvcjxS
ZWY8TGFiZWw+PiBtX29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFjazsKKwogICAgICAgICBpbnQgbV9u
ZXh0Q29uc3RhbnRPZmZzZXQgeyAwIH07CiAKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEZ1bmN0
aW9uTWV0YWRhdGFOb2RlKiwgdW5zaWduZWQ+IEZ1bmN0aW9uT2Zmc2V0TWFwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4
IDdjYzA3OGMzYzAyMTVjOWRmNzkwYzg0OGEzMmQxM2I4MDkwZjA4YTAuLjg2MmYwZTVmMmE4NGQ0
NDMxNjMzOWE5ZTI4MTk4OGU5MTkzNzkyNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTc0NCwxMiArNzQ0LDE4IEBA
IFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAgICAgUmVnaXN0ZXJJRCogcmV0OwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
OwogCi0gICAgaWYgKGlzTm9uSW5kZXhTdHJpbmdFbGVtZW50KCptX3N1YnNjcmlwdCkpIHsKLSAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNl
KTsKKyAgICBib29sIHN1YnNjcmlwdElzTm9uSW5kZXhTdHJpbmcgPSBpc05vbkluZGV4U3RyaW5n
RWxlbWVudCgqbV9zdWJzY3JpcHQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gc3Vi
c2NyaXB0SXNOb25JbmRleFN0cmluZworICAgICAgICA/IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jh
c2UpCisgICAgICAgIDogZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwg
bV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3Ip
KTsKKworICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOworCisgICAgaWYgKHN1YnNjcmlw
dElzTm9uSW5kZXhTdHJpbmcpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICByZXQgPSBnZW5l
cmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCBzdGF0aWNfY2Fz
dDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRI
YW5kU2lkZShtX2Jhc2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5p
c1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJh
dG9yLmVtaXROb2RlRm9yUHJvcGVydHkobV9zdWJzY3JpcHQpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZmluYWxEZXN0LmdldCgpLCBiYXNl
LmdldCgpLCBwcm9wZXJ0eSk7CkBAIC03NjMsMTcgKzc2OSwyNiBAQCBSZWdpc3RlcklEKiBCcmFj
a2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaQogCiBSZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7
CiAgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKLSAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGJhc2VJc1N1cGVyID8gZW1pdFN1cGVyQmFzZUZvckNhbGxl
ZShnZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZTsKKyAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAgIGJhc2UgPSBl
bWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcik7CisgICAgZWxzZSB7CisgICAgICAgIGJh
c2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyAgICAgICAgaWYgKG1fYmFzZS0+aXNP
cHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENo
ZWNrKGJhc2UuZ2V0KCkpOworICAgIH0KKwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICBSZWdpc3RlcklEKiBm
aW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZ2lzdGVy
SUQqIHJldDsKICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHRoaXNWYWx1ZSA9IGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7Ci0gICAgICAgIHJldCA9IGdl
bmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQo
KSwgbV9pZGVudCk7CisgICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERl
c3QuZ2V0KCksIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQoKSwgbV9pZGVudCk7CiAgICAgfSBl
bHNlCi0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2Uu
Z2V0KCksIG1faWRlbnQpOwotICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUoZmluYWxEZXN0
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKKyAgICBnZW5l
cmF0b3IuZW1pdFByb2ZpbGVUeXBlKGZpbmFsRGVzdC5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC04NDgsMjQgKzg2MywzMiBAQCBSZWdp
c3RlcklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZwogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWRUaGlzRnJvbUFy
cm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1lbnQoKTsKIAogICAgIFZhcmlhYmxlIHZhciA9IGdl
bmVyYXRvci52YXJpYWJsZShnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwpOwotICAgIGlm
IChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLCBudWxscHRyKTsKLSAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubW92ZShnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCksIGxvY2FsKTsKLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRz
KGdlbmVyYXRvciwgbV9hcmdzKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB2YXIu
bG9jYWwoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYzsKKyAgICBpZiAobG9jYWwpIHsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgbG9jYWwuZ2V0
KCksIG51bGxwdHIpOworICAgICAgICBmdW5jID0gZ2VuZXJhdG9yLm1vdmUoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGZ1
bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJn
dW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKworICAgIGlmIChsb2NhbCkKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVk
KCkpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRz
LCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7
CisgICAgZWxzZSB7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RTdGFy
dCgpICsgNDsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhuZXdEaXZvdCwg
ZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7CisgICAgICAgIGdlbmVyYXRvci5tb3ZlKAorICAgICAg
ICAgICAgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhcikpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGZ1bmMuZ2V0KCksIG51bGxwdHIpOwog
ICAgIH0KIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpOwotICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJn
cyk7Ci0gICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyA0OwotICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3
RGl2b3QpOwotICAgIGdlbmVyYXRvci5tb3ZlKAotICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLAotICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29w
ZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZO
b3RGb3VuZCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgZnVu
Yy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgY2Fs
bEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxl
Q2FsbDo6Tm8pOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CisgICAgaWYgKGlzT3B0aW9uYWxD
aGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmMuZ2V0
KCkpOworCisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwocmV0dXJuVmFsdWUuZ2V0
KCksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC04OTksOCArOTIyLDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KKwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBm
dW5jLmdldCgpKTsKKyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5l
cmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soZnVuYy5nZXQoKSk7CisKICAgICBDYWxsQXJndW1lbnRz
IGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0TG9h
ZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBSZWdp
c3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1
ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOwpA
QCAtOTIwLDMwICs5NDcsMzQgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgIEV4cGVjdGVk
RnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiA9IGdlbmVyYXRvci5leHBlY3RlZEZ1bmN0aW9uRm9y
SWRlbnRpZmllcihtX2lkZW50KTsKIAogICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJp
YWJsZShtX2lkZW50KTsKLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkg
ewotICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBsb2NhbCwg
bnVsbHB0cik7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm1v
dmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7Ci0gICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgZnVuYy5nZXQoKSk7Ci0gICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5l
cmF0b3IsIG1fYXJncyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0gdmFyLmxvY2Fs
KCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmM7CisgICAgaWYgKGxvY2FsKSB7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLmdldCgpLCBu
dWxscHRyKTsKKyAgICAgICAgZnVuYyA9IGdlbmVyYXRvci5tb3ZlKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBmdW5jID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50
cyhnZW5lcmF0b3IsIG1fYXJncyk7CisKKyAgICBpZiAobG9jYWwpIHsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICAvLyBUaGlzIHBhc3NlcyBOb0V4cGVjdGVkRnVuY3Rpb24gYmVjYXVzZSB3ZSBl
eHBlY3QgdGhhdCBpZiB0aGUgZnVuY3Rpb24gaXMgaW4gYQogICAgICAgICAvLyBsb2NhbCB2YXJp
YWJsZSwgdGhlbiBpdCdzIG5vdCBvbmUgb2Ygb3VyIGJ1aWx0LWluIGNvbnN0cnVjdG9ycy4KLSAg
ICAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24o
cmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2Fs
bDo6WWVzKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5n
ZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICAgICAgcmV0dXJuIHJldDsKKyAg
ICAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IE5vRXhwZWN0ZWRGdW5jdGlvbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90U3RhcnQoKSArIG1faWRl
bnQubGVuZ3RoKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2
b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOworICAgICAgICBnZW5lcmF0b3IubW92ZSgKKyAg
ICAgICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCisgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxscHRy
KTsKICAgICB9CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwotICAgIENhbGxBcmd1bWVudHMg
Y2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAgaWYgKGlzT3B0aW9uYWxDaGFp
bkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmMuZ2V0KCkp
OwogCi0gICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyBtX2lkZW50
Lmxlbmd0aCgpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRp
dm90U3RhcnQoKSwgbmV3RGl2b3QpOwotICAgIGdlbmVyYXRvci5tb3ZlKAotICAgICAgICBjYWxs
QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLAotICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVT
Y29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LCB2YXIsIFRocm93SWZOb3RGb3VuZCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVj
ZXNzYXJ5KHZhciwgZnVuYy5nZXQoKSwgbnVsbHB0cik7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0g
Z2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMu
Z2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3Rh
cnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICByZXR1cm4gcmV0OwpAQCAtMTI3NSw2ICsxMzA2LDggQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19kZWZpbmVFbnVtZXJhYmxlV3JpdGFi
bGVDb25maWcKIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIGJvb2wgYmFzZUlzU3Vw
ZXIgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7CiAgICAgYm9vbCBzdWJzY3JpcHRJc05vbkluZGV4
U3RyaW5nID0gaXNOb25JbmRleFN0cmluZ0VsZW1lbnQoKm1fc3Vic2NyaXB0KTsKIApAQCAtMTI4
Niw5ICsxMzE5LDExIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwKICAgICAgICAgICAgIGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
YmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vic2Ny
aXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CisKKyAg
ICAgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOwogICAgIH0KIAotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBmdW5jdGlvbjsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1JlZ2lz
dGVyOwogICAgIGlmIChiYXNlSXNTdXBlcikgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2Ugb25s
eSBuZWVkIHRvIGRvIHRoaXMgb25jZSBiZWNhdXNlIHdlIGVpdGhlciBoYXZlIGEgbm9uLVREWiB0
aGlzIG9yIHdlIHRocm93LiBPbmNlIHdlIGhhdmUgYSBub24tVERaIHRoaXMsIHdlIGNhbid0IGNo
YW5nZSBpdHMgdmFsdWUgYmFjayB0byBURFouCkBAIC0xMjk3LDE5ICsxMzMyLDIwIEBAIFJlZ2lz
dGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwKICAgICBpZiAoc3Vic2NyaXB0SXNOb25JbmRleFN0cmluZykgewog
ICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgp
LCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICAgICAgaWYg
KGJhc2VJc1N1cGVyKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5
SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0
ZXIuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNl
LmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1
YnNjcmlwdCktPnZhbHVlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9
IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJh
c2UuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNl
LmdldCgpLCBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5l
cmF0b3IuZW1pdE5vZGVGb3JQcm9wZXJ0eShtX3N1YnNjcmlwdCk7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25T
dGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCi0g
ICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIHByb3Bl
cnR5LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZnVuY3Rpb24u
Z2V0KCksIGJhc2UuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlW
YWwoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5n
ZXQoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGZ1bmN0aW9uLmdldCgp
LCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgfQorICAgIGlmIChpc09wdGlvbmFs
Q2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlv
bi5nZXQoKSk7CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1l
bnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGlmIChiYXNlSXNTdXBl
cikgewogICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrKGdlbmVyYXRvci50aGlzUmVnaXN0
ZXIoKSk7CkBAIC0xMzMxLDE0ICsxMzY3LDIxIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAg
ICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKICAgICBpZiAoYmFz
ZUlzU3VwZXIpCiAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIGdlbmVyYXRvci5lbnN1cmVUaGlzKCkpOwotICAgIGVsc2UKKyAgICBlbHNlIHsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1f
YmFzZSk7CisgICAgICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpKTsKKyAgICB9CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHBy
ZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7
CiAgICAgaWYgKGJhc2VJc1N1cGVyKSB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzdXBl
ckJhc2UgPSBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcik7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgc3VwZXJCYXNlLmdldCgpLCBjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50KTsKICAgICB9IGVsc2UKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBtX2lkZW50KTsKKworICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAg
ICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5nZXQoKSk7CisKICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5W
YWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6
WWVzKTsKICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiByZXQ7CkBAIC0xMzQ4LDE3ICsx
MzkxLDI0IEBAIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heERpc3RhbmNlVG9Jbm5lcm1vc3RD
YWxsT3JBcHBseSA9IDI7CiAKIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9iYXNlKTsKKworICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJh
c2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOwor
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwg
c3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7Ci0gICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGZ1bmN0aW9uOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9
IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gZnVuY3Rpb247CiAgICAgYXV0byBtYWtlRnVuY3Rpb24gPSBbJl0gewogICAgICAgICBpZiAo
bV9iYXNlLT5pc1N1cGVyTm9kZSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
dGhpc1ZhbHVlID0gZ2VuZXJhdG9yLmVuc3VyZVRoaXMoKTsKICAgICAgICAgICAgIGZ1bmN0aW9u
ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwg
YmFzZS5nZXQoKSwgdGhpc1ZhbHVlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1
aWx0aW5OYW1lcygpLmNhbGxQdWJsaWNOYW1lKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGlu
TmFtZXMoKS5jYWxsUHVibGljTmFtZSgpKTsKKworICAgICAgICBpZiAoaXNPcHRpb25hbENoYWlu
QmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmN0aW9u
LmdldCgpKTsKICAgICB9OwogCiAgICAgYm9vbCBlbWl0Q2FsbENoZWNrID0gIWdlbmVyYXRvci5p
c0J1aWx0aW5GdW5jdGlvbigpOwpAQCAtMTQzMCwxNSArMTQ4MCwyMiBAQCBSZWdpc3RlcklEKiBB
cHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLAogICAgIC8vIGZ1bmN0aW9uLmFwcGx5KHRoaXNBcmcsIFthcmcwLCBhcmcxLCAu
Li5dKSAtPiBjYW4gYmUgdHJpdmlhbGx5IGNvZXJjZWQgaW50byBmdW5jdGlvbi5jYWxsKHRoaXNB
cmcsIGFyZzAsIGFyZzEsIC4uLikgYW5kIHNhdmVzIG9iamVjdCBhbGxvY2F0aW9uCiAgICAgYm9v
bCBtYXlCZUNhbGwgPSBhcmVUcml2aWFsQXBwbHlBcmd1bWVudHMobV9hcmdzKTsKIAotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbjsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1
cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKworICAgIGlmICht
X2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRp
b25hbENoZWNrKGJhc2UuZ2V0KCkpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9u
OwogICAgIGF1dG8gbWFrZUZ1bmN0aW9uID0gWyZdIHsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNT
dXBlck5vZGUoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNWYWx1ZSA9
IGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7CiAgICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRv
ci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCks
IHRoaXNWYWx1ZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMo
KS5hcHBseVB1YmxpY05hbWUoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZnVuY3Rp
b24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3Qp
LCBiYXNlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFw
cGx5UHVibGljTmFtZSgpKTsKKworICAgICAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmN0aW9uLmdldCgpKTsK
ICAgICB9OwogCiAgICAgYm9vbCBlbWl0Q2FsbENoZWNrID0gIWdlbmVyYXRvci5pc0J1aWx0aW5G
dW5jdGlvbigpOwpAQCAtMTY5MiwyNSArMTc0OSwzMyBAQCBSZWdpc3RlcklEKiBEZWxldGVSZXNv
bHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dAogCiBSZWdpc3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQp
OwogCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5l
cmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socjAuZ2V0KCkpOworCisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1Jl
ZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIp
OwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMS5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0RGVsZXRlQnlWYWwoZmluYWxEZXN0LmdldCgpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOwog
fQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlRG90Tm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBEZWxldGVEb3RO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWlu
QmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socjAuZ2V0KCkpOwor
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpCiAgICAgICAgIHJl
dHVybiBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEg
c3VwZXIgcHJvcGVydHkiKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCBtX2lkZW50KTsKKyAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGZpbmFsRGVzdC5nZXQoKSwgcjAuZ2V0KCks
IG1faWRlbnQpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRl
VmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzQ2LDEz
ICsyNDExLDI4IEBAIFJlZ2lzdGVySUQqIENvYWxlc2NlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqCiAgICAgUmVmPExhYmVsPiB0YXJn
ZXQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAogICAgIGdlbmVyYXRvci5lbWl0Tm9kZSh0ZW1w
LmdldCgpLCBtX2V4cHIxKTsKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGdlbmVyYXRv
ci5lbWl0VW5hcnlPcDxPcElzVW5kZWZpbmVkT3JOdWxsPihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0SnVtcElm
RmFsc2UoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZUluVGFpbFBvc2l0aW9uKHRlbXAuZ2V0KCksIG1fZXhwcjIpOwogICAgIGdlbmVyYXRvci5lbWl0
TGFiZWwodGFyZ2V0LmdldCgpKTsKIAogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZShkc3QsIHRl
bXAuZ2V0KCkpOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3B0aW9u
YWxDaGFpbk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBP
cHRpb25hbENoYWluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0
ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKworICAgIGlmIChtX2lzT3V0ZXJt
b3N0KQorICAgICAgICBnZW5lcmF0b3IucHVzaE9wdGlvbmFsQ2hhaW5UYXJnZXQoKTsKKyAgICBn
ZW5lcmF0b3IuZW1pdE5vZGVJblRhaWxQb3NpdGlvbihmaW5hbERlc3QuZ2V0KCksIG1fZXhwcik7
CisgICAgaWYgKG1faXNPdXRlcm1vc3QpCisgICAgICAgIGdlbmVyYXRvci5wb3BPcHRpb25hbENo
YWluVGFyZ2V0KGZpbmFsRGVzdC5nZXQoKSwgbV9pc0RlbGV0ZSk7CisKKyAgICByZXR1cm4gZmlu
YWxEZXN0LmdldCgpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29u
ZGl0aW9uYWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklE
KiBDb25kaXRpb25hbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IGFjNDE1OWI4YWY1ZDcw
MjFkODg0Njc2OTM3ODFhMGIwOTMzNjViYjAuLjU1MDA2ZDRmZmJiNGE5NmQwZjk1MWQ2MzZiNDM5
NzVlMWJiYjU2OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC04NzUsOCArODc1LDcgQEAgZXF1YWxO
dWxsQ29tcGFyaXNvbk9wKG9wX25lcV9udWxsLCBPcE5lcU51bGwsCiAKIGxsaW50T3BXaXRoUmV0
dXJuKG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsLCBPcElzVW5kZWZpbmVkT3JOdWxsLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQogICAgIGdldChtX29wZXJhbmQsIHQwKQotICAg
IGFzc2VydE5vdENvbnN0YW50KHNpemUsIHQwKQotICAgIGxvYWRpIFRhZ09mZnNldFtjZnIsIHQw
LCA4XSwgdDEKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlVGFnKHNpemUsIHQwLCB0MSkKICAg
ICBvcmkgMSwgdDEKICAgICBjaWVxIHQxLCBOdWxsVGFnLCB0MQogICAgIHJldHVybihCb29sZWFu
VGFnLCB0MSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggZTA5Zjg5ODVmZTUzMTdhOGRkOWJiNDcxZWE5MmJhZGJi
OGQ1MWNhYy4uMTUzNGVhOGIzOGU2OGUwNjFmYjk5MWRmNDYwZjU5YTU1N2NkZjRlOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KQEAgLTgyNyw4ICs4MjcsOCBAQCBlcXVhbE51bGxDb21wYXJpc29uT3Aob3BfbmVxX251
bGwsIE9wTmVxTnVsbCwKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9pc191bmRlZmluZWRfb3Jf
bnVsbCwgT3BJc1VuZGVmaW5lZE9yTnVsbCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJl
dHVybikKLSAgICBnZXQobV9vcGVyYW5kLCB0MCkKLSAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQw
CisgICAgZ2V0KG1fb3BlcmFuZCwgdDEpCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXpl
LCB0MSwgdDApCiAgICAgYW5kcSB+VGFnQml0VW5kZWZpbmVkLCB0MAogICAgIGNxZXEgdDAsIFZh
bHVlTnVsbCwgdDAKICAgICBvcnEgVmFsdWVGYWxzZSwgdDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmgKaW5kZXggZGU1YjEzMzkwNjYxMTM0MTJhY2FlZWYyYmQ3NWUw
MzFhMzMzYTEwMC4uZDQ2YTBhMGExZWNiNjMxOWQwMTdkMDM3YmIyZjY2ZDY5OWU1YzMzMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAgLTEyOSw3ICsxMjks
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGludCAgRG9udEJ1aWxkU3RyaW5ncyA9IDA7
CiAKICAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpbmFyeU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgaW50IHRva2VuLCBzdGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+
LCBzdGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+KTsKLSAgICBFeHByZXNz
aW9uTm9kZSogbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05v
ZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNh
bGxPckFwcGx5Q2hpbGREZXB0aCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNh
bGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29s
IHByZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJv
b2wgaXNPcHRpb25hbENhbGwpOwogCiAgICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291
cmNlRWxlbWVudHMoKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEpTQzo6U291cmNlRWxl
bWVudHMoKTsgfQogCkBAIC0zNjAsNiArMzYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQogCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9wdGlvbmFsQ2hhaW4o
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4
cHJlc3Npb25Ob2RlKiBleHByLCBib29sIGlzT3V0ZXJtb3N0KQorICAgIHsKKyAgICAgICAgYmFz
ZS0+c2V0SXNPcHRpb25hbENoYWluQmFzZSgpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBPcHRpb25hbENoYWluTm9kZShsb2NhdGlvbiwgZXhwciwgaXNPdXRlcm1vc3QpOwor
ICAgIH0KKwogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVDb25kaXRpb25hbEV4cHIoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGxocywgRXhwcmVzc2lvbk5vZGUqIHJocykKICAgICB7CiAgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0
aW9uLCBsaHMsIHJocyk7CkBAIC0xMTQ4LDYgKzExNTQsMTcgQEAgRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VUeXBlT2ZOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHIKIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGVuZCkKIHsKKyAgICBpZiAoZXhwci0+aXNPcHRpb25hbENoYWluKCkp
IHsKKyAgICAgICAgT3B0aW9uYWxDaGFpbk5vZGUqIG9wdGlvbmFsQ2hhaW4gPSBzdGF0aWNfY2Fz
dDxPcHRpb25hbENoYWluTm9kZSo+KGV4cHIpOworICAgICAgICBpZiAob3B0aW9uYWxDaGFpbi0+
ZXhwcigpLT5pc0xvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcHRpb25hbENoYWlu
LT5pc091dGVybW9zdCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghb3B0aW9uYWxDaGFpbi0+ZXhw
cigpLT5pc1Jlc29sdmVOb2RlKCkpOworICAgICAgICAgICAgb3B0aW9uYWxDaGFpbi0+c2V0RXhw
cihtYWtlRGVsZXRlTm9kZShsb2NhdGlvbiwgb3B0aW9uYWxDaGFpbi0+ZXhwcigpLCBzdGFydCwg
ZGl2b3QsIGVuZCkpOworICAgICAgICAgICAgb3B0aW9uYWxDaGFpbi0+c2V0SXNEZWxldGUoKTsK
KyAgICAgICAgICAgIHJldHVybiBvcHRpb25hbENoYWluOworICAgICAgICB9CisgICAgfQorCiAg
ICAgaWYgKCFleHByLT5pc0xvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIERlbGV0ZVZhbHVlTm9kZShsb2NhdGlvbiwgZXhwcik7CiAgICAgaWYgKGV4cHItPmlz
UmVzb2x2ZU5vZGUoKSkgewpAQCAtMTM0NSwxNyArMTM2MiwzMCBAQCBFeHByZXNzaW9uTm9kZSog
QVNUQnVpbGRlcjo6bWFrZUJpdFhPck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcgogICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpdFhPck5vZGUobG9jYXRp
b24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKLUV4cHJlc3Npb25O
b2RlKiBBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VXYXNT
dXBlciwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3Rh
cnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90RW5kLCBzaXplX3QgY2FsbE9yQXBwbHlDaGlsZERlcHRoKQorRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBB
cmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQs
IHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJvb2wgaXNPcHRpb25hbENhbGwpCiB7CiAg
ICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQpOwogICAgIGlm
IChmdW5jLT5pc1N1cGVyTm9kZSgpKQogICAgICAgICB1c2VzU3VwZXJDYWxsKCk7CiAKICAgICBp
ZiAoZnVuYy0+aXNCeXRlY29kZUludHJpbnNpY05vZGUoKSkgeworICAgICAgICBBU1NFUlRfVU5V
U0VEKGlzT3B0aW9uYWxDYWxsLCAhaXNPcHRpb25hbENhbGwpOwogICAgICAgICBCeXRlY29kZUlu
dHJpbnNpY05vZGUqIGludHJpbnNpYyA9IHN0YXRpY19jYXN0PEJ5dGVjb2RlSW50cmluc2ljTm9k
ZSo+KGZ1bmMpOwogICAgICAgICBpZiAoaW50cmluc2ljLT50eXBlKCkgPT0gQnl0ZWNvZGVJbnRy
aW5zaWNOb2RlOjpUeXBlOjpDb25zdGFudCkKICAgICAgICAgICAgIHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEpIEJ5dGVjb2RlSW50cmluc2ljTm9kZShCeXRlY29kZUludHJpbnNpY05vZGU6OlR5
cGU6OkZ1bmN0aW9uLCBsb2NhdGlvbiwgaW50cmluc2ljLT5lbWl0dGVyKCksIGludHJpbnNpYy0+
aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgIH0K
KworICAgIC8vIERvbid0IHBhcnNlIGEgZG91Ymx5LW9wdGlvbmFsIGFjY2Vzcy1hbmQtY2FsbCBu
b2RlIChlLmcuIGBhPy5iPy4oKWApIGFzIHR3byBvcHRpb25hbCBjaGFpbnMsIG9yIHdlJ2xsIGxv
c2Ugb3VyIGB0aGlzYCB2YWx1ZS4KKyAgICBpZiAoZnVuYy0+aXNPcHRpb25hbENoYWluKCkpIHsK
KyAgICAgICAgT3B0aW9uYWxDaGFpbk5vZGUqIG9wdGlvbmFsQ2hhaW4gPSBzdGF0aWNfY2FzdDxP
cHRpb25hbENoYWluTm9kZSo+KGZ1bmMpOworICAgICAgICBpZiAob3B0aW9uYWxDaGFpbi0+ZXhw
cigpLT5pc0xvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaXNPcHRpb25h
bENhbGwsIGlzT3B0aW9uYWxDYWxsKTsKKyAgICAgICAgICAgIEFTU0VSVCghb3B0aW9uYWxDaGFp
bi0+aXNPdXRlcm1vc3QoKSk7CisgICAgICAgICAgICBBU1NFUlQoIW9wdGlvbmFsQ2hhaW4tPmV4
cHIoKS0+aXNSZXNvbHZlTm9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlRnVuY3Rpb25D
YWxsTm9kZShsb2NhdGlvbiwgb3B0aW9uYWxDaGFpbi0+ZXhwcigpLCBwcmV2aW91c0Jhc2VXYXNT
dXBlciwgYXJncywgZGl2b3RTdGFydCwgZGl2b3QsIGRpdm90RW5kLCBjYWxsT3JBcHBseUNoaWxk
RGVwdGgsIGlzT3B0aW9uYWxDYWxsKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghZnVu
Yy0+aXNMb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5j
dGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCk7CiAgICAgaWYgKGZ1bmMtPmlzUmVzb2x2ZU5vZGUoKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAppbmRleCBlOThjZGI1ZTU5ZTIzMDcyYzE5MDE4Zjg3
ZDEwYzJkNDUyZDljZDM5Li5mMWJkNjM2ZDZmNDY0NzcxMmRiMDQ0ZGY4MTJmZmZkNmRhMTc0MmJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcApAQCAtMjE1NywxMCArMjE1
NywxNyBAQCBzdGFydDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGFyYWN0ZXJRdWVzdGlv
bjoKICAgICAgICAgc2hpZnQoKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU51bGxpc2hDb2Fs
ZXNjaW5nKCkgJiYgbV9jdXJyZW50ID09ICc/JykgewotICAgICAgICAgICAgc2hpZnQoKTsKLSAg
ICAgICAgICAgIHRva2VuID0gQ09BTEVTQ0U7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZU51bGxpc2hBd2FyZU9wZXJhdG9ycygpKSB7CisgICAgICAgICAgICBp
ZiAobV9jdXJyZW50ID09ICc/JykgeworICAgICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAg
ICAgICAgICAgdG9rZW4gPSBDT0FMRVNDRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJy4nICYmICFpc0FTQ0lJRGln
aXQocGVlaygxKSkpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAg
IHRva2VuID0gUVVFU1RJT05ET1Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgdG9rZW4gPSBRVUVTVElPTjsKICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3Rv
cnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCmlu
ZGV4IGQ0MWUzYWVkOGU0NWY3YThlMmZkMzFjMjQ0NzdkZWNjYjhkNTY0MGYuLmQ2NWIwOGI3OTg4
MzBiYjFmNTlmN2JiYTYxYmFiYzgzZjJhMDZiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCkBAIC02NzYsNiArNjc2LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKKyAgICBpbmxpbmUgT3B0aW9uYWxDaGFpbk5vZGU6
Ok9wdGlvbmFsQ2hhaW5Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBleHByLCBib29sIGlzT3V0ZXJtb3N0KQorICAgICAgICA6IEV4cHJlc3Npb25O
b2RlKGxvY2F0aW9uKQorICAgICAgICAsIG1fZXhwcihleHByKQorICAgICAgICAsIG1faXNPdXRl
cm1vc3QoaXNPdXRlcm1vc3QpCisgICAgeworICAgIH0KKwogICAgIGlubGluZSBDb25kaXRpb25h
bE5vZGU6OkNvbmRpdGlvbmFsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogbG9naWNhbCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjIpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAg
ICwgbV9sb2dpY2FsKGxvZ2ljYWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5k
ZXggODZmZGFmM2QwNGZkMGQ4ZjdmNDg3ZDE3NzM3N2UyYTM3ZTk1YTc4Ny4uZjYzYzAyOGVhYmY3
MjAzMjU3MmE2OWY3YjhhYTM1NTJkOWVmNDE2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuaApAQCAtMjA1LDYgKzIwNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNCeXRlY29kZUludHJpbnNpY05vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCaW5hcnlPcE5vZGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbkNhbGwoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNPcHRpb25hbENoYWluKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2Rl
SW5Db25kaXRpb25Db250ZXh0KEJ5dGVjb2RlR2VuZXJhdG9yJiwgTGFiZWwmLCBMYWJlbCYsIEZh
bGxUaHJvdWdoTW9kZSk7CiAKQEAgLTIxMiw4ICsyMTMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgUmVzdWx0VHlwZSByZXN1bHREZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXN1bHRUeXBlOyB9CiAKKyAgICAgICAgYm9vbCBpc09wdGlvbmFsQ2hhaW5CYXNlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc09wdGlvbmFsQ2hhaW5CYXNlOyB9CisgICAgICAgIHZvaWQgc2V0SXNPcHRp
b25hbENoYWluQmFzZSgpIHsgbV9pc09wdGlvbmFsQ2hhaW5CYXNlID0gdHJ1ZTsgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgUmVzdWx0VHlwZSBtX3Jlc3VsdFR5cGU7CisgICAgICAgIGJvb2wg
bV9pc09wdGlvbmFsQ2hhaW5CYXNlIHsgZmFsc2UgfTsKICAgICB9OwogCiAgICAgY2xhc3MgU3Rh
dGVtZW50Tm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTEzMTAsMTIgKzEzMTUsMzMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIENvYWxlc2NlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMik7CiAKICAgICBwcml2
YXRlOgotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IG51bGxwdHIpIGZpbmFsOwog
CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHIxOwogICAgICAgICBFeHByZXNzaW9uTm9k
ZSogbV9leHByMjsKICAgICB9OwogCisgICAgY2xhc3MgT3B0aW9uYWxDaGFpbk5vZGUgZmluYWwg
OiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgT3B0aW9uYWxD
aGFpbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBib29sKTsK
KworICAgICAgICB2b2lkIHNldEV4cHIoRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgbV9leHByID0g
ZXhwcjsgfQorICAgICAgICBFeHByZXNzaW9uTm9kZSogZXhwcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwcjsgfQorCisgICAgICAgIGJvb2wgaXNPdXRlcm1vc3QoKSBjb25zdCB7IHJldHVybiBtX2lz
T3V0ZXJtb3N0OyB9CisKKyAgICAgICAgdm9pZCBzZXRJc0RlbGV0ZSgpIHsgbV9pc0RlbGV0ZSA9
IHRydWU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gbnVsbHB0cikgZmluYWw7CisKKyAg
ICAgICAgYm9vbCBpc09wdGlvbmFsQ2hhaW4oKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
CisKKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjsKKyAgICAgICAgYm9vbCBtX2lzT3V0
ZXJtb3N0OworICAgICAgICBib29sIG1faXNEZWxldGUgeyBmYWxzZSB9OworICAgIH07CisKICAg
ICAvLyBUaGUgdGVybmFyeSBvcGVyYXRvciwgIm1fbG9naWNhbCA/IG1fZXhwcjEgOiBtX2V4cHIy
IgogICAgIGNsYXNzIENvbmRpdGlvbmFsTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9k
ZSB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmlu
ZGV4IGY4ZGJlNzE5NmYxMTE3MTZkMGE1OGY3ZjU3ZTNmOGY2N2I3YTJhY2YuLmU2NDQ1Y2Q2NjE2
NWFhNmZjM2RjOTU5NGFkZWZlOGIyYmFhODc3M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAKQEAgLTQ4MDgsMTAzICs0ODA4LDEzNiBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJl
ckV4cHJlcwogICAgIH0KIAogICAgIGZhaWxJZkZhbHNlKGJhc2UsICJDYW5ub3QgcGFyc2UgYmFz
ZSBleHByZXNzaW9uIik7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgbG9jYXRpb24gPSB0
b2tlbkxvY2F0aW9uKCk7Ci0gICAgICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKLSAgICAg
ICAgY2FzZSBPUEVOQlJBQ0tFVDogewotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2
aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNz
aW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKworICAgIGRvIHsKKyAgICAgICAgVHJl
ZUV4cHJlc3Npb24gb3B0aW9uYWxDaGFpbkJhc2UgPSAwOworICAgICAgICBKU1Rva2VuTG9jYXRp
b24gb3B0aW9uYWxDaGFpbkxvY2F0aW9uOworICAgICAgICBKU1Rva2VuVHlwZSB0eXBlID0gbV90
b2tlbi5tX3R5cGU7CisKKyAgICAgICAgaWYgKG1hdGNoKFFVRVNUSU9ORE9UKSkgeworICAgICAg
ICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG5ld0NvdW50LCAiQ2Fubm90IGNhbGwgY29uc3RydWN0
b3IgaW4gYW4gb3B0aW9uYWwgY2hhaW4iKTsKKyAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1
ZShiYXNlSXNTdXBlciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGhlIGJhc2Ugb2YgYW4gb3B0aW9u
YWwgY2hhaW4iKTsKKyAgICAgICAgICAgIG9wdGlvbmFsQ2hhaW5CYXNlID0gYmFzZTsKKyAgICAg
ICAgICAgIG9wdGlvbmFsQ2hhaW5Mb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKKworICAgICAg
ICAgICAgU2F2ZVBvaW50IHNhdmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgpOwogICAgICAgICAg
ICAgbmV4dCgpOwotICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5u
b25MSFNDb3VudDsKLSAgICAgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX3BhcnNl
clN0YXRlLmFzc2lnbm1lbnRDb3VudDsKLSAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIHByb3Bl
cnR5ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICAgICAgZmFpbElmRmFsc2Uo
cHJvcGVydHksICJDYW5ub3QgcGFyc2Ugc3Vic2NyaXB0IGV4cHJlc3Npb24iKTsKLSAgICAgICAg
ICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3Moc3RhcnRMb2NhdGlvbiwgYmFz
ZSwgcHJvcGVydHksIGluaXRpYWxBc3NpZ25tZW50cyAhPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1l
bnRDb3VudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9u
KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIg
JiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKLSAgICAgICAgICAgICAgICBj
dXJyZW50RnVuY3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJQcm9w
ZXJ0eSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWls
KENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5kIiwgInN1YnNjcmlwdCBleHByZXNzaW9uIik7Ci0gICAg
ICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChtYXRjaChPUEVOQlJBQ0tFVCkgfHwgbWF0Y2go
T1BFTlBBUkVOKSB8fCBtYXRjaChCQUNLUVVPVEUpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBt
X3Rva2VuLm1fdHlwZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHR5cGUg
PSBET1Q7CisgICAgICAgICAgICAgICAgcmVzdG9yZVNhdmVQb2ludChzYXZlUG9pbnQpOworICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGNhc2UgT1BFTlBBUkVOOiB7Ci0gICAgICAg
ICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAg
ICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Ci0gICAgICAg
ICAgICBpZiAobmV3Q291bnQpIHsKLSAgICAgICAgICAgICAgICBuZXdDb3VudC0tOwotICAgICAg
ICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3Np
dGlvbigpOwotICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VB
cmd1bWVudHMoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgZmFpbElmRmFsc2UoYXJndW1lbnRz
LCAiQ2Fubm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgYmFzZSA9
IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgYXJndW1lbnRzLCBleHByZXNz
aW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgdXNlZFZhcmlhYmxlc1NpemUg
PSBjdXJyZW50U2NvcGUoKS0+Y3VycmVudFVzZWRWYXJpYWJsZXNTaXplKCk7CisKKyAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwor
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIE9QRU5CUkFDS0VU
OiB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNv
dW50Kys7CiAgICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxh
c3RUb2tlbkVuZFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICAgICAgT3B0aW9uYWw8Q2FsbE9yQXBw
bHlEZXB0aFNjb3BlPiBjYWxsT3JBcHBseURlcHRoU2NvcGU7Ci0gICAgICAgICAgICAgICAgcmVj
b3JkQ2FsbE9yQXBwbHlEZXB0aDxUcmVlQnVpbGRlcj4odGhpcywgKm1fdm0sIGNhbGxPckFwcGx5
RGVwdGhTY29wZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAg
ICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CisgICAgICAg
ICAgICAgICAgaW50IGluaXRpYWxBc3NpZ25tZW50cyA9IG1fcGFyc2VyU3RhdGUuYXNzaWdubWVu
dENvdW50OworICAgICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIHByb3BlcnR5ID0gcGFyc2VF
eHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5
LCAiQ2Fubm90IHBhcnNlIHN1YnNjcmlwdCBleHByZXNzaW9uIik7CisgICAgICAgICAgICAgICAg
YmFzZSA9IGNvbnRleHQuY3JlYXRlQnJhY2tldEFjY2VzcyhzdGFydExvY2F0aW9uLCBiYXNlLCBw
cm9wZXJ0eSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENv
dW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7
CiAKLSAgICAgICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1l
bnRzKGNvbnRleHQpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShiYXNlSXNTdXBlciAm
JiBjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50RnVuY3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJQ
cm9wZXJ0eSgpOwogCi0gICAgICAgICAgICAgICAgaWYgKGJhc2VJc0FzeW5jS2V5d29yZCAmJiAo
IWFyZ3VtZW50cyB8fCBtYXRjaChBUlJPV0ZVTkNUSU9OKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNjb3BlKCktPnJldmVydFRvUHJldmlvdXNVc2VkVmFyaWFibGVzKHVzZWRWYXJp
YWJsZXNTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yY2VDbGFzc2lmeUV4cHJlc3Npb25F
cnJvcihFcnJvckluZGljYXRlc0FzeW5jQXJyb3dGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAg
ICAgIGZhaWxEdWVUb1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5k
IiwgInN1YnNjcmlwdCBleHByZXNzaW9uIik7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0
ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBPUEVOUEFSRU46IHsKKyAgICAgICAgICAgICAg
ICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgICAg
ICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OworICAgICAg
ICAgICAgICAgIGlmIChuZXdDb3VudCkgeworICAgICAgICAgICAgICAgICAgICBuZXdDb3VudC0t
OworICAgICAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFz
dFRva2VuRW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBh
cmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAg
ZmFpbElmRmFsc2UoYXJndW1lbnRzLCAiQ2Fubm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7Cisg
ICAgICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24s
IGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9r
ZW5FbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgdXNlZFZhcmlhYmxlc1NpemUgPSBjdXJyZW50U2NvcGUoKS0+Y3VycmVu
dFVzZWRWYXJpYWJsZXNTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9u
IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAg
ICAgICBPcHRpb25hbDxDYWxsT3JBcHBseURlcHRoU2NvcGU+IGNhbGxPckFwcGx5RGVwdGhTY29w
ZTsKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkQ2FsbE9yQXBwbHlEZXB0aDxUcmVlQnVpbGRl
cj4odGhpcywgKm1fdm0sIGNhbGxPckFwcGx5RGVwdGhTY29wZSwgYmFzZSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250
ZXh0KTsKIAotICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBw
YXJzZSBjYWxsIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgIGlmIChiYXNlSXNTdXBlcikg
ewotICAgICAgICAgICAgICAgICAgICBTY29wZVJlZiBmdW5jdGlvblNjb3BlID0gY3VycmVudEZ1
bmN0aW9uU2NvcGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvblNjb3BlLT5z
ZXRIYXNEaXJlY3RTdXBlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCB1bm5l
Y2Vzc2FyeSB0byBjaGVjayBvZiB1c2luZyBzdXBlciBkdXJpbmcgcmVwYXJzaW5nIG9uZSBtb3Jl
IHRpbWUuIEFsc28gaXQgY2FuIGxlYWQgdG8gc3ludGF4IGVycm9yCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpbiBjYXNlIG9mIGFycm93IGZ1bmN0aW9uIGJlY2F1c2UgZHVyaW5nIHJlcGFy
c2luZyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgd2UgY3VycmVudGx5IHBhcnNlIHRoZSBhcnJvdyBm
dW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9mIHRoZSBjb25zdHJ1
Y3RvciBvciBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbGV4ZXItPmlz
UmVwYXJzaW5nRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjb3Bl
UmVmIGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUgPSBjbG9zZXN0UGFyZW50T3JkaW5hcnlG
dW5jdGlvbk5vbkxleGljYWxTY29wZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
bnN0cnVjdG9yS2luZCBmdW5jdGlvbkNvbnN0cnVjdG9yS2luZCA9ICFmdW5jdGlvblNjb3BlLT5p
c0Fycm93RnVuY3Rpb24oKSAmJiAhY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZS0+aXNFdmFs
Q29udGV4dCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZnVuY3Rpb25TY29w
ZS0+Y29uc3RydWN0b3JLaW5kKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBj
bG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlLT5jb25zdHJ1Y3RvcktpbmQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3Rv
cktpbmQgPT0gQ29uc3RydWN0b3JLaW5kOjpOb25lLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRo
aXMgY29udGV4dCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElm
VHJ1ZShmdW5jdGlvbkNvbnN0cnVjdG9yS2luZCAhPSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMs
ICJzdXBlciBpcyBub3QgdmFsaWQgaW4gdGhpcyBjb250ZXh0Iik7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChiYXNlSXNBc3luY0tleXdvcmQgJiYgKCFhcmd1bWVudHMgfHwgbWF0Y2goQVJST1dG
VU5DVElPTikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+cmV2
ZXJ0VG9QcmV2aW91c1VzZWRWYXJpYWJsZXModXNlZFZhcmlhYmxlc1NpemUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yY2VDbGFzc2lmeUV4cHJlc3Npb25FcnJvcihFcnJvckluZGljYXRl
c0FzeW5jQXJyb3dGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsRHVlVG9V
bmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50
cyIpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFNjb3BlUmVmIGZ1bmN0aW9uU2NvcGUgPSBjdXJyZW50RnVuY3Rpb25TY29w
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvblNjb3BlLT5zZXRIYXNE
aXJlY3RTdXBlcigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQgdW5uZWNl
c3NhcnkgdG8gY2hlY2sgb2YgdXNpbmcgc3VwZXIgZHVyaW5nIHJlcGFyc2luZyBvbmUgbW9yZSB0
aW1lLiBBbHNvIGl0IGNhbiBsZWFkIHRvIHN5bnRheCBlcnJvcgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGluIGNhc2Ugb2YgYXJyb3cgZnVuY3Rpb24gYmVjYXVzZSBkdXJpbmcgcmVw
YXJzaW5nIHdlIGRvbid0IGtub3cgd2hldGhlciB3ZSBjdXJyZW50bHkgcGFyc2UgdGhlIGFycm93
IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9mIHRoZSBj
b25zdHJ1Y3RvciBvciBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X2xleGVyLT5pc1JlcGFyc2luZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2NvcGVSZWYgY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZSA9IGNsb3Nlc3RQ
YXJlbnRPcmRpbmFyeUZ1bmN0aW9uTm9uTGV4aWNhbFNjb3BlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yS2luZCBmdW5jdGlvbkNvbnN0cnVjdG9yS2luZCA9
ICFmdW5jdGlvblNjb3BlLT5pc0Fycm93RnVuY3Rpb24oKSAmJiAhY2xvc2VzdE9yZGluYXJ5RnVu
Y3Rpb25TY29wZS0+aXNFdmFsQ29udGV4dCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA/IGZ1bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9yS2luZCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmNv
bnN0cnVjdG9yS2luZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRp
Y0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPT0gQ29uc3RydWN0b3JLaW5kOjpO
b25lLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3Rv
cktpbmQgIT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzLCAic3VwZXIgaXMgbm90IHZhbGlkIGlu
IHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2Nv
cGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb25TY29wZS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyQ2FsbCgpOwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcGUoKS0+
aXNBcnJvd0Z1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblNjb3Bl
LT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJDYWxsKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgYm9vbCBpc09wdGlvbmFsQ2FsbCA9IG9wdGlvbmFsQ2hhaW5Mb2NhdGlvbi5lbmRPZmZz
ZXQgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cHJlc3Npb25FbmQub2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQubWFrZUZ1bmN0aW9uQ2FsbE5vZGUoc3RhcnRM
b2NhdGlvbiwgYmFzZSwgcHJldmlvdXNCYXNlV2FzU3VwZXIsIGFyZ3VtZW50cywgZXhwcmVzc2lv
blN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2Vu
RW5kUG9zaXRpb24oKSwgY2FsbE9yQXBwbHlEZXB0aFNjb3BlID8gY2FsbE9yQXBwbHlEZXB0aFNj
b3BlLT5kaXN0YW5jZVRvSW5uZXJtb3N0Q2hpbGQoKSA6IDAsIGlzT3B0aW9uYWxDYWxsKTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNPcHRpb25hbENhbGwpCisgICAgICAgICAgICAgICAg
ICAgICAgICBvcHRpb25hbENoYWluQmFzZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKHN0YXJ0TG9j
YXRpb24sIGJhc2UsIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBhcmd1bWVudHMsIGV4cHJlc3Npb25T
dGFydCwKLSAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9z
aXRpb24oKSwgY2FsbE9yQXBwbHlEZXB0aFNjb3BlID8gY2FsbE9yQXBwbHlEZXB0aFNjb3BlLT5k
aXN0YW5jZVRvSW5uZXJtb3N0Q2hpbGQoKSA6IDApOworICAgICAgICAgICAgICAgIG1fcGFyc2Vy
U3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBu
b25MSFNDb3VudDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RE9UOiB7Ci0gICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291
bnQrKzsKLSAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9r
ZW5FbmRQb3NpdGlvbigpOwotICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXJG
bGFnc0lnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkS2V5d29yZHMp
OwotICAgICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQsICJFeHBlY3RlZCBhIHByb3BlcnR5IG5h
bWUgYWZ0ZXIgJy4nIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVEb3RBY2Nl
c3Moc3RhcnRMb2NhdGlvbiwgYmFzZSwgbV90b2tlbi5tX2RhdGEuaWRlbnQsIGV4cHJlc3Npb25T
dGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIGlm
IChVTkxJS0VMWShiYXNlSXNTdXBlciAmJiBjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9u
KCkpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblNjb3BlKCktPnNldElubmVyQXJy
b3dGdW5jdGlvblVzZXNTdXBlclByb3BlcnR5KCk7Ci0gICAgICAgICAgICBuZXh0KCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEJBQ0tRVU9URTogewotICAg
ICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGJhc2VJc1N1cGVyLCAiQ2Fubm90IHVzZSBzdXBl
ciBhcyB0YWcgZm9yIHRhZ2dlZCB0ZW1wbGF0ZXMiKTsKLSAgICAgICAgICAgIEpTVGV4dFBvc2l0
aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwotICAgICAgICAgICAg
aW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKLSAgICAgICAgICAg
IHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpUZW1wbGF0ZUxpdGVyYWwgdGVtcGxhdGVMaXRlcmFsID0g
cGFyc2VUZW1wbGF0ZUxpdGVyYWwoY29udGV4dCwgTGV4ZXJUeXBlOjpSYXdTdHJpbmdzQnVpbGRN
b2RlOjpCdWlsZFJhd1N0cmluZ3MpOwotICAgICAgICAgICAgZmFpbElmRmFsc2UodGVtcGxhdGVM
aXRlcmFsLCAiQ2Fubm90IHBhcnNlIHRlbXBsYXRlIGxpdGVyYWwiKTsKLSAgICAgICAgICAgIGJh
c2UgPSBjb250ZXh0LmNyZWF0ZVRhZ2dlZFRlbXBsYXRlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHRl
bXBsYXRlTGl0ZXJhbCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5F
bmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBu
b25MSFNDb3VudDsKLSAgICAgICAgICAgIG1fc2VlblRhZ2dlZFRlbXBsYXRlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBnb3RvIGVuZE1lbWJlckV4cHJlc3Npb247CisgICAgICAgICAgICBjYXNlIERPVDogeworICAg
ICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwor
ICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5F
bmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVy
RmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRz
KTsKKyAgICAgICAgICAgICAgICBtYXRjaE9yRmFpbChJREVOVCwgIkV4cGVjdGVkIGEgcHJvcGVy
dHkgbmFtZSBhZnRlciAiLCBvcHRpb25hbENoYWluQmFzZSA/ICInPy4nIiA6ICInLiciKTsKKyAg
ICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVEb3RBY2Nlc3Moc3RhcnRMb2NhdGlv
biwgYmFzZSwgbV90b2tlbi5tX2RhdGEuaWRlbnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lv
bkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFko
YmFzZUlzU3VwZXIgJiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uU2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0
aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKKyAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEJBQ0tRVU9U
RTogeworICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShvcHRpb25hbENoYWluQmFz
ZSwgIkNhbm5vdCB1c2UgdGFnZ2VkIHRlbXBsYXRlcyBpbiBhbiBvcHRpb25hbCBjaGFpbiIpOwor
ICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNlSXNTdXBlciwgIkNhbm5vdCB1
c2Ugc3VwZXIgYXMgdGFnIGZvciB0YWdnZWQgdGVtcGxhdGVzIik7CisgICAgICAgICAgICAgICAg
SlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3Vu
dDsKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6VGVtcGxhdGVMaXRlcmFs
IHRlbXBsYXRlTGl0ZXJhbCA9IHBhcnNlVGVtcGxhdGVMaXRlcmFsKGNvbnRleHQsIExleGVyVHlw
ZTo6UmF3U3RyaW5nc0J1aWxkTW9kZTo6QnVpbGRSYXdTdHJpbmdzKTsKKyAgICAgICAgICAgICAg
ICBmYWlsSWZGYWxzZSh0ZW1wbGF0ZUxpdGVyYWwsICJDYW5ub3QgcGFyc2UgdGVtcGxhdGUgbGl0
ZXJhbCIpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZVRhZ2dlZFRlbXBs
YXRlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHRlbXBsYXRlTGl0ZXJhbCwgZXhwcmVzc2lvblN0YXJ0
LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAg
ICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CisgICAgICAgICAgICAg
ICAgbV9zZWVuVGFnZ2VkVGVtcGxhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBnb3Rv
IGVuZE9mQ2hhaW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmV2aW91c0Jhc2VXYXNT
dXBlciA9IGJhc2VJc1N1cGVyOworICAgICAgICAgICAgYmFzZUlzU3VwZXIgPSBmYWxzZTsKKyAg
ICAgICAgICAgIHR5cGUgPSBtX3Rva2VuLm1fdHlwZTsKICAgICAgICAgfQotICAgICAgICBwcmV2
aW91c0Jhc2VXYXNTdXBlciA9IGJhc2VJc1N1cGVyOwotICAgICAgICBiYXNlSXNTdXBlciA9IGZh
bHNlOwotICAgIH0KLWVuZE1lbWJlckV4cHJlc3Npb246CitlbmRPZkNoYWluOgorICAgICAgICBp
ZiAob3B0aW9uYWxDaGFpbkJhc2UpCisgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVP
cHRpb25hbENoYWluKG9wdGlvbmFsQ2hhaW5Mb2NhdGlvbiwgb3B0aW9uYWxDaGFpbkJhc2UsIGJh
c2UsICFtYXRjaChRVUVTVElPTkRPVCkpOworICAgIH0gd2hpbGUgKG1hdGNoKFFVRVNUSU9ORE9U
KSk7CisKICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3VwZXIsICJzdXBlciBpcyBub3Qg
dmFsaWQgaW4gdGhpcyBjb250ZXh0Iik7CiAgICAgd2hpbGUgKG5ld0NvdW50LS0pCiAgICAgICAg
IGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGV4cHJlc3Npb25T
dGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJUb2tlbnMuaAppbmRleCAxNWNhNWVhZjI4ZTc1OTJmNDNmM2RjZTQxZThlNDFl
NjFhOWU4MTM2Li43MjA2NGI5Mjg0ODE2NmY2ZGUyYjIzZjhhM2Y1OGM5ODFiNzY3OWU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKQEAgLTEzNiw2ICsx
MzYsNyBAQCBlbnVtIEpTVG9rZW5UeXBlIHsKICAgICBPUkVRVUFMLAogICAgIERPVERPVERPVCwK
ICAgICBBUlJPV0ZVTkNUSU9OLAorICAgIFFVRVNUSU9ORE9ULAogICAgIExhc3RVbnRhZ2dlZFRv
a2VuLAogCiAgICAgLy8gQmVnaW4gdGFnZ2VkIHRva2VucwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAppbmRleCA0MTk5NThiZWRiNDI4MTFiMTYyODQwMWNk
NGE0Mjk4YTVhNWNmMzc2Li42Y2U3M2Y3ZmNjMzMwOTE3ZDY4ZjlkMWJkZDFiZWQ5YmJmODUwYzdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaApAQCAt
NzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJlc29sdmVFdmFsRXhwciwgUmVzb2x2ZUV4
cHIsIEludGVnZXJFeHByLCBEb3VibGVFeHByLCBTdHJpbmdFeHByLCBCaWdJbnRFeHByLAogICAg
ICAgICBUaGlzRXhwciwgTnVsbEV4cHIsIEJvb2xFeHByLCBSZWdFeHBFeHByLCBPYmplY3RMaXRl
cmFsRXhwciwKICAgICAgICAgRnVuY3Rpb25FeHByLCBDbGFzc0V4cHIsIFN1cGVyRXhwciwgSW1w
b3J0RXhwciwgQnJhY2tldEV4cHIsIERvdEV4cHIsIENhbGxFeHByLAotICAgICAgICBOZXdFeHBy
LCBQcmVFeHByLCBQb3N0RXhwciwgVW5hcnlFeHByLCBCaW5hcnlFeHByLAorICAgICAgICBOZXdF
eHByLCBQcmVFeHByLCBQb3N0RXhwciwgVW5hcnlFeHByLCBCaW5hcnlFeHByLCBPcHRpb25hbENo
YWluLAogICAgICAgICBDb25kaXRpb25hbEV4cHIsIEFzc2lnbm1lbnRFeHByLCBUeXBlb2ZFeHBy
LAogICAgICAgICBEZWxldGVFeHByLCBBcnJheUxpdGVyYWxFeHByLCBCaW5kaW5nRGVzdHJ1Y3R1
cmluZywgUmVzdFBhcmFtZXRlciwKICAgICAgICAgQXJyYXlEZXN0cnVjdHVyaW5nLCBPYmplY3RE
ZXN0cnVjdHVyaW5nLCBTb3VyY2VFbGVtZW50c1Jlc3VsdCwKQEAgLTE0Nyw3ICsxNDcsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIERvbnRCdWlsZFN0cmluZ3MgPSBMZXhl
ckZsYWdzRG9udEJ1aWxkU3RyaW5nczsKIAogICAgIGludCBjcmVhdGVTb3VyY2VFbGVtZW50cygp
IHsgcmV0dXJuIFNvdXJjZUVsZW1lbnRzUmVzdWx0OyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFr
ZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBib29sLCBpbnQs
IGludCwgaW50LCBpbnQsIHNpemVfdCkgeyByZXR1cm4gQ2FsbEV4cHI7IH0KKyAgICBFeHByZXNz
aW9uVHlwZSBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHBy
ZXNzaW9uVHlwZSwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50LCBzaXplX3QsIGJvb2wpIHsgcmV0
dXJuIENhbGxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29tbWFFeHByKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlIGV4cHIpIHsgcmV0dXJuIGV4cHI7IH0K
ICAgICBFeHByZXNzaW9uVHlwZSBhcHBlbmRUb0NvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uVHlwZSYgaGVhZCwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBl
IG5leHQpIHsgaGVhZCA9IG5leHQ7IHJldHVybiBuZXh0OyB9CiAgICAgRXhwcmVzc2lvblR5cGUg
bWFrZUFzc2lnbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9w
ZXJhdG9yLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgYm9vbCwgaW50LCBpbnQsIGludCkgeyByZXR1
cm4gQXNzaWdubWVudEV4cHI7IH0KQEAgLTE4NCw2ICsxODQsNyBAQCBwdWJsaWM6CiAgICAgRXhw
cmVzc2lvblR5cGUgY3JlYXRlUmVnRXhwKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElk
ZW50aWZpZXImIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXImIGZsYWdzLCBpbnQpIHsgcmV0dXJu
IFlhcnI6Omhhc0Vycm9yKFlhcnI6OmNoZWNrU3ludGF4KHBhdHRlcm4uc3RyaW5nKCksIGZsYWdz
LnN0cmluZygpKSkgPyAwIDogUmVnRXhwRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50
LCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50
KSB7IHJldHVybiBOZXdFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT3B0aW9uYWxD
aGFpbihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5
cGUsIGJvb2wpIHsgcmV0dXJuIE9wdGlvbmFsQ2hhaW47IH0KICAgICBFeHByZXNzaW9uVHlwZSBj
cmVhdGVDb25kaXRpb25hbEV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5
cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gQ29uZGl0aW9uYWxF
eHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXNzaWduUmVzb2x2ZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50
LCBpbnQsIEFzc2lnbm1lbnRDb250ZXh0KSB7IHJldHVybiBBc3NpZ25tZW50RXhwcjsgfQogICAg
IEV4cHJlc3Npb25UeXBlIGNyZWF0ZUVtcHR5VmFyRXhwcmVzc2lvbihjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBjb25zdCBJZGVudGlmaWVyJikgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAK
aW5kZXggMTU2YzE4MGUxODM0N2Y0N2M5MzkwNDU5ZTVkMjE3NTExYjk4MzFmZi4uOWU3NTg5MmU1
MDc2NTcxNTJiY2IzNzNiNmYwYjU4ODI2YzE1NGMyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKQEAgLTE3Niw2ICsxNzYsMTAg
QEAgc3RhdGljIFN0cmluZyBmdW5jdGlvbkNhbGxCYXNlKGNvbnN0IFN0cmluZyYgc291cmNlVGV4
dCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAorICAgIC8vIERvbid0IGRpc3Bs
YXkgdGhlID8uIG9mIGFuIG9wdGlvbmFsIGNhbGwuCisgICAgaWYgKGlkeCA+IDEgJiYgc291cmNl
VGV4dFtpZHhdID09ICcuJyAmJiBzb3VyY2VUZXh0W2lkeCAtIDFdID09ICc/JykKKyAgICAgICAg
aWR4IC09IDI7CisKICAgICByZXR1cm4gc291cmNlVGV4dC5sZWZ0KGlkeCArIDEpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggMGQ1ODJlZWFjMzNlY2Ew
ZTRhZDhlNDg5NjU5YjQzMDE5ZDQ0ZTdhYy4uN2JiMTNlNGVlOTgwYzU4ZjcwZDgxMTQ4YjgxODY5
MDYzNzk0ZWU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAt
NDk2LDcgKzQ5Niw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW5n
QXBpID0gZmFsc2U7CiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseVJlZmVyZW5jZXMsIGZhbHNl
LCBOb3JtYWwsICJBbGxvdyB0eXBlcyBmcm9tIHRoZSB3YXNtIHJlZmVyZW5jZXMgc3BlYy4iKSBc
CiAgICAgdihib29sLCB1c2VXZWFrUmVmcywgZmFsc2UsIE5vcm1hbCwgIkV4cG9zZSB0aGUgV2Vh
a1JlZiBjb25zdHJ1Y3Rvci4iKSBcCiAgICAgdihib29sLCB1c2VCaWdJbnQsIGZhbHNlLCBOb3Jt
YWwsICJJZiB0cnVlLCB3ZSB3aWxsIGVuYWJsZSBCaWdJbnQgc3VwcG9ydC4iKSBcCi0gICAgdihi
b29sLCB1c2VOdWxsaXNoQ29hbGVzY2luZywgZmFsc2UsIE5vcm1hbCwgIkVuYWJsZSBzdXBwb3J0
IGZvciB0aGUgPz8gb3BlcmF0b3IuIikgXAorICAgIHYoYm9vbCwgdXNlTnVsbGlzaEF3YXJlT3Bl
cmF0b3JzLCBmYWxzZSwgTm9ybWFsLCAiRW5hYmxlIHN1cHBvcnQgZm9yID8uIGFuZCA/PyBvcGVy
YXRvcnMuIikgXAogICAgIHYoYm9vbCwgdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nLCB0cnVl
LCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHVzZSBvdXIgbm9ybWFsIGFycmF5IGFsbG9jYXRp
b24gcHJvZmlsaW5nLiBJZiBmYWxzZSwgdGhlIGFsbG9jYXRpb24gcHJvZmlsZSB3aWxsIGFsd2F5
cyBjbGFpbSB0byBiZSB1bmRlY2lkZWQuIikgXAogICAgIHYoYm9vbCwgZm9yY2VQb2x5UHJvdG8s
IGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCBjcmVhdGVfdGhpcyB3aWxsIGFsd2F5cyBjcmVhdGUg
YW4gb2JqZWN0IHdpdGggYSBwb2x5IHByb3RvIHN0cnVjdHVyZS4iKSBcCiAgICAgdihib29sLCBm
b3JjZU1pbmlWTU1vZGUsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCBpdCB3aWxsIGZvcmNlIG1p
bmkgVk0gbW9kZSBvbi4iKSBcCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggNjJmZjNlZWIyZDcwYzA5ODAxMTRkYzE4N2M3MGY5ODAzZjFjZTkwOC4u
ZGVmOWIyMmNiYjM5MWVmYTNkZGQ0YTFhNGMzNzUyOTFlMzY1ZTJiMCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE5
LTA4LTEzICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAg
ICBbRVNOZXh0XSBJbXBsZW1lbnQgb3B0aW9uYWwgY2hhaW5pbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDE5OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0czoKKwogMjAxOS0wOC0xMiAgVGFrYXNoaSBLb21vcmkgIDxUYWthc2hpLktvbW9yaUBzb255
LmNvbT4KIAogICAgICAgICBbV1RGXSBUaHJlYWQ6OnJlbW92ZUZyb21UaHJlYWRHcm91cCBsZWFr
cyB3ZWFrIHBvaW50ZXJzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVz
cy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggODNkYzA2
MmFiMjgyMTE2MWE5MzFjMmFiZTQzZGY1ZjY2OWE4OGRhOS4uMDk4NzIzNTM2MGQyNDQ0ZDE3YmJl
OWMzYThiZWFlMWJjOTFlOTk0ZSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC02
OTksOCArNjk5LDggQEAgZGVmIHJ1bkJpZ0ludEVuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKICAgICBydW4oImJpZy1pbnQtZW5hYmxlZCIsICItLXVzZUJpZ0ludD10cnVlIiAs
ICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKLWRl
ZiBydW5OdWxsaXNoQ29hbGVzY2luZ0VuYWJsZWQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKLSAgICBydW4oIm51bGxpc2gtY29hbGVzY2luZy1lbmFibGVkIiwgIi0tdXNlTnVsbGlzaENv
YWxlc2Npbmc9dHJ1ZSIgLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKK2RlZiBydW5OdWxsaXNoQXdhcmVPcGVyYXRvcnNFbmFibGVkKCpvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpCisgICAgcnVuKCJudWxsaXNoLWF3YXJlLW9wZXJhdG9ycy1lbmFibGVk
IiwgIi0tdXNlTnVsbGlzaEF3YXJlT3BlcmF0b3JzPXRydWUiICwgKihGVExfT1BUSU9OUyArIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVCgqb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBkMGE0ODM1MjcyYWJhOTIzMWEwNGE2OTFmZmVlNzE1
ZmYxYjY2YTVjLi5mNjBjMDY3Yjg1NmNmZjdkMGYyM2QzZTI2MDZlYTVkNzdlYTM5NTc3IDEwMDY0
NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDE5LTA4LTEzICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255
LmNvbT4KKworICAgICAgICBbRVNOZXh0XSBJbXBsZW1lbnQgb3B0aW9uYWwgY2hhaW5pbmcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDE5OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL251
bGxpc2gtY29hbGVzY2luZy5qczoKKyAgICAgICAgKiBzdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcu
anM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy90YWlsLWNhbGwtcmVjb2duaXplLmpzOgorCiAy
MDE5LTA4LTA4ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAg
ICAgICBbSlNDXSBBZGQgImp1bXAgaWYgKG5vdCkgdW5kZWZpbmVkIG9yIG51bGwiIGJ5dGVjb2Rl
IG9wcwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzIGIv
SlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzCmluZGV4IGYzZGRjYTcwNWJkMzE0
NTJjYTZhNDU1NTEzOTYwYTlkMTFhZTMxOWQuLjhjYmFkNDQ0MzVmMmZjZDA1Mjg2NDEzOGVlMGI3
YzVjM2Y4YjAyODEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2lu
Zy5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanMKQEAgLTEsNCAr
MSw0IEBACi0vL0AgcnVuTnVsbGlzaENvYWxlc2NpbmdFbmFibGVkCisvL0AgcnVuTnVsbGlzaEF3
YXJlT3BlcmF0b3JzRW5hYmxlZAogCiBmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVk
KSB7CiAgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9vcHRpb25hbC1jaGFpbmluZy5qcyBiL0pTVGVzdHMvc3RyZXNzL29wdGlvbmFsLWNoYWlu
aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc5NTZmNmRkN2U2NjE2ZjA0ZmE3OTFhOWUyOTJjYTk1NjkyOGNh
NTQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9vcHRpb25hbC1jaGFpbmluZy5q
cwpAQCAtMCwwICsxLDE2MCBAQAorLy9AIHJ1bk51bGxpc2hBd2FyZU9wZXJhdG9yc0VuYWJsZWQK
KworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwg
IT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7ZXhwZWN0
ZWR9IGJ1dCBnb3QgJHthY3R1YWx9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93U3ludGF4
RXJyb3Ioc2NyaXB0KSB7CisgICAgbGV0IGVycm9yOworICAgIHRyeSB7CisgICAgICAgIGV2YWwo
c2NyaXB0KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisK
KyAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdFeHBlY3RlZCBTeW50YXhFcnJvciEnKTsKK30KKworZnVuY3Rpb24gc2hvdWxk
VGhyb3dUeXBlRXJyb3IoZnVuYywgbWVzc2FnZVByZWZpeCkgeworICAgIGxldCBlcnJvcjsKKyAg
ICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJv
ciA9IGU7CisgICAgfQorCisgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3IpKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFR5cGVFcnJvciEnKTsKKworICAgIGlm
ICghZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKG1lc3NhZ2VQcmVmaXgpKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ1R5cGVFcnJvciBoYXMgd3JvbmcgbWVzc2FnZSEnKTsKK30KKworY29uc3Qg
bWFzcXVlcmFkZXIgPSBtYWtlTWFzcXVlcmFkZXIoKTsKK21hc3F1ZXJhZGVyLmZvbyA9IDM7CisK
K2Z1bmN0aW9uIHRlc3RCYXNpY0Nhc2VzKCkgeworICAgIHNob3VsZEJlKHVuZGVmaW5lZD8udmFs
dWVPZigpLCB1bmRlZmluZWQpOworICAgIHNob3VsZEJlKG51bGw/LnZhbHVlT2YoKSwgdW5kZWZp
bmVkKTsKKyAgICBzaG91bGRCZSh0cnVlPy52YWx1ZU9mKCksIHRydWUpOworICAgIHNob3VsZEJl
KGZhbHNlPy52YWx1ZU9mKCksIGZhbHNlKTsKKyAgICBzaG91bGRCZSgwPy52YWx1ZU9mKCksIDAp
OworICAgIHNob3VsZEJlKDE/LnZhbHVlT2YoKSwgMSk7CisgICAgc2hvdWxkQmUoJyc/LnZhbHVl
T2YoKSwgJycpOworICAgIHNob3VsZEJlKCdoaSc/LnZhbHVlT2YoKSwgJ2hpJyk7CisgICAgc2hv
dWxkQmUoKHt9KT8uY29uc3RydWN0b3IsIE9iamVjdCk7CisgICAgc2hvdWxkQmUoKHsgeDogJ2hp
JyB9KT8ueCwgJ2hpJyk7CisgICAgc2hvdWxkQmUoW10/Lmxlbmd0aCwgMCk7CisgICAgc2hvdWxk
QmUoWydoaSddPy5sZW5ndGgsIDEpOworICAgIHNob3VsZEJlKG1hc3F1ZXJhZGVyPy5mb28sIDMp
OworCisgICAgc2hvdWxkQmUodW5kZWZpbmVkPy5bJ3ZhbHVlT2YnXSgpLCB1bmRlZmluZWQpOwor
ICAgIHNob3VsZEJlKG51bGw/LlsndmFsdWVPZiddKCksIHVuZGVmaW5lZCk7CisgICAgc2hvdWxk
QmUodHJ1ZT8uWyd2YWx1ZU9mJ10oKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUoZmFsc2U/LlsndmFs
dWVPZiddKCksIGZhbHNlKTsKKyAgICBzaG91bGRCZSgwPy5bJ3ZhbHVlT2YnXSgpLCAwKTsKKyAg
ICBzaG91bGRCZSgxPy5bJ3ZhbHVlT2YnXSgpLCAxKTsKKyAgICBzaG91bGRCZSgnJz8uWyd2YWx1
ZU9mJ10oKSwgJycpOworICAgIHNob3VsZEJlKCdoaSc/LlsndmFsdWVPZiddKCksICdoaScpOwor
ICAgIHNob3VsZEJlKCh7fSk/LlsnY29uc3RydWN0b3InXSwgT2JqZWN0KTsKKyAgICBzaG91bGRC
ZSgoeyB4OiAnaGknIH0pPy5bJ3gnXSwgJ2hpJyk7CisgICAgc2hvdWxkQmUoW10/LlsnbGVuZ3Ro
J10sIDApOworICAgIHNob3VsZEJlKFsnaGknXT8uWzBdLCAnaGknKTsKKyAgICBzaG91bGRCZSht
YXNxdWVyYWRlcj8uWydmb28nXSwgMyk7CisKKyAgICBzaG91bGRCZSh1bmRlZmluZWQ/LigpLCB1
bmRlZmluZWQpOworICAgIHNob3VsZEJlKG51bGw/LigpLCB1bmRlZmluZWQpOworICAgIHNob3Vs
ZFRocm93VHlwZUVycm9yKCgpID0+IHRydWU/LigpLCAndHJ1ZSBpcyBub3QgYSBmdW5jdGlvbicp
OworICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgpID0+IGZhbHNlPy4oKSwgJ2ZhbHNlIGlzIG5v
dCBhIGZ1bmN0aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gMD8uKCksICcw
IGlzIG5vdCBhIGZ1bmN0aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gMT8u
KCksICcxIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkg
PT4gJyc/LigpLCAnXCdcJyBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3VsZFRocm93VHlw
ZUVycm9yKCgpID0+ICdoaSc/LigpLCAnXCdoaVwnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CisgICAg
c2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHt9KT8uKCksICcoe30pIGlzIG5vdCBhIGZ1bmN0
aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHsgeDogJ2hpJyB9KT8uKCks
ICcoeyB4OiBcJ2hpXCcgfSkgaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5
cGVFcnJvcigoKSA9PiBbXT8uKCksICdbXSBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3Vs
ZFRocm93VHlwZUVycm9yKCgpID0+IFsnaGknXT8uKCksICdbXCdoaVwnXSBpcyBub3QgYSBmdW5j
dGlvbicpOworICAgIHNob3VsZFRocm93VHlwZUVycm9yKCgpID0+IG1hc3F1ZXJhZGVyPy4oKSwg
J21hc3F1ZXJhZGVyIGlzIG5vdCBhIGZ1bmN0aW9uJyk7Cit9Citub0lubGluZSh0ZXN0QmFzaWND
YXNlcyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspCisgICAgdGVzdEJhc2ljQ2Fz
ZXMoKTsKKworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHt9KT8uaSgpLCAnKHt9KT8uaSBp
cyBub3QgYSBmdW5jdGlvbicpOworc2hvdWxkQmUoKHt9KS5pPy4oKSwgdW5kZWZpbmVkKTsKK3No
b3VsZEJlKCh7fSk/Lmk/LigpLCB1bmRlZmluZWQpOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkg
PT4gKHt9KT8uWydpJ10oKSwgJyh7fSk/LltcJ2lcJ10gaXMgbm90IGEgZnVuY3Rpb24nKTsKK3No
b3VsZEJlKCh7fSlbJ2knXT8uKCksIHVuZGVmaW5lZCk7CitzaG91bGRCZSgoe30pPy5bJ2knXT8u
KCksIHVuZGVmaW5lZCk7CisKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICh7fSk/LmFbJ2In
XSwgJ3VuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0Jyk7CitzaG91bGRCZSgoe30pPy5hPy5bJ2In
XSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKG51bGw/LmFbJ2InXSgpLmMsIHVuZGVmaW5lZCk7Citz
aG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoe30pPy5bJ2EnXS5iLCAndW5kZWZpbmVkIGlzIG5v
dCBhbiBvYmplY3QnKTsKK3Nob3VsZEJlKCh7fSk/LlsnYSddPy5iLCB1bmRlZmluZWQpOworc2hv
dWxkQmUobnVsbD8uWydhJ10uYigpWydjJ10sIHVuZGVmaW5lZCk7CitzaG91bGRUaHJvd1R5cGVF
cnJvcigoKSA9PiAoKCkgPT4ge30pPy4oKSgpLCAnKCgpID0+IHt9KT8uKCkgaXMgbm90IGEgZnVu
Y3Rpb24nKTsKK3Nob3VsZEJlKCgoKSA9PiB7fSk/LigpPy4oKSwgdW5kZWZpbmVkKTsKK3Nob3Vs
ZEJlKG51bGw/LigpKCkuYVsnYiddLCB1bmRlZmluZWQpOworCitjb25zdCBvMCA9IHsgYTogeyBi
KCkgeyByZXR1cm4gdGhpcy5fYi5iaW5kKHRoaXMpOyB9LCBfYigpIHsgcmV0dXJuIHRoaXMuX19i
OyB9LCBfX2I6IHsgYzogNDIgfSB9IH07CitzaG91bGRCZShvMD8uYT8uWydiJ10/LigpPy4oKT8u
YywgNDIpOworc2hvdWxkQmUobzA/Lmk/LlsnaiddPy4oKT8uKCk/LmssIHVuZGVmaW5lZCk7CisK
K3Nob3VsZEJlKCh7IHVuZGVmaW5lZDogMyB9KT8uW251bGw/LmFdLCAzKTsKK3Nob3VsZEJlKCgo
KSA9PiAzKT8uKG51bGw/LmEpLCAzKTsKKworY29uc3QgbzEgPSB7IGNvdW50OiAwLCBnZXQgeCgp
IHsgdGhpcy5jb3VudCsrOyByZXR1cm4gKCkgPT4ge307IH0gfTsKK28xLng/Lnk7CitzaG91bGRC
ZShvMS5jb3VudCwgMSk7CitvMS54Py5bJ3knXTsKK3Nob3VsZEJlKG8xLmNvdW50LCAyKTsKK28x
Lng/LigpOworc2hvdWxkQmUobzEuY291bnQsIDMpOworbnVsbD8uKG8xLngpOworc2hvdWxkQmUo
bzEuY291bnQsIDMpOworCitzaG91bGRCZShkZWxldGUgdW5kZWZpbmVkPy5mb28sIHRydWUpOwor
c2hvdWxkQmUoZGVsZXRlIG51bGw/LmZvbywgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgdW5kZWZp
bmVkPy5bJ2ZvbyddLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBudWxsPy5bJ2ZvbyddLCB0cnVl
KTsKK3Nob3VsZEJlKGRlbGV0ZSB1bmRlZmluZWQ/LigpLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0
ZSBudWxsPy4oKSwgdHJ1ZSk7CisKK2NvbnN0IG8yID0geyB4OiAwLCB5OiAwLCB6KCkge30gfTsK
K3Nob3VsZEJlKGRlbGV0ZSBvMj8ueCwgdHJ1ZSk7CitzaG91bGRCZShvMi54LCB1bmRlZmluZWQp
Oworc2hvdWxkQmUoZGVsZXRlIG8yPy54LCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBvMj8uWyd5
J10sIHRydWUpOworc2hvdWxkQmUobzIueSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKGRlbGV0ZSBv
Mj8uWyd5J10sIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIG8yLno/LigpLCB0cnVlKTsKKworZnVu
Y3Rpb24gZ3JlZXQobmFtZSkgeyByZXR1cm4gYGhleSwgJHtuYW1lfSR7dGhpcy5zdWZmaXggPz8g
Jy4nfWA7IH0KK3Nob3VsZEJlKGV2YWw/LignZ3JlZXQoIndvcmxkIiknKSwgJ2hleSwgd29ybGQu
Jyk7CitzaG91bGRCZShncmVldD8uY2FsbCh7IHN1ZmZpeDogJyEnIH0sICd3b3JsZCcpLCAnaGV5
LCB3b3JsZCEnKTsKK3Nob3VsZEJlKGdyZWV0LmNhbGw/Lih7IHN1ZmZpeDogJyEnIH0sICd3b3Js
ZCcpLCAnaGV5LCB3b3JsZCEnKTsKK3Nob3VsZEJlKG51bGw/LmNhbGwoeyBzdWZmaXg6ICchJyB9
LCAnd29ybGQnKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKCh7fSkuY2FsbD8uKHsgc3VmZml4OiAn
IScgfSwgJ3dvcmxkJyksIHVuZGVmaW5lZCk7CitzaG91bGRCZShncmVldD8uYXBwbHkoeyBzdWZm
aXg6ICc/JyB9LCBbJ3dvcmxkJ10pLCAnaGV5LCB3b3JsZD8nKTsKK3Nob3VsZEJlKGdyZWV0LmFw
cGx5Py4oeyBzdWZmaXg6ICc/JyB9LCBbJ3dvcmxkJ10pLCAnaGV5LCB3b3JsZD8nKTsKK3Nob3Vs
ZEJlKG51bGw/LmFwcGx5KHsgc3VmZml4OiAnPycgfSwgWyd3b3JsZCddKSwgdW5kZWZpbmVkKTsK
K3Nob3VsZEJlKCh7fSkuYXBwbHk/Lih7IHN1ZmZpeDogJz8nIH0sIFsnd29ybGQnXSksIHVuZGVm
aW5lZCk7CisKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NsYXNzIEMge30gY2xhc3MgRCBleHRl
bmRzIEMgeyBmb28oKSB7IHJldHVybiBzdXBlcj8uYmFyOyB9IH0nKTsKK3Nob3VsZFRocm93U3lu
dGF4RXJyb3IoJ2NsYXNzIEMge30gY2xhc3MgRCBleHRlbmRzIEMgeyBmb28oKSB7IHJldHVybiBz
dXBlcj8uWyJiYXIiXTsgfSB9Jyk7CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjbGFzcyBDIHt9
IGNsYXNzIEQgZXh0ZW5kcyBDIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyPy4oKTsgfSB9Jyk7CisK
K3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NvbnN0IG8gPSB7IEM6IGNsYXNzIHt9IH07IG5ldyBv
Py5DKCk7JykKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NvbnN0IG8gPSB7IEM6IGNsYXNzIHt9
IH07IG5ldyBvPy5bIkMiXSgpOycpCitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjbGFzcyBDIHt9
IG5ldyBDPy4oKTsnKQorc2hvdWxkVGhyb3dTeW50YXhFcnJvcignZnVuY3Rpb24gZm9vKCkgeyBu
ZXc/LnRhcmdldDsgfScpOworCitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdmdW5jdGlvbiB0YWco
KSB7fSB0YWc/LmBgOycpOworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY29uc3QgbyA9IHsgdGFn
KCkge30gfTsgbz8udGFnYGA7Jyk7CisKKy8vIE5PVCBhbiBvcHRpb25hbCBjaGFpbgorc2hvdWxk
QmUoZmFsc2U/LjQ6NSwgNSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy90YWlsLWNhbGwt
cmVjb2duaXplLmpzIGIvSlNUZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXJlY29nbml6ZS5qcwppbmRl
eCAxNjgxZTQwMjAxZWQzY2U3ZTc5MTZjOWNhYjhlNTJiMTZjYTE3YWMwLi45Y2MwZTMwNmZhY2Q3
NDQ3NTFhNzk2MmE2ZTY1NzAyNzNkZDVlM2MxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy90
YWlsLWNhbGwtcmVjb2duaXplLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1yZWNv
Z25pemUuanMKQEAgLTEsMyArMSw1IEBACisvL0AgcnVuTnVsbGlzaEF3YXJlT3BlcmF0b3JzRW5h
YmxlZAorCiBmdW5jdGlvbiBjYWxsZXJNdXN0QmVSdW4oKSB7CiAgICAgaWYgKCFPYmplY3QuaXMo
Y2FsbGVyTXVzdEJlUnVuLmNhbGxlciwgcnVuVGVzdHMpKQogICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIldyb25nIGNhbGxlciwgZXhwZWN0ZWQgcnVuIGJ1dCBnb3QgIiwgY2FsbGVyTXVzdEJlUnVu
LmNhbGxlcik7CkBAIC0xNTAsNiArMTUyLDExIEBAIGZ1bmN0aW9uIHJ1blRlc3RzKCkgewogICAg
ICAgICByZXR1cm4gZmFsc2UgfHwgY2FsbGVyTXVzdEJlUnVuKCk7CiAgICAgfSkoKTsKIAorICAg
IChmdW5jdGlvbiB0YWlsQ2FsbENvYWxlc2NlKCkgeworICAgICAgICAidXNlIHN0cmljdCI7Cisg
ICAgICAgIHJldHVybiBmYWxzZSA/PyBjYWxsZXJNdXN0QmVSdW4oKTsKKyAgICB9KSgpOworCiAg
ICAgKGZ1bmN0aW9uIG1lbWJlclRhaWxDYWxsKCkgewogICAgICAgICAidXNlIHN0cmljdCI7CiAg
ICAgICAgIHJldHVybiB7IGY6IGNhbGxlck11c3RCZVJ1biB9LmYoKTsKQEAgLTE2MCw2ICsxNjcs
MTEgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CiAgICAgICAgIHJldHVybiBjYWxsZXJNdXN0QmVS
dW4uYmluZCgpKCk7CiAgICAgfSkoKTsKIAorICAgIChmdW5jdGlvbiBvcHRpb25hbFRhaWxDYWxs
KCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHJldHVybiBjYWxsZXJNdXN0QmVS
dW4/LigpOworICAgIH0pKCk7CisKICAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUgdGVzdHMKIAog
ICAgIChmdW5jdGlvbiBhcHBseVRhaWxDYWxsKCkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376265</attachid>
            <date>2019-08-14 08:13:02 -0700</date>
            <delta_ts>2019-08-14 10:37:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200199-20190814081301.patch</filename>
            <type>text/plain</type>
            <size>65131</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
MDkyMDFmZjM5Y2JiMDFhNDJhYWQ1MTg2YzRkZWIxMDgzYWZiOWZhLi5hODAyYWQ3MDEwNTM4ODEz
MmQ0OTc1NWNlYzkwNjQzZjNhYzA1YjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OSBAQAorMjAxOS0wOC0xNCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
dGhlIG9wdGlvbmFsIGNoYWluaW5nIHByb3Bvc2FsLCB3aGljaCBoYXMgbm93IHJlYWNoZWQgU3Rh
Z2UgMyBhdCBUQzM5LgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhID8uIG9wZXJhdG9yIHdo
aWNoOgorICAgICAgICAgLSBndWFyZHMgbWVtYmVyIGFjY2VzcyB3aGVuIHRoZSBMSFMgaXMgbnVs
bGlzaCwgaS5lLiBgbnVsbD8uZm9vYCBhbmQgYG51bGw/LlsnZm9vJ11gIGFyZSB1bmRlZmluZWQK
KyAgICAgICAgIC0gZ3VhcmRzIGZ1bmN0aW9uIGNhbGxzIHdoZW4gdGhlIExIUyBpcyBudWxsaXNo
LCBpLmUuIGBudWxsPy4oKWAgaXMgdW5kZWZpbmVkCisgICAgICAgICAtIHNob3J0LWNpcmN1aXRz
IG92ZXIgYSB3aG9sZSBhY2Nlc3MvY2FsbCBjaGFpbiwgaS5lLiBgbnVsbD8uYVsnYiddKGMrKylg
IGlzIHVuZGVmaW5lZCBhbmQgZG9lcyBub3QgaW5jcmVtZW50IGMKKworICAgICAgICBUaGlzIGZl
YXR1cmUgY2FuIGJlIG5haXZlbHkgdmlld2VkIGFzIGEgdGVybmFyeSBpbiBkaXNndWlzZSwgaS5l
LiBgYT8uYmAgaXMgbGlrZSBgYSA9PSBudWxsID8gdW5kZWZpbmVkIDogYS5iYC4KKyAgICAgICAg
SG93ZXZlciwgc2luY2Ugd2UgbXVzdCBiZSBzdXJlIG5vdCB0byBkb3VibGUtZXZhbHVhdGUgdGhl
IExIUywgaXQncyBhY3R1YWxseSByYXRoZXIgYWtpbiB0byBhIHRyeSBibG9jayAtLQorICAgICAg
ICBuYW1lbHksIHdlIGhhdmUgdGhlIGJ5dGVjb2RlIGdlbmVyYXRvciBrZWVwIGFuIGVhcmx5LW91
dCBsYWJlbCBmb3IgdXNlIHRocm91Z2hvdXQgdGhlIGFjY2VzcyBhbmQgY2FsbCBjaGFpbi4KKwor
ICAgICAgICAoQWxzbyBub3RlIHRoYXQgZG9jdW1lbnQuYWxsIGJlaGF2ZXMgYXMgYW4gb2JqZWN0
LCBzbyAibnVsbGlzaCIgbWVhbnMgKnN0cmljdGx5KiBlcXVhbCB0byBudWxsIG9yIHVuZGVmaW5l
ZC4pCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaE9wdGlvbmFsQ2hhaW5UYXJnZXQpOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGlvbmFsQ2hhaW5U
YXJnZXQpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRPcHRp
b25hbENoZWNrKTogQWRkZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgIEltcGxlbWVudCBlYXJseS1vdXQgbG9naWMuCisKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QnJhY2tldEFjY2Vz
c29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RG90QWNjZXNzb3JOb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5
dGVjb2RlKTogUmVmYWN0b3Igc28gd2UgY2FuIGVtaXRPcHRpb25hbENoZWNrIGluIGEgc2luZ2xl
IGxvY2F0aW9uLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNv
ZGUpOiBSZWZhY3RvciBzbyB3ZSBjYW4gZW1pdE9wdGlvbmFsQ2hlY2sgaW4gYSBzaW5nbGUgbG9j
YXRpb24uCisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6RGVsZXRlRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29hbGVzY2VO
b2RlOjplbWl0Qnl0ZWNvZGUpOiBDbGVhbiB1cC4KKyAgICAgICAgKEpTQzo6T3B0aW9uYWxDaGFp
bk5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnQgPy4gbm9kZSBh
bmQgZW1pdCBjaGVja3Mgd2hlcmUgbmVlZGVkLgorCisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtOgorICAgICAgICBIYXZlIE9wSXNVbmRlZmluZWRPck51bGwgc3VwcG9ydCBjb25zdGFu
dCByZWdpc3RlcnMuCisKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVPcHRpb25hbENoYWluKTogQWRkZWQuCisgICAgICAgIChK
U0M6OkFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6Cisg
ICAgICAgIChKU0M6OkxleGVyPFQ+OjpsZXhXaXRob3V0Q2xlYXJpbmdMaW5lVGVybWluYXRvcik6
CisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6T3B0
aW9uYWxDaGFpbk5vZGU6Ok9wdGlvbmFsQ2hhaW5Ob2RlKTogQWRkZWQuCisgICAgICAgICogcGFy
c2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjppc09wdGlvbmFsQ2hh
aW4gY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RXhwcmVzc2lvbk5vZGU6OmlzT3B0aW9u
YWxDaGFpbkJhc2UgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RXhwcmVzc2lvbk5vZGU6
OnNldElzT3B0aW9uYWxDaGFpbkJhc2UpOiBBZGRlZC4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2Vy
VG9rZW5zLmg6CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpT
eW50YXhDaGVja2VyOjpjcmVhdGVPcHRpb25hbENoYWluKTogQWRkZWQuCisgICAgICAgIEludHJv
ZHVjZSBuZXcgdG9rZW4gYW5kIEFTVCBub2RlLCBhcyB3ZWxsIGFzIGFuIEV4cHJlc3Npb25Ob2Rl
IGZpZWxkIHRvIG1hcmsgTEhTZXMgd2l0aC4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXNzaW9u
KToKKyAgICAgICAgUGFyc2Ugb3B0aW9uYWwgY2hhaW5zIGJ5IHdyYXBwaW5nIHRoZSBhY2Nlc3Mv
Y2FsbCBwYXJzZSBsb29wLgorCisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNw
cDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DYWxsQmFzZSk6CisgICAgICAgIEVuc3VyZSB0aGF0
IFR5cGVFcnJvciBtZXNzYWdlcyBkb24ndCBpbmNsdWRlIHRoZSAnPy4nLgorCisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIFVwZGF0ZSBmZWF0dXJlIGZsYWcsIGFzID8uIGFu
ZCA/PyBhcmUgYSBkb3VibGUgZmVhdHVyZSBvZiAibnVsbGlzaC1hd2FyZSIgb3BlcmF0b3JzLgor
CiAyMDE5LTA4LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXBsYWNlIG11bHRpcGFyYW1ldGVyIG92ZXJsb2FkcyBvZiBhcHBlbmQoKSBpbiBTdHJpbmdCdWls
ZGVyIGFzIGEgZmlyc3Qgc3RlcCB0b3dhcmQgc3RhbmRhcmRpemluZ2luZyBvbiB0aGUgZmxleGli
bGVBcHBlbmQoKSBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCAyYzMwYTRkOWI0
MzFiMGU1NTI3NDFkMzI1YWM4MTQ5YzM4ZTlkNTgwLi45NTBhYWEyMDNkMzhlZjg4ZTMxYjdiOWE4
Nzk5MzU0MGI2OTA3OGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtNDk2NCw2ICs0OTY0LDMwIEBA
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWYoUmVnaXN0ZXJJRCogY29tcGxldGlv
blR5cGVSZWdpc3RlciwgQ29tcGxldGlvCiAgICAgZW1pdEp1bXBJZlRydWUoZXF1aXZhbGVuY2VS
ZXN1bHQsIGp1bXBUYXJnZXQpOwogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoT3B0
aW9uYWxDaGFpblRhcmdldCgpCit7CisgICAgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2suYXBw
ZW5kKG5ld0xhYmVsKCkpOworfQorCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BPcHRpb25h
bENoYWluVGFyZ2V0KFJlZ2lzdGVySUQqIGRzdCwgYm9vbCBpc0RlbGV0ZSkKK3sKKyAgICBBU1NF
UlQobV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2suc2l6ZSgpKTsKKworICAgIFJlZjxMYWJlbD4g
ZW5kTGFiZWwgPSBuZXdMYWJlbCgpOworICAgIGVtaXRKdW1wKGVuZExhYmVsLmdldCgpKTsKKwor
ICAgIGVtaXRMYWJlbChtX29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFjay50YWtlTGFzdCgpLmdldCgp
KTsKKyAgICBlbWl0TG9hZChkc3QsIGlzRGVsZXRlID8ganNCb29sZWFuKHRydWUpIDoganNVbmRl
ZmluZWQoKSk7CisKKyAgICBlbWl0TGFiZWwoZW5kTGFiZWwuZ2V0KCkpOworfQorCit2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpCit7Cisg
ICAgQVNTRVJUKG1fb3B0aW9uYWxDaGFpblRhcmdldFN0YWNrLnNpemUoKSk7CisgICAgZW1pdEp1
bXBJZlRydWUoZW1pdElzVW5kZWZpbmVkT3JOdWxsKG5ld1RlbXBvcmFyeSgpLCBzcmMpLCBtX29w
dGlvbmFsQ2hhaW5UYXJnZXRTdGFjay5sYXN0KCkuZ2V0KCkpOworfQorCiB2b2lkIEZvckluQ29u
dGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewogICAg
IC8vIExleGljYWxseSBpbnZhbGlkYXRpbmcgRm9ySW5Db250ZXh0cyBpcyBraW5kIG9mIHdlYWsg
c2F1Y2UsIGJ1dCBpdCBvbmx5IG9jY3VycyBpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGU5NzY4NmFhM2Vk
Y2RkOGQzZjliNTdjNGE2ZDEyM2JhYzljYjM5ODcuLjNjYjMzYzM3ZWNmZDZiZmU3NDI4ZTUwMTFl
ZDZhYWM1ZDliYWYyMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTk1OSw2ICs5NTksMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHVzaEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKEZpbmFs
bHlDb250ZXh0Jik7CiAgICAgICAgIHZvaWQgcG9wRmluYWxseUNvbnRyb2xGbG93U2NvcGUoKTsK
IAorICAgICAgICB2b2lkIHB1c2hPcHRpb25hbENoYWluVGFyZ2V0KCk7CisgICAgICAgIHZvaWQg
cG9wT3B0aW9uYWxDaGFpblRhcmdldChSZWdpc3RlcklEKiBkc3QsIGJvb2wgaXNEZWxldGUgPSBm
YWxzZSk7CisgICAgICAgIHZvaWQgZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKTsK
KwogICAgICAgICB2b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCwg
UmVnaXN0ZXJJRCogaW5kZXgpOwogICAgICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsKTsKICAgICAgICAgdm9pZCBwdXNoU3RydWN0dXJlRm9ySW5TY29wZShS
ZWdpc3RlcklEKiBsb2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5
LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKQEAgLTEyNjYsNiArMTI3MCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFuZ2VzOwogICAgICAgICBT
ZWdtZW50ZWRWZWN0b3I8VHJ5RGF0YSwgOD4gbV90cnlEYXRhOwogCisgICAgICAgIFZlY3RvcjxS
ZWY8TGFiZWw+PiBtX29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFjazsKKwogICAgICAgICBpbnQgbV9u
ZXh0Q29uc3RhbnRPZmZzZXQgeyAwIH07CiAKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEZ1bmN0
aW9uTWV0YWRhdGFOb2RlKiwgdW5zaWduZWQ+IEZ1bmN0aW9uT2Zmc2V0TWFwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4
IDdjYzA3OGMzYzAyMTVjOWRmNzkwYzg0OGEzMmQxM2I4MDkwZjA4YTAuLjg2MmYwZTVmMmE4NGQ0
NDMxNjMzOWE5ZTI4MTk4OGU5MTkzNzkyNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTc0NCwxMiArNzQ0LDE4IEBA
IFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAgICAgUmVnaXN0ZXJJRCogcmV0OwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
OwogCi0gICAgaWYgKGlzTm9uSW5kZXhTdHJpbmdFbGVtZW50KCptX3N1YnNjcmlwdCkpIHsKLSAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNl
KTsKKyAgICBib29sIHN1YnNjcmlwdElzTm9uSW5kZXhTdHJpbmcgPSBpc05vbkluZGV4U3RyaW5n
RWxlbWVudCgqbV9zdWJzY3JpcHQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gc3Vi
c2NyaXB0SXNOb25JbmRleFN0cmluZworICAgICAgICA/IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jh
c2UpCisgICAgICAgIDogZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwg
bV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3Ip
KTsKKworICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOworCisgICAgaWYgKHN1YnNjcmlw
dElzTm9uSW5kZXhTdHJpbmcpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICByZXQgPSBnZW5l
cmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCBzdGF0aWNfY2Fz
dDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRI
YW5kU2lkZShtX2Jhc2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5p
c1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJh
dG9yLmVtaXROb2RlRm9yUHJvcGVydHkobV9zdWJzY3JpcHQpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZmluYWxEZXN0LmdldCgpLCBiYXNl
LmdldCgpLCBwcm9wZXJ0eSk7CkBAIC03NjMsMTcgKzc2OSwyNiBAQCBSZWdpc3RlcklEKiBCcmFj
a2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaQogCiBSZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7
CiAgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKLSAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGJhc2VJc1N1cGVyID8gZW1pdFN1cGVyQmFzZUZvckNhbGxl
ZShnZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZTsKKyAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAgIGJhc2UgPSBl
bWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcik7CisgICAgZWxzZSB7CisgICAgICAgIGJh
c2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyAgICAgICAgaWYgKG1fYmFzZS0+aXNP
cHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENo
ZWNrKGJhc2UuZ2V0KCkpOworICAgIH0KKwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICBSZWdpc3RlcklEKiBm
aW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZ2lzdGVy
SUQqIHJldDsKICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHRoaXNWYWx1ZSA9IGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7Ci0gICAgICAgIHJldCA9IGdl
bmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQo
KSwgbV9pZGVudCk7CisgICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERl
c3QuZ2V0KCksIGJhc2UuZ2V0KCksIHRoaXNWYWx1ZS5nZXQoKSwgbV9pZGVudCk7CiAgICAgfSBl
bHNlCi0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2Uu
Z2V0KCksIG1faWRlbnQpOwotICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUoZmluYWxEZXN0
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZmluYWxEZXN0LmdldCgpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKKyAgICBnZW5l
cmF0b3IuZW1pdFByb2ZpbGVUeXBlKGZpbmFsRGVzdC5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC04NDgsMjQgKzg2MywzMiBAQCBSZWdp
c3RlcklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZwogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWRUaGlzRnJvbUFy
cm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1lbnQoKTsKIAogICAgIFZhcmlhYmxlIHZhciA9IGdl
bmVyYXRvci52YXJpYWJsZShnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwpOwotICAgIGlm
IChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLCBudWxscHRyKTsKLSAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubW92ZShnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCksIGxvY2FsKTsKLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRz
KGdlbmVyYXRvciwgbV9hcmdzKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB2YXIu
bG9jYWwoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYzsKKyAgICBpZiAobG9jYWwpIHsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgbG9jYWwuZ2V0
KCksIG51bGxwdHIpOworICAgICAgICBmdW5jID0gZ2VuZXJhdG9yLm1vdmUoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGZ1
bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJn
dW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKworICAgIGlmIChsb2NhbCkKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVk
KCkpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRz
LCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7
CisgICAgZWxzZSB7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RTdGFy
dCgpICsgNDsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhuZXdEaXZvdCwg
ZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7CisgICAgICAgIGdlbmVyYXRvci5tb3ZlKAorICAgICAg
ICAgICAgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhcikpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGZ1bmMuZ2V0KCksIG51bGxwdHIpOwog
ICAgIH0KIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpOwotICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJn
cyk7Ci0gICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyA0OwotICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3
RGl2b3QpOwotICAgIGdlbmVyYXRvci5tb3ZlKAotICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLAotICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29w
ZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZO
b3RGb3VuZCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgZnVu
Yy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgY2Fs
bEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxl
Q2FsbDo6Tm8pOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CisgICAgaWYgKGlzT3B0aW9uYWxD
aGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmMuZ2V0
KCkpOworCisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwocmV0dXJuVmFsdWUuZ2V0
KCksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC04OTksOCArOTIyLDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KKwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBm
dW5jLmdldCgpKTsKKyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5l
cmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soZnVuYy5nZXQoKSk7CisKICAgICBDYWxsQXJndW1lbnRz
IGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0TG9h
ZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBSZWdp
c3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1
ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOwpA
QCAtOTIwLDMwICs5NDcsMzQgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgIEV4cGVjdGVk
RnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiA9IGdlbmVyYXRvci5leHBlY3RlZEZ1bmN0aW9uRm9y
SWRlbnRpZmllcihtX2lkZW50KTsKIAogICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJp
YWJsZShtX2lkZW50KTsKLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkg
ewotICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBsb2NhbCwg
bnVsbHB0cik7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm1v
dmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7Ci0gICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgZnVuYy5nZXQoKSk7Ci0gICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5l
cmF0b3IsIG1fYXJncyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0gdmFyLmxvY2Fs
KCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmM7CisgICAgaWYgKGxvY2FsKSB7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLmdldCgpLCBu
dWxscHRyKTsKKyAgICAgICAgZnVuYyA9IGdlbmVyYXRvci5tb3ZlKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBmdW5jID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50
cyhnZW5lcmF0b3IsIG1fYXJncyk7CisKKyAgICBpZiAobG9jYWwpIHsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICAvLyBUaGlzIHBhc3NlcyBOb0V4cGVjdGVkRnVuY3Rpb24gYmVjYXVzZSB3ZSBl
eHBlY3QgdGhhdCBpZiB0aGUgZnVuY3Rpb24gaXMgaW4gYQogICAgICAgICAvLyBsb2NhbCB2YXJp
YWJsZSwgdGhlbiBpdCdzIG5vdCBvbmUgb2Ygb3VyIGJ1aWx0LWluIGNvbnN0cnVjdG9ycy4KLSAg
ICAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24o
cmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2Fs
bDo6WWVzKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5n
ZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICAgICAgcmV0dXJuIHJldDsKKyAg
ICAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IE5vRXhwZWN0ZWRGdW5jdGlvbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90U3RhcnQoKSArIG1faWRl
bnQubGVuZ3RoKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2
b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOworICAgICAgICBnZW5lcmF0b3IubW92ZSgKKyAg
ICAgICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCisgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxscHRy
KTsKICAgICB9CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwotICAgIENhbGxBcmd1bWVudHMg
Y2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAgaWYgKGlzT3B0aW9uYWxDaGFp
bkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmMuZ2V0KCkp
OwogCi0gICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyBtX2lkZW50
Lmxlbmd0aCgpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRp
dm90U3RhcnQoKSwgbmV3RGl2b3QpOwotICAgIGdlbmVyYXRvci5tb3ZlKAotICAgICAgICBjYWxs
QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLAotICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVT
Y29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LCB2YXIsIFRocm93SWZOb3RGb3VuZCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVj
ZXNzYXJ5KHZhciwgZnVuYy5nZXQoKSwgbnVsbHB0cik7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0g
Z2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMu
Z2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3Rh
cnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICByZXR1cm4gcmV0OwpAQCAtMTI3NSw2ICsxMzA2LDggQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19kZWZpbmVFbnVtZXJhYmxlV3JpdGFi
bGVDb25maWcKIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIGJvb2wgYmFzZUlzU3Vw
ZXIgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7CiAgICAgYm9vbCBzdWJzY3JpcHRJc05vbkluZGV4
U3RyaW5nID0gaXNOb25JbmRleFN0cmluZ0VsZW1lbnQoKm1fc3Vic2NyaXB0KTsKIApAQCAtMTI4
Niw5ICsxMzE5LDExIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwKICAgICAgICAgICAgIGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
YmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vic2Ny
aXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CisKKyAg
ICAgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOwogICAgIH0KIAotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBmdW5jdGlvbjsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1JlZ2lz
dGVyOwogICAgIGlmIChiYXNlSXNTdXBlcikgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2Ugb25s
eSBuZWVkIHRvIGRvIHRoaXMgb25jZSBiZWNhdXNlIHdlIGVpdGhlciBoYXZlIGEgbm9uLVREWiB0
aGlzIG9yIHdlIHRocm93LiBPbmNlIHdlIGhhdmUgYSBub24tVERaIHRoaXMsIHdlIGNhbid0IGNo
YW5nZSBpdHMgdmFsdWUgYmFjayB0byBURFouCkBAIC0xMjk3LDE5ICsxMzMyLDIwIEBAIFJlZ2lz
dGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwKICAgICBpZiAoc3Vic2NyaXB0SXNOb25JbmRleFN0cmluZykgewog
ICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgp
LCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICAgICAgaWYg
KGJhc2VJc1N1cGVyKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5
SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0
ZXIuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNl
LmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1
YnNjcmlwdCktPnZhbHVlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9
IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJh
c2UuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCkp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNl
LmdldCgpLCBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5l
cmF0b3IuZW1pdE5vZGVGb3JQcm9wZXJ0eShtX3N1YnNjcmlwdCk7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25T
dGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCi0g
ICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIHByb3Bl
cnR5LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZnVuY3Rpb24u
Z2V0KCksIGJhc2UuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlW
YWwoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5n
ZXQoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGZ1bmN0aW9uLmdldCgp
LCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgfQorICAgIGlmIChpc09wdGlvbmFs
Q2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlv
bi5nZXQoKSk7CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1l
bnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGlmIChiYXNlSXNTdXBl
cikgewogICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrKGdlbmVyYXRvci50aGlzUmVnaXN0
ZXIoKSk7CkBAIC0xMzMxLDE0ICsxMzY3LDIxIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAg
ICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKICAgICBpZiAoYmFz
ZUlzU3VwZXIpCiAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIGdlbmVyYXRvci5lbnN1cmVUaGlzKCkpOwotICAgIGVsc2UKKyAgICBlbHNlIHsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1f
YmFzZSk7CisgICAgICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpKTsKKyAgICB9CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHBy
ZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7
CiAgICAgaWYgKGJhc2VJc1N1cGVyKSB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzdXBl
ckJhc2UgPSBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcik7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgc3VwZXJCYXNlLmdldCgpLCBjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50KTsKICAgICB9IGVsc2UKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBtX2lkZW50KTsKKworICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAg
ICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5nZXQoKSk7CisKICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5W
YWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6
WWVzKTsKICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiByZXQ7CkBAIC0xMzQ4LDE3ICsx
MzkxLDI0IEBAIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heERpc3RhbmNlVG9Jbm5lcm1vc3RD
YWxsT3JBcHBseSA9IDI7CiAKIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9iYXNlKTsKKworICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJh
c2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOwor
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwg
c3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7Ci0gICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGZ1bmN0aW9uOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9
IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gZnVuY3Rpb247CiAgICAgYXV0byBtYWtlRnVuY3Rpb24gPSBbJl0gewogICAgICAgICBpZiAo
bV9iYXNlLT5pc1N1cGVyTm9kZSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
dGhpc1ZhbHVlID0gZ2VuZXJhdG9yLmVuc3VyZVRoaXMoKTsKICAgICAgICAgICAgIGZ1bmN0aW9u
ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwg
YmFzZS5nZXQoKSwgdGhpc1ZhbHVlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1
aWx0aW5OYW1lcygpLmNhbGxQdWJsaWNOYW1lKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGlu
TmFtZXMoKS5jYWxsUHVibGljTmFtZSgpKTsKKworICAgICAgICBpZiAoaXNPcHRpb25hbENoYWlu
QmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmN0aW9u
LmdldCgpKTsKICAgICB9OwogCiAgICAgYm9vbCBlbWl0Q2FsbENoZWNrID0gIWdlbmVyYXRvci5p
c0J1aWx0aW5GdW5jdGlvbigpOwpAQCAtMTQzMCwxNSArMTQ4MCwyMiBAQCBSZWdpc3RlcklEKiBB
cHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLAogICAgIC8vIGZ1bmN0aW9uLmFwcGx5KHRoaXNBcmcsIFthcmcwLCBhcmcxLCAu
Li5dKSAtPiBjYW4gYmUgdHJpdmlhbGx5IGNvZXJjZWQgaW50byBmdW5jdGlvbi5jYWxsKHRoaXNB
cmcsIGFyZzAsIGFyZzEsIC4uLikgYW5kIHNhdmVzIG9iamVjdCBhbGxvY2F0aW9uCiAgICAgYm9v
bCBtYXlCZUNhbGwgPSBhcmVUcml2aWFsQXBwbHlBcmd1bWVudHMobV9hcmdzKTsKIAotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbjsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1
cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKworICAgIGlmICht
X2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRp
b25hbENoZWNrKGJhc2UuZ2V0KCkpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9u
OwogICAgIGF1dG8gbWFrZUZ1bmN0aW9uID0gWyZdIHsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNT
dXBlck5vZGUoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNWYWx1ZSA9
IGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7CiAgICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRv
ci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCks
IHRoaXNWYWx1ZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMo
KS5hcHBseVB1YmxpY05hbWUoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZnVuY3Rp
b24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3Qp
LCBiYXNlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFw
cGx5UHVibGljTmFtZSgpKTsKKworICAgICAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGZ1bmN0aW9uLmdldCgpKTsK
ICAgICB9OwogCiAgICAgYm9vbCBlbWl0Q2FsbENoZWNrID0gIWdlbmVyYXRvci5pc0J1aWx0aW5G
dW5jdGlvbigpOwpAQCAtMTY5MiwyNSArMTc0OSwzMyBAQCBSZWdpc3RlcklEKiBEZWxldGVSZXNv
bHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dAogCiBSZWdpc3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQp
OwogCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5l
cmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socjAuZ2V0KCkpOworCisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1Jl
ZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIp
OwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMS5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0RGVsZXRlQnlWYWwoZmluYWxEZXN0LmdldCgpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOwog
fQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlRG90Tm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBEZWxldGVEb3RO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWlu
QmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2socjAuZ2V0KCkpOwor
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpCiAgICAgICAgIHJl
dHVybiBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEg
c3VwZXIgcHJvcGVydHkiKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCBtX2lkZW50KTsKKyAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGZpbmFsRGVzdC5nZXQoKSwgcjAuZ2V0KCks
IG1faWRlbnQpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRl
VmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzQ2LDEz
ICsyNDExLDI4IEBAIFJlZ2lzdGVySUQqIENvYWxlc2NlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqCiAgICAgUmVmPExhYmVsPiB0YXJn
ZXQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAogICAgIGdlbmVyYXRvci5lbWl0Tm9kZSh0ZW1w
LmdldCgpLCBtX2V4cHIxKTsKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGdlbmVyYXRv
ci5lbWl0VW5hcnlPcDxPcElzVW5kZWZpbmVkT3JOdWxsPihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0SnVtcElm
RmFsc2UoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZUluVGFpbFBvc2l0aW9uKHRlbXAuZ2V0KCksIG1fZXhwcjIpOwogICAgIGdlbmVyYXRvci5lbWl0
TGFiZWwodGFyZ2V0LmdldCgpKTsKIAogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZShkc3QsIHRl
bXAuZ2V0KCkpOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3B0aW9u
YWxDaGFpbk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBP
cHRpb25hbENoYWluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0
ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKworICAgIGlmIChtX2lzT3V0ZXJt
b3N0KQorICAgICAgICBnZW5lcmF0b3IucHVzaE9wdGlvbmFsQ2hhaW5UYXJnZXQoKTsKKyAgICBn
ZW5lcmF0b3IuZW1pdE5vZGVJblRhaWxQb3NpdGlvbihmaW5hbERlc3QuZ2V0KCksIG1fZXhwcik7
CisgICAgaWYgKG1faXNPdXRlcm1vc3QpCisgICAgICAgIGdlbmVyYXRvci5wb3BPcHRpb25hbENo
YWluVGFyZ2V0KGZpbmFsRGVzdC5nZXQoKSwgbV9pc0RlbGV0ZSk7CisKKyAgICByZXR1cm4gZmlu
YWxEZXN0LmdldCgpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29u
ZGl0aW9uYWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklE
KiBDb25kaXRpb25hbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IGFjNDE1OWI4YWY1ZDcw
MjFkODg0Njc2OTM3ODFhMGIwOTMzNjViYjAuLjU1MDA2ZDRmZmJiNGE5NmQwZjk1MWQ2MzZiNDM5
NzVlMWJiYjU2OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC04NzUsOCArODc1LDcgQEAgZXF1YWxO
dWxsQ29tcGFyaXNvbk9wKG9wX25lcV9udWxsLCBPcE5lcU51bGwsCiAKIGxsaW50T3BXaXRoUmV0
dXJuKG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsLCBPcElzVW5kZWZpbmVkT3JOdWxsLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQogICAgIGdldChtX29wZXJhbmQsIHQwKQotICAg
IGFzc2VydE5vdENvbnN0YW50KHNpemUsIHQwKQotICAgIGxvYWRpIFRhZ09mZnNldFtjZnIsIHQw
LCA4XSwgdDEKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlVGFnKHNpemUsIHQwLCB0MSkKICAg
ICBvcmkgMSwgdDEKICAgICBjaWVxIHQxLCBOdWxsVGFnLCB0MQogICAgIHJldHVybihCb29sZWFu
VGFnLCB0MSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggZTA5Zjg5ODVmZTUzMTdhOGRkOWJiNDcxZWE5MmJhZGJi
OGQ1MWNhYy4uMTUzNGVhOGIzOGU2OGUwNjFmYjk5MWRmNDYwZjU5YTU1N2NkZjRlOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KQEAgLTgyNyw4ICs4MjcsOCBAQCBlcXVhbE51bGxDb21wYXJpc29uT3Aob3BfbmVxX251
bGwsIE9wTmVxTnVsbCwKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9pc191bmRlZmluZWRfb3Jf
bnVsbCwgT3BJc1VuZGVmaW5lZE9yTnVsbCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJl
dHVybikKLSAgICBnZXQobV9vcGVyYW5kLCB0MCkKLSAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQw
CisgICAgZ2V0KG1fb3BlcmFuZCwgdDEpCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXpl
LCB0MSwgdDApCiAgICAgYW5kcSB+VGFnQml0VW5kZWZpbmVkLCB0MAogICAgIGNxZXEgdDAsIFZh
bHVlTnVsbCwgdDAKICAgICBvcnEgVmFsdWVGYWxzZSwgdDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmgKaW5kZXggZGU1YjEzMzkwNjYxMTM0MTJhY2FlZWYyYmQ3NWUw
MzFhMzMzYTEwMC4uMGM5M2JjMjU2YzA3NTA1YTNhMmZhM2YxYTIwMmNhYTBhZTYzMTE0NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAgLTEyOSw3ICsxMjks
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGludCAgRG9udEJ1aWxkU3RyaW5ncyA9IDA7
CiAKICAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpbmFyeU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgaW50IHRva2VuLCBzdGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+
LCBzdGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+KTsKLSAgICBFeHByZXNz
aW9uTm9kZSogbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05v
ZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNh
bGxPckFwcGx5Q2hpbGREZXB0aCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNh
bGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29s
IHByZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJv
b2wgaXNPcHRpb25hbENhbGwpOwogCiAgICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291
cmNlRWxlbWVudHMoKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEpTQzo6U291cmNlRWxl
bWVudHMoKTsgfQogCkBAIC0zNjAsNiArMzYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQogCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9wdGlvbmFsQ2hhaW4o
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4
cHJlc3Npb25Ob2RlKiBleHByLCBib29sIGlzT3V0ZXJtb3N0KQorICAgIHsKKyAgICAgICAgYmFz
ZS0+c2V0SXNPcHRpb25hbENoYWluQmFzZSgpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBPcHRpb25hbENoYWluTm9kZShsb2NhdGlvbiwgZXhwciwgaXNPdXRlcm1vc3QpOwor
ICAgIH0KKwogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVDb25kaXRpb25hbEV4cHIoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGxocywgRXhwcmVzc2lvbk5vZGUqIHJocykKICAgICB7CiAgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0
aW9uLCBsaHMsIHJocyk7CkBAIC0xMTQ4LDYgKzExNTQsMTcgQEAgRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VUeXBlT2ZOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHIKIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGVuZCkKIHsKKyAgICBpZiAoZXhwci0+aXNPcHRpb25hbENoYWluKCkp
IHsKKyAgICAgICAgT3B0aW9uYWxDaGFpbk5vZGUqIG9wdGlvbmFsQ2hhaW4gPSBzdGF0aWNfY2Fz
dDxPcHRpb25hbENoYWluTm9kZSo+KGV4cHIpOworICAgICAgICBpZiAob3B0aW9uYWxDaGFpbi0+
ZXhwcigpLT5pc0xvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcHRpb25hbENoYWlu
LT5pc091dGVybW9zdCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghb3B0aW9uYWxDaGFpbi0+ZXhw
cigpLT5pc1Jlc29sdmVOb2RlKCkpOworICAgICAgICAgICAgb3B0aW9uYWxDaGFpbi0+c2V0RXhw
cihtYWtlRGVsZXRlTm9kZShsb2NhdGlvbiwgb3B0aW9uYWxDaGFpbi0+ZXhwcigpLCBzdGFydCwg
ZGl2b3QsIGVuZCkpOworICAgICAgICAgICAgb3B0aW9uYWxDaGFpbi0+c2V0SXNEZWxldGUoKTsK
KyAgICAgICAgICAgIHJldHVybiBvcHRpb25hbENoYWluOworICAgICAgICB9CisgICAgfQorCiAg
ICAgaWYgKCFleHByLT5pc0xvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIERlbGV0ZVZhbHVlTm9kZShsb2NhdGlvbiwgZXhwcik7CiAgICAgaWYgKGV4cHItPmlz
UmVzb2x2ZU5vZGUoKSkgewpAQCAtMTM0NSwxNyArMTM2MiwyOSBAQCBFeHByZXNzaW9uTm9kZSog
QVNUQnVpbGRlcjo6bWFrZUJpdFhPck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcgogICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpdFhPck5vZGUobG9jYXRp
b24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKLUV4cHJlc3Npb25O
b2RlKiBBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VXYXNT
dXBlciwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3Rh
cnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90RW5kLCBzaXplX3QgY2FsbE9yQXBwbHlDaGlsZERlcHRoKQorRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBB
cmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQs
IHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJvb2wgaXNPcHRpb25hbENhbGwpCiB7CiAg
ICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQpOwogICAgIGlm
IChmdW5jLT5pc1N1cGVyTm9kZSgpKQogICAgICAgICB1c2VzU3VwZXJDYWxsKCk7CiAKICAgICBp
ZiAoZnVuYy0+aXNCeXRlY29kZUludHJpbnNpY05vZGUoKSkgeworICAgICAgICBBU1NFUlRfVU5V
U0VEKGlzT3B0aW9uYWxDYWxsLCAhaXNPcHRpb25hbENhbGwpOwogICAgICAgICBCeXRlY29kZUlu
dHJpbnNpY05vZGUqIGludHJpbnNpYyA9IHN0YXRpY19jYXN0PEJ5dGVjb2RlSW50cmluc2ljTm9k
ZSo+KGZ1bmMpOwogICAgICAgICBpZiAoaW50cmluc2ljLT50eXBlKCkgPT0gQnl0ZWNvZGVJbnRy
aW5zaWNOb2RlOjpUeXBlOjpDb25zdGFudCkKICAgICAgICAgICAgIHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEpIEJ5dGVjb2RlSW50cmluc2ljTm9kZShCeXRlY29kZUludHJpbnNpY05vZGU6OlR5
cGU6OkZ1bmN0aW9uLCBsb2NhdGlvbiwgaW50cmluc2ljLT5lbWl0dGVyKCksIGludHJpbnNpYy0+
aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgIH0K
KworICAgIC8vIERvbid0IHBhcnNlIGEgZG91Ymx5LW9wdGlvbmFsIGFjY2Vzcy1hbmQtY2FsbCBu
b2RlIChlLmcuIGBhPy5iPy4oKWApIGFzIHR3byBvcHRpb25hbCBjaGFpbnMsIG9yIHdlJ2xsIGxv
c2Ugb3VyIGB0aGlzYCB2YWx1ZS4KKyAgICBpZiAoZnVuYy0+aXNPcHRpb25hbENoYWluKCkpIHsK
KyAgICAgICAgT3B0aW9uYWxDaGFpbk5vZGUqIG9wdGlvbmFsQ2hhaW4gPSBzdGF0aWNfY2FzdDxP
cHRpb25hbENoYWluTm9kZSo+KGZ1bmMpOworICAgICAgICBpZiAob3B0aW9uYWxDaGFpbi0+ZXhw
cigpLT5pc0xvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaXNPcHRpb25h
bENhbGwsIGlzT3B0aW9uYWxDYWxsKTsKKyAgICAgICAgICAgIEFTU0VSVCghb3B0aW9uYWxDaGFp
bi0+ZXhwcigpLT5pc1Jlc29sdmVOb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VGdW5j
dGlvbkNhbGxOb2RlKGxvY2F0aW9uLCBvcHRpb25hbENoYWluLT5leHByKCksIHByZXZpb3VzQmFz
ZVdhc1N1cGVyLCBhcmdzLCBkaXZvdFN0YXJ0LCBkaXZvdCwgZGl2b3RFbmQsIGNhbGxPckFwcGx5
Q2hpbGREZXB0aCwgaXNPcHRpb25hbENhbGwpOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYg
KCFmdW5jLT5pc0xvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShsb2NhdGlvbiwgZnVuYywgYXJncywgZGl2b3QsIGRpdm90
U3RhcnQsIGRpdm90RW5kKTsKICAgICBpZiAoZnVuYy0+aXNSZXNvbHZlTm9kZSgpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCmluZGV4IGU5OGNkYjVlNTllMjMwNzJjMTkw
MThmODdkMTBjMmQ0NTJkOWNkMzkuLmYxYmQ2MzZkNmY0NjQ3NzEyZGIwNDRkZjgxMmZmZmQ2ZGEx
NzQyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCkBAIC0yMTU3LDEw
ICsyMTU3LDE3IEBAIHN0YXJ0OgogICAgICAgICBicmVhazsKICAgICBjYXNlIENoYXJhY3RlclF1
ZXN0aW9uOgogICAgICAgICBzaGlmdCgpOwotICAgICAgICBpZiAoT3B0aW9uczo6dXNlTnVsbGlz
aENvYWxlc2NpbmcoKSAmJiBtX2N1cnJlbnQgPT0gJz8nKSB7Ci0gICAgICAgICAgICBzaGlmdCgp
OwotICAgICAgICAgICAgdG9rZW4gPSBDT0FMRVNDRTsKLSAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlTnVsbGlzaEF3YXJlT3BlcmF0b3JzKCkpIHsKKyAgICAgICAg
ICAgIGlmIChtX2N1cnJlbnQgPT0gJz8nKSB7CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAg
ICAgICAgICAgICAgICB0b2tlbiA9IENPQUxFU0NFOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fY3VycmVudCA9PSAnLicgJiYgIWlzQVND
SUlEaWdpdChwZWVrKDEpKSkgeworICAgICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAg
ICAgICAgdG9rZW4gPSBRVUVTVElPTkRPVDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICB0b2tlbiA9IFFVRVNUSU9OOwogICAgICAgICBi
cmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0
cnVjdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3Jz
LmgKaW5kZXggZDQxZTNhZWQ4ZTQ1ZjdhOGUyZmQzMWMyNDQ3N2RlY2NiOGQ1NjQwZi4uZDY1YjA4
Yjc5ODgzMGJiMWY1OWY3YmJhNjFiYWJjODNmMmEwNmIxOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKQEAgLTY3Niw2ICs2NzYsMTMgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAorICAgIGlubGluZSBPcHRpb25hbENoYWlu
Tm9kZTo6T3B0aW9uYWxDaGFpbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJvb2wgaXNPdXRlcm1vc3QpCisgICAgICAgIDogRXhwcmVz
c2lvbk5vZGUobG9jYXRpb24pCisgICAgICAgICwgbV9leHByKGV4cHIpCisgICAgICAgICwgbV9p
c091dGVybW9zdChpc091dGVybW9zdCkKKyAgICB7CisgICAgfQorCiAgICAgaW5saW5lIENvbmRp
dGlvbmFsTm9kZTo6Q29uZGl0aW9uYWxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBsb2dpY2FsLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJl
c3Npb25Ob2RlKiBleHByMikKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKICAg
ICAgICAgLCBtX2xvZ2ljYWwobG9naWNhbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
aAppbmRleCA4NmZkYWYzZDA0ZmQwZDhmN2Y0ODdkMTc3Mzc3ZTJhMzdlOTVhNzg3Li5mNjNjMDI4
ZWFiZjcyMDMyNTcyYTY5ZjdiOGFhMzU1MmQ5ZWY0MTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCkBAIC0yMDUsNiArMjA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0J5dGVjb2RlSW50cmluc2ljTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0JpbmFyeU9wTm9kZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uQ2FsbCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc09wdGlvbmFsQ2hhaW4o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0
ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImLCBMYWJlbCYsIExhYmVs
JiwgRmFsbFRocm91Z2hNb2RlKTsKIApAQCAtMjEyLDggKzIxMywxMiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBSZXN1bHRUeXBlIHJlc3VsdERlc2NyaXB0b3IoKSBjb25zdCB7IHJldHVy
biBtX3Jlc3VsdFR5cGU7IH0KIAorICAgICAgICBib29sIGlzT3B0aW9uYWxDaGFpbkJhc2UoKSBj
b25zdCB7IHJldHVybiBtX2lzT3B0aW9uYWxDaGFpbkJhc2U7IH0KKyAgICAgICAgdm9pZCBzZXRJ
c09wdGlvbmFsQ2hhaW5CYXNlKCkgeyBtX2lzT3B0aW9uYWxDaGFpbkJhc2UgPSB0cnVlOyB9CisK
ICAgICBwcml2YXRlOgogICAgICAgICBSZXN1bHRUeXBlIG1fcmVzdWx0VHlwZTsKKyAgICAgICAg
Ym9vbCBtX2lzT3B0aW9uYWxDaGFpbkJhc2UgeyBmYWxzZSB9OwogICAgIH07CiAKICAgICBjbGFz
cyBTdGF0ZW1lbnROb2RlIDogcHVibGljIE5vZGUgewpAQCAtMTMxMCwxMiArMTMxNSwzMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29hbGVzY2VOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKTsKIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CisgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gbnVsbHB0cikgZmlu
YWw7CiAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjE7CiAgICAgICAgIEV4cHJlc3Np
b25Ob2RlKiBtX2V4cHIyOwogICAgIH07CiAKKyAgICBjbGFzcyBPcHRpb25hbENoYWluTm9kZSBm
aW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBPcHRp
b25hbENoYWluTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIGJv
b2wpOworCisgICAgICAgIHZvaWQgc2V0RXhwcihFeHByZXNzaW9uTm9kZSogZXhwcikgeyBtX2V4
cHIgPSBleHByOyB9CisgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBleHByKCkgY29uc3QgeyByZXR1
cm4gbV9leHByOyB9CisKKyAgICAgICAgYm9vbCBpc091dGVybW9zdCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNPdXRlcm1vc3Q7IH0KKworICAgICAgICB2b2lkIHNldElzRGVsZXRlKCkgeyBtX2lzRGVs
ZXRlID0gdHJ1ZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSBudWxscHRyKSBmaW5hbDsK
KworICAgICAgICBib29sIGlzT3B0aW9uYWxDaGFpbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KKworICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9leHByOworICAgICAgICBib29sIG1f
aXNPdXRlcm1vc3Q7CisgICAgICAgIGJvb2wgbV9pc0RlbGV0ZSB7IGZhbHNlIH07CisgICAgfTsK
KwogICAgIC8vIFRoZSB0ZXJuYXJ5IG9wZXJhdG9yLCAibV9sb2dpY2FsID8gbV9leHByMSA6IG1f
ZXhwcjIiCiAgICAgY2xhc3MgQ29uZGl0aW9uYWxOb2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Np
b25Ob2RlIHsKICAgICBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAKaW5kZXggZjhkYmU3MTk2ZjExMTcxNmQwYTU4ZjdmNTdlM2Y4ZjY3YjdhMmFjZi4uZTY0NDVj
ZDY2MTY1YWE2ZmMzZGM5NTk0YWRlZmU4YjJiYWE4NzczZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmNwcApAQCAtNDgwOCwxMDMgKzQ4MDgsMTM2IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
TWVtYmVyRXhwcmVzCiAgICAgfQogCiAgICAgZmFpbElmRmFsc2UoYmFzZSwgIkNhbm5vdCBwYXJz
ZSBiYXNlIGV4cHJlc3Npb24iKTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBsb2NhdGlv
biA9IHRva2VuTG9jYXRpb24oKTsKLSAgICAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewot
ICAgICAgICBjYXNlIE9QRU5CUkFDS0VUOiB7Ci0gICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5v
blRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4
cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOworCisgICAgZG8geworICAgICAg
ICBUcmVlRXhwcmVzc2lvbiBvcHRpb25hbENoYWluQmFzZSA9IDA7CisgICAgICAgIEpTVG9rZW5M
b2NhdGlvbiBvcHRpb25hbENoYWluTG9jYXRpb247CisgICAgICAgIEpTVG9rZW5UeXBlIHR5cGUg
PSBtX3Rva2VuLm1fdHlwZTsKKworICAgICAgICBpZiAobWF0Y2goUVVFU1RJT05ET1QpKSB7Cisg
ICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobmV3Q291bnQsICJDYW5ub3QgY2FsbCBjb25z
dHJ1Y3RvciBpbiBhbiBvcHRpb25hbCBjaGFpbiIpOworICAgICAgICAgICAgc2VtYW50aWNGYWls
SWZUcnVlKGJhc2VJc1N1cGVyLCAiQ2Fubm90IHVzZSBzdXBlciBhcyB0aGUgYmFzZSBvZiBhbiBv
cHRpb25hbCBjaGFpbiIpOworICAgICAgICAgICAgb3B0aW9uYWxDaGFpbkJhc2UgPSBiYXNlOwor
ICAgICAgICAgICAgb3B0aW9uYWxDaGFpbkxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOworCisg
ICAgICAgICAgICBTYXZlUG9pbnQgc2F2ZVBvaW50ID0gY3JlYXRlU2F2ZVBvaW50KCk7CiAgICAg
ICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0
YXRlLm5vbkxIU0NvdW50OwotICAgICAgICAgICAgaW50IGluaXRpYWxBc3NpZ25tZW50cyA9IG1f
cGFyc2VyU3RhdGUuYXNzaWdubWVudENvdW50OwotICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24g
cHJvcGVydHkgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgICAgICAgICBmYWlsSWZG
YWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJzZSBzdWJzY3JpcHQgZXhwcmVzc2lvbiIpOwotICAg
ICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlQnJhY2tldEFjY2VzcyhzdGFydExvY2F0aW9u
LCBiYXNlLCBwcm9wZXJ0eSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fcGFyc2VyU3RhdGUuYXNz
aWdubWVudENvdW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9z
aXRpb24oKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShiYXNlSXNT
dXBlciAmJiBjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpKQotICAgICAgICAgICAg
ICAgIGN1cnJlbnRGdW5jdGlvblNjb3BlKCktPnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNTdXBl
clByb3BlcnR5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25P
ckZhaWwoQ0xPU0VCUkFDS0VULCAiXSIsICJlbmQiLCAic3Vic2NyaXB0IGV4cHJlc3Npb24iKTsK
LSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1hdGNoKE9QRU5CUkFDS0VUKSB8fCBt
YXRjaChPUEVOUEFSRU4pIHx8IG1hdGNoKEJBQ0tRVU9URSkpCisgICAgICAgICAgICAgICAgdHlw
ZSA9IG1fdG9rZW4ubV90eXBlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
dHlwZSA9IERPVDsKKyAgICAgICAgICAgICAgICByZXN0b3JlU2F2ZVBvaW50KHNhdmVQb2ludCk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBPUEVOUEFSRU46IHsKLSAg
ICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwotICAg
ICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKLSAg
ICAgICAgICAgIGlmIChuZXdDb3VudCkgewotICAgICAgICAgICAgICAgIG5ld0NvdW50LS07Ci0g
ICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVu
ZFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBw
YXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKLSAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShhcmd1
bWVudHMsICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgICAgICBi
YXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4
cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNpemVfdCB1c2VkVmFyaWFibGVz
U2l6ZSA9IGN1cnJlbnRTY29wZSgpLT5jdXJyZW50VXNlZFZhcmlhYmxlc1NpemUoKTsKKworICAg
ICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9u
KCk7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgT1BFTkJS
QUNLRVQ6IHsKKyAgICAgICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNz
aW9uQ291bnQrKzsKICAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5k
ID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgICAgICBPcHRpb25hbDxDYWxs
T3JBcHBseURlcHRoU2NvcGU+IGNhbGxPckFwcGx5RGVwdGhTY29wZTsKLSAgICAgICAgICAgICAg
ICByZWNvcmRDYWxsT3JBcHBseURlcHRoPFRyZWVCdWlsZGVyPih0aGlzLCAqbV92bSwgY2FsbE9y
QXBwbHlEZXB0aFNjb3BlLCBiYXNlKTsKKyAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAg
ICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKKyAg
ICAgICAgICAgICAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9wYXJzZXJTdGF0ZS5hc3Np
Z25tZW50Q291bnQ7CisgICAgICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gcHJvcGVydHkgPSBw
YXJzZUV4cHJlc3Npb24oY29udGV4dCk7CisgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UocHJv
cGVydHksICJDYW5ub3QgcGFyc2Ugc3Vic2NyaXB0IGV4cHJlc3Npb24iKTsKKyAgICAgICAgICAg
ICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVCcmFja2V0QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJh
c2UsIHByb3BlcnR5LCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25t
ZW50Q291bnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlv
bigpKTsKIAotICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VB
cmd1bWVudHMoY29udGV4dCk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1
cGVyICYmIGN1cnJlbnRTY29wZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkpCisgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRGdW5jdGlvblNjb3BlKCktPnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNT
dXBlclByb3BlcnR5KCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoYmFzZUlzQXN5bmNLZXl3b3Jk
ICYmICghYXJndW1lbnRzIHx8IG1hdGNoKEFSUk9XRlVOQ1RJT04pKSkgewotICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2NvcGUoKS0+cmV2ZXJ0VG9QcmV2aW91c1VzZWRWYXJpYWJsZXModXNl
ZFZhcmlhYmxlc1NpemUpOwotICAgICAgICAgICAgICAgICAgICBmb3JjZUNsYXNzaWZ5RXhwcmVz
c2lvbkVycm9yKEVycm9ySW5kaWNhdGVzQXN5bmNBcnJvd0Z1bmN0aW9uKTsKLSAgICAgICAgICAg
ICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFDS0VULCAiXSIs
ICJlbmQiLCAic3Vic2NyaXB0IGV4cHJlc3Npb24iKTsKKyAgICAgICAgICAgICAgICBtX3BhcnNl
clN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIE9QRU5QQVJFTjogeworICAgICAgICAg
ICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgICAg
ICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Cisg
ICAgICAgICAgICAgICAgaWYgKG5ld0NvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIG5ld0Nv
dW50LS07CisgICAgICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQg
PSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgICAgICBUcmVlQXJndW1l
bnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQpOworICAgICAgICAgICAgICAg
ICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMsICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1bWVudHMi
KTsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2Nh
dGlvbiwgYmFzZSwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxh
c3RUb2tlbkVuZFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCB1c2VkVmFyaWFibGVzU2l6ZSA9IGN1cnJlbnRTY29wZSgpLT5j
dXJyZW50VXNlZFZhcmlhYmxlc1NpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgSlNUZXh0UG9z
aXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CisgICAgICAgICAg
ICAgICAgICAgIE9wdGlvbmFsPENhbGxPckFwcGx5RGVwdGhTY29wZT4gY2FsbE9yQXBwbHlEZXB0
aFNjb3BlOworICAgICAgICAgICAgICAgICAgICByZWNvcmRDYWxsT3JBcHBseURlcHRoPFRyZWVC
dWlsZGVyPih0aGlzLCAqbV92bSwgY2FsbE9yQXBwbHlEZXB0aFNjb3BlLCBiYXNlKTsKKworICAg
ICAgICAgICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRz
KGNvbnRleHQpOwogCi0gICAgICAgICAgICAgICAgZmFpbElmRmFsc2UoYXJndW1lbnRzLCAiQ2Fu
bm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VJc1N1
cGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNjb3BlUmVmIGZ1bmN0aW9uU2NvcGUgPSBjdXJy
ZW50RnVuY3Rpb25TY29wZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bmN0aW9uU2Nv
cGUtPnNldEhhc0RpcmVjdFN1cGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0
IHVubmVjZXNzYXJ5IHRvIGNoZWNrIG9mIHVzaW5nIHN1cGVyIGR1cmluZyByZXBhcnNpbmcgb25l
IG1vcmUgdGltZS4gQWxzbyBpdCBjYW4gbGVhZCB0byBzeW50YXggZXJyb3IKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgYXJyb3cgZnVuY3Rpb24gYmVjYXVzZSBkdXJpbmcg
cmVwYXJzaW5nIHdlIGRvbid0IGtub3cgd2hldGhlciB3ZSBjdXJyZW50bHkgcGFyc2UgdGhlIGFy
cm93IGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgb2YgdGhlIGNv
bnN0cnVjdG9yIG9yIG1ldGhvZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9sZXhl
ci0+aXNSZXBhcnNpbmdGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2NvcGVSZWYgY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZSA9IGNsb3Nlc3RQYXJlbnRPcmRp
bmFyeUZ1bmN0aW9uTm9uTGV4aWNhbFNjb3BlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29uc3RydWN0b3JLaW5kIGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kID0gIWZ1bmN0aW9uU2Nv
cGUtPmlzQXJyb3dGdW5jdGlvbigpICYmICFjbG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlLT5p
c0V2YWxDb250ZXh0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmdW5jdGlv
blNjb3BlLT5jb25zdHJ1Y3RvcktpbmQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9yS2luZCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShmdW5jdGlvbkNvbnN0
cnVjdG9yS2luZCA9PSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsICJzdXBlciBpcyBub3QgdmFsaWQg
aW4gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNG
YWlsSWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kICE9IENvbnN0cnVjdG9yS2luZDo6RXh0
ZW5kcywgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGJhc2VJc0FzeW5jS2V5d29yZCAmJiAoIWFyZ3VtZW50cyB8fCBtYXRjaChB
UlJPV0ZVTkNUSU9OKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZSgp
LT5yZXZlcnRUb1ByZXZpb3VzVXNlZFZhcmlhYmxlcyh1c2VkVmFyaWFibGVzU2l6ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3JjZUNsYXNzaWZ5RXhwcmVzc2lvbkVycm9yKEVycm9ySW5k
aWNhdGVzQXN5bmNBcnJvd0Z1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxE
dWVUb1VuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgZmFpbElmRmFsc2UoYXJndW1lbnRzLCAiQ2Fubm90IHBhcnNlIGNhbGwgYXJn
dW1lbnRzIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlSXNTdXBlcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgU2NvcGVSZWYgZnVuY3Rpb25TY29wZSA9IGN1cnJlbnRGdW5jdGlv
blNjb3BlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bmN0aW9uU2NvcGUtPnNl
dEhhc0RpcmVjdFN1cGVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCB1
bm5lY2Vzc2FyeSB0byBjaGVjayBvZiB1c2luZyBzdXBlciBkdXJpbmcgcmVwYXJzaW5nIG9uZSBt
b3JlIHRpbWUuIEFsc28gaXQgY2FuIGxlYWQgdG8gc3ludGF4IGVycm9yCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBhcnJvdyBmdW5jdGlvbiBiZWNhdXNlIGR1cmlu
ZyByZXBhcnNpbmcgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGN1cnJlbnRseSBwYXJzZSB0aGUg
YXJyb3cgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgb2Yg
dGhlIGNvbnN0cnVjdG9yIG9yIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1fbGV4ZXItPmlzUmVwYXJzaW5nRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTY29wZVJlZiBjbG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlID0gY2xv
c2VzdFBhcmVudE9yZGluYXJ5RnVuY3Rpb25Ob25MZXhpY2FsU2NvcGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3JLaW5kIGZ1bmN0aW9uQ29uc3RydWN0b3JL
aW5kID0gIWZ1bmN0aW9uU2NvcGUtPmlzQXJyb3dGdW5jdGlvbigpICYmICFjbG9zZXN0T3JkaW5h
cnlGdW5jdGlvblNjb3BlLT5pc0V2YWxDb250ZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID8gZnVuY3Rpb25TY29wZS0+Y29uc3RydWN0b3JLaW5kKCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29w
ZS0+Y29uc3RydWN0b3JLaW5kKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bWFudGljRmFpbElmVHJ1ZShmdW5jdGlvbkNvbnN0cnVjdG9yS2luZCA9PSBDb25zdHJ1Y3Rvcktp
bmQ6Ok5vbmUsICJzdXBlciBpcyBub3QgdmFsaWQgaW4gdGhpcyBjb250ZXh0Iik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShmdW5jdGlvbkNvbnN0
cnVjdG9yS2luZCAhPSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMsICJzdXBlciBpcyBub3QgdmFs
aWQgaW4gdGhpcyBjb250ZXh0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnRTY29wZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvblNjb3BlLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJDYWxsKCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29w
ZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
U2NvcGUtPnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNTdXBlckNhbGwoKTsKKworICAgICAgICAg
ICAgICAgICAgICBib29sIGlzT3B0aW9uYWxDYWxsID0gb3B0aW9uYWxDaGFpbkxvY2F0aW9uLmVu
ZE9mZnNldCA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZXhwcmVzc2lvbkVuZC5vZmZzZXQpOwor
ICAgICAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShz
dGFydExvY2F0aW9uLCBiYXNlLCBwcmV2aW91c0Jhc2VXYXNTdXBlciwgYXJndW1lbnRzLCBleHBy
ZXNzaW9uU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uRW5kLCBsYXN0
VG9rZW5FbmRQb3NpdGlvbigpLCBjYWxsT3JBcHBseURlcHRoU2NvcGUgPyBjYWxsT3JBcHBseURl
cHRoU2NvcGUtPmRpc3RhbmNlVG9Jbm5lcm1vc3RDaGlsZCgpIDogMCwgaXNPcHRpb25hbENhbGwp
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChpc09wdGlvbmFsQ2FsbCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbmFsQ2hhaW5CYXNlID0gYmFzZTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQubWFrZUZ1bmN0aW9uQ2FsbE5vZGUoc3Rh
cnRMb2NhdGlvbiwgYmFzZSwgcHJldmlvdXNCYXNlV2FzU3VwZXIsIGFyZ3VtZW50cywgZXhwcmVz
c2lvblN0YXJ0LAotICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5F
bmRQb3NpdGlvbigpLCBjYWxsT3JBcHBseURlcHRoU2NvcGUgPyBjYWxsT3JBcHBseURlcHRoU2Nv
cGUtPmRpc3RhbmNlVG9Jbm5lcm1vc3RDaGlsZCgpIDogMCk7CisgICAgICAgICAgICAgICAgbV9w
YXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3Vu
dCA9IG5vbkxIU0NvdW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBET1Q6IHsKLSAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Np
b25Db3VudCsrOwotICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxh
c3RUb2tlbkVuZFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihM
ZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3
b3Jkcyk7Ci0gICAgICAgICAgICBtYXRjaE9yRmFpbChJREVOVCwgIkV4cGVjdGVkIGEgcHJvcGVy
dHkgbmFtZSBhZnRlciAnLiciKTsKLSAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZURv
dEFjY2VzcyhzdGFydExvY2F0aW9uLCBiYXNlLCBtX3Rva2VuLm1fZGF0YS5pZGVudCwgZXhwcmVz
c2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1cGVyICYmIGN1cnJlbnRTY29wZSgpLT5pc0Fycm93RnVu
Y3Rpb24oKSkpCi0gICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uU2NvcGUoKS0+c2V0SW5u
ZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKLSAgICAgICAgICAgIG5leHQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQkFDS1FVT1RFOiB7
Ci0gICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3VwZXIsICJDYW5ub3QgdXNl
IHN1cGVyIGFzIHRhZyBmb3IgdGFnZ2VkIHRlbXBsYXRlcyIpOwotICAgICAgICAgICAgSlNUZXh0
UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7Ci0gICAgICAg
ICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OwotICAgICAg
ICAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OlRlbXBsYXRlTGl0ZXJhbCB0ZW1wbGF0ZUxpdGVy
YWwgPSBwYXJzZVRlbXBsYXRlTGl0ZXJhbChjb250ZXh0LCBMZXhlclR5cGU6OlJhd1N0cmluZ3NC
dWlsZE1vZGU6OkJ1aWxkUmF3U3RyaW5ncyk7Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZSh0ZW1w
bGF0ZUxpdGVyYWwsICJDYW5ub3QgcGFyc2UgdGVtcGxhdGUgbGl0ZXJhbCIpOwotICAgICAgICAg
ICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlVGFnZ2VkVGVtcGxhdGUoc3RhcnRMb2NhdGlvbiwgYmFz
ZSwgdGVtcGxhdGVMaXRlcmFsLCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxhc3RU
b2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3Vu
dCA9IG5vbkxIU0NvdW50OwotICAgICAgICAgICAgbV9zZWVuVGFnZ2VkVGVtcGxhdGUgPSB0cnVl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGdvdG8gZW5kTWVtYmVyRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIGNhc2UgRE9UOiB7
CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50
Kys7CisgICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RU
b2tlbkVuZFBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIo
TGV4ZXJGbGFnc0lnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkS2V5
d29yZHMpOworICAgICAgICAgICAgICAgIG1hdGNoT3JGYWlsKElERU5ULCAiRXhwZWN0ZWQgYSBw
cm9wZXJ0eSBuYW1lIGFmdGVyICIsIG9wdGlvbmFsQ2hhaW5CYXNlID8gIic/LiciIDogIicuJyIp
OworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZURvdEFjY2VzcyhzdGFydExv
Y2F0aW9uLCBiYXNlLCBtX3Rva2VuLm1fZGF0YS5pZGVudCwgZXhwcmVzc2lvblN0YXJ0LCBleHBy
ZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShiYXNlSXNTdXBlciAmJiBjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpKQor
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93
RnVuY3Rpb25Vc2VzU3VwZXJQcm9wZXJ0eSgpOworICAgICAgICAgICAgICAgIG5leHQoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQkFD
S1FVT1RFOiB7CisgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG9wdGlvbmFsQ2hh
aW5CYXNlLCAiQ2Fubm90IHVzZSB0YWdnZWQgdGVtcGxhdGVzIGluIGFuIG9wdGlvbmFsIGNoYWlu
Iik7CisgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGJhc2VJc1N1cGVyLCAiQ2Fu
bm90IHVzZSBzdXBlciBhcyB0YWcgZm9yIHRhZ2dlZCB0ZW1wbGF0ZXMiKTsKKyAgICAgICAgICAg
ICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24o
KTsKKyAgICAgICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxI
U0NvdW50OworICAgICAgICAgICAgICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpUZW1wbGF0ZUxp
dGVyYWwgdGVtcGxhdGVMaXRlcmFsID0gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoY29udGV4dCwgTGV4
ZXJUeXBlOjpSYXdTdHJpbmdzQnVpbGRNb2RlOjpCdWlsZFJhd1N0cmluZ3MpOworICAgICAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKHRlbXBsYXRlTGl0ZXJhbCwgIkNhbm5vdCBwYXJzZSB0ZW1wbGF0
ZSBsaXRlcmFsIik7CisgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlVGFnZ2Vk
VGVtcGxhdGUoc3RhcnRMb2NhdGlvbiwgYmFzZSwgdGVtcGxhdGVMaXRlcmFsLCBleHByZXNzaW9u
U3RhcnQsIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOworICAgICAgICAg
ICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKKyAgICAgICAg
ICAgICAgICBtX3NlZW5UYWdnZWRUZW1wbGF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGdvdG8gZW5kT2ZDaGFpbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByZXZpb3VzQmFz
ZVdhc1N1cGVyID0gYmFzZUlzU3VwZXI7CisgICAgICAgICAgICBiYXNlSXNTdXBlciA9IGZhbHNl
OworICAgICAgICAgICAgdHlwZSA9IG1fdG9rZW4ubV90eXBlOwogICAgICAgICB9Ci0gICAgICAg
IHByZXZpb3VzQmFzZVdhc1N1cGVyID0gYmFzZUlzU3VwZXI7Ci0gICAgICAgIGJhc2VJc1N1cGVy
ID0gZmFsc2U7Ci0gICAgfQotZW5kTWVtYmVyRXhwcmVzc2lvbjoKK2VuZE9mQ2hhaW46CisgICAg
ICAgIGlmIChvcHRpb25hbENoYWluQmFzZSkKKyAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNy
ZWF0ZU9wdGlvbmFsQ2hhaW4ob3B0aW9uYWxDaGFpbkxvY2F0aW9uLCBvcHRpb25hbENoYWluQmFz
ZSwgYmFzZSwgIW1hdGNoKFFVRVNUSU9ORE9UKSk7CisgICAgfSB3aGlsZSAobWF0Y2goUVVFU1RJ
T05ET1QpKTsKKwogICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNlSXNTdXBlciwgInN1cGVyIGlz
IG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKICAgICB3aGlsZSAobmV3Q291bnQtLSkKICAg
ICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgZXhwcmVz
c2lvblN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCmluZGV4IDE1Y2E1ZWFmMjhlNzU5MmY0M2YzZGNlNDFl
OGU0MWU2MWE5ZTgxMzYuLjcyMDY0YjkyODQ4MTY2ZjZkZTJiMjNmOGEzZjU4Yzk4MWI3Njc5ZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaApAQCAtMTM2
LDYgKzEzNiw3IEBAIGVudW0gSlNUb2tlblR5cGUgewogICAgIE9SRVFVQUwsCiAgICAgRE9URE9U
RE9ULAogICAgIEFSUk9XRlVOQ1RJT04sCisgICAgUVVFU1RJT05ET1QsCiAgICAgTGFzdFVudGFn
Z2VkVG9rZW4sCiAKICAgICAvLyBCZWdpbiB0YWdnZWQgdG9rZW5zCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCmluZGV4IDQxOTk1OGJlZGI0MjgxMWIxNjI4
NDAxY2Q0YTQyOThhNWE1Y2YzNzYuLjZjZTczZjdmY2MzMzA5MTdkNjhmOWQxYmRkMWJlZDliYmY4
NTBjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hl
Y2tlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5o
CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgUmVzb2x2ZUV2YWxFeHByLCBSZXNv
bHZlRXhwciwgSW50ZWdlckV4cHIsIERvdWJsZUV4cHIsIFN0cmluZ0V4cHIsIEJpZ0ludEV4cHIs
CiAgICAgICAgIFRoaXNFeHByLCBOdWxsRXhwciwgQm9vbEV4cHIsIFJlZ0V4cEV4cHIsIE9iamVj
dExpdGVyYWxFeHByLAogICAgICAgICBGdW5jdGlvbkV4cHIsIENsYXNzRXhwciwgU3VwZXJFeHBy
LCBJbXBvcnRFeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwgQ2FsbEV4cHIsCi0gICAgICAgIE5l
d0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4cHIsCisgICAgICAg
IE5ld0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4cHIsIE9wdGlv
bmFsQ2hhaW4sCiAgICAgICAgIENvbmRpdGlvbmFsRXhwciwgQXNzaWdubWVudEV4cHIsIFR5cGVv
ZkV4cHIsCiAgICAgICAgIERlbGV0ZUV4cHIsIEFycmF5TGl0ZXJhbEV4cHIsIEJpbmRpbmdEZXN0
cnVjdHVyaW5nLCBSZXN0UGFyYW1ldGVyLAogICAgICAgICBBcnJheURlc3RydWN0dXJpbmcsIE9i
amVjdERlc3RydWN0dXJpbmcsIFNvdXJjZUVsZW1lbnRzUmVzdWx0LApAQCAtMTQ3LDcgKzE0Nyw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgRG9udEJ1aWxkU3RyaW5ncyA9
IExleGVyRmxhZ3NEb250QnVpbGRTdHJpbmdzOwogCiAgICAgaW50IGNyZWF0ZVNvdXJjZUVsZW1l
bnRzKCkgeyByZXR1cm4gU291cmNlRWxlbWVudHNSZXN1bHQ7IH0KLSAgICBFeHByZXNzaW9uVHlw
ZSBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGJvb2ws
IGludCwgaW50LCBpbnQsIGludCwgc2l6ZV90KSB7IHJldHVybiBDYWxsRXhwcjsgfQorICAgIEV4
cHJlc3Npb25UeXBlIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25UeXBlLCBib29sLCBpbnQsIGludCwgaW50LCBpbnQsIHNpemVfdCwgYm9vbCkg
eyByZXR1cm4gQ2FsbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVDb21tYUV4cHIo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUgZXhwcikgeyByZXR1cm4gZXhw
cjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGFwcGVuZFRvQ29tbWFFeHByKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlJiBoZWFkLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lv
blR5cGUgbmV4dCkgeyBoZWFkID0gbmV4dDsgcmV0dXJuIG5leHQ7IH0KICAgICBFeHByZXNzaW9u
VHlwZSBtYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlw
ZSwgT3BlcmF0b3IsIEV4cHJlc3Npb25UeXBlLCBib29sLCBib29sLCBpbnQsIGludCwgaW50KSB7
IHJldHVybiBBc3NpZ25tZW50RXhwcjsgfQpAQCAtMTg0LDYgKzE4NCw3IEBAIHB1YmxpYzoKICAg
ICBFeHByZXNzaW9uVHlwZSBjcmVhdGVSZWdFeHAoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29u
c3QgSWRlbnRpZmllciYgcGF0dGVybiwgY29uc3QgSWRlbnRpZmllciYgZmxhZ3MsIGludCkgeyBy
ZXR1cm4gWWFycjo6aGFzRXJyb3IoWWFycjo6Y2hlY2tTeW50YXgocGF0dGVybi5zdHJpbmcoKSwg
ZmxhZ3Muc3RyaW5nKCkpKSA/IDAgOiBSZWdFeHBFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUg
Y3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgaW50
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBOZXdFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUg
Y3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgaW50
LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVPcHRp
b25hbENoYWluKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNz
aW9uVHlwZSwgYm9vbCkgeyByZXR1cm4gT3B0aW9uYWxDaGFpbjsgfQogICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBDb25kaXRp
b25hbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uVHlwZSwgaW50
LCBpbnQsIGludCwgQXNzaWdubWVudENvbnRleHQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9
CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlRW1wdHlWYXJFeHByZXNzaW9uKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImKSB7IHJldHVybiBBc3NpZ25tZW50RXhwcjsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVs
cGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmNwcAppbmRleCAxNTZjMTgwZTE4MzQ3ZjQ3YzkzOTA0NTllNWQyMTc1MTFiOTgzMWZmLi45ZTc1
ODkyZTUwNzY1NzE1MmJjYjM3M2I2ZjBiNTg4MjZjMTU0YzI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcApAQCAtMTc2LDYgKzE3
NiwxMCBAQCBzdGF0aWMgU3RyaW5nIGZ1bmN0aW9uQ2FsbEJhc2UoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VUZXh0KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCisgICAgLy8gRG9uJ3Qg
ZGlzcGxheSB0aGUgPy4gb2YgYW4gb3B0aW9uYWwgY2FsbC4KKyAgICBpZiAoaWR4ID4gMSAmJiBz
b3VyY2VUZXh0W2lkeF0gPT0gJy4nICYmIHNvdXJjZVRleHRbaWR4IC0gMV0gPT0gJz8nKQorICAg
ICAgICBpZHggLT0gMjsKKwogICAgIHJldHVybiBzb3VyY2VUZXh0LmxlZnQoaWR4ICsgMSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCAwZDU4MmVlYWMz
M2VjYTBlNGFkOGU0ODk2NTliNDMwMTlkNDRlN2FjLi43YmIxM2U0ZWU5ODBjNThmNzBkODExNDhi
ODE4NjkwNjM3OTRlZTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CkBAIC00OTYsNyArNDk2LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJl
YW1pbmdBcGkgPSBmYWxzZTsKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5UmVmZXJlbmNlcywg
ZmFsc2UsIE5vcm1hbCwgIkFsbG93IHR5cGVzIGZyb20gdGhlIHdhc20gcmVmZXJlbmNlcyBzcGVj
LiIpIFwKICAgICB2KGJvb2wsIHVzZVdlYWtSZWZzLCBmYWxzZSwgTm9ybWFsLCAiRXhwb3NlIHRo
ZSBXZWFrUmVmIGNvbnN0cnVjdG9yLiIpIFwKICAgICB2KGJvb2wsIHVzZUJpZ0ludCwgZmFsc2Us
IE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZW5hYmxlIEJpZ0ludCBzdXBwb3J0LiIpIFwKLSAg
ICB2KGJvb2wsIHVzZU51bGxpc2hDb2FsZXNjaW5nLCBmYWxzZSwgTm9ybWFsLCAiRW5hYmxlIHN1
cHBvcnQgZm9yIHRoZSA/PyBvcGVyYXRvci4iKSBcCisgICAgdihib29sLCB1c2VOdWxsaXNoQXdh
cmVPcGVyYXRvcnMsIGZhbHNlLCBOb3JtYWwsICJFbmFibGUgc3VwcG9ydCBmb3IgPy4gYW5kID8/
IG9wZXJhdG9ycy4iKSBcCiAgICAgdihib29sLCB1c2VBcnJheUFsbG9jYXRpb25Qcm9maWxpbmcs
IHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdXNlIG91ciBub3JtYWwgYXJyYXkgYWxs
b2NhdGlvbiBwcm9maWxpbmcuIElmIGZhbHNlLCB0aGUgYWxsb2NhdGlvbiBwcm9maWxlIHdpbGwg
YWx3YXlzIGNsYWltIHRvIGJlIHVuZGVjaWRlZC4iKSBcCiAgICAgdihib29sLCBmb3JjZVBvbHlQ
cm90bywgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIGNyZWF0ZV90aGlzIHdpbGwgYWx3YXlzIGNy
ZWF0ZSBhbiBvYmplY3Qgd2l0aCBhIHBvbHkgcHJvdG8gc3RydWN0dXJlLiIpIFwKICAgICB2KGJv
b2wsIGZvcmNlTWluaVZNTW9kZSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIGl0IHdpbGwgZm9y
Y2UgbWluaSBWTSBtb2RlIG9uLiIpIFwKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA2MmZmM2VlYjJkNzBjMDk4MDExNGRjMTg3YzcwZjk4MDNmMWNl
OTA4Li4wNmJiZDBhODdmMmRlM2E1YWE3MDc2MjBlZTA2Njg5OWEwM2I3YWQ5IDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTktMDgtMTQgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgorCisg
ICAgICAgIFtFU05leHRdIEltcGxlbWVudCBvcHRpb25hbCBjaGFpbmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMTk5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3Ry
ZXNzLXRlc3RzOgorCiAyMDE5LTA4LTEyICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3Jp
QHNvbnkuY29tPgogCiAgICAgICAgIFtXVEZdIFRocmVhZDo6cmVtb3ZlRnJvbVRocmVhZEdyb3Vw
IGxlYWtzIHdlYWsgcG9pbnRlcnMuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwppbmRleCA4
M2RjMDYyYWIyODIxMTYxYTkzMWMyYWJlNDNkZjVmNjY5YTg4ZGE5Li4wOTg3MjM1MzYwZDI0NDRk
MTdiYmU5YzNhOGJlYWUxYmM5MWU5OTRlIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1q
c2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMK
QEAgLTY5OSw4ICs2OTksOCBAQCBkZWYgcnVuQmlnSW50RW5hYmxlZCgqb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKQogICAgIHJ1bigiYmlnLWludC1lbmFibGVkIiwgIi0tdXNlQmlnSW50PXRy
dWUiICwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQK
IAotZGVmIHJ1bk51bGxpc2hDb2FsZXNjaW5nRW5hYmxlZCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKQotICAgIHJ1bigibnVsbGlzaC1jb2FsZXNjaW5nLWVuYWJsZWQiLCAiLS11c2VOdWxs
aXNoQ29hbGVzY2luZz10cnVlIiAsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQorZGVmIHJ1bk51bGxpc2hBd2FyZU9wZXJhdG9yc0VuYWJsZWQoKm9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykKKyAgICBydW4oIm51bGxpc2gtYXdhcmUtb3BlcmF0b3JzLWVu
YWJsZWQiLCAiLS11c2VOdWxsaXNoQXdhcmVPcGVyYXRvcnM9dHJ1ZSIgLCAqKEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklU
KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5n
ZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQwYTQ4MzUyNzJhYmE5MjMxYTA0YTY5MWZm
ZWU3MTVmZjFiNjZhNWMuLmNhMzRjNDEwNzYwOGJlNTc1ZjNjM2IyNDE5MjgxYmVmZjc5M2ZkMTYg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTktMDgtMTQgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5n
QHNvbnkuY29tPgorCisgICAgICAgIFtFU05leHRdIEltcGxlbWVudCBvcHRpb25hbCBjaGFpbmlu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMTk5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJl
c3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzOgorICAgICAgICAqIHN0cmVzcy9vcHRpb25hbC1jaGFp
bmluZy5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL3RhaWwtY2FsbC1yZWNvZ25pemUuanM6
CisKIDIwMTktMDgtMDggIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgog
CiAgICAgICAgIFtKU0NdIEFkZCAianVtcCBpZiAobm90KSB1bmRlZmluZWQgb3IgbnVsbCIgYnl0
ZWNvZGUgb3BzCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9udWxsaXNoLWNvYWxlc2Npbmcu
anMgYi9KU1Rlc3RzL3N0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanMKaW5kZXggZjNkZGNhNzA1
YmQzMTQ1MmNhNmE0NTU1MTM5NjBhOWQxMWFlMzE5ZC4uOGNiYWQ0NDQzNWYyZmNkMDUyODY0MTM4
ZWUwYjdjNWMzZjhiMDI4MSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2Fs
ZXNjaW5nLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qcwpAQCAt
MSw0ICsxLDQgQEAKLS8vQCBydW5OdWxsaXNoQ29hbGVzY2luZ0VuYWJsZWQKKy8vQCBydW5OdWxs
aXNoQXdhcmVPcGVyYXRvcnNFbmFibGVkCiAKIGZ1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhw
ZWN0ZWQpIHsKICAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvc3RyZXNzL29wdGlvbmFsLWNoYWluaW5nLmpzIGIvSlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwt
Y2hhaW5pbmcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzk1NmY2ZGQ3ZTY2MTZmMDRmYTc5MWE5ZTI5MmNhOTU2
OTI4Y2E1NAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL29wdGlvbmFsLWNoYWlu
aW5nLmpzCkBAIC0wLDAgKzEsMTYwIEBACisvL0AgcnVuTnVsbGlzaEF3YXJlT3BlcmF0b3JzRW5h
YmxlZAorCitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFj
dHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtl
eHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH1gKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3dT
eW50YXhFcnJvcihzY3JpcHQpIHsKKyAgICBsZXQgZXJyb3I7CisgICAgdHJ5IHsKKyAgICAgICAg
ZXZhbChzY3JpcHQpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAg
IH0KKworICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFN5bnRheEVycm9yIScpOworfQorCitmdW5jdGlvbiBz
aG91bGRUaHJvd1R5cGVFcnJvcihmdW5jLCBtZXNzYWdlUHJlZml4KSB7CisgICAgbGV0IGVycm9y
OworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IGVycm9yID0gZTsKKyAgICB9CisKKyAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJv
cikpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgVHlwZUVycm9yIScpOworCisg
ICAgaWYgKCFlcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgobWVzc2FnZVByZWZpeCkpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcignVHlwZUVycm9yIGhhcyB3cm9uZyBtZXNzYWdlIScpOworfQorCitj
b25zdCBtYXNxdWVyYWRlciA9IG1ha2VNYXNxdWVyYWRlcigpOworbWFzcXVlcmFkZXIuZm9vID0g
MzsKKworZnVuY3Rpb24gdGVzdEJhc2ljQ2FzZXMoKSB7CisgICAgc2hvdWxkQmUodW5kZWZpbmVk
Py52YWx1ZU9mKCksIHVuZGVmaW5lZCk7CisgICAgc2hvdWxkQmUobnVsbD8udmFsdWVPZigpLCB1
bmRlZmluZWQpOworICAgIHNob3VsZEJlKHRydWU/LnZhbHVlT2YoKSwgdHJ1ZSk7CisgICAgc2hv
dWxkQmUoZmFsc2U/LnZhbHVlT2YoKSwgZmFsc2UpOworICAgIHNob3VsZEJlKDA/LnZhbHVlT2Yo
KSwgMCk7CisgICAgc2hvdWxkQmUoMT8udmFsdWVPZigpLCAxKTsKKyAgICBzaG91bGRCZSgnJz8u
dmFsdWVPZigpLCAnJyk7CisgICAgc2hvdWxkQmUoJ2hpJz8udmFsdWVPZigpLCAnaGknKTsKKyAg
ICBzaG91bGRCZSgoe30pPy5jb25zdHJ1Y3RvciwgT2JqZWN0KTsKKyAgICBzaG91bGRCZSgoeyB4
OiAnaGknIH0pPy54LCAnaGknKTsKKyAgICBzaG91bGRCZShbXT8ubGVuZ3RoLCAwKTsKKyAgICBz
aG91bGRCZShbJ2hpJ10/Lmxlbmd0aCwgMSk7CisgICAgc2hvdWxkQmUobWFzcXVlcmFkZXI/LmZv
bywgMyk7CisKKyAgICBzaG91bGRCZSh1bmRlZmluZWQ/LlsndmFsdWVPZiddKCksIHVuZGVmaW5l
ZCk7CisgICAgc2hvdWxkQmUobnVsbD8uWyd2YWx1ZU9mJ10oKSwgdW5kZWZpbmVkKTsKKyAgICBz
aG91bGRCZSh0cnVlPy5bJ3ZhbHVlT2YnXSgpLCB0cnVlKTsKKyAgICBzaG91bGRCZShmYWxzZT8u
Wyd2YWx1ZU9mJ10oKSwgZmFsc2UpOworICAgIHNob3VsZEJlKDA/LlsndmFsdWVPZiddKCksIDAp
OworICAgIHNob3VsZEJlKDE/LlsndmFsdWVPZiddKCksIDEpOworICAgIHNob3VsZEJlKCcnPy5b
J3ZhbHVlT2YnXSgpLCAnJyk7CisgICAgc2hvdWxkQmUoJ2hpJz8uWyd2YWx1ZU9mJ10oKSwgJ2hp
Jyk7CisgICAgc2hvdWxkQmUoKHt9KT8uWydjb25zdHJ1Y3RvciddLCBPYmplY3QpOworICAgIHNo
b3VsZEJlKCh7IHg6ICdoaScgfSk/LlsneCddLCAnaGknKTsKKyAgICBzaG91bGRCZShbXT8uWyds
ZW5ndGgnXSwgMCk7CisgICAgc2hvdWxkQmUoWydoaSddPy5bMF0sICdoaScpOworICAgIHNob3Vs
ZEJlKG1hc3F1ZXJhZGVyPy5bJ2ZvbyddLCAzKTsKKworICAgIHNob3VsZEJlKHVuZGVmaW5lZD8u
KCksIHVuZGVmaW5lZCk7CisgICAgc2hvdWxkQmUobnVsbD8uKCksIHVuZGVmaW5lZCk7CisgICAg
c2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gdHJ1ZT8uKCksICd0cnVlIGlzIG5vdCBhIGZ1bmN0
aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gZmFsc2U/LigpLCAnZmFsc2Ug
aXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAwPy4o
KSwgJzAgaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9
PiAxPy4oKSwgJzEgaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJv
cigoKSA9PiAnJz8uKCksICdcJ1wnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CisgICAgc2hvdWxkVGhy
b3dUeXBlRXJyb3IoKCkgPT4gJ2hpJz8uKCksICdcJ2hpXCcgaXMgbm90IGEgZnVuY3Rpb24nKTsK
KyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoe30pPy4oKSwgJyh7fSkgaXMgbm90IGEg
ZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoeyB4OiAnaGknIH0p
Py4oKSwgJyh7IHg6IFwnaGlcJyB9KSBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3VsZFRo
cm93VHlwZUVycm9yKCgpID0+IFtdPy4oKSwgJ1tdIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CisgICAg
c2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gWydoaSddPy4oKSwgJ1tcJ2hpXCddIGlzIG5vdCBh
IGZ1bmN0aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gbWFzcXVlcmFkZXI/
LigpLCAnbWFzcXVlcmFkZXIgaXMgbm90IGEgZnVuY3Rpb24nKTsKK30KK25vSW5saW5lKHRlc3RC
YXNpY0Nhc2VzKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7IGkrKykKKyAgICB0ZXN0QmFz
aWNDYXNlcygpOworCitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoe30pPy5pKCksICcoe30p
Py5pIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CitzaG91bGRCZSgoe30pLmk/LigpLCB1bmRlZmluZWQp
Oworc2hvdWxkQmUoKHt9KT8uaT8uKCksIHVuZGVmaW5lZCk7CitzaG91bGRUaHJvd1R5cGVFcnJv
cigoKSA9PiAoe30pPy5bJ2knXSgpLCAnKHt9KT8uW1wnaVwnXSBpcyBub3QgYSBmdW5jdGlvbicp
Oworc2hvdWxkQmUoKHt9KVsnaSddPy4oKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKCh7fSk/Llsn
aSddPy4oKSwgdW5kZWZpbmVkKTsKKworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHt9KT8u
YVsnYiddLCAndW5kZWZpbmVkIGlzIG5vdCBhbiBvYmplY3QnKTsKK3Nob3VsZEJlKCh7fSk/LmE/
LlsnYiddLCB1bmRlZmluZWQpOworc2hvdWxkQmUobnVsbD8uYVsnYiddKCkuYywgdW5kZWZpbmVk
KTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICh7fSk/LlsnYSddLmIsICd1bmRlZmluZWQg
aXMgbm90IGFuIG9iamVjdCcpOworc2hvdWxkQmUoKHt9KT8uWydhJ10/LmIsIHVuZGVmaW5lZCk7
CitzaG91bGRCZShudWxsPy5bJ2EnXS5iKClbJ2MnXSwgdW5kZWZpbmVkKTsKK3Nob3VsZFRocm93
VHlwZUVycm9yKCgpID0+ICgoKSA9PiB7fSk/LigpKCksICcoKCkgPT4ge30pPy4oKSBpcyBub3Qg
YSBmdW5jdGlvbicpOworc2hvdWxkQmUoKCgpID0+IHt9KT8uKCk/LigpLCB1bmRlZmluZWQpOwor
c2hvdWxkQmUobnVsbD8uKCkoKS5hWydiJ10sIHVuZGVmaW5lZCk7CisKK2NvbnN0IG8wID0geyBh
OiB7IGIoKSB7IHJldHVybiB0aGlzLl9iLmJpbmQodGhpcyk7IH0sIF9iKCkgeyByZXR1cm4gdGhp
cy5fX2I7IH0sIF9fYjogeyBjOiA0MiB9IH0gfTsKK3Nob3VsZEJlKG8wPy5hPy5bJ2InXT8uKCk/
LigpPy5jLCA0Mik7CitzaG91bGRCZShvMD8uaT8uWydqJ10/LigpPy4oKT8uaywgdW5kZWZpbmVk
KTsKKworc2hvdWxkQmUoKHsgdW5kZWZpbmVkOiAzIH0pPy5bbnVsbD8uYV0sIDMpOworc2hvdWxk
QmUoKCgpID0+IDMpPy4obnVsbD8uYSksIDMpOworCitjb25zdCBvMSA9IHsgY291bnQ6IDAsIGdl
dCB4KCkgeyB0aGlzLmNvdW50Kys7IHJldHVybiAoKSA9PiB7fTsgfSB9OworbzEueD8ueTsKK3No
b3VsZEJlKG8xLmNvdW50LCAxKTsKK28xLng/LlsneSddOworc2hvdWxkQmUobzEuY291bnQsIDIp
OworbzEueD8uKCk7CitzaG91bGRCZShvMS5jb3VudCwgMyk7CitudWxsPy4obzEueCk7CitzaG91
bGRCZShvMS5jb3VudCwgMyk7CisKK3Nob3VsZEJlKGRlbGV0ZSB1bmRlZmluZWQ/LmZvbywgdHJ1
ZSk7CitzaG91bGRCZShkZWxldGUgbnVsbD8uZm9vLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSB1
bmRlZmluZWQ/LlsnZm9vJ10sIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIG51bGw/LlsnZm9vJ10s
IHRydWUpOworc2hvdWxkQmUoZGVsZXRlIHVuZGVmaW5lZD8uKCksIHRydWUpOworc2hvdWxkQmUo
ZGVsZXRlIG51bGw/LigpLCB0cnVlKTsKKworY29uc3QgbzIgPSB7IHg6IDAsIHk6IDAsIHooKSB7
fSB9Oworc2hvdWxkQmUoZGVsZXRlIG8yPy54LCB0cnVlKTsKK3Nob3VsZEJlKG8yLngsIHVuZGVm
aW5lZCk7CitzaG91bGRCZShkZWxldGUgbzI/LngsIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIG8y
Py5bJ3knXSwgdHJ1ZSk7CitzaG91bGRCZShvMi55LCB1bmRlZmluZWQpOworc2hvdWxkQmUoZGVs
ZXRlIG8yPy5bJ3knXSwgdHJ1ZSk7CitzaG91bGRCZShkZWxldGUgbzIuej8uKCksIHRydWUpOwor
CitmdW5jdGlvbiBncmVldChuYW1lKSB7IHJldHVybiBgaGV5LCAke25hbWV9JHt0aGlzLnN1ZmZp
eCA/PyAnLid9YDsgfQorc2hvdWxkQmUoZXZhbD8uKCdncmVldCgid29ybGQiKScpLCAnaGV5LCB3
b3JsZC4nKTsKK3Nob3VsZEJlKGdyZWV0Py5jYWxsKHsgc3VmZml4OiAnIScgfSwgJ3dvcmxkJyks
ICdoZXksIHdvcmxkIScpOworc2hvdWxkQmUoZ3JlZXQuY2FsbD8uKHsgc3VmZml4OiAnIScgfSwg
J3dvcmxkJyksICdoZXksIHdvcmxkIScpOworc2hvdWxkQmUobnVsbD8uY2FsbCh7IHN1ZmZpeDog
JyEnIH0sICd3b3JsZCcpLCB1bmRlZmluZWQpOworc2hvdWxkQmUoKHt9KS5jYWxsPy4oeyBzdWZm
aXg6ICchJyB9LCAnd29ybGQnKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKGdyZWV0Py5hcHBseSh7
IHN1ZmZpeDogJz8nIH0sIFsnd29ybGQnXSksICdoZXksIHdvcmxkPycpOworc2hvdWxkQmUoZ3Jl
ZXQuYXBwbHk/Lih7IHN1ZmZpeDogJz8nIH0sIFsnd29ybGQnXSksICdoZXksIHdvcmxkPycpOwor
c2hvdWxkQmUobnVsbD8uYXBwbHkoeyBzdWZmaXg6ICc/JyB9LCBbJ3dvcmxkJ10pLCB1bmRlZmlu
ZWQpOworc2hvdWxkQmUoKHt9KS5hcHBseT8uKHsgc3VmZml4OiAnPycgfSwgWyd3b3JsZCddKSwg
dW5kZWZpbmVkKTsKKworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBjbGFzcyBE
IGV4dGVuZHMgQyB7IGZvbygpIHsgcmV0dXJuIHN1cGVyPy5iYXI7IH0gfScpOworc2hvdWxkVGhy
b3dTeW50YXhFcnJvcignY2xhc3MgQyB7fSBjbGFzcyBEIGV4dGVuZHMgQyB7IGZvbygpIHsgcmV0
dXJuIHN1cGVyPy5bImJhciJdOyB9IH0nKTsKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NsYXNz
IEMge30gY2xhc3MgRCBleHRlbmRzIEMgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXI/LigpOyB9IH0n
KTsKKworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY29uc3QgbyA9IHsgQzogY2xhc3Mge30gfTsg
bmV3IG8/LkMoKTsnKQorc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY29uc3QgbyA9IHsgQzogY2xh
c3Mge30gfTsgbmV3IG8/LlsiQyJdKCk7JykKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NsYXNz
IEMge30gbmV3IEM/LigpOycpCitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdmdW5jdGlvbiBmb28o
KSB7IG5ldz8udGFyZ2V0OyB9Jyk7CisKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2Z1bmN0aW9u
IHRhZygpIHt9IHRhZz8uYGA7Jyk7CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdjb25zdCBvID0g
eyB0YWcoKSB7fSB9OyBvPy50YWdgYDsnKTsKKworLy8gTk9UIGFuIG9wdGlvbmFsIGNoYWluCitz
aG91bGRCZShmYWxzZT8uNDo1LCA1KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3RhaWwt
Y2FsbC1yZWNvZ25pemUuanMgYi9KU1Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtcmVjb2duaXplLmpz
CmluZGV4IDE2ODFlNDAyMDFlZDNjZTdlNzkxNmM5Y2FiOGU1MmIxNmNhMTdhYzAuLjljYzBlMzA2
ZmFjZDc0NDc1MWE3OTYyYTZlNjU3MDI3M2RkNWUzYzEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3Ry
ZXNzL3RhaWwtY2FsbC1yZWNvZ25pemUuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvdGFpbC1jYWxs
LXJlY29nbml6ZS5qcwpAQCAtMSwzICsxLDUgQEAKKy8vQCBydW5OdWxsaXNoQXdhcmVPcGVyYXRv
cnNFbmFibGVkCisKIGZ1bmN0aW9uIGNhbGxlck11c3RCZVJ1bigpIHsKICAgICBpZiAoIU9iamVj
dC5pcyhjYWxsZXJNdXN0QmVSdW4uY2FsbGVyLCBydW5UZXN0cykpCiAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiV3JvbmcgY2FsbGVyLCBleHBlY3RlZCBydW4gYnV0IGdvdCAiLCBjYWxsZXJNdXN0
QmVSdW4uY2FsbGVyKTsKQEAgLTE1MCw2ICsxNTIsMTEgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7
CiAgICAgICAgIHJldHVybiBmYWxzZSB8fCBjYWxsZXJNdXN0QmVSdW4oKTsKICAgICB9KSgpOwog
CisgICAgKGZ1bmN0aW9uIHRhaWxDYWxsQ29hbGVzY2UoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0
IjsKKyAgICAgICAgcmV0dXJuIGZhbHNlID8/IGNhbGxlck11c3RCZVJ1bigpOworICAgIH0pKCk7
CisKICAgICAoZnVuY3Rpb24gbWVtYmVyVGFpbENhbGwoKSB7CiAgICAgICAgICJ1c2Ugc3RyaWN0
IjsKICAgICAgICAgcmV0dXJuIHsgZjogY2FsbGVyTXVzdEJlUnVuIH0uZigpOwpAQCAtMTYwLDYg
KzE2NywxMSBAQCBmdW5jdGlvbiBydW5UZXN0cygpIHsKICAgICAgICAgcmV0dXJuIGNhbGxlck11
c3RCZVJ1bi5iaW5kKCkoKTsKICAgICB9KSgpOwogCisgICAgKGZ1bmN0aW9uIG9wdGlvbmFsVGFp
bENhbGwoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgcmV0dXJuIGNhbGxlck11
c3RCZVJ1bj8uKCk7CisgICAgfSkoKTsKKwogICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZSB0ZXN0
cwogCiAgICAgKGZ1bmN0aW9uIGFwcGx5VGFpbENhbGwoKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376278</attachid>
            <date>2019-08-14 10:37:25 -0700</date>
            <delta_ts>2019-08-17 22:54:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200199-20190814103724.patch</filename>
            <type>text/plain</type>
            <size>65252</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
N2I5NTJiOWUxODQ2OWQ0YzlhMDNlNDhiNDA1NmVkODU2MWI1M2NkLi5lNTk4MDJiZWVhY2RlMGMx
NjliMWJkMzY5NmNhMGUyYTFhNWRkYmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OSBAQAorMjAxOS0wOC0xNCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNoYWluaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxOTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
dGhlIG9wdGlvbmFsIGNoYWluaW5nIHByb3Bvc2FsLCB3aGljaCBoYXMgbm93IHJlYWNoZWQgU3Rh
Z2UgMyBhdCBUQzM5LgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhID8uIG9wZXJhdG9yIHdo
aWNoOgorICAgICAgICAgLSBndWFyZHMgbWVtYmVyIGFjY2VzcyB3aGVuIHRoZSBMSFMgaXMgbnVs
bGlzaCwgaS5lLiBgbnVsbD8uZm9vYCBhbmQgYG51bGw/LlsnZm9vJ11gIGFyZSB1bmRlZmluZWQK
KyAgICAgICAgIC0gZ3VhcmRzIGZ1bmN0aW9uIGNhbGxzIHdoZW4gdGhlIExIUyBpcyBudWxsaXNo
LCBpLmUuIGBudWxsPy4oKWAgaXMgdW5kZWZpbmVkCisgICAgICAgICAtIHNob3J0LWNpcmN1aXRz
IG92ZXIgYSB3aG9sZSBhY2Nlc3MvY2FsbCBjaGFpbiwgaS5lLiBgbnVsbD8uYVsnYiddKGMrKylg
IGlzIHVuZGVmaW5lZCBhbmQgZG9lcyBub3QgaW5jcmVtZW50IGMKKworICAgICAgICBUaGlzIGZl
YXR1cmUgY2FuIGJlIG5haXZlbHkgdmlld2VkIGFzIGEgdGVybmFyeSBpbiBkaXNndWlzZSwgaS5l
LiBgYT8uYmAgaXMgbGlrZSBgYSA9PSBudWxsID8gdW5kZWZpbmVkIDogYS5iYC4KKyAgICAgICAg
SG93ZXZlciwgc2luY2Ugd2UgbXVzdCBiZSBzdXJlIG5vdCB0byBkb3VibGUtZXZhbHVhdGUgdGhl
IExIUywgaXQncyBhY3R1YWxseSByYXRoZXIgYWtpbiB0byBhIHRyeSBibG9jayAtLQorICAgICAg
ICBuYW1lbHksIHdlIGhhdmUgdGhlIGJ5dGVjb2RlIGdlbmVyYXRvciBrZWVwIGFuIGVhcmx5LW91
dCBsYWJlbCBmb3IgdXNlIHRocm91Z2hvdXQgdGhlIGFjY2VzcyBhbmQgY2FsbCBjaGFpbi4KKwor
ICAgICAgICAoQWxzbyBub3RlIHRoYXQgZG9jdW1lbnQuYWxsIGJlaGF2ZXMgYXMgYW4gb2JqZWN0
LCBzbyAibnVsbGlzaCIgbWVhbnMgKnN0cmljdGx5KiBlcXVhbCB0byBudWxsIG9yIHVuZGVmaW5l
ZC4pCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaE9wdGlvbmFsQ2hhaW5UYXJnZXQpOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGlvbmFsQ2hhaW5U
YXJnZXQpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRPcHRp
b25hbENoZWNrKTogQWRkZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgIEltcGxlbWVudCBlYXJseS1vdXQgbG9naWMuCisKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QnJhY2tldEFjY2Vz
c29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RG90QWNjZXNzb3JOb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5
dGVjb2RlKTogUmVmYWN0b3Igc28gd2UgY2FuIGVtaXRPcHRpb25hbENoZWNrIGluIGEgc2luZ2xl
IGxvY2F0aW9uLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNv
ZGUpOiBSZWZhY3RvciBzbyB3ZSBjYW4gZW1pdE9wdGlvbmFsQ2hlY2sgaW4gYSBzaW5nbGUgbG9j
YXRpb24uCisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6RGVsZXRlRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29hbGVzY2VO
b2RlOjplbWl0Qnl0ZWNvZGUpOiBDbGVhbiB1cC4KKyAgICAgICAgKEpTQzo6T3B0aW9uYWxDaGFp
bk5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnQgPy4gbm9kZSBh
bmQgZW1pdCBjaGVja3Mgd2hlcmUgbmVlZGVkLgorCisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtOgorICAgICAgICBIYXZlIE9wSXNVbmRlZmluZWRPck51bGwgc3VwcG9ydCBjb25zdGFu
dCByZWdpc3RlcnMuCisKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVPcHRpb25hbENoYWluKTogQWRkZWQuCisgICAgICAgIChK
U0M6OkFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6Cisg
ICAgICAgIChKU0M6OkxleGVyPFQ+OjpsZXhXaXRob3V0Q2xlYXJpbmdMaW5lVGVybWluYXRvcik6
CisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6T3B0
aW9uYWxDaGFpbk5vZGU6Ok9wdGlvbmFsQ2hhaW5Ob2RlKTogQWRkZWQuCisgICAgICAgICogcGFy
c2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjppc09wdGlvbmFsQ2hh
aW4gY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RXhwcmVzc2lvbk5vZGU6OmlzT3B0aW9u
YWxDaGFpbkJhc2UgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RXhwcmVzc2lvbk5vZGU6
OnNldElzT3B0aW9uYWxDaGFpbkJhc2UpOiBBZGRlZC4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2Vy
VG9rZW5zLmg6CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpT
eW50YXhDaGVja2VyOjpjcmVhdGVPcHRpb25hbENoYWluKTogQWRkZWQuCisgICAgICAgIEludHJv
ZHVjZSBuZXcgdG9rZW4gYW5kIEFTVCBub2RlLCBhcyB3ZWxsIGFzIGFuIEV4cHJlc3Npb25Ob2Rl
IGZpZWxkIHRvIG1hcmsgTEhTZXMgd2l0aC4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXNzaW9u
KToKKyAgICAgICAgUGFyc2Ugb3B0aW9uYWwgY2hhaW5zIGJ5IHdyYXBwaW5nIHRoZSBhY2Nlc3Mv
Y2FsbCBwYXJzZSBsb29wLgorCisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNw
cDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DYWxsQmFzZSk6CisgICAgICAgIEVuc3VyZSB0aGF0
IFR5cGVFcnJvciBtZXNzYWdlcyBkb24ndCBpbmNsdWRlIHRoZSAnPy4nLgorCisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIFVwZGF0ZSBmZWF0dXJlIGZsYWcsIGFzID8uIGFu
ZCA/PyBhcmUgYSBkb3VibGUgZmVhdHVyZSBvZiAibnVsbGlzaC1hd2FyZSIgb3BlcmF0b3JzLgor
CiAyMDE5LTA4LTEzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBhIHdheSB0byBvcHQgb3V0IG9mIGtlcm4gVENTTSBmb3IgbGF5b3V0IHRlc3RzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCmluZGV4IDJjMzBhNGQ5YjQzMWIwZTU1Mjc0MWQzMjVhYzgxNDljMzhlOWQ1ODAu
Ljk1MGFhYTIwM2QzOGVmODhlMzFiN2I5YTg3OTkzNTQwYjY5MDc4YzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCkBAIC00OTY0LDYgKzQ5NjQsMzAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1
bXBJZihSZWdpc3RlcklEKiBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBDb21wbGV0aW8KICAgICBl
bWl0SnVtcElmVHJ1ZShlcXVpdmFsZW5jZVJlc3VsdCwganVtcFRhcmdldCk7CiB9CiAKK3ZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hPcHRpb25hbENoYWluVGFyZ2V0KCkKK3sKKyAgICBtX29w
dGlvbmFsQ2hhaW5UYXJnZXRTdGFjay5hcHBlbmQobmV3TGFiZWwoKSk7Cit9CisKK3ZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBi
b29sIGlzRGVsZXRlKQoreworICAgIEFTU0VSVChtX29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFjay5z
aXplKCkpOworCisgICAgUmVmPExhYmVsPiBlbmRMYWJlbCA9IG5ld0xhYmVsKCk7CisgICAgZW1p
dEp1bXAoZW5kTGFiZWwuZ2V0KCkpOworCisgICAgZW1pdExhYmVsKG1fb3B0aW9uYWxDaGFpblRh
cmdldFN0YWNrLnRha2VMYXN0KCkuZ2V0KCkpOworICAgIGVtaXRMb2FkKGRzdCwgaXNEZWxldGUg
PyBqc0Jvb2xlYW4odHJ1ZSkgOiBqc1VuZGVmaW5lZCgpKTsKKworICAgIGVtaXRMYWJlbChlbmRM
YWJlbC5nZXQoKSk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRPcHRpb25hbENo
ZWNrKFJlZ2lzdGVySUQqIHNyYykKK3sKKyAgICBBU1NFUlQobV9vcHRpb25hbENoYWluVGFyZ2V0
U3RhY2suc2l6ZSgpKTsKKyAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWRPck51bGwo
bmV3VGVtcG9yYXJ5KCksIHNyYyksIG1fb3B0aW9uYWxDaGFpblRhcmdldFN0YWNrLmxhc3QoKS5n
ZXQoKSk7Cit9CisKIHZvaWQgRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBib2R5
Qnl0ZWNvZGVFbmRPZmZzZXQpCiB7CiAgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJ
bkNvbnRleHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKaW5kZXggZTk3Njg2YWEzZWRjZGQ4ZDNmOWI1N2M0YTZkMTIzYmFjOWNiMzk4Ny4u
M2NiMzNjMzdlY2ZkNmJmZTc0MjhlNTAxMWVkNmFhYzVkOWJhZjIxNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApA
QCAtOTU5LDYgKzk1OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwdXNoRmlu
YWxseUNvbnRyb2xGbG93U2NvcGUoRmluYWxseUNvbnRleHQmKTsKICAgICAgICAgdm9pZCBwb3BG
aW5hbGx5Q29udHJvbEZsb3dTY29wZSgpOwogCisgICAgICAgIHZvaWQgcHVzaE9wdGlvbmFsQ2hh
aW5UYXJnZXQoKTsKKyAgICAgICAgdm9pZCBwb3BPcHRpb25hbENoYWluVGFyZ2V0KFJlZ2lzdGVy
SUQqIGRzdCwgYm9vbCBpc0RlbGV0ZSA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0T3B0aW9u
YWxDaGVjayhSZWdpc3RlcklEKiBzcmMpOworCiAgICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJ
blNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCk7CiAgICAgICAgIHZv
aWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwogICAgICAgICB2b2lk
IHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBp
bmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOwpAQCAt
MTI2Niw2ICsxMjcwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxUcnlSYW5n
ZT4gbV90cnlSYW5nZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxUcnlEYXRhLCA4PiBtX3Ry
eURhdGE7CiAKKyAgICAgICAgVmVjdG9yPFJlZjxMYWJlbD4+IG1fb3B0aW9uYWxDaGFpblRhcmdl
dFN0YWNrOworCiAgICAgICAgIGludCBtX25leHRDb25zdGFudE9mZnNldCB7IDAgfTsKIAogICAg
ICAgICB0eXBlZGVmIEhhc2hNYXA8RnVuY3Rpb25NZXRhZGF0YU5vZGUqLCB1bnNpZ25lZD4gRnVu
Y3Rpb25PZmZzZXRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggN2NjMDc4YzNjMDIxNWM5ZGY3OTBjODQ4YTMyZDEz
YjgwOTBmMDhhMC4uODYyZjBlNWYyYTg0ZDQ0MzE2MzM5YTllMjgxOTg4ZTkxOTM3OTI0NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcApAQCAtNzQ0LDEyICs3NDQsMTggQEAgUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2kKICAgICBS
ZWdpc3RlcklEKiByZXQ7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZpbmFsRGVzdCA9IGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAKLSAgICBpZiAoaXNOb25JbmRleFN0cmluZ0Vs
ZW1lbnQoKm1fc3Vic2NyaXB0KSkgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworICAgIGJvb2wgc3Vic2NyaXB0SXNOb25JbmRl
eFN0cmluZyA9IGlzTm9uSW5kZXhTdHJpbmdFbGVtZW50KCptX3N1YnNjcmlwdCk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBzdWJzY3JpcHRJc05vbkluZGV4U3RyaW5nCisgICAgICAg
ID8gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSkKKyAgICAgICAgOiBnZW5lcmF0b3IuZW1pdE5v
ZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3N1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBtX3N1
YnNjcmlwdC0+aXNQdXJlKGdlbmVyYXRvcikpOworCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25h
bENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soYmFzZS5n
ZXQoKSk7CisKKyAgICBpZiAoc3Vic2NyaXB0SXNOb25JbmRleFN0cmluZykgewogICAgICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7CiAgICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QuZ2V0
KCksIGJhc2UuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZh
bHVlKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0g
Z2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwgbV9zdWJzY3JpcHRIYXNB
c3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKICAgICAgICAgUmVn
aXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JQcm9wZXJ0eShtX3N1YnNj
cmlwdCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRC
eVZhbChmaW5hbERlc3QuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKQEAgLTc2MywxNyAr
NzY5LDI2IEBAIFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAKIFJlZ2lzdGVySUQqIERvdEFjY2Vz
c29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0ID0gZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAgICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNl
LT5pc1N1cGVyTm9kZSgpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gYmFzZUlzU3Vw
ZXIgPyBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9iYXNlKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlOworICAgIGlmIChiYXNl
SXNTdXBlcikKKyAgICAgICAgYmFzZSA9IGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJhdG9y
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2Up
OworICAgICAgICBpZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soYmFzZS5nZXQoKSk7CisgICAgfQorCiAgICAg
Z2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90
RW5kKCkpOwotICAgIFJlZ2lzdGVySUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0OwogICAgIGlmIChiYXNlSXNTdXBlcikg
ewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1ZhbHVlID0gZ2VuZXJhdG9yLmVuc3Vy
ZVRoaXMoKTsKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZpbmFsRGVzdCwg
YmFzZS5nZXQoKSwgdGhpc1ZhbHVlLmdldCgpLCBtX2lkZW50KTsKKyAgICAgICAgcmV0ID0gZ2Vu
ZXJhdG9yLmVtaXRHZXRCeUlkKGZpbmFsRGVzdC5nZXQoKSwgYmFzZS5nZXQoKSwgdGhpc1ZhbHVl
LmdldCgpLCBtX2lkZW50KTsKICAgICB9IGVsc2UKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVt
aXRHZXRCeUlkKGZpbmFsRGVzdCwgYmFzZS5nZXQoKSwgbV9pZGVudCk7Ci0gICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZShmaW5hbERlc3QsIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Cisg
ICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QuZ2V0KCksIGJhc2Uu
Z2V0KCksIG1faWRlbnQpOworICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUoZmluYWxEZXN0
LmdldCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiByZXQ7CiB9CiAK
QEAgLTg0OCwyNCArODYzLDMyIEBAIFJlZ2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnCiAgICAgICAgIGdl
bmVyYXRvci5lbWl0TG9hZFRoaXNGcm9tQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudCgp
OwogCiAgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9w
ZXJ0eU5hbWVzKCkuZXZhbCk7Ci0gICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2Fs
KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZhciwgbG9j
YWwsIG51bGxwdHIpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRv
ci5tb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwotICAgICAgICBD
YWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBsb2NhbCA9IHZhci5sb2NhbCgpOworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBmdW5jOworICAgIGlmIChsb2NhbCkgeworICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNr
SWZOZWNlc3NhcnkodmFyLCBsb2NhbC5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIGZ1bmMgPSBn
ZW5lcmF0b3IubW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgp
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsK
KyAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworCisg
ICAgaWYgKGxvY2FsKQogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50
aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSks
IGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSlNUZXh0UG9z
aXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyA0OworICAgICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKKyAgICAg
ICAgZ2VuZXJhdG9yLm1vdmUoCisgICAgICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLAorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoY2FsbEFyZ3VtZW50
cy50aGlzUmVnaXN0ZXIoKSwgdmFyKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNj
b3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhciwgVGhyb3dJ
Zk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVjZXNzYXJ5KHZh
ciwgZnVuYy5nZXQoKSwgbnVsbHB0cik7CiAgICAgfQogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgQ2FsbEFyZ3VtZW50cyBjYWxs
QXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKLSAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZv
dCA9IGRpdm90U3RhcnQoKSArIDQ7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhu
ZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7Ci0gICAgZ2VuZXJhdG9yLm1vdmUoCi0g
ICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCi0gICAgICAgIGdlbmVyYXRvci5l
bWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhcikpOwotICAg
IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhp
c1JlZ2lzdGVyKCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKLSAgICBnZW5lcmF0b3IuZW1pdFRE
WkNoZWNrSWZOZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxscHRyKTsKLSAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1
bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdl
dCgpKTsKKyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3Iu
ZW1pdE9wdGlvbmFsQ2hlY2soZnVuYy5nZXQoKSk7CisKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRDYWxsRXZhbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cywg
ZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOwog
fQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsVmFsdWVO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg5OSw4ICs5MjIsMTIg
QEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmUKICAgICAgICAgCiAgICAgICAgIHJldHVybiByZXQ7
CiAgICAgfQorCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9leHByKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOworICAgIGlmIChpc09wdGlvbmFs
Q2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jLmdl
dCgpKTsKKwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJn
cyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCks
IGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2Fs
bEluVGFpbFBvc2l0aW9uKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSwgRGVidWdnYWJsZUNhbGw6Olllcyk7CkBAIC05MjAsMzAgKzk0NywzNCBAQCBSZWdpc3RlcklE
KiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsCiAgICAgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1bmN0aW9uID0gZ2Vu
ZXJhdG9yLmV4cGVjdGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKG1faWRlbnQpOwogCiAgICAgVmFy
aWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1faWRlbnQpOwotICAgIGlmIChSZWdpc3Rl
cklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0VERaQ2hl
Y2tJZk5lY2Vzc2FyeSh2YXIsIGxvY2FsLCBudWxscHRyKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCksIGxvY2FsKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKLSAgICAgICAgQ2FsbEFy
Z3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gbG9jYWwgPSB2YXIubG9jYWwoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVu
YzsKKyAgICBpZiAobG9jYWwpIHsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRURFpDaGVja0lmTmVj
ZXNzYXJ5KHZhciwgbG9jYWwuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBmdW5jID0gZ2VuZXJh
dG9yLm1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQoKSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAg
Q2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKworICAgIGlm
IChsb2NhbCkgewogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgIC8vIFRoaXMgcGFzc2VzIE5vRXhw
ZWN0ZWRGdW5jdGlvbiBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0IGlmIHRoZSBmdW5jdGlvbiBpcyBp
biBhCiAgICAgICAgIC8vIGxvY2FsIHZhcmlhYmxlLCB0aGVuIGl0J3Mgbm90IG9uZSBvZiBvdXIg
YnVpbHQtaW4gY29uc3RydWN0b3JzLgotICAgICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0
b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwg
Tm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOwotICAgICAgICBnZW5lcmF0b3IuZW1p
dFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwotICAgICAgICByZXR1cm4gcmV0OworICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gTm9FeHBl
Y3RlZEZ1bmN0aW9uOworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rp
dm90ID0gZGl2b3RTdGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhuZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7Cisg
ICAgICAgIGdlbmVyYXRvci5tb3ZlKAorICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhcikpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEZy
b21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRo
cm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2tJZk5lY2Vzc2Fy
eSh2YXIsIGZ1bmMuZ2V0KCksIG51bGxwdHIpOwogICAgIH0KIAotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBmdW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5n
ZXQoKSk7Ci0gICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdz
KTsKKyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1p
dE9wdGlvbmFsQ2hlY2soZnVuYy5nZXQoKSk7CiAKLSAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZv
dCA9IGRpdm90U3RhcnQoKSArIG1faWRlbnQubGVuZ3RoKCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhuZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7Ci0gICAgZ2Vu
ZXJhdG9yLm1vdmUoCi0gICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCi0gICAg
ICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVy
KCksIHZhcikpOwotICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGZ1bmMuZ2V0KCksIGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKLSAgICBn
ZW5lcmF0b3IuZW1pdFREWkNoZWNrSWZOZWNlc3NhcnkodmFyLCBmdW5jLmdldCgpLCBudWxscHRy
KTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlv
bihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2Fs
bDo6WWVzKTsKICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgp
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiByZXQ7CkBAIC0xMjc1LDYg
KzEzMDYsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmlu
c2ljX2RlZmluZUVudW1lcmFibGVXcml0YWJsZUNvbmZpZwogCiBSZWdpc3RlcklEKiBGdW5jdGlv
bkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24g
PSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5n
ZXQoKSk7CiAgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKICAg
ICBib29sIHN1YnNjcmlwdElzTm9uSW5kZXhTdHJpbmcgPSBpc05vbkluZGV4U3RyaW5nRWxlbWVu
dCgqbV9zdWJzY3JpcHQpOwogCkBAIC0xMjg2LDkgKzEzMTksMTEgQEAgUmVnaXN0ZXJJRCogRnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLAogICAgICAgICAgICAgYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVm
dEhhbmRTaWRlKG1fYmFzZSwgbV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQt
PmlzUHVyZShnZW5lcmF0b3IpKTsKKworICAgICAgICBpZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hh
aW5CYXNlKCkpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soYmFzZS5n
ZXQoKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uOwogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiB0aGlzUmVnaXN0ZXI7CiAgICAgaWYgKGJhc2VJc1N1cGVyKSB7CiAg
ICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNlIGJlY2F1c2Ug
d2UgZWl0aGVyIGhhdmUgYSBub24tVERaIHRoaXMgb3Igd2UgdGhyb3cuIE9uY2Ugd2UgaGF2ZSBh
IG5vbi1URFogdGhpcywgd2UgY2FuJ3QgY2hhbmdlIGl0cyB2YWx1ZSBiYWNrIHRvIFREWi4KQEAg
LTEyOTcsMTkgKzEzMzIsMjAgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgIGlmIChzdWJz
Y3JpcHRJc05vbkluZGV4U3RyaW5nKSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHBy
ZXNzaW9uRW5kKCkpOwogICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCi0gICAgICAgICAgICBmdW5j
dGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCksIGJhc2UuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgc3RhdGljX2Nhc3Q8U3RyaW5nTm9k
ZSo+KG1fc3Vic2NyaXB0KS0+dmFsdWUoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdl
dEJ5SWQoZnVuY3Rpb24uZ2V0KCksIGJhc2UuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgc3Rh
dGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG1fc3Vic2NyaXB0KS0+dmFsdWUoKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRv
ci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgc3RhdGljX2Nhc3Q8U3RyaW5nTm9k
ZSo+KG1fc3Vic2NyaXB0KS0+dmFsdWUoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdl
dEJ5SWQoZnVuY3Rpb24uZ2V0KCksIGJhc2UuZ2V0KCksIHN0YXRpY19jYXN0PFN0cmluZ05vZGUq
PihtX3N1YnNjcmlwdCktPnZhbHVlKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvclByb3BlcnR5KG1fc3Vi
c2NyaXB0KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNz
aW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAg
ICAgICAgIGlmIChiYXNlSXNTdXBlcikKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9y
LmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCks
IHRoaXNSZWdpc3Rlci5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRHZXRCeVZhbChmdW5jdGlvbi5nZXQoKSwgYmFzZS5nZXQoKSwgdGhpc1JlZ2lzdGVy
LmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZ1bmN0
aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCksIGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0R2V0QnlWYWwoZnVuY3Rpb24uZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsK
ICAgICB9CisgICAgaWYgKGlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRPcHRpb25hbENoZWNrKGZ1bmN0aW9uLmdldCgpKTsKIAotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rp
b24uZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1f
YXJncyk7CiAgICAgaWYgKGJhc2VJc1N1cGVyKSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0VERa
Q2hlY2soZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpKTsKQEAgLTEzMzEsMTQgKzEzNjcsMjEgQEAg
UmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2kKICAgICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5p
c1N1cGVyTm9kZSgpOwogICAgIGlmIChiYXNlSXNTdXBlcikKICAgICAgICAgZ2VuZXJhdG9yLm1v
dmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLmVuc3VyZVRoaXMoKSk7
Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9iYXNlKTsKKyAgICAgICAgaWYgKG1fYmFzZS0+aXNP
cHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENo
ZWNrKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCkpOworICAgIH0KICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3Rh
cnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHN1cGVyQmFzZSA9IGVtaXRTdXBlckJhc2VGb3JDYWxsZWUo
Z2VuZXJhdG9yKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgp
LCBzdXBlckJhc2UuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQp
OwogICAgIH0gZWxzZQogICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0
KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOworCisgICAgaWYgKGlz
T3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNr
KGZ1bmN0aW9uLmdldCgpKTsKKwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0
Q2FsbEluVGFpbFBvc2l0aW9uKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOwogICAgIGdlbmVyYXRvci5lbWl0UHJvZmls
ZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAg
cmV0dXJuIHJldDsKQEAgLTEzNDgsMTcgKzEzOTEsMjQgQEAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbWF4RGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5ID0gMjsKIAogUmVnaXN0ZXJJRCog
Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJl
dHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworCisgICAgaWYg
KG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9w
dGlvbmFsQ2hlY2soYmFzZS5nZXQoKSk7CisKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVz
c2lvbkVuZCgpKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb247Ci0gICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KTsKIAorICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbjsKICAgICBhdXRvIG1ha2VGdW5j
dGlvbiA9IFsmXSB7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpIHsKICAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlzVmFsdWUgPSBnZW5lcmF0b3IuZW5zdXJlVGhp
cygpOwogICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCB0aGlzVmFsdWUuZ2V0KCksIGdl
bmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuY2FsbFB1YmxpY05hbWUoKSk7
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdl
dEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBnZW5lcmF0
b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmNhbGxQdWJsaWNOYW1lKCkpOworCisg
ICAgICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdE9wdGlvbmFsQ2hlY2soZnVuY3Rpb24uZ2V0KCkpOwogICAgIH07CiAKICAgICBib29sIGVt
aXRDYWxsQ2hlY2sgPSAhZ2VuZXJhdG9yLmlzQnVpbHRpbkZ1bmN0aW9uKCk7CkBAIC0xNDMwLDE1
ICsxNDgwLDIyIEBAIFJlZ2lzdGVySUQqIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsCiAgICAgLy8gZnVuY3Rpb24uYXBw
bHkodGhpc0FyZywgW2FyZzAsIGFyZzEsIC4uLl0pIC0+IGNhbiBiZSB0cml2aWFsbHkgY29lcmNl
ZCBpbnRvIGZ1bmN0aW9uLmNhbGwodGhpc0FyZywgYXJnMCwgYXJnMSwgLi4uKSBhbmQgc2F2ZXMg
b2JqZWN0IGFsbG9jYXRpb24KICAgICBib29sIG1heUJlQ2FsbCA9IGFyZVRyaXZpYWxBcHBseUFy
Z3VtZW50cyhtX2FyZ3MpOwogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uOwotICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2Jhc2UpOworCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENoYWluQmFzZSgpKQor
ICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soYmFzZS5nZXQoKSk7CisKKyAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb247CiAgICAgYXV0byBtYWtlRnVuY3Rpb24gPSBbJl0g
ewogICAgICAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKSB7CiAgICAgICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gdGhpc1ZhbHVlID0gZ2VuZXJhdG9yLmVuc3VyZVRoaXMoKTsKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgdGhpc1ZhbHVlLmdldCgpLCBnZW5lcmF0b3IucHJv
cGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFwcGx5UHVibGljTmFtZSgpKTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0
eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuYXBwbHlQdWJsaWNOYW1lKCkpOworCisgICAgICAgIGlm
IChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlv
bmFsQ2hlY2soZnVuY3Rpb24uZ2V0KCkpOwogICAgIH07CiAKICAgICBib29sIGVtaXRDYWxsQ2hl
Y2sgPSAhZ2VuZXJhdG9yLmlzQnVpbHRpbkZ1bmN0aW9uKCk7CkBAIC0xNjkyLDI1ICsxNzQ5LDMz
IEBAIFJlZ2lzdGVySUQqIERlbGV0ZVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0CiAKIFJlZ2lzdGVySUQqIERlbGV0ZUJyYWNrZXRO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQogeworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2Jhc2UpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAKKyAgICBpZiAobV9iYXNlLT5pc09wdGlvbmFs
Q2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhyMC5nZXQo
KSk7CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9z
dWJzY3JpcHQpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKQog
ICAgICAgICByZXR1cm4gZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAiQ2Fubm90
IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5Iik7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVs
ZXRlQnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0KCksIHIxLmdl
dCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeVZhbChmaW5hbERlc3QuZ2V0
KCksIHIwLmdldCgpLCByMS5nZXQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBEZWxldGVEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIFJlZ2lzdGVySUQqIERlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAKKyAgICBp
ZiAobV9iYXNlLT5pc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0
T3B0aW9uYWxDaGVjayhyMC5nZXQoKSk7CisKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKG1fYmFzZS0+
aXNTdXBlck5vZGUoKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdl
bmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwg
cjAuZ2V0KCksIG1faWRlbnQpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQo
ZmluYWxEZXN0LmdldCgpLCByMC5nZXQoKSwgbV9pZGVudCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxldGVWYWx1ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KQEAgLTIzNDYsMTMgKzI0MTEsMjggQEAgUmVnaXN0ZXJJRCogQ29hbGVz
Y2VOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCoKICAgICBSZWY8TGFiZWw+IHRhcmdldCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCiAg
ICAgZ2VuZXJhdG9yLmVtaXROb2RlKHRlbXAuZ2V0KCksIG1fZXhwcjEpOwotICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmRmFsc2UoZ2VuZXJhdG9yLmVtaXRVbmFyeU9wPE9wSXNVbmRlZmluZWRPck51
bGw+KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdGVtcC5nZXQoKSksIHRhcmdldC5nZXQoKSk7
CisgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShnZW5lcmF0b3IuZW1pdElzVW5kZWZpbmVk
T3JOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdGVtcC5nZXQoKSksIHRhcmdldC5nZXQo
KSk7CiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5UYWlsUG9zaXRpb24odGVtcC5nZXQoKSwgbV9l
eHByMik7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0YXJnZXQuZ2V0KCkpOwogCiAgICAgcmV0
dXJuIGdlbmVyYXRvci5tb3ZlKGRzdCwgdGVtcC5nZXQoKSk7CiB9CiAKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBPcHRpb25hbENoYWluTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK1JlZ2lzdGVySUQqIE9wdGlvbmFsQ2hhaW5Ob2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QpOworCisgICAgaWYgKG1faXNPdXRlcm1vc3QpCisgICAgICAgIGdlbmVyYXRvci5wdXNoT3B0
aW9uYWxDaGFpblRhcmdldCgpOworICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluVGFpbFBvc2l0aW9u
KGZpbmFsRGVzdC5nZXQoKSwgbV9leHByKTsKKyAgICBpZiAobV9pc091dGVybW9zdCkKKyAgICAg
ICAgZ2VuZXJhdG9yLnBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoZmluYWxEZXN0LmdldCgpLCBtX2lz
RGVsZXRlKTsKKworICAgIHJldHVybiBmaW5hbERlc3QuZ2V0KCk7Cit9CisKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25kaXRpb25hbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIENvbmRpdGlvbmFsTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20KaW5kZXggYWM0MTU5YjhhZjVkNzAyMWQ4ODQ2NzY5Mzc4MWEwYjA5MzM2NWJiMC4uNTUw
MDZkNGZmYmI0YTk2ZDBmOTUxZDYzNmI0Mzk3NWUxYmJiNTY4ZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20K
QEAgLTg3NSw4ICs4NzUsNyBAQCBlcXVhbE51bGxDb21wYXJpc29uT3Aob3BfbmVxX251bGwsIE9w
TmVxTnVsbCwKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfaXNfdW5kZWZpbmVkX29yX251bGwsIE9w
SXNVbmRlZmluZWRPck51bGwsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCiAg
ICAgZ2V0KG1fb3BlcmFuZCwgdDApCi0gICAgYXNzZXJ0Tm90Q29uc3RhbnQoc2l6ZSwgdDApCi0g
ICAgbG9hZGkgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCB0MQorICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGVUYWcoc2l6ZSwgdDAsIHQxKQogICAgIG9yaSAxLCB0MQogICAgIGNpZXEgdDEsIE51bGxU
YWcsIHQxCiAgICAgcmV0dXJuKEJvb2xlYW5UYWcsIHQxKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCBlMDlmODk4
NWZlNTMxN2E4ZGQ5YmI0NzFlYTkyYmFkYmI4ZDUxY2FjLi4xNTM0ZWE4YjM4ZTY4ZTA2MWZiOTkx
ZGY0NjBmNTlhNTU3Y2RmNGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtODI3LDggKzgyNyw4IEBAIGVxdWFs
TnVsbENvbXBhcmlzb25PcChvcF9uZXFfbnVsbCwgT3BOZXFOdWxsLAogCiAKIGxsaW50T3BXaXRo
UmV0dXJuKG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsLCBPcElzVW5kZWZpbmVkT3JOdWxsLCBtYWNy
byAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChtX29wZXJhbmQsIHQwKQot
ICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDAKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkKKyAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MCkKICAgICBhbmRxIH5UYWdCaXRVbmRl
ZmluZWQsIHQwCiAgICAgY3FlcSB0MCwgVmFsdWVOdWxsLCB0MAogICAgIG9ycSBWYWx1ZUZhbHNl
LCB0MApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAppbmRleCBkZTVi
MTMzOTA2NjExMzQxMmFjYWVlZjJiZDc1ZTAzMWEzMzNhMTAwLi4zYjc1MWVkM2UwOGUwMzczOTRm
NzQyNzVmYzkzNWNlMDg2YmQ2NGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FT
VEJ1aWxkZXIuaApAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Qg
aW50ICBEb250QnVpbGRTdHJpbmdzID0gMDsKIAogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQmlu
YXJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQgdG9rZW4sIHN0ZDo6cGFpcjxFeHBy
ZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJp
bmFyeU9wSW5mbz4pOwotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91
c0Jhc2VXYXNTdXBlciwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90RW5kLCBzaXplX3QgY2FsbE9yQXBwbHlDaGlsZERlcHRoKTsKKyAgICBFeHBy
ZXNzaW9uTm9kZSogbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50
c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90
IGNhbGxPckFwcGx5Q2hpbGREZXB0aCwgYm9vbCBpc09wdGlvbmFsQ2FsbCk7CiAKICAgICBKU0M6
OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYSkgSlNDOjpTb3VyY2VFbGVtZW50cygpOyB9CiAKQEAgLTM2MCw2ICszNjAsMTIg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKKyAgICBFeHByZXNzaW9u
Tm9kZSogY3JlYXRlT3B0aW9uYWxDaGFpbihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJvb2wgaXNPdXRl
cm1vc3QpCisgICAgeworICAgICAgICBiYXNlLT5zZXRJc09wdGlvbmFsQ2hhaW5CYXNlKCk7Cisg
ICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIE9wdGlvbmFsQ2hhaW5Ob2RlKGxvY2F0
aW9uLCBleHByLCBpc091dGVybW9zdCk7CisgICAgfQorCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNy
ZWF0ZUNvbmRpdGlvbmFsRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogY29uZGl0aW9uLCBFeHByZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9k
ZSogcmhzKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ29uZGl0
aW9uYWxOb2RlKGxvY2F0aW9uLCBjb25kaXRpb24sIGxocywgcmhzKTsKQEAgLTExNDgsNiArMTE1
NCwxNiBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcgogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVp
bGRlcjo6bWFrZURlbGV0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogeworICAgIGlm
IChleHByLT5pc09wdGlvbmFsQ2hhaW4oKSkgeworICAgICAgICBPcHRpb25hbENoYWluTm9kZSog
b3B0aW9uYWxDaGFpbiA9IHN0YXRpY19jYXN0PE9wdGlvbmFsQ2hhaW5Ob2RlKj4oZXhwcik7Cisg
ICAgICAgIGlmIChvcHRpb25hbENoYWluLT5leHByKCktPmlzTG9jYXRpb24oKSkgeworICAgICAg
ICAgICAgQVNTRVJUKCFvcHRpb25hbENoYWluLT5leHByKCktPmlzUmVzb2x2ZU5vZGUoKSk7Cisg
ICAgICAgICAgICBvcHRpb25hbENoYWluLT5zZXRFeHByKG1ha2VEZWxldGVOb2RlKGxvY2F0aW9u
LCBvcHRpb25hbENoYWluLT5leHByKCksIHN0YXJ0LCBkaXZvdCwgZW5kKSk7CisgICAgICAgICAg
ICBvcHRpb25hbENoYWluLT5zZXRJc0RlbGV0ZSgpOworICAgICAgICAgICAgcmV0dXJuIG9wdGlv
bmFsQ2hhaW47CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIWV4cHItPmlzTG9jYXRpb24o
KSkKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRGVsZXRlVmFsdWVOb2RlKGxv
Y2F0aW9uLCBleHByKTsKICAgICBpZiAoZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7CkBAIC0xMzQ1
LDE3ICsxMzYxLDMxIEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0WE9yTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgQml0WE9yTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhh
c0Fzc2lnbm1lbnRzKTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5j
dGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBmdW5jLCBib29sIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdz
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBs
eUNoaWxkRGVwdGgpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2Fs
bE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGZ1
bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNhbGxPckFwcGx5Q2hpbGRE
ZXB0aCwgYm9vbCBpc09wdGlvbmFsQ2FsbCkKIHsKICAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49
IGRpdm90LmxpbmVTdGFydE9mZnNldCk7CiAgICAgaWYgKGZ1bmMtPmlzU3VwZXJOb2RlKCkpCiAg
ICAgICAgIHVzZXNTdXBlckNhbGwoKTsKIAogICAgIGlmIChmdW5jLT5pc0J5dGVjb2RlSW50cmlu
c2ljTm9kZSgpKSB7CisgICAgICAgIEFTU0VSVCghaXNPcHRpb25hbENhbGwpOwogICAgICAgICBC
eXRlY29kZUludHJpbnNpY05vZGUqIGludHJpbnNpYyA9IHN0YXRpY19jYXN0PEJ5dGVjb2RlSW50
cmluc2ljTm9kZSo+KGZ1bmMpOwogICAgICAgICBpZiAoaW50cmluc2ljLT50eXBlKCkgPT0gQnl0
ZWNvZGVJbnRyaW5zaWNOb2RlOjpUeXBlOjpDb25zdGFudCkKICAgICAgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIEJ5dGVjb2RlSW50cmluc2ljTm9kZShCeXRlY29kZUludHJpbnNp
Y05vZGU6OlR5cGU6OkZ1bmN0aW9uLCBsb2NhdGlvbiwgaW50cmluc2ljLT5lbWl0dGVyKCksIGlu
dHJpbnNpYy0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQp
OwogICAgIH0KKworICAgIGlmIChmdW5jLT5pc09wdGlvbmFsQ2hhaW4oKSkgeworICAgICAgICBP
cHRpb25hbENoYWluTm9kZSogb3B0aW9uYWxDaGFpbiA9IHN0YXRpY19jYXN0PE9wdGlvbmFsQ2hh
aW5Ob2RlKj4oZnVuYyk7CisgICAgICAgIGlmIChvcHRpb25hbENoYWluLT5leHByKCktPmlzTG9j
YXRpb24oKSkgeworICAgICAgICAgICAgQVNTRVJUKCFvcHRpb25hbENoYWluLT5leHByKCktPmlz
UmVzb2x2ZU5vZGUoKSk7CisgICAgICAgICAgICAvLyBXZSBtdXN0IHRha2UgY2FyZSB0byBwcmVz
ZXJ2ZSBvdXIgYHRoaXNgIHZhbHVlIGluIGNhc2VzIGxpa2UgYGE/LmI/LigpYCBhbmQgYChhPy5i
KSgpYCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgaWYgKGlzT3B0aW9uYWxDYWxsKQorICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlvbiwgb3B0aW9u
YWxDaGFpbi0+ZXhwcigpLCBwcmV2aW91c0Jhc2VXYXNTdXBlciwgYXJncywgZGl2b3RTdGFydCwg
ZGl2b3QsIGRpdm90RW5kLCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGlzT3B0aW9uYWxDYWxsKTsg
IAorICAgICAgICAgICAgb3B0aW9uYWxDaGFpbi0+c2V0RXhwcihtYWtlRnVuY3Rpb25DYWxsTm9k
ZShsb2NhdGlvbiwgb3B0aW9uYWxDaGFpbi0+ZXhwcigpLCBwcmV2aW91c0Jhc2VXYXNTdXBlciwg
YXJncywgZGl2b3RTdGFydCwgZGl2b3QsIGRpdm90RW5kLCBjYWxsT3JBcHBseUNoaWxkRGVwdGgs
IGlzT3B0aW9uYWxDYWxsKSk7CisgICAgICAgICAgICByZXR1cm4gb3B0aW9uYWxDaGFpbjsKKyAg
ICAgICAgfQorICAgIH0KKwogICAgIGlmICghZnVuYy0+aXNMb2NhdGlvbigpKQogICAgICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24s
IGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgaWYgKGZ1bmMt
PmlzUmVzb2x2ZU5vZGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9MZXhlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcApp
bmRleCBlOThjZGI1ZTU5ZTIzMDcyYzE5MDE4Zjg3ZDEwYzJkNDUyZDljZDM5Li5mMWJkNjM2ZDZm
NDY0NzcxMmRiMDQ0ZGY4MTJmZmZkNmRhMTc0MmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0xleGVyLmNwcApAQCAtMjE1NywxMCArMjE1NywxNyBAQCBzdGFydDoKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDaGFyYWN0ZXJRdWVzdGlvbjoKICAgICAgICAgc2hpZnQoKTsKLSAgICAg
ICAgaWYgKE9wdGlvbnM6OnVzZU51bGxpc2hDb2FsZXNjaW5nKCkgJiYgbV9jdXJyZW50ID09ICc/
JykgewotICAgICAgICAgICAgc2hpZnQoKTsKLSAgICAgICAgICAgIHRva2VuID0gQ09BTEVTQ0U7
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU51bGxpc2hBd2Fy
ZU9wZXJhdG9ycygpKSB7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICc/JykgeworICAg
ICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBDT0FMRVNDRTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnQgPT0gJy4nICYmICFpc0FTQ0lJRGlnaXQocGVlaygxKSkpIHsKKyAgICAgICAgICAg
ICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIHRva2VuID0gUVVFU1RJT05ET1Q7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdG9r
ZW4gPSBRVUVTVElPTjsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCmluZGV4IGQ0MWUzYWVkOGU0NWY3YThlMmZkMzFj
MjQ0NzdkZWNjYjhkNTY0MGYuLmQ2NWIwOGI3OTg4MzBiYjFmNTlmN2JiYTYxYmFiYzgzZjJhMDZi
MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVj
dG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9y
cy5oCkBAIC02NzYsNiArNjc2LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAK
KyAgICBpbmxpbmUgT3B0aW9uYWxDaGFpbk5vZGU6Ok9wdGlvbmFsQ2hhaW5Ob2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBib29sIGlzT3V0
ZXJtb3N0KQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQorICAgICAgICAsIG1f
ZXhwcihleHByKQorICAgICAgICAsIG1faXNPdXRlcm1vc3QoaXNPdXRlcm1vc3QpCisgICAgewor
ICAgIH0KKwogICAgIGlubGluZSBDb25kaXRpb25hbE5vZGU6OkNvbmRpdGlvbmFsTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbG9naWNhbCwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpCiAgICAgICAgIDogRXhw
cmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9sb2dpY2FsKGxvZ2ljYWwpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5kZXggODZmZGFmM2QwNGZkMGQ4ZjdmNDg3ZDE3
NzM3N2UyYTM3ZTk1YTc4Ny4uZmE3MGFjYjZiYTljODM0YmJjYjEyZGY5Yjk0ZWVhMzFmMmRhYTNi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMjA1LDYgKzIwNSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCeXRlY29kZUludHJpbnNp
Y05vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNC
aW5hcnlPcE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNGdW5jdGlvbkNhbGwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNPcHRpb25hbENoYWluKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgTGFiZWwmLCBMYWJlbCYsIEZhbGxUaHJvdWdoTW9kZSk7CiAKQEAgLTIxMiw4
ICsyMTMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVzdWx0VHlwZSByZXN1bHRE
ZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHRUeXBlOyB9CiAKKyAgICAgICAgYm9v
bCBpc09wdGlvbmFsQ2hhaW5CYXNlKCkgY29uc3QgeyByZXR1cm4gbV9pc09wdGlvbmFsQ2hhaW5C
YXNlOyB9CisgICAgICAgIHZvaWQgc2V0SXNPcHRpb25hbENoYWluQmFzZSgpIHsgbV9pc09wdGlv
bmFsQ2hhaW5CYXNlID0gdHJ1ZTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVzdWx0VHlw
ZSBtX3Jlc3VsdFR5cGU7CisgICAgICAgIGJvb2wgbV9pc09wdGlvbmFsQ2hhaW5CYXNlIHsgZmFs
c2UgfTsKICAgICB9OwogCiAgICAgY2xhc3MgU3RhdGVtZW50Tm9kZSA6IHB1YmxpYyBOb2RlIHsK
QEAgLTEzMTAsMTIgKzEzMTUsMzEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENvYWxlc2Nl
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJl
c3Npb25Ob2RlKiBleHByMik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBSZWdpc3RlcklEKiBl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRl
OworICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IG51bGxwdHIpIGZpbmFsOwogCiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBt
X2V4cHIxOwogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9leHByMjsKICAgICB9OwogCisgICAg
Y2xhc3MgT3B0aW9uYWxDaGFpbk5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgT3B0aW9uYWxDaGFpbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBib29sKTsKKworICAgICAgICB2b2lkIHNldEV4cHIoRXhw
cmVzc2lvbk5vZGUqIGV4cHIpIHsgbV9leHByID0gZXhwcjsgfQorICAgICAgICBFeHByZXNzaW9u
Tm9kZSogZXhwcigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcjsgfQorCisgICAgICAgIHZvaWQgc2V0
SXNEZWxldGUoKSB7IG1faXNEZWxldGUgPSB0cnVlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IG51bGxwdHIpIGZpbmFsOworCisgICAgICAgIGJvb2wgaXNPcHRpb25hbENoYWluKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4
cHI7CisgICAgICAgIGJvb2wgbV9pc091dGVybW9zdDsKKyAgICAgICAgYm9vbCBtX2lzRGVsZXRl
IHsgZmFsc2UgfTsKKyAgICB9OworCiAgICAgLy8gVGhlIHRlcm5hcnkgb3BlcmF0b3IsICJtX2xv
Z2ljYWwgPyBtX2V4cHIxIDogbV9leHByMiIKICAgICBjbGFzcyBDb25kaXRpb25hbE5vZGUgZmlu
YWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBmOGRiZTcxOTZmMTExNzE2ZDBhNThmN2Y1N2Uz
ZjhmNjdiN2EyYWNmLi5lNjQ0NWNkNjYxNjVhYTZmYzNkYzk1OTRhZGVmZThiMmJhYTg3NzNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC00ODA4LDEwMyArNDgw
OCwxMzYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXMKICAgICB9CiAKICAgICBmYWlsSWZGYWxz
ZShiYXNlLCAiQ2Fubm90IHBhcnNlIGJhc2UgZXhwcmVzc2lvbiIpOwotICAgIHdoaWxlICh0cnVl
KSB7Ci0gICAgICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwotICAgICAgICBzd2l0Y2gg
KG1fdG9rZW4ubV90eXBlKSB7Ci0gICAgICAgIGNhc2UgT1BFTkJSQUNLRVQ6IHsKLSAgICAgICAg
ICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwotICAgICAgICAg
ICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7
CisKKyAgICBkbyB7CisgICAgICAgIFRyZWVFeHByZXNzaW9uIG9wdGlvbmFsQ2hhaW5CYXNlID0g
MDsKKyAgICAgICAgSlNUb2tlbkxvY2F0aW9uIG9wdGlvbmFsQ2hhaW5Mb2NhdGlvbjsKKyAgICAg
ICAgSlNUb2tlblR5cGUgdHlwZSA9IG1fdG9rZW4ubV90eXBlOworCisgICAgICAgIGlmIChtYXRj
aChRVUVTVElPTkRPVCkpIHsKKyAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShuZXdDb3Vu
dCwgIkNhbm5vdCBjYWxsIGNvbnN0cnVjdG9yIGluIGFuIG9wdGlvbmFsIGNoYWluIik7CisgICAg
ICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3VwZXIsICJDYW5ub3QgdXNlIHN1cGVy
IGFzIHRoZSBiYXNlIG9mIGFuIG9wdGlvbmFsIGNoYWluIik7CisgICAgICAgICAgICBvcHRpb25h
bENoYWluQmFzZSA9IGJhc2U7CisgICAgICAgICAgICBvcHRpb25hbENoYWluTG9jYXRpb24gPSB0
b2tlbkxvY2F0aW9uKCk7CisKKyAgICAgICAgICAgIFNhdmVQb2ludCBzYXZlUG9pbnQgPSBjcmVh
dGVTYXZlUG9pbnQoKTsKICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgIGludCBub25M
SFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBpbnQgaW5p
dGlhbEFzc2lnbm1lbnRzID0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQ7Ci0gICAgICAg
ICAgICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsK
LSAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIHN1YnNjcmlw
dCBleHByZXNzaW9uIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVCcmFja2V0
QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHByb3BlcnR5LCBpbml0aWFsQXNzaWdubWVudHMg
IT0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVz
c2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKFVOTElLRUxZKGJhc2VJc1N1cGVyICYmIGN1cnJlbnRTY29wZSgpLT5pc0Fycm93RnVuY3Rp
b24oKSkpCi0gICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uU2NvcGUoKS0+c2V0SW5uZXJB
cnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIsICJzdWJz
Y3JpcHQgZXhwcmVzc2lvbiIpOwotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3Vu
dCA9IG5vbkxIU0NvdW50OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobWF0
Y2goT1BFTkJSQUNLRVQpIHx8IG1hdGNoKE9QRU5QQVJFTikgfHwgbWF0Y2goQkFDS1FVT1RFKSkK
KyAgICAgICAgICAgICAgICB0eXBlID0gbV90b2tlbi5tX3R5cGU7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICB0eXBlID0gRE9UOworICAgICAgICAgICAgICAgIHJlc3RvcmVT
YXZlUG9pbnQoc2F2ZVBvaW50KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBj
YXNlIE9QRU5QQVJFTjogewotICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhw
cmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0
YXRlLm5vbkxIU0NvdW50OwotICAgICAgICAgICAgaWYgKG5ld0NvdW50KSB7Ci0gICAgICAgICAg
ICAgICAgbmV3Q291bnQtLTsKLSAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNz
aW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgICAgICBUcmVlQXJn
dW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQpOwotICAgICAgICAgICAg
ICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50cyIp
OwotICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24s
IGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9r
ZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
c2l6ZV90IHVzZWRWYXJpYWJsZXNTaXplID0gY3VycmVudFNjb3BlKCktPmN1cnJlbnRVc2VkVmFy
aWFibGVzU2l6ZSgpOworCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBsb2Nh
dGlvbiA9IHRva2VuTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICAgICAgY2FzZSBPUEVOQlJBQ0tFVDogeworICAgICAgICAgICAgICAgIG1fcGFyc2VyU3Rh
dGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwogICAgICAgICAgICAgICAgIEpTVGV4dFBv
c2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwotICAgICAgICAg
ICAgICAgIE9wdGlvbmFsPENhbGxPckFwcGx5RGVwdGhTY29wZT4gY2FsbE9yQXBwbHlEZXB0aFNj
b3BlOwotICAgICAgICAgICAgICAgIHJlY29yZENhbGxPckFwcGx5RGVwdGg8VHJlZUJ1aWxkZXI+
KHRoaXMsICptX3ZtLCBjYWxsT3JBcHBseURlcHRoU2NvcGUsIGJhc2UpOworICAgICAgICAgICAg
ICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0
YXRlLm5vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMg
PSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudDsKKyAgICAgICAgICAgICAgICBUcmVlRXhw
cmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJzZSBzdWJzY3JpcHQgZXhwcmVz
c2lvbiIpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nl
c3Moc3RhcnRMb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRpYWxBc3NpZ25tZW50cyAhPSBt
X3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9u
RW5kLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwogCi0gICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50
cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIgJiYgY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlv
bigpKSkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uU2NvcGUoKS0+c2V0SW5u
ZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVyUHJvcGVydHkoKTsKIAotICAgICAgICAgICAgICAgIGlm
IChiYXNlSXNBc3luY0tleXdvcmQgJiYgKCFhcmd1bWVudHMgfHwgbWF0Y2goQVJST1dGVU5DVElP
TikpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT5yZXZlcnRUb1ByZXZp
b3VzVXNlZFZhcmlhYmxlcyh1c2VkVmFyaWFibGVzU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGZvcmNlQ2xhc3NpZnlFeHByZXNzaW9uRXJyb3IoRXJyb3JJbmRpY2F0ZXNBc3luY0Fycm93RnVu
Y3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBmYWlsRHVlVG9VbmV4cGVjdGVkVG9rZW4oKTsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFp
bChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIsICJzdWJzY3JpcHQgZXhwcmVzc2lvbiIpOworICAg
ICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgT1BF
TlBBUkVOOiB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVz
c2lvbkNvdW50Kys7CisgICAgICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJT
dGF0ZS5ub25MSFNDb3VudDsKKyAgICAgICAgICAgICAgICBpZiAobmV3Q291bnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbmV3Q291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgSlNUZXh0UG9z
aXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CisgICAgICAgICAg
ICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4
dCk7CisgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBw
YXJzZSBjYWxsIGFyZ3VtZW50cyIpOworICAgICAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4
dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFy
dCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzZWRWYXJpYWJsZXNTaXpl
ID0gY3VycmVudFNjb3BlKCktPmN1cnJlbnRVc2VkVmFyaWFibGVzU2l6ZSgpOworICAgICAgICAg
ICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9z
aXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWw8Q2FsbE9yQXBwbHlEZXB0aFNj
b3BlPiBjYWxsT3JBcHBseURlcHRoU2NvcGU7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZENh
bGxPckFwcGx5RGVwdGg8VHJlZUJ1aWxkZXI+KHRoaXMsICptX3ZtLCBjYWxsT3JBcHBseURlcHRo
U2NvcGUsIGJhc2UpOworCisgICAgICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1l
bnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCk7CiAKLSAgICAgICAgICAgICAgICBmYWlsSWZG
YWxzZShhcmd1bWVudHMsICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1bWVudHMiKTsKLSAgICAgICAg
ICAgICAgICBpZiAoYmFzZUlzU3VwZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgU2NvcGVSZWYg
ZnVuY3Rpb25TY29wZSA9IGN1cnJlbnRGdW5jdGlvblNjb3BlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghZnVuY3Rpb25TY29wZS0+c2V0SGFzRGlyZWN0U3VwZXIoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSXQgdW5uZWNlc3NhcnkgdG8gY2hlY2sgb2YgdXNpbmcgc3VwZXIg
ZHVyaW5nIHJlcGFyc2luZyBvbmUgbW9yZSB0aW1lLiBBbHNvIGl0IGNhbiBsZWFkIHRvIHN5bnRh
eCBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBhcnJvdyBmdW5j
dGlvbiBiZWNhdXNlIGR1cmluZyByZXBhcnNpbmcgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGN1
cnJlbnRseSBwYXJzZSB0aGUgYXJyb3cgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGluc2lkZSBvZiB0aGUgY29uc3RydWN0b3Igb3IgbWV0aG9kLgotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2xleGVyLT5pc1JlcGFyc2luZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTY29wZVJlZiBjbG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3Bl
ID0gY2xvc2VzdFBhcmVudE9yZGluYXJ5RnVuY3Rpb25Ob25MZXhpY2FsU2NvcGUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvcktpbmQgZnVuY3Rpb25Db25zdHJ1Y3Rv
cktpbmQgPSAhZnVuY3Rpb25TY29wZS0+aXNBcnJvd0Z1bmN0aW9uKCkgJiYgIWNsb3Nlc3RPcmRp
bmFyeUZ1bmN0aW9uU2NvcGUtPmlzRXZhbENvbnRleHQoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA/IGZ1bmN0aW9uU2NvcGUtPmNvbnN0cnVjdG9yS2luZCgpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZS0+Y29u
c3RydWN0b3JLaW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWls
SWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kID09IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwg
InN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgIT0g
Q29uc3RydWN0b3JLaW5kOjpFeHRlbmRzLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29u
dGV4dCIpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZUlzQXN5bmNLZXl3b3JkICYmICgh
YXJndW1lbnRzIHx8IG1hdGNoKEFSUk9XRlVOQ1RJT04pKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFNjb3BlKCktPnJldmVydFRvUHJldmlvdXNVc2VkVmFyaWFibGVzKHVzZWRW
YXJpYWJsZXNTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlQ2xhc3NpZnlFeHBy
ZXNzaW9uRXJyb3IoRXJyb3JJbmRpY2F0ZXNBc3luY0Fycm93RnVuY3Rpb24pOworICAgICAgICAg
ICAgICAgICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRva2VuKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMsICJD
YW5ub3QgcGFyc2UgY2FsbCBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJh
c2VJc1N1cGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTY29wZVJlZiBmdW5jdGlvblNj
b3BlID0gY3VycmVudEZ1bmN0aW9uU2NvcGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghZnVuY3Rpb25TY29wZS0+c2V0SGFzRGlyZWN0U3VwZXIoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEl0IHVubmVjZXNzYXJ5IHRvIGNoZWNrIG9mIHVzaW5nIHN1cGVyIGR1
cmluZyByZXBhcnNpbmcgb25lIG1vcmUgdGltZS4gQWxzbyBpdCBjYW4gbGVhZCB0byBzeW50YXgg
ZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGFycm93IGZ1
bmN0aW9uIGJlY2F1c2UgZHVyaW5nIHJlcGFyc2luZyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgd2Ug
Y3VycmVudGx5IHBhcnNlIHRoZSBhcnJvdyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGluc2lkZSBvZiB0aGUgY29uc3RydWN0b3Igb3IgbWV0aG9kLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbV9sZXhlci0+aXNSZXBhcnNpbmdGdW5jdGlvbigpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjb3BlUmVmIGNsb3Nlc3RPcmRpbmFy
eUZ1bmN0aW9uU2NvcGUgPSBjbG9zZXN0UGFyZW50T3JkaW5hcnlGdW5jdGlvbk5vbkxleGljYWxT
Y29wZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvcktpbmQg
ZnVuY3Rpb25Db25zdHJ1Y3RvcktpbmQgPSAhZnVuY3Rpb25TY29wZS0+aXNBcnJvd0Z1bmN0aW9u
KCkgJiYgIWNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmlzRXZhbENvbnRleHQoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmdW5jdGlvblNjb3BlLT5jb25zdHJ1
Y3RvcktpbmQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbG9zZXN0
T3JkaW5hcnlGdW5jdGlvblNjb3BlLT5jb25zdHJ1Y3RvcktpbmQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JL
aW5kID09IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlz
IGNvbnRleHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWls
SWZUcnVlKGZ1bmN0aW9uQ29uc3RydWN0b3JLaW5kICE9IENvbnN0cnVjdG9yS2luZDo6RXh0ZW5k
cywgInN1cGVyIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPnNldElubmVyQXJyb3dGdW5jdGlv
blVzZXNTdXBlckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1N1cGVy
Q2FsbCgpOworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNPcHRpb25hbENhbGwgPSBvcHRp
b25hbENoYWluTG9jYXRpb24uZW5kT2Zmc2V0ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihleHBy
ZXNzaW9uRW5kLm9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1h
a2VGdW5jdGlvbkNhbGxOb2RlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIHByZXZpb3VzQmFzZVdhc1N1
cGVyLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGNhbGxPckFwcGx5RGVwdGhT
Y29wZSA/IGNhbGxPckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFuY2VUb0lubmVybW9zdENoaWxkKCkg
OiAwLCBpc09wdGlvbmFsQ2FsbCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzT3B0aW9u
YWxDYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxDaGFpbkJhc2UgPSBiYXNl
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5tYWtl
RnVuY3Rpb25DYWxsTm9kZShzdGFydExvY2F0aW9uLCBiYXNlLCBwcmV2aW91c0Jhc2VXYXNTdXBl
ciwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQsCi0gICAgICAgICAgICAgICAgICAgIGV4cHJl
c3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGNhbGxPckFwcGx5RGVwdGhTY29wZSA/
IGNhbGxPckFwcGx5RGVwdGhTY29wZS0+ZGlzdGFuY2VUb0lubmVybW9zdENoaWxkKCkgOiAwKTsK
KyAgICAgICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3Bh
cnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIERPVDogewotICAgICAgICAgICAgbV9wYXJzZXJTdGF0
ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBKU1RleHRQb3NpdGlv
biBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgIG5l
eHRFeHBlY3RJZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1
aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKLSAgICAgICAgICAgIG1hdGNoT3JGYWlsKElERU5U
LCAiRXhwZWN0ZWQgYSBwcm9wZXJ0eSBuYW1lIGFmdGVyICcuJyIpOwotICAgICAgICAgICAgYmFz
ZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIG1fdG9rZW4u
bV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9z
aXRpb24oKSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoYmFzZUlzU3VwZXIgJiYgY3VycmVu
dFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50RnVu
Y3Rpb25TY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzU3VwZXJQcm9wZXJ0eSgpOwot
ICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBCQUNLUVVPVEU6IHsKLSAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNl
SXNTdXBlciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGFnIGZvciB0YWdnZWQgdGVtcGxhdGVzIik7
Ci0gICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5k
UG9zaXRpb24oKTsKLSAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUu
bm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6VGVtcGxhdGVM
aXRlcmFsIHRlbXBsYXRlTGl0ZXJhbCA9IHBhcnNlVGVtcGxhdGVMaXRlcmFsKGNvbnRleHQsIExl
eGVyVHlwZTo6UmF3U3RyaW5nc0J1aWxkTW9kZTo6QnVpbGRSYXdTdHJpbmdzKTsKLSAgICAgICAg
ICAgIGZhaWxJZkZhbHNlKHRlbXBsYXRlTGl0ZXJhbCwgIkNhbm5vdCBwYXJzZSB0ZW1wbGF0ZSBs
aXRlcmFsIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVUYWdnZWRUZW1wbGF0
ZShzdGFydExvY2F0aW9uLCBiYXNlLCB0ZW1wbGF0ZUxpdGVyYWwsIGV4cHJlc3Npb25TdGFydCwg
ZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBtX3Bh
cnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBtX3NlZW5U
YWdnZWRUZW1wbGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ290byBlbmRNZW1iZXJFeHByZXNzaW9uOworICAg
ICAgICAgICAgY2FzZSBET1Q6IHsKKyAgICAgICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRy
aXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBl
eHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBu
ZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVC
dWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CisgICAgICAgICAgICAgICAgbWF0Y2hPckZhaWwo
SURFTlQsICJFeHBlY3RlZCBhIHByb3BlcnR5IG5hbWUgYWZ0ZXIgIiwgb3B0aW9uYWxDaGFpbkJh
c2UgPyAiJz8uJyIgOiAiJy4nIik7CisgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3Jl
YXRlRG90QWNjZXNzKHN0YXJ0TG9jYXRpb24sIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlkZW50LCBl
eHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7CisgICAg
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VJc1N1cGVyICYmIGN1cnJlbnRTY29wZSgpLT5p
c0Fycm93RnVuY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblNj
b3BlKCktPnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNTdXBlclByb3BlcnR5KCk7CisgICAgICAg
ICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBCQUNLUVVPVEU6IHsKKyAgICAgICAgICAgICAgICBzZW1hbnRpY0Zh
aWxJZlRydWUob3B0aW9uYWxDaGFpbkJhc2UsICJDYW5ub3QgdXNlIHRhZ2dlZCB0ZW1wbGF0ZXMg
aW4gYW4gb3B0aW9uYWwgY2hhaW4iKTsKKyAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRy
dWUoYmFzZUlzU3VwZXIsICJDYW5ub3QgdXNlIHN1cGVyIGFzIHRhZyBmb3IgdGFnZ2VkIHRlbXBs
YXRlcyIpOworICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBs
YXN0VG9rZW5FbmRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9
IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CisgICAgICAgICAgICAgICAgdHlwZW5hbWUgVHJl
ZUJ1aWxkZXI6OlRlbXBsYXRlTGl0ZXJhbCB0ZW1wbGF0ZUxpdGVyYWwgPSBwYXJzZVRlbXBsYXRl
TGl0ZXJhbChjb250ZXh0LCBMZXhlclR5cGU6OlJhd1N0cmluZ3NCdWlsZE1vZGU6OkJ1aWxkUmF3
U3RyaW5ncyk7CisgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UodGVtcGxhdGVMaXRlcmFsLCAi
Q2Fubm90IHBhcnNlIHRlbXBsYXRlIGxpdGVyYWwiKTsKKyAgICAgICAgICAgICAgICBiYXNlID0g
Y29udGV4dC5jcmVhdGVUYWdnZWRUZW1wbGF0ZShzdGFydExvY2F0aW9uLCBiYXNlLCB0ZW1wbGF0
ZUxpdGVyYWwsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9z
aXRpb24oKSk7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5v
bkxIU0NvdW50OworICAgICAgICAgICAgICAgIG1fc2VlblRhZ2dlZFRlbXBsYXRlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgZ290byBlbmRPZkNoYWluOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcHJldmlvdXNCYXNlV2FzU3VwZXIgPSBiYXNlSXNTdXBlcjsKKyAgICAgICAgICAg
IGJhc2VJc1N1cGVyID0gZmFsc2U7CisgICAgICAgICAgICB0eXBlID0gbV90b2tlbi5tX3R5cGU7
CiAgICAgICAgIH0KLSAgICAgICAgcHJldmlvdXNCYXNlV2FzU3VwZXIgPSBiYXNlSXNTdXBlcjsK
LSAgICAgICAgYmFzZUlzU3VwZXIgPSBmYWxzZTsKLSAgICB9Ci1lbmRNZW1iZXJFeHByZXNzaW9u
OgorZW5kT2ZDaGFpbjoKKyAgICAgICAgaWYgKG9wdGlvbmFsQ2hhaW5CYXNlKQorICAgICAgICAg
ICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlT3B0aW9uYWxDaGFpbihvcHRpb25hbENoYWluTG9jYXRp
b24sIG9wdGlvbmFsQ2hhaW5CYXNlLCBiYXNlLCAhbWF0Y2goUVVFU1RJT05ET1QpKTsKKyAgICB9
IHdoaWxlIChtYXRjaChRVUVTVElPTkRPVCkpOworCiAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGJh
c2VJc1N1cGVyLCAic3VwZXIgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dCIpOwogICAgIHdo
aWxlIChuZXdDb3VudC0tKQogICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxv
Y2F0aW9uLCBiYXNlLCBleHByZXNzaW9uU3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKaW5kZXggMTVjYTVl
YWYyOGU3NTkyZjQzZjNkY2U0MWU4ZTQxZTYxYTllODEzNi4uNzIwNjRiOTI4NDgxNjZmNmRlMmIy
M2Y4YTNmNThjOTgxYjc2NzllOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJUb2tlbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlclRva2Vucy5oCkBAIC0xMzYsNiArMTM2LDcgQEAgZW51bSBKU1Rva2VuVHlwZSB7CiAgICAg
T1JFUVVBTCwKICAgICBET1RET1RET1QsCiAgICAgQVJST1dGVU5DVElPTiwKKyAgICBRVUVTVElP
TkRPVCwKICAgICBMYXN0VW50YWdnZWRUb2tlbiwKIAogICAgIC8vIEJlZ2luIHRhZ2dlZCB0b2tl
bnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKaW5kZXgg
NDE5OTU4YmVkYjQyODExYjE2Mjg0MDFjZDRhNDI5OGE1YTVjZjM3Ni4uNmNlNzNmN2ZjYzMzMDkx
N2Q2OGY5ZDFiZGQxYmVkOWJiZjg1MGM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9TeW50YXhDaGVja2VyLmgKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgICAgICBS
ZXNvbHZlRXZhbEV4cHIsIFJlc29sdmVFeHByLCBJbnRlZ2VyRXhwciwgRG91YmxlRXhwciwgU3Ry
aW5nRXhwciwgQmlnSW50RXhwciwKICAgICAgICAgVGhpc0V4cHIsIE51bGxFeHByLCBCb29sRXhw
ciwgUmVnRXhwRXhwciwgT2JqZWN0TGl0ZXJhbEV4cHIsCiAgICAgICAgIEZ1bmN0aW9uRXhwciwg
Q2xhc3NFeHByLCBTdXBlckV4cHIsIEltcG9ydEV4cHIsIEJyYWNrZXRFeHByLCBEb3RFeHByLCBD
YWxsRXhwciwKLSAgICAgICAgTmV3RXhwciwgUHJlRXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwg
QmluYXJ5RXhwciwKKyAgICAgICAgTmV3RXhwciwgUHJlRXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhw
ciwgQmluYXJ5RXhwciwgT3B0aW9uYWxDaGFpbiwKICAgICAgICAgQ29uZGl0aW9uYWxFeHByLCBB
c3NpZ25tZW50RXhwciwgVHlwZW9mRXhwciwKICAgICAgICAgRGVsZXRlRXhwciwgQXJyYXlMaXRl
cmFsRXhwciwgQmluZGluZ0Rlc3RydWN0dXJpbmcsIFJlc3RQYXJhbWV0ZXIsCiAgICAgICAgIEFy
cmF5RGVzdHJ1Y3R1cmluZywgT2JqZWN0RGVzdHJ1Y3R1cmluZywgU291cmNlRWxlbWVudHNSZXN1
bHQsCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBEb250QnVpbGRTdHJpbmdzID0gTGV4ZXJGbGFnc0RvbnRCdWlsZFN0cmluZ3M7CiAKICAgICBp
bnQgY3JlYXRlU291cmNlRWxlbWVudHMoKSB7IHJldHVybiBTb3VyY2VFbGVtZW50c1Jlc3VsdDsg
fQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIGludCwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50LCBzaXplX3QpIHsgcmV0dXJu
IENhbGxFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGludCwgaW50LCBpbnQs
IGludCwgc2l6ZV90LCBib29sKSB7IHJldHVybiBDYWxsRXhwcjsgfQogICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZUNvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlw
ZSBleHByKSB7IHJldHVybiBleHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgYXBwZW5kVG9Db21t
YUV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUmIGhlYWQsIEV4cHJl
c3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSBuZXh0KSB7IGhlYWQgPSBuZXh0OyByZXR1cm4gbmV4
dDsgfQogICAgIEV4cHJlc3Npb25UeXBlIG1ha2VBc3NpZ25Ob2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGJv
b2wsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CkBAIC0xODQsNiAr
MTg0LDcgQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlZ0V4cChjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlm
aWVyJiBmbGFncywgaW50KSB7IHJldHVybiBZYXJyOjpoYXNFcnJvcihZYXJyOjpjaGVja1N5bnRh
eChwYXR0ZXJuLnN0cmluZygpLCBmbGFncy5zdHJpbmcoKSkpID8gMCA6IFJlZ0V4cEV4cHI7IH0K
ICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0K
ICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQorICAgIEV4cHJl
c3Npb25UeXBlIGNyZWF0ZU9wdGlvbmFsQ2hhaW4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBib29sKSB7IHJldHVybiBPcHRpb25hbENoYWlu
OyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29uZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5
cGUpIHsgcmV0dXJuIENvbmRpdGlvbmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZUFzc2lnblJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYs
IEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBBc3NpZ25tZW50Q29udGV4dCkgeyByZXR1
cm4gQXNzaWdubWVudEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVFbXB0eVZhckV4
cHJlc3Npb24oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYpIHsgcmV0
dXJuIEFzc2lnbm1lbnRFeHByOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCmluZGV4IDE1NmMxODBlMTgzNDdmNDdjOTM5MDQ1OWU1
ZDIxNzUxMWI5ODMxZmYuLjllNzU4OTJlNTA3NjU3MTUyYmNiMzczYjZmMGI1ODgyNmMxNTRjMjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuY3BwCkBAIC0xNzYsNiArMTc2LDEwIEBAIHN0YXRpYyBTdHJpbmcgZnVuY3Rpb25DYWxsQmFz
ZShjb25zdCBTdHJpbmcmIHNvdXJjZVRleHQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAg
ICB9CiAKKyAgICAvLyBEb24ndCBkaXNwbGF5IHRoZSA/LiBvZiBhbiBvcHRpb25hbCBjYWxsLgor
ICAgIGlmIChpZHggPiAxICYmIHNvdXJjZVRleHRbaWR4XSA9PSAnLicgJiYgc291cmNlVGV4dFtp
ZHggLSAxXSA9PSAnPycpCisgICAgICAgIGlkeCAtPSAyOworCiAgICAgcmV0dXJuIHNvdXJjZVRl
eHQubGVmdChpZHggKyAxKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCmluZGV4IGI0NzY3MzdmZTAwMzYxZGY1YzM5ODRkZjNlZDYzOGZhNDJmMmY2Y2IuLjE2Yjg5
ZDExODc5M2QyZTQzMDU2MDRhZGIzNTA5ODU3OWRmN2JhMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQ5Nyw3ICs0OTcsNyBAQCBjb25zdGV4cHIgYm9vbCBl
bmFibGVXZWJBc3NlbWJseVN0cmVhbWluZ0FwaSA9IGZhbHNlOwogICAgIHYoYm9vbCwgdXNlV2Vi
QXNzZW1ibHlSZWZlcmVuY2VzLCBmYWxzZSwgTm9ybWFsLCAiQWxsb3cgdHlwZXMgZnJvbSB0aGUg
d2FzbSByZWZlcmVuY2VzIHNwZWMuIikgXAogICAgIHYoYm9vbCwgdXNlV2Vha1JlZnMsIGZhbHNl
LCBOb3JtYWwsICJFeHBvc2UgdGhlIFdlYWtSZWYgY29uc3RydWN0b3IuIikgXAogICAgIHYoYm9v
bCwgdXNlQmlnSW50LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBlbmFibGUgQmln
SW50IHN1cHBvcnQuIikgXAotICAgIHYoYm9vbCwgdXNlTnVsbGlzaENvYWxlc2NpbmcsIGZhbHNl
LCBOb3JtYWwsICJFbmFibGUgc3VwcG9ydCBmb3IgdGhlID8/IG9wZXJhdG9yLiIpIFwKKyAgICB2
KGJvb2wsIHVzZU51bGxpc2hBd2FyZU9wZXJhdG9ycywgZmFsc2UsIE5vcm1hbCwgIkVuYWJsZSBz
dXBwb3J0IGZvciA/LiBhbmQgPz8gb3BlcmF0b3JzLiIpIFwKICAgICB2KGJvb2wsIHVzZUFycmF5
QWxsb2NhdGlvblByb2ZpbGluZywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ug
b3VyIG5vcm1hbCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGluZy4gSWYgZmFsc2UsIHRoZSBhbGxv
Y2F0aW9uIHByb2ZpbGUgd2lsbCBhbHdheXMgY2xhaW0gdG8gYmUgdW5kZWNpZGVkLiIpIFwKICAg
ICB2KGJvb2wsIGZvcmNlUG9seVByb3RvLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgY3JlYXRl
X3RoaXMgd2lsbCBhbHdheXMgY3JlYXRlIGFuIG9iamVjdCB3aXRoIGEgcG9seSBwcm90byBzdHJ1
Y3R1cmUuIikgXAogICAgIHYoYm9vbCwgZm9yY2VNaW5pVk1Nb2RlLCBmYWxzZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgaXQgd2lsbCBmb3JjZSBtaW5pIFZNIG1vZGUgb24uIikgXApkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDE3Y2RhMWEwYjM4YTZkZWY5
MGFkMzM0NWMyMjZjZWIwZDdlNTc2MjAuLjE5YTkzMWU4NGM2NjM5MzYwNGIzMGE4MTI1NDcwMDcx
MjM5OGIyYTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAxOS0wOC0xNCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2ly
c2xpbmdAc29ueS5jb20+CisKKyAgICAgICAgW0VTTmV4dF0gSW1wbGVtZW50IG9wdGlvbmFsIGNo
YWluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDAxOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMDgtMTMgIFNhbSBXZWluaWcg
IDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBTdHJpbmdCdWlsZGVyOjphcHBl
bmQoVUNoYXIzMikgdG8gU3RyaW5nQnVpbGRlcjo6YXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIpIHRv
IGF2b2lkIGFjY2lkZW50YWwgY2hhbmdlIGluIGJlaGF2aW9yIHdoZW4gcmVwbGFjaW5nIGFwcGVu
ZCB3aXRoIGZsZXhpYmxlQXBwZW5kCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwppbmRleCA4
M2RjMDYyYWIyODIxMTYxYTkzMWMyYWJlNDNkZjVmNjY5YTg4ZGE5Li4wOTg3MjM1MzYwZDI0NDRk
MTdiYmU5YzNhOGJlYWUxYmM5MWU5OTRlIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1q
c2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMK
QEAgLTY5OSw4ICs2OTksOCBAQCBkZWYgcnVuQmlnSW50RW5hYmxlZCgqb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKQogICAgIHJ1bigiYmlnLWludC1lbmFibGVkIiwgIi0tdXNlQmlnSW50PXRy
dWUiICwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQK
IAotZGVmIHJ1bk51bGxpc2hDb2FsZXNjaW5nRW5hYmxlZCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKQotICAgIHJ1bigibnVsbGlzaC1jb2FsZXNjaW5nLWVuYWJsZWQiLCAiLS11c2VOdWxs
aXNoQ29hbGVzY2luZz10cnVlIiAsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQorZGVmIHJ1bk51bGxpc2hBd2FyZU9wZXJhdG9yc0VuYWJsZWQoKm9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykKKyAgICBydW4oIm51bGxpc2gtYXdhcmUtb3BlcmF0b3JzLWVu
YWJsZWQiLCAiLS11c2VOdWxsaXNoQXdhcmVPcGVyYXRvcnM9dHJ1ZSIgLCAqKEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklU
KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5n
ZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQwYTQ4MzUyNzJhYmE5MjMxYTA0YTY5MWZm
ZWU3MTVmZjFiNjZhNWMuLmNhMzRjNDEwNzYwOGJlNTc1ZjNjM2IyNDE5MjgxYmVmZjc5M2ZkMTYg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTktMDgtMTQgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5n
QHNvbnkuY29tPgorCisgICAgICAgIFtFU05leHRdIEltcGxlbWVudCBvcHRpb25hbCBjaGFpbmlu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMTk5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJl
c3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzOgorICAgICAgICAqIHN0cmVzcy9vcHRpb25hbC1jaGFp
bmluZy5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL3RhaWwtY2FsbC1yZWNvZ25pemUuanM6
CisKIDIwMTktMDgtMDggIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgog
CiAgICAgICAgIFtKU0NdIEFkZCAianVtcCBpZiAobm90KSB1bmRlZmluZWQgb3IgbnVsbCIgYnl0
ZWNvZGUgb3BzCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9udWxsaXNoLWNvYWxlc2Npbmcu
anMgYi9KU1Rlc3RzL3N0cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanMKaW5kZXggZjNkZGNhNzA1
YmQzMTQ1MmNhNmE0NTU1MTM5NjBhOWQxMWFlMzE5ZC4uOGNiYWQ0NDQzNWYyZmNkMDUyODY0MTM4
ZWUwYjdjNWMzZjhiMDI4MSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2Fs
ZXNjaW5nLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qcwpAQCAt
MSw0ICsxLDQgQEAKLS8vQCBydW5OdWxsaXNoQ29hbGVzY2luZ0VuYWJsZWQKKy8vQCBydW5OdWxs
aXNoQXdhcmVPcGVyYXRvcnNFbmFibGVkCiAKIGZ1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhw
ZWN0ZWQpIHsKICAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvc3RyZXNzL29wdGlvbmFsLWNoYWluaW5nLmpzIGIvSlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwt
Y2hhaW5pbmcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjc2Nzk0OTBhZTIxOTg2ZmM4ZjRiZWY3ODBhMmQxZDUy
MzBlODc2NwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL29wdGlvbmFsLWNoYWlu
aW5nLmpzCkBAIC0wLDAgKzEsMTYyIEBACisvL0AgcnVuTnVsbGlzaEF3YXJlT3BlcmF0b3JzRW5h
YmxlZAorCitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFj
dHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtl
eHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH1gKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3dT
eW50YXhFcnJvcihzY3JpcHQpIHsKKyAgICBsZXQgZXJyb3I7CisgICAgdHJ5IHsKKyAgICAgICAg
ZXZhbChzY3JpcHQpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAg
IH0KKworICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFN5bnRheEVycm9yIScpOworfQorCitmdW5jdGlvbiBz
aG91bGRUaHJvd1R5cGVFcnJvcihmdW5jLCBtZXNzYWdlUHJlZml4KSB7CisgICAgbGV0IGVycm9y
OworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IGVycm9yID0gZTsKKyAgICB9CisKKyAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJv
cikpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgVHlwZUVycm9yIScpOworCisg
ICAgaWYgKCFlcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgobWVzc2FnZVByZWZpeCkpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcignVHlwZUVycm9yIGhhcyB3cm9uZyBtZXNzYWdlIScpOworfQorCitj
b25zdCBtYXNxdWVyYWRlciA9IG1ha2VNYXNxdWVyYWRlcigpOworbWFzcXVlcmFkZXIuZm9vID0g
MzsKKworZnVuY3Rpb24gdGVzdEJhc2ljQ2FzZXMoKSB7CisgICAgc2hvdWxkQmUodW5kZWZpbmVk
Py52YWx1ZU9mKCksIHVuZGVmaW5lZCk7CisgICAgc2hvdWxkQmUobnVsbD8udmFsdWVPZigpLCB1
bmRlZmluZWQpOworICAgIHNob3VsZEJlKHRydWU/LnZhbHVlT2YoKSwgdHJ1ZSk7CisgICAgc2hv
dWxkQmUoZmFsc2U/LnZhbHVlT2YoKSwgZmFsc2UpOworICAgIHNob3VsZEJlKDA/LnZhbHVlT2Yo
KSwgMCk7CisgICAgc2hvdWxkQmUoMT8udmFsdWVPZigpLCAxKTsKKyAgICBzaG91bGRCZSgnJz8u
dmFsdWVPZigpLCAnJyk7CisgICAgc2hvdWxkQmUoJ2hpJz8udmFsdWVPZigpLCAnaGknKTsKKyAg
ICBzaG91bGRCZSgoe30pPy5jb25zdHJ1Y3RvciwgT2JqZWN0KTsKKyAgICBzaG91bGRCZSgoeyB4
OiAnaGknIH0pPy54LCAnaGknKTsKKyAgICBzaG91bGRCZShbXT8ubGVuZ3RoLCAwKTsKKyAgICBz
aG91bGRCZShbJ2hpJ10/Lmxlbmd0aCwgMSk7CisgICAgc2hvdWxkQmUobWFzcXVlcmFkZXI/LmZv
bywgMyk7CisKKyAgICBzaG91bGRCZSh1bmRlZmluZWQ/LlsndmFsdWVPZiddKCksIHVuZGVmaW5l
ZCk7CisgICAgc2hvdWxkQmUobnVsbD8uWyd2YWx1ZU9mJ10oKSwgdW5kZWZpbmVkKTsKKyAgICBz
aG91bGRCZSh0cnVlPy5bJ3ZhbHVlT2YnXSgpLCB0cnVlKTsKKyAgICBzaG91bGRCZShmYWxzZT8u
Wyd2YWx1ZU9mJ10oKSwgZmFsc2UpOworICAgIHNob3VsZEJlKDA/LlsndmFsdWVPZiddKCksIDAp
OworICAgIHNob3VsZEJlKDE/LlsndmFsdWVPZiddKCksIDEpOworICAgIHNob3VsZEJlKCcnPy5b
J3ZhbHVlT2YnXSgpLCAnJyk7CisgICAgc2hvdWxkQmUoJ2hpJz8uWyd2YWx1ZU9mJ10oKSwgJ2hp
Jyk7CisgICAgc2hvdWxkQmUoKHt9KT8uWydjb25zdHJ1Y3RvciddLCBPYmplY3QpOworICAgIHNo
b3VsZEJlKCh7IHg6ICdoaScgfSk/LlsneCddLCAnaGknKTsKKyAgICBzaG91bGRCZShbXT8uWyds
ZW5ndGgnXSwgMCk7CisgICAgc2hvdWxkQmUoWydoaSddPy5bMF0sICdoaScpOworICAgIHNob3Vs
ZEJlKG1hc3F1ZXJhZGVyPy5bJ2ZvbyddLCAzKTsKKworICAgIHNob3VsZEJlKHVuZGVmaW5lZD8u
KCksIHVuZGVmaW5lZCk7CisgICAgc2hvdWxkQmUobnVsbD8uKCksIHVuZGVmaW5lZCk7CisgICAg
c2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gdHJ1ZT8uKCksICd0cnVlIGlzIG5vdCBhIGZ1bmN0
aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gZmFsc2U/LigpLCAnZmFsc2Ug
aXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAwPy4o
KSwgJzAgaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9
PiAxPy4oKSwgJzEgaXMgbm90IGEgZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJv
cigoKSA9PiAnJz8uKCksICdcJ1wnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CisgICAgc2hvdWxkVGhy
b3dUeXBlRXJyb3IoKCkgPT4gJ2hpJz8uKCksICdcJ2hpXCcgaXMgbm90IGEgZnVuY3Rpb24nKTsK
KyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoe30pPy4oKSwgJyh7fSkgaXMgbm90IGEg
ZnVuY3Rpb24nKTsKKyAgICBzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoeyB4OiAnaGknIH0p
Py4oKSwgJyh7IHg6IFwnaGlcJyB9KSBpcyBub3QgYSBmdW5jdGlvbicpOworICAgIHNob3VsZFRo
cm93VHlwZUVycm9yKCgpID0+IFtdPy4oKSwgJ1tdIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CisgICAg
c2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gWydoaSddPy4oKSwgJ1tcJ2hpXCddIGlzIG5vdCBh
IGZ1bmN0aW9uJyk7CisgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gbWFzcXVlcmFkZXI/
LigpLCAnbWFzcXVlcmFkZXIgaXMgbm90IGEgZnVuY3Rpb24nKTsKK30KK25vSW5saW5lKHRlc3RC
YXNpY0Nhc2VzKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7IGkrKykKKyAgICB0ZXN0QmFz
aWNDYXNlcygpOworCitzaG91bGRUaHJvd1R5cGVFcnJvcigoKSA9PiAoe30pPy5pKCksICcoe30p
Py5pIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CitzaG91bGRCZSgoe30pLmk/LigpLCB1bmRlZmluZWQp
Oworc2hvdWxkQmUoKHt9KT8uaT8uKCksIHVuZGVmaW5lZCk7CitzaG91bGRUaHJvd1R5cGVFcnJv
cigoKSA9PiAoe30pPy5bJ2knXSgpLCAnKHt9KT8uW1wnaVwnXSBpcyBub3QgYSBmdW5jdGlvbicp
Oworc2hvdWxkQmUoKHt9KVsnaSddPy4oKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKCh7fSk/Llsn
aSddPy4oKSwgdW5kZWZpbmVkKTsKKworc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4gKHt9KT8u
YVsnYiddLCAndW5kZWZpbmVkIGlzIG5vdCBhbiBvYmplY3QnKTsKK3Nob3VsZEJlKCh7fSk/LmE/
LlsnYiddLCB1bmRlZmluZWQpOworc2hvdWxkQmUobnVsbD8uYVsnYiddKCkuYywgdW5kZWZpbmVk
KTsKK3Nob3VsZFRocm93VHlwZUVycm9yKCgpID0+ICh7fSk/LlsnYSddLmIsICd1bmRlZmluZWQg
aXMgbm90IGFuIG9iamVjdCcpOworc2hvdWxkQmUoKHt9KT8uWydhJ10/LmIsIHVuZGVmaW5lZCk7
CitzaG91bGRCZShudWxsPy5bJ2EnXS5iKClbJ2MnXSwgdW5kZWZpbmVkKTsKK3Nob3VsZFRocm93
VHlwZUVycm9yKCgpID0+ICgoKSA9PiB7fSk/LigpKCksICcoKCkgPT4ge30pPy4oKSBpcyBub3Qg
YSBmdW5jdGlvbicpOworc2hvdWxkQmUoKCgpID0+IHt9KT8uKCk/LigpLCB1bmRlZmluZWQpOwor
c2hvdWxkQmUobnVsbD8uKCkoKS5hWydiJ10sIHVuZGVmaW5lZCk7CisKK2NvbnN0IG8wID0geyBh
OiB7IGIoKSB7IHJldHVybiB0aGlzLl9iLmJpbmQodGhpcyk7IH0sIF9iKCkgeyByZXR1cm4gdGhp
cy5fX2I7IH0sIF9fYjogeyBjOiA0MiB9IH0gfTsKK3Nob3VsZEJlKG8wPy5hPy5bJ2InXT8uKCk/
LigpPy5jLCA0Mik7CitzaG91bGRCZShvMD8uaT8uWydqJ10/LigpPy4oKT8uaywgdW5kZWZpbmVk
KTsKK3Nob3VsZEJlKChvMC5hPy5fYik/LigpLmMsIDQyKTsKK3Nob3VsZEJlKChvMC5hPy5fYiko
KS5jLCA0Mik7CisKK3Nob3VsZEJlKCh7IHVuZGVmaW5lZDogMyB9KT8uW251bGw/LmFdLCAzKTsK
K3Nob3VsZEJlKCgoKSA9PiAzKT8uKG51bGw/LmEpLCAzKTsKKworY29uc3QgbzEgPSB7IGNvdW50
OiAwLCBnZXQgeCgpIHsgdGhpcy5jb3VudCsrOyByZXR1cm4gKCkgPT4ge307IH0gfTsKK28xLng/
Lnk7CitzaG91bGRCZShvMS5jb3VudCwgMSk7CitvMS54Py5bJ3knXTsKK3Nob3VsZEJlKG8xLmNv
dW50LCAyKTsKK28xLng/LigpOworc2hvdWxkQmUobzEuY291bnQsIDMpOworbnVsbD8uKG8xLngp
Oworc2hvdWxkQmUobzEuY291bnQsIDMpOworCitzaG91bGRCZShkZWxldGUgdW5kZWZpbmVkPy5m
b28sIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIG51bGw/LmZvbywgdHJ1ZSk7CitzaG91bGRCZShk
ZWxldGUgdW5kZWZpbmVkPy5bJ2ZvbyddLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSBudWxsPy5b
J2ZvbyddLCB0cnVlKTsKK3Nob3VsZEJlKGRlbGV0ZSB1bmRlZmluZWQ/LigpLCB0cnVlKTsKK3No
b3VsZEJlKGRlbGV0ZSBudWxsPy4oKSwgdHJ1ZSk7CisKK2NvbnN0IG8yID0geyB4OiAwLCB5OiAw
LCB6KCkge30gfTsKK3Nob3VsZEJlKGRlbGV0ZSBvMj8ueCwgdHJ1ZSk7CitzaG91bGRCZShvMi54
LCB1bmRlZmluZWQpOworc2hvdWxkQmUoZGVsZXRlIG8yPy54LCB0cnVlKTsKK3Nob3VsZEJlKGRl
bGV0ZSBvMj8uWyd5J10sIHRydWUpOworc2hvdWxkQmUobzIueSwgdW5kZWZpbmVkKTsKK3Nob3Vs
ZEJlKGRlbGV0ZSBvMj8uWyd5J10sIHRydWUpOworc2hvdWxkQmUoZGVsZXRlIG8yLno/LigpLCB0
cnVlKTsKKworZnVuY3Rpb24gZ3JlZXQobmFtZSkgeyByZXR1cm4gYGhleSwgJHtuYW1lfSR7dGhp
cy5zdWZmaXggPz8gJy4nfWA7IH0KK3Nob3VsZEJlKGV2YWw/LignZ3JlZXQoIndvcmxkIiknKSwg
J2hleSwgd29ybGQuJyk7CitzaG91bGRCZShncmVldD8uY2FsbCh7IHN1ZmZpeDogJyEnIH0sICd3
b3JsZCcpLCAnaGV5LCB3b3JsZCEnKTsKK3Nob3VsZEJlKGdyZWV0LmNhbGw/Lih7IHN1ZmZpeDog
JyEnIH0sICd3b3JsZCcpLCAnaGV5LCB3b3JsZCEnKTsKK3Nob3VsZEJlKG51bGw/LmNhbGwoeyBz
dWZmaXg6ICchJyB9LCAnd29ybGQnKSwgdW5kZWZpbmVkKTsKK3Nob3VsZEJlKCh7fSkuY2FsbD8u
KHsgc3VmZml4OiAnIScgfSwgJ3dvcmxkJyksIHVuZGVmaW5lZCk7CitzaG91bGRCZShncmVldD8u
YXBwbHkoeyBzdWZmaXg6ICc/JyB9LCBbJ3dvcmxkJ10pLCAnaGV5LCB3b3JsZD8nKTsKK3Nob3Vs
ZEJlKGdyZWV0LmFwcGx5Py4oeyBzdWZmaXg6ICc/JyB9LCBbJ3dvcmxkJ10pLCAnaGV5LCB3b3Js
ZD8nKTsKK3Nob3VsZEJlKG51bGw/LmFwcGx5KHsgc3VmZml4OiAnPycgfSwgWyd3b3JsZCddKSwg
dW5kZWZpbmVkKTsKK3Nob3VsZEJlKCh7fSkuYXBwbHk/Lih7IHN1ZmZpeDogJz8nIH0sIFsnd29y
bGQnXSksIHVuZGVmaW5lZCk7CisKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NsYXNzIEMge30g
Y2xhc3MgRCBleHRlbmRzIEMgeyBmb28oKSB7IHJldHVybiBzdXBlcj8uYmFyOyB9IH0nKTsKK3No
b3VsZFRocm93U3ludGF4RXJyb3IoJ2NsYXNzIEMge30gY2xhc3MgRCBleHRlbmRzIEMgeyBmb28o
KSB7IHJldHVybiBzdXBlcj8uWyJiYXIiXTsgfSB9Jyk7CitzaG91bGRUaHJvd1N5bnRheEVycm9y
KCdjbGFzcyBDIHt9IGNsYXNzIEQgZXh0ZW5kcyBDIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyPy4o
KTsgfSB9Jyk7CisKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NvbnN0IG8gPSB7IEM6IGNsYXNz
IHt9IH07IG5ldyBvPy5DKCk7JykKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoJ2NvbnN0IG8gPSB7
IEM6IGNsYXNzIHt9IH07IG5ldyBvPy5bIkMiXSgpOycpCitzaG91bGRUaHJvd1N5bnRheEVycm9y
KCdjbGFzcyBDIHt9IG5ldyBDPy4oKTsnKQorc2hvdWxkVGhyb3dTeW50YXhFcnJvcignZnVuY3Rp
b24gZm9vKCkgeyBuZXc/LnRhcmdldDsgfScpOworCitzaG91bGRUaHJvd1N5bnRheEVycm9yKCdm
dW5jdGlvbiB0YWcoKSB7fSB0YWc/LmBgOycpOworc2hvdWxkVGhyb3dTeW50YXhFcnJvcignY29u
c3QgbyA9IHsgdGFnKCkge30gfTsgbz8udGFnYGA7Jyk7CisKKy8vIE5PVCBhbiBvcHRpb25hbCBj
aGFpbgorc2hvdWxkQmUoZmFsc2U/LjQ6NSwgNSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVz
cy90YWlsLWNhbGwtcmVjb2duaXplLmpzIGIvSlNUZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXJlY29n
bml6ZS5qcwppbmRleCAxNjgxZTQwMjAxZWQzY2U3ZTc5MTZjOWNhYjhlNTJiMTZjYTE3YWMwLi45
Y2MwZTMwNmZhY2Q3NDQ3NTFhNzk2MmE2ZTY1NzAyNzNkZDVlM2MxIDEwMDY0NAotLS0gYS9KU1Rl
c3RzL3N0cmVzcy90YWlsLWNhbGwtcmVjb2duaXplLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3Rh
aWwtY2FsbC1yZWNvZ25pemUuanMKQEAgLTEsMyArMSw1IEBACisvL0AgcnVuTnVsbGlzaEF3YXJl
T3BlcmF0b3JzRW5hYmxlZAorCiBmdW5jdGlvbiBjYWxsZXJNdXN0QmVSdW4oKSB7CiAgICAgaWYg
KCFPYmplY3QuaXMoY2FsbGVyTXVzdEJlUnVuLmNhbGxlciwgcnVuVGVzdHMpKQogICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIldyb25nIGNhbGxlciwgZXhwZWN0ZWQgcnVuIGJ1dCBnb3QgIiwgY2Fs
bGVyTXVzdEJlUnVuLmNhbGxlcik7CkBAIC0xNTAsNiArMTUyLDExIEBAIGZ1bmN0aW9uIHJ1blRl
c3RzKCkgewogICAgICAgICByZXR1cm4gZmFsc2UgfHwgY2FsbGVyTXVzdEJlUnVuKCk7CiAgICAg
fSkoKTsKIAorICAgIChmdW5jdGlvbiB0YWlsQ2FsbENvYWxlc2NlKCkgeworICAgICAgICAidXNl
IHN0cmljdCI7CisgICAgICAgIHJldHVybiBmYWxzZSA/PyBjYWxsZXJNdXN0QmVSdW4oKTsKKyAg
ICB9KSgpOworCiAgICAgKGZ1bmN0aW9uIG1lbWJlclRhaWxDYWxsKCkgewogICAgICAgICAidXNl
IHN0cmljdCI7CiAgICAgICAgIHJldHVybiB7IGY6IGNhbGxlck11c3RCZVJ1biB9LmYoKTsKQEAg
LTE2MCw2ICsxNjcsMTEgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CiAgICAgICAgIHJldHVybiBj
YWxsZXJNdXN0QmVSdW4uYmluZCgpKCk7CiAgICAgfSkoKTsKIAorICAgIChmdW5jdGlvbiBvcHRp
b25hbFRhaWxDYWxsKCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHJldHVybiBj
YWxsZXJNdXN0QmVSdW4/LigpOworICAgIH0pKCk7CisKICAgICAvLyBGdW5jdGlvbi5wcm90b3R5
cGUgdGVzdHMKIAogICAgIChmdW5jdGlvbiBhcHBseVRhaWxDYWxsKCkgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>