<?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>215755</bug_id>
          
          <creation_ts>2020-08-22 15:20:10 -0700</creation_ts>
          <short_desc>Remove almost all the remaining uses of live ranges</short_desc>
          <delta_ts>2020-10-20 21:37:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>217895</blocked>
    
    <blocked>218007</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>berto</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>rniwa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1682180</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-22 15:20:10 -0700</bug_when>
    <thetext>Remove almost all the remaining uses of live ranges</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682253</commentid>
    <comment_count>1</comment_count>
      <attachid>407078</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-23 12:16:42 -0700</bug_when>
    <thetext>Created attachment 407078
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682884</commentid>
    <comment_count>2</comment_count>
      <attachid>407262</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-25 19:29:24 -0700</bug_when>
    <thetext>Created attachment 407262
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683142</commentid>
    <comment_count>3</comment_count>
      <attachid>407339</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-26 14:44:55 -0700</bug_when>
    <thetext>Created attachment 407339
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683147</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-08-26 14:45:36 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683177</commentid>
    <comment_count>5</comment_count>
      <attachid>407347</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-26 15:51:42 -0700</bug_when>
    <thetext>Created attachment 407347
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683180</commentid>
    <comment_count>6</comment_count>
      <attachid>407348</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-26 16:10:13 -0700</bug_when>
    <thetext>Created attachment 407348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683207</commentid>
    <comment_count>7</comment_count>
      <attachid>407348</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-26 17:04:29 -0700</bug_when>
    <thetext>Comment on attachment 407348
Patch

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

Tests are passing. Review time.

&gt; Source/WebKitLegacy/mac/DOM/DOMUIKitExtensions.mm:127
&gt; +// FIXME: Could use SimpleRange::intersectingNodes instead, if we did not want to preserve the historical behavior of returning a node with no children when the range starts inside it.

Since I wrote this comment, I added intersectingNodesWithDeprecatedZeroOffsetStartQuirk, which I could use here, especially if I added a IntersectingNodeRangeWithQuirk::first() function, like ElementChildRange::first.

&gt; Tools/ChangeLog:9
&gt; +        * TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp:
&gt; +        (TestWebKitAPI::TEST): Added a test case for a non-user-agent shadow tree.

Oops, I did more than that! I’ll write a more complete change log entry.

&gt; Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/xcshareddata/xcschemes/TestWebKitAPI.xcscheme:58
&gt; +      &lt;CommandLineArguments&gt;
&gt; +         &lt;CommandLineArgument
&gt; +            argument = &quot;--gtest_filter=*DocumentOrder*&quot;
&gt; +            isEnabled = &quot;YES&quot;&gt;
&gt; +         &lt;/CommandLineArgument&gt;
&gt; +      &lt;/CommandLineArguments&gt;

Probably should not land this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683445</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-27 11:53:08 -0700</bug_when>
    <thetext>Oops, looks like we still have an assertion failure in the test: editing/pasteboard/copy-across-shadow-boundaries-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683554</commentid>
    <comment_count>9</comment_count>
      <attachid>407443</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-27 19:04:15 -0700</bug_when>
    <thetext>Created attachment 407443
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683678</commentid>
    <comment_count>10</comment_count>
      <attachid>407478</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-28 10:16:29 -0700</bug_when>
    <thetext>Created attachment 407478
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683710</commentid>
    <comment_count>11</comment_count>
      <attachid>407478</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-08-28 11:21:46 -0700</bug_when>
    <thetext>Comment on attachment 407478
Patch

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

This is such a fantastic change for improving the readability and understandability of this code.

&gt; Source/WebCore/dom/SimpleRange.cpp:249
&gt; +// FIXME: Name this &quot;unionRange&quot; instead? The word &quot;union&quot; is a noun more than a verb. Would like to call it just union if it wasn&apos;t for the conflict with the C keyword.

This would also make it consistent with the FloatRect/IntRect naming, unionRect(a, b).

&gt; Source/WebCore/testing/Internals.cpp:2172
&gt; +// FIXME: Find a good place for this general purpose algorithm.
&gt; +static String join(Vector&lt;String&gt;&amp;&amp; strings)

Not for this change, but it should probably go in StringConcatenate.h, as it is the moral equivalent to makeString(). Wish I could think of a good way to make a generic join() operator for StringBuilder/makeString, but my efforts so far have been kind of bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683739</commentid>
    <comment_count>12</comment_count>
      <attachid>407495</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-28 12:23:19 -0700</bug_when>
    <thetext>Created attachment 407495
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683757</commentid>
    <comment_count>13</comment_count>
      <attachid>407478</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-28 14:04:55 -0700</bug_when>
    <thetext>Comment on attachment 407478
Patch

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

&gt;&gt; Source/WebCore/dom/SimpleRange.cpp:249
&gt;&gt; +// FIXME: Name this &quot;unionRange&quot; instead? The word &quot;union&quot; is a noun more than a verb. Would like to call it just union if it wasn&apos;t for the conflict with the C keyword.
&gt; 
&gt; This would also make it consistent with the FloatRect/IntRect naming, unionRect(a, b).

OK, renaming to unionRange.

&gt;&gt; Source/WebCore/testing/Internals.cpp:2172
&gt;&gt; +static String join(Vector&lt;String&gt;&amp;&amp; strings)
&gt; 
&gt; Not for this change, but it should probably go in StringConcatenate.h, as it is the moral equivalent to makeString(). Wish I could think of a good way to make a generic join() operator for StringBuilder/makeString, but my efforts so far have been kind of bad.

Should we just add this feature to makeString? Then the call site could just call makeString instead of join. Seems like we could flatten any vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683771</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-28 14:37:12 -0700</bug_when>
    <thetext>Committed r266295: &lt;https://trac.webkit.org/changeset/266295&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407495.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683774</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-28 14:38:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/67962384&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699060</commentid>
    <comment_count>16</comment_count>
      <attachid>407495</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-17 23:28:12 -0700</bug_when>
    <thetext>Comment on attachment 407495
Patch

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

&gt; Source/WebCore/dom/Node.cpp:2634
&gt; -    while ((ancestor = ancestor-&gt;parentOrShadowHostNode()))
&gt; +    while ((ancestor = ancestor-&gt;parentInComposedTree()))

Hm... I&apos;m not certain that this is right. Unless we&apos;re doing tree traversal in the composed tree order,
which is only really used for rendering operations, we should be using parentOrShadowHostNode().

In general, the DOM spec only defines the ordering for nodes in the same tree
https://dom.spec.whatwg.org/#concept-tree-order
https://dom.spec.whatwg.org/#concept-tree-preceding

So if this is used in some DOM API implementations, we need to figure out which tree traversal strategy should be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699061</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-17 23:38:00 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #16)
&gt; Comment on attachment 407495 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407495&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Node.cpp:2634
&gt; &gt; -    while ((ancestor = ancestor-&gt;parentOrShadowHostNode()))
&gt; &gt; +    while ((ancestor = ancestor-&gt;parentInComposedTree()))
&gt; 
&gt; Hm... I&apos;m not certain that this is right. Unless we&apos;re doing tree traversal
&gt; in the composed tree order,
&gt; which is only really used for rendering operations, we should be using
&gt; parentOrShadowHostNode().
&gt; 
&gt; In general, the DOM spec only defines the ordering for nodes in the same tree
&gt; https://dom.spec.whatwg.org/#concept-tree-order
&gt; https://dom.spec.whatwg.org/#concept-tree-preceding
&gt; 
&gt; So if this is used in some DOM API implementations, we need to figure out
&gt; which tree traversal strategy should be used.

Actually, I think this change regressed Range API so that now we can set start &amp; end of Range to different trees. That&apos;s wrong.

We need to implement step 4.1 where we check the root node:
https://dom.spec.whatwg.org/#concept-range-bp-set</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699097</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-18 09:38:53 -0700</bug_when>
    <thetext>I did this intentionally.

We could have multiple documentOrder functions, some that worked across trees and some the worked within trees, some that used the composed tree and some that don&apos;t. If we need them.

But I am not sure we need them.

I know that editing code does need to know answers for the composed tree order.

I think in some cases the algorithm is specified and callers can’t have pointers inside shadow trees, so the restriction isn’t in the Range class itself, it’s in the rules about what node pointers callers could have.

But could definitely be wrong and happy to fix.

Could you please give me examples of how to write failing tests, to go beyond your critique of the code? If you do, then I can explain why I thought this approach would work, and do the right kind of fix.

&gt; Actually, I think this change regressed Range API so that now we can set start &amp; end of Range to different trees.

If it did that, where’s the failing test?

I am happy to fix this once this is cleared up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699145</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-18 15:40:53 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #18)
&gt; I did this intentionally.
&gt; 
&gt; We could have multiple documentOrder functions, some that worked across
&gt; trees and some the worked within trees, some that used the composed tree and
&gt; some that don&apos;t. If we need them.

Well, the trouble here is that this document order will only be correct for what the spec calls &quot;flat tree&quot;. For most DOM APIs, we should not be using the flat tree (or composed tree in our codebase&apos;s terminology) for ordering purposes.

&gt; I know that editing code does need to know answers for the composed tree
&gt; order.

I think this is more subtle point than that. There are some editing code that would have to use the composed tree when asked to work with the composed tree. But in other cases, we need to be ignoring the shadow trees.

&gt; I think in some cases the algorithm is specified and callers can’t have
&gt; pointers inside shadow trees, so the restriction isn’t in the Range class
&gt; itself, it’s in the rules about what node pointers callers could have.

That&apos;s not true. Range restricts that the root node of start &amp; end must be same:
https://dom.spec.whatwg.org/#concept-range-bp-set

&gt; But could definitely be wrong and happy to fix.

There is definitely a regression here. I&apos;ve tested it manually myself.

&gt; Could you please give me examples of how to write failing tests, to go
&gt; beyond your critique of the code? If you do, then I can explain why I
&gt; thought this approach would work, and do the right kind of fix.

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;body&gt;
&lt;script&gt;

const shadowHost = document.body.appendChild(document.createElement(&apos;div&apos;));
const shadowRoot = shadowHost.attachShadow({mode: &apos;closed&apos;});
shadowRoot.innerHTML = &apos;hello&apos;;

const range = document.createRange();
range.setStart(document.body, 0);
range.setEnd(shadowRoot, 1);

document.write(range.startContainer.getRootNode() == range.endContainer.getRootNode() ? &apos;PASS&apos; : &apos;FAIL&apos;);

&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699148</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-18 15:42:55 -0700</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=217895 to track the regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699156</commentid>
    <comment_count>21</comment_count>
      <attachid>407495</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-18 16:20:02 -0700</bug_when>
    <thetext>Comment on attachment 407495
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:304
&gt; -            if (createLiveRange(*misspellingRange)-&gt;compareBoundaryPoints(Range::END_TO_END, createLiveRange(start)).releaseReturnValue() &gt; 0)
&gt; +            if (misspellingRange &amp;&amp; is_gt(documentOrder(misspellingRange-&gt;end, start.end)))

For example, this code probably shouldn&apos;t be crossing shadow boundaries because content-editable doesn&apos;t carry across shadow boundaries.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:310
&gt; +            if (misspellingRange &amp;&amp; is_lt(documentOrder(misspellingRange-&gt;start, start.start)))

Ditto.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:588
&gt; +                    ? is_gt(documentOrder(foundStringRange-&gt;end, closestStringRange-&gt;end))
&gt; +                    : is_lt(documentOrder(foundStringRange-&gt;start, closestStringRange-&gt;start));

Whereas here, using the composed tree is correct because rangeOfString uses TextIteratorTraversesFlatTree.

&gt; Source/WebCore/dom/Node.cpp:2646
&gt; +// FIXME: This function&apos;s name is not explicit about the fact that it&apos;s the common inclusive ancestor in the composed tree.
&gt;  static AncestorAndChildren commonInclusiveAncestorAndChildren(const Node&amp; a, const Node&amp; b)

It&apos;s very dubious that this function considers slots. No HTML or DOM spec would use this algorithm.
DOM spec has the concept of shadow-including ancestors but it does not consider slots:
https://dom.spec.whatwg.org/#concept-shadow-including-inclusive-ancestor

I suspect this will cause a bunch of weird bugs or crashes in editing code
because now we end up finding a common ancestor that don&apos;t belong in the same tree.

&gt; Source/WebCore/dom/Node.cpp:2677
&gt; +// FIXME: This function&apos;s name is not explicit about the fact that it&apos;s the common inclusive ancestor in the composed tree.
&gt;  RefPtr&lt;Node&gt; commonInclusiveAncestor(Node&amp; a, Node&amp; b)

Ditto.

&gt; Source/WebCore/dom/Range.cpp:144
&gt; -ExceptionOr&lt;bool&gt; Range::isPointInRange(Node&amp; refNode, unsigned offset)
&gt; +ExceptionOr&lt;bool&gt; Range::isPointInRange(Node&amp; container, unsigned offset)

Same issue.

&gt; Source/WebCore/dom/Range.cpp:165
&gt; +    auto ordering = documentOrder({ container, offset }, makeSimpleRange(*this));

This is wrong. We&apos;re missing step 1 to check the root: https://dom.spec.whatwg.org/#dom-range-comparepoint

&gt; Source/WebCore/dom/Range.cpp:175
&gt; +ExceptionOr&lt;Range::CompareResults&gt; Range::compareNode(Node&amp; node) const

Ditto. Although this is a WebKit only API, I don&apos;t think we want to be changing our behavior.

&gt; Source/WebCore/dom/Range.cpp:209
&gt; -ExceptionOr&lt;short&gt; Range::compareBoundaryPointsForBindings(unsigned short how, const Range&amp; sourceRange) const
&gt; +ExceptionOr&lt;short&gt; Range::compareBoundaryPoints(unsigned short how, const Range&amp; sourceRange) const

Same issue here.

&gt; Source/WebCore/dom/Range.cpp:251
&gt; -ExceptionOr&lt;bool&gt; Range::intersectsNode(Node&amp; refNode) const
&gt; +bool Range::intersectsNode(Node&amp; node) const

Same issue as other functions.

&gt; Source/WebCore/dom/Range.cpp:673
&gt; +    for (auto&amp; node : intersectingNodes(range)) {

It&apos;s a bit confusing that intersects checks the composed / flat tree but intersectingNodes only considers the same tree.
The behavior is correct here but mixing those two completely different modes of traversal will be confusing if we don&apos;t give different names.

&gt; Source/WebCore/editing/Editor.cpp:3712
&gt; +            // Only consider ranges with a detected telephone number if they overlap with the selection.
&gt; +            if (intersects(range, selectedRange))

Given scanForTelephoneNumbers doesn&apos;t use the flat / composed tree,
it&apos;s a bit dubious that we check the intersection using flat / composed tree.

&gt; Source/WebCore/editing/FrameSelection.cpp:557
&gt; +        if (auto range = m_selection.firstRange(); range &amp;&amp; intersects(*range, node)) {

Oh neat. You fixed a bug here. I had been wondering why we have this selection repaint bug.

&gt; Source/WebCore/editing/mac/DictionaryLookupLegacy.mm:72
&gt; +    auto selectedRange = selection.firstRange();
&gt; +    return selectedRange &amp;&amp; isPointInRange(*selectedRange, makeBoundaryPoint(position));

This is likely correct although I doubt that the rest of dictionary lookup code handles the shadow boundaries correctly.

&gt; Source/WebCore/page/DOMSelection.cpp:326
&gt; +        if (!selectedRange-&gt;start.container-&gt;containingShadowRoot() &amp;&amp; intersects(*selectedRange, range))
&gt; +            selection.setSelection(unionRange(*selectedRange, range));

I don&apos;t think we want to do this. This will make the presence of shadow DOM observable.

&gt; Source/WebCore/page/DOMSelection.cpp:364
&gt; +    return allowPartial ? intersects(*selectedRange, node) : contains(*selectedRange, node);

I don&apos;t think this is correct. Because we&apos;re working with Range object in the selection API, this API should not be considering shadow boundaries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699169</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-18 16:35:20 -0700</bug_when>
    <thetext>I’m worried that we need multiple versions of every function based on document structure and ordering. Maybe three of each. I think that’s going to be pretty bad.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407078</attachid>
            <date>2020-08-23 12:16:42 -0700</date>
            <delta_ts>2020-08-25 19:29:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215755-20200823121641.patch</filename>
            <type>text/plain</type>
            <size>121975</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MDI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTgxMjhiYTlkZTgxZWRm
NDJhNWFhYTAyMjgwZTY3MGI3YjBjMDMzYy4uNGEyOTllMzZjMDUwMTRmZjlmZjZlNTA2NzM4OWVh
OTUxNTE1NGEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NyBAQAorMjAyMC0wOC0yMiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwg
dGhlIHJlbWFpbmluZyB1c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcik6IFVzZSBkb2N1
bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1Jh
bmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNsb3Nlc3RUb1Jhbmdl
KTogVXNlIGNoYXJhY3RlckNvdW50LiBBbHNvIHJlbW92ZWQgdW5ubmVjZXNzYXJ5IGFzc2VydGlv
bnMKKyAgICAgICAgYW5kIHNwZWNpYWwgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbiBjb25z
dCk6IFVzZSBkb2N1bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOiBVc2UgaW50
ZXJzZWN0cy4KKyAgICAgICAgQWxzbyB1c2UgZmlyc3RSYW5nZSBpbnN0ZWFkIG9mIHRvTm9ybWFs
aXplZFJhbmdlLgorCisgICAgICAgICogZG9tL05vZGUuaDogQWRkZWQgaXNfbmVxLCBpc19sdGVx
LCBhbmQgaXNfZ3RlcSBmb3IgdXNlIHdpdGggUGFydGlhbE9yZGVyaW5nLAorICAgICAgICBtYXRj
aGluZyB0aGUgbmFtZXMgYW5kIGJlaGF2aW9yIGZyb20gQysrMjAuCisKKyAgICAgICAgKiBkb20v
UmFuZ2UuY3BwOiBSZW1vdmVkIHVudXNlZCBDb29yZGluYXRlU3BhY2UuCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6UmFuZ2UpOiBVcGRhdGVkIHNpbmNlIFJhbmdlQm91bmRhcnlQb2ludCBub3cg
dXNlcyByZWZlcmVuY2VzLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnVwZGF0ZURvY3VtZW50
KTogUmVuYW1lZCBmcm9tIHNldERvY3VtZW50IGFuZCBjaGFuZ2VkIHNvIHRoYXQKKyAgICAgICAg
aXQgbWFpbnRhaW5zIHRoZSBpbnZhcmlhbnRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBjYWxsZXIg
cGFzcyBhbnkgYXJndW1lbnRzLgorICAgICAgICBBbHNvIHVwZGF0ZWQgZm9yIFJhbmdlQm91bmRh
cnlQb2ludCBhbm1lIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrRm9yRGlmZmVy
ZW50Um9vdENvbnRhaW5lcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0
U3RhcnQpOiBVcGRhdGVkIGZvciBjaGVja05vZGVPZmZzZXRQYWlyIG5hbWUgY2hhbmdlLgorICAg
ICAgICBSZW1vdmVkIHRvby1jb21wbGV4IGNvZGUgZm9yIG1vdmluZyBiZXR3ZWVuIGRvY3VtZW50
cy4gVXNlIGRvY3VtZW50T3JkZXIKKyAgICAgICAgaW5zdGVhZCBvZiBjaGVja0ZvckRpZmZlcmVu
dFJvb3RDb250YWluZXIgdG8gY2hlY2sgZm9yIHN0YXJ0L2VuZCB0aGF0IGhhdmUKKyAgICAgICAg
aW5jb3JyZWN0IG9yZGVyIG9yIG5vIGNvbW1vbiBhbmNlc3Rvci4gVXNlIHVwZGF0ZURvY3VtZW50
LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmFuZ2U6OmlzUG9pbnRJblJhbmdlKTogVXNlIGlzUG9pbnRJblJhbmdlIHRoYXQgdGFr
ZXMgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgQWxzbyB1cGRhdGVkIGZvciBjaGVja05vZGVPZmZz
ZXRQYWlyIG5hbWUgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2lu
dCBjb25zdCk6IFVzZSBkb2N1bWVudE9yZGVyLiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjpjb21wYXJlTm9kZSBjb25zdCk6IFVzZSBkb2N1bWVudE9yZGVyLgorICAgICAgICAoV2Vi
Q29yZTo6dG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjb21wYXJlQm91
bmRhcnlQb2ludHMgY29uc3QpOiBEZWxldGVkIG1vcmUgb3ZlcmxvYWRzLgorICAgICAgICBLZXB0
IG9ubHkgdGhlIG9uZSBuZWVkZWQgZm9yIGJpbmRpbmdzLCBhbmQgcmVuYW1lZCBpdCBmcm9tCisg
ICAgICAgIGNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzLiBBbHNvIGZpeGVkIHRoZSBp
bXBsZW1lbnRhdGluIHRvIGJlIHNpbXBsZXIsCisgICAgICAgIHVzZSBkb2N1bWVudE9yZGVyLCBh
bmQgbWF0Y2ggdGhlIERPTSBzcGVjaWZpY2F0aW9uIG1vcmUgY2xvc2VseSAod2l0aG91dCBhCisg
ICAgICAgIGJlaGF2aW9yIGNoYW5nZSkuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Ym91bmRh
cnlQb2ludHNWYWxpZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
aW50ZXJzZWN0c05vZGUgY29uc3QpOiBVc2UgaW50ZXJzZWN0cyBmcm9tIFNpbXBsZVJhbmdlLgor
ICAgICAgICBBbHNvIGRvbid0IHJhaXNlIGV4Y2VwdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjps
ZW5ndGhPZkNvbnRlbnRzSW5Ob2RlKTogRGVsZXRlZC4gVGhpcyBnaXZlcyB0aGUgc2FtZSByZXN1
bHQgYXMKKyAgICAgICAgTm9kZTo6bGVuZ3RoLCBidXQgbGVzcyBlZmZpY2llbnRseS4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjpwcm9jZXNzQ29udGVudHMpOiBVcGRhdGVkIHNpbmNlIFJhbmdl
Qm91bmRhcnlQb2ludCBub3cKKyAgICAgICAgdXNlcyByZWZlcmVuY2VzLgorICAgICAgICAoV2Vi
Q29yZTo6cHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMpOiBSZW1vdmVkIG9ic29sZXRlIGNv
bW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6dG9TdHJpbmcgY29uc3QpOiBVc2UgaW50
ZXJzZWN0aW5nTm9kZXMgYW5kCisgICAgICAgIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpkZXRhY2gpOiBNb3ZlZCB0byB0aGUgaGVhZGVyLgorICAgICAgICAoV2Vi
Q29yZTo6UmFuZ2U6OmNoZWNrTm9kZU9mZnNldFBhaXIgY29uc3QpOiBSbmVhbWVkIGZyb20gY2hl
Y2tOb2RlV09mZnNldC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjbG9uZVJhbmdlKTogVXNl
IG1fb3duZXJEb2N1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzZXRTdGFydEFmdGVy
KTogVHdlYWtlZCBjb2Rpbmcgc3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5k
QmVmb3JlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kQWZ0ZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzZWxlY3ROb2RlKTogRGl0dG8uIEFsc28g
cmVtb3ZlZCB1bm5lY2Vzc2FyeSBjb2RlIHRvCisgICAgICAgIGNhbGwgc2V0RG9jdW1lbnQsIHNp
bmNlIHNldFN0YXJ0IHRha2VzIGNhcmUgb2YgdGhhdC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjpzZWxlY3ROb2RlQ29udGVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpz
ZXRTdGFydEJlZm9yZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmZpcnN0Tm9k
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cGFzdExhc3ROb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjb250YWlucyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcmVSYW5nZXNFcXVhbCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpyYW5nZXNPdmVybGFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmJvdW5kYXJ5Tm9kZUNoaWxkcmVuQ2hhbmdlZCk6IFR3ZWFrZWQgY29kaW5nIHN0eWxl
IGFuZCB1cGRhdGVkCisgICAgICAgIHNpbmNlIFJhbmdlQm91bmRhcnlQb2ludCB1c2VzIGEgcmVm
ZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVDaGlsZHJlbkNoYW5nZWQpOiBV
c2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRy
ZW5XaWxsQmVSZW1vdmVkKTogUmVtb3ZlZCB1bm5lZWRlZCBjb2RlCisgICAgICAgIHRvIGhhbmRs
ZSBjYXNlIHdoZXJlIG9uZSBvZiB0aGUgY2hpbGRyZW4gaXMgdGhlIGNoaWxkQmVmb3JlIGJ1dCB0
aGUKKyAgICAgICAgbm9kZSBpcyBub3QgaW5zaWRlIHRoZSBjb250YWluZXIgLS0gdGhhdCBjYXNl
IGRvZXNuJ3QgZXhpc3QuIFVzZQorICAgICAgICBOb2RlOjpjb250YWlucy4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKTogVXNlIG1fb3duZXJEb2N1
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQpOiBTaW1w
bGlmeSBsb2dpYyB1c2luZworICAgICAgICBSYW5nZTo6Y29udGFpbnMuCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6bm9kZVdpbGxCZVJlbW92ZWQpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnBhcmVudGxlc3NOb2RlTW92ZWRUb05ld0RvY3VtZW50QWZm
ZWN0c1JhbmdlKToKKyAgICAgICAgVXBkYXRlZCBzaW5jZSBSYW5nZUJvdW5kYXJ5UG9pbnQgdXNl
cyBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dEluc2VydGVkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyeVRleHRSZW1vdmVkKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpib3VuZGFyeVRleHROb2Rlc01lcmdlZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Ym91bmRhcnlUZXh0Tm9kZXNTcGxpdCk6IERpdHRvLgorICAgICAgICAoc2hv
d1RyZWUpOiBSZW1vdmVkIGNhbGwgdG8gYm91bmRhcnlQb2ludHNWYWxpZC4gVGhhdCdzIGNoZWNr
aW5nIHNvbWV0aGluZworICAgICAgICB0aGUgY2xhc3MgYWxyZWFkeSB0cmVhdHMgYXMgYW4gaW52
YXJpYW50LCBzbyBpdCdzIG9ic29sZXRlIGNvZGUgbGVmdCBmcm9tCisgICAgICAgIGxvbmcgYWdv
IHdoZW4gd2UgZGlkbid0IGhhdmUgdGhhdCBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuCisKKyAgICAg
ICAgKiBkb20vUmFuZ2UuaDogUmVvcmdhbml6ZWQgdGhlIGhlYWRlciB0byBtYXRjaCB0aGUgSURM
IGZpbGUuCisgICAgICAgIFJlbW92ZWQgb3duZXJEb2N1bWVudCwgY29tcGFyZUJvdW5kYXJ5UG9p
bnRzIG92ZXJsb2FkcyBvdGhlciB0aGFuIHRoZSBvbmUKKyAgICAgICAgdXNlZCBmcm9tIGJpbmRp
bmdzLCBmaXJzdE5vZGUsIHBhc3RMYXN0Tm9kZSwgdGV4dCwgY29udGFpbnMsIGFyZVJhbmdlc0Vx
dWFsLAorICAgICAgICBhbmQgcmFuZ2VzT3ZlcmxhcC4gQWxzbyB1cGRhdGVkIHNpbmNlIFJhbmdl
Qm91bmRhcnlQb2ludDo6Y29udGFpbmVyIGlzIG5vdworICAgICAgICBhIHJlZmVyZW5jZS4gTW92
ZWQgZGV0YWNoIGZ1bmN0aW9uIGhlcmUgdG8gdGhlIGhlYWRlciBhcyBhbiBlbXB0eSBpbmxpbmUu
CisKKyAgICAgICAgKiBkb20vUmFuZ2UuaWRsOiBDaGFuZ2VkIHN0YXJ0L2VuZE9mZnNldCB0byB1
bnNpZ25lZC4gU3RvcHBlZCB1c2luZyB0aGUKKyAgICAgICAgbmFtZSBjb21wYXJlQm91bmRhcnlQ
b2ludGVyc0ZvckJpbmRpbmdzLiBVcGRhdGVkIGludGVyc2VjdHNOb2RlIHRvIG5vdAorICAgICAg
ICB0aHJvdyBleGNlcHRpb25zIGFzIGNhbGxlZCBmb3IgaW4gdGhlIERPTSBzcGVjaWZpY2F0aW9u
LiBUd2Vha2VkIGNvbW1lbnRzLgorCisgICAgICAgICogZG9tL1JhbmdlQm91bmRhcnlQb2ludC5o
OiBDaGFuZ2VkIGNvbnN0cnVjdG9yIGFyZ3VtZW50IHRvIGEgcmVmZXJlbmNlLgorICAgICAgICBS
ZW5hbWVkIHNldFRvQmVmb3JlQ2hpbGQsIHNldFRvQWZ0ZXJDaGlsZCwgc2V0VG9TdGFydE9mTm9k
ZSwgYW5kIHNldFRvRW5kT2ZOb2RlCisgICAgICAgIHRvIHNldFRvQmVmb3JlTm9kZSwgc2V0VG9B
ZnRlck5vZGUsIHNldFRvQmVmb3JlQ29udGVudHMsIHNldFRvQWZ0ZXJDb250ZW50cy4KKyAgICAg
ICAgTWVyZ2VkIGVuc3VyZU9mZnNldElzVmFsaWQgaW50byB0aGUgb2Zmc2V0IGZ1bmN0aW9uLiBD
aGFuZ2VkIG1fY29udGFpbmVyTm9kZQorICAgICAgICBpbnRvIGEgUmVmPD4gYW5kIHJlbmFtZWQg
aXQgbV9jb250YWluZXIuIFJlbW92ZWQgY2xlYXIuCisKKyAgICAgICAgKiBkb20vU2ltcGxlUmFu
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNQb2ludEluUmFuZ2UpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmRvY3VtZW50T3JkZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNv
bnRhaW5zKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjppbnRlcnNlY3RzKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjp1bmlvblJhbmdlcyk6IEFkZGVkLgorICAgICAgICAqIGRvbS9TaW1w
bGVSYW5nZS5oOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlUG9zaXRpb25zKTogVXNlIGRvY3VtZW50
T3JkZXIuCisgICAgICAgIChXZWJDb3JlOjppc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKTog
VXNlIGNvbnRhaW5zLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmlzRnJhbWVJblJhbmdlKTogVXNlIGludGVyc2VjdHMuCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKTogVXNlIGludGVyc2Vj
dHMuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dW5pb25SYW5nZXMpOiBNb3ZlZCB0byBTaW1wbGVSYW5nZS5jcHAsIHdoZXJlIGl0J3Mg
bm93CisgICAgICAgIGltcGxlbWVudGVkIHVzaW5nIGRvY3VtZW50T3JkZXIuCisKKyAgICAgICAg
KiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpyZXNwb25kVG9Ob2RlTW9kaWZpY2F0aW9uKTogVXNlIGludGVyc2VjdHMuCisKKyAg
ICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tOgorICAgICAgICAo
V2ViQ29yZTo6c2VsZWN0aW9uQ29udGFpbnNQb3NpdGlvbik6IFVzZSBpc1BvaW50SW5SYW5nZS4K
KworICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6ZXh0ZW5kKTogVXNlIG1ha2VSZWZQdHIgYW5kIE5vZGU6Omxlbmd0aAorICAg
ICAgICB0byBzdHJlYW1saW5lIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkRPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdCk6IFVzZSBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5v
ZGUKKyAgICAgICAgYW5kIHJlbW92ZSB1bm5lZWRlZCBudWxsIGNoZWNrIHRoYXQncyBhbHJlYWR5
IGNvdmVyZWQgYWJvdmUuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmFkZFJhbmdl
KTogVXNlIGludGVyc2VjdHMgYW5kIHVuaW9uUmFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6RE9N
U2VsZWN0aW9uOjpjb250YWluc05vZGUgY29uc3QpOiBVc2UgaW50ZXJzZWN0cyBhbmQgY29udGFp
bnMuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmlzVmFsaWRGb3JQb3NpdGlvbiBj
b25zdCk6IFVzZSBib29sZWFuIGxvZ2ljLgorCisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVu
dCBjb25zdCk6IFVzZSBjb250YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVy
OjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KTogVXNlIGludGVyc2VjdHMu
CisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudCk6IFVzZSBjb250YWlucy4KKworICAgICAg
ICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpmaW5kVGV4dE1hdGNo
ZXMpOiBVc2UgZG9jdW1lbnRPcmRlci4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpmaW5kVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhp
Z2hsaWdodCk6CisgICAgICAgIFVzZSBjb250YWlucy4KKworICAgICAgICAqIHRlc3RpbmcvSW50
ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cmFuZ2VBc1RleHQpOiBV
c2UgcGxhaW5UZXh0LgorICAgICAgICAoV2ViQ29yZTo6am9pbik6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpyYW5nZUFzVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9y
KTogVXNlIGEgdmVjdG9yCisgICAgICAgIHRoYXQgd2UgcmV2ZXJzZSBhbmQgam9pbiByYXRoZXIg
dGhhbiBpbnNlcnRpbmcgYXQgdGhlIHN0YXJ0IG9mIGEgc3RyaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpzdWJyYW5nZSk6IEFkZGVkIGEgY2FsbCB0byB1cGRhdGVMYXlvdXQgc2lu
Y2UgdGV4dCBpdGVyYXRvcgorICAgICAgICBmdW5jdGlvbnMgZGVwZW5kIG9uIHRoZSBzdGF0ZSBv
ZiB0aGUgcmVuZGVyIHRyZWUuIFJlYWxpemVkIHRoaXMgd2FzIHRoZW9yZXRpY2FsbHkKKyAgICAg
ICAgbmVlZGVkIGJlY2F1c2Ugb2YgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dC4KKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6cmFuZ2VPZlN0cmluZ05lYXJMb2NhdGlvbik6IERpdHRvLgorCiAy
MDIwLTA4LTIwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3Zl
IG5vZGUgZ2VvbWV0cnkgZnVuY3Rpb25zIGZyb20gUmFuZ2UgdG8gUmVuZGVyT2JqZWN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IGI5OGUyNjg4NGMzNzI3NGZkNWUwMTM3ZmYxM2Q5ZDIxODVhYmZiMjAuLjNlNTRkYTFi
ODcwNTBkNmMyNTQxMjBjMDk5ODA4Y2JhNzBiZWUzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYg
QEAKKzIwMjAtMDgtMjIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSBhbG1vc3QgYWxsIHRoZSByZW1haW5pbmcgdXNlcyBvZiBsaXZlIHJhbmdlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NzU1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbToKKyAgICAgICAgKC1bV0tET01S
YW5nZSBpbml0V2l0aERvY3VtZW50Ol0pOiBUaWdodGVuZWQgdXAgaW50byBhIG9uZS1saW5lci4K
KyAgICAgICAgKC1bV0tET01SYW5nZSB0ZXh0XSk6IFVzZSBwbGFpblRleHQuCisgICAgICAgICgt
W1dLRE9NUmFuZ2UgdGV4dFJlY3RzXSk6IFN0b3BwZWQgdXNpbmcgUmFuZ2U6Om93bmVyRG9jdW1l
bnQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZTo6ZG9jdW1lbnQpOiBTdG9wcGVkIHVzaW5nCisgICAgICAgIFJhbmdlOjpvd25lckRv
Y3VtZW50LgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpib3Vu
ZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6dGV4dCBj
b25zdCk6IFVzZSBwbGFpblRleHQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3REb2N1bWVu
dEVkaXRpbmdDb250ZXh0KTogVXNlIGludGVyc2VjdHMuCisKIDIwMjAtMDgtMTkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgbm9kZSBnZW9tZXRyeSBmdW5j
dGlvbnMgZnJvbSBSYW5nZSB0byBSZW5kZXJPYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwppbmRleCBjNGY5MWVhN2ViNzBlYjc3YzM4YjRkMWExNTUxYzg5YzBhZTZhODA1Li5iNzNlN2Mw
MTVhZDBhMzQ4NGMzNTg1ZTBhZDI1ZWQyZGY2OTgwZTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMDgtMjIgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBhbG1vc3QgYWxsIHRoZSByZW1haW5pbmcgdXNl
cyBvZiBsaXZlIHJhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE1NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBET00vRE9NUmFuZ2UubW06CisgICAgICAgICgtW0RPTVJhbmdlIHRleHRdKTog
VXNlIHBsYWluVGV4dC4KKyAgICAgICAgKC1bRE9NUmFuZ2UgY29tcGFyZUJvdW5kYXJ5UG9pbnRz
OnNvdXJjZVJhbmdlOl0pOiBVcGRhdGUgZm9yIHJlbmFtZSBvZgorICAgICAgICBjb21wYXJlQm91
bmRhcnlQb2ludHNGb3JCaW5kaW5ncy4KKyAgICAgICAgKC1bRE9NUmFuZ2UgaW50ZXJzZWN0c05v
ZGU6XSk6IFJlbW92ZWQgcmFpc2VPbkRPTUVycm9yLgorCisgICAgICAgICogRE9NL0RPTVVJS2l0
RXh0ZW5zaW9ucy5tbToKKyAgICAgICAgKGZpcnN0Tm9kZUFmdGVyKTogTW92ZWQgUmFuZ2U6OmZp
cnN0Tm9kZSBoZXJlIHNpbmNlIGl0J3MgdGhlIG9ubHkgcmVtYWluaW5nIGNhbGxlcjsKKyAgICAg
ICAgbWlnaHQgbmVlZCB0byBrZWVwIGxlZ2FjeSBiZWhhdmlvciBkZXBlbmRpbmcgb24gaG93IHRo
aXMgaXMgdXNlZCBieSBVSUtpdC4KKyAgICAgICAgKC1bRE9NUmFuZ2UgZmlyc3ROb2RlXSk6IENh
bGwgZmlyc3ROb2RlQWZ0ZXIuCisKKyAgICAgICAgKiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToK
KyAgICAgICAgKC1bRE9NUmFuZ2UgbWFya3VwU3RyaW5nXSk6IFN0b3AgdXNpbmcgUmFuZ2U6Om93
bmVyRG9jdW1lbnQuCisKIDIwMjAtMDgtMTkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIE1vdmUgbm9kZSBnZW9tZXRyeSBmdW5jdGlvbnMgZnJvbSBSYW5nZSB0byBS
ZW5kZXJPYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCmluZGV4IDU3OWQwZDg3MTZiNzkxMjNiYWIwMzlmYTQwNjIwYTRhYWUzYmJiNjEuLjE0
MTMzYzY3NGM0MGFjYjA0ZWQwN2NkY2UyNTZlNjE1MzBkOTEyYWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMjAzNiw2ICsyMDM2LDgg
QEAgc3RhdGljIGJvb2wgaXNSZXBsYWNlZE5vZGVPckJSKE5vZGUqIG5vZGUpCiAKIHN0YXRpYyBi
b29sIGNoYXJhY3Rlck9mZnNldHNJbk9yZGVyKGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFj
dGVyT2Zmc2V0MSwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQyKQogewor
ICAgIC8vIEZJWE1FOiBTaG91bGQganVzdCBiZSBhYmxlIHRvIGNhbGwgZG9jdW1lbnRPcmRlciB3
aXRob3V0IGFjY2Vzc2liaWxpdHktc3BlY2lmaWMgbG9naWMuIE5vdCBjbGVhciB3aHkgd2UgbmVl
ZCBDaGFyYWN0ZXJPZmZzZXQgaW5zdGVhZCBvZiBQb3NpdGlvbiBvciBCb3VuZGFyeVBvaW50Lgor
CiAgICAgaWYgKGNoYXJhY3Rlck9mZnNldDEuaXNOdWxsKCkgfHwgY2hhcmFjdGVyT2Zmc2V0Mi5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApAQCAtMjA0OCwxNiArMjA1MCwx
MiBAQCBzdGF0aWMgYm9vbCBjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcihjb25zdCBDaGFyYWN0ZXJP
ZmZzZXQmIGNoYXJhY3Rlck9mZnNldDEsIGNvbgogICAgICAgICBub2RlMSA9IG5vZGUxLT50cmF2
ZXJzZVRvQ2hpbGRBdChjaGFyYWN0ZXJPZmZzZXQxLm9mZnNldCk7CiAgICAgaWYgKCFub2RlMi0+
aXNDaGFyYWN0ZXJEYXRhTm9kZSgpICYmICFpc1JlcGxhY2VkTm9kZU9yQlIobm9kZTIpICYmIG5v
ZGUyLT5oYXNDaGlsZE5vZGVzKCkpCiAgICAgICAgIG5vZGUyID0gbm9kZTItPnRyYXZlcnNlVG9D
aGlsZEF0KGNoYXJhY3Rlck9mZnNldDIub2Zmc2V0KTsKLSAgICAKICAgICBpZiAoIW5vZGUxIHx8
ICFub2RlMikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGF1dG8gcmFuZ2UxID0g
QVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoKm5vZGUxKTsKICAgICBhdXRvIHJh
bmdlMiA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKCpub2RlMik7Ci0gICAg
YXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UxKS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlMikpOwotICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMDsKKyAgICByZXR1cm4gaXNfbHRl
cShkb2N1bWVudE9yZGVyKHJhbmdlMS5zdGFydCwgcmFuZ2UyLnN0YXJ0KSk7CiB9CiAKIHN0YXRp
YyBOb2RlKiByZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUoTm9kZSYgcmVwbGFjZWRO
b2RlLCBpbnQmIG9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggY2E1ZjIy
MTMwNmM1OTdhZmQxZmJlMTM3MmE5ZGNhNjQzYzU4ODRkOC4uMDJhNmE0ZWRlYTA1NmI2YTVlNjk1
YzhmNWMwMjUwYjViMDExMjVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC0yOTcsMjYgKzI5NywxNyBAQCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5nZShj
b25zdCBTaW1wbGVSYW5nZSYgcwogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IG1pc3Nw
ZWxsaW5nczsKICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNrZXIsIHN0cmluZ1Zh
bHVlKCksIFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBtaXNzcGVsbGluZ3MsIGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAKLSAgICAvLyBUaGUgcmV0dXJuZWQgbWlzc3BlbGxp
bmdzIGFyZSBhc3N1bWVkIHRvIGJlIG9yZGVyZWQgaW4gdGhlIGRvY3VtZW50Ci0gICAgLy8gbG9n
aWNhbCBvcmRlciwgd2hpY2ggc2hvdWxkIGJlIG1hdGNoZWQgYnkgUmFuZ2U6OmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cy4KLSAgICAvLyBTbyBpdGVyYXRlIGZvcndhcmQgb3IgYmFja3dhcmRzIGRlcGVu
ZGluZyBvbiB0aGUgZGVzaXJlZCBzZWFyY2gKLSAgICAvLyBkaXJlY3Rpb24gdG8gZmluZCB0aGUg
Y2xvc2VzdCBtaXNzcGVsbGluZyBpbiB0aGF0IGRpcmVjdGlvbi4KKyAgICAvLyBGaW5kIHRoZSBm
aXJzdCBtaXNzcGVsbGluZyBwYXN0IHRoZSBzdGFydC4KICAgICBpZiAoZGlyZWN0aW9uID09IEFj
Y2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246Ok5leHQpIHsKLSAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBtaXNzcGVsbGluZyA6IG1pc3NwZWxsaW5ncykgeworICAgICAgICBmb3IgKGF1dG8mIG1p
c3NwZWxsaW5nIDogbWlzc3BlbGxpbmdzKSB7CiAgICAgICAgICAgICBhdXRvIG1pc3NwZWxsaW5n
UmFuZ2UgPSBlZGl0b3IucmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQobWlzc3BlbGxpbmcpOwot
ICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ1JhbmdlKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICBpZiAoY3JlYXRlTGl2ZVJhbmdlKCptaXNzcGVsbGluZ1Jhbmdl
KS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBjcmVhdGVMaXZlUmFu
Z2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+IDApCisgICAgICAgICAgICBpZiAobWlz
c3BlbGxpbmdSYW5nZSAmJiBpc19ndChkb2N1bWVudE9yZGVyKG1pc3NwZWxsaW5nUmFuZ2UtPmVu
ZCwgc3RhcnQuZW5kKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICptaXNzcGVsbGluZ1Jhbmdl
OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gQWNjZXNzaWJpbGl0eVNl
YXJjaERpcmVjdGlvbjo6UHJldmlvdXMpIHsKLSAgICAgICAgZm9yIChhdXRvIHJpdCA9IG1pc3Nw
ZWxsaW5ncy5yYmVnaW4oKTsgcml0ICE9IG1pc3NwZWxsaW5ncy5yZW5kKCk7ICsrcml0KSB7Ci0g
ICAgICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBlZGl0b3IucmFuZ2VGb3JUZXh0Q2hl
Y2tpbmdSZXN1bHQoKnJpdCk7Ci0gICAgICAgICAgICBpZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmIChjcmVhdGVMaXZlUmFu
Z2UoKm1pc3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJU
X1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8
IDApCisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChhdXRvJiBtaXNzcGVsbGluZyA6IG1ha2VS
ZXZlcnNlZFJhbmdlKG1pc3NwZWxsaW5ncykpIHsKKyAgICAgICAgICAgIGF1dG8gbWlzc3BlbGxp
bmdSYW5nZSA9IGVkaXRvci5yYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChtaXNzcGVsbGluZyk7
CisgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmdSYW5nZSAmJiBpc19sdChkb2N1bWVudE9yZGVy
KG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0LCBzdGFydC5zdGFydCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiAqbWlzc3BlbGxpbmdSYW5nZTsKICAgICAgICAgfQogICAgIH0KQEAgLTU2NSwyOCAr
NTU2LDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZmluZE1hdGNoaW5nT2JqZWN0cyhB
Y2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEqIGNyaXRlCiAvLyByYW5nZSBpcyBleHBlY3RlZCB0
byBBQ1RVQUxMWSBiZSBiZWZvcmUuIFRoZXNlIGFyZSBub3QgY2hlY2tlZCBmb3IgcGVyZm9ybWFu
Y2UgcmVhc29ucy4KIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VDbG9zZXN0VG9S
YW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmVmZXJlbmNlUmFuZ2UsIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYmIGFmdGVyUmFuZ2UsIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYmIGJlZm9yZVJhbmdlKQog
ewotICAgIC8vIFRoZSB0cmVlU2NvcGUgZm9yIHNoYWRvdyBub2RlcyBtYXkgbm90IGJlIHRoZSBz
YW1lIHNjb3BlIGFzIGFub3RoZXIgZWxlbWVudCBpbiBhIGRvY3VtZW50LgotICAgIC8vIENvbXBh
cmlzb25zIG1heSBmYWlsIGluIHRoYXQgY2FzZSwgd2hpY2ggYXJlIGV4cGVjdGVkIGJlaGF2aW9y
IGFuZCBzaG91bGQgbm90IGFzc2VydC4KLQotICAgIGlmIChhZnRlclJhbmdlICYmIChhZnRlclJh
bmdlLT5zdGFydC5jb250YWluZXItPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHJlZmVyZW5jZVJh
bmdlLmVuZC5jb250YWluZXIpICYgTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVE
KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBBU1NFUlQoIWFmdGVyUmFuZ2Ug
fHwgY3JlYXRlTGl2ZVJhbmdlKGFmdGVyUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpKS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSA+PSAwKTsKLQotICAgIGlmIChiZWZvcmVSYW5nZSAmJiAoYmVmb3Jl
UmFuZ2UtPmVuZC5jb250YWluZXItPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHJlZmVyZW5jZVJh
bmdlLnN0YXJ0LmNvbnRhaW5lcikgJiBOb2RlOjpET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNU
RUQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIEFTU0VSVCghYmVmb3JlUmFu
Z2UgfHwgY3JlYXRlTGl2ZVJhbmdlKGJlZm9yZVJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHJlZmVyZW5jZVJhbmdlKSku
cmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCk7Ci0KLSAgICBpZiAoIWFmdGVyUmFuZ2UgJiYgIWJl
Zm9yZVJhbmdlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGlmICghYmVmb3Jl
UmFuZ2UpCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGFmdGVyUmFuZ2UpOwogICAgIGlmICghYWZ0
ZXJSYW5nZSkKICAgICAgICAgcmV0dXJuIFdURk1vdmUoYmVmb3JlUmFuZ2UpOwotCi0gICAgYXV0
byBwb3NpdGlvbnNUb0FmdGVyUmFuZ2UgPSBQb3NpdGlvbjo6cG9zaXRpb25Db3VudEJldHdlZW5Q
b3NpdGlvbnMoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGFmdGVyUmFuZ2UtPnN0YXJ0KSwg
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJlZmVyZW5jZVJhbmdlLmVuZCkpOwotICAgIGF1
dG8gcG9zaXRpb25zVG9CZWZvcmVSYW5nZSA9IFBvc2l0aW9uOjpwb3NpdGlvbkNvdW50QmV0d2Vl
blBvc2l0aW9ucyhjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oYmVmb3JlUmFuZ2UtPmVuZCks
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZWZlcmVuY2VSYW5nZS5zdGFydCkpOwotCi0g
ICAgcmV0dXJuIFdURk1vdmUocG9zaXRpb25zVG9BZnRlclJhbmdlIDwgcG9zaXRpb25zVG9CZWZv
cmVSYW5nZSA/IGFmdGVyUmFuZ2UgOiBiZWZvcmVSYW5nZSk7CisgICAgYXV0byBkaXN0YW5jZUJl
Zm9yZSA9IGNoYXJhY3RlckNvdW50KHsgYmVmb3JlUmFuZ2UtPmVuZCwgcmVmZXJlbmNlUmFuZ2Uu
c3RhcnQgfSk7CisgICAgYXV0byBkaXN0YW5jZUFmdGVyID0gY2hhcmFjdGVyQ291bnQoeyBhZnRl
clJhbmdlLT5zdGFydCwgcmVmZXJlbmNlUmFuZ2UuZW5kIH0pOworICAgIHJldHVybiBXVEZNb3Zl
KGRpc3RhbmNlQmVmb3JlIDw9IGRpc3RhbmNlQWZ0ZXIgPyBiZWZvcmVSYW5nZSA6IGFmdGVyUmFu
Z2UpOwogfQogCiBPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFu
Z2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oY29uc3QgU2ltcGxlUmFuZ2UmIHJl
ZmVyZW5jZVJhbmdlLCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uIHNlYXJjaERpcmVjdGlv
biwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlYXJjaFN0cmluZ3MpIGNvbnN0CkBAIC02MDMsMjMg
KzU3OSwxNiBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFu
Z2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3RpbwogICAgIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBjbG9zZXN0U3RyaW5nUmFuZ2U7CiAgICAgZm9yIChhdXRvJiBzZWFyY2hTdHJpbmcgOiBz
ZWFyY2hTdHJpbmdzKSB7CiAgICAgICAgIGlmIChhdXRvIGZvdW5kU3RyaW5nUmFuZ2UgPSBmcmFt
ZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyhzZWFyY2hTdHJpbmcsIHJlZmVyZW5jZVJhbmdlLCBm
aW5kT3B0aW9ucykpIHsKKyAgICAgICAgICAgIGJvb2wgZm91bmRTdHJpbmdJc0Nsb3NlcjsKICAg
ICAgICAgICAgIGlmICghY2xvc2VzdFN0cmluZ1JhbmdlKQotICAgICAgICAgICAgICAgIGNsb3Nl
c3RTdHJpbmdSYW5nZSA9ICpmb3VuZFN0cmluZ1JhbmdlOworICAgICAgICAgICAgICAgIGZvdW5k
U3RyaW5nSXNDbG9zZXIgPSB0cnVlOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgLy8gSWYgc2VhcmNoaW5nIGJhY2t3YXJkLCB1c2UgdGhlIHRyYWlsaW5nIHJhbmdlIGVkZ2Vz
IHRvIGNvcnJlY3RseSBkZXRlcm1pbmUgd2hpY2gKLSAgICAgICAgICAgICAgICAvLyByYW5nZSBp
cyBjbG9zZXN0LiBTaW1pbGFybHksIGlmIHNlYXJjaGluZyBmb3J3YXJkLCB1c2UgdGhlIGxlYWRp
bmcgcmFuZ2UgZWRnZXMuCi0gICAgICAgICAgICAgICAgYXV0byYgY2xvc2VzdFN0cmluZ1Bvc2l0
aW9uID0gaXNCYWNrd2FyZFNlYXJjaCA/IGNsb3Nlc3RTdHJpbmdSYW5nZS0+ZW5kIDogY2xvc2Vz
dFN0cmluZ1JhbmdlLT5zdGFydDsKLSAgICAgICAgICAgICAgICBhdXRvJiBmb3VuZFN0cmluZ1Bv
c2l0aW9uID0gaXNCYWNrd2FyZFNlYXJjaCA/IGZvdW5kU3RyaW5nUmFuZ2UtPmVuZCA6IGZvdW5k
U3RyaW5nUmFuZ2UtPnN0YXJ0OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGF1
dG8gY2xvc2VzdFBvc2l0aW9uT2Zmc2V0ID0gY2xvc2VzdFN0cmluZ1Bvc2l0aW9uLm9mZnNldDsK
LSAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFBvc2l0aW9uT2Zmc2V0ID0gZm91bmRTdHJpbmdQ
b3NpdGlvbi5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgYXV0byBjbG9zZXN0Q29udGFpbmVyTm9k
ZSA9IGNsb3Nlc3RTdHJpbmdQb3NpdGlvbi5jb250YWluZXIucHRyKCk7Ci0gICAgICAgICAgICAg
ICAgYXV0byBzZWFyY2hDb250YWluZXJOb2RlID0gZm91bmRTdHJpbmdQb3NpdGlvbi5jb250YWlu
ZXIucHRyKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKGNsb3Nlc3RDb250YWluZXJOb2RlLCBjbG9z
ZXN0UG9zaXRpb25PZmZzZXQsIHNlYXJjaENvbnRhaW5lck5vZGUsIHNlYXJjaFBvc2l0aW9uT2Zm
c2V0KS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoKCFpc0JhY2t3
YXJkU2VhcmNoICYmIHJlc3VsdCA+IDApIHx8IChpc0JhY2t3YXJkU2VhcmNoICYmIHJlc3VsdCA8
IDApKQotICAgICAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAqZm91bmRTdHJp
bmdSYW5nZTsKKyAgICAgICAgICAgICAgICBmb3VuZFN0cmluZ0lzQ2xvc2VyID0gaXNCYWNrd2Fy
ZFNlYXJjaAorICAgICAgICAgICAgICAgICAgICA/IGlzX2d0KGRvY3VtZW50T3JkZXIoZm91bmRT
dHJpbmdSYW5nZS0+ZW5kLCBjbG9zZXN0U3RyaW5nUmFuZ2UtPmVuZCkpCisgICAgICAgICAgICAg
ICAgICAgIDogaXNfbHQoZG9jdW1lbnRPcmRlcihmb3VuZFN0cmluZ1JhbmdlLT5zdGFydCwgY2xv
c2VzdFN0cmluZ1JhbmdlLT5zdGFydCkpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGZvdW5kU3RyaW5nSXNDbG9zZXIpCisgICAgICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1Jhbmdl
ID0gKmZvdW5kU3RyaW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGNsb3Nl
c3RTdHJpbmdSYW5nZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDc5YjhjYTRhMTBhNDM1ZGIz
MThmOTA2ZjQwNzFjZDViMDQ0MTY2OTguLjJhYzEzNDJkYWMzNDQ0NDdlZDUxMzIxODllMDhlZjM1
OTUyM2ZlOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtOTE1LDcgKzkxNSw3IEBAIEludFBv
aW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmxpbmtDbGlja1BvaW50KCkKICAgICBpZiAo
YXV0byByYW5nZSA9IGVsZW1lbnRSYW5nZSgpKSB7CiAgICAgICAgIGF1dG8gc3RhcnQgPSBWaXNp
YmxlUG9zaXRpb24geyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSB9
OwogICAgICAgICBhdXRvIGVuZCA9IG5leHRWaXNpYmxlUG9zaXRpb24oc3RhcnQpOwotICAgICAg
ICBpZiAoIWVuZC5pc051bGwoKSAmJiBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb250YWlucyhl
bmQpKQorICAgICAgICBpZiAoaXNQb2ludEluUmFuZ2UoKnJhbmdlLCBtYWtlQm91bmRhcnlQb2lu
dChlbmQpKSkKICAgICAgICAgICAgIHJldHVybiB7IGJvdW5kc0ZvclJhbmdlKCptYWtlU2ltcGxl
UmFuZ2Uoc3RhcnQsIGVuZCkpLmNlbnRlcigpIH07CiAgICAgfQogICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpjbGlja1BvaW50KCk7CkBAIC0xNTYxLDE3ICsxNTYxLDkgQEAgUGxhaW5U
ZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9jdW1lbnRCYXNlZFNlbGVjdGVk
VGV4dFJhbmdlKCkgY29uc3QKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBQbGFpblRl
eHRSYW5nZSgpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiB2aXNpYmxlU2VsZWN0aW9uID0gc2Vs
ZWN0aW9uKCk7Ci0gICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHZpc2libGVTZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGlvblJhbmdlKQotICAgICAgICByZXR1
cm4gUGxhaW5UZXh0UmFuZ2UoKTsKLQotICAgIC8vIEZJWE1FOiBUaGUgcmVhc29uIHRoaXMgZG9l
cyB0aGUgY29ycmVjdCB0aGluZyB3aGVuIHRoZSBzZWxlY3Rpb24gaXMgaW4gdGhlCi0gICAgLy8g
c2hhZG93IHRyZWUgb2YgYW4gaW5wdXQgZWxlbWVudCBpcyB0aGF0IHdlIGdldCBhbiBleGNlcHRp
b24gYmVsb3csIGFuZCB3ZQotICAgIC8vIGNob29zZSB0byBpbnRlcnByZXQgYWxsIGV4Y2VwdGlv
bnMgYXMgImRvZXMgbm90IGludGVyc2VjdCIuIFNlZW1zIGxpa2VseQotICAgIC8vIHRoYXQgZG9l
cyBub3QgaGFuZGxlIGFsbCBjYXNlcyBjb3JyZWN0bHkuCi0gICAgYXV0byBpbnRlcnNlY3RzUmVz
dWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSktPmludGVyc2VjdHNOb2RlKCpu
b2RlKTsKLSAgICBpZiAoIWludGVyc2VjdHNSZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgIWludGVy
c2VjdHNSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpCisgICAgYXV0byB2aXNpYmxlU2VsZWN0
aW9uID0gc2VsZWN0aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHZpc2libGVTZWxl
Y3Rpb24uZmlyc3RSYW5nZSgpOworICAgIGlmICghc2VsZWN0aW9uUmFuZ2UgfHwgIWludGVyc2Vj
dHMoKnNlbGVjdGlvblJhbmdlLCAqbm9kZSkpCiAgICAgICAgIHJldHVybiBQbGFpblRleHRSYW5n
ZSgpOwogCiAgICAgaW50IHN0YXJ0ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNl
bGVjdGlvbi5zdGFydCgpKTsKQEAgLTE2NTYsMTAgKzE2NDgsMTAgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5n
ZSYgcmFuZ2UKICAgICAgICAgYXV0byYgbm9kZSA9ICp0aGlzLT5ub2RlKCk7CiAgICAgICAgIGF1
dG8gZWxlbWVudFJhbmdlID0gdGhpcy0+ZWxlbWVudFJhbmdlKCk7CiAgICAgICAgIGF1dG8gc3Rh
cnQgPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0b3Iobm9kZSwg
cmFuZ2Uuc3RhcnQpOwotICAgICAgICBpZiAoIWNyZWF0ZUxpdmVSYW5nZShlbGVtZW50UmFuZ2Up
LT5jb250YWlucyhzdGFydCkpCisgICAgICAgIGlmICghaXNQb2ludEluUmFuZ2UoKmVsZW1lbnRS
YW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpKSkKICAgICAgICAgICAgIHN0YXJ0ID0gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnRSYW5nZS0+c3RhcnQpOwogICAgICAgICBh
dXRvIGVuZCA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcihu
b2RlLCByYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgIGlmICghY3JlYXRlTGl2
ZVJhbmdlKGVsZW1lbnRSYW5nZSktPmNvbnRhaW5zKGVuZCkpCisgICAgICAgIGlmICghaXNQb2lu
dEluUmFuZ2UoKmVsZW1lbnRSYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSkpCiAgICAgICAg
ICAgICBlbmQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFy
dCk7CiAgICAgICAgIG1fcmVuZGVyZXItPmZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCksIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0
U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CiAgICAgfQpAQCAtMjIxNiw3ICsyMjA4
LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFZpc2libGVQ
b3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3MKIAogICAgICAgICBhdXRvIHN0YXJ0ID0gcmFu
Z2Uuc3RhcnQ7CiAgICAgICAgIGlmIChhdXRvIGVsZW1lbnRSYW5nZSA9IHRoaXMtPmVsZW1lbnRS
YW5nZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWNyZWF0ZUxpdmVSYW5nZShlbGVtZW50UmFuZ2Up
LT5jb250YWlucyhzdGFydCkpCisgICAgICAgICAgICBpZiAoIWlzUG9pbnRJblJhbmdlKCplbGVt
ZW50UmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSkpCiAgICAgICAgICAgICAgICAgc3Rh
cnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFydCk7CiAg
ICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggNThlNDA1ZDE1M2JjYjI2NjExMDkxNDY5ZTg2Zjky
ZWY3NjdmZjA0ZC4uNTllY2IxYjJmOWNiNWM3MDBjMWZlODViZTgzMjc2MmUwMTA4ODgyZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCkBAIC02OTIsNiArNjkyLDEyIEBAIHByaXZhdGU6CiAgICAgY29uc3RleHByIFBh
cnRpYWxPcmRlcmluZyhUeXBlIHR5cGUpIDogbV90eXBlIHsgdHlwZSB9IHsgfQogICAgIFR5cGUg
bV90eXBlOwogfTsKK2NvbnN0ZXhwciBib29sIGlzX2VxKFBhcnRpYWxPcmRlcmluZyk7Citjb25z
dGV4cHIgYm9vbCBpc19sdChQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHByIGJvb2wgaXNfZ3Qo
UGFydGlhbE9yZGVyaW5nKTsKK2NvbnN0ZXhwciBib29sIGlzX25lcShQYXJ0aWFsT3JkZXJpbmcp
OworY29uc3RleHByIGJvb2wgaXNfbHRlcShQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHByIGJv
b2wgaXNfZ3RlcShQYXJ0aWFsT3JkZXJpbmcpOwogCiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3Jk
ZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBOb2RlJiwgY29uc3QgTm9kZSYpOwogCkBAIC04Mjgs
NiArODM0LDIxIEBAIGNvbnN0ZXhwciBib29sIGlzX2d0KFBhcnRpYWxPcmRlcmluZyBvcmRlcmlu
ZykKICAgICByZXR1cm4gb3JkZXJpbmcubV90eXBlID09IFBhcnRpYWxPcmRlcmluZzo6VHlwZTo6
R3JlYXRlcjsKIH0KIAorY29uc3RleHByIGJvb2wgaXNfbmVxKFBhcnRpYWxPcmRlcmluZyBvcmRl
cmluZykKK3sKKyAgICByZXR1cm4gaXNfbHQob3JkZXJpbmcpIHx8IGlzX2d0KG9yZGVyaW5nKTsK
K30KKworY29uc3RleHByIGJvb2wgaXNfbHRlcShQYXJ0aWFsT3JkZXJpbmcgb3JkZXJpbmcpCit7
CisgICAgcmV0dXJuIGlzX2x0KG9yZGVyaW5nKSB8fCBpc19lcShvcmRlcmluZyk7Cit9CisKK2Nv
bnN0ZXhwciBib29sIGlzX2d0ZXEoUGFydGlhbE9yZGVyaW5nIG9yZGVyaW5nKQoreworICAgIHJl
dHVybiBpc19ndChvcmRlcmluZykgfHwgaXNfZXEob3JkZXJpbmcpOworfQorCiBXVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgTm9kZSYpOwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCAwNWNiOWYyODBjNGU4OWFl
MzY3ZDg0NzE3NGUzY2Y1ODI0ZDAzZTI3Li5jMzQ3YTgyMmY5M2MyYjc0MzZhNjRmZmI1OTJjMTdm
YzFkODQyM2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTY2LDcgKzY2LDYgQEAgdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIERFRklORV9ERUJVR19PTkxZX0dMT0JBTChXVEY6OlJlZkNvdW50
ZWRMZWFrQ291bnRlciwgcmFuZ2VDb3VudGVyLCAoIlJhbmdlIikpOwogCiBlbnVtIENvbnRlbnRz
UHJvY2Vzc0RpcmVjdGlvbiB7IFByb2Nlc3NDb250ZW50c0ZvcndhcmQsIFByb2Nlc3NDb250ZW50
c0JhY2t3YXJkIH07Ci1lbnVtIGNsYXNzIENvb3JkaW5hdGVTcGFjZSB7IEFic29sdXRlLCBDbGll
bnQgfTsKIAogc3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NOb2RlcyhSYW5nZTo6QWN0
aW9uVHlwZSwgVmVjdG9yPFJlZjxOb2RlPj4mLCBOb2RlKiBvbGRDb250YWluZXIsIFJlZlB0cjxO
b2RlPiBuZXdDb250YWluZXIpOwogc3RhdGljIEV4Y2VwdGlvbk9yPFJlZlB0cjxOb2RlPj4gcHJv
Y2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMoUmFuZ2U6OkFjdGlvblR5cGUsIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiwgUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CkBAIC03NCw4ICs3Myw4IEBAIHN0YXRpYyBFeGNlcHRp
b25PcjxSZWZQdHI8Tm9kZT4+IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKFJhbmdl
OjpBY3Rpb25UCiAKIGlubGluZSBSYW5nZTo6UmFuZ2UoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQp
CiAgICAgOiBtX293bmVyRG9jdW1lbnQob3duZXJEb2N1bWVudCkKLSAgICAsIG1fc3RhcnQoJm93
bmVyRG9jdW1lbnQpCi0gICAgLCBtX2VuZCgmb3duZXJEb2N1bWVudCkKKyAgICAsIG1fc3RhcnQo
b3duZXJEb2N1bWVudCkKKyAgICAsIG1fZW5kKG93bmVyRG9jdW1lbnQpCiB7CiAjaWZuZGVmIE5E
RUJVRwogICAgIHJhbmdlQ291bnRlci5pbmNyZW1lbnQoKTsKQEAgLTk4LDY1ICs5Nyw0MSBAQCBS
YW5nZTo6flJhbmdlKCkKICNlbmRpZgogfQogCi12b2lkIFJhbmdlOjpzZXREb2N1bWVudChEb2N1
bWVudCYgZG9jdW1lbnQpCit2b2lkIFJhbmdlOjp1cGRhdGVEb2N1bWVudCgpCiB7Ci0gICAgQVNT
RVJUKG1fb3duZXJEb2N1bWVudC5wdHIoKSAhPSAmZG9jdW1lbnQpOworICAgIGF1dG8mIGRvY3Vt
ZW50ID0gc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpOworICAgIGlmIChtX293bmVyRG9jdW1l
bnQucHRyKCkgPT0gJmRvY3VtZW50KQorICAgICAgICByZXR1cm47CiAgICAgbV9vd25lckRvY3Vt
ZW50LT5kZXRhY2hSYW5nZSgqdGhpcyk7CiAgICAgbV9vd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7
Ci0gICAgbV9zdGFydC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKLSAgICBtX2VuZC5zZXRU
b1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKKyAgICBtX3N0YXJ0LnNldFRvQmVmb3JlQ29udGVudHMo
ZG9jdW1lbnQpOworICAgIG1fZW5kLnNldFRvQmVmb3JlQ29udGVudHMoZG9jdW1lbnQpOwogICAg
IG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UoKnRoaXMpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKGNvbnN0IFJhbmdlQm91bmRhcnlQ
b2ludCYgc3RhcnQsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgZW5kKQorRXhjZXB0aW9uT3I8
dm9pZD4gUmFuZ2U6OnNldFN0YXJ0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zm
c2V0KQogewotICAgIE5vZGUqIGVuZFJvb3RDb250YWluZXIgPSBlbmQuY29udGFpbmVyKCk7Ci0g
ICAgd2hpbGUgKGVuZFJvb3RDb250YWluZXItPnBhcmVudE5vZGUoKSkKLSAgICAgICAgZW5kUm9v
dENvbnRhaW5lciA9IGVuZFJvb3RDb250YWluZXItPnBhcmVudE5vZGUoKTsKLSAgICBOb2RlKiBz
dGFydFJvb3RDb250YWluZXIgPSBzdGFydC5jb250YWluZXIoKTsKLSAgICB3aGlsZSAoc3RhcnRS
b290Q29udGFpbmVyLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIHN0YXJ0Um9vdENvbnRhaW5lciA9
IHN0YXJ0Um9vdENvbnRhaW5lci0+cGFyZW50Tm9kZSgpOwotCi0gICAgcmV0dXJuIHN0YXJ0Um9v
dENvbnRhaW5lciAhPSBlbmRSb290Q29udGFpbmVyIHx8IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQ
b2ludHMoc3RhcnQsIGVuZCkucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwOwotfQotCi1FeGNlcHRp
b25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnQoUmVmPE5vZGU+JiYgcmVmTm9kZSwgdW5zaWduZWQg
b2Zmc2V0KQotewotICAgIGJvb2wgZGlkTW92ZURvY3VtZW50ID0gZmFsc2U7Ci0gICAgaWYgKCZy
ZWZOb2RlLT5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKLSAgICAgICAgc2V0RG9j
dW1lbnQocmVmTm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIGRpZE1vdmVEb2N1bWVudCA9IHRy
dWU7Ci0gICAgfQotCi0gICAgYXV0byBjaGlsZE5vZGUgPSBjaGVja05vZGVXT2Zmc2V0KHJlZk5v
ZGUsIG9mZnNldCk7CisgICAgYXV0byBjaGlsZE5vZGUgPSBjaGVja05vZGVPZmZzZXRQYWlyKGNv
bnRhaW5lciwgb2Zmc2V0KTsKICAgICBpZiAoY2hpbGROb2RlLmhhc0V4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gY2hpbGROb2RlLnJlbGVhc2VFeGNlcHRpb24oKTsKIAotICAgIG1fc3RhcnQu
c2V0KFdURk1vdmUocmVmTm9kZSksIG9mZnNldCwgY2hpbGROb2RlLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKLQotICAgIGlmIChkaWRNb3ZlRG9jdW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290
Q29udGFpbmVyKG1fc3RhcnQsIG1fZW5kKSkKLSAgICAgICAgY29sbGFwc2UodHJ1ZSk7Ci0KKyAg
ICBtX3N0YXJ0LnNldChXVEZNb3ZlKGNvbnRhaW5lciksIG9mZnNldCwgY2hpbGROb2RlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpKTsKKyAgICBpZiAoIWlzX2x0ZXEoZG9jdW1lbnRPcmRlcihtYWtlQm91
bmRhcnlQb2ludChtX3N0YXJ0KSwgbWFrZUJvdW5kYXJ5UG9pbnQobV9lbmQpKSkpCisgICAgICAg
IG1fZW5kID0gbV9zdGFydDsKKyAgICB1cGRhdGVEb2N1bWVudCgpOwogICAgIHJldHVybiB7IH07
CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmQoUmVmPE5vZGU+JiYgcmVmTm9k
ZSwgdW5zaWduZWQgb2Zmc2V0KQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldEVuZChSZWY8
Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICBib29sIGRpZE1vdmVE
b2N1bWVudCA9IGZhbHNlOwotICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSAmb3duZXJE
b2N1bWVudCgpKSB7Ci0gICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUtPmRvY3VtZW50KCkpOwot
ICAgICAgICBkaWRNb3ZlRG9jdW1lbnQgPSB0cnVlOwotICAgIH0KLQotICAgIGF1dG8gY2hpbGRO
b2RlID0gY2hlY2tOb2RlV09mZnNldChyZWZOb2RlLCBvZmZzZXQpOworICAgIGF1dG8gY2hpbGRO
b2RlID0gY2hlY2tOb2RlT2Zmc2V0UGFpcihjb250YWluZXIsIG9mZnNldCk7CiAgICAgaWYgKGNo
aWxkTm9kZS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS5yZWxlYXNl
RXhjZXB0aW9uKCk7CiAKLSAgICBtX2VuZC5zZXQoV1RGTW92ZShyZWZOb2RlKSwgb2Zmc2V0LCBj
aGlsZE5vZGUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotCi0gICAgaWYgKGRpZE1vdmVEb2N1bWVu
dCB8fCBjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIobV9zdGFydCwgbV9lbmQpKQotICAg
ICAgICBjb2xsYXBzZShmYWxzZSk7Ci0KKyAgICBtX2VuZC5zZXQoV1RGTW92ZShjb250YWluZXIp
LCBvZmZzZXQsIGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgaWYgKCFpc19s
dGVxKGRvY3VtZW50T3JkZXIobWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCksIG1ha2VCb3VuZGFy
eVBvaW50KG1fZW5kKSkpKQorICAgICAgICBtX3N0YXJ0ID0gbV9lbmQ7CisgICAgdXBkYXRlRG9j
dW1lbnQoKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xNjgsMjM3ICsxNDMsMTAzIEBAIHZv
aWQgUmFuZ2U6OmNvbGxhcHNlKGJvb2wgdG9TdGFydCkKICAgICAgICAgbV9zdGFydCA9IG1fZW5k
OwogfQogCi1FeGNlcHRpb25Pcjxib29sPiBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSYgcmVm
Tm9kZSwgdW5zaWduZWQgb2Zmc2V0KQorRXhjZXB0aW9uT3I8Ym9vbD4gUmFuZ2U6OmlzUG9pbnRJ
blJhbmdlKE5vZGUmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0KQogewotICAgIGlmICgmcmVm
Tm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gY2hlY2tOb2RlUmVzdWx0ID0gY2hlY2tOb2RlV09mZnNldChyZWZOb2Rl
LCBvZmZzZXQpOwotICAgIGlmIChjaGVja05vZGVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAg
ICAgICAgLy8gRE9NNCBzcGVjIHJlcXVpcmVzIHVzIHRvIGNoZWNrIHdoZXRoZXIgcmVmTm9kZSBh
bmQgc3RhcnQgY29udGFpbmVyIGhhdmUgdGhlIHNhbWUgcm9vdCBmaXJzdAotICAgICAgICAvLyBi
dXQgd2UgZG8gaXQgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdG8gYXZvaWQgTyhuKSBvcGVyYXRpb24g
aGVyZSBpbiBjb21tb24gY2FzZS4KLSAgICAgICAgaWYgKCFjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cihyZWZOb2RlLCBzdGFydENvbnRhaW5lcigpKSkKKyAgICBpZiAoYXV0byBjaGVja1Jlc3VsdCA9
IGNoZWNrTm9kZU9mZnNldFBhaXIoY29udGFpbmVyLCBvZmZzZXQpOyBjaGVja1Jlc3VsdC5oYXNF
eGNlcHRpb24oKSkgeworICAgICAgICAvLyBET00gc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGlz
IGNoZWNrIGJlIGRvbmUgZmlyc3QgYnV0IHNpbmNlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMs
CisgICAgICAgIC8vIHdlIGNhbiBkbyBpdCBpbiByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIGFuIGV4
dHJhIHJvb3Qgbm9kZSBjaGVjayBpbiB0aGUgY29tbW9uIGNhc2UuCisgICAgICAgIGlmICgmY29u
dGFpbmVyLnJvb3ROb2RlKCkgIT0gJnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGNoZWNrTm9kZVJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBjaGVja1Jlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCk7CiAgICAgfQotCi0gICAgYXV0byBzdGFydENvbXBhcmVSZXN1bHQgPSBjb21wYXJlQm91
bmRhcnlQb2ludHMoJnJlZk5vZGUsIG9mZnNldCwgJnN0YXJ0Q29udGFpbmVyKCksIG1fc3RhcnQu
b2Zmc2V0KCkpOwotICAgIGlmICghKCFzdGFydENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkg
JiYgc3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID49IDApKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBlbmRDb21wYXJlUmVzdWx0ID0gY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZlbmRDb250YWluZXIoKSwgbV9lbmQub2Zmc2V0
KCkpOwotICAgIHJldHVybiAhZW5kQ29tcGFyZVJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBlbmRD
b21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDA7CisgICAgcmV0dXJuIFdlYkNv
cmU6OmlzUG9pbnRJblJhbmdlKG1ha2VTaW1wbGVSYW5nZSgqdGhpcyksIHsgY29udGFpbmVyLCBv
ZmZzZXQgfSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZVBvaW50KE5v
ZGUmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK0V4Y2VwdGlvbk9yPHNob3J0PiBS
YW5nZTo6Y29tcGFyZVBvaW50KE5vZGUmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0KSBjb25z
dAogewotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFu
Z2UuY29tcGFyZVBvaW50Ci0gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAtMSwgMCBvciAxIGRl
cGVuZGluZyBvbiBpZiB0aGUgcG9pbnQgZGVzY3JpYmVkIGJ5IHRoZSAKLSAgICAvLyByZWZOb2Rl
IG5vZGUgYW5kIGFuIG9mZnNldCB3aXRoaW4gdGhlIG5vZGUgaXMgYmVmb3JlLCBzYW1lIGFzLCBv
ciBhZnRlciB0aGUgcmFuZ2UgcmVzcGVjdGl2ZWx5LgotICAgIGlmICgmcmVmTm9kZS5kb2N1bWVu
dCgpICE9ICZvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9u
Z0RvY3VtZW50RXJyb3IgfTsKLQotICAgIGF1dG8gY2hlY2tOb2RlUmVzdWx0ID0gY2hlY2tOb2Rl
V09mZnNldChyZWZOb2RlLCBvZmZzZXQpOwotICAgIGlmIChjaGVja05vZGVSZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgLy8gRE9NNCBzcGVjIHJlcXVpcmVzIHVzIHRvIGNoZWNrIHdo
ZXRoZXIgcmVmTm9kZSBhbmQgc3RhcnQgY29udGFpbmVyIGhhdmUgdGhlIHNhbWUgcm9vdCBmaXJz
dAotICAgICAgICAvLyBidXQgd2UgZG8gaXQgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdG8gYXZvaWQg
TyhuKSBvcGVyYXRpb24gaGVyZSBpbiBjb21tb24gY2FzZS4KLSAgICAgICAgaWYgKCFyZWZOb2Rl
LmlzQ29ubmVjdGVkKCkgJiYgIWNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJlZk5vZGUsIHN0YXJ0
Q29udGFpbmVyKCkpKQorICAgIGlmIChhdXRvIGNoZWNrUmVzdWx0ID0gY2hlY2tOb2RlT2Zmc2V0
UGFpcihjb250YWluZXIsIG9mZnNldCk7IGNoZWNrUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Cisg
ICAgICAgIC8vIERPTSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIHRoaXMgY2hlY2sgYmUgZG9uZSBm
aXJzdCBidXQgc2luY2UgdGhlcmUgYXJlIG5vIHNpZGUgZWZmZWN0cywKKyAgICAgICAgLy8gd2Ug
Y2FuIGRvIGl0IGluIHJldmVyc2Ugb3JkZXIgdG8gYXZvaWQgYW4gZXh0cmEgcm9vdCBub2RlIGNo
ZWNrIGluIHRoZSBjb21tb24gY2FzZS4KKyAgICAgICAgaWYgKCZjb250YWluZXIucm9vdE5vZGUo
KSAhPSAmc3RhcnRDb250YWluZXIoKS5yb290Tm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9OwotICAgICAgICByZXR1cm4gY2hlY2tOb2Rl
UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGNoZWNrUmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKTsKICAgICB9Ci0KLSAgICAvLyBjb21wYXJlIHRvIHN0YXJ0LCBhbmQg
cG9pbnQgY29tZXMgYmVmb3JlCi0gICAgYXV0byBzdGFydENvbXBhcmVSZXN1bHQgPSBjb21wYXJl
Qm91bmRhcnlQb2ludHMoJnJlZk5vZGUsIG9mZnNldCwgJnN0YXJ0Q29udGFpbmVyKCksIG1fc3Rh
cnQub2Zmc2V0KCkpOwotICAgIGlmIChzdGFydENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBzdGFydENvbXBhcmVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwot
ICAgIGlmIChzdGFydENvbXBhcmVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwKQorICAg
IGF1dG8gb3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKHsgY29udGFpbmVyLCBvZmZzZXQgfSwgbWFr
ZVNpbXBsZVJhbmdlKCp0aGlzKSk7CisgICAgaWYgKGlzX2x0KG9yZGVyaW5nKSkKICAgICAgICAg
cmV0dXJuIC0xOwotCi0gICAgLy8gY29tcGFyZSB0byBlbmQsIGFuZCBwb2ludCBjb21lcyBhZnRl
cgotICAgIGF1dG8gZW5kQ29tcGFyZVJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVm
Tm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsKLSAgICBpZiAo
ZW5kQ29tcGFyZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGVuZENvbXBh
cmVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgIGlmIChlbmRDb21wYXJlUmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKKyAgICBpZiAoaXNfZXEob3JkZXJpbmcpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoaXNfZ3Qob3JkZXJpbmcpKQogICAgICAgICByZXR1cm4gMTsK
LQotICAgIC8vIHBvaW50IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhpcyByYW5nZSwgb3Igb24gdGhl
IGJvdW5kYXJ5IHBvaW50cwotICAgIHJldHVybiAwOworICAgIHJldHVybiBFeGNlcHRpb24geyBX
cm9uZ0RvY3VtZW50RXJyb3IgfTsKIH0KIAotRXhjZXB0aW9uT3I8UmFuZ2U6OkNvbXBhcmVSZXN1
bHRzPiBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3QKK0V4Y2VwdGlvbk9y
PFJhbmdlOjpDb21wYXJlUmVzdWx0cz4gUmFuZ2U6OmNvbXBhcmVOb2RlKE5vZGUmIG5vZGUpIGNv
bnN0CiB7CisgICAgLy8gRklYTUU6IFRoaXMgZGVwcmVjYXRlZCBmdW5jdGlvbiBzaG91bGQgYmUg
cmVtb3ZlZC4KKyAgICAvLyBXZSBvcmlnaW5hbGx5IGFkZGVkIGl0IGZvciBpbnRlcm9wZXJhYmls
aXR5IHdpdGggRmlyZWZveC4KKyAgICAvLyBSZWNlbnQgdmVyc2lvbnMgb2YgRmlyZWZveCBoYXZl
IHJlbW92ZWQgaXQuCisKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2Rv
Y3MvRE9NOnJhbmdlLmNvbXBhcmVOb2RlCiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAwLCAx
LCAyLCBvciAzIGJhc2VkIG9uIGlmIHRoZSBub2RlIGlzIGJlZm9yZSwgYWZ0ZXIsCi0gICAgLy8g
YmVmb3JlIGFuZCBhZnRlcihzdXJyb3VuZHMpLCBvciBpbnNpZGUgdGhlIHJhbmdlLCByZXNwZWN0
aXZlbHkKLQotICAgIGlmICghcmVmTm9kZS5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAgIC8vIEZp
cmVmb3ggZG9lc24ndCB0aHJvdyBhbiBleGNlcHRpb24gZm9yIHRoaXMgY2FzZTsgaXQgcmV0dXJu
cyAwLgotICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkU7Ci0gICAgfQorICAgIC8vIGJlZm9yZSBh
bmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5zaWRlIHRoZSByYW5nZSwgcmVzcGVjdGl2ZWx5Lgog
Ci0gICAgaWYgKCZyZWZOb2RlLmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgewotICAg
ICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNhc2U7
IGl0IHJldHVybnMgMC4KKyAgICBpZiAoIW5vZGUuaXNDb25uZWN0ZWQoKSB8fCAmbm9kZS5kb2N1
bWVudCgpICE9IG1fb3duZXJEb2N1bWVudC5wdHIoKSkgeworICAgICAgICAvLyBNYXRjaCBoaXN0
b3JpY2FsIEZpcmVmb3ggYmVoYXZpb3IuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAg
ICB9CiAKLSAgICBhdXRvKiBwYXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnROb2RlKCk7Ci0gICAg
aWYgKCFwYXJlbnROb2RlKSB7Ci0gICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHRoZSB0b3Agb2Yg
dGhlIHRyZWUgd2Ugc2hvdWxkIHJldHVybiBOT0RFX0JFRk9SRV9BTkRfQUZURVIsCi0gICAgICAg
IC8vIGJ1dCB3ZSB0aHJvdyB0byBtYXRjaCBmaXJlZm94IGJlaGF2aW9yLgorICAgIGF1dG8gbm9k
ZVJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShub2RlKTsKKyAgICBpZiAoIW5vZGVSYW5n
ZSkgeworICAgICAgICAvLyBNYXRjaCBoaXN0b3JpY2FsIEZpcmVmb3ggYmVoYXZpb3IuCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAgICAgfQotICAgIGF1dG8g
bm9kZUluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7Ci0KLSAgICBhdXRvIG5vZGVT
dGFydENvbXBhcmVSZXN1bHQgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCk7
Ci0gICAgaWYgKG5vZGVTdGFydENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBub2RlU3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBh
dXRvIG5vZGVFbmRDb21wYXJlUmVzdWx0ID0gY29tcGFyZVBvaW50KCpwYXJlbnROb2RlLCBub2Rl
SW5kZXggKyAxKTsKLSAgICBpZiAobm9kZUVuZENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBub2RlRW5kQ29tcGFyZVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7
Ci0KLSAgICBib29sIG5vZGVTdGFydHNCZWZvcmVSYW5nZSA9IG5vZGVTdGFydENvbXBhcmVSZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwOwotICAgIGJvb2wgbm9kZUVuZHNBZnRlclJhbmdl
ID0gbm9kZUVuZENvbXBhcmVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwOwotCi0gICAg
cmV0dXJuIG5vZGVTdGFydHNCZWZvcmVSYW5nZQotICAgICAgICA/IChub2RlRW5kc0FmdGVyUmFu
Z2UgPyBOT0RFX0JFRk9SRV9BTkRfQUZURVIgOiBOT0RFX0JFRk9SRSkKLSAgICAgICAgOiAobm9k
ZUVuZHNBZnRlclJhbmdlID8gTk9ERV9BRlRFUiA6IE5PREVfSU5TSURFKTsKLX0KIAotc3RhdGlj
IGlubGluZSBOb2RlKiB0b3AoTm9kZSYgbm9kZSkKLXsKLSAgICBhdXRvKiB0b3AgPSAmbm9kZTsK
LSAgICB3aGlsZSAoYXV0byogcGFyZW50ID0gdG9wLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIHRv
cCA9IHBhcmVudDsKLSAgICByZXR1cm4gdG9wOwotfQotCi1FeGNlcHRpb25PcjxzaG9ydD4gUmFu
Z2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93IGhvdywgY29uc3QgUmFuZ2UmIHNv
dXJjZVJhbmdlKSBjb25zdAotewotICAgIGF1dG8qIHRoaXNDb250YWluZXIgPSBjb21tb25BbmNl
c3RvckNvbnRhaW5lcigpOwotICAgIGF1dG8qIHNvdXJjZUNvbnRhaW5lciA9IHNvdXJjZVJhbmdl
LmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7Ci0gICAgaWYgKCF0aGlzQ29udGFpbmVyIHx8ICFz
b3VyY2VDb250YWluZXIgfHwgJnRoaXNDb250YWluZXItPmRvY3VtZW50KCkgIT0gJnNvdXJjZUNv
bnRhaW5lci0+ZG9jdW1lbnQoKSB8fCB0b3AoKnRoaXNDb250YWluZXIpICE9IHRvcCgqc291cmNl
Q29udGFpbmVyKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJv
ciB9OwotCi0gICAgc3dpdGNoIChob3cpIHsKLSAgICBjYXNlIFNUQVJUX1RPX1NUQVJUOgotICAg
ICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQsIHNvdXJjZVJhbmdlLm1f
c3RhcnQpOwotICAgIGNhc2UgU1RBUlRfVE9fRU5EOgotICAgICAgICByZXR1cm4gY29tcGFyZUJv
dW5kYXJ5UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS5tX3N0YXJ0KTsKLSAgICBjYXNlIEVORF9U
T19FTkQ6Ci0gICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9lbmQsIHNvdXJj
ZVJhbmdlLm1fZW5kKTsKLSAgICBjYXNlIEVORF9UT19TVEFSVDoKLSAgICAgICAgcmV0dXJuIGNv
bXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS5tX2VuZCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CisgICAgYXV0byBzdGFydE9y
ZGVyaW5nID0gZG9jdW1lbnRPcmRlcihub2RlUmFuZ2UtPnN0YXJ0LCBtYWtlQm91bmRhcnlQb2lu
dChtX3N0YXJ0KSk7CisgICAgYXV0byBlbmRPcmRlcmluZyA9IGRvY3VtZW50T3JkZXIobm9kZVJh
bmdlLT5lbmQsIG1ha2VCb3VuZGFyeVBvaW50KG1fZW5kKSk7CisgICAgaWYgKGlzX2d0ZXEoc3Rh
cnRPcmRlcmluZykgJiYgaXNfbHRlcShlbmRPcmRlcmluZykpCisgICAgICAgIHJldHVybiBOT0RF
X0lOU0lERTsKKyAgICBpZiAoaXNfbHRlcShzdGFydE9yZGVyaW5nKSAmJiBpc19ndGVxKGVuZE9y
ZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFX0FORF9BRlRFUjsKKyAgICBpZiAo
aXNfbHRlcShzdGFydE9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOworICAg
IGlmIChpc19ndGVxKGVuZE9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIE5PREVfQUZURVI7Cisg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9OwogfQogCi1FeGNlcHRp
b25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKHVuc2ln
bmVkIHNob3J0IGhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlKSBjb25zdAorRXhjZXB0aW9u
T3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHModW5zaWduZWQgc2hvcnQgaG93
LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0CiB7CisgICAgY29uc3QgUmFuZ2VCb3Vu
ZGFyeVBvaW50KiB0aGlzUG9pbnQ7CisgICAgY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50KiBvdGhl
clBvaW50OwogICAgIHN3aXRjaCAoaG93KSB7CiAgICAgY2FzZSBTVEFSVF9UT19TVEFSVDoKKyAg
ICAgICAgdGhpc1BvaW50ID0gJm1fc3RhcnQ7CisgICAgICAgIG90aGVyUG9pbnQgPSAmc291cmNl
UmFuZ2UubV9zdGFydDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTVEFSVF9UT19FTkQ6Cisg
ICAgICAgIHRoaXNQb2ludCA9ICZtX2VuZDsKKyAgICAgICAgb3RoZXJQb2ludCA9ICZzb3VyY2VS
YW5nZS5tX3N0YXJ0OworICAgICAgICBicmVhazsKICAgICBjYXNlIEVORF9UT19FTkQ6CisgICAg
ICAgIHRoaXNQb2ludCA9ICZtX2VuZDsKKyAgICAgICAgb3RoZXJQb2ludCA9ICZzb3VyY2VSYW5n
ZS5tX2VuZDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFTkRfVE9fU1RBUlQ6Ci0gICAgICAg
IHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMoc3RhdGljX2Nhc3Q8Q29tcGFyZUhvdz4oaG93
KSwgc291cmNlUmFuZ2UpOworICAgICAgICB0aGlzUG9pbnQgPSAmbV9zdGFydDsKKyAgICAgICAg
b3RoZXJQb2ludCA9ICZzb3VyY2VSYW5nZS5tX2VuZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAg
ICAgfQotICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwotfQotCi1F
eGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhOb2RlKiBjb250
YWluZXJBLCB1bnNpZ25lZCBvZmZzZXRBLCBOb2RlKiBjb250YWluZXJCLCB1bnNpZ25lZCBvZmZz
ZXRCKQotewotICAgIEFTU0VSVChjb250YWluZXJBKTsKLSAgICBBU1NFUlQoY29udGFpbmVyQik7
Ci0KLSAgICBpZiAoIWNvbnRhaW5lckEpCisgICAgYXV0byBvcmRlcmluZyA9IGRvY3VtZW50T3Jk
ZXIobWFrZUJvdW5kYXJ5UG9pbnQoKnRoaXNQb2ludCksIG1ha2VCb3VuZGFyeVBvaW50KCpvdGhl
clBvaW50KSk7CisgICAgaWYgKGlzX2x0KG9yZGVyaW5nKSkKICAgICAgICAgcmV0dXJuIC0xOwot
ICAgIGlmICghY29udGFpbmVyQikKKyAgICBpZiAoaXNfZXEob3JkZXJpbmcpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAoaXNfZ3Qob3JkZXJpbmcpKQogICAgICAgICByZXR1cm4gMTsKLQot
ICAgIC8vIHNlZSBET00yIHRyYXZlcnNhbCAmIHJhbmdlIHNlY3Rpb24gMi41Ci0KLSAgICAvLyBj
YXNlIDE6IGJvdGggcG9pbnRzIGhhdmUgdGhlIHNhbWUgY29udGFpbmVyCi0gICAgaWYgKGNvbnRh
aW5lckEgPT0gY29udGFpbmVyQikgewotICAgICAgICBpZiAob2Zmc2V0QSA9PSBvZmZzZXRCKQot
ICAgICAgICAgICAgcmV0dXJuIDA7IC8vIEEgaXMgZXF1YWwgdG8gQgotICAgICAgICBpZiAob2Zm
c2V0QSA8IG9mZnNldEIpCi0gICAgICAgICAgICByZXR1cm4gLTE7IC8vIEEgaXMgYmVmb3JlIEIK
LSAgICAgICAgcmV0dXJuIDE7IC8vIEEgaXMgYWZ0ZXIgQgotICAgIH0KLQotICAgIC8vIGNhc2Ug
Mjogbm9kZSBDIChjb250YWluZXIgQiBvciBhbiBhbmNlc3RvcikgaXMgYSBjaGlsZCBub2RlIG9m
IEEKLSAgICBOb2RlKiBjID0gY29udGFpbmVyQjsKLSAgICB3aGlsZSAoYyAmJiBjLT5wYXJlbnRO
b2RlKCkgIT0gY29udGFpbmVyQSkKLSAgICAgICAgYyA9IGMtPnBhcmVudE5vZGUoKTsKLSAgICBp
ZiAoYykgewotICAgICAgICB1bnNpZ25lZCBvZmZzZXRDID0gMDsKLSAgICAgICAgTm9kZSogbiA9
IGNvbnRhaW5lckEtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgd2hpbGUgKG4gIT0gYyAmJiBvZmZz
ZXRDIDwgb2Zmc2V0QSkgewotICAgICAgICAgICAgb2Zmc2V0QysrOwotICAgICAgICAgICAgbiA9
IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldEEgPD0gb2Zm
c2V0QykKLSAgICAgICAgICAgIHJldHVybiAtMTsgLy8gQSBpcyBiZWZvcmUgQgotICAgICAgICBy
ZXR1cm4gMTsgLy8gQSBpcyBhZnRlciBCCi0gICAgfQotCi0gICAgLy8gY2FzZSAzOiBub2RlIEMg
KGNvbnRhaW5lciBBIG9yIGFuIGFuY2VzdG9yKSBpcyBhIGNoaWxkIG5vZGUgb2YgQgotICAgIGMg
PSBjb250YWluZXJBOwotICAgIHdoaWxlIChjICYmIGMtPnBhcmVudE5vZGUoKSAhPSBjb250YWlu
ZXJCKQotICAgICAgICBjID0gYy0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChjKSB7Ci0gICAgICAg
IHVuc2lnbmVkIG9mZnNldEMgPSAwOwotICAgICAgICBOb2RlKiBuID0gY29udGFpbmVyQi0+Zmly
c3RDaGlsZCgpOwotICAgICAgICB3aGlsZSAobiAhPSBjICYmIG9mZnNldEMgPCBvZmZzZXRCKSB7
Ci0gICAgICAgICAgICBvZmZzZXRDKys7Ci0gICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmco
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0QyA8IG9mZnNldEIpCi0gICAgICAgICAg
ICByZXR1cm4gLTE7IC8vIEEgaXMgYmVmb3JlIEIKLSAgICAgICAgcmV0dXJuIDE7IC8vIEEgaXMg
YWZ0ZXIgQgotICAgIH0KLQotICAgIC8vIGNhc2UgNDogY29udGFpbmVycyBBICYgQiBhcmUgc2li
bGluZ3MsIG9yIGNoaWxkcmVuIG9mIHNpYmxpbmdzCi0gICAgLy8gIyMjIHdlIG5lZWQgdG8gZG8g
YSB0cmF2ZXJzYWwgaGVyZSBpbnN0ZWFkCi0gICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yKCpjb250YWluZXJBLCAqY29udGFpbmVyQik7Ci0gICAgaWYgKCFj
b21tb25BbmNlc3RvcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRF
cnJvciB9OwotICAgIE5vZGUqIGNoaWxkQSA9IGNvbnRhaW5lckE7Ci0gICAgd2hpbGUgKGNoaWxk
QSAmJiBjaGlsZEEtPnBhcmVudE5vZGUoKSAhPSBjb21tb25BbmNlc3RvcikKLSAgICAgICAgY2hp
bGRBID0gY2hpbGRBLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFjaGlsZEEpCi0gICAgICAgIGNo
aWxkQSA9IGNvbW1vbkFuY2VzdG9yLmdldCgpOwotICAgIE5vZGUqIGNoaWxkQiA9IGNvbnRhaW5l
ckI7Ci0gICAgd2hpbGUgKGNoaWxkQiAmJiBjaGlsZEItPnBhcmVudE5vZGUoKSAhPSBjb21tb25B
bmNlc3RvcikKLSAgICAgICAgY2hpbGRCID0gY2hpbGRCLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYg
KCFjaGlsZEIpCi0gICAgICAgIGNoaWxkQiA9IGNvbW1vbkFuY2VzdG9yLmdldCgpOwotCi0gICAg
aWYgKGNoaWxkQSA9PSBjaGlsZEIpCi0gICAgICAgIHJldHVybiAwOyAvLyBBIGlzIGVxdWFsIHRv
IEIKLQotICAgIE5vZGUqIG4gPSBjb21tb25BbmNlc3Rvci0+Zmlyc3RDaGlsZCgpOwotICAgIHdo
aWxlIChuKSB7Ci0gICAgICAgIGlmIChuID09IGNoaWxkQSkKLSAgICAgICAgICAgIHJldHVybiAt
MTsgLy8gQSBpcyBiZWZvcmUgQgotICAgICAgICBpZiAobiA9PSBjaGlsZEIpCi0gICAgICAgICAg
ICByZXR1cm4gMTsgLy8gQSBpcyBhZnRlciBCCi0gICAgICAgIG4gPSBuLT5uZXh0U2libGluZygp
OwotICAgIH0KLQotICAgIC8vIFNob3VsZCBuZXZlciByZWFjaCB0aGlzIHBvaW50LgotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1FeGNlcHRpb25PcjxzaG9y
dD4gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQm
IGJvdW5kYXJ5QSwgY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeUIpCi17Ci0gICAg
cmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhib3VuZGFyeUEuY29udGFpbmVyKCksIGJvdW5k
YXJ5QS5vZmZzZXQoKSwgYm91bmRhcnlCLmNvbnRhaW5lcigpLCBib3VuZGFyeUIub2Zmc2V0KCkp
OwotfQotCi1ib29sIFJhbmdlOjpib3VuZGFyeVBvaW50c1ZhbGlkKCkgY29uc3QKLXsKLSAgICBh
dXRvIHJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBtX2VuZCk7Ci0gICAg
cmV0dXJuICFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpIDw9IDA7CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9Owog
fQogCiBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6ZGVsZXRlQ29udGVudHMoKQpAQCAtNDA5LDI2
ICsyNTAsOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6ZGVsZXRlQ29udGVudHMoKQogICAg
IHJldHVybiB7IH07CiB9CiAKLUV4Y2VwdGlvbk9yPGJvb2w+IFJhbmdlOjppbnRlcnNlY3RzTm9k
ZShOb2RlJiByZWZOb2RlKSBjb25zdAorYm9vbCBSYW5nZTo6aW50ZXJzZWN0c05vZGUoTm9kZSYg
bm9kZSkgY29uc3QKIHsKLSAgICBpZiAoIXJlZk5vZGUuaXNDb25uZWN0ZWQoKSB8fCAmcmVmTm9k
ZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8qIHBhcmVudE5vZGUgPSByZWZOb2RlLnBhcmVudE5vZGUoKTsKLSAgICBpZiAo
IXBhcmVudE5vZGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgdW5zaWduZWQgbm9kZUlu
ZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7Ci0KLSAgICAvLyBJZiAocGFyZW50Tm9k
ZSwgbm9kZUluZGV4KSBpcyBiZWZvcmUgZW5kIGFuZCAocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsg
MSkgaXMgYWZ0ZXIgc3RhcnQsIHJldHVybiB0cnVlLgotICAgIC8vIE90aGVyd2lzZSwgcmV0dXJu
IGZhbHNlLgotICAgIGF1dG8gY29tcGFyZUVuZFJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50
cyhwYXJlbnROb2RlLCBub2RlSW5kZXgsIG1fZW5kLmNvbnRhaW5lcigpLCBtX2VuZC5vZmZzZXQo
KSk7Ci0gICAgaWYgKGNvbXBhcmVFbmRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBjb21wYXJlRW5kUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBhdXRvIGNvbXBh
cmVTdGFydFJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5k
ZXggKyAxLCBtX3N0YXJ0LmNvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpKTsKLSAgICBpZiAo
Y29tcGFyZVN0YXJ0UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gY29tcGFy
ZVN0YXJ0UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gY29tcGFyZUVuZFJl
c3VsdC5yZXR1cm5WYWx1ZSgpID09IC0xICYmIGNvbXBhcmVTdGFydFJlc3VsdC5yZXR1cm5WYWx1
ZSgpID09IDE7CisgICAgcmV0dXJuIGludGVyc2VjdHMobWFrZVNpbXBsZVJhbmdlKCp0aGlzKSwg
bm9kZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgTm9kZSogaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21t
b25Sb290KE5vZGUqIG5vZGUsIE5vZGUqIGNvbW1vblJvb3QpCkBAIC00NjQsMzIgKzI4OCwxMSBA
QCBzdGF0aWMgaW5saW5lIE5vZGUqIGNoaWxkT2ZDb21tb25Sb290QmVmb3JlT2Zmc2V0KE5vZGUq
IGNvbnRhaW5lciwgdW5zaWduZWQgb2ZmcwogICAgIHJldHVybiBjb250YWluZXI7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgbGVuZ3RoT2ZDb250ZW50c0luTm9kZShOb2RlJiBub2RlKQot
ewotICAgIC8vIFRoaXMgc3dpdGNoIHN0YXRlbWVudCBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0
aGF0IG9mIFJhbmdlOjpwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cy4KLSAgICBzd2l0Y2gg
KG5vZGUubm9kZVR5cGUoKSkgewotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgot
ICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNh
c2UgTm9kZTo6VEVYVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgot
ICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19J
TlNUUlVDVElPTl9OT0RFOgotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4o
bm9kZSkubGVuZ3RoKCk7Ci0gICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6Ci0gICAgY2FzZSBO
b2RlOjpET0NVTUVOVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9E
RToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KG5vZGUpLmNvdW50Q2hp
bGROb2RlcygpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQogRXhjZXB0aW9uT3I8UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6cHJv
Y2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUgYWN0aW9uKQogewogICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudDsKICAgICBpZiAoYWN0aW9uID09IEV4dHJhY3QgfHwgYWN0aW9uID09
IENsb25lKQotICAgICAgICBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShvd25l
ckRvY3VtZW50KCkpOworICAgICAgICBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0
ZShtX293bmVyRG9jdW1lbnQpOwogCiAgICAgaWYgKGNvbGxhcHNlZCgpKQogICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7CkBAIC01MDksOCArMzEyLDggQEAgRXhjZXB0aW9uT3I8UmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+PiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUgYWN0aW9uKQog
ICAgIFJhbmdlQm91bmRhcnlQb2ludCBvcmlnaW5hbEVuZChtX2VuZCk7CiAKICAgICAvLyB3aGF0
IGlzIHRoZSBoaWdoZXN0IG5vZGUgdGhhdCBwYXJ0aWFsbHkgc2VsZWN0cyB0aGUgc3RhcnQgLyBl
bmQgb2YgdGhlIHJhbmdlPwotICAgIFJlZlB0cjxOb2RlPiBwYXJ0aWFsU3RhcnQgPSBoaWdoZXN0
QW5jZXN0b3JVbmRlckNvbW1vblJvb3Qob3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgY29tbW9u
Um9vdC5nZXQoKSk7Ci0gICAgUmVmUHRyPE5vZGU+IHBhcnRpYWxFbmQgPSBoaWdoZXN0QW5jZXN0
b3JVbmRlckNvbW1vblJvb3Qob3JpZ2luYWxFbmQuY29udGFpbmVyKCksIGNvbW1vblJvb3QuZ2V0
KCkpOworICAgIFJlZlB0cjxOb2RlPiBwYXJ0aWFsU3RhcnQgPSBoaWdoZXN0QW5jZXN0b3JVbmRl
ckNvbW1vblJvb3QoJm9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCksIGNvbW1vblJvb3QuZ2V0KCkp
OworICAgIFJlZlB0cjxOb2RlPiBwYXJ0aWFsRW5kID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21t
b25Sb290KCZvcmlnaW5hbEVuZC5jb250YWluZXIoKSwgY29tbW9uUm9vdC5nZXQoKSk7CiAKICAg
ICAvLyBTdGFydCBhbmQgZW5kIGNvbnRhaW5lcnMgYXJlIGRpZmZlcmVudC4KICAgICAvLyBUaGVy
ZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllcyBoZXJlOgpAQCAtNTMzLDI4ICszMzYsMjggQEAgRXhj
ZXB0aW9uT3I8UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRz
KEFjdGlvblR5cGUgYWN0aW9uKQogICAgIC8vIGFmdGVyIGFueSBET00gbXV0YXRpb24gZXZlbnQs
IGF0IHZhcmlvdXMgc3RhZ2VzIGJlbG93LiBTZWUgd2Via2l0IGJ1ZyA2MDM1MC4KIAogICAgIFJl
ZlB0cjxOb2RlPiBsZWZ0Q29udGVudHM7Ci0gICAgaWYgKG9yaWdpbmFsU3RhcnQuY29udGFpbmVy
KCkgIT0gY29tbW9uUm9vdCAmJiBjb21tb25Sb290LT5jb250YWlucyhvcmlnaW5hbFN0YXJ0LmNv
bnRhaW5lcigpKSkgewotICAgICAgICBhdXRvIGZpcnN0UmVzdWx0ID0gcHJvY2Vzc0NvbnRlbnRz
QmV0d2Vlbk9mZnNldHMoYWN0aW9uLCBudWxscHRyLCBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigp
LCBvcmlnaW5hbFN0YXJ0Lm9mZnNldCgpLCBsZW5ndGhPZkNvbnRlbnRzSW5Ob2RlKCpvcmlnaW5h
bFN0YXJ0LmNvbnRhaW5lcigpKSk7Ci0gICAgICAgIGF1dG8gc2Vjb25kUmVzdWx0ID0gcHJvY2Vz
c0FuY2VzdG9yc0FuZFRoZWlyU2libGluZ3MoYWN0aW9uLCBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5l
cigpLCBQcm9jZXNzQ29udGVudHNGb3J3YXJkLCBXVEZNb3ZlKGZpcnN0UmVzdWx0KSwgY29tbW9u
Um9vdC5nZXQoKSk7CisgICAgaWYgKCZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpICE9IGNvbW1v
blJvb3QgJiYgY29tbW9uUm9vdC0+Y29udGFpbnMoJm9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCkp
KSB7CisgICAgICAgIGF1dG8gZmlyc3RSZXN1bHQgPSBwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zm
c2V0cyhhY3Rpb24sIG51bGxwdHIsICZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpLCBvcmlnaW5h
bFN0YXJ0Lm9mZnNldCgpLCBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpLmxlbmd0aCgpKTsKKyAg
ICAgICAgYXV0byBzZWNvbmRSZXN1bHQgPSBwcm9jZXNzQW5jZXN0b3JzQW5kVGhlaXJTaWJsaW5n
cyhhY3Rpb24sICZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpLCBQcm9jZXNzQ29udGVudHNGb3J3
YXJkLCBXVEZNb3ZlKGZpcnN0UmVzdWx0KSwgY29tbW9uUm9vdC5nZXQoKSk7CiAgICAgICAgIC8v
IEZJWE1FOiBBIGJpdCBwZWN1bGlhciB0aGF0IHdlIHNpbGVudGx5IGlnbm9yZSB0aGUgZXhjZXB0
aW9uIGhlcmUsIGJ1dCB3ZSBkbyBoYXZlIGF0IGxlYXN0IHNvbWUgcmVncmVzc2lvbiB0ZXN0cyB0
aGF0IHJlbHkgb24gdGhpcyBiZWhhdmlvci4KICAgICAgICAgaWYgKCFzZWNvbmRSZXN1bHQuaGFz
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBsZWZ0Q29udGVudHMgPSBzZWNvbmRSZXN1bHQucmVs
ZWFzZVJldHVyblZhbHVlKCk7CiAgICAgfQogCiAgICAgUmVmUHRyPE5vZGU+IHJpZ2h0Q29udGVu
dHM7Ci0gICAgaWYgKCZlbmRDb250YWluZXIoKSAhPSBjb21tb25Sb290ICYmIGNvbW1vblJvb3Qt
PmNvbnRhaW5zKG9yaWdpbmFsRW5kLmNvbnRhaW5lcigpKSkgewotICAgICAgICBhdXRvIGZpcnN0
UmVzdWx0ID0gcHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMoYWN0aW9uLCBudWxscHRyLCBv
cmlnaW5hbEVuZC5jb250YWluZXIoKSwgMCwgb3JpZ2luYWxFbmQub2Zmc2V0KCkpOwotICAgICAg
ICBhdXRvIHNlY29uZFJlc3VsdCA9IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKGFj
dGlvbiwgb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIFByb2Nlc3NDb250ZW50c0JhY2t3YXJkLCBX
VEZNb3ZlKGZpcnN0UmVzdWx0KSwgY29tbW9uUm9vdC5nZXQoKSk7CisgICAgaWYgKCZlbmRDb250
YWluZXIoKSAhPSBjb21tb25Sb290ICYmIGNvbW1vblJvb3QtPmNvbnRhaW5zKCZvcmlnaW5hbEVu
ZC5jb250YWluZXIoKSkpIHsKKyAgICAgICAgYXV0byBmaXJzdFJlc3VsdCA9IHByb2Nlc3NDb250
ZW50c0JldHdlZW5PZmZzZXRzKGFjdGlvbiwgbnVsbHB0ciwgJm9yaWdpbmFsRW5kLmNvbnRhaW5l
cigpLCAwLCBvcmlnaW5hbEVuZC5vZmZzZXQoKSk7CisgICAgICAgIGF1dG8gc2Vjb25kUmVzdWx0
ID0gcHJvY2Vzc0FuY2VzdG9yc0FuZFRoZWlyU2libGluZ3MoYWN0aW9uLCAmb3JpZ2luYWxFbmQu
Y29udGFpbmVyKCksIFByb2Nlc3NDb250ZW50c0JhY2t3YXJkLCBXVEZNb3ZlKGZpcnN0UmVzdWx0
KSwgY29tbW9uUm9vdC5nZXQoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBBIGJpdCBwZWN1bGlhciB0
aGF0IHdlIHNpbGVudGx5IGlnbm9yZSB0aGUgZXhjZXB0aW9uIGhlcmUsIGJ1dCB3ZSBkbyBoYXZl
IGF0IGxlYXN0IHNvbWUgcmVncmVzc2lvbiB0ZXN0cyB0aGF0IHJlbHkgb24gdGhpcyBiZWhhdmlv
ci4KICAgICAgICAgaWYgKCFzZWNvbmRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICByaWdodENvbnRlbnRzID0gc2Vjb25kUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAg
IH0KIAogICAgIC8vIGRlbGV0ZSBhbGwgY2hpbGRyZW4gb2YgY29tbW9uUm9vdCBiZXR3ZWVuIHRo
ZSBzdGFydCBhbmQgZW5kIGNvbnRhaW5lcgotICAgIFJlZlB0cjxOb2RlPiBwcm9jZXNzU3RhcnQg
PSBjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldChvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigp
LCBvcmlnaW5hbFN0YXJ0Lm9mZnNldCgpLCBjb21tb25Sb290LmdldCgpKTsKLSAgICBpZiAocHJv
Y2Vzc1N0YXJ0ICYmIG9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCkgIT0gY29tbW9uUm9vdCkgLy8g
cHJvY2Vzc1N0YXJ0IGNvbnRhaW5zIG5vZGVzIGJlZm9yZSBtX3N0YXJ0LgorICAgIFJlZlB0cjxO
b2RlPiBwcm9jZXNzU3RhcnQgPSBjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldCgmb3JpZ2lu
YWxTdGFydC5jb250YWluZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgY29tbW9uUm9vdC5n
ZXQoKSk7CisgICAgaWYgKHByb2Nlc3NTdGFydCAmJiAmb3JpZ2luYWxTdGFydC5jb250YWluZXIo
KSAhPSBjb21tb25Sb290KSAvLyBwcm9jZXNzU3RhcnQgY29udGFpbnMgbm9kZXMgYmVmb3JlIG1f
c3RhcnQuCiAgICAgICAgIHByb2Nlc3NTdGFydCA9IHByb2Nlc3NTdGFydC0+bmV4dFNpYmxpbmco
KTsKLSAgICBSZWZQdHI8Tm9kZT4gcHJvY2Vzc0VuZCA9IGNoaWxkT2ZDb21tb25Sb290QmVmb3Jl
T2Zmc2V0KG9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBvcmlnaW5hbEVuZC5vZmZzZXQoKSwgY29t
bW9uUm9vdC5nZXQoKSk7CisgICAgUmVmUHRyPE5vZGU+IHByb2Nlc3NFbmQgPSBjaGlsZE9mQ29t
bW9uUm9vdEJlZm9yZU9mZnNldCgmb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIG9yaWdpbmFsRW5k
Lm9mZnNldCgpLCBjb21tb25Sb290LmdldCgpKTsKIAogICAgIC8vIENvbGxhcHNlIHRoZSByYW5n
ZSwgbWFraW5nIHN1cmUgdGhhdCB0aGUgcmVzdWx0IGlzIG5vdCB3aXRoaW4gYSBub2RlIHRoYXQg
d2FzIHBhcnRpYWxseSBzZWxlY3RlZC4KICAgICBpZiAoYWN0aW9uID09IEV4dHJhY3QgfHwgYWN0
aW9uID09IERlbGV0ZSkgewpAQCAtNjE5LDcgKzQyMiw2IEBAIHN0YXRpYyBFeGNlcHRpb25PcjxS
ZWZQdHI8Tm9kZT4+IHByb2Nlc3NDb250ZW50c0JldHdlZW5PZmZzZXRzKFJhbmdlOjpBY3Rpb25U
eXBlCiAKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0OwogCi0gICAgLy8gVGhpcyBzd2l0Y2ggc3Rh
dGVtZW50IG11c3QgYmUgY29uc2lzdGVudCB3aXRoIHRoYXQgb2YgbGVuZ3RoT2ZDb250ZW50c0lu
Tm9kZS4KICAgICBzd2l0Y2ggKGNvbnRhaW5lci0+bm9kZVR5cGUoKSkgewogICAgIGNhc2UgTm9k
ZTo6VEVYVF9OT0RFOgogICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgpAQCAtODY4
LDMwICs2NzAsMTcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6Omluc2VydE5vZGUoUmVmPE5v
ZGU+JiYgbm9kZSkKIAogU3RyaW5nIFJhbmdlOjp0b1N0cmluZygpIGNvbnN0CiB7CisgICAgYXV0
byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqdGhpcyk7CiAgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOwotCi0gICAgTm9kZSogcGFzdExhc3QgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdDsgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIGF1dG8gdHlwZSA9IG5vZGUtPm5vZGVUeXBl
KCk7Ci0gICAgICAgIGlmICh0eXBlID09IE5vZGU6OlRFWFRfTk9ERSB8fCB0eXBlID09IE5vZGU6
OkNEQVRBX1NFQ1RJT05fTk9ERSkgewotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBub2Rl
ID09ICZzdGFydENvbnRhaW5lcigpID8gbV9zdGFydC5vZmZzZXQoKSA6IDBVOwotICAgICAgICAg
ICAgdW5zaWduZWQgZW5kID0gbm9kZSA9PSAmZW5kQ29udGFpbmVyKCkgPyBzdGQ6Om1heChzdGFy
dCwgbV9lbmQub2Zmc2V0KCkpIDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTdWJzdHJpbmcoZG93bmNhc3Q8Q2hhcmFjdGVy
RGF0YT4oKm5vZGUpLmRhdGEoKSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgICBmb3IgKGF1dG8m
IG5vZGUgOiBpbnRlcnNlY3RpbmdOb2RlcyhyYW5nZSkpIHsKKyAgICAgICAgaWYgKGlzPENoYXJh
Y3RlckRhdGE+KG5vZGUpKSB7CisgICAgICAgICAgICBhdXRvIG9mZnNldFJhbmdlID0gY2hhcmFj
dGVyRGF0YU9mZnNldFJhbmdlKHJhbmdlLCBub2RlKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kU3Vic3RyaW5nKGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpLmRhdGEoKSwgb2Zmc2V0
UmFuZ2Uuc3RhcnQsIG9mZnNldFJhbmdlLmVuZCAtIG9mZnNldFJhbmdlLnN0YXJ0KTsKICAgICAg
ICAgfQogICAgIH0KLQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmlu
ZyBSYW5nZTo6dGV4dCgpIGNvbnN0Ci17Ci0gICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgbGF5b3V0
LCBzaW5jZSBwbGFpblRleHQgdXNlcyBsaW5lIGJveGVzIGluIHRoZSByZW5kZXIgdHJlZS4KLSAg
ICAvLyBGSVhNRTogQXMgd2l0aCBpbm5lclRleHQsIHdlJ2QgbGlrZSB0aGlzIHRvIHdvcmsgZXZl
biBpZiB0aGVyZSBhcmUgbm8gcmVuZGVyIG9iamVjdHMuCi0gICAgc3RhcnRDb250YWluZXIoKS5k
b2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwotCi0gICAgcmV0dXJuIHBsYWluVGV4dChtYWtlU2lt
cGxlUmFuZ2UoKnRoaXMpKTsKLX0KLQogLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJz
aW5nLyN3aWRsLVJhbmdlLWNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudC1Eb2N1bWVudEZyYWdtZW50
LURPTVN0cmluZy1mcmFnbWVudAogRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBS
YW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwKQogewpA
QCAtOTA4LDEyICs2OTcsNyBAQCBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVudD4+IFJh
bmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBX
ZWJDb3JlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoKmVsZW1lbnQsIG1hcmt1cCwgQWxsb3dT
Y3JpcHRpbmdDb250ZW50QW5kRG9Ob3RNYXJrQWxyZWFkeVN0YXJ0ZWQpOwogfQogCi12b2lkIFJh
bmdlOjpkZXRhY2goKQotewotICAgIC8vIFRoaXMgaXMgbm93IGEgbm8tb3AgYXMgcGVyIHRoZSBE
T00gc3BlY2lmaWNhdGlvbi4KLX0KLQotRXhjZXB0aW9uT3I8Tm9kZSo+IFJhbmdlOjpjaGVja05v
ZGVXT2Zmc2V0KE5vZGUmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK0V4Y2VwdGlvbk9y
PE5vZGUqPiBSYW5nZTo6Y2hlY2tOb2RlT2Zmc2V0UGFpcihOb2RlJiBub2RlLCB1bnNpZ25lZCBv
ZmZzZXQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKCkpIHsKICAgICAgICAg
Y2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6CkBAIC05NDMsNTkgKzcyNyw1NSBAQCBFeGNl
cHRpb25PcjxOb2RlKj4gUmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQoTm9kZSYgbm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0KSBjb25zdAogCiBSZWY8UmFuZ2U+IFJhbmdlOjpjbG9uZVJhbmdlKCkgY29uc3QK
IHsKLSAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZShvd25lckRvY3VtZW50KCkpOworICAgIGF1dG8g
cmVzdWx0ID0gY3JlYXRlKG1fb3duZXJEb2N1bWVudCk7CiAgICAgcmVzdWx0LT5zZXRTdGFydChz
dGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpKTsKICAgICByZXN1bHQtPnNldEVuZChl
bmRDb250YWluZXIoKSwgbV9lbmQub2Zmc2V0KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRTdGFydEFmdGVyKE5vZGUmIHJlZk5vZGUpCitF
eGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlJiBub2RlKQogewotICAg
IGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVu
dE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWROb2RlVHlwZUVycm9yIH07Ci0gICAgcmV0dXJuIHNldFN0YXJ0KCpyZWZOb2RlLnBhcmVu
dE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCkgKyAxKTsKKyAgICByZXR1cm4gc2V0
U3RhcnQoKnBhcmVudCwgbm9kZS5jb21wdXRlTm9kZUluZGV4KCkgKyAxKTsKIH0KIAotRXhjZXB0
aW9uT3I8dm9pZD4gUmFuZ2U6OnNldEVuZEJlZm9yZShOb2RlJiByZWZOb2RlKQorRXhjZXB0aW9u
T3I8dm9pZD4gUmFuZ2U6OnNldEVuZEJlZm9yZShOb2RlJiBub2RlKQogewotICAgIGlmICghcmVm
Tm9kZS5wYXJlbnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsK
KyAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2Rl
VHlwZUVycm9yIH07Ci0gICAgcmV0dXJuIHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJl
Zk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpKTsKKyAgICByZXR1cm4gc2V0RW5kKCpwYXJlbnQsIG5v
ZGUuY29tcHV0ZU5vZGVJbmRleCgpKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNl
dEVuZEFmdGVyKE5vZGUmIHJlZk5vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0RW5k
QWZ0ZXIoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKQorICAg
IGF1dG8gcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwotICAgIHJldHVy
biBzZXRFbmQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgo
KSArIDEpOworICAgIHJldHVybiBzZXRFbmQoKnBhcmVudCwgbm9kZS5jb21wdXRlTm9kZUluZGV4
KCkgKyAxKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNlbGVjdE5vZGUoTm9kZSYg
cmVmTm9kZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUmIG5vZGUp
CiB7Ci0gICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkKKyAgICBhdXRvIHBhcmVudCA9IG5v
ZGUucGFyZW50Tm9kZSgpOworICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKLQotICAgIGlmICgmb3duZXJEb2N1bWVudCgp
ICE9ICZyZWZOb2RlLmRvY3VtZW50KCkpCi0gICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUuZG9j
dW1lbnQoKSk7Ci0KLSAgICB1bnNpZ25lZCBpbmRleCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRl
eCgpOwotICAgIGF1dG8gcmVzdWx0ID0gc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCBp
bmRleCk7CisgICAgdW5zaWduZWQgaW5kZXggPSBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IHNldFN0YXJ0KCpwYXJlbnQsIGluZGV4KTsKICAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KTsKLSAgICByZXR1cm4gc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgaW5kZXggKyAxKTsK
KyAgICByZXR1cm4gc2V0RW5kKCpwYXJlbnQsIGluZGV4ICsgMSk7CiB9CiAKLUV4Y2VwdGlvbk9y
PHZvaWQ+IFJhbmdlOjpzZWxlY3ROb2RlQ29udGVudHMoTm9kZSYgcmVmTm9kZSkKK0V4Y2VwdGlv
bk9yPHZvaWQ+IFJhbmdlOjpzZWxlY3ROb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKIHsKLSAgICBp
ZiAocmVmTm9kZS5pc0RvY3VtZW50VHlwZU5vZGUoKSkKKyAgICBpZiAobm9kZS5pc0RvY3VtZW50
VHlwZU5vZGUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVy
cm9yIH07CiAKLSAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1bWVudCgp
KQotICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwotCi0gICAgbV9zdGFy
dC5zZXRUb1N0YXJ0T2ZOb2RlKHJlZk5vZGUpOwotICAgIG1fZW5kLnNldFRvRW5kT2ZOb2RlKHJl
Zk5vZGUpOwotCisgICAgbV9zdGFydC5zZXRUb0JlZm9yZUNvbnRlbnRzKG5vZGUpOworICAgIG1f
ZW5kLnNldFRvQWZ0ZXJDb250ZW50cyhub2RlKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0x
MDUyLDMxICs4MzIsMTIgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnN1cnJvdW5kQ29udGVu
dHMoTm9kZSYgbmV3UGFyZW50KQogICAgIHJldHVybiBzZWxlY3ROb2RlKG5ld1BhcmVudCk7CiB9
CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlJiByZWZOb2Rl
KQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldFN0YXJ0QmVmb3JlKE5vZGUmIG5vZGUpCiB7
Ci0gICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkKKyAgICBhdXRvIHBhcmVudCA9IG5vZGUu
cGFyZW50Tm9kZSgpOworICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKLSAgICByZXR1cm4gc2V0U3RhcnQoKnJlZk5vZGUu
cGFyZW50Tm9kZSgpLCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSk7Ci19Ci0KLU5vZGUqIFJh
bmdlOjpmaXJzdE5vZGUoKSBjb25zdAotewotICAgIGlmIChzdGFydENvbnRhaW5lcigpLmlzQ2hh
cmFjdGVyRGF0YU5vZGUoKSkKLSAgICAgICAgcmV0dXJuICZzdGFydENvbnRhaW5lcigpOwotICAg
IGlmIChOb2RlKiBjaGlsZCA9IHN0YXJ0Q29udGFpbmVyKCkudHJhdmVyc2VUb0NoaWxkQXQobV9z
dGFydC5vZmZzZXQoKSkpCi0gICAgICAgIHJldHVybiBjaGlsZDsKLSAgICBpZiAoIW1fc3RhcnQu
b2Zmc2V0KCkpCi0gICAgICAgIHJldHVybiAmc3RhcnRDb250YWluZXIoKTsKLSAgICByZXR1cm4g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oc3RhcnRDb250YWluZXIoKSk7Ci19
Ci0KLU5vZGUqIFJhbmdlOjpwYXN0TGFzdE5vZGUoKSBjb25zdAotewotICAgIGlmIChlbmRDb250
YWluZXIoKS5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCi0gICAgICAgIHJldHVybiBOb2RlVHJhdmVy
c2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihlbmRDb250YWluZXIoKSk7Ci0gICAgaWYgKE5vZGUq
IGNoaWxkID0gZW5kQ29udGFpbmVyKCkudHJhdmVyc2VUb0NoaWxkQXQobV9lbmQub2Zmc2V0KCkp
KQotICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRT
a2lwcGluZ0NoaWxkcmVuKGVuZENvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gc2V0U3RhcnQoKnBh
cmVudCwgbm9kZS5jb21wdXRlTm9kZUluZGV4KCkpOwogfQogCiAjaWYgRU5BQkxFKFRSRUVfREVC
VUdHSU5HKQpAQCAtMTEwMSwxMjQgKzg2Miw0NCBAQCB2b2lkIFJhbmdlOjpmb3JtYXRGb3JEZWJ1
Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIH0KICNlbmRpZgogCi1i
b29sIFJhbmdlOjpjb250YWlucyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYg
KGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCktPmRvY3VtZW50KCkgIT0gb3RoZXIuY29tbW9uQW5j
ZXN0b3JDb250YWluZXIoKS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byBzdGFydFRvU3RhcnQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJU
X1RPX1NUQVJULCBvdGhlcik7Ci0gICAgaWYgKHN0YXJ0VG9TdGFydC5oYXNFeGNlcHRpb24oKSB8
fCBzdGFydFRvU3RhcnQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIGVuZFRvRW5kID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpFTkRfVE9fRU5ELCBvdGhlcik7Ci0gICAgcmV0dXJuICFlbmRUb0VuZC5oYXNFeGNlcHRpb24o
KSAmJiBlbmRUb0VuZC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+PSAwOwotfQotCi1ib29sIFJhbmdl
Ojpjb250YWlucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAotewotICAg
IGF1dG8gcG9zaXRpb25SYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7Ci0gICAgaWYg
KCFwb3NpdGlvblJhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRh
aW5zKGNyZWF0ZUxpdmVSYW5nZSgqcG9zaXRpb25SYW5nZSkpOwotfQotCi1ib29sIGFyZVJhbmdl
c0VxdWFsKGNvbnN0IFJhbmdlKiBhLCBjb25zdCBSYW5nZSogYikKLXsKLSAgICBpZiAoYSA9PSBi
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gJmEtPnN0YXJ0Q29udGFpbmVyKCkgPT0gJmItPnN0YXJ0Q29u
dGFpbmVyKCkgJiYgYS0+c3RhcnRPZmZzZXQoKSA9PSBiLT5zdGFydE9mZnNldCgpICYmICZhLT5l
bmRDb250YWluZXIoKSA9PSAmYi0+ZW5kQ29udGFpbmVyKCkgJiYgYS0+ZW5kT2Zmc2V0KCkgPT0g
Yi0+ZW5kT2Zmc2V0KCk7Ci19Ci0KLWJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSogYSwg
Y29uc3QgUmFuZ2UqIGIpCi17Ci0gICAgaWYgKCFhIHx8ICFiKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoYSA9PSBiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgh
Y29ubmVjdGVkSW5TYW1lVHJlZVNjb3BlKGEtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCksIGIt
PmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBzaG9ydCBzdGFydFRvU3RhcnQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNU
QVJUX1RPX1NUQVJULCAqYikucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgc2hvcnQgZW5kVG9F
bmQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsICpiKS5yZWxl
YXNlUmV0dXJuVmFsdWUoKTsKLQotICAgIC8vIEZpcnN0IHJhbmdlIGNvbnRhaW5zIHRoZSBzZWNv
bmQgcmFuZ2UuCi0gICAgaWYgKHN0YXJ0VG9TdGFydCA8PSAwICYmIGVuZFRvRW5kID49IDApCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRW5kIG9mIGZpcnN0IHJhbmdlIGlzIGluc2lk
ZSBzZWNvbmQgcmFuZ2UuCi0gICAgaWYgKGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6
U1RBUlRfVE9fRU5ELCAqYikucmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMCAmJiBlbmRUb0VuZCA8
PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFN0YXJ0IG9mIGZpcnN0IHJhbmdl
IGlzIGluc2lkZSBzZWNvbmQgcmFuZ2UuCi0gICAgaWYgKHN0YXJ0VG9TdGFydCA+PSAwICYmIGEt
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqYikucmVsZWFzZVJl
dHVyblZhbHVlKCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeU5vZGVDaGlsZHJlbkNoYW5nZWQo
UmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQog
ewotICAgIGlmICghYm91bmRhcnkuY2hpbGRCZWZvcmUoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChib3VuZGFyeS5jb250YWluZXIoKSAhPSAmY29udGFpbmVyKQotICAgICAgICByZXR1cm47
Ci0gICAgYm91bmRhcnkuaW52YWxpZGF0ZU9mZnNldCgpOworICAgIGlmIChib3VuZGFyeS5jaGls
ZEJlZm9yZSgpICYmICZib3VuZGFyeS5jb250YWluZXIoKSA9PSAmY29udGFpbmVyKQorICAgICAg
ICBib3VuZGFyeS5pbnZhbGlkYXRlT2Zmc2V0KCk7CiB9CiAKIHZvaWQgUmFuZ2U6Om5vZGVDaGls
ZHJlbkNoYW5nZWQoQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQogewotICAgIEFTU0VSVCgmY29u
dGFpbmVyLmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZjb250
YWluZXIuZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQucHRyKCkpOwogICAgIGJvdW5kYXJ5
Tm9kZUNoaWxkcmVuQ2hhbmdlZChtX3N0YXJ0LCBjb250YWluZXIpOwogICAgIGJvdW5kYXJ5Tm9k
ZUNoaWxkcmVuQ2hhbmdlZChtX2VuZCwgY29udGFpbmVyKTsKIH0KIAotc3RhdGljIGlubGluZSB2
b2lkIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQm
IGJvdW5kYXJ5LCBDb250YWluZXJOb2RlJiBjb250YWluZXIpCitzdGF0aWMgaW5saW5lIHZvaWQg
Ym91bmRhcnlOb2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91
bmRhcnksIENvbnRhaW5lck5vZGUmIGNvbnRhaW5lck9mTm9kZXNUb0JlUmVtb3ZlZCkKIHsKLSAg
ICBmb3IgKE5vZGUqIG5vZGVUb0JlUmVtb3ZlZCA9IGNvbnRhaW5lci5maXJzdENoaWxkKCk7IG5v
ZGVUb0JlUmVtb3ZlZDsgbm9kZVRvQmVSZW1vdmVkID0gbm9kZVRvQmVSZW1vdmVkLT5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgIGlmIChib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09IG5vZGVUb0Jl
UmVtb3ZlZCkgewotICAgICAgICAgICAgYm91bmRhcnkuc2V0VG9TdGFydE9mTm9kZShjb250YWlu
ZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChOb2Rl
KiBuID0gYm91bmRhcnkuY29udGFpbmVyKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKLSAg
ICAgICAgICAgIGlmIChuID09IG5vZGVUb0JlUmVtb3ZlZCkgewotICAgICAgICAgICAgICAgIGJv
dW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29udGFpbmVyKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGNvbnRhaW5lck9m
Tm9kZXNUb0JlUmVtb3ZlZC5jb250YWlucygmYm91bmRhcnkuY29udGFpbmVyKCkpKQorICAgICAg
ICBib3VuZGFyeS5zZXRUb0JlZm9yZUNvbnRlbnRzKGNvbnRhaW5lck9mTm9kZXNUb0JlUmVtb3Zl
ZCk7CiB9CiAKIHZvaWQgUmFuZ2U6Om5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVy
Tm9kZSYgY29udGFpbmVyKQogewotICAgIEFTU0VSVCgmY29udGFpbmVyLmRvY3VtZW50KCkgPT0g
Jm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZjb250YWluZXIuZG9jdW1lbnQoKSA9PSBt
X293bmVyRG9jdW1lbnQucHRyKCkpOwogICAgIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVt
b3ZlZChtX3N0YXJ0LCBjb250YWluZXIpOwogICAgIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJl
UmVtb3ZlZChtX2VuZCwgY29udGFpbmVyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJvdW5k
YXJ5Tm9kZVdpbGxCZVJlbW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYg
bm9kZVRvQmVSZW1vdmVkKQogewotICAgIGlmIChib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09ICZu
b2RlVG9CZVJlbW92ZWQpIHsKKyAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSAmbm9k
ZVRvQmVSZW1vdmVkKQogICAgICAgICBib3VuZGFyeS5jaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoTm9kZSogbiA9IGJvdW5kYXJ5
LmNvbnRhaW5lcigpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuID09
ICZub2RlVG9CZVJlbW92ZWQpIHsKLSAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvQmVmb3JlQ2hp
bGQobm9kZVRvQmVSZW1vdmVkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KKyAgICBlbHNlIGlmIChub2RlVG9CZVJlbW92ZWQuY29udGFpbnMoJmJvdW5kYXJ5LmNvbnRh
aW5lcigpKSkKKyAgICAgICAgYm91bmRhcnkuc2V0VG9CZWZvcmVOb2RlKG5vZGVUb0JlUmVtb3Zl
ZCk7CiB9CiAKIHZvaWQgUmFuZ2U6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiB7Ci0g
ICAgQVNTRVJUKCZub2RlLmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7Ci0gICAgQVNT
RVJUKCZub2RlICE9ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmbm9kZS5kb2N1bWVu
dCgpID09IG1fb3duZXJEb2N1bWVudC5wdHIoKSk7CisgICAgQVNTRVJUKCZub2RlICE9IG1fb3du
ZXJEb2N1bWVudC5wdHIoKSk7CiAgICAgQVNTRVJUKG5vZGUucGFyZW50Tm9kZSgpKTsKICAgICBi
b3VuZGFyeU5vZGVXaWxsQmVSZW1vdmVkKG1fc3RhcnQsIG5vZGUpOwogICAgIGJvdW5kYXJ5Tm9k
ZVdpbGxCZVJlbW92ZWQobV9lbmQsIG5vZGUpOwpAQCAtMTIyNiw3ICs5MDcsNyBAQCB2b2lkIFJh
bmdlOjpub2RlV2lsbEJlUmVtb3ZlZChOb2RlJiBub2RlKQogCiBib29sIFJhbmdlOjpwYXJlbnRs
ZXNzTm9kZU1vdmVkVG9OZXdEb2N1bWVudEFmZmVjdHNSYW5nZShOb2RlJiBub2RlKQogewotICAg
IHJldHVybiBub2RlLmNvbnRhaW5zSW5jbHVkaW5nU2hhZG93RE9NKG1fc3RhcnQuY29udGFpbmVy
KCkpOworICAgIHJldHVybiBub2RlLmNvbnRhaW5zSW5jbHVkaW5nU2hhZG93RE9NKCZtX3N0YXJ0
LmNvbnRhaW5lcigpKTsKIH0KIAogdm9pZCBSYW5nZTo6dXBkYXRlUmFuZ2VGb3JQYXJlbnRsZXNz
Tm9kZU1vdmVkVG9OZXdEb2N1bWVudChOb2RlJiBub2RlKQpAQCAtMTIzOCw3ICs5MTksNyBAQCB2
b2lkIFJhbmdlOjp1cGRhdGVSYW5nZUZvclBhcmVudGxlc3NOb2RlTW92ZWRUb05ld0RvY3VtZW50
KE5vZGUmIG5vZGUpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRJbnNlcnRlZChS
YW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJnRl
eHQpCisgICAgaWYgKCZib3VuZGFyeS5jb250YWluZXIoKSAhPSAmdGV4dCkKICAgICAgICAgcmV0
dXJuOwogICAgIHVuc2lnbmVkIGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnkub2Zmc2V0KCk7CiAg
ICAgaWYgKG9mZnNldCA+PSBib3VuZGFyeU9mZnNldCkKQEAgLTEyNDgsMTQgKzkyOSwxNCBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBvaW50
JiBib3VuZGFyeSwgTm9kZSYgdGV4dAogCiB2b2lkIFJhbmdlOjp0ZXh0SW5zZXJ0ZWQoTm9kZSYg
dGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCZ0
ZXh0LmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZ0ZXh0LmRv
Y3VtZW50KCkgPT0gbV9vd25lckRvY3VtZW50LnB0cigpKTsKICAgICBib3VuZGFyeVRleHRJbnNl
cnRlZChtX3N0YXJ0LCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgYm91bmRhcnlUZXh0SW5z
ZXJ0ZWQobV9lbmQsIHRleHQsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogc3RhdGljIGlubGluZSB2
b2lkIGJvdW5kYXJ5VGV4dFJlbW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9k
ZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgaWYgKGJv
dW5kYXJ5LmNvbnRhaW5lcigpICE9ICZ0ZXh0KQorICAgIGlmICgmYm91bmRhcnkuY29udGFpbmVy
KCkgIT0gJnRleHQpCiAgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNl
dCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgIGlmIChvZmZzZXQgPj0gYm91bmRhcnlPZmZzZXQp
CkBAIC0xMjY4LDIzICs5NDksMjMgQEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dFJl
bW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYgdGV4dCwKIAogdm9pZCBS
YW5nZTo6dGV4dFJlbW92ZWQoTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQo
KSk7CisgICAgQVNTRVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0gbV9vd25lckRvY3VtZW50LnB0cigp
KTsKICAgICBib3VuZGFyeVRleHRSZW1vdmVkKG1fc3RhcnQsIHRleHQsIG9mZnNldCwgbGVuZ3Ro
KTsKICAgICBib3VuZGFyeVRleHRSZW1vdmVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc01lcmdlZChSYW5nZUJv
dW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBv
ZmZzZXQpCiB7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUubm9kZSgp
KQorICAgIGlmICgmYm91bmRhcnkuY29udGFpbmVyKCkgPT0gb2xkTm9kZS5ub2RlKCkpCiAgICAg
ICAgIGJvdW5kYXJ5LnNldCgqb2xkTm9kZS5ub2RlKCktPnByZXZpb3VzU2libGluZygpLCBib3Vu
ZGFyeS5vZmZzZXQoKSArIG9mZnNldCwgMCk7Ci0gICAgZWxzZSBpZiAoYm91bmRhcnkuY29udGFp
bmVyKCkgPT0gb2xkTm9kZS5ub2RlKCktPnBhcmVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+
KGJvdW5kYXJ5Lm9mZnNldCgpKSA9PSBvbGROb2RlLmluZGV4KCkpCisgICAgZWxzZSBpZiAoJmJv
dW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUubm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgYm91
bmRhcnkub2Zmc2V0KCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9sZE5vZGUuaW5kZXgoKSkp
CiAgICAgICAgIGJvdW5kYXJ5LnNldCgqb2xkTm9kZS5ub2RlKCktPnByZXZpb3VzU2libGluZygp
LCBvZmZzZXQsIDApOwogfQogCiB2b2lkIFJhbmdlOjp0ZXh0Tm9kZXNNZXJnZWQoTm9kZVdpdGhJ
bmRleCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogewogICAgIEFTU0VSVChvbGROb2RlLm5v
ZGUoKSk7Ci0gICAgQVNTRVJUKCZvbGROb2RlLm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSAmb3duZXJE
b2N1bWVudCgpKTsKKyAgICBBU1NFUlQoJm9sZE5vZGUubm9kZSgpLT5kb2N1bWVudCgpID09IG1f
b3duZXJEb2N1bWVudC5wdHIoKSk7CiAgICAgQVNTRVJUKG9sZE5vZGUubm9kZSgpLT5wYXJlbnRO
b2RlKCkpOwogICAgIEFTU0VSVChvbGROb2RlLm5vZGUoKS0+aXNUZXh0Tm9kZSgpKTsKICAgICBB
U1NFUlQob2xkTm9kZS5ub2RlKCktPnByZXZpb3VzU2libGluZygpKTsKQEAgLTEyOTYsNyArOTc3
LDcgQEAgdm9pZCBSYW5nZTo6dGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUs
IHVuc2lnbmVkIG9mZnNldCkKIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1Nw
bGl0KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIFRleHQmIG9sZE5vZGUpCiB7CiAgICAg
YXV0byogcGFyZW50ID0gb2xkTm9kZS5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKGJvdW5kYXJ5LmNv
bnRhaW5lcigpID09ICZvbGROb2RlKSB7CisgICAgaWYgKCZib3VuZGFyeS5jb250YWluZXIoKSA9
PSAmb2xkTm9kZSkgewogICAgICAgICB1bnNpZ25lZCBzcGxpdE9mZnNldCA9IG9sZE5vZGUubGVu
Z3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnkub2Zmc2V0
KCk7CiAgICAgICAgIGlmIChib3VuZGFyeU9mZnNldCA+IHNwbGl0T2Zmc2V0KSB7CkBAIC0xMzA5
LDE2ICs5OTAsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQo
UmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgVGV4dCYgb2wKICAgICB9CiAgICAgaWYgKCFw
YXJlbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0g
cGFyZW50ICYmIGJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkgPT0gJm9sZE5vZGUpIHsKKyAgICBpZiAo
JmJvdW5kYXJ5LmNvbnRhaW5lcigpID09IHBhcmVudCAmJiBib3VuZGFyeS5jaGlsZEJlZm9yZSgp
ID09ICZvbGROb2RlKSB7CiAgICAgICAgIGF1dG8qIG5ld0NoaWxkID0gb2xkTm9kZS5uZXh0U2li
bGluZygpOwogICAgICAgICBBU1NFUlQobmV3Q2hpbGQpOwotICAgICAgICBib3VuZGFyeS5zZXRU
b0FmdGVyQ2hpbGQoKm5ld0NoaWxkKTsKKyAgICAgICAgYm91bmRhcnkuc2V0VG9BZnRlck5vZGUo
Km5ld0NoaWxkKTsKICAgICB9CiB9CiAKIHZvaWQgUmFuZ2U6OnRleHROb2RlU3BsaXQoVGV4dCYg
b2xkTm9kZSkKIHsKLSAgICBBU1NFUlQoJm9sZE5vZGUuZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1
bWVudCgpKTsKKyAgICBBU1NFUlQoJm9sZE5vZGUuZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1l
bnQucHRyKCkpOwogICAgIEFTU0VSVCghb2xkTm9kZS5wYXJlbnROb2RlKCkgfHwgb2xkTm9kZS5u
ZXh0U2libGluZygpKTsKICAgICBBU1NFUlQoIW9sZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5v
ZGUubmV4dFNpYmxpbmcoKS0+aXNUZXh0Tm9kZSgpKTsKICAgICBib3VuZGFyeVRleHROb2Rlc1Nw
bGl0KG1fc3RhcnQsIG9sZE5vZGUpOwpAQCAtMTQxMSw3ICsxMDkyLDcgQEAgUmVmUHRyPFJhbmdl
PiBjcmVhdGVMaXZlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIAog
dm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpSYW5nZSogcmFuZ2UpCiB7Ci0gICAgaWYgKHJh
bmdlICYmIHJhbmdlLT5ib3VuZGFyeVBvaW50c1ZhbGlkKCkpIHsKKyAgICBpZiAocmFuZ2UpIHsK
ICAgICAgICAgcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuc2hvd1RyZWVBbmRNYXJrKCZyYW5nZS0+
c3RhcnRDb250YWluZXIoKSwgIlMiLCAmcmFuZ2UtPmVuZENvbnRhaW5lcigpLCAiRSIpOwogICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgInN0YXJ0IG9mZnNldDogJWQsIGVuZCBvZmZzZXQ6ICVkXG4i
LCByYW5nZS0+c3RhcnRPZmZzZXQoKSwgcmFuZ2UtPmVuZE9mZnNldCgpKTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5oCmluZGV4IDRkMWNkNGYxMzY3NDZjYmY0NDJmZDY4OWQ2OTE4YzNjNWZkOGU5MDQuLjFl
YzVhZWQ0YzUwMDBmN2Y1YzkzNDE3NWI3ZTkyM2NjYmIwODQ0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBA
IC0zMyw2MSArMzMsNjAgQEAgY2xhc3MgRE9NUmVjdExpc3Q7CiBjbGFzcyBEb2N1bWVudEZyYWdt
ZW50OwogY2xhc3MgTm9kZVdpdGhJbmRleDsKIGNsYXNzIFRleHQ7Ci1jbGFzcyBWaXNpYmxlUG9z
aXRpb247CiAKIHN0cnVjdCBTaW1wbGVSYW5nZTsKIAotLy8gRklYTUU6IFJlbmFtZSB0byBMaXZl
UmFuZ2UsIHdoaWxlIGxlYXZpbmcgdGhlIERPTS1leHBvc2VkIG5hbWUgYXMgUmFuZ2UuCiBjbGFz
cyBSYW5nZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJhbmdlPiB7CiBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZjxSYW5nZT4gY3JlYXRlKERvY3VtZW50Jik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgflJhbmdlKCk7CiAKLSAgICBEb2N1bWVudCYgb3duZXJEb2N1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fb3duZXJEb2N1bWVudDsgfQotCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIo
KSBjb25zdCB7IEFTU0VSVChtX3N0YXJ0LmNvbnRhaW5lcigpKTsgcmV0dXJuICptX3N0YXJ0LmNv
bnRhaW5lcigpOyB9CisgICAgTm9kZSYgc3RhcnRDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0LmNvbnRhaW5lcigpOyB9CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXJ0Lm9mZnNldCgpOyB9Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyKCkgY29u
c3QgeyBBU1NFUlQobV9lbmQuY29udGFpbmVyKCkpOyByZXR1cm4gKm1fZW5kLmNvbnRhaW5lcigp
OyB9CisgICAgTm9kZSYgZW5kQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV9lbmQuY29udGFp
bmVyKCk7IH0KICAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZC5v
ZmZzZXQoKTsgfQogICAgIGJvb2wgY29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydCA9
PSBtX2VuZDsgfQotCiAgICAgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWluZXIoKSBjb25zdCB7
IHJldHVybiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihzdGFydENvbnRhaW5lcigpLCBlbmRDb250
YWluZXIoKSkuZ2V0KCk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRTdGFydChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RW5kKFJlZjxOb2RlPiYmIGNvbnRhaW5l
ciwgdW5zaWduZWQgb2Zmc2V0KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNldFN0YXJ0KFJlZjxOb2RlPiYmLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIFdFQkNPUkVf
RVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZChSZWY8Tm9kZT4mJiwgdW5zaWduZWQgb2Zm
c2V0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdGFydEJlZm9y
ZShOb2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnRB
ZnRlcihOb2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RW5k
QmVmb3JlKE5vZGUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRF
bmRBZnRlcihOb2RlJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xsYXBzZShib29sIHRv
U3RhcnQpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPGJvb2w+IGlzUG9pbnRJblJh
bmdlKE5vZGUmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8c2hvcnQ+IGNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCB1bnNpZ25lZCBv
ZmZzZXQpIGNvbnN0OwotICAgIGVudW0gQ29tcGFyZVJlc3VsdHMgeyBOT0RFX0JFRk9SRSwgTk9E
RV9BRlRFUiwgTk9ERV9CRUZPUkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lERSB9OwotICAgIFdFQkNP
UkVfRVhQT1JUIEV4Y2VwdGlvbk9yPENvbXBhcmVSZXN1bHRzPiBjb21wYXJlTm9kZShOb2RlJiBy
ZWZOb2RlKSBjb25zdDsKLSAgICBlbnVtIENvbXBhcmVIb3cgeyBTVEFSVF9UT19TVEFSVCwgU1RB
UlRfVE9fRU5ELCBFTkRfVE9fRU5ELCBFTkRfVE9fU1RBUlQgfTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBFeGNlcHRpb25PcjxzaG9ydD4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKENvbXBhcmVIb3csIGNv
bnN0IFJhbmdlJiBzb3VyY2VSYW5nZSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8c2hvcnQ+IGNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKHVuc2lnbmVkIHNo
b3J0IGNvbXBhcmVIb3csIGNvbnN0IFJhbmdlJiBzb3VyY2VSYW5nZSkgY29uc3Q7Ci0gICAgc3Rh
dGljIEV4Y2VwdGlvbk9yPHNob3J0PiBjb21wYXJlQm91bmRhcnlQb2ludHMoTm9kZSogY29udGFp
bmVyQSwgdW5zaWduZWQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgdW5zaWduZWQgb2Zmc2V0
Qik7Ci0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPHNob3J0PiBjb21wYXJlQm91bmRhcnlQb2ludHMo
Y29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeUEsIGNvbnN0IFJhbmdlQm91bmRhcnlQ
b2ludCYgYm91bmRhcnlCKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGJvdW5kYXJ5UG9pbnRz
VmFsaWQoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjxib29sPiBpbnRl
cnNlY3RzTm9kZShOb2RlJiByZWZOb2RlKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNl
cHRpb25Pcjx2b2lkPiBzZWxlY3ROb2RlKE5vZGUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNl
cHRpb25Pcjx2b2lkPiBzZWxlY3ROb2RlQ29udGVudHMoTm9kZSYpOworCisgICAgZW51bSBDb21w
YXJlSG93IDogdW5zaWduZWQgc2hvcnQgeyBTVEFSVF9UT19TVEFSVCwgU1RBUlRfVE9fRU5ELCBF
TkRfVE9fRU5ELCBFTkRfVE9fU1RBUlQgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25P
cjxzaG9ydD4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHVuc2lnbmVkIHNob3J0IGNvbXBhcmVIb3cs
IGNvbnN0IFJhbmdlJiBzb3VyY2VSYW5nZSkgY29uc3Q7CisKICAgICBXRUJDT1JFX0VYUE9SVCBF
eGNlcHRpb25Pcjx2b2lkPiBkZWxldGVDb250ZW50cygpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gZXh0cmFjdENvbnRlbnRzKCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBjbG9uZUNv
bnRlbnRzKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gaW5zZXJ0Tm9k
ZShSZWY8Tm9kZT4mJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc3Vycm91bmRDb250ZW50
cyhOb2RlJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdGV4dCgpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIFJlZjxSYW5nZT4gY2xvbmVSYW5nZSgpIGNvbnN0OworICAgIHN0YXRp
YyB2b2lkIGRldGFjaCgpIHsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8UmVm
PERvY3VtZW50RnJhZ21lbnQ+PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5n
JiBodG1sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjxib29sPiBpc1BvaW50SW5S
YW5nZShOb2RlJiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRp
b25PcjxzaG9ydD4gY29tcGFyZVBvaW50KE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaW50ZXJzZWN0c05vZGUoTm9kZSYpIGNvbnN0OwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZXRhY2goKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8
UmFuZ2U+IGNsb25lUmFuZ2UoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdG9T
dHJpbmcoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNl
dFN0YXJ0QWZ0ZXIoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+
IHNldEVuZEJlZm9yZShOb2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0RW5kQWZ0ZXIoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNlbGVjdE5vZGUoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNlbGVjdE5vZGVDb250ZW50cyhOb2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8dm9pZD4gc3Vycm91bmRDb250ZW50cyhOb2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnRCZWZvcmUoTm9kZSYpOworICAgIFJlZjxET01SZWN0
TGlzdD4gZ2V0Q2xpZW50UmVjdHMoKSBjb25zdDsKKyAgICBSZWY8RE9NUmVjdD4gZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxS
ZWY8RG9jdW1lbnRGcmFnbWVudD4+IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJp
bmcmIGZyYWdtZW50KTsKKworICAgIC8vIEV4cGFuZCByYW5nZSB0byBhIHVuaXQgKHdvcmQgb3Ig
c2VudGVuY2Ugb3IgYmxvY2sgb3IgZG9jdW1lbnQpIGJvdW5kYXJ5LgorICAgIC8vIFBsZWFzZSBy
ZWZlciB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzIgY29t
bWVudCAjNSBmb3IgZGV0YWlscy4KKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lk
PiBleHBhbmQoY29uc3QgU3RyaW5nJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBOb2RlKiBmaXJz
dE5vZGUoKSBjb25zdDsKKyAgICBlbnVtIENvbXBhcmVSZXN1bHRzIDogdWludDhfdCB7IE5PREVf
QkVGT1JFLCBOT0RFX0FGVEVSLCBOT0RFX0JFRk9SRV9BTkRfQUZURVIsIE5PREVfSU5TSURFIH07
CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Q29tcGFyZVJlc3VsdHM+IGNvbXBhcmVO
b2RlKE5vZGUmKSBjb25zdDsKIAogICAgIHZvaWQgbm9kZUNoaWxkcmVuQ2hhbmdlZChDb250YWlu
ZXJOb2RlJik7CiAgICAgdm9pZCBub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5lck5v
ZGUmKTsKQEAgLTEwMCw0MCArOTksMjQgQEAgcHVibGljOgogICAgIHZvaWQgdGV4dE5vZGVzTWVy
Z2VkKE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7CiAgICAgdm9pZCB0
ZXh0Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUpOwogCi0gICAgLy8gRXhwYW5kIHJhbmdlIHRvIGEg
dW5pdCAod29yZCBvciBzZW50ZW5jZSBvciBibG9jayBvciBkb2N1bWVudCkgYm91bmRhcnkuCi0g
ICAgLy8gUGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzYzMiBjb21tZW50ICM1IAotICAgIC8vIGZvciBkZXRhaWxzLgotICAgIFdFQkNPUkVf
RVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IGV4cGFuZChjb25zdCBTdHJpbmcmKTsKLQotICAgIFJl
ZjxET01SZWN0TGlzdD4gZ2V0Q2xpZW50UmVjdHMoKSBjb25zdDsKLSAgICBSZWY8RE9NUmVjdD4g
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgY29uc3Q7Ci0KICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJ
TkcpCiAgICAgdm9pZCBmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxl
bmd0aCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnMo
Y29uc3QgUmFuZ2UmKSBjb25zdDsKLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpIGNvbnN0OwotCi0gICAgZW51bSBBY3Rpb25UeXBlIHsgRGVsZXRlLCBFeHRyYWN0LCBD
bG9uZSB9OworICAgIGVudW0gQWN0aW9uVHlwZSA6IHVpbnQ4X3QgeyBEZWxldGUsIEV4dHJhY3Qs
IENsb25lIH07CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgUmFuZ2UoRG9jdW1lbnQmKTsKIAot
ICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQmKTsKLSAgICBFeGNlcHRpb25PcjxOb2RlKj4g
Y2hlY2tOb2RlV09mZnNldChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdDsKKyAgICB2b2lk
IHVwZGF0ZURvY3VtZW50KCk7CisgICAgRXhjZXB0aW9uT3I8Tm9kZSo+IGNoZWNrTm9kZU9mZnNl
dFBhaXIoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8UmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+PiBwcm9jZXNzQ29udGVudHMoQWN0aW9uVHlwZSk7CiAKLSAg
ICBOb2RlKiBwYXN0TGFzdE5vZGUoKSBjb25zdDsKLQogICAgIFJlZjxEb2N1bWVudD4gbV9vd25l
ckRvY3VtZW50OwogICAgIFJhbmdlQm91bmRhcnlQb2ludCBtX3N0YXJ0OwogICAgIFJhbmdlQm91
bmRhcnlQb2ludCBtX2VuZDsKIH07CiAKLVdFQkNPUkVfRVhQT1JUIGJvb2wgYXJlUmFuZ2VzRXF1
YWwoY29uc3QgUmFuZ2UqLCBjb25zdCBSYW5nZSopOwotV0VCQ09SRV9FWFBPUlQgYm9vbCByYW5n
ZXNPdmVybGFwKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKLQogV0VCQ09SRV9FWFBPUlQg
U2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7CiBXRUJDT1JFX0VYUE9S
VCBTaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogV0VCQ09S
RV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5n
ZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5pZGwKaW5kZXggMTU0ZTg5YzY2ZTU3YTJlYmE4MzQwNjY2MWI2YTUz
YzMzYTI0OTBiYS4uYTA1YzE0MzZjNThiODMwMjBlMjYwOTk5N2IzNjZhNjE0ZjgwNjdiOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuaWRsCkBAIC0yNSw5ICsyNSw5IEBACiAgICAgW0NhbGxXaXRoPURvY3VtZW50
XSBjb25zdHJ1Y3RvcigpOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgc3RhcnRDb250
YWluZXI7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgc3RhcnRPZmZzZXQ7IC8vIEZJWE1F
OiBTaG91bGQgYmUgdW5zaWduZWQgbG9uZy4KKyAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBzdGFydE9mZnNldDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgTm9kZSBlbmRDb250
YWluZXI7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgZW5kT2Zmc2V0OyAvLyBGSVhNRTog
U2hvdWxkIGJlIHVuc2lnbmVkIGxvbmcuCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVk
IGxvbmcgZW5kT2Zmc2V0OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGNvbGxhcHNl
ZDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgTm9kZSBjb21tb25BbmNlc3RvckNvbnRhaW5lcjsK
IApAQCAtNDUsNyArNDUsNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNUQVJUX1RPX0VO
RCA9IDE7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgRU5EX1RPX0VORCA9IDI7CiAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgRU5EX1RPX1NUQVJUID0gMzsKLSAgICBbTWF5VGhyb3dFeGNlcHRp
b24sIEltcGxlbWVudGVkQXM9Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3NdIHNob3J0
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyh1bnNpZ25lZCBzaG9ydCBob3csIFJhbmdlIHNvdXJjZVJh
bmdlKTsKKyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBvaW50
cyh1bnNpZ25lZCBzaG9ydCBob3csIFJhbmdlIHNvdXJjZVJhbmdlKTsKIAogICAgIFtDRVJlYWN0
aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgZGVsZXRlQ29udGVudHMoKTsKICAgICBbQ0VS
ZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uLCBOZXdPYmplY3RdIERvY3VtZW50RnJhZ21lbnQg
ZXh0cmFjdENvbnRlbnRzKCk7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgW01heVRocm93RXhjZXB0
aW9uXSBib29sZWFuIGlzUG9pbnRJblJhbmdlKE5vZGUgbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZz
ZXQpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gc2hvcnQgY29tcGFyZVBvaW50KE5vZGUgbm9k
ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwogCi0gICAgW01heVRocm93RXhjZXB0aW9uXSBib29s
ZWFuIGludGVyc2VjdHNOb2RlKE5vZGUgbm9kZSk7CisgICAgYm9vbGVhbiBpbnRlcnNlY3RzTm9k
ZShOb2RlIG5vZGUpOwogCiAgICAgc3RyaW5naWZpZXI7CiAKQEAgLTcwLDEwICs3MCwxMSBAQAog
ICAgIC8vIEV4dGVuc2lvbnMgZnJvbSBET01QYXJzaW5nIGFuZCBTZXJpYWxpemF0aW9uIHNwZWNp
ZmljYXRpb24gKGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9ET00tUGFyc2luZy8jZXh0ZW5zaW9ucy10
by10aGUtcmFuZ2UtaW50ZXJmYWNlKS4KICAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0
aW9uLCBOZXdPYmplY3RdIERvY3VtZW50RnJhZ21lbnQgY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KERPTVN0cmluZyBmcmFnbWVudCk7CiAKLSAgICAvLyBOb24gc3RhbmRhcmQuCi0gICAgW01heVRo
cm93RXhjZXB0aW9uXSB2b2lkIGV4cGFuZChvcHRpb25hbCBET01TdHJpbmcgdW5pdCA9ICIiKTsK
KyAgICAvLyBOb24tc3RhbmRhcmQgZXh0ZW5zaW9uLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZXZlbnR1YWxseSBkcm9wIHRoaXMgc2luY2Ugbm8gb3RoZXIgYnJvd3NlciBzdXBwb3J0cyBpdC4K
KyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgZXhwYW5kKG9wdGlvbmFsIERPTVN0cmluZyB1
bml0KTsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbGlrZWx5IGRyb3AgdGhpcyBzaW5jZSBu
byBvdGhlciBicm93c2VyIHN1cHBvcnRzIGl0LgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbGlr
ZWx5IGRyb3AgdGhpcyBzaW5jZSB3ZSBhZGRlZCBpdCBmb3IgRmlyZWZveCBpbnRlcm9wZXJhYmls
aXR5LCBidXQgbm93IG5vIG90aGVyIGJyb3dzZXIgc3VwcG9ydHMgaXQuCiAgICAgW01heVRocm93
RXhjZXB0aW9uXSBzaG9ydCBjb21wYXJlTm9kZShOb2RlIG5vZGUpOwogICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IE5PREVfQkVGT1JFID0gMDsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT0RF
X0FGVEVSID0gMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5
UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaAppbmRleCBi
MjQ0MDk4NDc4Yjc3NzdmMDRjZGY2OGQ2MTkyOWJkYzg4NDU1MTRmLi5kMDAzNDRkOWY2NjA0Yjlj
ZWQwYWVmZWI5ZTdlOGQzZDc5ODQzYWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2VCb3VuZGFyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRh
cnlQb2ludC5oCkBAIC0zMiw0MyArMzIsMzkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBSYW5nZUJvdW5kYXJ5UG9pbnQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFJhbmdlQm91bmRh
cnlQb2ludChOb2RlKiBjb250YWluZXIpOworICAgIGV4cGxpY2l0IFJhbmdlQm91bmRhcnlQb2lu
dChOb2RlJiBjb250YWluZXIpOwogCi0gICAgTm9kZSogY29udGFpbmVyKCkgY29uc3Q7CisgICAg
Tm9kZSYgY29udGFpbmVyKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3Q7CiAg
ICAgTm9kZSogY2hpbGRCZWZvcmUoKSBjb25zdDsKIAotICAgIHZvaWQgY2xlYXIoKTsKLQogICAg
IHZvaWQgc2V0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBj
aGlsZEJlZm9yZSk7CiAgICAgdm9pZCBzZXRPZmZzZXQodW5zaWduZWQpOwogCi0gICAgdm9pZCBz
ZXRUb0JlZm9yZUNoaWxkKE5vZGUmKTsKLSAgICB2b2lkIHNldFRvQWZ0ZXJDaGlsZChOb2RlJik7
Ci0gICAgdm9pZCBzZXRUb1N0YXJ0T2ZOb2RlKFJlZjxOb2RlPiYmKTsKLSAgICB2b2lkIHNldFRv
RW5kT2ZOb2RlKFJlZjxOb2RlPiYmKTsKKyAgICB2b2lkIHNldFRvQmVmb3JlTm9kZShOb2RlJik7
CisgICAgdm9pZCBzZXRUb0FmdGVyTm9kZShOb2RlJik7CisgICAgdm9pZCBzZXRUb0JlZm9yZUNv
bnRlbnRzKFJlZjxOb2RlPiYmKTsKKyAgICB2b2lkIHNldFRvQWZ0ZXJDb250ZW50cyhSZWY8Tm9k
ZT4mJik7CiAKICAgICB2b2lkIGNoaWxkQmVmb3JlV2lsbEJlUmVtb3ZlZCgpOwogICAgIHZvaWQg
aW52YWxpZGF0ZU9mZnNldCgpIGNvbnN0OwotICAgIHZvaWQgZW5zdXJlT2Zmc2V0SXNWYWxpZCgp
IGNvbnN0OwogCiBwcml2YXRlOgotICAgIFJlZlB0cjxOb2RlPiBtX2NvbnRhaW5lck5vZGU7Cisg
ICAgUmVmPE5vZGU+IG1fY29udGFpbmVyOwogICAgIG11dGFibGUgT3B0aW9uYWw8dW5zaWduZWQ+
IG1fb2Zmc2V0SW5Db250YWluZXIgeyAwIH07CiAgICAgUmVmUHRyPE5vZGU+IG1fY2hpbGRCZWZv
cmVCb3VuZGFyeTsKIH07CiAKIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnQoY29uc3Qg
UmFuZ2VCb3VuZGFyeVBvaW50Jik7CiAKLWlubGluZSBSYW5nZUJvdW5kYXJ5UG9pbnQ6OlJhbmdl
Qm91bmRhcnlQb2ludChOb2RlKiBjb250YWluZXIpCi0gICAgOiBtX2NvbnRhaW5lck5vZGUoY29u
dGFpbmVyKQoraW5saW5lIFJhbmdlQm91bmRhcnlQb2ludDo6UmFuZ2VCb3VuZGFyeVBvaW50KE5v
ZGUmIGNvbnRhaW5lcikKKyAgICA6IG1fY29udGFpbmVyKGNvbnRhaW5lcikKIHsKLSAgICBBU1NF
UlQobV9jb250YWluZXJOb2RlKTsKIH0KIAotaW5saW5lIE5vZGUqIFJhbmdlQm91bmRhcnlQb2lu
dDo6Y29udGFpbmVyKCkgY29uc3QKK2lubGluZSBOb2RlJiBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmNv
bnRhaW5lcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGFpbmVyTm9kZS5nZXQoKTsKKyAg
ICByZXR1cm4gbV9jb250YWluZXI7CiB9CiAKIGlubGluZSBOb2RlKiBSYW5nZUJvdW5kYXJ5UG9p
bnQ6OmNoaWxkQmVmb3JlKCkgY29uc3QKQEAgLTc2LDc3ICs3Miw2MyBAQCBpbmxpbmUgTm9kZSog
UmFuZ2VCb3VuZGFyeVBvaW50OjpjaGlsZEJlZm9yZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY2hp
bGRCZWZvcmVCb3VuZGFyeS5nZXQoKTsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBv
aW50OjplbnN1cmVPZmZzZXRJc1ZhbGlkKCkgY29uc3QKLXsKLSAgICBpZiAobV9vZmZzZXRJbkNv
bnRhaW5lcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fY2hpbGRCZWZvcmVCb3Vu
ZGFyeSk7Ci0gICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hpbGRCZWZvcmVCb3VuZGFyeS0+
Y29tcHV0ZU5vZGVJbmRleCgpICsgMTsKLX0KLQogaW5saW5lIHVuc2lnbmVkIFJhbmdlQm91bmRh
cnlQb2ludDo6b2Zmc2V0KCkgY29uc3QKIHsKLSAgICBlbnN1cmVPZmZzZXRJc1ZhbGlkKCk7Ci0g
ICAgcmV0dXJuIG1fb2Zmc2V0SW5Db250YWluZXIudmFsdWUoKTsKLX0KLQotaW5saW5lIHZvaWQg
UmFuZ2VCb3VuZGFyeVBvaW50OjpjbGVhcigpCi17Ci0gICAgbV9jb250YWluZXJOb2RlID0gbnVs
bHB0cjsKLSAgICBtX29mZnNldEluQ29udGFpbmVyID0gMDsKLSAgICBtX2NoaWxkQmVmb3JlQm91
bmRhcnkgPSBudWxscHRyOworICAgIGlmICghbV9vZmZzZXRJbkNvbnRhaW5lcikgeworICAgICAg
ICBBU1NFUlQobV9jaGlsZEJlZm9yZUJvdW5kYXJ5KTsKKyAgICAgICAgbV9vZmZzZXRJbkNvbnRh
aW5lciA9IG1fY2hpbGRCZWZvcmVCb3VuZGFyeS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMTsKKyAg
ICB9CisgICAgcmV0dXJuICptX29mZnNldEluQ29udGFpbmVyOwogfQogCiBpbmxpbmUgdm9pZCBS
YW5nZUJvdW5kYXJ5UG9pbnQ6OnNldChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9m
ZnNldCwgTm9kZSogY2hpbGRCZWZvcmUpCiB7CiAgICAgQVNTRVJUKGNoaWxkQmVmb3JlID09IChv
ZmZzZXQgPyBjb250YWluZXItPnRyYXZlcnNlVG9DaGlsZEF0KG9mZnNldCAtIDEpIDogMCkpOwot
ICAgIG1fY29udGFpbmVyTm9kZSA9IFdURk1vdmUoY29udGFpbmVyKTsKKyAgICBtX2NvbnRhaW5l
ciA9IFdURk1vdmUoY29udGFpbmVyKTsKICAgICBtX29mZnNldEluQ29udGFpbmVyID0gb2Zmc2V0
OwogICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IGNoaWxkQmVmb3JlOwogfQogCiBpbmxpbmUg
dm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCiB7Ci0g
ICAgQVNTRVJUKG1fY29udGFpbmVyTm9kZSk7Ci0gICAgQVNTRVJUKG1fY29udGFpbmVyTm9kZS0+
aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKTsKKyAgICBBU1NFUlQobV9jb250YWluZXItPmlzQ2hhcmFj
dGVyRGF0YU5vZGUoKSk7CiAgICAgQVNTRVJUKG1fb2Zmc2V0SW5Db250YWluZXIpOwogICAgIEFT
U0VSVCghbV9jaGlsZEJlZm9yZUJvdW5kYXJ5KTsKICAgICBtX29mZnNldEluQ29udGFpbmVyID0g
b2Zmc2V0OwogfQogCi1pbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvQmVmb3Jl
Q2hpbGQoTm9kZSYgY2hpbGQpCitpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRv
QmVmb3JlTm9kZShOb2RlJiBjaGlsZCkKIHsKICAgICBBU1NFUlQoY2hpbGQucGFyZW50Tm9kZSgp
KTsKICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmcoKTsK
LSAgICBtX2NvbnRhaW5lck5vZGUgPSBjaGlsZC5wYXJlbnROb2RlKCk7Ci0gICAgbV9vZmZzZXRJ
bkNvbnRhaW5lciA9IG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA/IFdURjo6bnVsbG9wdCA6IE9wdGlv
bmFsPHVuc2lnbmVkPigwKTsKKyAgICBtX2NvbnRhaW5lciA9ICpjaGlsZC5wYXJlbnROb2RlKCk7
CisgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA/IFdURjo6
bnVsbG9wdCA6IG1ha2VPcHRpb25hbCgwVSk7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRh
cnlQb2ludDo6c2V0VG9BZnRlckNoaWxkKE5vZGUmIGNoaWxkKQoraW5saW5lIHZvaWQgUmFuZ2VC
b3VuZGFyeVBvaW50OjpzZXRUb0FmdGVyTm9kZShOb2RlJiBjaGlsZCkKIHsKICAgICBBU1NFUlQo
Y2hpbGQucGFyZW50Tm9kZSgpKTsKICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSAmY2hpbGQ7
Ci0gICAgbV9jb250YWluZXJOb2RlID0gY2hpbGQucGFyZW50Tm9kZSgpOwotICAgIG1fb2Zmc2V0
SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBPcHRp
b25hbDx1bnNpZ25lZD4oMCk7CisgICAgbV9jb250YWluZXIgPSAqY2hpbGQucGFyZW50Tm9kZSgp
OworICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6
Om51bGxvcHQgOiBtYWtlT3B0aW9uYWwoMFUpOwogfQogCi1pbmxpbmUgdm9pZCBSYW5nZUJvdW5k
YXJ5UG9pbnQ6OnNldFRvU3RhcnRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFpbmVyKQoraW5saW5l
IHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0JlZm9yZUNvbnRlbnRzKFJlZjxOb2RlPiYm
IGNvbnRhaW5lcikKIHsKLSAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7
CisgICAgbV9jb250YWluZXIgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAgbV9vZmZzZXRJbkNv
bnRhaW5lciA9IDA7CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbnVsbHB0cjsKIH0KIAot
aW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0VuZE9mTm9kZShSZWY8Tm9kZT4m
JiBjb250YWluZXIpCitpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvQWZ0ZXJD
b250ZW50cyhSZWY8Tm9kZT4mJiBjb250YWluZXIpCiB7Ci0gICAgbV9jb250YWluZXJOb2RlID0g
V1RGTW92ZShjb250YWluZXIpOwotICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPigqbV9jb250YWlu
ZXJOb2RlKSkgewotICAgICAgICBtX29mZnNldEluQ29udGFpbmVyID0gZG93bmNhc3Q8Q2hhcmFj
dGVyRGF0YT4oKm1fY29udGFpbmVyTm9kZSkubGVuZ3RoKCk7CisgICAgbV9jb250YWluZXIgPSBX
VEZNb3ZlKGNvbnRhaW5lcik7CisgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KG1fY29udGFpbmVy
KSkgeworICAgICAgICBtX29mZnNldEluQ29udGFpbmVyID0gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0
YT4obV9jb250YWluZXIuZ2V0KCkpLmxlbmd0aCgpOwogICAgICAgICBtX2NoaWxkQmVmb3JlQm91
bmRhcnkgPSBudWxscHRyOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY2hpbGRCZWZvcmVCb3Vu
ZGFyeSA9IG1fY29udGFpbmVyTm9kZS0+bGFzdENoaWxkKCk7Ci0gICAgICAgIG1fb2Zmc2V0SW5D
b250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBPcHRpb25h
bDx1bnNpZ25lZD4oMCk7CisgICAgICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG1fY29udGFp
bmVyLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hpbGRC
ZWZvcmVCb3VuZGFyeSA/IFdURjo6bnVsbG9wdCA6IG1ha2VPcHRpb25hbCgwVSk7CiAgICAgfQog
fQogCkBAIC0xNjcsMjEgKzE0OSwxNiBAQCBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6
OmludmFsaWRhdGVPZmZzZXQoKSBjb25zdAogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFJhbmdlQm91bmRhcnlQb2ludCYgYSwgY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBiKQogewot
ICAgIGlmIChhLmNvbnRhaW5lcigpICE9IGIuY29udGFpbmVyKCkpCisgICAgaWYgKCZhLmNvbnRh
aW5lcigpICE9ICZiLmNvbnRhaW5lcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KGEuY2hpbGRCZWZvcmUoKSB8fCBiLmNoaWxkQmVmb3JlKCkpIHsKLSAgICAgICAgaWYgKGEuY2hp
bGRCZWZvcmUoKSAhPSBiLmNoaWxkQmVmb3JlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGEub2Zmc2V0KCkgIT0gYi5vZmZzZXQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KGEuY2hpbGRCZWZvcmUoKSB8fCBiLmNoaWxkQmVmb3JlKCkpCisgICAgICAgIHJldHVybiBhLmNo
aWxkQmVmb3JlKCkgPT0gYi5jaGlsZEJlZm9yZSgpOworICAgIHJldHVybiBhLm9mZnNldCgpID09
IGIub2Zmc2V0KCk7CiB9CiAKIGlubGluZSBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50
KGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgcG9pbnQpCiB7Ci0gICAgcmV0dXJuIHsgKnBvaW50
LmNvbnRhaW5lcigpLCBwb2ludC5vZmZzZXQoKSB9OworICAgIHJldHVybiB7IHBvaW50LmNvbnRh
aW5lcigpLCBwb2ludC5vZmZzZXQoKSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCA4NDUwZGJlNmI3YzAxYzJmMDMxYzAyYmM2
NTkwMTI2ZTc1YzAwNGNhLi5jZjc4YmJlMmQwZTg4NjBhOTc4M2NlZWQ3MDRiZDY4YThiYTRmMTU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKQEAgLTE3Nyw0ICsxNzcsNzAgQEAgUmVm
UHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSkKICAgICByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFp
bmVyLCByYW5nZS5lbmQuY29udGFpbmVyKTsKIH0KIAorYm9vbCBpc1BvaW50SW5SYW5nZShjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50KQoreworICAg
IHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIocmFuZ2Uuc3RhcnQsIHBvaW50KSkgJiYgaXNf
bHRlcShkb2N1bWVudE9yZGVyKHBvaW50LCByYW5nZS5lbmQpKTsKK30KKworYm9vbCBpc1BvaW50
SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5
UG9pbnQ+JiBwb2ludCkKK3sKKyAgICByZXR1cm4gcG9pbnQgJiYgaXNQb2ludEluUmFuZ2UocmFu
Z2UsICpwb2ludCk7Cit9CisKK1BhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSwgY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQpCit7CisgICAgaWYg
KGF1dG8gb3JkZXIgPSBkb2N1bWVudE9yZGVyKHJhbmdlLnN0YXJ0LCBwb2ludCk7ICFpc19sdChv
cmRlcikpCisgICAgICAgIHJldHVybiBvcmRlcjsKKyAgICBpZiAoYXV0byBvcmRlciA9IGRvY3Vt
ZW50T3JkZXIocmFuZ2UuZW5kLCBwb2ludCk7ICFpc19ndChvcmRlcikpCisgICAgICAgIHJldHVy
biBvcmRlcjsKKyAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjplcXVpdmFsZW50OworfQorCitQ
YXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCwg
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIG9yZGVyID0gZG9jdW1l
bnRPcmRlcihwb2ludCwgcmFuZ2Uuc3RhcnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgICAgICByZXR1
cm4gb3JkZXI7CisgICAgaWYgKGF1dG8gb3JkZXIgPSBkb2N1bWVudE9yZGVyKHBvaW50LCByYW5n
ZS5lbmQpOyAhaXNfbHQob3JkZXIpKQorICAgICAgICByZXR1cm4gb3JkZXI7CisgICAgcmV0dXJu
IFBhcnRpYWxPcmRlcmluZzo6ZXF1aXZhbGVudDsKK30KKworYm9vbCBjb250YWlucyhjb25zdCBT
aW1wbGVSYW5nZSYgb3V0ZXJSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGlubmVyUmFuZ2UpCit7
CisgICAgcmV0dXJuIGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihvdXRlclJhbmdlLnN0YXJ0LCBpbm5l
clJhbmdlLnN0YXJ0KSkgJiYgaXNfZ3RlcShkb2N1bWVudE9yZGVyKG91dGVyUmFuZ2UuZW5kLCBp
bm5lclJhbmdlLmVuZCkpOworfQorCitib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2Um
IGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQoreworICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBhIHdh
eSB0byBkbyB0aGlzIG1vcmUgZWZmaWNpZW50bHk/CisgICAgcmV0dXJuIGlzUG9pbnRJblJhbmdl
KGEsIGIuc3RhcnQpIHx8IGlzUG9pbnRJblJhbmdlKGEsIGIuZW5kKSB8fCBpc1BvaW50SW5SYW5n
ZShiLCBhLnN0YXJ0KSB8fCBpc1BvaW50SW5SYW5nZShiLCBhLmVuZCk7Cit9CisKKy8vIEZJWE1F
OiBOYW1lIHRoaXMgInVuaW9uUmFuZ2UiIGluc3RlYWQ/IFRoZSB3b3JkICJ1bmlvbiIgaXMgYSBu
b3VuIG1vcmUgdGhhbiBhIHZlcmIuIFdvdWxkIGxpa2UgdG8gY2FsbCBpdCBqdXN0IHVuaW9uIGlm
IGl0IHdhc24ndCBmb3IgdGhlIGtleXdvcmQuCitTaW1wbGVSYW5nZSB1bmlvblJhbmdlcyhjb25z
dCBTaW1wbGVSYW5nZSYgYSwgY29uc3QgU2ltcGxlUmFuZ2UmIGIpCit7CisgICAgYXV0byYgc3Rh
cnQgPSBpc19sdGVxKGRvY3VtZW50T3JkZXIoYS5zdGFydCwgYi5zdGFydCkpID8gYSA6IGI7Cisg
ICAgYXV0byYgZW5kID0gaXNfbHRlcShkb2N1bWVudE9yZGVyKGEuZW5kLCBiLmVuZCkpID8gYiA6
IGE7CisgICAgcmV0dXJuIHsgc3RhcnQuc3RhcnQsIGVuZC5lbmQgfTsKK30KKworYm9vbCBjb250
YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAg
Ly8gRklYTUU6IENvbnNpZGVyIGEgbW9yZSBlZmZpY2llbnQgYWxnb3JpdGhtIHRoYXQgYXZvaWRz
IGFsd2F5cyBjb21wdXRpbmcgdGhlIG5vZGUgaW5kZXguCisgICAgLy8gRklYTUU6IERvZXMgdGhp
cyBjb25zdF9jYXN0IHBvaW50IHRvIGEgZGVzaWduIHByb2JsZW0/CisgICAgYXV0byBub2RlUmFu
Z2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKGNvbnN0X2Nhc3Q8Tm9kZSY+KG5vZGUpKTsKKyAg
ICByZXR1cm4gbm9kZVJhbmdlICYmIGNvbnRhaW5zKHJhbmdlLCAqbm9kZVJhbmdlKTsKK30KKwor
Ym9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9k
ZSkKK3sKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgYSBtb3JlIGVmZmljaWVudCBhbGdvcml0aG0g
dGhhdCBhdm9pZHMgYWx3YXlzIGNvbXB1dGluZyB0aGUgbm9kZSBpbmRleC4KKyAgICAvLyBGSVhN
RTogRG9lcyB0aGlzIGNvbnN0X2Nhc3QgcG9pbnQgdG8gYSBkZXNpZ24gcHJvYmxlbT8KKyAgICBh
dXRvIHBvaW50ID0gbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlKGNvbnN0X2Nhc3Q8Tm9kZSY+
KG5vZGUpKTsKKyAgICBpZiAoIXBvaW50KQorICAgICAgICByZXR1cm4gJm5vZGUgPT0gJnJhbmdl
LnN0YXJ0LmNvbnRhaW5lci0+cm9vdE5vZGUoKTsKKyAgICByZXR1cm4gaXNQb2ludEluUmFuZ2Uo
cmFuZ2UsICpwb2ludCk7CisKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCAy
OTA0YzM3ZWE4YjUyYWJmNmI0MmI3NmQ1M2ViNGE3ZmRiNWU4NzcwLi5kMjU4YzY4NTEwZDdkNTM5
MTQ4MWMyOWVkM2M5NWE5MjQwMjM1Mjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAt
NjUsNiArNjUsMjAgQEAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2
ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBT
aW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKK2Jvb2wgaXNQb2ludEluUmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7Citib29sIGlzUG9pbnRJ
blJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4m
KTsKKworYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgb3V0ZXJSYW5nZSwgY29uc3Qg
U2ltcGxlUmFuZ2UmIGlubmVyUmFuZ2UpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3Rz
KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKK1NpbXBsZVJhbmdlIHVu
aW9uUmFuZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKKworYm9v
bCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKK2Jvb2wgaW50ZXJz
ZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKKworLy8gUmV0dXJucyBlcXVp
dmFsZW50IGlmIHBvaW50IGlzIGluIHJhbmdlLgorUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3Jk
ZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CitQYXJ0aWFsT3Jk
ZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgU2ltcGxlUmFu
Z2UmKTsKKwogY2xhc3MgSW50ZXJzZWN0aW5nTm9kZVJhbmdlOwogSW50ZXJzZWN0aW5nTm9kZVJh
bmdlIGludGVyc2VjdGluZ05vZGVzKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmcuY3BwCmluZGV4IDI4M2FlYWQ2NThkNDFlZTJhMGJjMzVmMjMwMWU5NWFmNGNl
MTIzYmMuLjZiMTg0Y2E4NTdjYTdlZWNhNTFkNmJhZmY1NTRiNWEyMTUyNTc3ZGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtNzksNDAgKzc5LDE4IEBAIGJvb2wgaXNBdG9taWNO
b2RlKGNvbnN0IE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIG5vZGUgJiYgKCFub2RlLT5oYXNDaGls
ZE5vZGVzKCkgfHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KCpub2RlKSk7CiB9CiAKLS8vIENvbXBh
cmUgdHdvIHBvc2l0aW9ucywgdGFraW5nIGludG8gYWNjb3VudCB0aGUgcG9zc2liaWxpdHkgdGhh
dCBvbmUgb3IgYm90aAotLy8gY291bGQgYmUgaW5zaWRlIGEgc2hhZG93IHRyZWUuIE9ubHkgd29y
a3MgZm9yIG5vbi1udWxsIHZhbHVlcy4KKy8vIEZJWE1FOiBDaGFuZ2UgY2FsbGVycyB0byB1c2Ug
ZG9jdW1lbnRPcmRlciBhbmQgZGVsZXRlIHRoaXMuCiBpbnQgY29tcGFyZVBvc2l0aW9ucyhjb25z
dCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiB7Ci0gICAgVHJlZVNjb3BlKiBjb21t
b25TY29wZSA9IGNvbW1vblRyZWVTY29wZShhLmNvbnRhaW5lck5vZGUoKSwgYi5jb250YWluZXJO
b2RlKCkpOwotCi0gICAgaWYgKCFjb21tb25TY29wZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBOb2RlKiBub2RlQSA9IGNvbW1vblNjb3BlLT5hbmNlc3Rvck5vZGVJblRoaXNTY29wZShhLmNv
bnRhaW5lck5vZGUoKSk7Ci0gICAgQVNTRVJUKG5vZGVBKTsKLSAgICBib29sIGhhc0Rlc2NlbmRl
bnRBID0gbm9kZUEgIT0gYS5jb250YWluZXJOb2RlKCk7Ci0gICAgaW50IG9mZnNldEEgPSBoYXNE
ZXNjZW5kZW50QSA/IDAgOiBhLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKLQotICAg
IE5vZGUqIG5vZGVCID0gY29tbW9uU2NvcGUtPmFuY2VzdG9yTm9kZUluVGhpc1Njb3BlKGIuY29u
dGFpbmVyTm9kZSgpKTsKLSAgICBBU1NFUlQobm9kZUIpOwotICAgIGJvb2wgaGFzRGVzY2VuZGVu
dEIgPSBub2RlQiAhPSBiLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpbnQgb2Zmc2V0QiA9IGhhc0Rl
c2NlbmRlbnRCID8gMCA6IGIuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotCi0gICAg
aW50IGJpYXMgPSAwOwotICAgIGlmIChub2RlQSA9PSBub2RlQikgewotICAgICAgICBpZiAoaGFz
RGVzY2VuZGVudEEpCi0gICAgICAgICAgICBiaWFzID0gLTE7Ci0gICAgICAgIGVsc2UgaWYgKGhh
c0Rlc2NlbmRlbnRCKQotICAgICAgICAgICAgYmlhcyA9IDE7Ci0gICAgfQotCi0gICAgYXV0byBj
b21wYXJpc29uUmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhub2RlQSwgb2Zm
c2V0QSwgbm9kZUIsIG9mZnNldEIpOwotICAgIGlmIChjb21wYXJpc29uUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKQotICAgICAgICByZXR1cm4gYmlhczsKLSAgICBhdXRvIHJlc3VsdCA9IGNvbXBhcmlz
b25SZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgcmV0dXJuIHJlc3VsdCA/IHJlc3Vs
dCA6IGJpYXM7CisgICAgYXV0byBvcmRlcmluZyA9IGRvY3VtZW50T3JkZXIoYSwgYik7CisgICAg
aWYgKGlzX2x0KG9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChpc19ndChv
cmRlcmluZykpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiAwOwogfQogCisvLyBGSVhN
RTogQ2hhbmdlIGNhbGxlcnMgdG8gdXNlIGRvY3VtZW50T3JkZXIgYW5kIGRlbGV0ZSB0aGlzLgog
aW50IGNvbXBhcmVQb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGIpCiB7CiAgICAgcmV0dXJuIGNvbXBhcmVQb3NpdGlvbnMoYS5kZWVwRXF1
aXZhbGVudCgpLCBiLmRlZXBFcXVpdmFsZW50KCkpOwpAQCAtMTE2Myw5ICsxMTQxLDcgQEAgc3Rh
dGljIGJvb2wgaXNWaXNpYmx5QWRqYWNlbnQoY29uc3QgUG9zaXRpb24mIGZpcnN0LCBjb25zdCBQ
b3NpdGlvbiYgc2Vjb25kKQogLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0
aGVyIGEgbm9kZSBpcyB2aXNpYmx5IGZpdCBpbnNpZGUgc2VsZWN0ZWRSYW5nZQogYm9vbCBpc05v
ZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUmIG5vZGUsIGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSkKIHsKLSAgICAvLyBJZiB0aGUgbm9kZSBpcyBpbnNpZGUgdGhlIHJhbmdlLCB0aGVuIGl0
IHN1cmVseSBpcyBjb250YWluZWQgd2l0aGluLgotICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9
IGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbXBhcmVOb2RlKG5vZGUpOwotICAgIGlmICghY29t
cGFyaXNvblJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBjb21wYXJpc29uUmVzdWx0LnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lERSkKKyAgICBpZiAoY29udGFpbnMocmFu
Z2UsIG5vZGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGF1dG8gc3RhcnRQb3NpdGlv
biA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKaW5kZXggMWYwYTc3MjI5ZWNmMzMwYmMzOTEzZmY3YWQ3NDE2OWRlMjE2
MDE5YS4uMTYwN2U4N2NkYWMxMzFhNGMxNjA5NzdhNjQ4Y2Y1MjFkNDRhNzBlYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMzU1MCwxMCArMzU1MCw4IEBAIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0
IE9wdGlvbmFsCiBzdGF0aWMgYm9vbCBpc0ZyYW1lSW5SYW5nZShGcmFtZSYgZnJhbWUsIGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBmb3IgKGF1dG8qIG93bmVyRWxlbWVudCA9IGZy
YW1lLm93bmVyRWxlbWVudCgpOyBvd25lckVsZW1lbnQ7IG93bmVyRWxlbWVudCA9IG93bmVyRWxl
bWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkgewotICAgICAgICBpZiAoJm93bmVyRWxl
bWVudC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKSkgewotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5pbnRlcnNlY3RzTm9kZSgq
b3duZXJFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiAhcmVzdWx0Lmhhc0V4Y2VwdGlvbigp
ICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
Jm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBpbnRlcnNlY3RzKHJhbmdlLCAqb3duZXJFbGVtZW50KTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMzcwMywxOCArMzcwMSwxNiBAQCB2b2lkIEVkaXRv
cjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogCiAgICAgYXV0byYgc2VsZWN0
aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2Uo
KSkgewotICAgICAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlv
bigpLmZpcnN0UmFuZ2UoKSkgewotICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSByYW5nZSBhIGZl
dyBjaGFyYWN0ZXJzIGluIGVhY2ggZGlyZWN0aW9uIHRvIGRldGVjdCBpbmNvbXBsZXRlbHkgc2Vs
ZWN0ZWQgcGhvbmUgbnVtYmVycy4KLSAgICAgICAgICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBjaGFy
YWN0ZXJzVG9FeHRlbmQgPSAxNTsKLSAgICAgICAgICAgIGF1dG8gc2VsZWN0ZWRMaXZlUmFuZ2Ug
PSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpOwotICAgICAgICAgICAgZm9yIChhdXRv
JiByYW5nZSA6IHNjYW5Gb3JUZWxlcGhvbmVOdW1iZXJzKGV4dGVuZFNlbGVjdGlvbigqc2VsZWN0
ZWRSYW5nZSwgY2hhcmFjdGVyc1RvRXh0ZW5kKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2h5IGRvIHdlIGRvIHRoaXMgdW5jb25kaXRpb25hbGx5IGFuZCB0aGUgY29kZSBiZWxvdyB0
aGlzIG9ubHkgd2hlbiBpdCBvdmVybGFwcyB0aGUgc2VsZWN0aW9uPwotICAgICAgICAgICAgICAg
IGFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcik7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBPbmx5IGNvbnNpZGVyIHJhbmdlcyB3aXRoIGEgZGV0ZWN0ZWQgdGVs
ZXBob25lIG51bWJlciBpZiB0aGV5IG92ZXJsYXAgd2l0aCB0aGUgYWN0dWFsIHNlbGVjdGlvbiBy
YW5nZS4KLSAgICAgICAgICAgICAgICBpZiAocmFuZ2VzT3ZlcmxhcChjcmVhdGVMaXZlUmFuZ2Uo
cmFuZ2UpLnB0cigpLCBzZWxlY3RlZExpdmVSYW5nZS5wdHIoKSkpCi0gICAgICAgICAgICAgICAg
ICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kKHJhbmdlKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gKnNlbGVjdGlvbi5zZWxlY3Rp
b24oKS5maXJzdFJhbmdlKCk7CisgICAgICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBmZXcgY2hh
cmFjdGVycyBpbiBlYWNoIGRpcmVjdGlvbiB0byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNlbGVjdGVk
IHBob25lIG51bWJlcnMuCisgICAgICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBjaGFyYWN0ZXJzVG9F
eHRlbmQgPSAxNTsKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IHNjYW5Gb3JUZWxlcGhvbmVO
dW1iZXJzKGV4dGVuZFNlbGVjdGlvbihzZWxlY3RlZFJhbmdlLCBjaGFyYWN0ZXJzVG9FeHRlbmQp
KSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBkbyB0aGlzIHVuY29uZGl0aW9u
YWxseSBpbnN0ZWFkIG9mIHdoZW4gb25seSB3aGVuIGl0IG92ZXJsYXBzIHRoZSBzZWxlY3Rpb24/
CisgICAgICAgICAgICBhZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZWxlcGhvbmVO
dW1iZXIpOworCisgICAgICAgICAgICAvLyBPbmx5IGNvbnNpZGVyIHJhbmdlcyB3aXRoIGEgZGV0
ZWN0ZWQgdGVsZXBob25lIG51bWJlciBpZiB0aGV5IG92ZXJsYXAgd2l0aCB0aGUgc2VsZWN0aW9u
LgorICAgICAgICAgICAgaWYgKGludGVyc2VjdHMocmFuZ2UsIHNlbGVjdGVkUmFuZ2UpKQorICAg
ICAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kKHJhbmdl
KTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKaW5kZXggMjQ2ZmIyNmI3ZTg3NDdmMzBkODliZTY5N2I5OTA2ZDc0ZTZjOTlkMS4uZjRm
ZjU0NjAyZDJkMzkxNzc5Y2M2ZmY3MzM4NjJkMGEyZmNiNDhkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0yMjgsMTMgKzIyOCw2IEBAIHN0YXRpYyB1bnNp
Z25lZCB2ZXJ0aWNhbFNjcm9sbERpc3RhbmNlKEZyYW1lJiBmcmFtZSkKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFNjcm9sbGJhcjo6cGFnZVN0ZXAoaGVpZ2h0KSk7CiB9CiAKLXN0
YXRpYyBTaW1wbGVSYW5nZSB1bmlvblJhbmdlcyhjb25zdCBTaW1wbGVSYW5nZSYgYSwgY29uc3Qg
U2ltcGxlUmFuZ2UmIGIpCi17Ci0gICAgYXV0byYgc3RhcnQgPSBjcmVhdGVMaXZlUmFuZ2UoYSkt
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVS
YW5nZShiKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGEgOiBiOwotICAgIGF1dG8mIGVu
ZCA9IGNyZWF0ZUxpdmVSYW5nZShhKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRf
VE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2UoYikpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDAgPyBi
IDogYTsKLSAgICByZXR1cm4geyBzdGFydC5zdGFydCwgZW5kLmVuZCB9OwotfQotCiAvLyBFeGVj
dXRlIGNvbW1hbmQgZnVuY3Rpb25zCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVCYWNrQ29sb3IoRnJh
bWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRl
eCBlMDEwOGIyM2E2NWZmMDg2NWUyMzgwZjVlYzFjYWFkNTg2M2E1NzY4Li5lZDczZmQxZmQ5MTQ3
MTI2M2YzOTA5MTYwMDUyMDViMWJlYTFkNWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcApAQCAtNTU0LDE4ICs1NTQsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVk
LCBib28KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zZWxlY3Rpb24uc2V0V2l0aG91dFZh
bGlkYXRpb24obV9zZWxlY3Rpb24uZW5kKCksIG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIH0g
ZWxzZSBpZiAoaXNSYW5nZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9zZWxlY3Rp
b24uZmlyc3RSYW5nZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbXBhcmVOb2RlUmVzdWx0ID0g
Y3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKG5vZGUpOwotICAgICAgICAgICAg
aWYgKCFjb21wYXJlTm9kZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgICAg
IGF1dG8gY29tcGFyZVJlc3VsdCA9IGNvbXBhcmVOb2RlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpOwotICAgICAgICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0JF
Rk9SRV9BTkRfQUZURVIgfHwgY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdGhpbmcgaGVyZSwgd2hlbiB0aGlz
IG5vZGUncyByZW5kZXJlciB3YXMgZGVzdHJveWVkLCB0aGUgcmVjdCB0aGF0IGl0Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVj
dGlvbiBnYXBzIHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAg
IC8vIHRoZSByZW1vdmFsIHdvdWxkbid0IGJlIGludmFsaWRhdGVkLgotICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogRG9uJ3QgZG8gc28gbXVjaCB1bm5lY2Vzc2FyeSBpbnZhbGlkYXRpb24u
Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFyUmVuZGVyVHJlZVNlbGVjdGlvbiA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICBpZiAoYXV0byByYW5nZSA9
IG1fc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsgcmFuZ2UgJiYgaW50ZXJzZWN0cygqcmFuZ2UsIG5v
ZGUpKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBkaWQgbm90aGluZyBoZXJlLCB3aGVuIHRoaXMg
bm9kZSdzIHJlbmRlcmVyIHdhcyBkZXN0cm95ZWQsIHRoZSByZWN0IHRoYXQgaXQKKyAgICAgICAg
ICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVjdGlvbiBnYXBz
IHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mCisgICAgICAgICAgICAvLyB0aGUgcmVtb3ZhbCB3
b3VsZG4ndCBiZSBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBkbyBz
byBtdWNoIHVubmVjZXNzYXJ5IGludmFsaWRhdGlvbi4KKyAgICAgICAgICAgIGNsZWFyUmVuZGVy
VHJlZVNlbGVjdGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCmluZGV4IDg3
NjEyMGJiMDliMTJlMDllNGRlY2E1OGU1NTRkMzAyNzAxZWY0MzUuLjU1ODI0ZmEwODM2ZTAzM2M3
OTI2NjE2YTQ3OTcxMTIwZTM3NDNjOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQpAQCAtNjgsMTEgKzY4LDggQEAgc3Rh
dGljIGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHBvc2l0aW9uLCBjb25zdCBWaXMKICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSkt
PmNvbnRhaW5zKHBvc2l0aW9uKTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24u
Zmlyc3RSYW5nZSgpOworICAgIHJldHVybiBzZWxlY3RlZFJhbmdlICYmIGlzUG9pbnRJblJhbmdl
KCpzZWxlY3RlZFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikpOwogfQogCiBPcHRp
b25hbDxzdGQ6OnR1cGxlPFNpbXBsZVJhbmdlLCBOU0RpY3Rpb25hcnkgKj4+IERpY3Rpb25hcnlM
b29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCA5NjQ0OWQzMjdhZWI5YTkx
Y2ZlZDc5MjljYTZjMzY2NDEyMDIwNWJmLi4yMDQxOGMyYzZlZDg1MDBjZTU0ZWZjYmNhZmVkZmRi
ZmVmNTI4NjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0yODQsMTUg
KzI4NCwxMyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6bW9kaWZ5KGNvbnN0IFN0cmluZyYgYWx0ZXJT
dHJpbmcsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaQogCiBFeGNlcHRpb25Pcjx2b2lkPiBE
T01TZWxlY3Rpb246OmV4dGVuZChOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAg
YXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRy
KHRoaXMtPmZyYW1lKCkpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiB7IH07Ci0g
ICAgaWYgKG9mZnNldCA+IChub2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSA/IGNhcmV0TWF4T2Zm
c2V0KG5vZGUpIDogbm9kZS5jb3VudENoaWxkTm9kZXMoKSkpCisgICAgaWYgKG9mZnNldCA+IG5v
ZGUubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9
OwogICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKCZub2RlKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKLQotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CiAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLnNldEV4dGVudChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJm5vZGUsIG9mZnNl
dCksIERPV05TVFJFQU0pOwogICAgIHJldHVybiB7IH07CiB9CkBAIC0zMDEsMjIgKzI5OSwxMCBA
QCBFeGNlcHRpb25PcjxSZWY8UmFuZ2U+PiBET01TZWxlY3Rpb246OmdldFJhbmdlQXQodW5zaWdu
ZWQgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IHJhbmdlQ291bnQoKSkKICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07Ci0KLSAgICAvLyBJZiB5b3UncmUgaGl0
dGluZyB0aGlzLCB5b3UndmUgYWRkZWQgYnJva2VuIG11bHRpLXJhbmdlIHNlbGVjdGlvbiBzdXBw
b3J0LgotICAgIEFTU0VSVChyYW5nZUNvdW50KCkgPT0gMSk7Ci0KLSAgICBhdXRvKiBmcmFtZSA9
IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKGF1dG8qIHNoYWRvd0FuY2VzdG9yID0gc2VsZWN0aW9u
U2hhZG93QW5jZXN0b3IoKmZyYW1lKSkgewotICAgICAgICBhdXRvKiBjb250YWluZXIgPSBzaGFk
b3dBbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOwotICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSBzaGFkb3dBbmNlc3Rvci0+Y29tcHV0ZU5vZGVJbmRleCgpOwotICAgICAg
ICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1ha2VTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50IHsg
KmNvbnRhaW5lciwgb2Zmc2V0IH0pKTsKLSAgICB9Ci0KLSAgICBhdXRvIGZpcnN0UmFuZ2UgPSBm
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwotICAgIEFTU0VSVChm
aXJzdFJhbmdlKTsKLSAgICBpZiAoIWZpcnN0UmFuZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbmRleFNpemVFcnJvciB9OwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKmZpcnN0
UmFuZ2UpOworICAgIGF1dG8mIGZyYW1lID0gKnRoaXMtPmZyYW1lKCk7CisgICAgaWYgKGF1dG8g
c2hhZG93QW5jZXN0b3IgPSBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcihmcmFtZSkpCisgICAgICAg
IHJldHVybiBjcmVhdGVMaXZlUmFuZ2UobWFrZVNpbXBsZVJhbmdlKCptYWtlQm91bmRhcnlQb2lu
dEJlZm9yZU5vZGUoKnNoYWRvd0FuY2VzdG9yKSkpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFu
Z2UoKmZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSk7CiB9CiAKIHZv
aWQgRE9NU2VsZWN0aW9uOjpyZW1vdmVBbGxSYW5nZXMoKQpAQCAtMzI3LDUwICszMTMsMjIgQEAg
dm9pZCBET01TZWxlY3Rpb246OnJlbW92ZUFsbFJhbmdlcygpCiAgICAgZnJhbWUtPnNlbGVjdGlv
bigpLmNsZWFyKCk7CiB9CiAKLXZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgcmFu
Z2UpCit2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIGxpdmVSYW5nZSkKIHsKLSAg
ICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQ
dHIodGhpcy0+ZnJhbWUoKSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKLQorICAgIGF1dG8gcmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2UobGl2ZVJhbmdlKTsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+c2Vs
ZWN0aW9uKCk7CisKICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0
ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7Ci0gICAg
ICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7CisgICAg
aWYgKHNlbGVjdGVkUmFuZ2UgJiYgIXNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29u
dGFpbmluZ1NoYWRvd1Jvb3QoKSAmJiBpbnRlcnNlY3RzKCpzZWxlY3RlZFJhbmdlLCByYW5nZSkp
IHsKKyAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbih1bmlvblJhbmdlcygqc2VsZWN0ZWRS
YW5nZSwgcmFuZ2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gbm9ybWFs
aXplZFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpOwotICAgIGF1dG8gcmVz
dWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwg
Km5vcm1hbGl6ZWRSYW5nZSk7Ci0gICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IC0xKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHN1
cHBvcnQgZGlzY29udGlndW91cyBzZWxlY3Rpb24uIFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIHRo
ZSB0d28gcmFuZ2VzIGRvbid0IGludGVyc2VjdC4KLSAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsICpub3JtYWxpemVkUmFuZ2Up
OwotICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCkgPiAtMSkgewotICAgICAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJv
dW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqbm9ybWFsaXplZFJhbmdlKTsKLSAgICAg
ICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJu
VmFsdWUoKSA9PSAtMSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSByYW5nZXMgaW50ZXJzZWN0
LgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8obWFrZURlcHJlY2F0ZWRMZWdhY3lQ
b3NpdGlvbigmcmFuZ2Uuc3RhcnRDb250YWluZXIoKSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSksIG1h
a2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24oJm5vcm1hbGl6ZWRSYW5nZS0+ZW5kQ29udGFpbmVy
KCksIG5vcm1hbGl6ZWRSYW5nZS0+ZW5kT2Zmc2V0KCkpLCBET1dOU1RSRUFNKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG5ldyByYW5nZSBjb250YWlucyB0
aGUgb3JpZ2luYWwgcmFuZ2UuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlv
bihtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxl
Y3Rpb24uIFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIHRoZSB0d28gcmFuZ2VzIGRvbid0IGludGVy
c2VjdC4KLSAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpFTkRfVE9fU1RBUlQsICpub3JtYWxpemVkUmFuZ2UpOwotICAgICAgICBpZiAoIXJlc3VsdC5o
YXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPCAxKSB7Ci0gICAg
ICAgICAgICByZXN1bHQgPSByYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9U
T19FTkQsICpub3JtYWxpemVkUmFuZ2UpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIHJhbmdlIGNvbnRhaW5zIHRoZSBuZXcgcmFuZ2UuCi0g
ICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihtYWtlU2ltcGxlUmFuZ2UoKm5v
cm1hbGl6ZWRSYW5nZSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAv
LyBUaGUgcmFuZ2VzIGludGVyc2VjdC4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRv
KG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24oJm5vcm1hbGl6ZWRSYW5nZS0+c3RhcnRDb250
YWluZXIoKSwgbm9ybWFsaXplZFJhbmdlLT5zdGFydE9mZnNldCgpKSwgbWFrZURlcHJlY2F0ZWRM
ZWdhY3lQb3NpdGlvbigmcmFuZ2UuZW5kQ29udGFpbmVyKCksIHJhbmdlLmVuZE9mZnNldCgpKSwg
RE9XTlNUUkVBTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgc2VsZWN0
aW9uLnNldFNlbGVjdGlvbihyYW5nZSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpkZWxldGVG
cm9tRG9jdW1lbnQoKQpAQCAtMzkyLDQ1ICszNTAsMTkgQEAgdm9pZCBET01TZWxlY3Rpb246OmRl
bGV0ZUZyb21Eb2N1bWVudCgpCiAKIGJvb2wgRE9NU2VsZWN0aW9uOjpjb250YWluc05vZGUoTm9k
ZSYgbm9kZSwgYm9vbCBhbGxvd1BhcnRpYWwpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IFRoaXMg
YmVoYXZpb3IgZG9lcyBub3QgbWF0Y2ggd2hhdCB0aGUgc2VsZWN0aW9uIEFQSSBzdGFuZGFyZCBz
cGVjaWZpZXMuCisgICAgaWYgKG5vZGUuaXNUZXh0Tm9kZSgpKQorICAgICAgICBhbGxvd1BhcnRp
YWwgPSB0cnVlOworCiAgICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZy
YW1lLT5zZWxlY3Rpb24oKTsKLSAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgIT0gJm5vZGUuZG9j
dW1lbnQoKSB8fCBzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFJlZjxOb2RlPiBwcm90ZWN0ZWROb2RlKG5vZGUpOwotICAgIGF1dG8gc2VsZWN0ZWRSYW5n
ZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8g
c2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCk7CiAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRh
aW5lci0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZSgpOwotICAgIGlm
ICghcGFyZW50Tm9kZSB8fCAhcGFyZW50Tm9kZS0+aXNDb25uZWN0ZWQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IG5vZGUuY29tcHV0ZU5vZGVJbmRl
eCgpOwotCi0gICAgYXV0byBzdGFydHNSZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKHBhcmVudE5vZGUsIG5vZGVJbmRleCwgJnNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwotICAgIGlmIChzdGFydHNSZXN1bHQu
aGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZW5kc1Jl
c3VsdCA9IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4
ICsgMSwgJnNlbGVjdGVkUmFuZ2UtPmVuZENvbnRhaW5lcigpLCBzZWxlY3RlZFJhbmdlLT5lbmRP
ZmZzZXQoKSk7Ci0gICAgQVNTRVJUKCFlbmRzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKTsKLSAgICBi
b29sIGlzTm9kZUZ1bGx5U2VsZWN0ZWQgPSAhc3RhcnRzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYm
IHN0YXJ0c1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+PSAwCi0gICAgICAgICYmICFlbmRz
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGVuZHNSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkg
PD0gMDsKLSAgICBpZiAoaXNOb2RlRnVsbHlTZWxlY3RlZCkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBhdXRvIHN0YXJ0RW5kUmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhwYXJlbnROb2RlLCBub2RlSW5kZXgsICZzZWxlY3RlZFJhbmdlLT5lbmRDb250YWluZXIoKSwg
c2VsZWN0ZWRSYW5nZS0+ZW5kT2Zmc2V0KCkpOwotICAgIEFTU0VSVCghc3RhcnRFbmRSZXN1bHQu
aGFzRXhjZXB0aW9uKCkpOwotICAgIGF1dG8gZW5kU3RhcnRSZXN1bHQgPSBSYW5nZTo6Y29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsICZzZWxlY3RlZFJhbmdl
LT5zdGFydENvbnRhaW5lcigpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBB
U1NFUlQoIWVuZFN0YXJ0UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKTsKLSAgICBib29sIGlzTm9kZUZ1
bGx5VW5zZWxlY3RlZCA9ICghc3RhcnRFbmRSZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgc3RhcnRF
bmRSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKQotICAgICAgICB8fCAoIWVuZFN0YXJ0
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGVuZFN0YXJ0UmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpIDwgMCk7Ci0gICAgaWYgKGlzTm9kZUZ1bGx5VW5zZWxlY3RlZCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIGFsbG93UGFydGlhbCB8fCBub2RlLmlzVGV4dE5vZGUoKTsK
KyAgICByZXR1cm4gYWxsb3dQYXJ0aWFsID8gaW50ZXJzZWN0cygqc2VsZWN0ZWRSYW5nZSwgbm9k
ZSkgOiBjb250YWlucygqc2VsZWN0ZWRSYW5nZSwgbm9kZSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0
aW9uOjpzZWxlY3RBbGxDaGlsZHJlbihOb2RlJiBub2RlKQpAQCAtNDgzLDExICs0MTUsNyBAQCB1
bnNpZ25lZCBET01TZWxlY3Rpb246OnNoYWRvd0FkanVzdGVkT2Zmc2V0KGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbikgY29uc3QKIGJvb2wgRE9NU2VsZWN0aW9uOjppc1ZhbGlkRm9yUG9zaXRpb24o
Tm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0g
ICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbm9kZSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICZub2RlLT5kb2N1bWVudCgpID09IGZyYW1l
LT5kb2N1bWVudCgpOworICAgIHJldHVybiBmcmFtZSAmJiAoIW5vZGUgfHwgJm5vZGUtPmRvY3Vt
ZW50KCkgPT0gZnJhbWUtPmRvY3VtZW50KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IGY5MmFiM2JlNjQwOGJl
YjE2Njc0M2U1ODNmM2NjYjgyZDRhOWVkNzMuLmEwNGZlYmIxZWE4MzdkODI3NzQxNTU1OGI0YzU2
MDA2YTliY2U3ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC03
NzQsMTcgKzc3NCwxMyBAQCBFbGVtZW50KiBEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVu
dChjb25zdCBGcmFtZSogc291cmNlRnJhbWUsIEVsZW1lbnQqIHN0YQogICAgIHN0YXRlLnR5cGUg
PSBzb3VyY2VGcmFtZS0+c2VsZWN0aW9uKCkuY29udGFpbnMoZHJhZ09yaWdpbikgPyBEcmFnU291
cmNlQWN0aW9uOjpTZWxlY3Rpb24gOiBPcHRpb25TZXQ8RHJhZ1NvdXJjZUFjdGlvbj4oeyB9KTsK
ICAgICBpZiAoIXN0YXJ0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICNpZiBF
TkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBlbmNs
b3NpbmdBdHRhY2htZW50RWxlbWVudCgqc3RhcnRFbGVtZW50KSkgewotICAgICAgICBhdXRvIHNl
bGVjdGlvbiA9IHNvdXJjZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAg
YXV0byYgc2VsZWN0aW9uID0gc291cmNlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwog
ICAgICAgICBib29sIGlzU2luZ2xlQXR0YWNobWVudFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zdGFy
dCgpID09IFBvc2l0aW9uKGF0dGFjaG1lbnQuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVm
b3JlQW5jaG9yKSAmJiBzZWxlY3Rpb24uZW5kKCkgPT0gUG9zaXRpb24oYXR0YWNobWVudC5nZXQo
KSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7Ci0gICAgICAgIGJvb2wgaXNBdHRh
Y2htZW50RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiA9IGZhbHNlOwotICAgICAgICBpZiAoYXV0
byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAg
ICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5n
ZSktPmNvbXBhcmVOb2RlKCphdHRhY2htZW50KTsKLSAgICAgICAgICAgIGlzQXR0YWNobWVudEVs
ZW1lbnRJbkN1cnJlbnRTZWxlY3Rpb24gPSAhY29tcGFyZVJlc3VsdC5oYXNFeGNlcHRpb24oKSAm
JiBjb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lE
RTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNBdHRhY2htZW50RWxlbWVudEluQ3VycmVu
dFNlbGVjdGlvbiB8fCBpc1NpbmdsZUF0dGFjaG1lbnRTZWxlY3Rpb24pIHsKKyAgICAgICAgYXV0
byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKKyAgICAgICAgaWYgKGlz
U2luZ2xlQXR0YWNobWVudFNlbGVjdGlvbiB8fCAhc2VsZWN0ZWRSYW5nZSB8fCAhY29udGFpbnMo
KnNlbGVjdGVkUmFuZ2UsICphdHRhY2htZW50KSkgewogICAgICAgICAgICAgc3RhdGUudHlwZSA9
IERyYWdTb3VyY2VBY3Rpb246OkF0dGFjaG1lbnQ7CiAgICAgICAgICAgICByZXR1cm4gYXR0YWNo
bWVudC5nZXQoKTsKICAgICAgICAgfQpAQCAtMTQ3MSw4ICsxNDY3LDcgQEAgdm9pZCBEcmFnQ29u
dHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0
b3I8SW50U2l6ZT4KIAogICAgIFZlY3RvcjxSZWY8SFRNTEltYWdlRWxlbWVudD4+IHBsYWNlaG9s
ZGVyczsKICAgICBmb3IgKGF1dG8mIHBsYWNlaG9sZGVyIDogZGVzY2VuZGFudHNPZlR5cGU8SFRN
TEltYWdlRWxlbWVudD4oZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKmNvbnRhaW5lcikpKSB7Ci0g
ICAgICAgIGF1dG8gaW50ZXJzZWN0c05vZGUgPSBjcmVhdGVMaXZlUmFuZ2UoKmluc2VydGVkQ29u
dGVudFJhbmdlKS0+aW50ZXJzZWN0c05vZGUocGxhY2Vob2xkZXIpOwotICAgICAgICBpZiAoIWlu
dGVyc2VjdHNOb2RlLmhhc0V4Y2VwdGlvbigpICYmIGludGVyc2VjdHNOb2RlLnJldHVyblZhbHVl
KCkpCisgICAgICAgIGlmIChpbnRlcnNlY3RzKCppbnNlcnRlZENvbnRlbnRSYW5nZSwgcGxhY2Vo
b2xkZXIpKQogICAgICAgICAgICAgcGxhY2Vob2xkZXJzLmFwcGVuZChwbGFjZWhvbGRlcik7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYTgyYmM4MjFjZWJh
MzJlYmM4NGQxNWUyMDMwNjNlODNmZDNlNTVmMS4uMDllYjA2ZGY0YTMwMzZmYTU1ODdkMzhhZmY5
MTljOGJlNjExM2VkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjc0
Niw4ICsyNzQ2LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudChjb25z
dCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIHRhcmdldE4KICAgICAvLyB3aWxsIHNldCBh
IHNlbGVjdGlvbiBpbnNpZGUgaXQsIHdoaWNoIHdpbGwgYWxzbyBzZXQgdGhlIGZvY3VzZWQgZWxl
bWVudC4KICAgICBpZiAoZWxlbWVudCAmJiBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkg
ewogICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVh
dGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tcGFyZU5vZGUoKmVsZW1lbnQpOwotICAgICAgICAgICAg
aWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
ID09IFJhbmdlOjpOT0RFX0lOU0lERSAmJiBlbGVtZW50LT5pc0Rlc2NlbmRhbnRPZihtX2ZyYW1l
LmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkpKQorICAgICAgICAgICAgaWYgKGNvbnRhaW5z
KCpyYW5nZSwgKmVsZW1lbnQpICYmIGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUuZG9j
dW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA0OTcyOWQwOTY5NzgwMTFl
OGU3NTBhYTM4NDhiNmJjMzQwMGUzMDYxLi43ODNmZWVlZmMyZjg5ZDk4MjM5NjNjNmY1YWMwZTli
YjI4OGM4MDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTczMCwxOSArNzMwLDE5IEBAIGF1dG8g
UGFnZTo6ZmluZFRleHRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBv
cHRpb25zLCB1bnNpZ25lZCBsCiAKICAgICBpZiAoZnJhbWVXaXRoU2VsZWN0aW9uKSB7CiAgICAg
ICAgIHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbiA9IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rpb247
Ci0gICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgICAgICBhdXRvIHNlbGVjdGVkUmFu
Z2UgPSAqZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJh
bmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykpIHsKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHQucmFuZ2VzLnNpemUoKTsgaSA+IDA7IC0taSkg
ewotICAgICAgICAgICAgICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5n
ZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RB
UlQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHQucmFuZ2VzW2kgLSAxXSkpOwotICAgICAgICAgICAg
ICAgIGlmICghY29tcGFyaXNvblJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBjb21wYXJpc29uUmVz
dWx0LnJldHVyblZhbHVlKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNlZW1z
IGxpa2UgdGhpcyBzaG91bGQgYmUgaXNfZ3RlcSB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBzYW1l
IHN0cmluZyBmb3VuZCB0d2ljZSBpbiBhIHJvdy4KKyAgICAgICAgICAgICAgICBpZiAoaXNfZ3Qo
ZG9jdW1lbnRPcmRlcihzZWxlY3RlZFJhbmdlLnN0YXJ0LCByZXN1bHQucmFuZ2VzW2kgLSAxXS5l
bmQpKSkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5kZXhGb3JTZWxlY3Rpb24gPSBp
IC0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDAsIHNpemUgPSByZXN1bHQucmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAg
ICAgICAgICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rl
ZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIGNyZWF0
ZUxpdmVSYW5nZShyZXN1bHQucmFuZ2VzW2ldKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb21w
YXJpc29uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmlzb25SZXN1bHQucmV0dXJuVmFs
dWUoKSA8IDApIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2VlbXMgbGlrZSB0aGlzIHNo
b3VsZCBiZSBpc19sdGVxIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIHNhbWUgc3RyaW5nIGZvdW5k
IHR3aWNlIGluIGEgcm93LgorICAgICAgICAgICAgICAgIGlmIChpc19sdChkb2N1bWVudE9yZGVy
KHNlbGVjdGVkUmFuZ2UuZW5kLCByZXN1bHQucmFuZ2VzW2ldLnN0YXJ0KSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uID0gaTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KaW5kZXggMmVmYzQxZTNkNDI3
MzI2NTkyN2FkZTViOGJiYTk2YTc3MTIzNjk4NS4uZjE2ZWJjNTg2YzdhN2MwNDE4ZjQ3ZWY5NGM2
NTU2MzI3OGI5OTViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC02MzAsNyArNjMwLDcgQEAgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0KiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5k
VGVsZXBob25lTnUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBmb3IgKGF1dG8mIGhp
Z2hsaWdodCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgewotICAgICAgICBpZiAoaGlnaGxpZ2h0
LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlICYmIGNyZWF0ZUxpdmVS
YW5nZShoaWdobGlnaHQtPnJhbmdlKCkpLT5jb250YWlucyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVj
dGlvblJhbmdlKSkpCisgICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6
OlRlbGVwaG9uZU51bWJlclR5cGUgJiYgY29udGFpbnMoaGlnaGxpZ2h0LT5yYW5nZSgpLCAqc2Vs
ZWN0aW9uUmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIGhpZ2hsaWdodC5nZXQoKTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCA5MGM5ZDk4YWNmYTFhMjFh
N2Y0YjQ0ZGQxMjhkOThiMDEyM2Q0OGMyLi41ZDJhZjJlZDRkZTc1NmVjZWNjZjA4N2E1MzY5YWE5
M2ZkNWUwMzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0yMTYyLDI3
ICsyMTYyLDQ1IEBAIHVuc2lnbmVkIEludGVybmFsczo6bGVuZ3RoRnJvbVJhbmdlKEVsZW1lbnQm
IHNjb3BlLCBjb25zdCBSYW5nZSYgcmFuZ2UpCiAgICAgcmV0dXJuIGNsYW1wVG88dW5zaWduZWQ+
KGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKHNjb3Bl
KSwgbWFrZVNpbXBsZVJhbmdlKHJhbmdlKSkubGVuZ3RoKTsKIH0KIAotU3RyaW5nIEludGVybmFs
czo6cmFuZ2VBc1RleHQoY29uc3QgUmFuZ2UmIHJhbmdlKQorU3RyaW5nIEludGVybmFsczo6cmFu
Z2VBc1RleHQoY29uc3QgUmFuZ2UmIGxpdmVSYW5nZSkKIHsKLSAgICByZXR1cm4gcmFuZ2UudGV4
dCgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobGl2ZVJhbmdlKTsKKyAgICBy
YW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0
dXJuIHBsYWluVGV4dChyYW5nZSk7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0
VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UmIHJhbmdlKQorLy8gRklYTUU6
IEZpbmQgYSBnb29kIHBsYWNlIGZvciB0aGlzIGdlbmVyYWwgcHVycG9zZSBhbGdvcml0aG0uCitz
dGF0aWMgU3RyaW5nIGpvaW4oVmVjdG9yPFN0cmluZz4mJiBzdHJpbmdzKQogewotICAgIFN0cmlu
ZyByZXN1bHQ7Ci0gICAgZm9yIChTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3
YXJkc0l0ZXJhdG9yKG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOyAhYmFja3dhcmRzSXRlcmF0b3Iu
YXRFbmQoKTsgYmFja3dhcmRzSXRlcmF0b3IuYWR2YW5jZSgpKQotICAgICAgICByZXN1bHQuaW5z
ZXJ0KGJhY2t3YXJkc0l0ZXJhdG9yLnRleHQoKS50b1N0cmluZygpLCAwKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIGZvciAoYXV0byYgc3RyaW5n
IDogc3RyaW5ncykKKyAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOworICAg
IHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIEludGVybmFsczo6cmFuZ2VB
c1RleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSYgbGl2ZVJhbmdlKQor
eworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobGl2ZVJhbmdlKTsKKyAgICByYW5n
ZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgVmVjdG9y
PFN0cmluZz4gc3RyaW5nczsKKyAgICBmb3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0
b3IgYmFja3dhcmRzSXRlcmF0b3IocmFuZ2UpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsg
YmFja3dhcmRzSXRlcmF0b3IuYWR2YW5jZSgpKQorICAgICAgICBzdHJpbmdzLmFwcGVuZChiYWNr
d2FyZHNJdGVyYXRvci50ZXh0KCkudG9TdHJpbmcoKSk7CisgICAgc3RyaW5ncy5yZXZlcnNlKCk7
CisgICAgcmV0dXJuIGpvaW4oV1RGTW92ZShzdHJpbmdzKSk7CiB9CiAKLVJlZjxSYW5nZT4gSW50
ZXJuYWxzOjpzdWJyYW5nZShSYW5nZSYgcmFuZ2UsIHVuc2lnbmVkIHJhbmdlTG9jYXRpb24sIHVu
c2lnbmVkIHJhbmdlTGVuZ3RoKQorUmVmPFJhbmdlPiBJbnRlcm5hbHM6OnN1YnJhbmdlKFJhbmdl
JiBsaXZlUmFuZ2UsIHVuc2lnbmVkIHJhbmdlTG9jYXRpb24sIHVuc2lnbmVkIHJhbmdlTGVuZ3Ro
KQogewotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1h
a2VTaW1wbGVSYW5nZShyYW5nZSksIHsgcmFuZ2VMb2NhdGlvbiwgcmFuZ2VMZW5ndGggfSkpOwor
ICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobGl2ZVJhbmdlKTsKKyAgICByYW5nZS5z
dGFydC5jb250YWluZXItPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIGNy
ZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UocmFuZ2UsIHsgcmFuZ2VMb2NhdGlv
biwgcmFuZ2VMZW5ndGggfSkpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEludGVybmFsczo6cmFuZ2VP
ZlN0cmluZ05lYXJMb2NhdGlvbihjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGV4
dCwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0KQorUmVmUHRyPFJhbmdlPiBJbnRlcm5hbHM6OnJhbmdl
T2ZTdHJpbmdOZWFyTG9jYXRpb24oY29uc3QgUmFuZ2UmIGxpdmVSYW5nZSwgY29uc3QgU3RyaW5n
JiB0ZXh0LCB1bnNpZ25lZCB0YXJnZXRPZmZzZXQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVS
YW5nZShmaW5kQ2xvc2VzdFBsYWluVGV4dChtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpLCB0ZXh0LCB7
IH0sIHRhcmdldE9mZnNldCkpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobGl2
ZVJhbmdlKTsKKyAgICByYW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkudXBkYXRlTGF5
b3V0KCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShmaW5kQ2xvc2VzdFBsYWluVGV4dChy
YW5nZSwgdGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpKTsKIH0KIAogI2lmICFQTEFURk9STShNQUMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L21hYy9XS0RPTVJhbmdlLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQppbmRleCBjZjI2OWExY2RkMzAyYTQzYjk3YWIyYjYw
MDBjMGFkMzAyODBlODIyLi5hYmFiYWVlYWNlYTE2ODQyNzI0ZGI1N2E2ZWY4NTZiZGRmNjYyNmZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L21hYy9XS0RPTVJhbmdlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQg
IldLQnVuZGxlQVBJQ2FzdC5oIgogI2ltcG9ydCAiV0tET01JbnRlcm5hbHMuaCIKICNpbXBvcnQg
PFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1Zpc2libGVVbml0cy5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3Rv
ckNvY29hLmg+CiAKQEAgLTQ5LDEyICs1MCw3IEBAIC0gKGlkKV9pbml0V2l0aEltcGw6KFdlYkNv
cmU6OlJhbmdlKilpbXBsCiAKIC0gKGlkKWluaXRXaXRoRG9jdW1lbnQ6KFdLRE9NRG9jdW1lbnQg
Kilkb2N1bWVudAogewotICAgIGF1dG8gcmFuZ2UgPSBXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKCpX
ZWJLaXQ6OnRvV2ViQ29yZURvY3VtZW50KGRvY3VtZW50KSk7Ci0gICAgc2VsZiA9IFtzZWxmIF9p
bml0V2l0aEltcGw6cmFuZ2UucHRyKCldOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIHJldHVybiBzZWxmOworICAgIHJldHVybiBbc2VsZiBfaW5pdFdpdGhJbXBs
OldlYkNvcmU6OlJhbmdlOjpjcmVhdGUoKldlYktpdDo6dG9XZWJDb3JlRG9jdW1lbnQoZG9jdW1l
bnQpKS5wdHIoKV07CiB9CiAKIC0gKHZvaWQpZGVhbGxvYwpAQCAtMTE4LDcgKzExNCw5IEBAIC0g
KE5TSW50ZWdlcillbmRPZmZzZXQKIAogLSAoTlNTdHJpbmcgKil0ZXh0CiB7Ci0gICAgcmV0dXJu
IF9pbXBsLT50ZXh0KCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqX2ltcGwp
OworICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsK
KyAgICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlKTsKIH0KIAogLSAoQk9PTClpc0NvbGxhcHNlZApA
QCAtMTI4LDggKzEyNiw5IEBAIC0gKEJPT0wpaXNDb2xsYXBzZWQKIAogLSAoTlNBcnJheSAqKXRl
eHRSZWN0cwogewotICAgIF9pbXBsLT5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhtYWtlU2ltcGxlUmFuZ2UoKl9pbXBsKSkp
LmF1dG9yZWxlYXNlKCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqX2ltcGwp
OworICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKSkuYXV0b3JlbGVhc2UoKTsK
IH0KIAogLSAoV0tET01SYW5nZSAqKXJhbmdlQnlFeHBhbmRpbmdUb1dvcmRCb3VuZGFyeUJ5Q2hh
cmFjdGVyczooTlNVSW50ZWdlciljaGFyYWN0ZXJzIGluRGlyZWN0aW9uOihXS0RPTVJhbmdlRGly
ZWN0aW9uKWRpcmVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZS5jcHAKaW5kZXggNjNmM2M3ODZlNmZiMjE1YzlhMmY0ZTI1OWZhYzllNjExYjZkYjhiMi4u
Yzc5N2YzZTViMDE2ODA1ZjFiNjMzZGZkMGQxZjM0NTQzZjJiZDc5NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCkBAIC00NCw2ICs0NCw3IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Rl
eHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVmlzaWJsZVNlbGVjdGlvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBA
IC05NywyMyArOTgsMzIgQEAgUmFuZ2UmIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmNvcmVS
YW5nZSgpIGNvbnN0CiAKIFJlZjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+IEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU6OmRvY3VtZW50KCkKIHsKLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlOjpnZXRPckNyZWF0ZShtX3JhbmdlLT5vd25lckRvY3VtZW50KCkpOworICAgIHJl
dHVybiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKG1fcmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCkuZG9jdW1lbnQoKSk7CiB9CiAKIFdlYkNvcmU6OkludFJlY3QgSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZTo6Ym91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcygpIGNvbnN0
CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9yYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCk7
Ci0gICAgcmV0dXJuIGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50
UmVjdCh1bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9y
ZGVyQW5kVGV4dFJlY3RzKG1ha2VTaW1wbGVSYW5nZShtX3JhbmdlKSkpKSk7CisgICAgYXV0byBy
YW5nZSA9IG1ha2VTaW1wbGVSYW5nZShtX3JhbmdlKTsKKyAgICBhdXRvIGZyYW1lID0gcmFuZ2Uu
c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlm
ICghdmlldykKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNU
b1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRl
ck9iamVjdDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMocmFuZ2UpKSkpOwogfQogCiBSZWZQ
dHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25h
cHNob3RPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQgPSBt
X3JhbmdlLT5vd25lckRvY3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gb3duZXJEb2N1bWVu
dC5mcmFtZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobV9yYW5nZSk7CisK
KyAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZihyYW5nZS5zdGFydC5jb250YWluZXItPmRvY3Vt
ZW50KCkpOworCisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIoZG9jdW1lbnQtPmZyYW1lKCkp
OwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGF1dG8gZnJhbWVWaWV3ID0gZnJh
bWUtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKQEAgLTEyMSwxMyArMTMxLDExIEBAIFJlZlB0cjxXZWJJbWFnZT4gSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZTo6cmVuZGVyZWRJbWFnZShTbmFwc2hvdE9wdGlvbnMgb3B0aW9uCiAgICAgTG9j
YWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZSBsb2NhbEFwcGVhcmFuY2UoZnJhbWVWaWV3LT51c2VE
YXJrQXBwZWFyYW5jZSgpKTsKICNlbmRpZgogCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZy
YW1lKTsKLQogICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
bWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKHJhbmdlKTsKIAogICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gKG9wdGlvbnMgJiBTbmFw
c2hvdE9wdGlvbnNFeGNsdWRlRGV2aWNlU2NhbGVGYWN0b3IpID8gMSA6IGZyYW1lLT5wYWdlKCkt
PmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgSW50UmVjdCBwYWludFJlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVC
b3JkZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpKSkpOworICAgIEludFJl
Y3QgcGFpbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh1bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0
cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9yZGVyQW5kVGV4dFJlY3RzKHJhbmdlKSkpOwogICAg
IEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IHBhaW50UmVjdC5zaXplKCk7CiAgICAgYmFja2lu
Z1N0b3JlU2l6ZS5zY2FsZShzY2FsZUZhY3Rvcik7CiAKQEAgLTE1NSw3ICsxNjMsNyBAQCBSZWZQ
dHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25h
cHNob3RPcHRpb25zIG9wdGlvbgogICAgICAgICBwYWludEJlaGF2aW9yLmFkZChQYWludEJlaGF2
aW9yOjpGb3JjZVdoaXRlVGV4dCk7CiAKICAgICBmcmFtZVZpZXctPnNldFBhaW50QmVoYXZpb3Io
cGFpbnRCZWhhdmlvcik7Ci0gICAgb3duZXJEb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKKyAgICBk
b2N1bWVudC0+dXBkYXRlTGF5b3V0KCk7CiAKICAgICBmcmFtZVZpZXctPnBhaW50KCpncmFwaGlj
c0NvbnRleHQsIHBhaW50UmVjdCk7CiAgICAgZnJhbWVWaWV3LT5zZXRQYWludEJlaGF2aW9yKG9s
ZFBhaW50QmVoYXZpb3IpOwpAQCAtMTY3LDcgKzE3NSw5IEBAIFJlZlB0cjxXZWJJbWFnZT4gSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6cmVuZGVyZWRJbWFnZShTbmFwc2hvdE9wdGlvbnMgb3B0
aW9uCiAKIFN0cmluZyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjp0ZXh0KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9yYW5nZS0+dGV4dCgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxl
UmFuZ2UobV9yYW5nZSk7CisgICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLnVw
ZGF0ZUxheW91dCgpOworICAgIHJldHVybiBwbGFpblRleHQocmFuZ2UpOwogfQogCiBSZWZQdHI8
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gY3JlYXRlSGFuZGxlKGNvbnN0IE9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDRjNzE5YjUwZTNjNzgwYjJhMTNm
ZjI2NDE3NzRkMDI3OGRlZjBiNmMuLjg2MjZiMGZmZjkzMmUyNThhYjYzY2NlMDgwNzIxMzAwODI0
YWE4ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCkBAIC00MTg0LDcgKzQxODQsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RE
b2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVl
cwogCiAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIGF1dG8gcmFuZ2VPZkludGVyZXN0ID0gKm1ha2VTaW1wbGVSYW5nZShyYW5nZU9m
SW50ZXJlc3RTdGFydCwgcmFuZ2VPZkludGVyZXN0RW5kKTsKLSAgICBpZiAoc2VsZWN0aW9uUmFu
Z2UgJiYgcmFuZ2VzT3ZlcmxhcChjcmVhdGVMaXZlUmFuZ2UocmFuZ2VPZkludGVyZXN0KS5wdHIo
KSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpKSB7CisgICAgaWYgKHNl
bGVjdGlvblJhbmdlICYmIGludGVyc2VjdHMocmFuZ2VPZkludGVyZXN0LCAqc2VsZWN0aW9uUmFu
Z2UpKSB7CiAgICAgICAgIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHN0ZDo6
bWF4KHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7CiAgICAgICAgIGVuZE9m
UmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSBzdGQ6Om1pbihyYW5nZU9mSW50ZXJlc3RFbmQs
IHNlbGVjdGlvbkVuZCk7CiAgICAgfSBlbHNlIHsKQEAgLTQyNDksNyArNDI0OSw3IEBAIHZvaWQg
V2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29u
dGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgY29udGV4dC5jb250ZXh0QmVmb3JlID0gbWFrZVN0cmlu
Zyhjb250ZXh0QmVmb3JlU3RhcnQsIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7
CiAgICAgY29udGV4dC5zZWxlY3RlZFRleHQgPSBtYWtlU3RyaW5nKHN0YXJ0T2ZSYW5nZU9mSW50
ZXJlc3RJblNlbGVjdGlvbiwgZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7CiAgICAg
Y29udGV4dC5jb250ZXh0QWZ0ZXIgPSBtYWtlU3RyaW5nKGVuZE9mUmFuZ2VPZkludGVyZXN0SW5T
ZWxlY3Rpb24sIGNvbnRleHRBZnRlckVuZCk7Ci0gICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYg
cmFuZ2VzT3ZlcmxhcChjcmVhdGVMaXZlUmFuZ2UocmFuZ2VPZkludGVyZXN0KS5wdHIoKSwgY3Jl
YXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdlKS5wdHIoKSkpIHsKKyAgICBpZiAoY29tcG9z
aXRpb25SYW5nZSAmJiBpbnRlcnNlY3RzKHJhbmdlT2ZJbnRlcmVzdCwgKmNvbXBvc2l0aW9uUmFu
Z2UpKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvblN0YXJ0KGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5zdGFydCkpOwogICAgICAgICBW
aXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25FbmQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCkpOwogICAgICAgICBjb250ZXh0Lm1hcmtlZFRleHQgPSBt
YWtlU3RyaW5nKGNvbXBvc2l0aW9uU3RhcnQsIGNvbXBvc2l0aW9uRW5kKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NLm1tCmluZGV4IGRlNWVhOGQ2YmM5MDNkZGVlYWFmNjEwNDRmNDQ4NDgxOWQ2
YmVlYTEuLmFkODU0MmEyMjJjZGNhYzY2OWYxOGY0MTg0OGFiNTdjYmVjMGJkMGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL0RPTS5tbQpAQCAtNTcwLDEwICs1NzAsOSBAQCAtIChDR1JlY3QpYm91
bmRpbmdCb3gKIC0gKE5TUmVjdClib3VuZGluZ0JveAogI2VuZGlmCiB7Ci0gICAgLy8gRklYTUU6
IFRoZSBjYWxsIHRvIHVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyBzaG91bGQg
YmUgbW92ZWQgaW50byBXZWJDb3JlOjpSYW5nZS4KLSAgICBhdXRvJiByYW5nZSA9ICpjb3JlKHNl
bGYpOwotICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gdW5pb25SZWN0KFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKHJhbmdlKSkpOworICAgIGF1dG8gcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UoKmNvcmUoc2VsZikpOworICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+
ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBy
ZXR1cm4gdW5pb25SZWN0KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKTsK
IH0KIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01SYW5nZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5n
ZS5tbQppbmRleCA1ZWUwYmNkZmQ5OTc0MzcyYTNlYmM0YWQyYTg3YWY4M2JkZjUzZjUxLi5iMGUz
NGU4NjRmMDcxMDQ3NDZhZjEyODRiM2ExYmQ4MTYyMTEyZWMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL0RPTVJhbmdlLm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L0pTRXhlY1N0YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1NpbXBsZVJhbmdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9UaHJlYWRDaGVjay5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlT2Jq
Q0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmg+CkBA
IC05Miw3ICs5Myw5IEBAIC0gKERPTU5vZGUgKiljb21tb25BbmNlc3RvckNvbnRhaW5lcgogLSAo
TlNTdHJpbmcgKil0ZXh0CiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIHJldHVybiBJTVBMLT50ZXh0KCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1w
bGVSYW5nZSgqSU1QTCk7CisgICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLnVw
ZGF0ZUxheW91dCgpOworICAgIHJldHVybiBwbGFpblRleHQocmFuZ2UpOwogfQogCiAtICh2b2lk
KXNldFN0YXJ0OihET01Ob2RlICopcmVmTm9kZSBvZmZzZXQ6KGludClvZmZzZXQKQEAgLTE3MCw3
ICsxNzMsNyBAQCAtIChzaG9ydCljb21wYXJlQm91bmRhcnlQb2ludHM6KHVuc2lnbmVkIHNob3J0
KWhvdyBzb3VyY2VSYW5nZTooRE9NUmFuZ2UgKilzb3VyYwogICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBpZiAoIXNvdXJjZVJhbmdlKQogICAgICAgICByYWlz
ZVR5cGVFcnJvckV4Y2VwdGlvbigpOwotICAgIHJldHVybiByYWlzZU9uRE9NRXJyb3IoSU1QTC0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MoaG93LCAqY29yZShzb3VyY2VSYW5nZSkp
KTsKKyAgICByZXR1cm4gcmFpc2VPbkRPTUVycm9yKElNUEwtPmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhob3csICpjb3JlKHNvdXJjZVJhbmdlKSkpOwogfQogCiAtICh2b2lkKWRlbGV0ZUNvbnRlbnRz
CkBAIC0yNDQsNyArMjQ3LDcgQEAgLSAoQk9PTClpbnRlcnNlY3RzTm9kZTooRE9NTm9kZSAqKXJl
Zk5vZGUKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgaWYg
KCFyZWZOb2RlKQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigpOwotICAgIHJldHVy
biByYWlzZU9uRE9NRXJyb3IoSU1QTC0+aW50ZXJzZWN0c05vZGUoKmNvcmUocmVmTm9kZSkpKTsK
KyAgICByZXR1cm4gSU1QTC0+aW50ZXJzZWN0c05vZGUoKmNvcmUocmVmTm9kZSkpOwogfQogCiAt
IChzaG9ydCljb21wYXJlUG9pbnQ6KERPTU5vZGUgKilyZWZOb2RlIG9mZnNldDooaW50KW9mZnNl
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5z
aW9ucy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMu
bW0KaW5kZXggYWU1YzQ5YmYxNDc1OGYzMTQwOTQyMGQ5ZjZkNTVhMmU2MzYyNjFjOS4uNTg3MWQw
MDhhYWNmN2EyMmNiOGNkNmRjZmJhZjRmNGI0NzQ3YzM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCkBAIC01MSw3ICs1MSw3IEBA
CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxUZXh0QXJlYUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNv
cmUvSW1hZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW5saW5lQm94Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL05vZGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm9kZVRyYXZlcnNhbC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCbG9jay5oPgogI2ltcG9y
dCA8V2ViQ29yZS9SZW5kZXJCbG9ja0Zsb3cuaD4KQEAgLTEyNCw5ICsxMjQsMjEgQEAgLSAodm9p
ZClleHRlbmQ6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGly
ZWN0aW9uKWRpcmVjdGlvbgogICAgICAgICByYW5nZS5zZXRFbmQoKmVuZC5jb250YWluZXJOb2Rl
KCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiB9CiAKKy8vIEZJWE1FOiBDb3VsZCB1
c2UgU2ltcGxlUmFuZ2U6OmludGVyc2VjdGluZ05vZGVzIGluc3RlYWQsIGlmIHdlIGRpZCBub3Qg
d2FudCB0byBwcmVzZXJ2ZSB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvciBvZiByZXR1cm5pbmcgYSBu
b2RlIHdpdGggbm8gY2hpbGRyZW4gd2hlbiB0aGUgcmFuZ2Ugc3RhcnRzIGluc2lkZSBpdC4KK3N0
YXRpYyBXZWJDb3JlOjpOb2RlKiBmaXJzdE5vZGVBZnRlcihjb25zdCBXZWJDb3JlOjpCb3VuZGFy
eVBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAocG9pbnQuY29udGFpbmVyLT5pc0NoYXJhY3RlckRh
dGFOb2RlKCkpCisgICAgICAgIHJldHVybiBwb2ludC5jb250YWluZXIucHRyKCk7CisgICAgaWYg
KGF1dG8gY2hpbGQgPSBwb2ludC5jb250YWluZXItPnRyYXZlcnNlVG9DaGlsZEF0KHBvaW50Lm9m
ZnNldCkpCisgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICBpZiAoIXBvaW50Lm9mZnNldCkKKyAg
ICAgICAgcmV0dXJuIHBvaW50LmNvbnRhaW5lci5wdHIoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4ocG9pbnQuY29udGFpbmVyKTsKK30K
KwogLSAoRE9NTm9kZSAqKWZpcnN0Tm9kZQogewotICAgIHJldHVybiBraXQoY29yZShzZWxmKS0+
Zmlyc3ROb2RlKCkpOworICAgIHJldHVybiBraXQoZmlyc3ROb2RlQWZ0ZXIobWFrZVNpbXBsZVJh
bmdlKCpjb3JlKHNlbGYpKS5zdGFydCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbSBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCmluZGV4IGNhZDM1OTFiZTYzMzIzZWU2
N2FhNmFmOGQxM2U0NWZkNzE2MGRhYTguLjFkZDk5YTU0NmMyOTMyOTE0NGMzZDRhZDQ1Y2Y0MTcw
YTQ0NDEwN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01P
cGVyYXRpb25zLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVy
YXRpb25zLm1tCkBAIC0xOTEsOCArMTkxLDggQEAgLSAoV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmUK
IAogLSAoTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcKIHsKLSAgICBhdXRvJiByYW5nZSA9ICpjb3Jl
KHNlbGYpOwotICAgIHJldHVybiBTdHJpbmcgeyBkb2N1bWVudFR5cGVTdHJpbmcocmFuZ2Uub3du
ZXJEb2N1bWVudCgpKSArIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1ha2VT
aW1wbGVSYW5nZShyYW5nZSksIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6Olllcykg
fTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpjb3JlKHNlbGYpKTsKKyAgICBy
ZXR1cm4gU3RyaW5nIHsgZG9jdW1lbnRUeXBlU3RyaW5nKHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+
ZG9jdW1lbnQoKSkgKyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShyYW5nZSwg
bnVsbHB0ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVzKSB9OwogfQogCiBAZW5kCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407262</attachid>
            <date>2020-08-25 19:29:24 -0700</date>
            <delta_ts>2020-08-26 14:44:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215755-20200825192923.patch</filename>
            <type>text/plain</type>
            <size>154144</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWU0MzQ2NjM4YjY3OTY1
MTdlMDcxYzIxNjc3MThiZWQ5NWEzYjU2YS4uMTVkNGIzNjJjMTg1YmM5NDU5ODhkM2IxZTYzZDQ5
NDU2MjM5NGIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NyBAQAorMjAyMC0wOC0yMiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwg
dGhlIHJlbWFpbmluZyB1c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcik6IFVzZSBkb2N1
bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1Jh
bmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNsb3Nlc3RUb1Jhbmdl
KTogVXNlIGNoYXJhY3RlckNvdW50LiBBbHNvIHJlbW92ZWQgdW5ubmVjZXNzYXJ5IGFzc2VydGlv
bnMKKyAgICAgICAgYW5kIHNwZWNpYWwgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbiBjb25z
dCk6IFVzZSBkb2N1bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOiBVc2UgaW50
ZXJzZWN0cy4KKyAgICAgICAgQWxzbyB1c2UgZmlyc3RSYW5nZSBpbnN0ZWFkIG9mIHRvTm9ybWFs
aXplZFJhbmdlLgorCisgICAgICAgICogZG9tL05vZGUuaDogQWRkZWQgaXNfbmVxLCBpc19sdGVx
LCBhbmQgaXNfZ3RlcSBmb3IgdXNlIHdpdGggUGFydGlhbE9yZGVyaW5nLAorICAgICAgICBtYXRj
aGluZyB0aGUgbmFtZXMgYW5kIGJlaGF2aW9yIGZyb20gQysrMjAuCisKKyAgICAgICAgKiBkb20v
UmFuZ2UuY3BwOiBSZW1vdmVkIHVudXNlZCBDb29yZGluYXRlU3BhY2UuCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6UmFuZ2UpOiBVcGRhdGVkIHNpbmNlIFJhbmdlQm91bmRhcnlQb2ludCBub3cg
dXNlcyByZWZlcmVuY2VzLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnVwZGF0ZURvY3VtZW50
KTogUmVuYW1lZCBmcm9tIHNldERvY3VtZW50IGFuZCBjaGFuZ2VkIHNvIHRoYXQKKyAgICAgICAg
aXQgbWFpbnRhaW5zIHRoZSBpbnZhcmlhbnRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBjYWxsZXIg
cGFzcyBhbnkgYXJndW1lbnRzLgorICAgICAgICBBbHNvIHVwZGF0ZWQgZm9yIFJhbmdlQm91bmRh
cnlQb2ludCBhbm1lIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrRm9yRGlmZmVy
ZW50Um9vdENvbnRhaW5lcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0
U3RhcnQpOiBVcGRhdGVkIGZvciBjaGVja05vZGVPZmZzZXRQYWlyIG5hbWUgY2hhbmdlLgorICAg
ICAgICBSZW1vdmVkIHRvby1jb21wbGV4IGNvZGUgZm9yIG1vdmluZyBiZXR3ZWVuIGRvY3VtZW50
cy4gVXNlIGRvY3VtZW50T3JkZXIKKyAgICAgICAgaW5zdGVhZCBvZiBjaGVja0ZvckRpZmZlcmVu
dFJvb3RDb250YWluZXIgdG8gY2hlY2sgZm9yIHN0YXJ0L2VuZCB0aGF0IGhhdmUKKyAgICAgICAg
aW5jb3JyZWN0IG9yZGVyIG9yIG5vIGNvbW1vbiBhbmNlc3Rvci4gVXNlIHVwZGF0ZURvY3VtZW50
LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmFuZ2U6OmlzUG9pbnRJblJhbmdlKTogVXNlIGlzUG9pbnRJblJhbmdlIHRoYXQgdGFr
ZXMgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgQWxzbyB1cGRhdGVkIGZvciBjaGVja05vZGVPZmZz
ZXRQYWlyIG5hbWUgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2lu
dCBjb25zdCk6IFVzZSBkb2N1bWVudE9yZGVyLiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjpjb21wYXJlTm9kZSBjb25zdCk6IFVzZSBkb2N1bWVudE9yZGVyLgorICAgICAgICAoV2Vi
Q29yZTo6dG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjb21wYXJlQm91
bmRhcnlQb2ludHMgY29uc3QpOiBEZWxldGVkIG1vcmUgb3ZlcmxvYWRzLgorICAgICAgICBLZXB0
IG9ubHkgdGhlIG9uZSBuZWVkZWQgZm9yIGJpbmRpbmdzLCBhbmQgcmVuYW1lZCBpdCBmcm9tCisg
ICAgICAgIGNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzLiBBbHNvIGZpeGVkIHRoZSBp
bXBsZW1lbnRhdGluIHRvIGJlIHNpbXBsZXIsCisgICAgICAgIHVzZSBkb2N1bWVudE9yZGVyLCBh
bmQgbWF0Y2ggdGhlIERPTSBzcGVjaWZpY2F0aW9uIG1vcmUgY2xvc2VseSAod2l0aG91dCBhCisg
ICAgICAgIGJlaGF2aW9yIGNoYW5nZSkuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Ym91bmRh
cnlQb2ludHNWYWxpZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
aW50ZXJzZWN0c05vZGUgY29uc3QpOiBVc2UgaW50ZXJzZWN0cyBmcm9tIFNpbXBsZVJhbmdlLgor
ICAgICAgICBBbHNvIGRvbid0IHJhaXNlIGV4Y2VwdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjps
ZW5ndGhPZkNvbnRlbnRzSW5Ob2RlKTogRGVsZXRlZC4gVGhpcyBnaXZlcyB0aGUgc2FtZSByZXN1
bHQgYXMKKyAgICAgICAgTm9kZTo6bGVuZ3RoLCBidXQgbGVzcyBlZmZpY2llbnRseS4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjpwcm9jZXNzQ29udGVudHMpOiBVcGRhdGVkIHNpbmNlIFJhbmdl
Qm91bmRhcnlQb2ludCBub3cKKyAgICAgICAgdXNlcyByZWZlcmVuY2VzLgorICAgICAgICAoV2Vi
Q29yZTo6cHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMpOiBSZW1vdmVkIG9ic29sZXRlIGNv
bW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6dG9TdHJpbmcgY29uc3QpOiBVc2UgaW50
ZXJzZWN0aW5nTm9kZXMgYW5kCisgICAgICAgIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpkZXRhY2gpOiBNb3ZlZCB0byB0aGUgaGVhZGVyLgorICAgICAgICAoV2Vi
Q29yZTo6UmFuZ2U6OmNoZWNrTm9kZU9mZnNldFBhaXIgY29uc3QpOiBSbmVhbWVkIGZyb20gY2hl
Y2tOb2RlV09mZnNldC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjbG9uZVJhbmdlKTogVXNl
IG1fb3duZXJEb2N1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzZXRTdGFydEFmdGVy
KTogVHdlYWtlZCBjb2Rpbmcgc3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5k
QmVmb3JlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kQWZ0ZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzZWxlY3ROb2RlKTogRGl0dG8uIEFsc28g
cmVtb3ZlZCB1bm5lY2Vzc2FyeSBjb2RlIHRvCisgICAgICAgIGNhbGwgc2V0RG9jdW1lbnQsIHNp
bmNlIHNldFN0YXJ0IHRha2VzIGNhcmUgb2YgdGhhdC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjpzZWxlY3ROb2RlQ29udGVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpz
ZXRTdGFydEJlZm9yZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmZpcnN0Tm9k
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cGFzdExhc3ROb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjb250YWlucyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcmVSYW5nZXNFcXVhbCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpyYW5nZXNPdmVybGFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmJvdW5kYXJ5Tm9kZUNoaWxkcmVuQ2hhbmdlZCk6IFR3ZWFrZWQgY29kaW5nIHN0eWxl
IGFuZCB1cGRhdGVkCisgICAgICAgIHNpbmNlIFJhbmdlQm91bmRhcnlQb2ludCB1c2VzIGEgcmVm
ZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVDaGlsZHJlbkNoYW5nZWQpOiBV
c2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRy
ZW5XaWxsQmVSZW1vdmVkKTogUmVtb3ZlZCB1bm5lZWRlZCBjb2RlCisgICAgICAgIHRvIGhhbmRs
ZSBjYXNlIHdoZXJlIG9uZSBvZiB0aGUgY2hpbGRyZW4gaXMgdGhlIGNoaWxkQmVmb3JlIGJ1dCB0
aGUKKyAgICAgICAgbm9kZSBpcyBub3QgaW5zaWRlIHRoZSBjb250YWluZXIgLS0gdGhhdCBjYXNl
IGRvZXNuJ3QgZXhpc3QuIFVzZQorICAgICAgICBOb2RlOjpjb250YWlucy4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKTogVXNlIG1fb3duZXJEb2N1
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQpOiBTaW1w
bGlmeSBsb2dpYyB1c2luZworICAgICAgICBSYW5nZTo6Y29udGFpbnMuCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6bm9kZVdpbGxCZVJlbW92ZWQpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnBhcmVudGxlc3NOb2RlTW92ZWRUb05ld0RvY3VtZW50QWZm
ZWN0c1JhbmdlKToKKyAgICAgICAgVXBkYXRlZCBzaW5jZSBSYW5nZUJvdW5kYXJ5UG9pbnQgdXNl
cyBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dEluc2VydGVkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyeVRleHRSZW1vdmVkKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpib3VuZGFyeVRleHROb2Rlc01lcmdlZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Ym91bmRhcnlUZXh0Tm9kZXNTcGxpdCk6IERpdHRvLgorICAgICAgICAoc2hv
d1RyZWUpOiBSZW1vdmVkIGNhbGwgdG8gYm91bmRhcnlQb2ludHNWYWxpZC4gVGhhdCdzIGNoZWNr
aW5nIHNvbWV0aGluZworICAgICAgICB0aGUgY2xhc3MgYWxyZWFkeSB0cmVhdHMgYXMgYW4gaW52
YXJpYW50LCBzbyBpdCdzIG9ic29sZXRlIGNvZGUgbGVmdCBmcm9tCisgICAgICAgIGxvbmcgYWdv
IHdoZW4gd2UgZGlkbid0IGhhdmUgdGhhdCBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuCisKKyAgICAg
ICAgKiBkb20vUmFuZ2UuaDogUmVvcmdhbml6ZWQgdGhlIGhlYWRlciB0byBtYXRjaCB0aGUgSURM
IGZpbGUuCisgICAgICAgIFJlbW92ZWQgb3duZXJEb2N1bWVudCwgY29tcGFyZUJvdW5kYXJ5UG9p
bnRzIG92ZXJsb2FkcyBvdGhlciB0aGFuIHRoZSBvbmUKKyAgICAgICAgdXNlZCBmcm9tIGJpbmRp
bmdzLCBmaXJzdE5vZGUsIHBhc3RMYXN0Tm9kZSwgdGV4dCwgY29udGFpbnMsIGFyZVJhbmdlc0Vx
dWFsLAorICAgICAgICBhbmQgcmFuZ2VzT3ZlcmxhcC4gQWxzbyB1cGRhdGVkIHNpbmNlIFJhbmdl
Qm91bmRhcnlQb2ludDo6Y29udGFpbmVyIGlzIG5vdworICAgICAgICBhIHJlZmVyZW5jZS4gTW92
ZWQgZGV0YWNoIGZ1bmN0aW9uIGhlcmUgdG8gdGhlIGhlYWRlciBhcyBhbiBlbXB0eSBpbmxpbmUu
CisKKyAgICAgICAgKiBkb20vUmFuZ2UuaWRsOiBDaGFuZ2VkIHN0YXJ0L2VuZE9mZnNldCB0byB1
bnNpZ25lZC4gU3RvcHBlZCB1c2luZyB0aGUKKyAgICAgICAgbmFtZSBjb21wYXJlQm91bmRhcnlQ
b2ludGVyc0ZvckJpbmRpbmdzLiBVcGRhdGVkIGludGVyc2VjdHNOb2RlIHRvIG5vdAorICAgICAg
ICB0aHJvdyBleGNlcHRpb25zIGFzIGNhbGxlZCBmb3IgaW4gdGhlIERPTSBzcGVjaWZpY2F0aW9u
LiBUd2Vha2VkIGNvbW1lbnRzLgorCisgICAgICAgICogZG9tL1JhbmdlQm91bmRhcnlQb2ludC5o
OiBDaGFuZ2VkIGNvbnN0cnVjdG9yIGFyZ3VtZW50IHRvIGEgcmVmZXJlbmNlLgorICAgICAgICBS
ZW5hbWVkIHNldFRvQmVmb3JlQ2hpbGQsIHNldFRvQWZ0ZXJDaGlsZCwgc2V0VG9TdGFydE9mTm9k
ZSwgYW5kIHNldFRvRW5kT2ZOb2RlCisgICAgICAgIHRvIHNldFRvQmVmb3JlTm9kZSwgc2V0VG9B
ZnRlck5vZGUsIHNldFRvQmVmb3JlQ29udGVudHMsIHNldFRvQWZ0ZXJDb250ZW50cy4KKyAgICAg
ICAgTWVyZ2VkIGVuc3VyZU9mZnNldElzVmFsaWQgaW50byB0aGUgb2Zmc2V0IGZ1bmN0aW9uLiBD
aGFuZ2VkIG1fY29udGFpbmVyTm9kZQorICAgICAgICBpbnRvIGEgUmVmPD4gYW5kIHJlbmFtZWQg
aXQgbV9jb250YWluZXIuIFJlbW92ZWQgY2xlYXIuCisKKyAgICAgICAgKiBkb20vU2ltcGxlUmFu
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNQb2ludEluUmFuZ2UpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmRvY3VtZW50T3JkZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNv
bnRhaW5zKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjppbnRlcnNlY3RzKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjp1bmlvblJhbmdlcyk6IEFkZGVkLgorICAgICAgICAqIGRvbS9TaW1w
bGVSYW5nZS5oOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlUG9zaXRpb25zKTogVXNlIGRvY3VtZW50
T3JkZXIuCisgICAgICAgIChXZWJDb3JlOjppc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKTog
VXNlIGNvbnRhaW5zLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmlzRnJhbWVJblJhbmdlKTogVXNlIGludGVyc2VjdHMuCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKTogVXNlIGludGVyc2Vj
dHMuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dW5pb25SYW5nZXMpOiBNb3ZlZCB0byBTaW1wbGVSYW5nZS5jcHAsIHdoZXJlIGl0J3Mg
bm93CisgICAgICAgIGltcGxlbWVudGVkIHVzaW5nIGRvY3VtZW50T3JkZXIuCisKKyAgICAgICAg
KiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpyZXNwb25kVG9Ob2RlTW9kaWZpY2F0aW9uKTogVXNlIGludGVyc2VjdHMuCisKKyAg
ICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tOgorICAgICAgICAo
V2ViQ29yZTo6c2VsZWN0aW9uQ29udGFpbnNQb3NpdGlvbik6IFVzZSBpc1BvaW50SW5SYW5nZS4K
KworICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6ZXh0ZW5kKTogVXNlIG1ha2VSZWZQdHIgYW5kIE5vZGU6Omxlbmd0aAorICAg
ICAgICB0byBzdHJlYW1saW5lIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkRPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdCk6IFVzZSBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5v
ZGUKKyAgICAgICAgYW5kIHJlbW92ZSB1bm5lZWRlZCBudWxsIGNoZWNrIHRoYXQncyBhbHJlYWR5
IGNvdmVyZWQgYWJvdmUuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmFkZFJhbmdl
KTogVXNlIGludGVyc2VjdHMgYW5kIHVuaW9uUmFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6RE9N
U2VsZWN0aW9uOjpjb250YWluc05vZGUgY29uc3QpOiBVc2UgaW50ZXJzZWN0cyBhbmQgY29udGFp
bnMuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmlzVmFsaWRGb3JQb3NpdGlvbiBj
b25zdCk6IFVzZSBib29sZWFuIGxvZ2ljLgorCisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVu
dCBjb25zdCk6IFVzZSBjb250YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVy
OjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KTogVXNlIGludGVyc2VjdHMu
CisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudCk6IFVzZSBjb250YWlucy4KKworICAgICAg
ICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpmaW5kVGV4dE1hdGNo
ZXMpOiBVc2UgZG9jdW1lbnRPcmRlci4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpmaW5kVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhp
Z2hsaWdodCk6CisgICAgICAgIFVzZSBjb250YWlucy4KKworICAgICAgICAqIHRlc3RpbmcvSW50
ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cmFuZ2VBc1RleHQpOiBV
c2UgcGxhaW5UZXh0LgorICAgICAgICAoV2ViQ29yZTo6am9pbik6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpyYW5nZUFzVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9y
KTogVXNlIGEgdmVjdG9yCisgICAgICAgIHRoYXQgd2UgcmV2ZXJzZSBhbmQgam9pbiByYXRoZXIg
dGhhbiBpbnNlcnRpbmcgYXQgdGhlIHN0YXJ0IG9mIGEgc3RyaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpzdWJyYW5nZSk6IEFkZGVkIGEgY2FsbCB0byB1cGRhdGVMYXlvdXQgc2lu
Y2UgdGV4dCBpdGVyYXRvcgorICAgICAgICBmdW5jdGlvbnMgZGVwZW5kIG9uIHRoZSBzdGF0ZSBv
ZiB0aGUgcmVuZGVyIHRyZWUuIFJlYWxpemVkIHRoaXMgd2FzIHRoZW9yZXRpY2FsbHkKKyAgICAg
ICAgbmVlZGVkIGJlY2F1c2Ugb2YgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dC4KKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6cmFuZ2VPZlN0cmluZ05lYXJMb2NhdGlvbik6IERpdHRvLgorCiAy
MDIwLTA4LTI1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xG
Q11bSUZDXSBEbyBub3QgbW92ZSB0aGUgcnVucyBvdXQgb2YgdGhlIExpbmVCdWlsZGVyIHdoaWxl
IGNsb3NpbmcgdGhlIGxpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOGFiMjQ0MDExMzI4OTVjZGI0NWViY2QxNTRh
YmYzNWEzMzUyYjIyMy4uNTZhMGI3Y2Q2MjRmNTlhOGYxNmQ2NGVmNGFlMzgyNjYyNjkwODJiNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAyMC0wOC0yMiAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwgdGhlIHJlbWFpbmluZyB1
c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdl
Lm1tOgorICAgICAgICAoLVtXS0RPTVJhbmdlIGluaXRXaXRoRG9jdW1lbnQ6XSk6IFRpZ2h0ZW5l
ZCB1cCBpbnRvIGEgb25lLWxpbmVyLgorICAgICAgICAoLVtXS0RPTVJhbmdlIHRleHRdKTogVXNl
IHBsYWluVGV4dC4KKyAgICAgICAgKC1bV0tET01SYW5nZSB0ZXh0UmVjdHNdKTogU3RvcHBlZCB1
c2luZyBSYW5nZTo6b3duZXJEb2N1bWVudC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpkb2N1bWVudCk6IFN0b3BwZWQgdXNpbmcK
KyAgICAgICAgUmFuZ2U6Om93bmVyRG9jdW1lbnQuCisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGU6OmJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXMgY29uc3Qp
OgorICAgICAgICBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZTo6cmVuZGVyZWRJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlOjp0ZXh0IGNvbnN0KTogVXNlIHBsYWluVGV4dC4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQpOiBVc2UgaW50ZXJzZWN0cy4K
KwogMjAyMC0wOC0yNSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBXZWIgU2hhcmUgQVBJIGNhbiBzaGFyZSBub24tSFRUUChTKSBVUkxzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggMjczNmQ3ZjljMjM1MjI0NDhlYWNjNTU4MWFjY2RjYzNm
YjJmNzUwNy4uZGFlYTA1NzUyZmQ2ODUxYzYzZDM2ZTBmMDFmM2Q2ZDk3ZmFhMGVlYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTA4LTIyICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxtb3N0IGFsbCB0
aGUgcmVtYWluaW5nIHVzZXMgb2YgbGl2ZSByYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTc1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTVJhbmdlLm1tOgorICAgICAgICAoLVtE
T01SYW5nZSB0ZXh0XSk6IFVzZSBwbGFpblRleHQuCisgICAgICAgICgtW0RPTVJhbmdlIGNvbXBh
cmVCb3VuZGFyeVBvaW50czpzb3VyY2VSYW5nZTpdKTogVXBkYXRlIGZvciByZW5hbWUgb2YKKyAg
ICAgICAgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MuCisgICAgICAgICgtW0RPTVJh
bmdlIGludGVyc2VjdHNOb2RlOl0pOiBSZW1vdmVkIHJhaXNlT25ET01FcnJvci4KKworICAgICAg
ICAqIERPTS9ET01VSUtpdEV4dGVuc2lvbnMubW06CisgICAgICAgIChmaXJzdE5vZGVBZnRlcik6
IE1vdmVkIFJhbmdlOjpmaXJzdE5vZGUgaGVyZSBzaW5jZSBpdCdzIHRoZSBvbmx5IHJlbWFpbmlu
ZyBjYWxsZXI7CisgICAgICAgIG1pZ2h0IG5lZWQgdG8ga2VlcCBsZWdhY3kgYmVoYXZpb3IgZGVw
ZW5kaW5nIG9uIGhvdyB0aGlzIGlzIHVzZWQgYnkgVUlLaXQuCisgICAgICAgICgtW0RPTVJhbmdl
IGZpcnN0Tm9kZV0pOiBDYWxsIGZpcnN0Tm9kZUFmdGVyLgorCisgICAgICAgICogRE9NL1dlYkRP
TU9wZXJhdGlvbnMubW06CisgICAgICAgICgtW0RPTVJhbmdlIG1hcmt1cFN0cmluZ10pOiBTdG9w
IHVzaW5nIFJhbmdlOjpvd25lckRvY3VtZW50LgorCiAyMDIwLTA4LTI1ICBNZWdhbiBHYXJkbmVy
ICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5aW5nIHRvIGxvb2t1cCB3
aGVuIFdlYlZpZXcgaXMgaW4gYSBwb3BvdmVyIGNhdXNlcyBwcm9jZXNzIHRvIGhhbmcuIEZpeCBm
b3IgTGVnYWN5IFdlYlZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAppbmRleCA2MzhiYWYwYmM3OTg0ZDk3OTliMjgyY2JiYWU4Y2ExNzYxMzZm
Y2NmLi4xZTEwNTlkZTFlMjAxNWM1MzQwZDIzMTViYmE1NjA0OWIzMDEwN2Q0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTIwMzYsNiAr
MjAzNiw4IEBAIHN0YXRpYyBib29sIGlzUmVwbGFjZWROb2RlT3JCUihOb2RlKiBub2RlKQogCiBz
dGF0aWMgYm9vbCBjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcihjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
IGNoYXJhY3Rlck9mZnNldDEsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0
MikKIHsKKyAgICAvLyBGSVhNRTogU2hvdWxkIGp1c3QgYmUgYWJsZSB0byBjYWxsIGRvY3VtZW50
T3JkZXIgd2l0aG91dCBhY2Nlc3NpYmlsaXR5LXNwZWNpZmljIGxvZ2ljLiBOb3QgY2xlYXIgd2h5
IHdlIG5lZWQgQ2hhcmFjdGVyT2Zmc2V0IGluc3RlYWQgb2YgUG9zaXRpb24gb3IgQm91bmRhcnlQ
b2ludC4KKwogICAgIGlmIChjaGFyYWN0ZXJPZmZzZXQxLmlzTnVsbCgpIHx8IGNoYXJhY3Rlck9m
ZnNldDIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTIwNDgsMTYg
KzIwNTAsMTIgQEAgc3RhdGljIGJvb2wgY2hhcmFjdGVyT2Zmc2V0c0luT3JkZXIoY29uc3QgQ2hh
cmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb24KICAgICAgICAgbm9kZTEgPSBub2Rl
MS0+dHJhdmVyc2VUb0NoaWxkQXQoY2hhcmFjdGVyT2Zmc2V0MS5vZmZzZXQpOwogICAgIGlmICgh
bm9kZTItPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSAmJiAhaXNSZXBsYWNlZE5vZGVPckJSKG5vZGUy
KSAmJiBub2RlMi0+aGFzQ2hpbGROb2RlcygpKQogICAgICAgICBub2RlMiA9IG5vZGUyLT50cmF2
ZXJzZVRvQ2hpbGRBdChjaGFyYWN0ZXJPZmZzZXQyLm9mZnNldCk7Ci0gICAgCiAgICAgaWYgKCFu
b2RlMSB8fCAhbm9kZTIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBhdXRvIHJh
bmdlMSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKCpub2RlMSk7CiAgICAg
YXV0byByYW5nZTIgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50cygqbm9kZTIp
OwotICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlMSktPmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZTIp
KTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDA7CisgICAgcmV0dXJu
IGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihyYW5nZTEuc3RhcnQsIHJhbmdlMi5zdGFydCkpOwogfQog
CiBzdGF0aWMgTm9kZSogcmVzZXROb2RlQW5kT2Zmc2V0Rm9yUmVwbGFjZWROb2RlKE5vZGUmIHJl
cGxhY2VkTm9kZSwgaW50JiBvZmZzZXQsIGludCBjaGFyYWN0ZXJDb3VudCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4
IGNhNWYyMjEzMDZjNTk3YWZkMWZiZTEzNzJhOWRjYTY0M2M1ODg0ZDguLjAyYTZhNGVkZWEwNTZi
NmE1ZTY5NWM4ZjVjMDI1MGI1YjAxMTI1ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMjk3LDI2ICsyOTcsMTcg
QEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1pc3NwZWxsaW5n
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHMKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiBtaXNzcGVsbGluZ3M7CiAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyLCBz
dHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgbWlzc3BlbGxpbmdzLCBm
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogCi0gICAgLy8gVGhlIHJldHVybmVkIG1p
c3NwZWxsaW5ncyBhcmUgYXNzdW1lZCB0byBiZSBvcmRlcmVkIGluIHRoZSBkb2N1bWVudAotICAg
IC8vIGxvZ2ljYWwgb3JkZXIsIHdoaWNoIHNob3VsZCBiZSBtYXRjaGVkIGJ5IFJhbmdlOjpjb21w
YXJlQm91bmRhcnlQb2ludHMuCi0gICAgLy8gU28gaXRlcmF0ZSBmb3J3YXJkIG9yIGJhY2t3YXJk
cyBkZXBlbmRpbmcgb24gdGhlIGRlc2lyZWQgc2VhcmNoCi0gICAgLy8gZGlyZWN0aW9uIHRvIGZp
bmQgdGhlIGNsb3Nlc3QgbWlzc3BlbGxpbmcgaW4gdGhhdCBkaXJlY3Rpb24uCisgICAgLy8gRmlu
ZCB0aGUgZmlyc3QgbWlzc3BlbGxpbmcgcGFzdCB0aGUgc3RhcnQuCiAgICAgaWYgKGRpcmVjdGlv
biA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpOZXh0KSB7Ci0gICAgICAgIGZvciAo
Y29uc3QgYXV0byYgbWlzc3BlbGxpbmcgOiBtaXNzcGVsbGluZ3MpIHsKKyAgICAgICAgZm9yIChh
dXRvJiBtaXNzcGVsbGluZyA6IG1pc3NwZWxsaW5ncykgewogICAgICAgICAgICAgYXV0byBtaXNz
cGVsbGluZ1JhbmdlID0gZWRpdG9yLnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KG1pc3NwZWxs
aW5nKTsKLSAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxp
bmdSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgY3JlYXRl
TGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKQorICAgICAgICAgICAg
aWYgKG1pc3NwZWxsaW5nUmFuZ2UgJiYgaXNfZ3QoZG9jdW1lbnRPcmRlcihtaXNzcGVsbGluZ1Jh
bmdlLT5lbmQsIHN0YXJ0LmVuZCkpKQogICAgICAgICAgICAgICAgIHJldHVybiAqbWlzc3BlbGxp
bmdSYW5nZTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IEFjY2Vzc2li
aWxpdHlTZWFyY2hEaXJlY3Rpb246OlByZXZpb3VzKSB7Ci0gICAgICAgIGZvciAoYXV0byByaXQg
PSBtaXNzcGVsbGluZ3MucmJlZ2luKCk7IHJpdCAhPSBtaXNzcGVsbGluZ3MucmVuZCgpOyArK3Jp
dCkgewotICAgICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gZWRpdG9yLnJhbmdlRm9y
VGV4dENoZWNraW5nUmVzdWx0KCpyaXQpOwotICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ1Jh
bmdlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoY3JlYXRl
TGl2ZVJhbmdlKCptaXNzcGVsbGluZ1JhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVyblZh
bHVlKCkgPCAwKQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoYXV0byYgbWlzc3BlbGxpbmcg
OiBtYWtlUmV2ZXJzZWRSYW5nZShtaXNzcGVsbGluZ3MpKSB7CisgICAgICAgICAgICBhdXRvIG1p
c3NwZWxsaW5nUmFuZ2UgPSBlZGl0b3IucmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQobWlzc3Bl
bGxpbmcpOworICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UgJiYgaXNfbHQoZG9jdW1l
bnRPcmRlcihtaXNzcGVsbGluZ1JhbmdlLT5zdGFydCwgc3RhcnQuc3RhcnQpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gKm1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9CkBAIC01
NjUsMjggKzU1NiwxMyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRNYXRjaGluZ09i
amVjdHMoQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiBjcml0ZQogLy8gcmFuZ2UgaXMgZXhw
ZWN0ZWQgdG8gQUNUVUFMTFkgYmUgYmVmb3JlLiBUaGVzZSBhcmUgbm90IGNoZWNrZWQgZm9yIHBl
cmZvcm1hbmNlIHJlYXNvbnMuCiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQ2xv
c2VzdFRvUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJlZmVyZW5jZVJhbmdlLCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4mJiBhZnRlclJhbmdlLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mJiBiZWZvcmVS
YW5nZSkKIHsKLSAgICAvLyBUaGUgdHJlZVNjb3BlIGZvciBzaGFkb3cgbm9kZXMgbWF5IG5vdCBi
ZSB0aGUgc2FtZSBzY29wZSBhcyBhbm90aGVyIGVsZW1lbnQgaW4gYSBkb2N1bWVudC4KLSAgICAv
LyBDb21wYXJpc29ucyBtYXkgZmFpbCBpbiB0aGF0IGNhc2UsIHdoaWNoIGFyZSBleHBlY3RlZCBi
ZWhhdmlvciBhbmQgc2hvdWxkIG5vdCBhc3NlcnQuCi0KLSAgICBpZiAoYWZ0ZXJSYW5nZSAmJiAo
YWZ0ZXJSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyZWZl
cmVuY2VSYW5nZS5lbmQuY29udGFpbmVyKSAmIE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NP
Tk5FQ1RFRCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgQVNTRVJUKCFhZnRl
clJhbmdlIHx8IGNyZWF0ZUxpdmVSYW5nZShhZnRlclJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHJlZmVyZW5jZVJhbmdl
KSkucmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMCk7Ci0KLSAgICBpZiAoYmVmb3JlUmFuZ2UgJiYg
KGJlZm9yZVJhbmdlLT5lbmQuY29udGFpbmVyLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyZWZl
cmVuY2VSYW5nZS5zdGFydC5jb250YWluZXIpICYgTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRElT
Q09OTkVDVEVEKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBBU1NFUlQoIWJl
Zm9yZVJhbmdlIHx8IGNyZWF0ZUxpdmVSYW5nZShiZWZvcmVSYW5nZSktPmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShyZWZlcmVuY2VS
YW5nZSkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDApOwotCi0gICAgaWYgKCFhZnRlclJhbmdl
ICYmICFiZWZvcmVSYW5nZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAo
IWJlZm9yZVJhbmdlKQogICAgICAgICByZXR1cm4gV1RGTW92ZShhZnRlclJhbmdlKTsKICAgICBp
ZiAoIWFmdGVyUmFuZ2UpCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGJlZm9yZVJhbmdlKTsKLQot
ICAgIGF1dG8gcG9zaXRpb25zVG9BZnRlclJhbmdlID0gUG9zaXRpb246OnBvc2l0aW9uQ291bnRC
ZXR3ZWVuUG9zaXRpb25zKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihhZnRlclJhbmdlLT5z
dGFydCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZWZlcmVuY2VSYW5nZS5lbmQpKTsK
LSAgICBhdXRvIHBvc2l0aW9uc1RvQmVmb3JlUmFuZ2UgPSBQb3NpdGlvbjo6cG9zaXRpb25Db3Vu
dEJldHdlZW5Qb3NpdGlvbnMoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGJlZm9yZVJhbmdl
LT5lbmQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmVmZXJlbmNlUmFuZ2Uuc3RhcnQp
KTsKLQotICAgIHJldHVybiBXVEZNb3ZlKHBvc2l0aW9uc1RvQWZ0ZXJSYW5nZSA8IHBvc2l0aW9u
c1RvQmVmb3JlUmFuZ2UgPyBhZnRlclJhbmdlIDogYmVmb3JlUmFuZ2UpOworICAgIGF1dG8gZGlz
dGFuY2VCZWZvcmUgPSBjaGFyYWN0ZXJDb3VudCh7IGJlZm9yZVJhbmdlLT5lbmQsIHJlZmVyZW5j
ZVJhbmdlLnN0YXJ0IH0pOworICAgIGF1dG8gZGlzdGFuY2VBZnRlciA9IGNoYXJhY3RlckNvdW50
KHsgYWZ0ZXJSYW5nZS0+c3RhcnQsIHJlZmVyZW5jZVJhbmdlLmVuZCB9KTsKKyAgICByZXR1cm4g
V1RGTW92ZShkaXN0YW5jZUJlZm9yZSA8PSBkaXN0YW5jZUFmdGVyID8gYmVmb3JlUmFuZ2UgOiBh
ZnRlclJhbmdlKTsKIH0KIAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKGNvbnN0IFNpbXBsZVJh
bmdlJiByZWZlcmVuY2VSYW5nZSwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiBzZWFyY2hE
aXJlY3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hTdHJpbmdzKSBjb25zdApAQCAt
NjAzLDIzICs1NzksMTYgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW8KICAgICBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gY2xvc2VzdFN0cmluZ1JhbmdlOwogICAgIGZvciAoYXV0byYgc2VhcmNoU3Ry
aW5nIDogc2VhcmNoU3RyaW5ncykgewogICAgICAgICBpZiAoYXV0byBmb3VuZFN0cmluZ1Jhbmdl
ID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcoc2VhcmNoU3RyaW5nLCByZWZlcmVuY2VS
YW5nZSwgZmluZE9wdGlvbnMpKSB7CisgICAgICAgICAgICBib29sIGZvdW5kU3RyaW5nSXNDbG9z
ZXI7CiAgICAgICAgICAgICBpZiAoIWNsb3Nlc3RTdHJpbmdSYW5nZSkKLSAgICAgICAgICAgICAg
ICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAqZm91bmRTdHJpbmdSYW5nZTsKKyAgICAgICAgICAgICAg
ICBmb3VuZFN0cmluZ0lzQ2xvc2VyID0gdHJ1ZTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIC8vIElmIHNlYXJjaGluZyBiYWNrd2FyZCwgdXNlIHRoZSB0cmFpbGluZyByYW5n
ZSBlZGdlcyB0byBjb3JyZWN0bHkgZGV0ZXJtaW5lIHdoaWNoCi0gICAgICAgICAgICAgICAgLy8g
cmFuZ2UgaXMgY2xvc2VzdC4gU2ltaWxhcmx5LCBpZiBzZWFyY2hpbmcgZm9yd2FyZCwgdXNlIHRo
ZSBsZWFkaW5nIHJhbmdlIGVkZ2VzLgotICAgICAgICAgICAgICAgIGF1dG8mIGNsb3Nlc3RTdHJp
bmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBjbG9zZXN0U3RyaW5nUmFuZ2UtPmVuZCA6
IGNsb3Nlc3RTdHJpbmdSYW5nZS0+c3RhcnQ7Ci0gICAgICAgICAgICAgICAgYXV0byYgZm91bmRT
dHJpbmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBmb3VuZFN0cmluZ1JhbmdlLT5lbmQg
OiBmb3VuZFN0cmluZ1JhbmdlLT5zdGFydDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBhdXRvIGNsb3Nlc3RQb3NpdGlvbk9mZnNldCA9IGNsb3Nlc3RTdHJpbmdQb3NpdGlvbi5v
ZmZzZXQ7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWFyY2hQb3NpdGlvbk9mZnNldCA9IGZvdW5k
U3RyaW5nUG9zaXRpb24ub2Zmc2V0OwotICAgICAgICAgICAgICAgIGF1dG8gY2xvc2VzdENvbnRh
aW5lck5vZGUgPSBjbG9zZXN0U3RyaW5nUG9zaXRpb24uY29udGFpbmVyLnB0cigpOwotICAgICAg
ICAgICAgICAgIGF1dG8gc2VhcmNoQ29udGFpbmVyTm9kZSA9IGZvdW5kU3RyaW5nUG9zaXRpb24u
Y29udGFpbmVyLnB0cigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhjbG9zZXN0Q29udGFpbmVyTm9k
ZSwgY2xvc2VzdFBvc2l0aW9uT2Zmc2V0LCBzZWFyY2hDb250YWluZXJOb2RlLCBzZWFyY2hQb3Np
dGlvbk9mZnNldCkucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCgh
aXNCYWNrd2FyZFNlYXJjaCAmJiByZXN1bHQgPiAwKSB8fCAoaXNCYWNrd2FyZFNlYXJjaCAmJiBy
ZXN1bHQgPCAwKSkKLSAgICAgICAgICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1JhbmdlID0gKmZv
dW5kU3RyaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAgZm91bmRTdHJpbmdJc0Nsb3NlciA9IGlz
QmFja3dhcmRTZWFyY2gKKyAgICAgICAgICAgICAgICAgICAgPyBpc19ndChkb2N1bWVudE9yZGVy
KGZvdW5kU3RyaW5nUmFuZ2UtPmVuZCwgY2xvc2VzdFN0cmluZ1JhbmdlLT5lbmQpKQorICAgICAg
ICAgICAgICAgICAgICA6IGlzX2x0KGRvY3VtZW50T3JkZXIoZm91bmRTdHJpbmdSYW5nZS0+c3Rh
cnQsIGNsb3Nlc3RTdHJpbmdSYW5nZS0+c3RhcnQpKTsKICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChmb3VuZFN0cmluZ0lzQ2xvc2VyKQorICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJp
bmdSYW5nZSA9ICpmb3VuZFN0cmluZ1JhbmdlOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVy
biBjbG9zZXN0U3RyaW5nUmFuZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA3OWI4Y2E0YTEw
YTQzNWRiMzE4ZjkwNmY0MDcxY2Q1YjA0NDE2Njk4Li4yYWMxMzQyZGFjMzQ0NDQ3ZWQ1MTMyMTg5
ZTA4ZWYzNTk1MjNmZTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTkxNSw3ICs5MTUsNyBA
QCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsaW5rQ2xpY2tQb2ludCgpCiAg
ICAgaWYgKGF1dG8gcmFuZ2UgPSBlbGVtZW50UmFuZ2UoKSkgewogICAgICAgICBhdXRvIHN0YXJ0
ID0gVmlzaWJsZVBvc2l0aW9uIHsgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5z
dGFydCkgfTsKICAgICAgICAgYXV0byBlbmQgPSBuZXh0VmlzaWJsZVBvc2l0aW9uKHN0YXJ0KTsK
LSAgICAgICAgaWYgKCFlbmQuaXNOdWxsKCkgJiYgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+Y29u
dGFpbnMoZW5kKSkKKyAgICAgICAgaWYgKGlzUG9pbnRJblJhbmdlKCpyYW5nZSwgbWFrZUJvdW5k
YXJ5UG9pbnQoZW5kKSkpCiAgICAgICAgICAgICByZXR1cm4geyBib3VuZHNGb3JSYW5nZSgqbWFr
ZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpKS5jZW50ZXIoKSB9OwogICAgIH0KICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCgpOwpAQCAtMTU2MSwxNyArMTU2MSw5IEBA
IFBsYWluVGV4dFJhbmdlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvY3VtZW50QmFzZWRT
ZWxlY3RlZFRleHRSYW5nZSgpIGNvbnN0CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4g
UGxhaW5UZXh0UmFuZ2UoKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlv
biA9IHNlbGVjdGlvbigpOwotICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSB2aXNpYmxlU2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkKLSAgICAg
ICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7Ci0KLSAgICAvLyBGSVhNRTogVGhlIHJlYXNvbiB0
aGlzIGRvZXMgdGhlIGNvcnJlY3QgdGhpbmcgd2hlbiB0aGUgc2VsZWN0aW9uIGlzIGluIHRoZQot
ICAgIC8vIHNoYWRvdyB0cmVlIG9mIGFuIGlucHV0IGVsZW1lbnQgaXMgdGhhdCB3ZSBnZXQgYW4g
ZXhjZXB0aW9uIGJlbG93LCBhbmQgd2UKLSAgICAvLyBjaG9vc2UgdG8gaW50ZXJwcmV0IGFsbCBl
eGNlcHRpb25zIGFzICJkb2VzIG5vdCBpbnRlcnNlY3QiLiBTZWVtcyBsaWtlbHkKLSAgICAvLyB0
aGF0IGRvZXMgbm90IGhhbmRsZSBhbGwgY2FzZXMgY29ycmVjdGx5LgotICAgIGF1dG8gaW50ZXJz
ZWN0c1Jlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpLT5pbnRlcnNlY3Rz
Tm9kZSgqbm9kZSk7Ci0gICAgaWYgKCFpbnRlcnNlY3RzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYm
ICFpbnRlcnNlY3RzUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKQorICAgIGF1dG8gdmlzaWJs
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpOworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSB2aXNp
YmxlU2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGlvblJhbmdlIHx8ICFp
bnRlcnNlY3RzKCpzZWxlY3Rpb25SYW5nZSwgKm5vZGUpKQogICAgICAgICByZXR1cm4gUGxhaW5U
ZXh0UmFuZ2UoKTsKIAogICAgIGludCBzdGFydCA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHZp
c2libGVTZWxlY3Rpb24uc3RhcnQoKSk7CkBAIC0xNjU2LDEwICsxNjQ4LDEwIEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxhaW5U
ZXh0UmFuZ2UmIHJhbmdlCiAgICAgICAgIGF1dG8mIG5vZGUgPSAqdGhpcy0+bm9kZSgpOwogICAg
ICAgICBhdXRvIGVsZW1lbnRSYW5nZSA9IHRoaXMtPmVsZW1lbnRSYW5nZSgpOwogICAgICAgICBh
dXRvIHN0YXJ0ID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9y
KG5vZGUsIHJhbmdlLnN0YXJ0KTsKLSAgICAgICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2UoZWxlbWVu
dFJhbmdlKS0+Y29udGFpbnMoc3RhcnQpKQorICAgICAgICBpZiAoIWlzUG9pbnRJblJhbmdlKCpl
bGVtZW50UmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSkpCiAgICAgICAgICAgICBzdGFy
dCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAg
ICAgICAgYXV0byBlbmQgPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRl
cmF0b3Iobm9kZSwgcmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOwotICAgICAgICBpZiAoIWNy
ZWF0ZUxpdmVSYW5nZShlbGVtZW50UmFuZ2UpLT5jb250YWlucyhlbmQpKQorICAgICAgICBpZiAo
IWlzUG9pbnRJblJhbmdlKCplbGVtZW50UmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGVuZCkpKQog
ICAgICAgICAgICAgZW5kID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnRSYW5n
ZS0+c3RhcnQpOwogICAgICAgICBtX3JlbmRlcmVyLT5mcmFtZSgpLnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0LCBlbmQpLCBGcmFtZVNlbGVjdGlvbjo6ZGVm
YXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwogICAgIH0KQEAgLTIyMTYs
NyArMjIwOCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRW
aXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zCiAKICAgICAgICAgYXV0byBzdGFy
dCA9IHJhbmdlLnN0YXJ0OwogICAgICAgICBpZiAoYXV0byBlbGVtZW50UmFuZ2UgPSB0aGlzLT5l
bGVtZW50UmFuZ2UoKSkgewotICAgICAgICAgICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2UoZWxlbWVu
dFJhbmdlKS0+Y29udGFpbnMoc3RhcnQpKQorICAgICAgICAgICAgaWYgKCFpc1BvaW50SW5SYW5n
ZSgqZWxlbWVudFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChzdGFydCkpKQogICAgICAgICAgICAg
ICAgIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnRSYW5nZS0+c3Rh
cnQpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAppbmRleCA4ZDYyMWJlNzgxZTk5MGMx
ZGM0MDYwZmVkZmIzOTJiNzE2NTc1NGE5Li44ZjQzZjM4NWMzM2EyNDM3NTlmMTJjZjc0ZDYyOTFm
ZWRlOTNlMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9X
ZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCkBAIC0xNTUsMjUgKzE1NSw4IEBAIGJvb2wg
c2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3Qs
IFZpc2libGVTZWxlY3Rpb24mCiAgICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5p
c0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghcmFu
Z2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIHdhbnQgdG8gY2hlY2sgdGhh
dCBib3RoIHRoZSBzZWxlY3Rpb24gaW50ZXJzZWN0cyB0aGUgbm9kZQotICAgIC8vIEFORCB0aGF0
IHRoZSBzZWxlY3Rpb24gaXMgbm90IGp1c3QgInRvdWNoaW5nIiBvbmUgb2YgdGhlCi0gICAgLy8g
Ym91bmRhcmllcyBmb3IgdGhlIHNlbGVjdGVkIG5vZGUuIFdlIHdhbnQgdG8gY2hlY2sgd2hldGhl
ciB0aGUKLSAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFz
dCBwYXJ0aWFsbHkuCi0gICAgYXV0byYgbm9kZSA9ICpjb3JlT2JqZWN0LT5ub2RlKCk7Ci0gICAg
YXV0byogbGFzdERlc2NlbmRhbnQgPSBub2RlLmxhc3REZXNjZW5kYW50KCk7Ci0gICAgdW5zaWdu
ZWQgbGFzdE9mZnNldCA9IGxhc3REZXNjZW5kYW50LT5sZW5ndGgoKTsKLSAgICBhdXRvIGludGVy
c2VjdHNSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+aW50ZXJzZWN0c05vZGUobm9k
ZSk7Ci0gICAgcmV0dXJuICFpbnRlcnNlY3RzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpCi0gICAgICAg
ICYmIGludGVyc2VjdHNSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkKLSAgICAgICAgJiYgKHJh
bmdlLT5lbmQuY29udGFpbmVyLnB0cigpICE9ICZub2RlIHx8IHJhbmdlLT5lbmQub2Zmc2V0KQot
ICAgICAgICAmJiAocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSAhPSBsYXN0RGVzY2VuZGFu
dCB8fCByYW5nZS0+c3RhcnQub2Zmc2V0ICE9IGxhc3RPZmZzZXQpOworICAgIGF1dG8gcmFuZ2Ug
PSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpOworICAgIHJldHVybiByYW5nZSAmJiBpbnRlcnNlY3Rz
KCpyYW5nZSwgKmNvcmVPYmplY3QtPm5vZGUoKSk7CiB9CiAKIEFYQ29yZU9iamVjdCogb2JqZWN0
Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKEFYQ29yZU9iamVjdCogcmVmZXJlbmNlT2Jq
ZWN0LCBpbnQmIG9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggZjBjOGEzNGVmMzNlYmMw
NmRkNTcyOTYyMDg1MGZhMTE5NWNiNzUwMi4uNWFiYzI0ZWJiOTgxZTU2NGYwN2FkZWI4ZTVmYzEx
NTgxMzFjNTM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTkwNSw3ICs5MDUsNyBAQCBwdWJs
aWM6CiAKICAgICAvLyBSZXR1cm5zIHRoZSBvd25pbmcgZWxlbWVudCBpbiB0aGUgcGFyZW50IGRv
Y3VtZW50LgogICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aGlzIGlzIHRoZSB0b3AgbGV2ZWwg
ZG9jdW1lbnQuCi0gICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVu
dCgpIGNvbnN0OwogCiAgICAgLy8gVXNlZCBieSBET00gYmluZGluZ3M7IG5vIGRpcmVjdGlvbiBr
bm93bi4KICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZS5z
dHJpbmc7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5jcHAKaW5kZXggMGY3Zjk5MGUzZWQ5YTc1YzYzMTEyNDBhZWQ1NTdhODE3MDUxY2VlNC4uOGFl
MWQ4ZDU1YjhmZTcwZWVlMzk1N2QzZGRlZDc1MzhjZDEzYmYzNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKQEAgLTY0OSw3ICs2NDksNyBA
QCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vy
c0ludGVyc2VjdGluZ1JhbmdlKGNvbnN0CiAKIHZvaWQgYWRkTWFya2VyKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgY29uc3QgRG9jdW1l
bnRNYXJrZXI6OkRhdGEmIGRhdGEpCiB7Ci0gICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmFuZ2UsIHR5cGUsIGRhdGEpOworICAgIHJhbmdl
LnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihyYW5nZSwgdHlwZSwgZGF0YSk7
CiB9CiAKIHZvaWQgYWRkTWFya2VyKFRleHQmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIERvY3VtZW50
TWFya2VyOjpEYXRhJiYgZGF0YSkKQEAgLTY1OSw3ICs2NTksNyBAQCB2b2lkIGFkZE1hcmtlcihU
ZXh0JiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVu
dE1hcmtlcgogCiB2b2lkIHJlbW92ZU1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzLCBSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlciBwb2xpY3kpCiB7Ci0gICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVy
LT5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHJhbmdlLCB0eXBlcywgcG9saWN5
KTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHJh
bmdlLCB0eXBlcywgcG9saWN5KTsKIH0KIAogU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKE5v
ZGUmIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA1
OGU0MDVkMTUzYmNiMjY2MTEwOTE0NjllODZmOTJlZjc2N2ZmMDRkLi41OWVjYjFiMmY5Y2I1Yzcw
MGMxZmU4NWJlODMyNzYyZTAxMDg4ODJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTY5Miw2ICs2OTIsMTIg
QEAgcHJpdmF0ZToKICAgICBjb25zdGV4cHIgUGFydGlhbE9yZGVyaW5nKFR5cGUgdHlwZSkgOiBt
X3R5cGUgeyB0eXBlIH0geyB9CiAgICAgVHlwZSBtX3R5cGU7CiB9OworY29uc3RleHByIGJvb2wg
aXNfZXEoUGFydGlhbE9yZGVyaW5nKTsKK2NvbnN0ZXhwciBib29sIGlzX2x0KFBhcnRpYWxPcmRl
cmluZyk7Citjb25zdGV4cHIgYm9vbCBpc19ndChQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHBy
IGJvb2wgaXNfbmVxKFBhcnRpYWxPcmRlcmluZyk7Citjb25zdGV4cHIgYm9vbCBpc19sdGVxKFBh
cnRpYWxPcmRlcmluZyk7Citjb25zdGV4cHIgYm9vbCBpc19ndGVxKFBhcnRpYWxPcmRlcmluZyk7
CiAKIFdFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IE5v
ZGUmLCBjb25zdCBOb2RlJik7CiAKQEAgLTgyOCw2ICs4MzQsMjEgQEAgY29uc3RleHByIGJvb2wg
aXNfZ3QoUGFydGlhbE9yZGVyaW5nIG9yZGVyaW5nKQogICAgIHJldHVybiBvcmRlcmluZy5tX3R5
cGUgPT0gUGFydGlhbE9yZGVyaW5nOjpUeXBlOjpHcmVhdGVyOwogfQogCitjb25zdGV4cHIgYm9v
bCBpc19uZXEoUGFydGlhbE9yZGVyaW5nIG9yZGVyaW5nKQoreworICAgIHJldHVybiBpc19sdChv
cmRlcmluZykgfHwgaXNfZ3Qob3JkZXJpbmcpOworfQorCitjb25zdGV4cHIgYm9vbCBpc19sdGVx
KFBhcnRpYWxPcmRlcmluZyBvcmRlcmluZykKK3sKKyAgICByZXR1cm4gaXNfbHQob3JkZXJpbmcp
IHx8IGlzX2VxKG9yZGVyaW5nKTsKK30KKworY29uc3RleHByIGJvb2wgaXNfZ3RlcShQYXJ0aWFs
T3JkZXJpbmcgb3JkZXJpbmcpCit7CisgICAgcmV0dXJuIGlzX2d0KG9yZGVyaW5nKSB8fCBpc19l
cShvcmRlcmluZyk7Cit9CisKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBjb25zdCBOb2RlJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2UuY3BwCmluZGV4IDhmNmZkM2JjOGFiYTVhZmE0NThjOTM2ZjJlZTNjYzc0MDg0ZGJjMmMuLjM2
MjIyNzljY2EwM2YxMTJiYWMxNzUwNDE4NzQ2OWY1YmUxOGM0OTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNw
cApAQCAtNjYsNyArNjYsNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogREVGSU5FX0RF
QlVHX09OTFlfR0xPQkFMKFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyLCByYW5nZUNvdW50ZXIs
ICgiUmFuZ2UiKSk7CiAKIGVudW0gQ29udGVudHNQcm9jZXNzRGlyZWN0aW9uIHsgUHJvY2Vzc0Nv
bnRlbnRzRm9yd2FyZCwgUHJvY2Vzc0NvbnRlbnRzQmFja3dhcmQgfTsKLWVudW0gY2xhc3MgQ29v
cmRpbmF0ZVNwYWNlIHsgQWJzb2x1dGUsIENsaWVudCB9OwogCiBzdGF0aWMgRXhjZXB0aW9uT3I8
dm9pZD4gcHJvY2Vzc05vZGVzKFJhbmdlOjpBY3Rpb25UeXBlLCBWZWN0b3I8UmVmPE5vZGU+PiYs
IE5vZGUqIG9sZENvbnRhaW5lciwgUmVmUHRyPE5vZGU+IG5ld0NvbnRhaW5lcik7CiBzdGF0aWMg
RXhjZXB0aW9uT3I8UmVmUHRyPE5vZGU+PiBwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cyhS
YW5nZTo6QWN0aW9uVHlwZSwgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBSZWZQdHI8Tm9kZT4g
Y29udGFpbmVyLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKQEAg
LTc0LDggKzczLDggQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZlB0cjxOb2RlPj4gcHJvY2Vzc0Fu
Y2VzdG9yc0FuZFRoZWlyU2libGluZ3MoUmFuZ2U6OkFjdGlvblQKIAogaW5saW5lIFJhbmdlOjpS
YW5nZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCkKICAgICA6IG1fb3duZXJEb2N1bWVudChvd25l
ckRvY3VtZW50KQotICAgICwgbV9zdGFydCgmb3duZXJEb2N1bWVudCkKLSAgICAsIG1fZW5kKCZv
d25lckRvY3VtZW50KQorICAgICwgbV9zdGFydChvd25lckRvY3VtZW50KQorICAgICwgbV9lbmQo
b3duZXJEb2N1bWVudCkKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgcmFuZ2VDb3VudGVyLmluY3Jl
bWVudCgpOwpAQCAtOTgsNjUgKzk3LDM5IEBAIFJhbmdlOjp+UmFuZ2UoKQogI2VuZGlmCiB9CiAK
LXZvaWQgUmFuZ2U6OnNldERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKK3ZvaWQgUmFuZ2U6
OnVwZGF0ZURvY3VtZW50KCkKIHsKLSAgICBBU1NFUlQobV9vd25lckRvY3VtZW50LnB0cigpICE9
ICZkb2N1bWVudCk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBzdGFydENvbnRhaW5lcigpLmRvY3Vt
ZW50KCk7CisgICAgaWYgKG1fb3duZXJEb2N1bWVudC5wdHIoKSA9PSAmZG9jdW1lbnQpCisgICAg
ICAgIHJldHVybjsKICAgICBtX293bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdlKCp0aGlzKTsKICAg
ICBtX293bmVyRG9jdW1lbnQgPSBkb2N1bWVudDsKLSAgICBtX3N0YXJ0LnNldFRvU3RhcnRPZk5v
ZGUoZG9jdW1lbnQpOwotICAgIG1fZW5kLnNldFRvU3RhcnRPZk5vZGUoZG9jdW1lbnQpOwogICAg
IG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UoKnRoaXMpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKGNvbnN0IFJhbmdlQm91bmRhcnlQ
b2ludCYgc3RhcnQsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgZW5kKQorRXhjZXB0aW9uT3I8
dm9pZD4gUmFuZ2U6OnNldFN0YXJ0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zm
c2V0KQogewotICAgIE5vZGUqIGVuZFJvb3RDb250YWluZXIgPSBlbmQuY29udGFpbmVyKCk7Ci0g
ICAgd2hpbGUgKGVuZFJvb3RDb250YWluZXItPnBhcmVudE5vZGUoKSkKLSAgICAgICAgZW5kUm9v
dENvbnRhaW5lciA9IGVuZFJvb3RDb250YWluZXItPnBhcmVudE5vZGUoKTsKLSAgICBOb2RlKiBz
dGFydFJvb3RDb250YWluZXIgPSBzdGFydC5jb250YWluZXIoKTsKLSAgICB3aGlsZSAoc3RhcnRS
b290Q29udGFpbmVyLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIHN0YXJ0Um9vdENvbnRhaW5lciA9
IHN0YXJ0Um9vdENvbnRhaW5lci0+cGFyZW50Tm9kZSgpOwotCi0gICAgcmV0dXJuIHN0YXJ0Um9v
dENvbnRhaW5lciAhPSBlbmRSb290Q29udGFpbmVyIHx8IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQ
b2ludHMoc3RhcnQsIGVuZCkucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwOwotfQotCi1FeGNlcHRp
b25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnQoUmVmPE5vZGU+JiYgcmVmTm9kZSwgdW5zaWduZWQg
b2Zmc2V0KQotewotICAgIGJvb2wgZGlkTW92ZURvY3VtZW50ID0gZmFsc2U7Ci0gICAgaWYgKCZy
ZWZOb2RlLT5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKLSAgICAgICAgc2V0RG9j
dW1lbnQocmVmTm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIGRpZE1vdmVEb2N1bWVudCA9IHRy
dWU7Ci0gICAgfQotCi0gICAgYXV0byBjaGlsZE5vZGUgPSBjaGVja05vZGVXT2Zmc2V0KHJlZk5v
ZGUsIG9mZnNldCk7CisgICAgYXV0byBjaGlsZE5vZGUgPSBjaGVja05vZGVPZmZzZXRQYWlyKGNv
bnRhaW5lciwgb2Zmc2V0KTsKICAgICBpZiAoY2hpbGROb2RlLmhhc0V4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gY2hpbGROb2RlLnJlbGVhc2VFeGNlcHRpb24oKTsKIAotICAgIG1fc3RhcnQu
c2V0KFdURk1vdmUocmVmTm9kZSksIG9mZnNldCwgY2hpbGROb2RlLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKLQotICAgIGlmIChkaWRNb3ZlRG9jdW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290
Q29udGFpbmVyKG1fc3RhcnQsIG1fZW5kKSkKLSAgICAgICAgY29sbGFwc2UodHJ1ZSk7Ci0KKyAg
ICBtX3N0YXJ0LnNldChXVEZNb3ZlKGNvbnRhaW5lciksIG9mZnNldCwgY2hpbGROb2RlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpKTsKKyAgICBpZiAoIWlzX2x0ZXEoZG9jdW1lbnRPcmRlcihtYWtlQm91
bmRhcnlQb2ludChtX3N0YXJ0KSwgbWFrZUJvdW5kYXJ5UG9pbnQobV9lbmQpKSkpCisgICAgICAg
IG1fZW5kID0gbV9zdGFydDsKKyAgICB1cGRhdGVEb2N1bWVudCgpOwogICAgIHJldHVybiB7IH07
CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmQoUmVmPE5vZGU+JiYgcmVmTm9k
ZSwgdW5zaWduZWQgb2Zmc2V0KQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldEVuZChSZWY8
Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICBib29sIGRpZE1vdmVE
b2N1bWVudCA9IGZhbHNlOwotICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSAmb3duZXJE
b2N1bWVudCgpKSB7Ci0gICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUtPmRvY3VtZW50KCkpOwot
ICAgICAgICBkaWRNb3ZlRG9jdW1lbnQgPSB0cnVlOwotICAgIH0KLQotICAgIGF1dG8gY2hpbGRO
b2RlID0gY2hlY2tOb2RlV09mZnNldChyZWZOb2RlLCBvZmZzZXQpOworICAgIGF1dG8gY2hpbGRO
b2RlID0gY2hlY2tOb2RlT2Zmc2V0UGFpcihjb250YWluZXIsIG9mZnNldCk7CiAgICAgaWYgKGNo
aWxkTm9kZS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS5yZWxlYXNl
RXhjZXB0aW9uKCk7CiAKLSAgICBtX2VuZC5zZXQoV1RGTW92ZShyZWZOb2RlKSwgb2Zmc2V0LCBj
aGlsZE5vZGUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotCi0gICAgaWYgKGRpZE1vdmVEb2N1bWVu
dCB8fCBjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIobV9zdGFydCwgbV9lbmQpKQotICAg
ICAgICBjb2xsYXBzZShmYWxzZSk7Ci0KKyAgICBtX2VuZC5zZXQoV1RGTW92ZShjb250YWluZXIp
LCBvZmZzZXQsIGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgaWYgKCFpc19s
dGVxKGRvY3VtZW50T3JkZXIobWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCksIG1ha2VCb3VuZGFy
eVBvaW50KG1fZW5kKSkpKQorICAgICAgICBtX3N0YXJ0ID0gbV9lbmQ7CisgICAgdXBkYXRlRG9j
dW1lbnQoKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xNjgsMjM3ICsxNDEsMTAzIEBAIHZv
aWQgUmFuZ2U6OmNvbGxhcHNlKGJvb2wgdG9TdGFydCkKICAgICAgICAgbV9zdGFydCA9IG1fZW5k
OwogfQogCi1FeGNlcHRpb25Pcjxib29sPiBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSYgcmVm
Tm9kZSwgdW5zaWduZWQgb2Zmc2V0KQorRXhjZXB0aW9uT3I8Ym9vbD4gUmFuZ2U6OmlzUG9pbnRJ
blJhbmdlKE5vZGUmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0KQogewotICAgIGlmICgmcmVm
Tm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gY2hlY2tOb2RlUmVzdWx0ID0gY2hlY2tOb2RlV09mZnNldChyZWZOb2Rl
LCBvZmZzZXQpOwotICAgIGlmIChjaGVja05vZGVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAg
ICAgICAgLy8gRE9NNCBzcGVjIHJlcXVpcmVzIHVzIHRvIGNoZWNrIHdoZXRoZXIgcmVmTm9kZSBh
bmQgc3RhcnQgY29udGFpbmVyIGhhdmUgdGhlIHNhbWUgcm9vdCBmaXJzdAotICAgICAgICAvLyBi
dXQgd2UgZG8gaXQgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdG8gYXZvaWQgTyhuKSBvcGVyYXRpb24g
aGVyZSBpbiBjb21tb24gY2FzZS4KLSAgICAgICAgaWYgKCFjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cihyZWZOb2RlLCBzdGFydENvbnRhaW5lcigpKSkKKyAgICBpZiAoYXV0byBjaGVja1Jlc3VsdCA9
IGNoZWNrTm9kZU9mZnNldFBhaXIoY29udGFpbmVyLCBvZmZzZXQpOyBjaGVja1Jlc3VsdC5oYXNF
eGNlcHRpb24oKSkgeworICAgICAgICAvLyBET00gc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGlz
IGNoZWNrIGJlIGRvbmUgZmlyc3QgYnV0IHNpbmNlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMs
CisgICAgICAgIC8vIHdlIGNhbiBkbyBpdCBpbiByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIGFuIGV4
dHJhIHJvb3Qgbm9kZSBjaGVjayBpbiB0aGUgY29tbW9uIGNhc2UuCisgICAgICAgIGlmICgmY29u
dGFpbmVyLnJvb3ROb2RlKCkgIT0gJnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGNoZWNrTm9kZVJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBjaGVja1Jlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCk7CiAgICAgfQotCi0gICAgYXV0byBzdGFydENvbXBhcmVSZXN1bHQgPSBjb21wYXJlQm91
bmRhcnlQb2ludHMoJnJlZk5vZGUsIG9mZnNldCwgJnN0YXJ0Q29udGFpbmVyKCksIG1fc3RhcnQu
b2Zmc2V0KCkpOwotICAgIGlmICghKCFzdGFydENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkg
JiYgc3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID49IDApKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBlbmRDb21wYXJlUmVzdWx0ID0gY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZlbmRDb250YWluZXIoKSwgbV9lbmQub2Zmc2V0
KCkpOwotICAgIHJldHVybiAhZW5kQ29tcGFyZVJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBlbmRD
b21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDA7CisgICAgcmV0dXJuIFdlYkNv
cmU6OmlzUG9pbnRJblJhbmdlKG1ha2VTaW1wbGVSYW5nZSgqdGhpcyksIHsgY29udGFpbmVyLCBv
ZmZzZXQgfSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZVBvaW50KE5v
ZGUmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK0V4Y2VwdGlvbk9yPHNob3J0PiBS
YW5nZTo6Y29tcGFyZVBvaW50KE5vZGUmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0KSBjb25z
dAogewotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFu
Z2UuY29tcGFyZVBvaW50Ci0gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAtMSwgMCBvciAxIGRl
cGVuZGluZyBvbiBpZiB0aGUgcG9pbnQgZGVzY3JpYmVkIGJ5IHRoZSAKLSAgICAvLyByZWZOb2Rl
IG5vZGUgYW5kIGFuIG9mZnNldCB3aXRoaW4gdGhlIG5vZGUgaXMgYmVmb3JlLCBzYW1lIGFzLCBv
ciBhZnRlciB0aGUgcmFuZ2UgcmVzcGVjdGl2ZWx5LgotICAgIGlmICgmcmVmTm9kZS5kb2N1bWVu
dCgpICE9ICZvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9u
Z0RvY3VtZW50RXJyb3IgfTsKLQotICAgIGF1dG8gY2hlY2tOb2RlUmVzdWx0ID0gY2hlY2tOb2Rl
V09mZnNldChyZWZOb2RlLCBvZmZzZXQpOwotICAgIGlmIChjaGVja05vZGVSZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgLy8gRE9NNCBzcGVjIHJlcXVpcmVzIHVzIHRvIGNoZWNrIHdo
ZXRoZXIgcmVmTm9kZSBhbmQgc3RhcnQgY29udGFpbmVyIGhhdmUgdGhlIHNhbWUgcm9vdCBmaXJz
dAotICAgICAgICAvLyBidXQgd2UgZG8gaXQgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdG8gYXZvaWQg
TyhuKSBvcGVyYXRpb24gaGVyZSBpbiBjb21tb24gY2FzZS4KLSAgICAgICAgaWYgKCFyZWZOb2Rl
LmlzQ29ubmVjdGVkKCkgJiYgIWNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJlZk5vZGUsIHN0YXJ0
Q29udGFpbmVyKCkpKQorICAgIGlmIChhdXRvIGNoZWNrUmVzdWx0ID0gY2hlY2tOb2RlT2Zmc2V0
UGFpcihjb250YWluZXIsIG9mZnNldCk7IGNoZWNrUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Cisg
ICAgICAgIC8vIERPTSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIHRoaXMgY2hlY2sgYmUgZG9uZSBm
aXJzdCBidXQgc2luY2UgdGhlcmUgYXJlIG5vIHNpZGUgZWZmZWN0cywKKyAgICAgICAgLy8gd2Ug
Y2FuIGRvIGl0IGluIHJldmVyc2Ugb3JkZXIgdG8gYXZvaWQgYW4gZXh0cmEgcm9vdCBub2RlIGNo
ZWNrIGluIHRoZSBjb21tb24gY2FzZS4KKyAgICAgICAgaWYgKCZjb250YWluZXIucm9vdE5vZGUo
KSAhPSAmc3RhcnRDb250YWluZXIoKS5yb290Tm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9OwotICAgICAgICByZXR1cm4gY2hlY2tOb2Rl
UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGNoZWNrUmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKTsKICAgICB9Ci0KLSAgICAvLyBjb21wYXJlIHRvIHN0YXJ0LCBhbmQg
cG9pbnQgY29tZXMgYmVmb3JlCi0gICAgYXV0byBzdGFydENvbXBhcmVSZXN1bHQgPSBjb21wYXJl
Qm91bmRhcnlQb2ludHMoJnJlZk5vZGUsIG9mZnNldCwgJnN0YXJ0Q29udGFpbmVyKCksIG1fc3Rh
cnQub2Zmc2V0KCkpOwotICAgIGlmIChzdGFydENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBzdGFydENvbXBhcmVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwot
ICAgIGlmIChzdGFydENvbXBhcmVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwKQorICAg
IGF1dG8gb3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKHsgY29udGFpbmVyLCBvZmZzZXQgfSwgbWFr
ZVNpbXBsZVJhbmdlKCp0aGlzKSk7CisgICAgaWYgKGlzX2x0KG9yZGVyaW5nKSkKICAgICAgICAg
cmV0dXJuIC0xOwotCi0gICAgLy8gY29tcGFyZSB0byBlbmQsIGFuZCBwb2ludCBjb21lcyBhZnRl
cgotICAgIGF1dG8gZW5kQ29tcGFyZVJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVm
Tm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsKLSAgICBpZiAo
ZW5kQ29tcGFyZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGVuZENvbXBh
cmVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgIGlmIChlbmRDb21wYXJlUmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKKyAgICBpZiAoaXNfZXEob3JkZXJpbmcpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoaXNfZ3Qob3JkZXJpbmcpKQogICAgICAgICByZXR1cm4gMTsK
LQotICAgIC8vIHBvaW50IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhpcyByYW5nZSwgb3Igb24gdGhl
IGJvdW5kYXJ5IHBvaW50cwotICAgIHJldHVybiAwOworICAgIHJldHVybiBFeGNlcHRpb24geyBX
cm9uZ0RvY3VtZW50RXJyb3IgfTsKIH0KIAotRXhjZXB0aW9uT3I8UmFuZ2U6OkNvbXBhcmVSZXN1
bHRzPiBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3QKK0V4Y2VwdGlvbk9y
PFJhbmdlOjpDb21wYXJlUmVzdWx0cz4gUmFuZ2U6OmNvbXBhcmVOb2RlKE5vZGUmIG5vZGUpIGNv
bnN0CiB7CisgICAgLy8gRklYTUU6IFRoaXMgZGVwcmVjYXRlZCBmdW5jdGlvbiBzaG91bGQgYmUg
cmVtb3ZlZC4KKyAgICAvLyBXZSBvcmlnaW5hbGx5IGFkZGVkIGl0IGZvciBpbnRlcm9wZXJhYmls
aXR5IHdpdGggRmlyZWZveC4KKyAgICAvLyBSZWNlbnQgdmVyc2lvbnMgb2YgRmlyZWZveCBoYXZl
IHJlbW92ZWQgaXQuCisKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2Rv
Y3MvRE9NOnJhbmdlLmNvbXBhcmVOb2RlCiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAwLCAx
LCAyLCBvciAzIGJhc2VkIG9uIGlmIHRoZSBub2RlIGlzIGJlZm9yZSwgYWZ0ZXIsCi0gICAgLy8g
YmVmb3JlIGFuZCBhZnRlcihzdXJyb3VuZHMpLCBvciBpbnNpZGUgdGhlIHJhbmdlLCByZXNwZWN0
aXZlbHkKLQotICAgIGlmICghcmVmTm9kZS5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAgIC8vIEZp
cmVmb3ggZG9lc24ndCB0aHJvdyBhbiBleGNlcHRpb24gZm9yIHRoaXMgY2FzZTsgaXQgcmV0dXJu
cyAwLgotICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkU7Ci0gICAgfQorICAgIC8vIGJlZm9yZSBh
bmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5zaWRlIHRoZSByYW5nZSwgcmVzcGVjdGl2ZWx5Lgog
Ci0gICAgaWYgKCZyZWZOb2RlLmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgewotICAg
ICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNhc2U7
IGl0IHJldHVybnMgMC4KKyAgICBpZiAoIW5vZGUuaXNDb25uZWN0ZWQoKSB8fCAmbm9kZS5kb2N1
bWVudCgpICE9IG1fb3duZXJEb2N1bWVudC5wdHIoKSkgeworICAgICAgICAvLyBNYXRjaCBoaXN0
b3JpY2FsIEZpcmVmb3ggYmVoYXZpb3IuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAg
ICB9CiAKLSAgICBhdXRvKiBwYXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnROb2RlKCk7Ci0gICAg
aWYgKCFwYXJlbnROb2RlKSB7Ci0gICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHRoZSB0b3Agb2Yg
dGhlIHRyZWUgd2Ugc2hvdWxkIHJldHVybiBOT0RFX0JFRk9SRV9BTkRfQUZURVIsCi0gICAgICAg
IC8vIGJ1dCB3ZSB0aHJvdyB0byBtYXRjaCBmaXJlZm94IGJlaGF2aW9yLgorICAgIGF1dG8gbm9k
ZVJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShub2RlKTsKKyAgICBpZiAoIW5vZGVSYW5n
ZSkgeworICAgICAgICAvLyBNYXRjaCBoaXN0b3JpY2FsIEZpcmVmb3ggYmVoYXZpb3IuCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAgICAgfQotICAgIGF1dG8g
bm9kZUluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7Ci0KLSAgICBhdXRvIG5vZGVT
dGFydENvbXBhcmVSZXN1bHQgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCk7
Ci0gICAgaWYgKG5vZGVTdGFydENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBub2RlU3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBh
dXRvIG5vZGVFbmRDb21wYXJlUmVzdWx0ID0gY29tcGFyZVBvaW50KCpwYXJlbnROb2RlLCBub2Rl
SW5kZXggKyAxKTsKLSAgICBpZiAobm9kZUVuZENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBub2RlRW5kQ29tcGFyZVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7
Ci0KLSAgICBib29sIG5vZGVTdGFydHNCZWZvcmVSYW5nZSA9IG5vZGVTdGFydENvbXBhcmVSZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwOwotICAgIGJvb2wgbm9kZUVuZHNBZnRlclJhbmdl
ID0gbm9kZUVuZENvbXBhcmVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwOwotCi0gICAg
cmV0dXJuIG5vZGVTdGFydHNCZWZvcmVSYW5nZQotICAgICAgICA/IChub2RlRW5kc0FmdGVyUmFu
Z2UgPyBOT0RFX0JFRk9SRV9BTkRfQUZURVIgOiBOT0RFX0JFRk9SRSkKLSAgICAgICAgOiAobm9k
ZUVuZHNBZnRlclJhbmdlID8gTk9ERV9BRlRFUiA6IE5PREVfSU5TSURFKTsKLX0KLQotc3RhdGlj
IGlubGluZSBOb2RlKiB0b3AoTm9kZSYgbm9kZSkKLXsKLSAgICBhdXRvKiB0b3AgPSAmbm9kZTsK
LSAgICB3aGlsZSAoYXV0byogcGFyZW50ID0gdG9wLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIHRv
cCA9IHBhcmVudDsKLSAgICByZXR1cm4gdG9wOwotfQotCi1FeGNlcHRpb25PcjxzaG9ydD4gUmFu
Z2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93IGhvdywgY29uc3QgUmFuZ2UmIHNv
dXJjZVJhbmdlKSBjb25zdAotewotICAgIGF1dG8qIHRoaXNDb250YWluZXIgPSBjb21tb25BbmNl
c3RvckNvbnRhaW5lcigpOwotICAgIGF1dG8qIHNvdXJjZUNvbnRhaW5lciA9IHNvdXJjZVJhbmdl
LmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7Ci0gICAgaWYgKCF0aGlzQ29udGFpbmVyIHx8ICFz
b3VyY2VDb250YWluZXIgfHwgJnRoaXNDb250YWluZXItPmRvY3VtZW50KCkgIT0gJnNvdXJjZUNv
bnRhaW5lci0+ZG9jdW1lbnQoKSB8fCB0b3AoKnRoaXNDb250YWluZXIpICE9IHRvcCgqc291cmNl
Q29udGFpbmVyKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJv
ciB9OwotCi0gICAgc3dpdGNoIChob3cpIHsKLSAgICBjYXNlIFNUQVJUX1RPX1NUQVJUOgotICAg
ICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQsIHNvdXJjZVJhbmdlLm1f
c3RhcnQpOwotICAgIGNhc2UgU1RBUlRfVE9fRU5EOgotICAgICAgICByZXR1cm4gY29tcGFyZUJv
dW5kYXJ5UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS5tX3N0YXJ0KTsKLSAgICBjYXNlIEVORF9U
T19FTkQ6Ci0gICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9lbmQsIHNvdXJj
ZVJhbmdlLm1fZW5kKTsKLSAgICBjYXNlIEVORF9UT19TVEFSVDoKLSAgICAgICAgcmV0dXJuIGNv
bXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS5tX2VuZCk7Ci0gICAgfQog
Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CisgICAgYXV0byBzdGFydE9y
ZGVyaW5nID0gZG9jdW1lbnRPcmRlcihub2RlUmFuZ2UtPnN0YXJ0LCBtYWtlQm91bmRhcnlQb2lu
dChtX3N0YXJ0KSk7CisgICAgYXV0byBlbmRPcmRlcmluZyA9IGRvY3VtZW50T3JkZXIobm9kZVJh
bmdlLT5lbmQsIG1ha2VCb3VuZGFyeVBvaW50KG1fZW5kKSk7CisgICAgaWYgKGlzX2d0ZXEoc3Rh
cnRPcmRlcmluZykgJiYgaXNfbHRlcShlbmRPcmRlcmluZykpCisgICAgICAgIHJldHVybiBOT0RF
X0lOU0lERTsKKyAgICBpZiAoaXNfbHRlcShzdGFydE9yZGVyaW5nKSAmJiBpc19ndGVxKGVuZE9y
ZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFX0FORF9BRlRFUjsKKyAgICBpZiAo
aXNfbHRlcShzdGFydE9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOworICAg
IGlmIChpc19ndGVxKGVuZE9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIE5PREVfQUZURVI7Cisg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9OwogfQogCi1FeGNlcHRp
b25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKHVuc2ln
bmVkIHNob3J0IGhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlKSBjb25zdAorRXhjZXB0aW9u
T3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHModW5zaWduZWQgc2hvcnQgaG93
LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0CiB7CisgICAgY29uc3QgUmFuZ2VCb3Vu
ZGFyeVBvaW50KiB0aGlzUG9pbnQ7CisgICAgY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50KiBvdGhl
clBvaW50OwogICAgIHN3aXRjaCAoaG93KSB7CiAgICAgY2FzZSBTVEFSVF9UT19TVEFSVDoKKyAg
ICAgICAgdGhpc1BvaW50ID0gJm1fc3RhcnQ7CisgICAgICAgIG90aGVyUG9pbnQgPSAmc291cmNl
UmFuZ2UubV9zdGFydDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTVEFSVF9UT19FTkQ6Cisg
ICAgICAgIHRoaXNQb2ludCA9ICZtX2VuZDsKKyAgICAgICAgb3RoZXJQb2ludCA9ICZzb3VyY2VS
YW5nZS5tX3N0YXJ0OworICAgICAgICBicmVhazsKICAgICBjYXNlIEVORF9UT19FTkQ6CisgICAg
ICAgIHRoaXNQb2ludCA9ICZtX2VuZDsKKyAgICAgICAgb3RoZXJQb2ludCA9ICZzb3VyY2VSYW5n
ZS5tX2VuZDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFTkRfVE9fU1RBUlQ6Ci0gICAgICAg
IHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMoc3RhdGljX2Nhc3Q8Q29tcGFyZUhvdz4oaG93
KSwgc291cmNlUmFuZ2UpOworICAgICAgICB0aGlzUG9pbnQgPSAmbV9zdGFydDsKKyAgICAgICAg
b3RoZXJQb2ludCA9ICZzb3VyY2VSYW5nZS5tX2VuZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAg
ICAgfQotICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwotfQotCi1F
eGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhOb2RlKiBjb250
YWluZXJBLCB1bnNpZ25lZCBvZmZzZXRBLCBOb2RlKiBjb250YWluZXJCLCB1bnNpZ25lZCBvZmZz
ZXRCKQotewotICAgIEFTU0VSVChjb250YWluZXJBKTsKLSAgICBBU1NFUlQoY29udGFpbmVyQik7
Ci0KLSAgICBpZiAoIWNvbnRhaW5lckEpCisgICAgYXV0byBvcmRlcmluZyA9IGRvY3VtZW50T3Jk
ZXIobWFrZUJvdW5kYXJ5UG9pbnQoKnRoaXNQb2ludCksIG1ha2VCb3VuZGFyeVBvaW50KCpvdGhl
clBvaW50KSk7CisgICAgaWYgKGlzX2x0KG9yZGVyaW5nKSkKICAgICAgICAgcmV0dXJuIC0xOwot
ICAgIGlmICghY29udGFpbmVyQikKKyAgICBpZiAoaXNfZXEob3JkZXJpbmcpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAoaXNfZ3Qob3JkZXJpbmcpKQogICAgICAgICByZXR1cm4gMTsKLQot
ICAgIC8vIHNlZSBET00yIHRyYXZlcnNhbCAmIHJhbmdlIHNlY3Rpb24gMi41Ci0KLSAgICAvLyBj
YXNlIDE6IGJvdGggcG9pbnRzIGhhdmUgdGhlIHNhbWUgY29udGFpbmVyCi0gICAgaWYgKGNvbnRh
aW5lckEgPT0gY29udGFpbmVyQikgewotICAgICAgICBpZiAob2Zmc2V0QSA9PSBvZmZzZXRCKQot
ICAgICAgICAgICAgcmV0dXJuIDA7IC8vIEEgaXMgZXF1YWwgdG8gQgotICAgICAgICBpZiAob2Zm
c2V0QSA8IG9mZnNldEIpCi0gICAgICAgICAgICByZXR1cm4gLTE7IC8vIEEgaXMgYmVmb3JlIEIK
LSAgICAgICAgcmV0dXJuIDE7IC8vIEEgaXMgYWZ0ZXIgQgotICAgIH0KLQotICAgIC8vIGNhc2Ug
Mjogbm9kZSBDIChjb250YWluZXIgQiBvciBhbiBhbmNlc3RvcikgaXMgYSBjaGlsZCBub2RlIG9m
IEEKLSAgICBOb2RlKiBjID0gY29udGFpbmVyQjsKLSAgICB3aGlsZSAoYyAmJiBjLT5wYXJlbnRO
b2RlKCkgIT0gY29udGFpbmVyQSkKLSAgICAgICAgYyA9IGMtPnBhcmVudE5vZGUoKTsKLSAgICBp
ZiAoYykgewotICAgICAgICB1bnNpZ25lZCBvZmZzZXRDID0gMDsKLSAgICAgICAgTm9kZSogbiA9
IGNvbnRhaW5lckEtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgd2hpbGUgKG4gIT0gYyAmJiBvZmZz
ZXRDIDwgb2Zmc2V0QSkgewotICAgICAgICAgICAgb2Zmc2V0QysrOwotICAgICAgICAgICAgbiA9
IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldEEgPD0gb2Zm
c2V0QykKLSAgICAgICAgICAgIHJldHVybiAtMTsgLy8gQSBpcyBiZWZvcmUgQgotICAgICAgICBy
ZXR1cm4gMTsgLy8gQSBpcyBhZnRlciBCCi0gICAgfQotCi0gICAgLy8gY2FzZSAzOiBub2RlIEMg
KGNvbnRhaW5lciBBIG9yIGFuIGFuY2VzdG9yKSBpcyBhIGNoaWxkIG5vZGUgb2YgQgotICAgIGMg
PSBjb250YWluZXJBOwotICAgIHdoaWxlIChjICYmIGMtPnBhcmVudE5vZGUoKSAhPSBjb250YWlu
ZXJCKQotICAgICAgICBjID0gYy0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChjKSB7Ci0gICAgICAg
IHVuc2lnbmVkIG9mZnNldEMgPSAwOwotICAgICAgICBOb2RlKiBuID0gY29udGFpbmVyQi0+Zmly
c3RDaGlsZCgpOwotICAgICAgICB3aGlsZSAobiAhPSBjICYmIG9mZnNldEMgPCBvZmZzZXRCKSB7
Ci0gICAgICAgICAgICBvZmZzZXRDKys7Ci0gICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmco
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0QyA8IG9mZnNldEIpCi0gICAgICAgICAg
ICByZXR1cm4gLTE7IC8vIEEgaXMgYmVmb3JlIEIKLSAgICAgICAgcmV0dXJuIDE7IC8vIEEgaXMg
YWZ0ZXIgQgotICAgIH0KLQotICAgIC8vIGNhc2UgNDogY29udGFpbmVycyBBICYgQiBhcmUgc2li
bGluZ3MsIG9yIGNoaWxkcmVuIG9mIHNpYmxpbmdzCi0gICAgLy8gIyMjIHdlIG5lZWQgdG8gZG8g
YSB0cmF2ZXJzYWwgaGVyZSBpbnN0ZWFkCi0gICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yKCpjb250YWluZXJBLCAqY29udGFpbmVyQik7Ci0gICAgaWYgKCFj
b21tb25BbmNlc3RvcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRF
cnJvciB9OwotICAgIE5vZGUqIGNoaWxkQSA9IGNvbnRhaW5lckE7Ci0gICAgd2hpbGUgKGNoaWxk
QSAmJiBjaGlsZEEtPnBhcmVudE5vZGUoKSAhPSBjb21tb25BbmNlc3RvcikKLSAgICAgICAgY2hp
bGRBID0gY2hpbGRBLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFjaGlsZEEpCi0gICAgICAgIGNo
aWxkQSA9IGNvbW1vbkFuY2VzdG9yLmdldCgpOwotICAgIE5vZGUqIGNoaWxkQiA9IGNvbnRhaW5l
ckI7Ci0gICAgd2hpbGUgKGNoaWxkQiAmJiBjaGlsZEItPnBhcmVudE5vZGUoKSAhPSBjb21tb25B
bmNlc3RvcikKLSAgICAgICAgY2hpbGRCID0gY2hpbGRCLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYg
KCFjaGlsZEIpCi0gICAgICAgIGNoaWxkQiA9IGNvbW1vbkFuY2VzdG9yLmdldCgpOwotCi0gICAg
aWYgKGNoaWxkQSA9PSBjaGlsZEIpCi0gICAgICAgIHJldHVybiAwOyAvLyBBIGlzIGVxdWFsIHRv
IEIKLQotICAgIE5vZGUqIG4gPSBjb21tb25BbmNlc3Rvci0+Zmlyc3RDaGlsZCgpOwotICAgIHdo
aWxlIChuKSB7Ci0gICAgICAgIGlmIChuID09IGNoaWxkQSkKLSAgICAgICAgICAgIHJldHVybiAt
MTsgLy8gQSBpcyBiZWZvcmUgQgotICAgICAgICBpZiAobiA9PSBjaGlsZEIpCi0gICAgICAgICAg
ICByZXR1cm4gMTsgLy8gQSBpcyBhZnRlciBCCi0gICAgICAgIG4gPSBuLT5uZXh0U2libGluZygp
OwotICAgIH0KLQotICAgIC8vIFNob3VsZCBuZXZlciByZWFjaCB0aGlzIHBvaW50LgotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1FeGNlcHRpb25PcjxzaG9y
dD4gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQm
IGJvdW5kYXJ5QSwgY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeUIpCi17Ci0gICAg
cmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhib3VuZGFyeUEuY29udGFpbmVyKCksIGJvdW5k
YXJ5QS5vZmZzZXQoKSwgYm91bmRhcnlCLmNvbnRhaW5lcigpLCBib3VuZGFyeUIub2Zmc2V0KCkp
OwotfQotCi1ib29sIFJhbmdlOjpib3VuZGFyeVBvaW50c1ZhbGlkKCkgY29uc3QKLXsKLSAgICBh
dXRvIHJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBtX2VuZCk7Ci0gICAg
cmV0dXJuICFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpIDw9IDA7CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9Owog
fQogCiBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6ZGVsZXRlQ29udGVudHMoKQpAQCAtNDA5LDI2
ICsyNDgsOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6ZGVsZXRlQ29udGVudHMoKQogICAg
IHJldHVybiB7IH07CiB9CiAKLUV4Y2VwdGlvbk9yPGJvb2w+IFJhbmdlOjppbnRlcnNlY3RzTm9k
ZShOb2RlJiByZWZOb2RlKSBjb25zdAorYm9vbCBSYW5nZTo6aW50ZXJzZWN0c05vZGUoTm9kZSYg
bm9kZSkgY29uc3QKIHsKLSAgICBpZiAoIXJlZk5vZGUuaXNDb25uZWN0ZWQoKSB8fCAmcmVmTm9k
ZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8qIHBhcmVudE5vZGUgPSByZWZOb2RlLnBhcmVudE5vZGUoKTsKLSAgICBpZiAo
IXBhcmVudE5vZGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgdW5zaWduZWQgbm9kZUlu
ZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7Ci0KLSAgICAvLyBJZiAocGFyZW50Tm9k
ZSwgbm9kZUluZGV4KSBpcyBiZWZvcmUgZW5kIGFuZCAocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsg
MSkgaXMgYWZ0ZXIgc3RhcnQsIHJldHVybiB0cnVlLgotICAgIC8vIE90aGVyd2lzZSwgcmV0dXJu
IGZhbHNlLgotICAgIGF1dG8gY29tcGFyZUVuZFJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50
cyhwYXJlbnROb2RlLCBub2RlSW5kZXgsIG1fZW5kLmNvbnRhaW5lcigpLCBtX2VuZC5vZmZzZXQo
KSk7Ci0gICAgaWYgKGNvbXBhcmVFbmRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBjb21wYXJlRW5kUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBhdXRvIGNvbXBh
cmVTdGFydFJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5k
ZXggKyAxLCBtX3N0YXJ0LmNvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpKTsKLSAgICBpZiAo
Y29tcGFyZVN0YXJ0UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gY29tcGFy
ZVN0YXJ0UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gY29tcGFyZUVuZFJl
c3VsdC5yZXR1cm5WYWx1ZSgpID09IC0xICYmIGNvbXBhcmVTdGFydFJlc3VsdC5yZXR1cm5WYWx1
ZSgpID09IDE7CisgICAgcmV0dXJuIGludGVyc2VjdHMobWFrZVNpbXBsZVJhbmdlKCp0aGlzKSwg
bm9kZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgTm9kZSogaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21t
b25Sb290KE5vZGUqIG5vZGUsIE5vZGUqIGNvbW1vblJvb3QpCkBAIC00NjQsMzIgKzI4NiwxMSBA
QCBzdGF0aWMgaW5saW5lIE5vZGUqIGNoaWxkT2ZDb21tb25Sb290QmVmb3JlT2Zmc2V0KE5vZGUq
IGNvbnRhaW5lciwgdW5zaWduZWQgb2ZmcwogICAgIHJldHVybiBjb250YWluZXI7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgbGVuZ3RoT2ZDb250ZW50c0luTm9kZShOb2RlJiBub2RlKQot
ewotICAgIC8vIFRoaXMgc3dpdGNoIHN0YXRlbWVudCBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0
aGF0IG9mIFJhbmdlOjpwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cy4KLSAgICBzd2l0Y2gg
KG5vZGUubm9kZVR5cGUoKSkgewotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgot
ICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNh
c2UgTm9kZTo6VEVYVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgot
ICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19J
TlNUUlVDVElPTl9OT0RFOgotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4o
bm9kZSkubGVuZ3RoKCk7Ci0gICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6Ci0gICAgY2FzZSBO
b2RlOjpET0NVTUVOVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9E
RToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KG5vZGUpLmNvdW50Q2hp
bGROb2RlcygpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQogRXhjZXB0aW9uT3I8UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6cHJv
Y2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUgYWN0aW9uKQogewogICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudDsKICAgICBpZiAoYWN0aW9uID09IEV4dHJhY3QgfHwgYWN0aW9uID09
IENsb25lKQotICAgICAgICBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShvd25l
ckRvY3VtZW50KCkpOworICAgICAgICBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0
ZShtX293bmVyRG9jdW1lbnQpOwogCiAgICAgaWYgKGNvbGxhcHNlZCgpKQogICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7CkBAIC01MDksOCArMzEwLDggQEAgRXhjZXB0aW9uT3I8UmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+PiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUgYWN0aW9uKQog
ICAgIFJhbmdlQm91bmRhcnlQb2ludCBvcmlnaW5hbEVuZChtX2VuZCk7CiAKICAgICAvLyB3aGF0
IGlzIHRoZSBoaWdoZXN0IG5vZGUgdGhhdCBwYXJ0aWFsbHkgc2VsZWN0cyB0aGUgc3RhcnQgLyBl
bmQgb2YgdGhlIHJhbmdlPwotICAgIFJlZlB0cjxOb2RlPiBwYXJ0aWFsU3RhcnQgPSBoaWdoZXN0
QW5jZXN0b3JVbmRlckNvbW1vblJvb3Qob3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgY29tbW9u
Um9vdC5nZXQoKSk7Ci0gICAgUmVmUHRyPE5vZGU+IHBhcnRpYWxFbmQgPSBoaWdoZXN0QW5jZXN0
b3JVbmRlckNvbW1vblJvb3Qob3JpZ2luYWxFbmQuY29udGFpbmVyKCksIGNvbW1vblJvb3QuZ2V0
KCkpOworICAgIFJlZlB0cjxOb2RlPiBwYXJ0aWFsU3RhcnQgPSBoaWdoZXN0QW5jZXN0b3JVbmRl
ckNvbW1vblJvb3QoJm9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCksIGNvbW1vblJvb3QuZ2V0KCkp
OworICAgIFJlZlB0cjxOb2RlPiBwYXJ0aWFsRW5kID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21t
b25Sb290KCZvcmlnaW5hbEVuZC5jb250YWluZXIoKSwgY29tbW9uUm9vdC5nZXQoKSk7CiAKICAg
ICAvLyBTdGFydCBhbmQgZW5kIGNvbnRhaW5lcnMgYXJlIGRpZmZlcmVudC4KICAgICAvLyBUaGVy
ZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllcyBoZXJlOgpAQCAtNTMzLDI4ICszMzQsMjggQEAgRXhj
ZXB0aW9uT3I8UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRz
KEFjdGlvblR5cGUgYWN0aW9uKQogICAgIC8vIGFmdGVyIGFueSBET00gbXV0YXRpb24gZXZlbnQs
IGF0IHZhcmlvdXMgc3RhZ2VzIGJlbG93LiBTZWUgd2Via2l0IGJ1ZyA2MDM1MC4KIAogICAgIFJl
ZlB0cjxOb2RlPiBsZWZ0Q29udGVudHM7Ci0gICAgaWYgKG9yaWdpbmFsU3RhcnQuY29udGFpbmVy
KCkgIT0gY29tbW9uUm9vdCAmJiBjb21tb25Sb290LT5jb250YWlucyhvcmlnaW5hbFN0YXJ0LmNv
bnRhaW5lcigpKSkgewotICAgICAgICBhdXRvIGZpcnN0UmVzdWx0ID0gcHJvY2Vzc0NvbnRlbnRz
QmV0d2Vlbk9mZnNldHMoYWN0aW9uLCBudWxscHRyLCBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigp
LCBvcmlnaW5hbFN0YXJ0Lm9mZnNldCgpLCBsZW5ndGhPZkNvbnRlbnRzSW5Ob2RlKCpvcmlnaW5h
bFN0YXJ0LmNvbnRhaW5lcigpKSk7Ci0gICAgICAgIGF1dG8gc2Vjb25kUmVzdWx0ID0gcHJvY2Vz
c0FuY2VzdG9yc0FuZFRoZWlyU2libGluZ3MoYWN0aW9uLCBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5l
cigpLCBQcm9jZXNzQ29udGVudHNGb3J3YXJkLCBXVEZNb3ZlKGZpcnN0UmVzdWx0KSwgY29tbW9u
Um9vdC5nZXQoKSk7CisgICAgaWYgKCZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpICE9IGNvbW1v
blJvb3QgJiYgY29tbW9uUm9vdC0+Y29udGFpbnMoJm9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCkp
KSB7CisgICAgICAgIGF1dG8gZmlyc3RSZXN1bHQgPSBwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zm
c2V0cyhhY3Rpb24sIG51bGxwdHIsICZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpLCBvcmlnaW5h
bFN0YXJ0Lm9mZnNldCgpLCBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpLmxlbmd0aCgpKTsKKyAg
ICAgICAgYXV0byBzZWNvbmRSZXN1bHQgPSBwcm9jZXNzQW5jZXN0b3JzQW5kVGhlaXJTaWJsaW5n
cyhhY3Rpb24sICZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpLCBQcm9jZXNzQ29udGVudHNGb3J3
YXJkLCBXVEZNb3ZlKGZpcnN0UmVzdWx0KSwgY29tbW9uUm9vdC5nZXQoKSk7CiAgICAgICAgIC8v
IEZJWE1FOiBBIGJpdCBwZWN1bGlhciB0aGF0IHdlIHNpbGVudGx5IGlnbm9yZSB0aGUgZXhjZXB0
aW9uIGhlcmUsIGJ1dCB3ZSBkbyBoYXZlIGF0IGxlYXN0IHNvbWUgcmVncmVzc2lvbiB0ZXN0cyB0
aGF0IHJlbHkgb24gdGhpcyBiZWhhdmlvci4KICAgICAgICAgaWYgKCFzZWNvbmRSZXN1bHQuaGFz
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBsZWZ0Q29udGVudHMgPSBzZWNvbmRSZXN1bHQucmVs
ZWFzZVJldHVyblZhbHVlKCk7CiAgICAgfQogCiAgICAgUmVmUHRyPE5vZGU+IHJpZ2h0Q29udGVu
dHM7Ci0gICAgaWYgKCZlbmRDb250YWluZXIoKSAhPSBjb21tb25Sb290ICYmIGNvbW1vblJvb3Qt
PmNvbnRhaW5zKG9yaWdpbmFsRW5kLmNvbnRhaW5lcigpKSkgewotICAgICAgICBhdXRvIGZpcnN0
UmVzdWx0ID0gcHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMoYWN0aW9uLCBudWxscHRyLCBv
cmlnaW5hbEVuZC5jb250YWluZXIoKSwgMCwgb3JpZ2luYWxFbmQub2Zmc2V0KCkpOwotICAgICAg
ICBhdXRvIHNlY29uZFJlc3VsdCA9IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKGFj
dGlvbiwgb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIFByb2Nlc3NDb250ZW50c0JhY2t3YXJkLCBX
VEZNb3ZlKGZpcnN0UmVzdWx0KSwgY29tbW9uUm9vdC5nZXQoKSk7CisgICAgaWYgKCZlbmRDb250
YWluZXIoKSAhPSBjb21tb25Sb290ICYmIGNvbW1vblJvb3QtPmNvbnRhaW5zKCZvcmlnaW5hbEVu
ZC5jb250YWluZXIoKSkpIHsKKyAgICAgICAgYXV0byBmaXJzdFJlc3VsdCA9IHByb2Nlc3NDb250
ZW50c0JldHdlZW5PZmZzZXRzKGFjdGlvbiwgbnVsbHB0ciwgJm9yaWdpbmFsRW5kLmNvbnRhaW5l
cigpLCAwLCBvcmlnaW5hbEVuZC5vZmZzZXQoKSk7CisgICAgICAgIGF1dG8gc2Vjb25kUmVzdWx0
ID0gcHJvY2Vzc0FuY2VzdG9yc0FuZFRoZWlyU2libGluZ3MoYWN0aW9uLCAmb3JpZ2luYWxFbmQu
Y29udGFpbmVyKCksIFByb2Nlc3NDb250ZW50c0JhY2t3YXJkLCBXVEZNb3ZlKGZpcnN0UmVzdWx0
KSwgY29tbW9uUm9vdC5nZXQoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBBIGJpdCBwZWN1bGlhciB0
aGF0IHdlIHNpbGVudGx5IGlnbm9yZSB0aGUgZXhjZXB0aW9uIGhlcmUsIGJ1dCB3ZSBkbyBoYXZl
IGF0IGxlYXN0IHNvbWUgcmVncmVzc2lvbiB0ZXN0cyB0aGF0IHJlbHkgb24gdGhpcyBiZWhhdmlv
ci4KICAgICAgICAgaWYgKCFzZWNvbmRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICByaWdodENvbnRlbnRzID0gc2Vjb25kUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAg
IH0KIAogICAgIC8vIGRlbGV0ZSBhbGwgY2hpbGRyZW4gb2YgY29tbW9uUm9vdCBiZXR3ZWVuIHRo
ZSBzdGFydCBhbmQgZW5kIGNvbnRhaW5lcgotICAgIFJlZlB0cjxOb2RlPiBwcm9jZXNzU3RhcnQg
PSBjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldChvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigp
LCBvcmlnaW5hbFN0YXJ0Lm9mZnNldCgpLCBjb21tb25Sb290LmdldCgpKTsKLSAgICBpZiAocHJv
Y2Vzc1N0YXJ0ICYmIG9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCkgIT0gY29tbW9uUm9vdCkgLy8g
cHJvY2Vzc1N0YXJ0IGNvbnRhaW5zIG5vZGVzIGJlZm9yZSBtX3N0YXJ0LgorICAgIFJlZlB0cjxO
b2RlPiBwcm9jZXNzU3RhcnQgPSBjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldCgmb3JpZ2lu
YWxTdGFydC5jb250YWluZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgY29tbW9uUm9vdC5n
ZXQoKSk7CisgICAgaWYgKHByb2Nlc3NTdGFydCAmJiAmb3JpZ2luYWxTdGFydC5jb250YWluZXIo
KSAhPSBjb21tb25Sb290KSAvLyBwcm9jZXNzU3RhcnQgY29udGFpbnMgbm9kZXMgYmVmb3JlIG1f
c3RhcnQuCiAgICAgICAgIHByb2Nlc3NTdGFydCA9IHByb2Nlc3NTdGFydC0+bmV4dFNpYmxpbmco
KTsKLSAgICBSZWZQdHI8Tm9kZT4gcHJvY2Vzc0VuZCA9IGNoaWxkT2ZDb21tb25Sb290QmVmb3Jl
T2Zmc2V0KG9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBvcmlnaW5hbEVuZC5vZmZzZXQoKSwgY29t
bW9uUm9vdC5nZXQoKSk7CisgICAgUmVmUHRyPE5vZGU+IHByb2Nlc3NFbmQgPSBjaGlsZE9mQ29t
bW9uUm9vdEJlZm9yZU9mZnNldCgmb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIG9yaWdpbmFsRW5k
Lm9mZnNldCgpLCBjb21tb25Sb290LmdldCgpKTsKIAogICAgIC8vIENvbGxhcHNlIHRoZSByYW5n
ZSwgbWFraW5nIHN1cmUgdGhhdCB0aGUgcmVzdWx0IGlzIG5vdCB3aXRoaW4gYSBub2RlIHRoYXQg
d2FzIHBhcnRpYWxseSBzZWxlY3RlZC4KICAgICBpZiAoYWN0aW9uID09IEV4dHJhY3QgfHwgYWN0
aW9uID09IERlbGV0ZSkgewpAQCAtNjE5LDcgKzQyMCw2IEBAIHN0YXRpYyBFeGNlcHRpb25PcjxS
ZWZQdHI8Tm9kZT4+IHByb2Nlc3NDb250ZW50c0JldHdlZW5PZmZzZXRzKFJhbmdlOjpBY3Rpb25U
eXBlCiAKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0OwogCi0gICAgLy8gVGhpcyBzd2l0Y2ggc3Rh
dGVtZW50IG11c3QgYmUgY29uc2lzdGVudCB3aXRoIHRoYXQgb2YgbGVuZ3RoT2ZDb250ZW50c0lu
Tm9kZS4KICAgICBzd2l0Y2ggKGNvbnRhaW5lci0+bm9kZVR5cGUoKSkgewogICAgIGNhc2UgTm9k
ZTo6VEVYVF9OT0RFOgogICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgpAQCAtODY4
LDMwICs2NjgsMTcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6Omluc2VydE5vZGUoUmVmPE5v
ZGU+JiYgbm9kZSkKIAogU3RyaW5nIFJhbmdlOjp0b1N0cmluZygpIGNvbnN0CiB7CisgICAgYXV0
byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqdGhpcyk7CiAgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOwotCi0gICAgTm9kZSogcGFzdExhc3QgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdDsgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIGF1dG8gdHlwZSA9IG5vZGUtPm5vZGVUeXBl
KCk7Ci0gICAgICAgIGlmICh0eXBlID09IE5vZGU6OlRFWFRfTk9ERSB8fCB0eXBlID09IE5vZGU6
OkNEQVRBX1NFQ1RJT05fTk9ERSkgewotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBub2Rl
ID09ICZzdGFydENvbnRhaW5lcigpID8gbV9zdGFydC5vZmZzZXQoKSA6IDBVOwotICAgICAgICAg
ICAgdW5zaWduZWQgZW5kID0gbm9kZSA9PSAmZW5kQ29udGFpbmVyKCkgPyBzdGQ6Om1heChzdGFy
dCwgbV9lbmQub2Zmc2V0KCkpIDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTdWJzdHJpbmcoZG93bmNhc3Q8Q2hhcmFjdGVy
RGF0YT4oKm5vZGUpLmRhdGEoKSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgICBmb3IgKGF1dG8m
IG5vZGUgOiBpbnRlcnNlY3RpbmdOb2RlcyhyYW5nZSkpIHsKKyAgICAgICAgaWYgKGlzPFRleHQ+
KG5vZGUpKSB7CisgICAgICAgICAgICBhdXRvIG9mZnNldFJhbmdlID0gY2hhcmFjdGVyRGF0YU9m
ZnNldFJhbmdlKHJhbmdlLCBub2RlKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3Vic3Ry
aW5nKGRvd25jYXN0PFRleHQ+KG5vZGUpLmRhdGEoKSwgb2Zmc2V0UmFuZ2Uuc3RhcnQsIG9mZnNl
dFJhbmdlLmVuZCAtIG9mZnNldFJhbmdlLnN0YXJ0KTsKICAgICAgICAgfQogICAgIH0KLQogICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBSYW5nZTo6dGV4dCgpIGNv
bnN0Ci17Ci0gICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgbGF5b3V0LCBzaW5jZSBwbGFpblRleHQg
dXNlcyBsaW5lIGJveGVzIGluIHRoZSByZW5kZXIgdHJlZS4KLSAgICAvLyBGSVhNRTogQXMgd2l0
aCBpbm5lclRleHQsIHdlJ2QgbGlrZSB0aGlzIHRvIHdvcmsgZXZlbiBpZiB0aGVyZSBhcmUgbm8g
cmVuZGVyIG9iamVjdHMuCi0gICAgc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLnVwZGF0ZUxh
eW91dCgpOwotCi0gICAgcmV0dXJuIHBsYWluVGV4dChtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpKTsK
LX0KLQogLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyN3aWRsLVJhbmdlLWNy
ZWF0ZUNvbnRleHR1YWxGcmFnbWVudC1Eb2N1bWVudEZyYWdtZW50LURPTVN0cmluZy1mcmFnbWVu
dAogRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6Y3JlYXRlQ29udGV4
dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwKQogewpAQCAtOTA4LDEyICs2OTUsNyBA
QCBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVudD4+IFJhbmdlOjpjcmVhdGVDb250ZXh0
dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBXZWJDb3JlOjpjcmVhdGVDb250
ZXh0dWFsRnJhZ21lbnQoKmVsZW1lbnQsIG1hcmt1cCwgQWxsb3dTY3JpcHRpbmdDb250ZW50QW5k
RG9Ob3RNYXJrQWxyZWFkeVN0YXJ0ZWQpOwogfQogCi12b2lkIFJhbmdlOjpkZXRhY2goKQotewot
ICAgIC8vIFRoaXMgaXMgbm93IGEgbm8tb3AgYXMgcGVyIHRoZSBET00gc3BlY2lmaWNhdGlvbi4K
LX0KLQotRXhjZXB0aW9uT3I8Tm9kZSo+IFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUmIG5v
ZGUsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK0V4Y2VwdGlvbk9yPE5vZGUqPiBSYW5nZTo6Y2hl
Y2tOb2RlT2Zmc2V0UGFpcihOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7CiAg
ICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKCkpIHsKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVO
VF9UWVBFX05PREU6CkBAIC05NDMsNTkgKzcyNSw1NSBAQCBFeGNlcHRpb25PcjxOb2RlKj4gUmFu
Z2U6OmNoZWNrTm9kZVdPZmZzZXQoTm9kZSYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdAog
CiBSZWY8UmFuZ2U+IFJhbmdlOjpjbG9uZVJhbmdlKCkgY29uc3QKIHsKLSAgICBhdXRvIHJlc3Vs
dCA9IGNyZWF0ZShvd25lckRvY3VtZW50KCkpOworICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlKG1f
b3duZXJEb2N1bWVudCk7CiAgICAgcmVzdWx0LT5zZXRTdGFydChzdGFydENvbnRhaW5lcigpLCBt
X3N0YXJ0Lm9mZnNldCgpKTsKICAgICByZXN1bHQtPnNldEVuZChlbmRDb250YWluZXIoKSwgbV9l
bmQub2Zmc2V0KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+
IFJhbmdlOjpzZXRTdGFydEFmdGVyKE5vZGUmIHJlZk5vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBS
YW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlJiBub2RlKQogewotICAgIGlmICghcmVmTm9kZS5wYXJl
bnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAo
IXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9y
IH07Ci0gICAgcmV0dXJuIHNldFN0YXJ0KCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5j
b21wdXRlTm9kZUluZGV4KCkgKyAxKTsKKyAgICByZXR1cm4gc2V0U3RhcnQoKnBhcmVudCwgbm9k
ZS5jb21wdXRlTm9kZUluZGV4KCkgKyAxKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6
OnNldEVuZEJlZm9yZShOb2RlJiByZWZOb2RlKQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNl
dEVuZEJlZm9yZShOb2RlJiBub2RlKQogewotICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkp
CisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07Ci0gICAg
cmV0dXJuIHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJ
bmRleCgpKTsKKyAgICByZXR1cm4gc2V0RW5kKCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRl
eCgpKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldEVuZEFmdGVyKE5vZGUmIHJl
Zk5vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0RW5kQWZ0ZXIoTm9kZSYgbm9kZSkK
IHsKLSAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKQorICAgIGF1dG8gcGFyZW50ID0gbm9k
ZS5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwotICAgIHJldHVybiBzZXRFbmQoKnJlZk5vZGUu
cGFyZW50Tm9kZSgpLCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSArIDEpOworICAgIHJldHVy
biBzZXRFbmQoKnBhcmVudCwgbm9kZS5jb21wdXRlTm9kZUluZGV4KCkgKyAxKTsKIH0KIAotRXhj
ZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNlbGVjdE5vZGUoTm9kZSYgcmVmTm9kZSkKK0V4Y2VwdGlv
bk9yPHZvaWQ+IFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFyZWZO
b2RlLnBhcmVudE5vZGUoKSkKKyAgICBhdXRvIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpOwor
ICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVU
eXBlRXJyb3IgfTsKLQotICAgIGlmICgmb3duZXJEb2N1bWVudCgpICE9ICZyZWZOb2RlLmRvY3Vt
ZW50KCkpCi0gICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUuZG9jdW1lbnQoKSk7Ci0KLSAgICB1
bnNpZ25lZCBpbmRleCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwotICAgIGF1dG8gcmVz
dWx0ID0gc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCBpbmRleCk7CisgICAgdW5zaWdu
ZWQgaW5kZXggPSBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICBhdXRvIHJlc3VsdCA9IHNl
dFN0YXJ0KCpwYXJlbnQsIGluZGV4KTsKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gc2V0
RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgaW5kZXggKyAxKTsKKyAgICByZXR1cm4gc2V0RW5k
KCpwYXJlbnQsIGluZGV4ICsgMSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZWxl
Y3ROb2RlQ29udGVudHMoTm9kZSYgcmVmTm9kZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpz
ZWxlY3ROb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAocmVmTm9kZS5pc0RvY3Vt
ZW50VHlwZU5vZGUoKSkKKyAgICBpZiAobm9kZS5pc0RvY3VtZW50VHlwZU5vZGUoKSkKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07CiAKLSAgICBpZiAo
Jm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1bWVudCgpKQotICAgICAgICBzZXREb2N1
bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwotCi0gICAgbV9zdGFydC5zZXRUb1N0YXJ0T2ZOb2Rl
KHJlZk5vZGUpOwotICAgIG1fZW5kLnNldFRvRW5kT2ZOb2RlKHJlZk5vZGUpOwotCisgICAgbV9z
dGFydC5zZXRUb0JlZm9yZUNvbnRlbnRzKG5vZGUpOworICAgIG1fZW5kLnNldFRvQWZ0ZXJDb250
ZW50cyhub2RlKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xMDUyLDMxICs4MzAsMTIgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnN1cnJvdW5kQ29udGVudHMoTm9kZSYgbmV3UGFyZW50
KQogICAgIHJldHVybiBzZWxlY3ROb2RlKG5ld1BhcmVudCk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZv
aWQ+IFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlJiByZWZOb2RlKQorRXhjZXB0aW9uT3I8dm9p
ZD4gUmFuZ2U6OnNldFN0YXJ0QmVmb3JlKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFyZWZOb2Rl
LnBhcmVudE5vZGUoKSkKKyAgICBhdXRvIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpOworICAg
IGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBl
RXJyb3IgfTsKLSAgICByZXR1cm4gc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCByZWZO
b2RlLmNvbXB1dGVOb2RlSW5kZXgoKSk7Ci19Ci0KLU5vZGUqIFJhbmdlOjpmaXJzdE5vZGUoKSBj
b25zdAotewotICAgIGlmIChzdGFydENvbnRhaW5lcigpLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkK
LSAgICAgICAgcmV0dXJuICZzdGFydENvbnRhaW5lcigpOwotICAgIGlmIChOb2RlKiBjaGlsZCA9
IHN0YXJ0Q29udGFpbmVyKCkudHJhdmVyc2VUb0NoaWxkQXQobV9zdGFydC5vZmZzZXQoKSkpCi0g
ICAgICAgIHJldHVybiBjaGlsZDsKLSAgICBpZiAoIW1fc3RhcnQub2Zmc2V0KCkpCi0gICAgICAg
IHJldHVybiAmc3RhcnRDb250YWluZXIoKTsKLSAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4oc3RhcnRDb250YWluZXIoKSk7Ci19Ci0KLU5vZGUqIFJhbmdlOjpw
YXN0TGFzdE5vZGUoKSBjb25zdAotewotICAgIGlmIChlbmRDb250YWluZXIoKS5pc0NoYXJhY3Rl
ckRhdGFOb2RlKCkpCi0gICAgICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbihlbmRDb250YWluZXIoKSk7Ci0gICAgaWYgKE5vZGUqIGNoaWxkID0gZW5kQ29udGFp
bmVyKCkudHJhdmVyc2VUb0NoaWxkQXQobV9lbmQub2Zmc2V0KCkpKQotICAgICAgICByZXR1cm4g
Y2hpbGQ7Ci0gICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKGVu
ZENvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gc2V0U3RhcnQoKnBhcmVudCwgbm9kZS5jb21wdXRl
Tm9kZUluZGV4KCkpOwogfQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpAQCAtMTEwMSwx
MjQgKzg2MCw0NCBAQCB2b2lkIFJhbmdlOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIs
IHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIH0KICNlbmRpZgogCi1ib29sIFJhbmdlOjpjb250YWlu
cyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKGNvbW1vbkFuY2VzdG9yQ29u
dGFpbmVyKCktPmRvY3VtZW50KCkgIT0gb3RoZXIuY29tbW9uQW5jZXN0b3JDb250YWluZXIoKS0+
ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBzdGFydFRvU3Rh
cnQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBvdGhlcik7
Ci0gICAgaWYgKHN0YXJ0VG9TdGFydC5oYXNFeGNlcHRpb24oKSB8fCBzdGFydFRvU3RhcnQucmVs
ZWFzZVJldHVyblZhbHVlKCkgPiAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
IGVuZFRvRW5kID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBvdGhl
cik7Ci0gICAgcmV0dXJuICFlbmRUb0VuZC5oYXNFeGNlcHRpb24oKSAmJiBlbmRUb0VuZC5yZWxl
YXNlUmV0dXJuVmFsdWUoKSA+PSAwOwotfQotCi1ib29sIFJhbmdlOjpjb250YWlucyhjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAotewotICAgIGF1dG8gcG9zaXRpb25SYW5n
ZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7Ci0gICAgaWYgKCFwb3NpdGlvblJhbmdlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5n
ZSgqcG9zaXRpb25SYW5nZSkpOwotfQotCi1ib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdl
KiBhLCBjb25zdCBSYW5nZSogYikKLXsKLSAgICBpZiAoYSA9PSBiKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gJmEtPnN0YXJ0Q29udGFpbmVyKCkgPT0gJmItPnN0YXJ0Q29udGFpbmVyKCkgJiYgYS0+c3Rh
cnRPZmZzZXQoKSA9PSBiLT5zdGFydE9mZnNldCgpICYmICZhLT5lbmRDb250YWluZXIoKSA9PSAm
Yi0+ZW5kQ29udGFpbmVyKCkgJiYgYS0+ZW5kT2Zmc2V0KCkgPT0gYi0+ZW5kT2Zmc2V0KCk7Ci19
Ci0KLWJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSogYSwgY29uc3QgUmFuZ2UqIGIpCi17
Ci0gICAgaWYgKCFhIHx8ICFiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYSA9
PSBiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghY29ubmVjdGVkSW5TYW1lVHJl
ZVNjb3BlKGEtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCksIGItPmNvbW1vbkFuY2VzdG9yQ29u
dGFpbmVyKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzaG9ydCBzdGFydFRvU3Rh
cnQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCAqYiku
cmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgc2hvcnQgZW5kVG9FbmQgPSBhLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsICpiKS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsK
LQotICAgIC8vIEZpcnN0IHJhbmdlIGNvbnRhaW5zIHRoZSBzZWNvbmQgcmFuZ2UuCi0gICAgaWYg
KHN0YXJ0VG9TdGFydCA8PSAwICYmIGVuZFRvRW5kID49IDApCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgLy8gRW5kIG9mIGZpcnN0IHJhbmdlIGlzIGluc2lkZSBzZWNvbmQgcmFuZ2UuCi0g
ICAgaWYgKGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqYiku
cmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMCAmJiBlbmRUb0VuZCA8PSAwKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIC8vIFN0YXJ0IG9mIGZpcnN0IHJhbmdlIGlzIGluc2lkZSBzZWNvbmQg
cmFuZ2UuCi0gICAgaWYgKHN0YXJ0VG9TdGFydCA+PSAwICYmIGEtPmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqYikucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBp
bmxpbmUgdm9pZCBib3VuZGFyeU5vZGVDaGlsZHJlbkNoYW5nZWQoUmFuZ2VCb3VuZGFyeVBvaW50
JiBib3VuZGFyeSwgQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQogewotICAgIGlmICghYm91bmRh
cnkuY2hpbGRCZWZvcmUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChib3VuZGFyeS5jb250
YWluZXIoKSAhPSAmY29udGFpbmVyKQotICAgICAgICByZXR1cm47Ci0gICAgYm91bmRhcnkuaW52
YWxpZGF0ZU9mZnNldCgpOworICAgIGlmIChib3VuZGFyeS5jaGlsZEJlZm9yZSgpICYmICZib3Vu
ZGFyeS5jb250YWluZXIoKSA9PSAmY29udGFpbmVyKQorICAgICAgICBib3VuZGFyeS5pbnZhbGlk
YXRlT2Zmc2V0KCk7CiB9CiAKIHZvaWQgUmFuZ2U6Om5vZGVDaGlsZHJlbkNoYW5nZWQoQ29udGFp
bmVyTm9kZSYgY29udGFpbmVyKQogewotICAgIEFTU0VSVCgmY29udGFpbmVyLmRvY3VtZW50KCkg
PT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZjb250YWluZXIuZG9jdW1lbnQoKSA9
PSBtX293bmVyRG9jdW1lbnQucHRyKCkpOwogICAgIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuQ2hhbmdl
ZChtX3N0YXJ0LCBjb250YWluZXIpOwogICAgIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuQ2hhbmdlZCht
X2VuZCwgY29udGFpbmVyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5Tm9kZUNo
aWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBDb250YWlu
ZXJOb2RlJiBjb250YWluZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlOb2RlQ2hpbGRy
ZW5XaWxsQmVSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIENvbnRhaW5lck5v
ZGUmIGNvbnRhaW5lck9mTm9kZXNUb0JlUmVtb3ZlZCkKIHsKLSAgICBmb3IgKE5vZGUqIG5vZGVU
b0JlUmVtb3ZlZCA9IGNvbnRhaW5lci5maXJzdENoaWxkKCk7IG5vZGVUb0JlUmVtb3ZlZDsgbm9k
ZVRvQmVSZW1vdmVkID0gbm9kZVRvQmVSZW1vdmVkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAg
IGlmIChib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09IG5vZGVUb0JlUmVtb3ZlZCkgewotICAgICAg
ICAgICAgYm91bmRhcnkuc2V0VG9TdGFydE9mTm9kZShjb250YWluZXIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChOb2RlKiBuID0gYm91bmRhcnkuY29u
dGFpbmVyKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChuID09
IG5vZGVUb0JlUmVtb3ZlZCkgewotICAgICAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRP
Zk5vZGUoY29udGFpbmVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGNvbnRhaW5lck9mTm9kZXNUb0JlUmVtb3ZlZC5j
b250YWlucygmYm91bmRhcnkuY29udGFpbmVyKCkpKQorICAgICAgICBib3VuZGFyeS5zZXRUb0Jl
Zm9yZUNvbnRlbnRzKGNvbnRhaW5lck9mTm9kZXNUb0JlUmVtb3ZlZCk7CiB9CiAKIHZvaWQgUmFu
Z2U6Om5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQog
ewotICAgIEFTU0VSVCgmY29udGFpbmVyLmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7
CisgICAgQVNTRVJUKCZjb250YWluZXIuZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQucHRy
KCkpOwogICAgIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChtX3N0YXJ0LCBjb250
YWluZXIpOwogICAgIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChtX2VuZCwgY29u
dGFpbmVyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92
ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYgbm9kZVRvQmVSZW1vdmVkKQog
ewotICAgIGlmIChib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09ICZub2RlVG9CZVJlbW92ZWQpIHsK
KyAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSAmbm9kZVRvQmVSZW1vdmVkKQogICAg
ICAgICBib3VuZGFyeS5jaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGZvciAoTm9kZSogbiA9IGJvdW5kYXJ5LmNvbnRhaW5lcigpOyBuOyBu
ID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuID09ICZub2RlVG9CZVJlbW92ZWQp
IHsKLSAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvQmVmb3JlQ2hpbGQobm9kZVRvQmVSZW1vdmVk
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBlbHNlIGlmIChu
b2RlVG9CZVJlbW92ZWQuY29udGFpbnMoJmJvdW5kYXJ5LmNvbnRhaW5lcigpKSkKKyAgICAgICAg
Ym91bmRhcnkuc2V0VG9CZWZvcmVOb2RlKG5vZGVUb0JlUmVtb3ZlZCk7CiB9CiAKIHZvaWQgUmFu
Z2U6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiB7Ci0gICAgQVNTRVJUKCZub2RlLmRv
Y3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7Ci0gICAgQVNTRVJUKCZub2RlICE9ICZvd25l
ckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmbm9kZS5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1
bWVudC5wdHIoKSk7CisgICAgQVNTRVJUKCZub2RlICE9IG1fb3duZXJEb2N1bWVudC5wdHIoKSk7
CiAgICAgQVNTRVJUKG5vZGUucGFyZW50Tm9kZSgpKTsKICAgICBib3VuZGFyeU5vZGVXaWxsQmVS
ZW1vdmVkKG1fc3RhcnQsIG5vZGUpOwogICAgIGJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQobV9l
bmQsIG5vZGUpOwpAQCAtMTIyNiw3ICs5MDUsNyBAQCB2b2lkIFJhbmdlOjpub2RlV2lsbEJlUmVt
b3ZlZChOb2RlJiBub2RlKQogCiBib29sIFJhbmdlOjpwYXJlbnRsZXNzTm9kZU1vdmVkVG9OZXdE
b2N1bWVudEFmZmVjdHNSYW5nZShOb2RlJiBub2RlKQogewotICAgIHJldHVybiBub2RlLmNvbnRh
aW5zSW5jbHVkaW5nU2hhZG93RE9NKG1fc3RhcnQuY29udGFpbmVyKCkpOworICAgIHJldHVybiBu
b2RlLmNvbnRhaW5zSW5jbHVkaW5nU2hhZG93RE9NKCZtX3N0YXJ0LmNvbnRhaW5lcigpKTsKIH0K
IAogdm9pZCBSYW5nZTo6dXBkYXRlUmFuZ2VGb3JQYXJlbnRsZXNzTm9kZU1vdmVkVG9OZXdEb2N1
bWVudChOb2RlJiBub2RlKQpAQCAtMTIzOCw3ICs5MTcsNyBAQCB2b2lkIFJhbmdlOjp1cGRhdGVS
YW5nZUZvclBhcmVudGxlc3NOb2RlTW92ZWRUb05ld0RvY3VtZW50KE5vZGUmIG5vZGUpCiAKIHN0
YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRJbnNlcnRlZChSYW5nZUJvdW5kYXJ5UG9pbnQm
IGJvdW5kYXJ5LCBOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJnRleHQpCisgICAgaWYgKCZib3Vu
ZGFyeS5jb250YWluZXIoKSAhPSAmdGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVk
IGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnkub2Zmc2V0KCk7CiAgICAgaWYgKG9mZnNldCA+PSBi
b3VuZGFyeU9mZnNldCkKQEAgLTEyNDgsMTQgKzkyNywxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
Ym91bmRhcnlUZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYg
dGV4dAogCiB2b2lkIFJhbmdlOjp0ZXh0SW5zZXJ0ZWQoTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0g
Jm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0gbV9vd25l
ckRvY3VtZW50LnB0cigpKTsKICAgICBib3VuZGFyeVRleHRJbnNlcnRlZChtX3N0YXJ0LCB0ZXh0
LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgYm91bmRhcnlUZXh0SW5zZXJ0ZWQobV9lbmQsIHRleHQs
IG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dFJl
bW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYgdGV4dCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigp
ICE9ICZ0ZXh0KQorICAgIGlmICgmYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJnRleHQpCiAgICAg
ICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNl
dCgpOwogICAgIGlmIChvZmZzZXQgPj0gYm91bmRhcnlPZmZzZXQpCkBAIC0xMjY4LDIzICs5NDcs
MjMgQEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dFJlbW92ZWQoUmFuZ2VCb3VuZGFy
eVBvaW50JiBib3VuZGFyeSwgTm9kZSYgdGV4dCwKIAogdm9pZCBSYW5nZTo6dGV4dFJlbW92ZWQo
Tm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQVNT
RVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZ0
ZXh0LmRvY3VtZW50KCkgPT0gbV9vd25lckRvY3VtZW50LnB0cigpKTsKICAgICBib3VuZGFyeVRl
eHRSZW1vdmVkKG1fc3RhcnQsIHRleHQsIG9mZnNldCwgbGVuZ3RoKTsKICAgICBib3VuZGFyeVRl
eHRSZW1vdmVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc01lcmdlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5k
YXJ5LCBOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgaWYg
KGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUubm9kZSgpKQorICAgIGlmICgmYm91bmRh
cnkuY29udGFpbmVyKCkgPT0gb2xkTm9kZS5ub2RlKCkpCiAgICAgICAgIGJvdW5kYXJ5LnNldCgq
b2xkTm9kZS5ub2RlKCktPnByZXZpb3VzU2libGluZygpLCBib3VuZGFyeS5vZmZzZXQoKSArIG9m
ZnNldCwgMCk7Ci0gICAgZWxzZSBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gb2xkTm9kZS5u
b2RlKCktPnBhcmVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5kYXJ5Lm9mZnNldCgp
KSA9PSBvbGROb2RlLmluZGV4KCkpCisgICAgZWxzZSBpZiAoJmJvdW5kYXJ5LmNvbnRhaW5lcigp
ID09IG9sZE5vZGUubm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgYm91bmRhcnkub2Zmc2V0KCkgPT0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9sZE5vZGUuaW5kZXgoKSkpCiAgICAgICAgIGJvdW5kYXJ5
LnNldCgqb2xkTm9kZS5ub2RlKCktPnByZXZpb3VzU2libGluZygpLCBvZmZzZXQsIDApOwogfQog
CiB2b2lkIFJhbmdlOjp0ZXh0Tm9kZXNNZXJnZWQoTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5z
aWduZWQgb2Zmc2V0KQogewogICAgIEFTU0VSVChvbGROb2RlLm5vZGUoKSk7Ci0gICAgQVNTRVJU
KCZvbGROb2RlLm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKKyAgICBB
U1NFUlQoJm9sZE5vZGUubm9kZSgpLT5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1bWVudC5wdHIo
KSk7CiAgICAgQVNTRVJUKG9sZE5vZGUubm9kZSgpLT5wYXJlbnROb2RlKCkpOwogICAgIEFTU0VS
VChvbGROb2RlLm5vZGUoKS0+aXNUZXh0Tm9kZSgpKTsKICAgICBBU1NFUlQob2xkTm9kZS5ub2Rl
KCktPnByZXZpb3VzU2libGluZygpKTsKQEAgLTEyOTYsNyArOTc1LDcgQEAgdm9pZCBSYW5nZTo6
dGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkK
IHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1NwbGl0KFJhbmdlQm91bmRhcnlQ
b2ludCYgYm91bmRhcnksIFRleHQmIG9sZE5vZGUpCiB7CiAgICAgYXV0byogcGFyZW50ID0gb2xk
Tm9kZS5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09ICZvbGRO
b2RlKSB7CisgICAgaWYgKCZib3VuZGFyeS5jb250YWluZXIoKSA9PSAmb2xkTm9kZSkgewogICAg
ICAgICB1bnNpZ25lZCBzcGxpdE9mZnNldCA9IG9sZE5vZGUubGVuZ3RoKCk7CiAgICAgICAgIHVu
c2lnbmVkIGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnkub2Zmc2V0KCk7CiAgICAgICAgIGlmIChi
b3VuZGFyeU9mZnNldCA+IHNwbGl0T2Zmc2V0KSB7CkBAIC0xMzA5LDE2ICs5ODgsMTYgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQoUmFuZ2VCb3VuZGFyeVBvaW50
JiBib3VuZGFyeSwgVGV4dCYgb2wKICAgICB9CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gcGFyZW50ICYmIGJvdW5kYXJ5
LmNoaWxkQmVmb3JlKCkgPT0gJm9sZE5vZGUpIHsKKyAgICBpZiAoJmJvdW5kYXJ5LmNvbnRhaW5l
cigpID09IHBhcmVudCAmJiBib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09ICZvbGROb2RlKSB7CiAg
ICAgICAgIGF1dG8qIG5ld0NoaWxkID0gb2xkTm9kZS5uZXh0U2libGluZygpOwogICAgICAgICBB
U1NFUlQobmV3Q2hpbGQpOwotICAgICAgICBib3VuZGFyeS5zZXRUb0FmdGVyQ2hpbGQoKm5ld0No
aWxkKTsKKyAgICAgICAgYm91bmRhcnkuc2V0VG9BZnRlck5vZGUoKm5ld0NoaWxkKTsKICAgICB9
CiB9CiAKIHZvaWQgUmFuZ2U6OnRleHROb2RlU3BsaXQoVGV4dCYgb2xkTm9kZSkKIHsKLSAgICBB
U1NFUlQoJm9sZE5vZGUuZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKKyAgICBBU1NF
UlQoJm9sZE5vZGUuZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQucHRyKCkpOwogICAgIEFT
U0VSVCghb2xkTm9kZS5wYXJlbnROb2RlKCkgfHwgb2xkTm9kZS5uZXh0U2libGluZygpKTsKICAg
ICBBU1NFUlQoIW9sZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5vZGUubmV4dFNpYmxpbmcoKS0+
aXNUZXh0Tm9kZSgpKTsKICAgICBib3VuZGFyeVRleHROb2Rlc1NwbGl0KG1fc3RhcnQsIG9sZE5v
ZGUpOwpAQCAtMTQxMyw3ICsxMDkyLDcgQEAgUmVmUHRyPFJhbmdlPiBjcmVhdGVMaXZlUmFuZ2Uo
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIAogdm9pZCBzaG93VHJlZShjb25z
dCBXZWJDb3JlOjpSYW5nZSogcmFuZ2UpCiB7Ci0gICAgaWYgKHJhbmdlICYmIHJhbmdlLT5ib3Vu
ZGFyeVBvaW50c1ZhbGlkKCkpIHsKKyAgICBpZiAocmFuZ2UpIHsKICAgICAgICAgcmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCkuc2hvd1RyZWVBbmRNYXJrKCZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwg
IlMiLCAmcmFuZ2UtPmVuZENvbnRhaW5lcigpLCAiRSIpOwogICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgInN0YXJ0IG9mZnNldDogJWQsIGVuZCBvZmZzZXQ6ICVkXG4iLCByYW5nZS0+c3RhcnRPZmZz
ZXQoKSwgcmFuZ2UtPmVuZE9mZnNldCgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IDRkMWNk
NGYxMzY3NDZjYmY0NDJmZDY4OWQ2OTE4YzNjNWZkOGU5MDQuLjFlYzVhZWQ0YzUwMDBmN2Y1Yzkz
NDE3NWI3ZTkyM2NjYmIwODQ0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0zMyw2MSArMzMsNjAgQEAg
Y2xhc3MgRE9NUmVjdExpc3Q7CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgTm9kZVdp
dGhJbmRleDsKIGNsYXNzIFRleHQ7Ci1jbGFzcyBWaXNpYmxlUG9zaXRpb247CiAKIHN0cnVjdCBT
aW1wbGVSYW5nZTsKIAotLy8gRklYTUU6IFJlbmFtZSB0byBMaXZlUmFuZ2UsIHdoaWxlIGxlYXZp
bmcgdGhlIERPTS1leHBvc2VkIG5hbWUgYXMgUmFuZ2UuCiBjbGFzcyBSYW5nZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFJhbmdlPiB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZjxSYW5nZT4gY3JlYXRlKERvY3VtZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgflJhbmdlKCk7
CiAKLSAgICBEb2N1bWVudCYgb3duZXJEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJE
b2N1bWVudDsgfQotCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIoKSBjb25zdCB7IEFTU0VSVCht
X3N0YXJ0LmNvbnRhaW5lcigpKTsgcmV0dXJuICptX3N0YXJ0LmNvbnRhaW5lcigpOyB9CisgICAg
Tm9kZSYgc3RhcnRDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LmNvbnRhaW5lcigp
OyB9CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Lm9m
ZnNldCgpOyB9Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyKCkgY29uc3QgeyBBU1NFUlQobV9lbmQu
Y29udGFpbmVyKCkpOyByZXR1cm4gKm1fZW5kLmNvbnRhaW5lcigpOyB9CisgICAgTm9kZSYgZW5k
Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV9lbmQuY29udGFpbmVyKCk7IH0KICAgICB1bnNp
Z25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZC5vZmZzZXQoKTsgfQogICAgIGJv
b2wgY29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydCA9PSBtX2VuZDsgfQotCiAgICAg
Tm9kZSogY29tbW9uQW5jZXN0b3JDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBjb21tb25JbmNs
dXNpdmVBbmNlc3RvcihzdGFydENvbnRhaW5lcigpLCBlbmRDb250YWluZXIoKSkuZ2V0KCk7IH0K
LSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdGFydChSZWY8Tm9kZT4m
JiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8dm9pZD4gc2V0RW5kKFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0
KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0KFJlZjxO
b2RlPiYmLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9y
PHZvaWQ+IHNldEVuZChSZWY8Tm9kZT4mJiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdGFydEJlZm9yZShOb2RlJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnRBZnRlcihOb2RlJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RW5kQmVmb3JlKE5vZGUmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRFbmRBZnRlcihOb2RlJik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xsYXBzZShib29sIHRvU3RhcnQpOwotICAgIFdFQkNP
UkVfRVhQT1JUIEV4Y2VwdGlvbk9yPGJvb2w+IGlzUG9pbnRJblJhbmdlKE5vZGUmIHJlZk5vZGUs
IHVuc2lnbmVkIG9mZnNldCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8c2hvcnQ+
IGNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwotICAg
IGVudW0gQ29tcGFyZVJlc3VsdHMgeyBOT0RFX0JFRk9SRSwgTk9ERV9BRlRFUiwgTk9ERV9CRUZP
UkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lERSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlv
bk9yPENvbXBhcmVSZXN1bHRzPiBjb21wYXJlTm9kZShOb2RlJiByZWZOb2RlKSBjb25zdDsKLSAg
ICBlbnVtIENvbXBhcmVIb3cgeyBTVEFSVF9UT19TVEFSVCwgU1RBUlRfVE9fRU5ELCBFTkRfVE9f
RU5ELCBFTkRfVE9fU1RBUlQgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxzaG9y
dD4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKENvbXBhcmVIb3csIGNvbnN0IFJhbmdlJiBzb3VyY2VS
YW5nZSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8c2hvcnQ+IGNvbXBh
cmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKHVuc2lnbmVkIHNob3J0IGNvbXBhcmVIb3csIGNv
bnN0IFJhbmdlJiBzb3VyY2VSYW5nZSkgY29uc3Q7Ci0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPHNo
b3J0PiBjb21wYXJlQm91bmRhcnlQb2ludHMoTm9kZSogY29udGFpbmVyQSwgdW5zaWduZWQgb2Zm
c2V0QSwgTm9kZSogY29udGFpbmVyQiwgdW5zaWduZWQgb2Zmc2V0Qik7Ci0gICAgc3RhdGljIEV4
Y2VwdGlvbk9yPHNob3J0PiBjb21wYXJlQm91bmRhcnlQb2ludHMoY29uc3QgUmFuZ2VCb3VuZGFy
eVBvaW50JiBib3VuZGFyeUEsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlCKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGJvdW5kYXJ5UG9pbnRzVmFsaWQoKSBjb25zdDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjxib29sPiBpbnRlcnNlY3RzTm9kZShOb2RlJiBy
ZWZOb2RlKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZWxl
Y3ROb2RlKE5vZGUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZWxl
Y3ROb2RlQ29udGVudHMoTm9kZSYpOworCisgICAgZW51bSBDb21wYXJlSG93IDogdW5zaWduZWQg
c2hvcnQgeyBTVEFSVF9UT19TVEFSVCwgU1RBUlRfVE9fRU5ELCBFTkRfVE9fRU5ELCBFTkRfVE9f
U1RBUlQgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxzaG9ydD4gY29tcGFyZUJv
dW5kYXJ5UG9pbnRzKHVuc2lnbmVkIHNob3J0IGNvbXBhcmVIb3csIGNvbnN0IFJhbmdlJiBzb3Vy
Y2VSYW5nZSkgY29uc3Q7CisKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBk
ZWxldGVDb250ZW50cygpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxEb2N1
bWVudEZyYWdtZW50Pj4gZXh0cmFjdENvbnRlbnRzKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhj
ZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBjbG9uZUNvbnRlbnRzKCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gaW5zZXJ0Tm9kZShSZWY8Tm9kZT4mJik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc3Vycm91bmRDb250ZW50cyhOb2RlJik7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBTdHJpbmcgdGV4dCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZjxSYW5nZT4gY2xvbmVSYW5nZSgpIGNvbnN0OworICAgIHN0YXRpYyB2b2lkIGRldGFjaCgpIHsg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+
PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiBodG1sKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBFeGNlcHRpb25Pcjxib29sPiBpc1BvaW50SW5SYW5nZShOb2RlJiwgdW5zaWdu
ZWQgb2Zmc2V0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxzaG9ydD4gY29tcGFy
ZVBvaW50KE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgaW50ZXJzZWN0c05vZGUoTm9kZSYpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkZXRhY2goKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IGNsb25lUmFuZ2Uo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0QWZ0ZXIoTm9kZSYp
OwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZEJlZm9yZShOb2Rl
Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RW5kQWZ0ZXIoTm9k
ZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNlbGVjdE5vZGUoTm9k
ZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNlbGVjdE5vZGVDb250
ZW50cyhOb2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc3Vycm91
bmRDb250ZW50cyhOb2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4g
c2V0U3RhcnRCZWZvcmUoTm9kZSYpOworICAgIFJlZjxET01SZWN0TGlzdD4gZ2V0Q2xpZW50UmVj
dHMoKSBjb25zdDsKKyAgICBSZWY8RE9NUmVjdD4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgY29u
c3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVu
dD4+IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIGZyYWdtZW50KTsKKwor
ICAgIC8vIEV4cGFuZCByYW5nZSB0byBhIHVuaXQgKHdvcmQgb3Igc2VudGVuY2Ugb3IgYmxvY2sg
b3IgZG9jdW1lbnQpIGJvdW5kYXJ5LgorICAgIC8vIFBsZWFzZSByZWZlciB0byBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzIgY29tbWVudCAjNSBmb3IgZGV0YWls
cy4KKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBleHBhbmQoY29uc3QgU3Ry
aW5nJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBOb2RlKiBmaXJzdE5vZGUoKSBjb25zdDsKKyAg
ICBlbnVtIENvbXBhcmVSZXN1bHRzIDogdWludDhfdCB7IE5PREVfQkVGT1JFLCBOT0RFX0FGVEVS
LCBOT0RFX0JFRk9SRV9BTkRfQUZURVIsIE5PREVfSU5TSURFIH07CisgICAgV0VCQ09SRV9FWFBP
UlQgRXhjZXB0aW9uT3I8Q29tcGFyZVJlc3VsdHM+IGNvbXBhcmVOb2RlKE5vZGUmKSBjb25zdDsK
IAogICAgIHZvaWQgbm9kZUNoaWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2RlJik7CiAgICAgdm9p
ZCBub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5lck5vZGUmKTsKQEAgLTEwMCw0MCAr
OTksMjQgQEAgcHVibGljOgogICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5kZXgm
IG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7CiAgICAgdm9pZCB0ZXh0Tm9kZVNwbGl0KFRleHQm
IG9sZE5vZGUpOwogCi0gICAgLy8gRXhwYW5kIHJhbmdlIHRvIGEgdW5pdCAod29yZCBvciBzZW50
ZW5jZSBvciBibG9jayBvciBkb2N1bWVudCkgYm91bmRhcnkuCi0gICAgLy8gUGxlYXNlIHJlZmVy
IHRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzYzMiBjb21tZW50
ICM1IAotICAgIC8vIGZvciBkZXRhaWxzLgotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9y
PHZvaWQ+IGV4cGFuZChjb25zdCBTdHJpbmcmKTsKLQotICAgIFJlZjxET01SZWN0TGlzdD4gZ2V0
Q2xpZW50UmVjdHMoKSBjb25zdDsKLSAgICBSZWY8RE9NUmVjdD4gZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCkgY29uc3Q7Ci0KICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCiAgICAgdm9pZCBmb3Jt
YXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAjZW5k
aWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnMoY29uc3QgUmFuZ2UmKSBjb25z
dDsKLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0OwotCi0g
ICAgZW51bSBBY3Rpb25UeXBlIHsgRGVsZXRlLCBFeHRyYWN0LCBDbG9uZSB9OworICAgIGVudW0g
QWN0aW9uVHlwZSA6IHVpbnQ4X3QgeyBEZWxldGUsIEV4dHJhY3QsIENsb25lIH07CiAKIHByaXZh
dGU6CiAgICAgZXhwbGljaXQgUmFuZ2UoRG9jdW1lbnQmKTsKIAotICAgIHZvaWQgc2V0RG9jdW1l
bnQoRG9jdW1lbnQmKTsKLSAgICBFeGNlcHRpb25PcjxOb2RlKj4gY2hlY2tOb2RlV09mZnNldChO
b2RlJiwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZURvY3VtZW50KCk7
CisgICAgRXhjZXB0aW9uT3I8Tm9kZSo+IGNoZWNrTm9kZU9mZnNldFBhaXIoTm9kZSYsIHVuc2ln
bmVkIG9mZnNldCkgY29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8UmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+PiBwcm9jZXNzQ29udGVudHMoQWN0aW9uVHlwZSk7CiAKLSAgICBOb2RlKiBwYXN0TGFzdE5v
ZGUoKSBjb25zdDsKLQogICAgIFJlZjxEb2N1bWVudD4gbV9vd25lckRvY3VtZW50OwogICAgIFJh
bmdlQm91bmRhcnlQb2ludCBtX3N0YXJ0OwogICAgIFJhbmdlQm91bmRhcnlQb2ludCBtX2VuZDsK
IH07CiAKLVdFQkNPUkVfRVhQT1JUIGJvb2wgYXJlUmFuZ2VzRXF1YWwoY29uc3QgUmFuZ2UqLCBj
b25zdCBSYW5nZSopOwotV0VCQ09SRV9FWFBPUlQgYm9vbCByYW5nZXNPdmVybGFwKGNvbnN0IFJh
bmdlKiwgY29uc3QgUmFuZ2UqKTsKLQogV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgbWFrZVNp
bXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBtYWtl
U2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5p
ZGwKaW5kZXggMTU0ZTg5YzY2ZTU3YTJlYmE4MzQwNjY2MWI2YTUzYzMzYTI0OTBiYS4uYTA1YzE0
MzZjNThiODMwMjBlMjYwOTk5N2IzNjZhNjE0ZjgwNjdiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCkBA
IC0yNSw5ICsyNSw5IEBACiAgICAgW0NhbGxXaXRoPURvY3VtZW50XSBjb25zdHJ1Y3RvcigpOwog
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgc3RhcnRDb250YWluZXI7Ci0gICAgcmVhZG9u
bHkgYXR0cmlidXRlIGxvbmcgc3RhcnRPZmZzZXQ7IC8vIEZJWE1FOiBTaG91bGQgYmUgdW5zaWdu
ZWQgbG9uZy4KKyAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzdGFydE9mZnNl
dDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgTm9kZSBlbmRDb250YWluZXI7Ci0gICAgcmVhZG9u
bHkgYXR0cmlidXRlIGxvbmcgZW5kT2Zmc2V0OyAvLyBGSVhNRTogU2hvdWxkIGJlIHVuc2lnbmVk
IGxvbmcuCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgZW5kT2Zmc2V0Owog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGNvbGxhcHNlZDsKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgTm9kZSBjb21tb25BbmNlc3RvckNvbnRhaW5lcjsKIApAQCAtNDUsNyArNDUsNyBA
QAogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNUQVJUX1RPX0VORCA9IDE7CiAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgRU5EX1RPX0VORCA9IDI7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
RU5EX1RPX1NUQVJUID0gMzsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb24sIEltcGxlbWVudGVkQXM9
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3NdIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBv
aW50cyh1bnNpZ25lZCBzaG9ydCBob3csIFJhbmdlIHNvdXJjZVJhbmdlKTsKKyAgICBbTWF5VGhy
b3dFeGNlcHRpb25dIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBvaW50cyh1bnNpZ25lZCBzaG9ydCBo
b3csIFJhbmdlIHNvdXJjZVJhbmdlKTsKIAogICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNl
cHRpb25dIHZvaWQgZGVsZXRlQ29udGVudHMoKTsKICAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93
RXhjZXB0aW9uLCBOZXdPYmplY3RdIERvY3VtZW50RnJhZ21lbnQgZXh0cmFjdENvbnRlbnRzKCk7
CkBAIC01OSw3ICs1OSw3IEBACiAgICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFuIGlzUG9p
bnRJblJhbmdlKE5vZGUgbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwogICAgIFtNYXlUaHJv
d0V4Y2VwdGlvbl0gc2hvcnQgY29tcGFyZVBvaW50KE5vZGUgbm9kZSwgdW5zaWduZWQgbG9uZyBv
ZmZzZXQpOwogCi0gICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFuIGludGVyc2VjdHNOb2Rl
KE5vZGUgbm9kZSk7CisgICAgYm9vbGVhbiBpbnRlcnNlY3RzTm9kZShOb2RlIG5vZGUpOwogCiAg
ICAgc3RyaW5naWZpZXI7CiAKQEAgLTcwLDEwICs3MCwxMSBAQAogICAgIC8vIEV4dGVuc2lvbnMg
ZnJvbSBET01QYXJzaW5nIGFuZCBTZXJpYWxpemF0aW9uIHNwZWNpZmljYXRpb24gKGh0dHBzOi8v
dzNjLmdpdGh1Yi5pby9ET00tUGFyc2luZy8jZXh0ZW5zaW9ucy10by10aGUtcmFuZ2UtaW50ZXJm
YWNlKS4KICAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uLCBOZXdPYmplY3RdIERv
Y3VtZW50RnJhZ21lbnQgY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KERPTVN0cmluZyBmcmFnbWVu
dCk7CiAKLSAgICAvLyBOb24gc3RhbmRhcmQuCi0gICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lk
IGV4cGFuZChvcHRpb25hbCBET01TdHJpbmcgdW5pdCA9ICIiKTsKKyAgICAvLyBOb24tc3RhbmRh
cmQgZXh0ZW5zaW9uLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxseSBkcm9wIHRo
aXMgc2luY2Ugbm8gb3RoZXIgYnJvd3NlciBzdXBwb3J0cyBpdC4KKyAgICBbTWF5VGhyb3dFeGNl
cHRpb25dIHZvaWQgZXhwYW5kKG9wdGlvbmFsIERPTVN0cmluZyB1bml0KTsKIAotICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbGlrZWx5IGRyb3AgdGhpcyBzaW5jZSBubyBvdGhlciBicm93c2VyIHN1
cHBvcnRzIGl0LgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbGlrZWx5IGRyb3AgdGhpcyBzaW5j
ZSB3ZSBhZGRlZCBpdCBmb3IgRmlyZWZveCBpbnRlcm9wZXJhYmlsaXR5LCBidXQgbm93IG5vIG90
aGVyIGJyb3dzZXIgc3VwcG9ydHMgaXQuCiAgICAgW01heVRocm93RXhjZXB0aW9uXSBzaG9ydCBj
b21wYXJlTm9kZShOb2RlIG5vZGUpOwogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PREVfQkVG
T1JFID0gMDsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT0RFX0FGVEVSID0gMTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaAppbmRleCBiMjQ0MDk4NDc4Yjc3NzdmMDRj
ZGY2OGQ2MTkyOWJkYzg4NDU1MTRmLi5kMDAzNDRkOWY2NjA0YjljZWQwYWVmZWI5ZTdlOGQzZDc5
ODQzYWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCkBAIC0zMiw0
MyArMzIsMzkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYW5nZUJvdW5kYXJ5UG9p
bnQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFJhbmdlQm91bmRhcnlQb2ludChOb2RlKiBjb250
YWluZXIpOworICAgIGV4cGxpY2l0IFJhbmdlQm91bmRhcnlQb2ludChOb2RlJiBjb250YWluZXIp
OwogCi0gICAgTm9kZSogY29udGFpbmVyKCkgY29uc3Q7CisgICAgTm9kZSYgY29udGFpbmVyKCkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3Q7CiAgICAgTm9kZSogY2hpbGRCZWZv
cmUoKSBjb25zdDsKIAotICAgIHZvaWQgY2xlYXIoKTsKLQogICAgIHZvaWQgc2V0KFJlZjxOb2Rl
PiYmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBjaGlsZEJlZm9yZSk7CiAgICAg
dm9pZCBzZXRPZmZzZXQodW5zaWduZWQpOwogCi0gICAgdm9pZCBzZXRUb0JlZm9yZUNoaWxkKE5v
ZGUmKTsKLSAgICB2b2lkIHNldFRvQWZ0ZXJDaGlsZChOb2RlJik7Ci0gICAgdm9pZCBzZXRUb1N0
YXJ0T2ZOb2RlKFJlZjxOb2RlPiYmKTsKLSAgICB2b2lkIHNldFRvRW5kT2ZOb2RlKFJlZjxOb2Rl
PiYmKTsKKyAgICB2b2lkIHNldFRvQmVmb3JlTm9kZShOb2RlJik7CisgICAgdm9pZCBzZXRUb0Fm
dGVyTm9kZShOb2RlJik7CisgICAgdm9pZCBzZXRUb0JlZm9yZUNvbnRlbnRzKFJlZjxOb2RlPiYm
KTsKKyAgICB2b2lkIHNldFRvQWZ0ZXJDb250ZW50cyhSZWY8Tm9kZT4mJik7CiAKICAgICB2b2lk
IGNoaWxkQmVmb3JlV2lsbEJlUmVtb3ZlZCgpOwogICAgIHZvaWQgaW52YWxpZGF0ZU9mZnNldCgp
IGNvbnN0OwotICAgIHZvaWQgZW5zdXJlT2Zmc2V0SXNWYWxpZCgpIGNvbnN0OwogCiBwcml2YXRl
OgotICAgIFJlZlB0cjxOb2RlPiBtX2NvbnRhaW5lck5vZGU7CisgICAgUmVmPE5vZGU+IG1fY29u
dGFpbmVyOwogICAgIG11dGFibGUgT3B0aW9uYWw8dW5zaWduZWQ+IG1fb2Zmc2V0SW5Db250YWlu
ZXIgeyAwIH07CiAgICAgUmVmUHRyPE5vZGU+IG1fY2hpbGRCZWZvcmVCb3VuZGFyeTsKIH07CiAK
IEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnQoY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50
Jik7CiAKLWlubGluZSBSYW5nZUJvdW5kYXJ5UG9pbnQ6OlJhbmdlQm91bmRhcnlQb2ludChOb2Rl
KiBjb250YWluZXIpCi0gICAgOiBtX2NvbnRhaW5lck5vZGUoY29udGFpbmVyKQoraW5saW5lIFJh
bmdlQm91bmRhcnlQb2ludDo6UmFuZ2VCb3VuZGFyeVBvaW50KE5vZGUmIGNvbnRhaW5lcikKKyAg
ICA6IG1fY29udGFpbmVyKGNvbnRhaW5lcikKIHsKLSAgICBBU1NFUlQobV9jb250YWluZXJOb2Rl
KTsKIH0KIAotaW5saW5lIE5vZGUqIFJhbmdlQm91bmRhcnlQb2ludDo6Y29udGFpbmVyKCkgY29u
c3QKK2lubGluZSBOb2RlJiBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmNvbnRhaW5lcigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fY29udGFpbmVyTm9kZS5nZXQoKTsKKyAgICByZXR1cm4gbV9jb250YWlu
ZXI7CiB9CiAKIGlubGluZSBOb2RlKiBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmNoaWxkQmVmb3JlKCkg
Y29uc3QKQEAgLTc2LDc3ICs3Miw2MyBAQCBpbmxpbmUgTm9kZSogUmFuZ2VCb3VuZGFyeVBvaW50
OjpjaGlsZEJlZm9yZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY2hpbGRCZWZvcmVCb3VuZGFyeS5n
ZXQoKTsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjplbnN1cmVPZmZzZXRJ
c1ZhbGlkKCkgY29uc3QKLXsKLSAgICBpZiAobV9vZmZzZXRJbkNvbnRhaW5lcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKG1fY2hpbGRCZWZvcmVCb3VuZGFyeSk7Ci0gICAgbV9vZmZz
ZXRJbkNvbnRhaW5lciA9IG1fY2hpbGRCZWZvcmVCb3VuZGFyeS0+Y29tcHV0ZU5vZGVJbmRleCgp
ICsgMTsKLX0KLQogaW5saW5lIHVuc2lnbmVkIFJhbmdlQm91bmRhcnlQb2ludDo6b2Zmc2V0KCkg
Y29uc3QKIHsKLSAgICBlbnN1cmVPZmZzZXRJc1ZhbGlkKCk7Ci0gICAgcmV0dXJuIG1fb2Zmc2V0
SW5Db250YWluZXIudmFsdWUoKTsKLX0KLQotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50
OjpjbGVhcigpCi17Ci0gICAgbV9jb250YWluZXJOb2RlID0gbnVsbHB0cjsKLSAgICBtX29mZnNl
dEluQ29udGFpbmVyID0gMDsKLSAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBudWxscHRyOwor
ICAgIGlmICghbV9vZmZzZXRJbkNvbnRhaW5lcikgeworICAgICAgICBBU1NFUlQobV9jaGlsZEJl
Zm9yZUJvdW5kYXJ5KTsKKyAgICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hpbGRCZWZv
cmVCb3VuZGFyeS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMTsKKyAgICB9CisgICAgcmV0dXJuICpt
X29mZnNldEluQ29udGFpbmVyOwogfQogCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6
OnNldChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCwgTm9kZSogY2hpbGRC
ZWZvcmUpCiB7CiAgICAgQVNTRVJUKGNoaWxkQmVmb3JlID09IChvZmZzZXQgPyBjb250YWluZXIt
PnRyYXZlcnNlVG9DaGlsZEF0KG9mZnNldCAtIDEpIDogMCkpOwotICAgIG1fY29udGFpbmVyTm9k
ZSA9IFdURk1vdmUoY29udGFpbmVyKTsKKyAgICBtX2NvbnRhaW5lciA9IFdURk1vdmUoY29udGFp
bmVyKTsKICAgICBtX29mZnNldEluQ29udGFpbmVyID0gb2Zmc2V0OwogICAgIG1fY2hpbGRCZWZv
cmVCb3VuZGFyeSA9IGNoaWxkQmVmb3JlOwogfQogCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5
UG9pbnQ6OnNldE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgQVNTRVJUKG1fY29udGFp
bmVyTm9kZSk7Ci0gICAgQVNTRVJUKG1fY29udGFpbmVyTm9kZS0+aXNDaGFyYWN0ZXJEYXRhTm9k
ZSgpKTsKKyAgICBBU1NFUlQobV9jb250YWluZXItPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSk7CiAg
ICAgQVNTRVJUKG1fb2Zmc2V0SW5Db250YWluZXIpOwogICAgIEFTU0VSVCghbV9jaGlsZEJlZm9y
ZUJvdW5kYXJ5KTsKICAgICBtX29mZnNldEluQ29udGFpbmVyID0gb2Zmc2V0OwogfQogCi1pbmxp
bmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvQmVmb3JlQ2hpbGQoTm9kZSYgY2hpbGQp
CitpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvQmVmb3JlTm9kZShOb2RlJiBj
aGlsZCkKIHsKICAgICBBU1NFUlQoY2hpbGQucGFyZW50Tm9kZSgpKTsKICAgICBtX2NoaWxkQmVm
b3JlQm91bmRhcnkgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBtX2NvbnRhaW5lck5v
ZGUgPSBjaGlsZC5wYXJlbnROb2RlKCk7Ci0gICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hp
bGRCZWZvcmVCb3VuZGFyeSA/IFdURjo6bnVsbG9wdCA6IE9wdGlvbmFsPHVuc2lnbmVkPigwKTsK
KyAgICBtX2NvbnRhaW5lciA9ICpjaGlsZC5wYXJlbnROb2RlKCk7CisgICAgbV9vZmZzZXRJbkNv
bnRhaW5lciA9IG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA/IFdURjo6bnVsbG9wdCA6IG1ha2VPcHRp
b25hbCgwVSk7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9BZnRl
ckNoaWxkKE5vZGUmIGNoaWxkKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRU
b0FmdGVyTm9kZShOb2RlJiBjaGlsZCkKIHsKICAgICBBU1NFUlQoY2hpbGQucGFyZW50Tm9kZSgp
KTsKICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSAmY2hpbGQ7Ci0gICAgbV9jb250YWluZXJO
b2RlID0gY2hpbGQucGFyZW50Tm9kZSgpOwotICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2No
aWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBPcHRpb25hbDx1bnNpZ25lZD4oMCk7
CisgICAgbV9jb250YWluZXIgPSAqY2hpbGQucGFyZW50Tm9kZSgpOworICAgIG1fb2Zmc2V0SW5D
b250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBtYWtlT3B0
aW9uYWwoMFUpOwogfQogCi1pbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3Rh
cnRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFpbmVyKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFy
eVBvaW50OjpzZXRUb0JlZm9yZUNvbnRlbnRzKFJlZjxOb2RlPiYmIGNvbnRhaW5lcikKIHsKLSAg
ICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CisgICAgbV9jb250YWluZXIg
PSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IDA7CiAgICAg
bV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbnVsbHB0cjsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VC
b3VuZGFyeVBvaW50OjpzZXRUb0VuZE9mTm9kZShSZWY8Tm9kZT4mJiBjb250YWluZXIpCitpbmxp
bmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvQWZ0ZXJDb250ZW50cyhSZWY8Tm9kZT4m
JiBjb250YWluZXIpCiB7Ci0gICAgbV9jb250YWluZXJOb2RlID0gV1RGTW92ZShjb250YWluZXIp
OwotICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPigqbV9jb250YWluZXJOb2RlKSkgewotICAgICAg
ICBtX29mZnNldEluQ29udGFpbmVyID0gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKm1fY29udGFp
bmVyTm9kZSkubGVuZ3RoKCk7CisgICAgbV9jb250YWluZXIgPSBXVEZNb3ZlKGNvbnRhaW5lcik7
CisgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KG1fY29udGFpbmVyKSkgeworICAgICAgICBtX29m
ZnNldEluQ29udGFpbmVyID0gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obV9jb250YWluZXIuZ2V0
KCkpLmxlbmd0aCgpOwogICAgICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBudWxscHRyOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG1fY29udGFpbmVy
Tm9kZS0+bGFzdENoaWxkKCk7Ci0gICAgICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxk
QmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBPcHRpb25hbDx1bnNpZ25lZD4oMCk7Cisg
ICAgICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG1fY29udGFpbmVyLT5sYXN0Q2hpbGQoKTsK
KyAgICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA/IFdU
Rjo6bnVsbG9wdCA6IG1ha2VPcHRpb25hbCgwVSk7CiAgICAgfQogfQogCkBAIC0xNjcsMjEgKzE0
OSwxNiBAQCBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmludmFsaWRhdGVPZmZzZXQo
KSBjb25zdAogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJhbmdlQm91bmRhcnlQb2lu
dCYgYSwgY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBiKQogewotICAgIGlmIChhLmNvbnRhaW5l
cigpICE9IGIuY29udGFpbmVyKCkpCisgICAgaWYgKCZhLmNvbnRhaW5lcigpICE9ICZiLmNvbnRh
aW5lcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEuY2hpbGRCZWZvcmUoKSB8
fCBiLmNoaWxkQmVmb3JlKCkpIHsKLSAgICAgICAgaWYgKGEuY2hpbGRCZWZvcmUoKSAhPSBiLmNo
aWxkQmVmb3JlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKGEub2Zmc2V0KCkgIT0gYi5vZmZzZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGEuY2hpbGRCZWZvcmUoKSB8
fCBiLmNoaWxkQmVmb3JlKCkpCisgICAgICAgIHJldHVybiBhLmNoaWxkQmVmb3JlKCkgPT0gYi5j
aGlsZEJlZm9yZSgpOworICAgIHJldHVybiBhLm9mZnNldCgpID09IGIub2Zmc2V0KCk7CiB9CiAK
IGlubGluZSBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50KGNvbnN0IFJhbmdlQm91bmRh
cnlQb2ludCYgcG9pbnQpCiB7Ci0gICAgcmV0dXJuIHsgKnBvaW50LmNvbnRhaW5lcigpLCBwb2lu
dC5vZmZzZXQoKSB9OworICAgIHJldHVybiB7IHBvaW50LmNvbnRhaW5lcigpLCBwb2ludC5vZmZz
ZXQoKSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJh
bmdlLmNwcAppbmRleCBjMWI3NDY4ZTFkZTA3OTdlYjllNjJjYjU5NmQzNGYzZjI5Mzc2ZmYxLi5k
OTg3ZjQwNDE1NWI1ZmM1MWQ4NjdkYTBmY2NlOTc5OTA0ZGZhMTRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aW1wbGVSYW5nZS5jcHAKQEAgLTIwNSw0ICsyMDUsNjkgQEAgUmVmUHRyPE5vZGU+IGNvbW1vbklu
Y2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICByZXR1cm4gY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFpbmVyLCByYW5nZS5lbmQuY29u
dGFpbmVyKTsKIH0KIAorYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBpc19sdGVxKGRv
Y3VtZW50T3JkZXIocmFuZ2Uuc3RhcnQsIHBvaW50KSkgJiYgaXNfbHRlcShkb2N1bWVudE9yZGVy
KHBvaW50LCByYW5nZS5lbmQpKTsKK30KKworYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBwb2ludCkKK3sK
KyAgICByZXR1cm4gcG9pbnQgJiYgaXNQb2ludEluUmFuZ2UocmFuZ2UsICpwb2ludCk7Cit9CisK
K1BhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwg
Y29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKGF1dG8gb3JkZXIgPSBkb2N1
bWVudE9yZGVyKHJhbmdlLnN0YXJ0LCBwb2ludCk7ICFpc19sdChvcmRlcikpCisgICAgICAgIHJl
dHVybiBvcmRlcjsKKyAgICBpZiAoYXV0byBvcmRlciA9IGRvY3VtZW50T3JkZXIocmFuZ2UuZW5k
LCBwb2ludCk7ICFpc19ndChvcmRlcikpCisgICAgICAgIHJldHVybiBvcmRlcjsKKyAgICByZXR1
cm4gUGFydGlhbE9yZGVyaW5nOjplcXVpdmFsZW50OworfQorCitQYXJ0aWFsT3JkZXJpbmcgZG9j
dW1lbnRPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlKQoreworICAgIGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRPcmRlcihwb2ludCwgcmFu
Z2Uuc3RhcnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgICAgICByZXR1cm4gb3JkZXI7CisgICAgaWYg
KGF1dG8gb3JkZXIgPSBkb2N1bWVudE9yZGVyKHBvaW50LCByYW5nZS5lbmQpOyAhaXNfbHQob3Jk
ZXIpKQorICAgICAgICByZXR1cm4gb3JkZXI7CisgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6
ZXF1aXZhbGVudDsKK30KKworYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgb3V0ZXJS
YW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGlubmVyUmFuZ2UpCit7CisgICAgcmV0dXJuIGlzX2x0
ZXEoZG9jdW1lbnRPcmRlcihvdXRlclJhbmdlLnN0YXJ0LCBpbm5lclJhbmdlLnN0YXJ0KSkgJiYg
aXNfZ3RlcShkb2N1bWVudE9yZGVyKG91dGVyUmFuZ2UuZW5kLCBpbm5lclJhbmdlLmVuZCkpOwor
fQorCitib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJh
bmdlJiBiKQoreworICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIoYS5zdGFydCwgYi5l
bmQpKSAmJiBpc19sdGVxKGRvY3VtZW50T3JkZXIoYi5zdGFydCwgYS5lbmQpKTsKK30KKworLy8g
RklYTUU6IE5hbWUgdGhpcyAidW5pb25SYW5nZSIgaW5zdGVhZD8gVGhlIHdvcmQgInVuaW9uIiBp
cyBhIG5vdW4gbW9yZSB0aGFuIGEgdmVyYi4gV291bGQgbGlrZSB0byBjYWxsIGl0IGp1c3QgdW5p
b24gaWYgaXQgd2Fzbid0IGZvciB0aGUgY29uZmxpY3Qgd2l0aCB0aGUgQyBrZXl3b3JkLgorU2lt
cGxlUmFuZ2UgdW5pb25SYW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJh
bmdlJiBiKQoreworICAgIGF1dG8mIHN0YXJ0ID0gaXNfbHRlcShkb2N1bWVudE9yZGVyKGEuc3Rh
cnQsIGIuc3RhcnQpKSA/IGEgOiBiOworICAgIGF1dG8mIGVuZCA9IGlzX2x0ZXEoZG9jdW1lbnRP
cmRlcihhLmVuZCwgYi5lbmQpKSA/IGIgOiBhOworICAgIHJldHVybiB7IHN0YXJ0LnN0YXJ0LCBl
bmQuZW5kIH07Cit9CisKK2Jvb2wgY29udGFpbnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBj
b25zdCBOb2RlJiBub2RlKQoreworICAgIC8vIEZJWE1FOiBDb25zaWRlciBhIG1vcmUgZWZmaWNp
ZW50IGFsZ29yaXRobSB0aGF0IGF2b2lkcyBhbHdheXMgY29tcHV0aW5nIHRoZSBub2RlIGluZGV4
LgorICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgY29uc3RfY2FzdCBwb2ludCB0byBhIGRlc2lnbiBw
cm9ibGVtPworICAgIGF1dG8gbm9kZVJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShjb25z
dF9jYXN0PE5vZGUmPihub2RlKSk7CisgICAgcmV0dXJuIG5vZGVSYW5nZSAmJiBjb250YWlucyhy
YW5nZSwgKm5vZGVSYW5nZSk7Cit9CisKK2Jvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIGEg
bW9yZSBlZmZpY2llbnQgYWxnb3JpdGhtIHRoYXQgYXZvaWRzIGFsd2F5cyBjb21wdXRpbmcgdGhl
IG5vZGUgaW5kZXguCisgICAgLy8gRklYTUU6IERvZXMgdGhpcyBjb25zdF9jYXN0IHBvaW50IHRv
IGEgZGVzaWduIHByb2JsZW0/CisgICAgYXV0byBub2RlUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlKGNvbnN0X2Nhc3Q8Tm9kZSY+KG5vZGUpKTsKKyAgICBpZiAoIW5vZGVSYW5nZSkKKyAg
ICAgICAgcmV0dXJuIG5vZGUuY29udGFpbnMocmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpKTsK
KyAgICByZXR1cm4gaXNfbHQoZG9jdW1lbnRPcmRlcihub2RlUmFuZ2UtPnN0YXJ0LCByYW5nZS5l
bmQpKSAmJiBpc19sdChkb2N1bWVudE9yZGVyKHJhbmdlLnN0YXJ0LCBub2RlUmFuZ2UtPmVuZCkp
OworCit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKaW5kZXggMGQ1Y2QxZWFiMmE3NzFl
YjY3MjY1ZGQ2MzAyNDUzNDExMjdmYzVkZi4uNDYyMTBkNzhmMTg0ZTFmNThiNWI0ZWIzMzYyNWY4
M2EyODE5YzVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKQEAgLTY1LDYgKzY1LDIwIEBA
IFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25z
dCBTaW1wbGVSYW5nZSYpOwogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmLCBj
b25zdCBTaW1wbGVSYW5nZSYpOwogCitXRUJDT1JFX0VYUE9SVCBib29sIGlzUG9pbnRJblJhbmdl
KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOworYm9vbCBpc1BvaW50
SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+
Jik7CisKK1dFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnMoY29uc3QgU2ltcGxlUmFuZ2UmIG91
dGVyUmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBpbm5lclJhbmdlKTsKK1dFQkNPUkVfRVhQT1JU
IGJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7
CitXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSB1bmlvblJhbmdlcyhjb25zdCBTaW1wbGVSYW5n
ZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CisKK1dFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnMo
Y29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CitXRUJDT1JFX0VYUE9SVCBib29sIGlu
dGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CisKKy8vIFJldHVybnMg
ZXF1aXZhbGVudCBpZiBwb2ludCBpcyBpbiByYW5nZS4KK1dFQkNPUkVfRVhQT1JUIFBhcnRpYWxP
cmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQ
b2ludCYpOworV0VCQ09SRV9FWFBPUlQgUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29u
c3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CisKIGNsYXNzIEludGVyc2Vj
dGluZ05vZGVSYW5nZTsKIEludGVyc2VjdGluZ05vZGVSYW5nZSBpbnRlcnNlY3RpbmdOb2Rlcyhj
b25zdCBTaW1wbGVSYW5nZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCAy
ODNhZWFkNjU4ZDQxZWUyYTBiYzM1ZjIzMDFlOTVhZjRjZTEyM2JjLi42YjE4NGNhODU3Y2E3ZWVj
YTUxZDZiYWZmNTU0YjVhMjE1MjU3N2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAK
QEAgLTc5LDQwICs3OSwxOCBAQCBib29sIGlzQXRvbWljTm9kZShjb25zdCBOb2RlKiBub2RlKQog
ICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8IGVkaXRpbmdJZ25v
cmVzQ29udGVudCgqbm9kZSkpOwogfQogCi0vLyBDb21wYXJlIHR3byBwb3NpdGlvbnMsIHRha2lu
ZyBpbnRvIGFjY291bnQgdGhlIHBvc3NpYmlsaXR5IHRoYXQgb25lIG9yIGJvdGgKLS8vIGNvdWxk
IGJlIGluc2lkZSBhIHNoYWRvdyB0cmVlLiBPbmx5IHdvcmtzIGZvciBub24tbnVsbCB2YWx1ZXMu
CisvLyBGSVhNRTogQ2hhbmdlIGNhbGxlcnMgdG8gdXNlIGRvY3VtZW50T3JkZXIgYW5kIGRlbGV0
ZSB0aGlzLgogaW50IGNvbXBhcmVQb3NpdGlvbnMoY29uc3QgUG9zaXRpb24mIGEsIGNvbnN0IFBv
c2l0aW9uJiBiKQogewotICAgIFRyZWVTY29wZSogY29tbW9uU2NvcGUgPSBjb21tb25UcmVlU2Nv
cGUoYS5jb250YWluZXJOb2RlKCksIGIuY29udGFpbmVyTm9kZSgpKTsKLQotICAgIGlmICghY29t
bW9uU2NvcGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgTm9kZSogbm9kZUEgPSBjb21tb25T
Y29wZS0+YW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUoYS5jb250YWluZXJOb2RlKCkpOwotICAgIEFT
U0VSVChub2RlQSk7Ci0gICAgYm9vbCBoYXNEZXNjZW5kZW50QSA9IG5vZGVBICE9IGEuY29udGFp
bmVyTm9kZSgpOwotICAgIGludCBvZmZzZXRBID0gaGFzRGVzY2VuZGVudEEgPyAwIDogYS5jb21w
dXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0KLSAgICBOb2RlKiBub2RlQiA9IGNvbW1vblNj
b3BlLT5hbmNlc3Rvck5vZGVJblRoaXNTY29wZShiLmNvbnRhaW5lck5vZGUoKSk7Ci0gICAgQVNT
RVJUKG5vZGVCKTsKLSAgICBib29sIGhhc0Rlc2NlbmRlbnRCID0gbm9kZUIgIT0gYi5jb250YWlu
ZXJOb2RlKCk7Ci0gICAgaW50IG9mZnNldEIgPSBoYXNEZXNjZW5kZW50QiA/IDAgOiBiLmNvbXB1
dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKLQotICAgIGludCBiaWFzID0gMDsKLSAgICBpZiAo
bm9kZUEgPT0gbm9kZUIpIHsKLSAgICAgICAgaWYgKGhhc0Rlc2NlbmRlbnRBKQotICAgICAgICAg
ICAgYmlhcyA9IC0xOwotICAgICAgICBlbHNlIGlmIChoYXNEZXNjZW5kZW50QikKLSAgICAgICAg
ICAgIGJpYXMgPSAxOwotICAgIH0KLQotICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9IFJhbmdl
Ojpjb21wYXJlQm91bmRhcnlQb2ludHMobm9kZUEsIG9mZnNldEEsIG5vZGVCLCBvZmZzZXRCKTsK
LSAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJu
IGJpYXM7Ci0gICAgYXV0byByZXN1bHQgPSBjb21wYXJpc29uUmVzdWx0LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpOwotICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBiaWFzOworICAgIGF1dG8gb3Jk
ZXJpbmcgPSBkb2N1bWVudE9yZGVyKGEsIGIpOworICAgIGlmIChpc19sdChvcmRlcmluZykpCisg
ICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoaXNfZ3Qob3JkZXJpbmcpKQorICAgICAgICByZXR1
cm4gMTsKKyAgICByZXR1cm4gMDsKIH0KIAorLy8gRklYTUU6IENoYW5nZSBjYWxsZXJzIHRvIHVz
ZSBkb2N1bWVudE9yZGVyIGFuZCBkZWxldGUgdGhpcy4KIGludCBjb21wYXJlUG9zaXRpb25zKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogewogICAg
IHJldHVybiBjb21wYXJlUG9zaXRpb25zKGEuZGVlcEVxdWl2YWxlbnQoKSwgYi5kZWVwRXF1aXZh
bGVudCgpKTsKQEAgLTExNjMsOSArMTE0MSw3IEBAIHN0YXRpYyBib29sIGlzVmlzaWJseUFkamFj
ZW50KGNvbnN0IFBvc2l0aW9uJiBmaXJzdCwgY29uc3QgUG9zaXRpb24mIHNlY29uZCkKIC8vIENh
bGwgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhIG5vZGUgaXMgdmlzaWJseSBm
aXQgaW5zaWRlIHNlbGVjdGVkUmFuZ2UKIGJvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhp
bihOb2RlJiBub2RlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgLy8gSWYgdGhl
IG5vZGUgaXMgaW5zaWRlIHRoZSByYW5nZSwgdGhlbiBpdCBzdXJlbHkgaXMgY29udGFpbmVkIHdp
dGhpbi4KLSAgICBhdXRvIGNvbXBhcmlzb25SZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UocmFuZ2Up
LT5jb21wYXJlTm9kZShub2RlKTsKLSAgICBpZiAoIWNvbXBhcmlzb25SZXN1bHQuaGFzRXhjZXB0
aW9uKCkgJiYgY29tcGFyaXNvblJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSBSYW5nZTo6
Tk9ERV9JTlNJREUpCisgICAgaWYgKGNvbnRhaW5zKHJhbmdlLCBub2RlKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24ocmFuZ2Uuc3RhcnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDFm
MGE3NzIyOWVjZjMzMGJjMzkxM2ZmN2FkNzQxNjlkZTIxNjAxOWEuLjE2MDdlODdjZGFjMTMxYTRj
MTYwOTc3YTY0OGNmNTIxZDQ0YTcwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAg
LTM1NTAsMTAgKzM1NTAsOCBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpyYW5nZU9m
U3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBPcHRpb25hbAogc3RhdGljIGJvb2wg
aXNGcmFtZUluUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7
CiAgICAgZm9yIChhdXRvKiBvd25lckVsZW1lbnQgPSBmcmFtZS5vd25lckVsZW1lbnQoKTsgb3du
ZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50KCkub3duZXJF
bGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3VtZW50KCkgPT0gJnJh
bmdlLnN0YXJ0LmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRl
TGl2ZVJhbmdlKHJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm93bmVyRWxlbWVudCk7Ci0gICAgICAg
ICAgICByZXR1cm4gIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3VtZW50
KCkgPT0gJnJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gaW50ZXJz
ZWN0cyhyYW5nZSwgKm93bmVyRWxlbWVudCk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0K
QEAgLTM3MDMsMTggKzM3MDEsMTYgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxl
cGhvbmVOdW1iZXJzKCkKIAogICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8g
c2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpIHsKLSAg
ICAgICAgICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBmZXcgY2hhcmFjdGVycyBpbiBlYWNoIGRp
cmVjdGlvbiB0byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNlbGVjdGVkIHBob25lIG51bWJlcnMuCi0g
ICAgICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgY2hhcmFjdGVyc1RvRXh0ZW5kID0gMTU7Ci0g
ICAgICAgICAgICBhdXRvIHNlbGVjdGVkTGl2ZVJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKCpzZWxl
Y3RlZFJhbmdlKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcmFuZ2UgOiBzY2FuRm9yVGVsZXBo
b25lTnVtYmVycyhleHRlbmRTZWxlY3Rpb24oKnNlbGVjdGVkUmFuZ2UsIGNoYXJhY3RlcnNUb0V4
dGVuZCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBkbyB0aGlzIHVu
Y29uZGl0aW9uYWxseSBhbmQgdGhlIGNvZGUgYmVsb3cgdGhpcyBvbmx5IHdoZW4gaXQgb3Zlcmxh
cHMgdGhlIHNlbGVjdGlvbj8KLSAgICAgICAgICAgICAgICBhZGRNYXJrZXIocmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXIpOwotCi0gICAgICAgICAgICAgICAgLy8gT25seSBj
b25zaWRlciByYW5nZXMgd2l0aCBhIGRldGVjdGVkIHRlbGVwaG9uZSBudW1iZXIgaWYgdGhleSBv
dmVybGFwIHdpdGggdGhlIGFjdHVhbCBzZWxlY3Rpb24gcmFuZ2UuCi0gICAgICAgICAgICAgICAg
aWYgKHJhbmdlc092ZXJsYXAoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSwgc2VsZWN0ZWRM
aXZlUmFuZ2UucHRyKCkpKQotICAgICAgICAgICAgICAgICAgICBtX2RldGVjdGVkVGVsZXBob25l
TnVtYmVyUmFuZ2VzLmFwcGVuZChyYW5nZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGF1dG8g
c2VsZWN0ZWRSYW5nZSA9ICpzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAg
ICAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gZWFjaCBkaXJlY3Rp
b24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBwaG9uZSBudW1iZXJzLgorICAgICAg
ICBjb25zdGV4cHIgdW5zaWduZWQgY2hhcmFjdGVyc1RvRXh0ZW5kID0gMTU7CisgICAgICAgIGZv
ciAoYXV0byYgcmFuZ2UgOiBzY2FuRm9yVGVsZXBob25lTnVtYmVycyhleHRlbmRTZWxlY3Rpb24o
c2VsZWN0ZWRSYW5nZSwgY2hhcmFjdGVyc1RvRXh0ZW5kKSkpIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBXaHkgZG8gd2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgaW5zdGVhZCBvZiB3aGVuIG9u
bHkgd2hlbiBpdCBvdmVybGFwcyB0aGUgc2VsZWN0aW9uPworICAgICAgICAgICAgYWRkTWFya2Vy
KHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKKworICAgICAgICAgICAg
Ly8gT25seSBjb25zaWRlciByYW5nZXMgd2l0aCBhIGRldGVjdGVkIHRlbGVwaG9uZSBudW1iZXIg
aWYgdGhleSBvdmVybGFwIHdpdGggdGhlIHNlbGVjdGlvbi4KKyAgICAgICAgICAgIGlmIChpbnRl
cnNlY3RzKHJhbmdlLCBzZWxlY3RlZFJhbmdlKSkKKyAgICAgICAgICAgICAgICBtX2RldGVjdGVk
VGVsZXBob25lTnVtYmVyUmFuZ2VzLmFwcGVuZChyYW5nZSk7CiAgICAgICAgIH0KICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDI0NmZiMjZiN2U4
NzQ3ZjMwZDg5YmU2OTdiOTkwNmQ3NGU2Yzk5ZDEuLmIwNDk3NTk2YTc1YmVjMTE5YjY4NzI0NDlj
NGY1NzQ3YzVmMDNjNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cApAQCAtMjI4LDEzICsyMjgsNiBAQCBzdGF0aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxEaXN0
YW5jZShGcmFtZSYgZnJhbWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihTY3Jv
bGxiYXI6OnBhZ2VTdGVwKGhlaWdodCkpOwogfQogCi1zdGF0aWMgU2ltcGxlUmFuZ2UgdW5pb25S
YW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQotewotICAg
IGF1dG8mIHN0YXJ0ID0gY3JlYXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UoYikpLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpIDw9IDAgPyBhIDogYjsKLSAgICBhdXRvJiBlbmQgPSBjcmVhdGVMaXZlUmFuZ2UoYSkt
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgY3JlYXRlTGl2ZVJhbmdl
KGIpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYiA6IGE7Ci0gICAgcmV0dXJuIHsgc3Rh
cnQuc3RhcnQsIGVuZC5lbmQgfTsKLX0KLQogLy8gRXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9ucwog
CiBzdGF0aWMgYm9vbCBleGVjdXRlQmFja0NvbG9yKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTM1MywxNCAr
MzQ2LDE2IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb0VuZE9mUGFyYWdyYXBoKEZyYW1l
JiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVE
ZWxldGVUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNv
bnN0IFN0cmluZyYpCiB7Ci0gICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byYgZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7CiAg
ICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7Ci0gICAgaWYgKG1hcmsgJiYg
ZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSB7Ci0gICAgICAgIGlmICghc2VsZWN0aW9u
LnNldFNlbGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpmcmFtZS5lZGl0b3IoKS5zZWxl
Y3RlZFJhbmdlKCkpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBp
bmc6OlllcykpCisgICAgYXV0byBtYXJrUmFuZ2UgPSBlZGl0b3IubWFyaygpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmIChtYXJrUmFuZ2UgJiYgc2VsZWN0aW9uUmFu
Z2UpIHsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvblJhbmdl
cygqbWFya1JhbmdlLCAqc2VsZWN0aW9uUmFuZ2UpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlv
bjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQotICAgIGZyYW1lLmVkaXRvcigpLnBlcmZvcm1EZWxldGUoKTsKLSAgICBmcmFtZS5lZGl0
b3IoKS5zZXRNYXJrKHNlbGVjdGlvbi5zZWxlY3Rpb24oKSk7CisgICAgZWRpdG9yLnBlcmZvcm1E
ZWxldGUoKTsKKyAgICBlZGl0b3Iuc2V0TWFyayhzZWxlY3Rpb24uc2VsZWN0aW9uKCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0xMDUwLDEzICsxMDQ1LDE1IEBAIHN0YXRpYyBib29sIGV4
ZWN1dGVTZWxlY3RTZW50ZW5jZShGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RUb01hcmsoRnJhbWUmIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgYXV0
byBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAg
YXV0byBzZWxlY3Rpb24gPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7Ci0gICAgaWYg
KCFtYXJrIHx8ICFzZWxlY3Rpb24pIHsKKyAgICBhdXRvJiBlZGl0b3IgPSBmcmFtZS5lZGl0b3Io
KTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvIG1h
cmtSYW5nZSA9IGVkaXRvci5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHNl
bGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgaWYgKCFtYXJrUmFuZ2UgfHwgIXNlbGVjdGlvblJhbmdlKSB7CiAgICAgICAgIFBBTDo6
c3lzdGVtQmVlcCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpzZWxlY3Rpb24p
LCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7Cisg
ICAgc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmtSYW5nZSwgKnNl
bGVjdGlvblJhbmdlKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMpOwogICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgaWdub3JlIHRoZSByZXR1cm4gdmFs
dWUgZnJvbSBzZXRTZWxlY3RlZFJhbmdlIGhlcmU/CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGUwMTA4YjIzYTY1ZmYw
ODY1ZTIzODBmNWVjMWNhYWQ1ODYzYTU3NjguLmZkMDZmNjRmYzA1NTM5YmE0OWFiNWM3NTI1ZTRh
ZDcyNWRiMDk5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CkBAIC01NTQsMTggKzU1NCwxMiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXNwb25kVG9Ob2Rl
TW9kaWZpY2F0aW9uKE5vZGUmIG5vZGUsIGJvb2wgYmFzZVJlbW92ZWQsIGJvbwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBtX3NlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihtX3NlbGVj
dGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAgfSBlbHNlIGlmIChpc1Jhbmdl
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCkp
IHsKLSAgICAgICAgICAgIGF1dG8gY29tcGFyZU5vZGVSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uo
KnJhbmdlKS0+Y29tcGFyZU5vZGUobm9kZSk7Ci0gICAgICAgICAgICBpZiAoIWNvbXBhcmVOb2Rl
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb21wYXJlUmVz
dWx0ID0gY29tcGFyZU5vZGVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfQkVGT1JFX0FORF9BRlRFUiB8
fCBjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0lOU0lERSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSBkaWQgbm90aGluZyBoZXJlLCB3aGVuIHRoaXMgbm9kZSdzIHJlbmRlcmVy
IHdhcyBkZXN0cm95ZWQsIHRoZSByZWN0IHRoYXQgaXQKLSAgICAgICAgICAgICAgICAgICAgLy8g
b2NjdXBpZWQgd291bGQgYmUgaW52YWxpZGF0ZWQsIGJ1dCwgc2VsZWN0aW9uIGdhcHMgdGhhdCBj
aGFuZ2UgYXMgYSByZXN1bHQgb2YKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHJlbW92YWwg
d291bGRuJ3QgYmUgaW52YWxpZGF0ZWQuCi0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBE
b24ndCBkbyBzbyBtdWNoIHVubmVjZXNzYXJ5IGludmFsaWRhdGlvbi4KLSAgICAgICAgICAgICAg
ICAgICAgY2xlYXJSZW5kZXJUcmVlU2VsZWN0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9zZWxlY3Rpb24uZmly
c3RSYW5nZSgpOyByYW5nZSAmJiBpbnRlcnNlY3RzKCpyYW5nZSwgbm9kZSkpIHsKKyAgICAgICAg
ICAgIC8vIElmIHdlIGRpZCBub3RoaW5nIGhlcmUsIHdoZW4gdGhpcyBub2RlJ3MgcmVuZGVyZXIg
d2FzIGRlc3Ryb3llZCwgdGhlIHJlY3QgdGhhdCBpdAorICAgICAgICAgICAgLy8gb2NjdXBpZWQg
d291bGQgYmUgaW52YWxpZGF0ZWQsIGJ1dCwgc2VsZWN0aW9uIGdhcHMgdGhhdCBjaGFuZ2UgYXMg
YSByZXN1bHQgb2YKKyAgICAgICAgICAgIC8vIHRoZSByZW1vdmFsIHdvdWxkbid0IGJlIGludmFs
aWRhdGVkLgorICAgICAgICAgICAgLy8gRklYTUU6IERvbid0IGRvIHNvIG11Y2ggdW5uZWNlc3Nh
cnkgaW52YWxpZGF0aW9uLgorICAgICAgICAgICAgY2xlYXJSZW5kZXJUcmVlU2VsZWN0aW9uID0g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjAzNCw3ICsyMDI4LDcgQEAgYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4m
IHJhbmdlLCBFQWZmaW4KICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoJnJhbmdlLT5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkgIT0gJnJhbmdlLT5l
bmQuY29udGFpbmVyLT5kb2N1bWVudCgpKQorICAgIGlmICgmcmFuZ2UtPnN0YXJ0LmRvY3VtZW50
KCkgIT0gJnJhbmdlLT5lbmQuZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oKnJhbmdlLCBhZmZpbml0eSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFu
ZC5jcHAKaW5kZXggNWVkMGRlOWEzMTBiMzFiZTYzZTBhM2Q0MzM4OThjMTk1MjcyODU2ZS4uNWI3
YmU3ODhjNjg0ZTEyMjI5YmM3NzdlOTk2YmY5MWFkOWU1ZGIyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcApAQCAt
NDEsNyArNDEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZXBsYWNlUmFuZ2VXaXRoVGV4
dENvbW1hbmQ6OlJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZChjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKLSAgICA6IENvbXBvc2l0ZUVk
aXRDb21tYW5kKHJhbmdlVG9CZVJlcGxhY2VkLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKSwg
RWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFu
ZChyYW5nZVRvQmVSZXBsYWNlZC5zdGFydC5kb2N1bWVudCgpLCBFZGl0QWN0aW9uOjpJbnNlcnRS
ZXBsYWNlbWVudCkKICAgICAsIG1fcmFuZ2VUb0JlUmVwbGFjZWQocmFuZ2VUb0JlUmVwbGFjZWQp
CiAgICAgLCBtX3RleHQodGV4dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDg2NzEzMjBkYzQzYzY1YWUzZjAw
NTA0MzdmNDM5MWYxNmY4OWNmNTYuLmE4NDg2NjM2NTNhMGY3ZmYyOTczNzM2YjExOTcyYzhjNjRj
OGNhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmNwcApAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlVG9CZUNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9u
KQotICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQocmFuZ2VUb0JlQ29ycmVjdGVkLnN0YXJ0LmNv
bnRhaW5lci0+ZG9jdW1lbnQoKSwgRWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCisgICAg
OiBDb21wb3NpdGVFZGl0Q29tbWFuZChyYW5nZVRvQmVDb3JyZWN0ZWQuc3RhcnQuZG9jdW1lbnQo
KSwgRWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCiAgICAgLCBtX3JhbmdlVG9CZUNvcnJl
Y3RlZChyYW5nZVRvQmVDb3JyZWN0ZWQpCiAgICAgLCBtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQo
bV9yYW5nZVRvQmVDb3JyZWN0ZWQpCiAgICAgLCBtX2NvcnJlY3Rpb24oY29ycmVjdGlvbikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCBlMjM4
MmJlYjAxNzk4NTRjMmE1MjM4YjNkMzcwYjk0YTVlNTA1N2Q1Li4zNWZlOWQ2YThlZGRjOThhZGM0
M2U1NTQwMDg2MWI5NGU0M2U0ZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0zMzYsNyArMzM2LDcgQEAgYXV0byBUZXh0Q2hlY2tpbmdI
ZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGJvb2wg
Y2hlY2sKICAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyKQogICAgICAgICAgICAgICAg
ICAgICBjaGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKICAgICAg
ICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247Ci0gICAgICAgICAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHBhcmFncmFwaFJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+
ZG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBw
YXJhZ3JhcGhSYW5nZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAg
ICAgICAgICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LnRleHRDaGVja2Vy
KCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tpbmdUeXBlcywgcmVzdWx0cywgY3VycmVudFNlbGVj
dGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25h
cnlMb29rdXBMZWdhY3kubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5
TG9va3VwTGVnYWN5Lm1tCmluZGV4IDg3NjEyMGJiMDliMTJlMDllNGRlY2E1OGU1NTRkMzAyNzAx
ZWY0MzUuLjU1ODI0ZmEwODM2ZTAzM2M3OTI2NjE2YTQ3OTcxMTIwZTM3NDNjOTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5t
bQpAQCAtNjgsMTEgKzY4LDggQEAgc3RhdGljIGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWaXMKICAgICBpZiAoIXNl
bGVjdGlvbi5pc1JhbmdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc2Vs
ZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2Vs
ZWN0ZWRSYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUxp
dmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmNvbnRhaW5zKHBvc2l0aW9uKTsKKyAgICBhdXRvIHNl
bGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpOworICAgIHJldHVybiBzZWxlY3Rl
ZFJhbmdlICYmIGlzUG9pbnRJblJhbmdlKCpzZWxlY3RlZFJhbmdlLCBtYWtlQm91bmRhcnlQb2lu
dChwb3NpdGlvbikpOwogfQogCiBPcHRpb25hbDxzdGQ6OnR1cGxlPFNpbXBsZVJhbmdlLCBOU0Rp
Y3Rpb25hcnkgKj4+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRl
eCAyN2JjYWVlZDM2ZmVhNjEwOTA0ODE1MTRlMTZlMjU4MDhhMDIyY2Q1Li42ZWYxZjE2OTBjMWVi
Zjk3ZDA0YTg4ZmFkNGIzYjhlNjc5ZTlhMjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CkBAIC0xMTIwLDcgKzExMjAsNyBAQCBzdGF0aWMgYm9vbCBjb250ZXh0UHJlc2VydmVzTmV3bGlu
ZShjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dCkKIAogUmVmPERvY3VtZW50RnJhZ21lbnQ+IGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgdGV4dCkKIHsKLSAgICBhdXRvJiBkb2N1bWVudCA9IGNvbnRleHQuc3RhcnQuY29udGFp
bmVyLT5kb2N1bWVudCgpOworICAgIGF1dG8mIGRvY3VtZW50ID0gY29udGV4dC5zdGFydC5kb2N1
bWVudCgpOwogICAgIGF1dG8gZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdt
ZW50KCk7CiAgICAgCiAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAppbmRleCBhNWJl
MDcxZTM2ODYwNzdlZTM2ZDIxZTM1YTU4Mzk4MDRkOTg3ZjIyLi42MDllZDExMTRmZDE5OTZjZTg5
NzNiNzRjNzliYzdmZTA1MjZlZDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcApAQCAtNDU1LDcgKzQ1NSw3IEBAIFJl
ZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoRnJhbWUmIGZy
YW1lKQogCiBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRl
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBhdXRvJiBkb2N1bWVudCA9IHJhbmdl
LnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IHJhbmdl
LnN0YXJ0LmRvY3VtZW50KCk7CiAgICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01TZWxlY3Rpb24uY3BwCmluZGV4IDk2NDQ5ZDMyN2FlYjlhOTFjZmVkNzkyOWNhNmMzNjY0MTIw
MjA1YmYuLjIwNDE4YzJjNmVkODUwMGNlNTRlZmNiY2FmZWRmZGJmZWY1Mjg2MjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKQEAgLTI4NCwxNSArMjg0LDEzIEBAIHZvaWQgRE9N
U2VsZWN0aW9uOjptb2RpZnkoY29uc3QgU3RyaW5nJiBhbHRlclN0cmluZywgY29uc3QgU3RyaW5n
JiBkaXJlY3Rpb25TdHJpCiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVNlbGVjdGlvbjo6ZXh0ZW5k
KE5vZGUmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMt
PmZyYW1lKCk7CisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIodGhpcy0+ZnJhbWUoKSk7CiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBpZiAob2Zmc2V0ID4gKG5v
ZGUuaXNDaGFyYWN0ZXJEYXRhTm9kZSgpID8gY2FyZXRNYXhPZmZzZXQobm9kZSkgOiBub2RlLmNv
dW50Q2hpbGROb2RlcygpKSkKKyAgICBpZiAob2Zmc2V0ID4gbm9kZS5sZW5ndGgoKSkKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgaWYgKCFpc1ZhbGlk
Rm9yUG9zaXRpb24oJm5vZGUpKQogICAgICAgICByZXR1cm4geyB9OwotCi0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IoKmZyYW1lKTsKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0RXh0ZW50KGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmbm9kZSwgb2Zmc2V0KSwgRE9XTlNUUkVBTSk7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KQEAgLTMwMSwyMiArMjk5LDEwIEBAIEV4Y2VwdGlvbk9yPFJlZjxS
YW5nZT4+IERPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdCh1bnNpZ25lZCBpbmRleCkKIHsKICAgICBp
ZiAoaW5kZXggPj0gcmFuZ2VDb3VudCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5k
ZXhTaXplRXJyb3IgfTsKLQotICAgIC8vIElmIHlvdSdyZSBoaXR0aW5nIHRoaXMsIHlvdSd2ZSBh
ZGRlZCBicm9rZW4gbXVsdGktcmFuZ2Ugc2VsZWN0aW9uIHN1cHBvcnQuCi0gICAgQVNTRVJUKHJh
bmdlQ291bnQoKSA9PSAxKTsKLQotICAgIGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAg
ICBpZiAoYXV0byogc2hhZG93QW5jZXN0b3IgPSBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcigqZnJh
bWUpKSB7Ci0gICAgICAgIGF1dG8qIGNvbnRhaW5lciA9IHNoYWRvd0FuY2VzdG9yLT5wYXJlbnRO
b2RlR3VhcmFudGVlZEhvc3RGcmVlKCk7Ci0gICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNoYWRv
d0FuY2VzdG9yLT5jb21wdXRlTm9kZUluZGV4KCk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVMaXZl
UmFuZ2UobWFrZVNpbXBsZVJhbmdlKEJvdW5kYXJ5UG9pbnQgeyAqY29udGFpbmVyLCBvZmZzZXQg
fSkpOwotICAgIH0KLQotICAgIGF1dG8gZmlyc3RSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7Ci0gICAgQVNTRVJUKGZpcnN0UmFuZ2UpOwotICAgIGlm
ICghZmlyc3RSYW5nZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9y
IH07Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZSgqZmlyc3RSYW5nZSk7CisgICAgYXV0byYg
ZnJhbWUgPSAqdGhpcy0+ZnJhbWUoKTsKKyAgICBpZiAoYXV0byBzaGFkb3dBbmNlc3RvciA9IHNl
bGVjdGlvblNoYWRvd0FuY2VzdG9yKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVS
YW5nZShtYWtlU2ltcGxlUmFuZ2UoKm1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZSgqc2hhZG93
QW5jZXN0b3IpKSk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZSgqZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKTsKIH0KIAogdm9pZCBET01TZWxlY3Rpb246OnJl
bW92ZUFsbFJhbmdlcygpCkBAIC0zMjcsNTAgKzMxMywyMiBAQCB2b2lkIERPTVNlbGVjdGlvbjo6
cmVtb3ZlQWxsUmFuZ2VzKCkKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKIH0KIAot
dm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlJiByYW5nZSkKK3ZvaWQgRE9NU2VsZWN0
aW9uOjphZGRSYW5nZShSYW5nZSYgbGl2ZVJhbmdlKQogewotICAgIGF1dG8qIGZyYW1lID0gdGhp
cy0+ZnJhbWUoKTsKKyAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cih0aGlzLT5mcmFtZSgpKTsK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWY8RnJhbWU+IHByb3Rl
Y3RvcigqZnJhbWUpOwotCisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShsaXZlUmFu
Z2UpOwogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKKwogICAgIGF1
dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5zdGFydC5jb250
YWluZXItPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKLSAgICAgICAgc2VsZWN0aW9uLnNldFNl
bGVjdGlvbihtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKKyAgICBpZiAoc2VsZWN0ZWRSYW5nZSAm
JiAhc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb250YWluaW5nU2hhZG93Um9vdCgp
ICYmIGludGVyc2VjdHMoKnNlbGVjdGVkUmFuZ2UsIHJhbmdlKSkgeworICAgICAgICBzZWxlY3Rp
b24uc2V0U2VsZWN0aW9uKHVuaW9uUmFuZ2VzKCpzZWxlY3RlZFJhbmdlLCByYW5nZSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBub3JtYWxpemVkUmFuZ2UgPSBjcmVhdGVM
aXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSk7Ci0gICAgYXV0byByZXN1bHQgPSByYW5nZS5jb21wYXJl
Qm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCAqbm9ybWFsaXplZFJhbmdlKTsK
LSAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZh
bHVlKCkgPT0gLTEpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBkaXNjb250aWd1b3Vz
IHNlbGVjdGlvbi4gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIHR3byByYW5nZXMgZG9uJ3Qg
aW50ZXJzZWN0LgotICAgICAgICByZXN1bHQgPSByYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OlNUQVJUX1RPX0VORCwgKm5vcm1hbGl6ZWRSYW5nZSk7Ci0gICAgICAgIGlmICghcmVz
dWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+IC0xKSB7
Ci0gICAgICAgICAgICByZXN1bHQgPSByYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OkVORF9UT19FTkQsICpub3JtYWxpemVkUmFuZ2UpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IC0xKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gVGhlIHJhbmdlcyBpbnRlcnNlY3QuCi0gICAgICAgICAgICAgICAg
c2VsZWN0aW9uLm1vdmVUbyhtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZyYW5nZS5zdGFy
dENvbnRhaW5lcigpLCByYW5nZS5zdGFydE9mZnNldCgpKSwgbWFrZURlcHJlY2F0ZWRMZWdhY3lQ
b3NpdGlvbigmbm9ybWFsaXplZFJhbmdlLT5lbmRDb250YWluZXIoKSwgbm9ybWFsaXplZFJhbmdl
LT5lbmRPZmZzZXQoKSksIERPV05TVFJFQU0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGUgbmV3IHJhbmdlIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCByYW5nZS4K
LSAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZShy
YW5nZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gV2UgZG9uJ3Qgc3VwcG9ydCBkaXNjb250aWd1b3VzIHNlbGVjdGlvbi4gV2UgZG9uJ3QgZG8g
YW55dGhpbmcgaWYgdGhlIHR3byByYW5nZXMgZG9uJ3QgaW50ZXJzZWN0LgotICAgICAgICByZXN1
bHQgPSByYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKm5v
cm1hbGl6ZWRSYW5nZSk7Ci0gICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJl
c3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8IDEpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHJh
bmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKm5vcm1hbGl6ZWRS
YW5nZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQu
cmVsZWFzZVJldHVyblZhbHVlKCkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgb3Jp
Z2luYWwgcmFuZ2UgY29udGFpbnMgdGhlIG5ldyByYW5nZS4KLSAgICAgICAgICAgICAgICBzZWxl
Y3Rpb24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZSgqbm9ybWFsaXplZFJhbmdlKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRoZSByYW5nZXMgaW50ZXJz
ZWN0LgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8obWFrZURlcHJlY2F0ZWRMZWdh
Y3lQb3NpdGlvbigmbm9ybWFsaXplZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBub3JtYWxpemVk
UmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpLCBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZyYW5n
ZS5lbmRDb250YWluZXIoKSwgcmFuZ2UuZW5kT2Zmc2V0KCkpLCBET1dOU1RSRUFNKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKHJh
bmdlKTsKIH0KIAogdm9pZCBET01TZWxlY3Rpb246OmRlbGV0ZUZyb21Eb2N1bWVudCgpCkBAIC0z
OTIsNDUgKzM1MCwxOSBAQCB2b2lkIERPTVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KCkK
IAogYm9vbCBET01TZWxlY3Rpb246OmNvbnRhaW5zTm9kZShOb2RlJiBub2RlLCBib29sIGFsbG93
UGFydGlhbCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogVGhpcyBiZWhhdmlvciBkb2VzIG5vdCBt
YXRjaCB3aGF0IHRoZSBzZWxlY3Rpb24gQVBJIHN0YW5kYXJkIHNwZWNpZmllcy4KKyAgICBpZiAo
bm9kZS5pc1RleHROb2RlKCkpCisgICAgICAgIGFsbG93UGFydGlhbCA9IHRydWU7CisKICAgICBh
dXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOwot
ICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAhPSAmbm9kZS5kb2N1bWVudCgpIHx8IHNlbGVjdGlv
bi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmPE5vZGU+IHByb3Rl
Y3RlZE5vZGUobm9kZSk7Ci0gICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBpZiAoIXNlbGVj
dGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb250YWluaW5nU2hh
ZG93Um9vdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDb250YWluZXJOb2RlKiBw
YXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnROb2RlIHx8ICFw
YXJlbnROb2RlLT5pc0Nvbm5lY3RlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5z
aWduZWQgbm9kZUluZGV4ID0gbm9kZS5jb21wdXRlTm9kZUluZGV4KCk7Ci0KLSAgICBhdXRvIHN0
YXJ0c1Jlc3VsdCA9IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMocGFyZW50Tm9kZSwgbm9k
ZUluZGV4LCAmc2VsZWN0ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+
c3RhcnRPZmZzZXQoKSk7Ci0gICAgaWYgKHN0YXJ0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBlbmRzUmVzdWx0ID0gUmFuZ2U6OmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCAmc2VsZWN0ZWRSYW5n
ZS0+ZW5kQ29udGFpbmVyKCksIHNlbGVjdGVkUmFuZ2UtPmVuZE9mZnNldCgpKTsKLSAgICBBU1NF
UlQoIWVuZHNSZXN1bHQuaGFzRXhjZXB0aW9uKCkpOwotICAgIGJvb2wgaXNOb2RlRnVsbHlTZWxl
Y3RlZCA9ICFzdGFydHNSZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgc3RhcnRzUmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpID49IDAKLSAgICAgICAgJiYgIWVuZHNSZXN1bHQuaGFzRXhjZXB0aW9u
KCkgJiYgZW5kc1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwOwotICAgIGlmIChpc05v
ZGVGdWxseVNlbGVjdGVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1dG8gc3RhcnRF
bmRSZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBhcmVudE5vZGUsIG5vZGVJ
bmRleCwgJnNlbGVjdGVkUmFuZ2UtPmVuZENvbnRhaW5lcigpLCBzZWxlY3RlZFJhbmdlLT5lbmRP
ZmZzZXQoKSk7Ci0gICAgQVNTRVJUKCFzdGFydEVuZFJlc3VsdC5oYXNFeGNlcHRpb24oKSk7Ci0g
ICAgYXV0byBlbmRTdGFydFJlc3VsdCA9IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMocGFy
ZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgJnNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCks
IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwotICAgIEFTU0VSVCghZW5kU3RhcnRSZXN1
bHQuaGFzRXhjZXB0aW9uKCkpOwotICAgIGJvb2wgaXNOb2RlRnVsbHlVbnNlbGVjdGVkID0gKCFz
dGFydEVuZFJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBzdGFydEVuZFJlc3VsdC5yZWxlYXNlUmV0
dXJuVmFsdWUoKSA+IDApCi0gICAgICAgIHx8ICghZW5kU3RhcnRSZXN1bHQuaGFzRXhjZXB0aW9u
KCkgJiYgZW5kU3RhcnRSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwKTsKLSAgICBpZiAo
aXNOb2RlRnVsbHlVbnNlbGVjdGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gYWxsb3dQYXJ0aWFsIHx8IG5vZGUuaXNUZXh0Tm9kZSgpOworICAgIHJldHVybiBhbGxvd1Bh
cnRpYWwgPyBpbnRlcnNlY3RzKCpzZWxlY3RlZFJhbmdlLCBub2RlKSA6IGNvbnRhaW5zKCpzZWxl
Y3RlZFJhbmdlLCBub2RlKTsKIH0KIAogdm9pZCBET01TZWxlY3Rpb246OnNlbGVjdEFsbENoaWxk
cmVuKE5vZGUmIG5vZGUpCkBAIC00ODMsMTEgKzQxNSw3IEBAIHVuc2lnbmVkIERPTVNlbGVjdGlv
bjo6c2hhZG93QWRqdXN0ZWRPZmZzZXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAog
Ym9vbCBET01TZWxlY3Rpb246OmlzVmFsaWRGb3JQb3NpdGlvbihOb2RlKiBub2RlKSBjb25zdAog
ewogICAgIGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gJm5vZGUtPmRvY3VtZW50KCkgPT0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAg
cmV0dXJuIGZyYW1lICYmICghbm9kZSB8fCAmbm9kZS0+ZG9jdW1lbnQoKSA9PSBmcmFtZS0+ZG9j
dW1lbnQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAKaW5kZXggZjkyYWIzYmU2NDA4YmViMTY2NzQzZTU4M2YzY2NiODJk
NGE5ZWQ3My4uM2NjMmNlYmFjNWE4MDFmMzljODdhYTMwYWY5MDI5ZWZhZWZjMjllNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTE1NCw3ICsxNTQsNyBAQCBzdGF0
aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEo
Y29uc3QgRHJhZ0RhdGEmIGRyYQogICAgICAgICAgICAgU3RyaW5nIHRpdGxlOwogICAgICAgICAg
ICAgU3RyaW5nIHVybCA9IGRyYWdEYXRhLmFzVVJMKERyYWdEYXRhOjpEb05vdENvbnZlcnRGaWxl
bmFtZXMsICZ0aXRsZSk7CiAgICAgICAgICAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGNvbnRleHQuc3RhcnQuY29udGFpbmVyLT5kb2N1
bWVudCgpOworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gY29udGV4dC5zdGFydC5k
b2N1bWVudCgpOwogICAgICAgICAgICAgICAgIGF1dG8gYW5jaG9yID0gSFRNTEFuY2hvckVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgYW5jaG9yLT5zZXRIcmVmKHVy
bCk7CiAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkgewpAQCAtNzc0LDE3ICs3
NzQsMTMgQEAgRWxlbWVudCogRHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQoY29uc3Qg
RnJhbWUqIHNvdXJjZUZyYW1lLCBFbGVtZW50KiBzdGEKICAgICBzdGF0ZS50eXBlID0gc291cmNl
RnJhbWUtPnNlbGVjdGlvbigpLmNvbnRhaW5zKGRyYWdPcmlnaW4pID8gRHJhZ1NvdXJjZUFjdGlv
bjo6U2VsZWN0aW9uIDogT3B0aW9uU2V0PERyYWdTb3VyY2VBY3Rpb24+KHsgfSk7CiAgICAgaWYg
KCFzdGFydEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOworCiAjaWYgRU5BQkxFKEFU
VEFDSE1FTlRfRUxFTUVOVCkKICAgICBpZiAoYXV0byBhdHRhY2htZW50ID0gZW5jbG9zaW5nQXR0
YWNobWVudEVsZW1lbnQoKnN0YXJ0RWxlbWVudCkpIHsKLSAgICAgICAgYXV0byBzZWxlY3Rpb24g
PSBzb3VyY2VGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIGF1dG8mIHNl
bGVjdGlvbiA9IHNvdXJjZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAg
Ym9vbCBpc1NpbmdsZUF0dGFjaG1lbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uc3RhcnQoKSA9PSBQ
b3NpdGlvbihhdHRhY2htZW50LmdldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hv
cikgJiYgc2VsZWN0aW9uLmVuZCgpID09IFBvc2l0aW9uKGF0dGFjaG1lbnQuZ2V0KCksIFBvc2l0
aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpOwotICAgICAgICBib29sIGlzQXR0YWNobWVudEVs
ZW1lbnRJbkN1cnJlbnRTZWxlY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgaWYgKGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKSB7Ci0gICAgICAgICAgICBh
dXRvIGNvbXBhcmVSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb21w
YXJlTm9kZSgqYXR0YWNobWVudCk7Ci0gICAgICAgICAgICBpc0F0dGFjaG1lbnRFbGVtZW50SW5D
dXJyZW50U2VsZWN0aW9uID0gIWNvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgY29tcGFy
ZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSBSYW5nZTo6Tk9ERV9JTlNJREU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIWlzQXR0YWNobWVudEVsZW1lbnRJbkN1cnJlbnRTZWxlY3Rp
b24gfHwgaXNTaW5nbGVBdHRhY2htZW50U2VsZWN0aW9uKSB7CisgICAgICAgIGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7CisgICAgICAgIGlmIChpc1NpbmdsZUF0
dGFjaG1lbnRTZWxlY3Rpb24gfHwgIXNlbGVjdGVkUmFuZ2UgfHwgIWNvbnRhaW5zKCpzZWxlY3Rl
ZFJhbmdlLCAqYXR0YWNobWVudCkpIHsKICAgICAgICAgICAgIHN0YXRlLnR5cGUgPSBEcmFnU291
cmNlQWN0aW9uOjpBdHRhY2htZW50OwogICAgICAgICAgICAgcmV0dXJuIGF0dGFjaG1lbnQuZ2V0
KCk7CiAgICAgICAgIH0KQEAgLTE0NzEsOCArMTQ2Nyw3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6
Omluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2FyZXQoY29uc3QgVmVjdG9yPEludFNp
emU+CiAKICAgICBWZWN0b3I8UmVmPEhUTUxJbWFnZUVsZW1lbnQ+PiBwbGFjZWhvbGRlcnM7CiAg
ICAgZm9yIChhdXRvJiBwbGFjZWhvbGRlciA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxJbWFnZUVs
ZW1lbnQ+KGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpjb250YWluZXIpKSkgewotICAgICAgICBh
dXRvIGludGVyc2VjdHNOb2RlID0gY3JlYXRlTGl2ZVJhbmdlKCppbnNlcnRlZENvbnRlbnRSYW5n
ZSktPmludGVyc2VjdHNOb2RlKHBsYWNlaG9sZGVyKTsKLSAgICAgICAgaWYgKCFpbnRlcnNlY3Rz
Tm9kZS5oYXNFeGNlcHRpb24oKSAmJiBpbnRlcnNlY3RzTm9kZS5yZXR1cm5WYWx1ZSgpKQorICAg
ICAgICBpZiAoaW50ZXJzZWN0cygqaW5zZXJ0ZWRDb250ZW50UmFuZ2UsIHBsYWNlaG9sZGVyKSkK
ICAgICAgICAgICAgIHBsYWNlaG9sZGVycy5hcHBlbmQocGxhY2Vob2xkZXIpOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGE4MmJjODIxY2ViYTMyZWJjODRk
MTVlMjAzMDYzZTgzZmQzZTU1ZjEuLjA5ZWIwNmRmNGEzMDM2ZmE1NTg3ZDM4YWZmOTE5YzhiZTYx
MTNlZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTI3NDYsOCArMjc0
Niw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgQXRvbVN0
cmluZyYgZXZlbnRUeXBlLCBOb2RlKiB0YXJnZXROCiAgICAgLy8gd2lsbCBzZXQgYSBzZWxlY3Rp
b24gaW5zaWRlIGl0LCB3aGljaCB3aWxsIGFsc28gc2V0IHRoZSBmb2N1c2VkIGVsZW1lbnQuCiAg
ICAgaWYgKGVsZW1lbnQgJiYgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAg
ICAgaWYgKGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJh
bmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKCplbGVtZW50KTsKLSAgICAgICAgICAgIGlmICghcmVz
dWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSBSYW5n
ZTo6Tk9ERV9JTlNJREUgJiYgZWxlbWVudC0+aXNEZXNjZW5kYW50T2YobV9mcmFtZS5kb2N1bWVu
dCgpLT5mb2N1c2VkRWxlbWVudCgpKSkKKyAgICAgICAgICAgIGlmIChjb250YWlucygqcmFuZ2Us
ICplbGVtZW50KSAmJiBlbGVtZW50LT5pc0Rlc2NlbmRhbnRPZihtX2ZyYW1lLmRvY3VtZW50KCkt
PmZvY3VzZWRFbGVtZW50KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggNDk3MjlkMDk2OTc4MDExZThlNzUwYWEz
ODQ4YjZiYzM0MDBlMzA2MS4uYTc3ODEwYjAyMGJmNWE4ZDg1MjJjYWM4YjI1YjM2OTI1ODgzMjU5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC03MzAsMTkgKzczMCwxOSBAQCBhdXRvIFBhZ2U6OmZp
bmRUZXh0TWF0Y2hlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywg
dW5zaWduZWQgbAogCiAgICAgaWYgKGZyYW1lV2l0aFNlbGVjdGlvbikgewogICAgICAgICByZXN1
bHQuaW5kZXhGb3JTZWxlY3Rpb24gPSBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9uOwotICAgICAg
ICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBmcmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gKmZy
YW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwog
ICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKSB7CiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gcmVzdWx0LnJhbmdlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIGNvbXBhcmlzb25SZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0
ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCBjcmVh
dGVMaXZlUmFuZ2UocmVzdWx0LnJhbmdlc1tpIC0gMV0pKTsKLSAgICAgICAgICAgICAgICBpZiAo
IWNvbXBhcmlzb25SZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgY29tcGFyaXNvblJlc3VsdC5yZXR1
cm5WYWx1ZSgpID4gMCkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTZWVtcyBsaWtlIHRo
aXMgc2hvdWxkIGJlIGlzX2d0ZXEgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgc2FtZSBzdHJpbmcg
Zm91bmQgdHdpY2UgaW4gYSByb3cuCisgICAgICAgICAgICAgICAgaWYgKGlzX2d0KGRvY3VtZW50
T3JkZXIoc2VsZWN0ZWRSYW5nZS5zdGFydCwgcmVzdWx0LnJhbmdlc1tpIC0gMV0uZW5kKSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uID0gaSAtIDE7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXpl
ID0gcmVzdWx0LnJhbmdlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIGNvbXBhcmlzb25SZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSkt
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBjcmVhdGVMaXZlUmFu
Z2UocmVzdWx0LnJhbmdlc1tpXSkpOwotICAgICAgICAgICAgICAgIGlmICghY29tcGFyaXNvblJl
c3VsdC5oYXNFeGNlcHRpb24oKSAmJiBjb21wYXJpc29uUmVzdWx0LnJldHVyblZhbHVlKCkgPCAw
KSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNlZW1zIGxpa2UgdGhpcyBzaG91bGQgYmUg
aXNfbHRlcSB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBzYW1lIHN0cmluZyBmb3VuZCB0d2ljZSBp
biBhIHJvdy4KKyAgICAgICAgICAgICAgICBpZiAoaXNfbHQoZG9jdW1lbnRPcmRlcihzZWxlY3Rl
ZFJhbmdlLmVuZCwgcmVzdWx0LnJhbmdlc1tpXS5zdGFydCkpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbiA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTc2MywxMSArNzYzLDExIEBAIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiBQYWdlOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25z
dCBPcHRpb25hbDxTCiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBpZiAocmVmZXJlbmNlUmFuZ2UgJiYgcmVmZXJlbmNlUmFuZ2Ut
PnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5wYWdlKCkgIT0gdGhpcykKKyAgICBpZiAocmVm
ZXJlbmNlUmFuZ2UgJiYgcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkucGFnZSgpICE9
IHRoaXMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBDYW5XcmFwIGNhbldy
YXAgPSBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91bmQpID8gQ2FuV3JhcDo6WWVzIDogQ2FuV3Jh
cDo6Tm87Ci0gICAgRnJhbWUqIGZyYW1lID0gcmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5n
ZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbWFpbkZyYW1lKCk7Cisg
ICAgRnJhbWUqIGZyYW1lID0gcmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+c3RhcnQu
ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1haW5GcmFtZSgpOwogICAgIEZyYW1lKiBzdGFydEZyYW1l
ID0gZnJhbWU7CiAgICAgZG8gewogICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IGZyYW1l
LT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgZnJhbWUgPT0gc3RhcnRGcmFtZSA/IHJl
ZmVyZW5jZVJhbmdlIDogV1RGOjpudWxsb3B0LCBvcHRpb25zIC0gV3JhcEFyb3VuZCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5t
bQppbmRleCAyZWZjNDFlM2Q0MjczMjY1OTI3YWRlNWI4YmJhOTZhNzcxMjM2OTg1Li5mMTZlYmM1
ODZjN2E3YzA0MThmNDdlZjk0YzY1NTYzMjc4Yjk5NWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTYzMCw3ICs2
MzAsNyBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQqIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OmZpbmRUZWxlcGhvbmVOdQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7Ci0g
ICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlRlbGVwaG9uZU51bWJl
clR5cGUgJiYgY3JlYXRlTGl2ZVJhbmdlKGhpZ2hsaWdodC0+cmFuZ2UoKSktPmNvbnRhaW5zKGNy
ZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpKSkKKyAgICAgICAgaWYgKGhpZ2hsaWdodC0+
dHlwZSgpID09IEhpZ2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSAmJiBjb250YWlucyhoaWdo
bGlnaHQtPnJhbmdlKCksICpzZWxlY3Rpb25SYW5nZSkpCiAgICAgICAgICAgICByZXR1cm4gaGln
aGxpZ2h0LmdldCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAppbmRleCBiNmVhMTU1MzA3OTc3ZDllNTdkMjRhODA3ZTBmMjY3MjhlOWNlZGIyLi45
NmJkZjU0ZTVjM2EyMzM1MWRhYTlhNjEyMWIxOTA3OWU3M2M0OWU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTk3NSw3ICsxOTc1LDcgQEAgc3RhdGlj
IFZlY3RvcjxGbG9hdFJlY3Q+IGJvcmRlckFuZFRleHRSZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIENvb3JkaW5hdGUKIHsKICAgICBWZWN0b3I8RmxvYXRSZWN0PiByZWN0czsKIAotICAg
IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAgYm9vbCB1c2VWaXNpYmxlQm91bmRz
ID0gYmVoYXZpb3IuY29udGFpbnMoUmVuZGVyT2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6
VXNlVmlzaWJsZUJvdW5kcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCA2NzM0NjNiODhjYjg2YjBkYmUzNzZjZDhiODU5MGFiNzk0ZmNmN2JlLi4zNDY3MGU2MmEzYmQ5
ZDYwMWY4OTMxMzM1OWUxYmUyNDgwZDY5MjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC0yMTYxLDI3ICsyMTYxLDQ1IEBAIHVuc2lnbmVkIEludGVybmFsczo6bGVuZ3Ro
RnJvbVJhbmdlKEVsZW1lbnQmIHNjb3BlLCBjb25zdCBSYW5nZSYgcmFuZ2UpCiAgICAgcmV0dXJu
IGNsYW1wVG88dW5zaWduZWQ+KGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3Jl
Tm9kZUNvbnRlbnRzKHNjb3BlKSwgbWFrZVNpbXBsZVJhbmdlKHJhbmdlKSkubGVuZ3RoKTsKIH0K
IAotU3RyaW5nIEludGVybmFsczo6cmFuZ2VBc1RleHQoY29uc3QgUmFuZ2UmIHJhbmdlKQorU3Ry
aW5nIEludGVybmFsczo6cmFuZ2VBc1RleHQoY29uc3QgUmFuZ2UmIGxpdmVSYW5nZSkKIHsKLSAg
ICByZXR1cm4gcmFuZ2UudGV4dCgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uo
bGl2ZVJhbmdlKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwor
ICAgIHJldHVybiBwbGFpblRleHQocmFuZ2UpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpyYW5n
ZUFzVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlJiByYW5nZSkKKy8v
IEZJWE1FOiBGaW5kIGEgZ29vZCBwbGFjZSBmb3IgdGhpcyBnZW5lcmFsIHB1cnBvc2UgYWxnb3Jp
dGhtLgorc3RhdGljIFN0cmluZyBqb2luKFZlY3RvcjxTdHJpbmc+JiYgc3RyaW5ncykKIHsKLSAg
ICBTdHJpbmcgcmVzdWx0OwotICAgIGZvciAoU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRv
ciBiYWNrd2FyZHNJdGVyYXRvcihtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsgIWJhY2t3YXJkc0l0
ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKLSAgICAgICAgcmVz
dWx0Lmluc2VydChiYWNrd2FyZHNJdGVyYXRvci50ZXh0KCkudG9TdHJpbmcoKSwgMCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICBmb3IgKGF1dG8m
IHN0cmluZyA6IHN0cmluZ3MpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShzdHJpbmcp
KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBJbnRlcm5hbHM6
OnJhbmdlQXNUZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UmIGxpdmVS
YW5nZSkKK3sKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGxpdmVSYW5nZSk7Cisg
ICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKKyAgICBWZWN0b3I8U3Ry
aW5nPiBzdHJpbmdzOworICAgIGZvciAoU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBi
YWNrd2FyZHNJdGVyYXRvcihyYW5nZSk7ICFiYWNrd2FyZHNJdGVyYXRvci5hdEVuZCgpOyBiYWNr
d2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpCisgICAgICAgIHN0cmluZ3MuYXBwZW5kKGJhY2t3YXJk
c0l0ZXJhdG9yLnRleHQoKS50b1N0cmluZygpKTsKKyAgICBzdHJpbmdzLnJldmVyc2UoKTsKKyAg
ICByZXR1cm4gam9pbihXVEZNb3ZlKHN0cmluZ3MpKTsKIH0KIAotUmVmPFJhbmdlPiBJbnRlcm5h
bHM6OnN1YnJhbmdlKFJhbmdlJiByYW5nZSwgdW5zaWduZWQgcmFuZ2VMb2NhdGlvbiwgdW5zaWdu
ZWQgcmFuZ2VMZW5ndGgpCitSZWY8UmFuZ2U+IEludGVybmFsczo6c3VicmFuZ2UoUmFuZ2UmIGxp
dmVSYW5nZSwgdW5zaWduZWQgcmFuZ2VMb2NhdGlvbiwgdW5zaWduZWQgcmFuZ2VMZW5ndGgpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVNp
bXBsZVJhbmdlKHJhbmdlKSwgeyByYW5nZUxvY2F0aW9uLCByYW5nZUxlbmd0aCB9KSk7CisgICAg
YXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShsaXZlUmFuZ2UpOworICAgIHJhbmdlLnN0YXJ0
LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UocmFuZ2UsIHsgcmFuZ2VMb2NhdGlvbiwgcmFuZ2VMZW5ndGgg
fSkpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEludGVybmFsczo6cmFuZ2VPZlN0cmluZ05lYXJMb2Nh
dGlvbihjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQgdGFy
Z2V0T2Zmc2V0KQorUmVmUHRyPFJhbmdlPiBJbnRlcm5hbHM6OnJhbmdlT2ZTdHJpbmdOZWFyTG9j
YXRpb24oY29uc3QgUmFuZ2UmIGxpdmVSYW5nZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCB1bnNpZ25l
ZCB0YXJnZXRPZmZzZXQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShmaW5kQ2xvc2Vz
dFBsYWluVGV4dChtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpLCB0ZXh0LCB7IH0sIHRhcmdldE9mZnNl
dCkpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobGl2ZVJhbmdlKTsKKyAgICBy
YW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworICAgIHJldHVybiBjcmVhdGVM
aXZlUmFuZ2UoZmluZENsb3Nlc3RQbGFpblRleHQocmFuZ2UsIHRleHQsIHsgfSwgdGFyZ2V0T2Zm
c2V0KSk7CiB9CiAKICNpZiAhUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbSBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0K
aW5kZXggY2YyNjlhMWNkZDMwMmE0M2I5N2FiMmI2MDAwYzBhZDMwMjgwZTgyMi4uM2NhZDJjNWU4
MTBiZjRiYjY1M2E0ZDQ5NTZjMDcxZDVlODJlYTg3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdl
Lm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJXS0J1bmRsZUFQSUNhc3QuaCIKICNpbXBv
cnQgIldLRE9NSW50ZXJuYWxzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaXNpYmxlVW5p
dHMuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCkBAIC00OSwxMiArNTAs
NyBAQCAtIChpZClfaW5pdFdpdGhJbXBsOihXZWJDb3JlOjpSYW5nZSopaW1wbAogCiAtIChpZClp
bml0V2l0aERvY3VtZW50OihXS0RPTURvY3VtZW50ICopZG9jdW1lbnQKIHsKLSAgICBhdXRvIHJh
bmdlID0gV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZSgqV2ViS2l0Ojp0b1dlYkNvcmVEb2N1bWVudChk
b2N1bWVudCkpOwotICAgIHNlbGYgPSBbc2VsZiBfaW5pdFdpdGhJbXBsOnJhbmdlLnB0cigpXTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsK
KyAgICByZXR1cm4gW3NlbGYgX2luaXRXaXRoSW1wbDpXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKCpX
ZWJLaXQ6OnRvV2ViQ29yZURvY3VtZW50KGRvY3VtZW50KSkucHRyKCldOwogfQogCiAtICh2b2lk
KWRlYWxsb2MKQEAgLTExOCw3ICsxMTQsOSBAQCAtIChOU0ludGVnZXIpZW5kT2Zmc2V0CiAKIC0g
KE5TU3RyaW5nICopdGV4dAogewotICAgIHJldHVybiBfaW1wbC0+dGV4dCgpOworICAgIGF1dG8g
cmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKl9pbXBsKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVu
dCgpLnVwZGF0ZUxheW91dCgpOworICAgIHJldHVybiBwbGFpblRleHQocmFuZ2UpOwogfQogCiAt
IChCT09MKWlzQ29sbGFwc2VkCkBAIC0xMjgsOCArMTI2LDkgQEAgLSAoQk9PTClpc0NvbGxhcHNl
ZAogCiAtIChOU0FycmF5ICopdGV4dFJlY3RzCiB7Ci0gICAgX2ltcGwtPm93bmVyRG9jdW1lbnQo
KS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gY3Jl
YXRlTlNBcnJheShXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKG1ha2VT
aW1wbGVSYW5nZSgqX2ltcGwpKSkuYXV0b3JlbGVhc2UoKTsKKyAgICBhdXRvIHJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKCpfaW1wbCk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJh
eShXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKSkuYXV0b3Jl
bGVhc2UoKTsKIH0KIAogLSAoV0tET01SYW5nZSAqKXJhbmdlQnlFeHBhbmRpbmdUb1dvcmRCb3Vu
ZGFyeUJ5Q2hhcmFjdGVyczooTlNVSW50ZWdlciljaGFyYWN0ZXJzIGluRGlyZWN0aW9uOihXS0RP
TVJhbmdlRGlyZWN0aW9uKWRpcmVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZS5jcHAKaW5kZXggNjNmM2M3ODZlNmZiMjE1YzlhMmY0ZTI1OWZhYzllNjEx
YjZkYjhiMi4uNWEyNmU1MzNmYzE1ZmVmZjI1ZWQ4MGM3MjdkMTNlMGE3NGVjZGJhYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCkBAIC00NCw2ICs0
NCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVu
ZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVmlzaWJsZVNlbGVjdGlv
bi5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CkBAIC05NywyMyArOTgsMzIgQEAgUmFuZ2UmIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGU6OmNvcmVSYW5nZSgpIGNvbnN0CiAKIFJlZjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+IElu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmRvY3VtZW50KCkKIHsKLSAgICByZXR1cm4gSW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShtX3JhbmdlLT5vd25lckRvY3VtZW50KCkp
OworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKG1fcmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSk7CiB9CiAKIFdlYkNvcmU6OkludFJlY3Qg
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Ym91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRl
cygpIGNvbnN0CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9yYW5nZS0+b3duZXJEb2N1bWVudCgp
LmZyYW1lKCk7Ci0gICAgcmV0dXJuIGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZW5j
bG9zaW5nSW50UmVjdCh1bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0cyhSZW5kZXJPYmplY3Q6OmFi
c29sdXRlQm9yZGVyQW5kVGV4dFJlY3RzKG1ha2VTaW1wbGVSYW5nZShtX3JhbmdlKSkpKSk7Cisg
ICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShtX3JhbmdlKTsKKyAgICBhdXRvIGZyYW1l
ID0gcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybiB7IH07CisgICAgYXV0byB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAo
IXZpZXcpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9X
aW5kb3coZW5jbG9zaW5nSW50UmVjdCh1bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0cyhSZW5kZXJP
YmplY3Q6OmFic29sdXRlQm9yZGVyQW5kVGV4dFJlY3RzKHJhbmdlKSkpKTsKIH0KIAogUmVmUHRy
PFdlYkltYWdlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpyZW5kZXJlZEltYWdlKFNuYXBz
aG90T3B0aW9ucyBvcHRpb25zKQogewotICAgIERvY3VtZW50JiBvd25lckRvY3VtZW50ID0gbV9y
YW5nZS0+b3duZXJEb2N1bWVudCgpOwotICAgIEZyYW1lKiBmcmFtZSA9IG93bmVyRG9jdW1lbnQu
ZnJhbWUoKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpOworCisg
ICAgYXV0byBkb2N1bWVudCA9IG1ha2VSZWYocmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKSk7CisKKyAg
ICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cihkb2N1bWVudC0+ZnJhbWUoKSk7CiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IGZyYW1lLT52aWV3KCk7CisgICAgYXV0byBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOwog
ICAgIGlmICghZnJhbWVWaWV3KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTIxLDEz
ICsxMzEsMTEgQEAgUmVmUHRyPFdlYkltYWdlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpy
ZW5kZXJlZEltYWdlKFNuYXBzaG90T3B0aW9ucyBvcHRpb24KICAgICBMb2NhbERlZmF1bHRTeXN0
ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShmcmFtZVZpZXctPnVzZURhcmtBcHBlYXJhbmNl
KCkpOwogI2VuZGlmCiAKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcigqZnJhbWUpOwotCiAgICAg
VmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihtYWtlU2ltcGxlUmFu
Z2UobV9yYW5nZSkpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24ocmFuZ2Up
OwogCiAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAob3B0aW9ucyAmIFNuYXBzaG90T3B0aW9uc0V4
Y2x1ZGVEZXZpY2VTY2FsZUZhY3RvcikgPyAxIDogZnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKTsKLSAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodW5pb25S
ZWN0SWdub3JpbmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvcmRlckFuZFRleHRS
ZWN0cyhtYWtlU2ltcGxlUmFuZ2UobV9yYW5nZSkpKSk7CisgICAgSW50UmVjdCBwYWludFJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVj
dDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMocmFuZ2UpKSk7CiAgICAgSW50U2l6ZSBiYWNr
aW5nU3RvcmVTaXplID0gcGFpbnRSZWN0LnNpemUoKTsKICAgICBiYWNraW5nU3RvcmVTaXplLnNj
YWxlKHNjYWxlRmFjdG9yKTsKIApAQCAtMTU1LDcgKzE2Myw3IEBAIFJlZlB0cjxXZWJJbWFnZT4g
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6cmVuZGVyZWRJbWFnZShTbmFwc2hvdE9wdGlvbnMg
b3B0aW9uCiAgICAgICAgIHBhaW50QmVoYXZpb3IuYWRkKFBhaW50QmVoYXZpb3I6OkZvcmNlV2hp
dGVUZXh0KTsKIAogICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihwYWludEJlaGF2aW9y
KTsKLSAgICBvd25lckRvY3VtZW50LnVwZGF0ZUxheW91dCgpOworICAgIGRvY3VtZW50LT51cGRh
dGVMYXlvdXQoKTsKIAogICAgIGZyYW1lVmlldy0+cGFpbnQoKmdyYXBoaWNzQ29udGV4dCwgcGFp
bnRSZWN0KTsKICAgICBmcmFtZVZpZXctPnNldFBhaW50QmVoYXZpb3Iob2xkUGFpbnRCZWhhdmlv
cik7CkBAIC0xNjcsNyArMTc1LDkgQEAgUmVmUHRyPFdlYkltYWdlPiBJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlOjpyZW5kZXJlZEltYWdlKFNuYXBzaG90T3B0aW9ucyBvcHRpb24KIAogU3RyaW5n
IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnRleHQoKSBjb25zdAogewotICAgIHJldHVybiBt
X3JhbmdlLT50ZXh0KCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShtX3Jhbmdl
KTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworICAgIHJldHVy
biBwbGFpblRleHQocmFuZ2UpOwogfQogCiBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZT4gY3JlYXRlSGFuZGxlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFu
Z2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAKaW5kZXggMmE1N2ZkMjA5ZTYzNTcwYjczODkyM2YwYjU5ZmIzY2NkYjJmNGQ0NC4u
YjhjMDdiOGMyNTQwNjJkYWZiZmQzY2M2ODQyMjcxZmFkZjc2MTMyNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtMzA1
LDcgKzMwNSw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmdldEltYWdlRm9yRmluZE1hdGNoKHVp
bnQzMl90IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1hdGNoSW5kZXggPj0gbV9maW5kTWF0Y2hl
cy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRj
aGVzW21hdGNoSW5kZXhdLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAg
IEZyYW1lKiBmcmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0uc3RhcnQuZG9jdW1lbnQo
KS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzM2LDcg
KzMzNiw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OnNlbGVjdEZpbmRNYXRjaCh1aW50MzJfdCBt
YXRjaEluZGV4KQogewogICAgIGlmIChtYXRjaEluZGV4ID49IG1fZmluZE1hdGNoZXMuc2l6ZSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9maW5kTWF0Y2hlc1ttYXRj
aEluZGV4XS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBGcmFtZSog
ZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLnN0YXJ0LmRvY3VtZW50KCkuZnJhbWUo
KTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgZnJhbWUtPnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZTlk
NjdmMDE3NTdkZWM1OTIzMTczZTNjM2E1YTc3YTRjYzA4Y2Q3Yi4uMTBlOWQxODk1ZmJkYzljMzUy
YzFhNmEyNjE5NTA5ODU4NWI0MGIzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTQxODQsNyArNDE4NCw3IEBAIHZvaWQg
V2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29u
dGV4dFJlcXVlc3QgcmVxdWVzCiAKICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0byByYW5nZU9mSW50ZXJlc3QgPSAqbWFrZVNp
bXBsZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCByYW5nZU9mSW50ZXJlc3RFbmQpOwotICAg
IGlmIChzZWxlY3Rpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKGNyZWF0ZUxpdmVSYW5nZShyYW5n
ZU9mSW50ZXJlc3QpLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKS5wdHIo
KSkpIHsKKyAgICBpZiAoc2VsZWN0aW9uUmFuZ2UgJiYgaW50ZXJzZWN0cyhyYW5nZU9mSW50ZXJl
c3QsICpzZWxlY3Rpb25SYW5nZSkpIHsKICAgICAgICAgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdElu
U2VsZWN0aW9uID0gc3RkOjptYXgocmFuZ2VPZkludGVyZXN0U3RhcnQsIHNlbGVjdGlvblN0YXJ0
KTsKICAgICAgICAgZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHN0ZDo6bWluKHJh
bmdlT2ZJbnRlcmVzdEVuZCwgc2VsZWN0aW9uRW5kKTsKICAgICB9IGVsc2UgewpAQCAtNDI0OSw3
ICs0MjQ5LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChE
b2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICBjb250ZXh0LmNvbnRleHRC
ZWZvcmUgPSBtYWtlU3RyaW5nKGNvbnRleHRCZWZvcmVTdGFydCwgc3RhcnRPZlJhbmdlT2ZJbnRl
cmVzdEluU2VsZWN0aW9uKTsKICAgICBjb250ZXh0LnNlbGVjdGVkVGV4dCA9IG1ha2VTdHJpbmco
c3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uLCBlbmRPZlJhbmdlT2ZJbnRlcmVzdElu
U2VsZWN0aW9uKTsKICAgICBjb250ZXh0LmNvbnRleHRBZnRlciA9IG1ha2VTdHJpbmcoZW5kT2ZS
YW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiwgY29udGV4dEFmdGVyRW5kKTsKLSAgICBpZiAoY29t
cG9zaXRpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKGNyZWF0ZUxpdmVSYW5nZShyYW5nZU9mSW50
ZXJlc3QpLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UpLnB0cigpKSkg
eworICAgIGlmIChjb21wb3NpdGlvblJhbmdlICYmIGludGVyc2VjdHMocmFuZ2VPZkludGVyZXN0
LCAqY29tcG9zaXRpb25SYW5nZSkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGNvbXBvc2l0
aW9uU3RhcnQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPnN0
YXJ0KSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvbkVuZChjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+ZW5kKSk7CiAgICAgICAgIGNvbnRl
eHQubWFya2VkVGV4dCA9IG1ha2VTdHJpbmcoY29tcG9zaXRpb25TdGFydCwgY29tcG9zaXRpb25F
bmQpOwpAQCAtNDI2NSw3ICs0MjY1LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRF
ZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAg
ICAgd2hpbGUgKCFpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgICAgICBpZiAoIWl0ZXJhdG9y
LnRleHQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBhdXRvIGFic29sdXRlQm91bmRp
bmdCb3ggPSB1bmlvblJlY3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhpdGVyYXRv
ci5yYW5nZSgpLCBSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpJZ25vcmVFbXB0
eVRleHRTZWxlY3Rpb25zKSk7Ci0gICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHsgaXRlcmF0
b3IucmFuZ2UoKS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkudmlldygpLT5jb250ZW50c1Rv
Um9vdFZpZXcoYWJzb2x1dGVCb3VuZGluZ0JveCksIHsgb2Zmc2V0U29GYXIrKywgc3RyaWRlIH0g
fSk7CisgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHsgaXRlcmF0b3IucmFuZ2UoKS5zdGFy
dC5kb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGFic29sdXRlQm91bmRpbmdC
b3gpLCB7IG9mZnNldFNvRmFyKyssIHN0cmlkZSB9IH0pOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaXRlcmF0b3IuYWR2YW5jZShzdHJpZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGZmNzQw
ZjVmZWNkMzczMjU0MjUwOTM2ZWU4ZDFhYTgzMGVlZmQ1MTAuLmM5ZTZlMzc1ODNiN2FlZmRmN2Q2
ZjEwN2Y0OTRiNmVkYjQ1MGU4MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC04NzcsNyArODc3LDcgQEAgdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6Rmxv
YXRQb2ludCBsb2NhdGkKICAgICAgICAgaWYgKCFhY3Rpb25Db250ZXh0KQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgYXV0byB2aWV3ID0gYWN0aW9uQ29udGV4dC0+cmFuZ2Uuc3Rh
cnQuY29udGFpbmVyLT5kb2N1bWVudCgpLnZpZXcoKTsKKyAgICAgICAgYXV0byB2aWV3ID0gYWN0
aW9uQ29udGV4dC0+cmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS52aWV3KCk7CiAgICAgICAgIGlmICgh
dmlldykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9ET00vRE9NLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5t
bQppbmRleCBkZTVlYThkNmJjOTAzZGRlZWFhZjYxMDQ0ZjQ0ODQ4MTlkNmJlZWExLi41YjhjYjZj
MzhjN2E1YjE2Njc0YmYxNGFjMDEyMGMzNWZkZjNhZGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET00ubW0KQEAgLTU3MCwxMCArNTcwLDkgQEAgLSAoQ0dSZWN0KWJvdW5kaW5nQm94CiAtIChO
U1JlY3QpYm91bmRpbmdCb3gKICNlbmRpZgogewotICAgIC8vIEZJWE1FOiBUaGUgY2FsbCB0byB1
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgc2hvdWxkIGJlIG1vdmVkIGludG8g
V2ViQ29yZTo6UmFuZ2UuCi0gICAgYXV0byYgcmFuZ2UgPSAqY29yZShzZWxmKTsKLSAgICByYW5n
ZS5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
Ci0gICAgcmV0dXJuIHVuaW9uUmVjdChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKG1h
a2VTaW1wbGVSYW5nZShyYW5nZSkpKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdl
KCpjb3JlKHNlbGYpKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJldHVybiB1bmlvblJlY3QoUmVuZGVyT2Jq
ZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSkpOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQpA
QCAtNTgzLDcgKzU4Miw3IEBAIC0gKENHSW1hZ2VSZWYpcmVuZGVyZWRJbWFnZUZvcmNpbmdCbGFj
a1RleHQ6KEJPT0wpZm9yY2VCbGFja1RleHQKICNlbmRpZgogewogICAgIGF1dG8gcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UoKmNvcmUoc2VsZikpOwotICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRy
KHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKKyAgICBhdXRvIGZy
YW1lID0gbWFrZVJlZlB0cihyYW5nZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIGlm
ICghZnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTYwMiw3ICs2MDEsNyBAQCAtIChD
R0ltYWdlUmVmKXJlbmRlcmVkSW1hZ2VGb3JjaW5nQmxhY2tUZXh0OihCT09MKWZvcmNlQmxhY2tU
ZXh0CiAtIChOU0FycmF5ICopdGV4dFJlY3RzCiB7CiAgICAgYXV0byByYW5nZSA9IG1ha2VTaW1w
bGVSYW5nZSgqY29yZShzZWxmKSk7Ci0gICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVu
dCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJhbmdlLnN0
YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAg
ICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhy
YW5nZSkpLmF1dG9yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01SYW5nZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01S
YW5nZS5tbQppbmRleCA1ZWUwYmNkZmQ5OTc0MzcyYTNlYmM0YWQyYTg3YWY4M2JkZjUzZjUxLi4y
ODc2NjBmZWNhZTk4NmRmOWIzOWQ4ZDU3ZTAzZWJiY2QwZjk0MTkyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL0pTRXhlY1N0YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1NpbXBsZVJhbmdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9UaHJlYWRDaGVjay5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
T2JqQ0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmg+
CkBAIC05Miw3ICs5Myw5IEBAIC0gKERPTU5vZGUgKiljb21tb25BbmNlc3RvckNvbnRhaW5lcgog
LSAoTlNTdHJpbmcgKil0ZXh0CiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIHJldHVybiBJTVBMLT50ZXh0KCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VT
aW1wbGVSYW5nZSgqSU1QTCk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlv
dXQoKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlKTsKIH0KIAogLSAodm9pZClzZXRTdGFy
dDooRE9NTm9kZSAqKXJlZk5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0CkBAIC0xNzAsNyArMTczLDcg
QEAgLSAoc2hvcnQpY29tcGFyZUJvdW5kYXJ5UG9pbnRzOih1bnNpZ25lZCBzaG9ydClob3cgc291
cmNlUmFuZ2U6KERPTVJhbmdlICopc291cmMKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CiAgICAgaWYgKCFzb3VyY2VSYW5nZSkKICAgICAgICAgcmFpc2VUeXBlRXJy
b3JFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gcmFpc2VPbkRPTUVycm9yKElNUEwtPmNvbXBhcmVC
b3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKGhvdywgKmNvcmUoc291cmNlUmFuZ2UpKSk7CisgICAg
cmV0dXJuIHJhaXNlT25ET01FcnJvcihJTVBMLT5jb21wYXJlQm91bmRhcnlQb2ludHMoaG93LCAq
Y29yZShzb3VyY2VSYW5nZSkpKTsKIH0KIAogLSAodm9pZClkZWxldGVDb250ZW50cwpAQCAtMjQ0
LDcgKzI0Nyw3IEBAIC0gKEJPT0wpaW50ZXJzZWN0c05vZGU6KERPTU5vZGUgKilyZWZOb2RlCiAg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGlmICghcmVmTm9k
ZSkKICAgICAgICAgcmFpc2VUeXBlRXJyb3JFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gcmFpc2VP
bkRPTUVycm9yKElNUEwtPmludGVyc2VjdHNOb2RlKCpjb3JlKHJlZk5vZGUpKSk7CisgICAgcmV0
dXJuIElNUEwtPmludGVyc2VjdHNOb2RlKCpjb3JlKHJlZk5vZGUpKTsKIH0KIAogLSAoc2hvcnQp
Y29tcGFyZVBvaW50OihET01Ob2RlICopcmVmTm9kZSBvZmZzZXQ6KGludClvZmZzZXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCmluZGV4
IGFlNWM0OWJmMTQ3NThmMzE0MDk0MjBkOWY2ZDU1YTJlNjM2MjYxYzkuLjU4NzFkMDA4YWFjZjdh
MjJjYjhjZDZkY2ZiYWY0ZjRiNDc0N2MzNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpAQCAtNTEsNyArNTEsNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9IVE1MVGV4dEFyZWFFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ltYWdl
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0lubGluZUJveC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Ob2Rl
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL05vZGVUcmF2ZXJzYWwuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQmxvY2suaD4KICNpbXBvcnQgPFdlYkNv
cmUvUmVuZGVyQmxvY2tGbG93Lmg+CkBAIC0xMjQsOSArMTI0LDIxIEBAIC0gKHZvaWQpZXh0ZW5k
OihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilk
aXJlY3Rpb24KICAgICAgICAgcmFuZ2Uuc2V0RW5kKCplbmQuY29udGFpbmVyTm9kZSgpLCBlbmQu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogfQogCisvLyBGSVhNRTogQ291bGQgdXNlIFNpbXBs
ZVJhbmdlOjppbnRlcnNlY3RpbmdOb2RlcyBpbnN0ZWFkLCBpZiB3ZSBkaWQgbm90IHdhbnQgdG8g
cHJlc2VydmUgdGhlIGhpc3RvcmljYWwgYmVoYXZpb3Igb2YgcmV0dXJuaW5nIGEgbm9kZSB3aXRo
IG5vIGNoaWxkcmVuIHdoZW4gdGhlIHJhbmdlIHN0YXJ0cyBpbnNpZGUgaXQuCitzdGF0aWMgV2Vi
Q29yZTo6Tm9kZSogZmlyc3ROb2RlQWZ0ZXIoY29uc3QgV2ViQ29yZTo6Qm91bmRhcnlQb2ludCYg
cG9pbnQpCit7CisgICAgaWYgKHBvaW50LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgp
KQorICAgICAgICByZXR1cm4gcG9pbnQuY29udGFpbmVyLnB0cigpOworICAgIGlmIChhdXRvIGNo
aWxkID0gcG9pbnQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChwb2ludC5vZmZzZXQpKQor
ICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgaWYgKCFwb2ludC5vZmZzZXQpCisgICAgICAgIHJl
dHVybiBwb2ludC5jb250YWluZXIucHRyKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6Ok5vZGVUcmF2
ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHBvaW50LmNvbnRhaW5lcik7Cit9CisKIC0gKERP
TU5vZGUgKilmaXJzdE5vZGUKIHsKLSAgICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPmZpcnN0Tm9k
ZSgpKTsKKyAgICByZXR1cm4ga2l0KGZpcnN0Tm9kZUFmdGVyKG1ha2VTaW1wbGVSYW5nZSgqY29y
ZShzZWxmKSkuc3RhcnQpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQppbmRleCBjYWQzNTkxYmU2MzMyM2VlNjdhYTZhZjhk
MTNlNDVmZDcxNjBkYWE4Li43MzhiNGY4ZjI0ODQ4NGZkMjc3Y2I3MjhjMjgwMjhkN2I5YzAwODUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9u
cy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5t
bQpAQCAtMTkxLDggKzE5MSw4IEBAIC0gKFdlYkFyY2hpdmUgKil3ZWJBcmNoaXZlCiAKIC0gKE5T
U3RyaW5nICopbWFya3VwU3RyaW5nCiB7Ci0gICAgYXV0byYgcmFuZ2UgPSAqY29yZShzZWxmKTsK
LSAgICByZXR1cm4gU3RyaW5nIHsgZG9jdW1lbnRUeXBlU3RyaW5nKHJhbmdlLm93bmVyRG9jdW1l
bnQoKSkgKyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtYWtlU2ltcGxlUmFu
Z2UocmFuZ2UpLCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpZZXMpIH07CisgICAg
YXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqY29yZShzZWxmKSk7CisgICAgcmV0dXJuIFN0
cmluZyB7IGRvY3VtZW50VHlwZVN0cmluZyhyYW5nZS5zdGFydC5kb2N1bWVudCgpKSArIHNlcmlh
bGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKHJhbmdlLCBudWxscHRyLCBBbm5vdGF0ZUZv
ckludGVyY2hhbmdlOjpZZXMpIH07CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbQppbmRleCAxYmM2N2QzNjg0MjZjYzg5MWIzZTUwNzll
MmI2ZGYzMmExMDY4OTk4Li5mYjc0MjA4Zjk5OGMzY2FiNGY1YWY3ZWMzYzdhNDZjMjI5OTIyMWYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlBERlZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCkBA
IC02MzYsMjEgKzYzNiwxOCBAQCAtIChCT09MKW1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0
ZWQKICAgICByZXR1cm4gTk87CiB9CiAKLXN0YXRpYyBCT09MIGlzRnJhbWVJblJhbmdlKFdlYkZy
YW1lICpmcmFtZSwgRE9NUmFuZ2UgKnJhbmdlKQorc3RhdGljIGJvb2wgaXNGcmFtZUluUmFuZ2Uo
V2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgcmFuZ2Up
CiB7Ci0gICAgQk9PTCBpblJhbmdlID0gTk87Ci0gICAgZm9yIChhdXRvKiBvd25lckVsZW1lbnQg
PSBjb3JlKGZyYW1lKS0+b3duZXJFbGVtZW50KCk7IG93bmVyRWxlbWVudDsgb3duZXJFbGVtZW50
ID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCktPm93bmVyRWxlbWVudCgpKSB7Ci0g
ICAgICAgIGlmICgmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZjb3JlKHJhbmdlKS0+b3du
ZXJEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBpblJhbmdlID0gW3JhbmdlIGludGVyc2VjdHNO
b2RlOmtpdChvd25lckVsZW1lbnQpXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Cisg
ICAgZm9yIChhdXRvKiBvd25lckVsZW1lbnQgPSBmcmFtZS5vd25lckVsZW1lbnQoKTsgb3duZXJF
bGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50KCkub3duZXJFbGVt
ZW50KCkpIHsKKyAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3VtZW50KCkgPT0gJnJhbmdl
LnN0YXJ0LmRvY3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0cyhyYW5nZSwg
Km93bmVyRWxlbWVudCk7CiAgICAgfQotICAgIHJldHVybiBpblJhbmdlOworICAgIHJldHVybiBm
YWxzZTsKIH0KIAogLSAoTlNVSW50ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAq
KXN0cmluZyBpbkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIG9wdGlvbnM6KFdlYkZpbmRPcHRp
b25zKW9wdGlvbnMgbGltaXQ6KE5TVUludGVnZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wpbWFy
a01hdGNoZXMKIHsKLSAgICBpZiAocmFuZ2UgJiYgIWlzRnJhbWVJblJhbmdlKFtkYXRhU291cmNl
IHdlYkZyYW1lXSwgcmFuZ2UpKQorICAgIGlmIChyYW5nZSAmJiAhaXNGcmFtZUluUmFuZ2UoKmNv
cmUoW2RhdGFTb3VyY2Ugd2ViRnJhbWVdKSwgbWFrZVNpbXBsZVJhbmdlKCpjb3JlKHJhbmdlKSkp
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFBERlNlbGVjdGlvbiAqcHJldmlvdXNNYXRjaCA9
IG5pbDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9UZXN0V2ViS2l0QVBJLnhjc2NoZW1lIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai94Y3NoYXJlZGRhdGEveGNz
Y2hlbWVzL1Rlc3RXZWJLaXRBUEkueGNzY2hlbWUKaW5kZXggNWY1ZWMyZTRhZWMzOWVkYzM5ZmM3
Zjg1YzdkOTY3ZTVjNDk0Njk0ZS4uMGQyNGVlMzY5M2U1ZjEyYWFjNDRkZTYxNDMyOWY0ZTk5OTZl
NGQ4MiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1Rlc3RXZWJLaXRBUEkueGNzY2hlbWUKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai94Y3NoYXJlZGRhdGEv
eGNzY2hlbWVzL1Rlc3RXZWJLaXRBUEkueGNzY2hlbWUKQEAgLTUwLDYgKzUwLDEyIEBACiAgICAg
ICAgICAgICBSZWZlcmVuY2VkQ29udGFpbmVyID0gImNvbnRhaW5lcjpUZXN0V2ViS2l0QVBJLnhj
b2RlcHJvaiI+CiAgICAgICAgICA8L0J1aWxkYWJsZVJlZmVyZW5jZT4KICAgICAgIDwvQnVpbGRh
YmxlUHJvZHVjdFJ1bm5hYmxlPgorICAgICAgPENvbW1hbmRMaW5lQXJndW1lbnRzPgorICAgICAg
ICAgPENvbW1hbmRMaW5lQXJndW1lbnQKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gIi0tZ3Rlc3Rf
ZmlsdGVyPSpEb2N1bWVudE9yZGVyKiIKKyAgICAgICAgICAgIGlzRW5hYmxlZCA9ICJZRVMiPgor
ICAgICAgICAgPC9Db21tYW5kTGluZUFyZ3VtZW50PgorICAgICAgPC9Db21tYW5kTGluZUFyZ3Vt
ZW50cz4KICAgIDwvTGF1bmNoQWN0aW9uPgogICAgPFByb2ZpbGVBY3Rpb24KICAgICAgIGJ1aWxk
Q29uZmlndXJhdGlvbiA9ICJSZWxlYXNlIgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwCmluZGV4IDA3ZTY3ZDRjZDBjYWQ1YjY2Yjli
OTY3ZmM2OTU0OTUwMDJiNzQzNjEuLjAzZjA0NGFjZjZjYjI0ZWQ1MjUwNDQ0MmI1NGMyZTU0ZDRi
NGFiN2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1
bWVudE9yZGVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRG9j
dW1lbnRPcmRlci5jcHAKQEAgLTI1LDEzICsyNSwxMyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAKLSNpbmNsdWRlIDxXZWJDb3JlL0JvdW5kYXJ5UG9pbnQuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQm9keUVsZW1lbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxEaXZFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSHRt
bEVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUZXh0QXJlYUVsZW1lbnQuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Bvc2l0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5n
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg+CiAKICNk
ZWZpbmUgRVhQRUNUX0JPVEgoYSwgYiwgZm9yd2FyZCwgcmV2ZXJzZWQpIGRvIHsgRVhQRUNUX1NU
UkVRKHN0cmluZyhkb2N1bWVudE9yZGVyKGEsIGIpKSwgZm9yd2FyZCk7IEVYUEVDVF9TVFJFUShz
dHJpbmcoZG9jdW1lbnRPcmRlcihiLCBhKSksIHJldmVyc2VkKTsgfSB3aGlsZSAoMCkKQEAgLTM5
LDYgKzM5LDE0IEBACiAjZGVmaW5lIEVYUEVDVF9MRVNTKGEsIGIpIEVYUEVDVF9CT1RIKGEsIGIs
ICJsZXNzIiwgImdyZWF0ZXIiKQogI2RlZmluZSBFWFBFQ1RfVU5PUkRFUkVEKGEsIGIpIEVYUEVD
VF9CT1RIKGEsIGIsICJ1bm9yZGVyZWQiLCAidW5vcmRlcmVkIikKIAorI2RlZmluZSBFWFBFQ1Rf
Q09OVEFJTlNfU0VMRihhKSBFWFBFQ1RfVFJVRShjb250YWlucyhhLCBhKSkKKyNkZWZpbmUgRVhQ
RUNUX05FU1RFRChhLCBiKSBkbyB7IEVYUEVDVF9UUlVFKGNvbnRhaW5zKGEsIGIpKTsgRVhQRUNU
X0ZBTFNFKGNvbnRhaW5zKGIsIGEpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRVhQRUNUX05PVF9D
T05UQUlORUQoYSwgYikgZG8geyBFWFBFQ1RfRkFMU0UoY29udGFpbnMoYSwgYikpOyBFWFBFQ1Rf
RkFMU0UoY29udGFpbnMoYiwgYSkpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVYUEVDVF9JTlRF
UlNFQ1RTX1NFTEYoYSkgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhhLCBhKSkKKyNkZWZpbmUgRVhQ
RUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKGEsIGIpIGRvIHsgRVhQRUNUX1RSVUUoaW50ZXJzZWN0
cyhhLCBiKSk7IEVYUEVDVF9UUlVFKGludGVyc2VjdHMoYiwgYSkpOyB9IHdoaWxlICgwKQorI2Rl
ZmluZSBFWFBFQ1RfTk9UX0lOVEVSU0VDVElOR19CT1RIX1dBWVMoYSwgYikgZG8geyBFWFBFQ1Rf
RkFMU0UoaW50ZXJzZWN0cyhhLCBiKSk7IEVYUEVDVF9GQUxTRShpbnRlcnNlY3RzKGIsIGEpKTsg
fSB3aGlsZSAoMCkKKwogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKQEAgLTE5Nyw2ICsyMDUsNyBAQCBURVNUKERvY3VtZW50T3JkZXIsIEJvdW5k
YXJ5UG9pbnRPZmZzZXRzKQogCiAgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoZG9j
dW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpOwogICAgIEVYUEVDVF9M
RVNTKG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVu
dCwgMSkpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEpLCBtYWtl
Qm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpOwogCiAgICAgYXV0byBhID0gSFRNTERpdkVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgYm9keS5hcHBlbmRDaGlsZChhKTsKQEAgLTQ1Miw0
ICs0NjEsMjQ0IEBAIFRFU1QoRG9jdW1lbnRPcmRlciwgUG9zaXRpb25zKQogICAgIFRFU1RfQUxM
X1BPU0lUSU9OX1RZUEVTX0IobWFrZVBvc2l0aW9uQWZ0ZXIoZG9jdW1lbnQpLCBoLCAwLCBncmVh
dGVyKTsKIH0KIAorVEVTVChEb2N1bWVudE9yZGVyLCBJc1BvaW50SW5SYW5nZSkKK3sKKyAgICBh
dXRvIGRvY3VtZW50ID0gY3JlYXRlRG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudEVsZW1l
bnQgPSAqZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIGF1dG8mIGJvZHkgPSAqZG9j
dW1lbnQtPmJvZHkoKTsKKworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3Vt
ZW50LCAwKSkpOworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAx
KSkpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikpKTsK
KyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSkpOworICAgIEVYUEVD
VF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1
bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEpKSk7CisgICAgRVhQRUNUX1RSVUUoaXNQ
b2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFr
ZUJvdW5kYXJ5UG9pbnQoYm9keSwgMikpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQb2ludEluUmFu
Z2UobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJv
dW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAwKSksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHks
IDApKSk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVNpbXBsZVJhbmdlKG1h
a2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkp
LCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSkpOworCisgICAgYXV0byBhID0gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJblJhbmdl
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBv
aW50KGEsIDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpKTsKKwor
ICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2Uo
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZUJvdW5kYXJ5UG9p
bnQoYSwgMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFu
Z2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChhLCAw
KSksIG1ha2VCb3VuZGFyeVBvaW50KGEsIDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJ
blJhbmdlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1h
a2VCb3VuZGFyeVBvaW50KGJvZHksIDApKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpKTsKKyAg
ICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5
UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSksIG1ha2VCb3Vu
ZGFyeVBvaW50KGEsIDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJblJhbmdlKG1ha2VT
aW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSwgbWFrZUJvdW5kYXJ5UG9pbnQo
ZG9jdW1lbnQsIDEpKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpKTsKKyAgICBFWFBFQ1RfVFJV
RShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwg
MCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSksIG1ha2VCb3VuZGFyeVBvaW50KGEs
IDApKSk7CisKKyAgICBhdXRvIGIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
KyAgICBib2R5LmFwcGVuZENoaWxkKGIpOworCisgICAgYXV0byBjID0gSFRNTERpdkVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5kQ2hpbGQoYyk7CisKKyAgICBhdXRvIGQg
PSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhLT5hcHBlbmRDaGlsZChk
KTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAg
IGF1dG8gZiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGUtPmFwcGVu
ZENoaWxkKGYpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VCb3VuZGFyeVBvaW50KGYsIDApKSk7CisKKyAg
ICBhdXRvIGcgPSBIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1
dG8mIGggPSAqZy0+aW5uZXJUZXh0RWxlbWVudCgpOworICAgIGMtPmFwcGVuZENoaWxkKGcpOwor
ICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cyhib2R5KSwgbWFrZUJvdW5kYXJ5UG9pbnQoaCwgMCkpKTsKK30KKworVEVTVChEb2N1bWVu
dE9yZGVyLCBSYW5nZUNvbnRhaW5zUmFuZ2UpCit7CisgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0
ZURvY3VtZW50KCk7CisgICAgYXV0byYgZG9jdW1lbnRFbGVtZW50ID0gKmRvY3VtZW50LT5kb2N1
bWVudEVsZW1lbnQoKTsKKyAgICBhdXRvJiBib2R5ID0gKmRvY3VtZW50LT5ib2R5KCk7CisKKyAg
ICBFWFBFQ1RfQ09OVEFJTlNfU0VMRihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9j
dW1lbnQpKTsKKyAgICBFWFBFQ1RfQ09OVEFJTlNfU0VMRihtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoZG9jdW1lbnRFbGVtZW50KSk7CisgICAgRVhQRUNUX0NPTlRBSU5TX1NFTEYobWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsKKworICAgIEVYUEVDVF9ORVNURUQo
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCkpOworICAgIEVYUEVDVF9ORVNURUQobWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGJvZHkpKTsKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoYm9keSkpOworCisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1l
bnRFbGVtZW50KSk7CisKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhkb2N1bWVudEVsZW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
Ym9keSkpOworCisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQs
IDApKSk7CisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
ZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEp
KSk7CisgICAgRVhQRUNUX05PVF9DT05UQUlORUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGRvY3VtZW50KSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50
LCAyKSkpOworCisgICAgRVhQRUNUX05FU1RFRChtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5
UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikpLCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfTk9UX0NP
TlRBSU5FRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlU2lt
cGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpLCBtYWtlQm91bmRhcnlQb2lu
dChkb2N1bWVudCwgMikpKTsKKworICAgIEVYUEVDVF9OT1RfQ09OVEFJTkVEKG1ha2VTaW1wbGVS
YW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRv
Y3VtZW50RWxlbWVudCwgMCkpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSkp
OworICAgIEVYUEVDVF9ORVNURUQobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRv
Y3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpLCBtYWtlU2ltcGxlUmFuZ2Uo
bWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpKTsKKworICAgIGF1dG8gYSA9IEhUTUxEaXZFbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIEVYUEVDVF9OT1RfQ09OVEFJTkVEKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhhKSk7CisKKyAgICBib2R5LmFwcGVuZENoaWxkKGEpOworCisgICAgYXV0byBiID0g
SFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChi
KTsKKworICAgIGF1dG8gYyA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAg
IGItPmFwcGVuZENoaWxkKGMpOworCisgICAgYXV0byBkID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCk7CisgICAgYS0+YXBwZW5kQ2hpbGQoZCk7CisKKyAgICBhdXRvIGUgPSBIVE1M
RGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1Rf
Tk9UX0NPTlRBSU5FRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhmKSk7CisKKyAgICBhdXRvIGcgPSBIVE1MVGV4dEFy
ZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8mIGggPSAqZy0+aW5uZXJUZXh0
RWxlbWVudCgpOworICAgIGMtPmFwcGVuZENoaWxkKGcpOworICAgIEVYUEVDVF9ORVNURUQobWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoaCkpOworfQorCitURVNUKERvY3VtZW50T3JkZXIsIFJhbmdlSW50ZXJzZWN0c1Jh
bmdlKQoreworICAgIGF1dG8gZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOworICAgIGF1dG8m
IGRvY3VtZW50RWxlbWVudCA9ICpkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgYXV0
byYgYm9keSA9ICpkb2N1bWVudC0+Ym9keSgpOworCisgICAgRVhQRUNUX0lOVEVSU0VDVFNfU0VM
RihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1Rf
SU5URVJTRUNUU19TRUxGKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudEVs
ZW1lbnQpKTsKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19TRUxGKG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhib2R5KSk7CisKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dBWVMobWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCkpOworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JP
VEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSkpOworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JP
VEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50KSwg
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsKKworICAgIEVYUEVDVF9JTlRF
UlNFQ1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQp
LCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50KSk7CisKKyAg
ICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dBWVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGRvY3VtZW50RWxlbWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5
KSk7CisKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dBWVMobWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50
KGRvY3VtZW50LCAwKSkpOworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJv
dW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpKSk7CisgICAgRVhQRUNUX05PVF9JTlRFUlNFQ1RJTkdf
Qk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VT
aW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikpKTsKKworICAgIEVYUEVD
VF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQo
ZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikpLCBtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19C
T1RIX1dBWVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVNp
bXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSwgbWFrZUJvdW5kYXJ5UG9p
bnQoZG9jdW1lbnQsIDIpKSk7CisKKyAgICBFWFBFQ1RfTk9UX0lOVEVSU0VDVElOR19CT1RIX1dB
WVMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJv
dW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAwKSksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhib2R5KSk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1ha2VTaW1w
bGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50
KGJvZHksIDApKSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDApKSk7
CisKKyAgICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBF
WFBFQ1RfTk9UX0lOVEVSU0VDVElOR19CT1RIX1dBWVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNv
bnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGEpKTsKKwor
ICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisKKyAgICBhdXRvIGIgPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBib2R5LmFwcGVuZENoaWxkKGIpOworCisgICAgYXV0byBj
ID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5kQ2hpbGQo
Yyk7CisKKyAgICBhdXRvIGQgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAg
ICBhLT5hcHBlbmRDaGlsZChkKTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQpOworICAgIGF1dG8gZiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQpOworICAgIGUtPmFwcGVuZENoaWxkKGYpOworICAgIEVYUEVDVF9OT1RfSU5URVJTRUNUSU5H
X0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhmKSk7CisKKyAgICBhdXRvIGcgPSBIVE1MVGV4dEFyZWFF
bGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8mIGggPSAqZy0+aW5uZXJUZXh0RWxl
bWVudCgpOworICAgIGMtPmFwcGVuZENoaWxkKGcpOworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JP
VEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhoKSk7Cit9CisKK1RFU1QoRG9jdW1lbnRPcmRlciwgUmFuZ2VD
b250YWluc05vZGUpCit7CisgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7Cisg
ICAgYXV0byYgZG9jdW1lbnRFbGVtZW50ID0gKmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsK
KyAgICBhdXRvJiBib2R5ID0gKmRvY3VtZW50LT5ib2R5KCk7CisKKyAgICBFWFBFQ1RfVFJVRShj
b250YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBkb2N1bWVu
dEVsZW1lbnQpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQpLCBib2R5KSk7CisgICAgRVhQRUNUX1RSVUUoY29udGFpbnMo
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCksIGJvZHkpKTsK
KworICAgIEVYUEVDVF9GQUxTRShjb250YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoZG9jdW1lbnQpLCBkb2N1bWVudCkpOworICAgIEVYUEVDVF9GQUxTRShjb250YWlucyhtYWtl
U2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQ
b2ludChkb2N1bWVudCwgMikpLCBkb2N1bWVudCkpOworICAgIEVYUEVDVF9GQUxTRShjb250YWlu
cyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91
bmRhcnlQb2ludChkb2N1bWVudEVsZW1lbnQsIDApKSwgYm9keSkpOworICAgIEVYUEVDVF9GQUxT
RShjb250YWlucyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDAp
LCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y29udGFpbnMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwg
bWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMSkpLCBib2R5KSk7CisgICAgRVhQRUNUX1RSVUUoY29u
dGFpbnMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFr
ZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAxKSksIGJvZHkpKTsKKworICAgIGF1dG8g
YSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIEVYUEVDVF9GQUxTRShj
b250YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBhKSk7CisK
KyAgICBib2R5LmFwcGVuZENoaWxkKGEpOworCisgICAgYXV0byBiID0gSFRNTERpdkVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChiKTsKKworICAgIGF1dG8g
YyA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGItPmFwcGVuZENoaWxk
KGMpOworCisgICAgYXV0byBkID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7Cisg
ICAgYS0+YXBwZW5kQ2hpbGQoZCk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KTsKKyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGFpbnMo
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBmKSk7CisKKyAgICBhdXRvIGcg
PSBIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8mIGggPSAq
Zy0+aW5uZXJUZXh0RWxlbWVudCgpOworICAgIGMtPmFwcGVuZENoaWxkKGcpOworICAgIEVYUEVD
VF9UUlVFKGNvbnRhaW5zKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgaCkp
OworfQorCitURVNUKERvY3VtZW50T3JkZXIsIFJhbmdlSW50ZXJzZWN0c05vZGUpCit7CisgICAg
YXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CisgICAgYXV0byYgZG9jdW1lbnRFbGVt
ZW50ID0gKmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBhdXRvJiBib2R5ID0gKmRv
Y3VtZW50LT5ib2R5KCk7CisKKyAgICBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGRvY3VtZW50RWxlbWVudCkpOworICAgIEVY
UEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3Vt
ZW50KSwgYm9keSkpOworICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCksIGJvZHkpKTsKKworICAgIEVYUEVDVF9U
UlVFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwg
ZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKG1ha2VTaW1wbGVSYW5nZSht
YWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50
LCAyKSksIGRvY3VtZW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKGludGVyc2VjdHMobWFrZVNpbXBs
ZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQo
ZG9jdW1lbnRFbGVtZW50LCAwKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaW50ZXJzZWN0
cyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAxKSwg
bWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpKSwgYm9keSkpOworICAgIEVYUEVDVF9UUlVF
KGludGVyc2VjdHMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAw
KSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpLCBib2R5KSk7CisgICAgRVhQRUNUX1RSVUUo
aW50ZXJzZWN0cyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDAp
LCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfVFJVRShp
bnRlcnNlY3RzKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCks
IG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50RWxlbWVudCwgMSkpLCBib2R5KSk7CisKKyAgICBh
dXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBFWFBFQ1RfRkFM
U0UoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBh
KSk7CisKKyAgICBib2R5LmFwcGVuZENoaWxkKGEpOworCisgICAgYXV0byBiID0gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChiKTsKKworICAg
IGF1dG8gYyA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGItPmFwcGVu
ZENoaWxkKGMpOworCisgICAgYXV0byBkID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVu
dCk7CisgICAgYS0+YXBwZW5kQ2hpbGQoZCk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKKyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfRkFMU0UoaW50
ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIGUpKTsKKyAgICBF
WFBFQ1RfVFJVRShpbnRlcnNlY3RzKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhmKSwg
ZSkpOworICAgIEVYUEVDVF9GQUxTRShpbnRlcnNlY3RzKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhib2R5KSwgZikpOworCisgICAgYXV0byBnID0gSFRNTFRleHRBcmVhRWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvJiBoID0gKmctPmlubmVyVGV4dEVsZW1lbnQoKTsK
KyAgICBjLT5hcHBlbmRDaGlsZChnKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgaCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407339</attachid>
            <date>2020-08-26 14:44:55 -0700</date>
            <delta_ts>2020-08-26 15:51:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215755-20200826144454.patch</filename>
            <type>text/plain</type>
            <size>161082</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM1N2ZjMmY0NzBjYjg5
NGE5M2Y3OTdjMjRmNDcwMWFiNTNhZTViYy4uOTIxZGU4ODM3NzI5NTUzNDc4NjNmMjU2OWJjYTBl
YmQ0MzM5YzE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NCBAQAorMjAyMC0wOC0yNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwg
dGhlIHJlbWFpbmluZyB1c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcik6IFVzZSBkb2N1
bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1Jh
bmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNsb3Nlc3RUb1Jhbmdl
KTogVXNlIGNoYXJhY3RlckNvdW50LiBBbHNvIHJlbW92ZWQgdW5ubmVjZXNzYXJ5IGFzc2VydGlv
bnMKKyAgICAgICAgYW5kIHNwZWNpYWwgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbiBjb25z
dCk6IFVzZSBkb2N1bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOiBVc2UgaW50
ZXJzZWN0cy4KKyAgICAgICAgQWxzbyB1c2UgZmlyc3RSYW5nZSBpbnN0ZWFkIG9mIHRvTm9ybWFs
aXplZFJhbmdlLgorCisgICAgICAgICogZG9tL0VsZW1lbnQuaDogRXhwb3J0IGF0dGFjaFNoYWRv
dyBzbyBpdCBjYW4gYmUgdXNlZCBpbiB1bml0IHRlc3RzLgorCisgICAgICAgICogZG9tL05vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTaWJsaW5nU3Vic2VxdWVudCk6IEFkZGVkIGEgY291
cGxlIGFzc2VydGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpkb2N1bWVudE9yZGVyKTogQWRkIGxv
Z2ljIHNvIHRoYXQgc2hhZG93IHRyZWVzIGFyZSBvcmRlcmVkIGJlZm9yZSB0aGUKKyAgICAgICAg
b3RoZXIgY2hpbGRyZW4gb2YgdGhlaXIgaG9zdHMuCisKKyAgICAgICAgKiBkb20vTm9kZS5oOiBB
ZGRlZCBpc19uZXEsIGlzX2x0ZXEsIGFuZCBpc19ndGVxIGZvciB1c2Ugd2l0aCBQYXJ0aWFsT3Jk
ZXJpbmcsCisgICAgICAgIG1hdGNoaW5nIHRoZSBuYW1lcyBhbmQgYmVoYXZpb3IgZnJvbSBDKysy
MC4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6IFJlbW92ZWQgdW51c2VkIENvb3JkaW5hdGVT
cGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpSYW5nZSk6IFVwZGF0ZWQgc2luY2UgUmFu
Z2VCb3VuZGFyeVBvaW50IG5vdyB1c2VzIHJlZmVyZW5jZXMuCisgICAgICAgIChXZWJDb3JlOjpS
YW5nZTo6dXBkYXRlRG9jdW1lbnQpOiBSZW5hbWVkIGZyb20gc2V0RG9jdW1lbnQgYW5kIGNoYW5n
ZWQgc28gdGhhdAorICAgICAgICBpdCBtYWludGFpbnMgdGhlIGludmFyaWFudHMgd2l0aG91dCBy
ZXF1aXJpbmcgdGhlIGNhbGxlciBwYXNzIGFueSBhcmd1bWVudHMuCisgICAgICAgIEFsc28gdXBk
YXRlZCBmb3IgUmFuZ2VCb3VuZGFyeVBvaW50IGFubWUgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjpzZXRTdGFydCk6IFVwZGF0ZWQgZm9yIGNoZWNrTm9kZU9mZnNldFBh
aXIgbmFtZSBjaGFuZ2UuCisgICAgICAgIFJlbW92ZWQgdG9vLWNvbXBsZXggY29kZSBmb3IgbW92
aW5nIGJldHdlZW4gZG9jdW1lbnRzLiBVc2UgZG9jdW1lbnRPcmRlcgorICAgICAgICBpbnN0ZWFk
IG9mIGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5lciB0byBjaGVjayBmb3Igc3RhcnQvZW5k
IHRoYXQgaGF2ZQorICAgICAgICBpbmNvcnJlY3Qgb3JkZXIgb3Igbm8gY29tbW9uIGFuY2VzdG9y
LiBVc2UgdXBkYXRlRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6aXNQb2ludEluUmFuZ2UpOiBVc2UgaXNQ
b2ludEluUmFuZ2UgdGhhdCB0YWtlcyBhIFNpbXBsZVJhbmdlLgorICAgICAgICBBbHNvIHVwZGF0
ZWQgZm9yIGNoZWNrTm9kZU9mZnNldFBhaXIgbmFtZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Y29tcGFyZVBvaW50IGNvbnN0KTogVXNlIGRvY3VtZW50T3JkZXIuIERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVOb2RlIGNvbnN0KTogVXNlIGRvY3VtZW50
T3JkZXIuCisgICAgICAgIChXZWJDb3JlOjp0b3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyBjb25zdCk6IERlbGV0ZWQgbW9yZSBvdmVy
bG9hZHMuCisgICAgICAgIEtlcHQgb25seSB0aGUgb25lIG5lZWRlZCBmb3IgYmluZGluZ3MsIGFu
ZCByZW5hbWVkIGl0IGZyb20KKyAgICAgICAgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGlu
Z3MuIEFsc28gZml4ZWQgdGhlIGltcGxlbWVudGF0aW4gdG8gYmUgc2ltcGxlciwKKyAgICAgICAg
dXNlIGRvY3VtZW50T3JkZXIsIGFuZCBtYXRjaCB0aGUgRE9NIHNwZWNpZmljYXRpb24gbW9yZSBj
bG9zZWx5ICh3aXRob3V0IGEKKyAgICAgICAgYmVoYXZpb3IgY2hhbmdlKS4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpib3VuZGFyeVBvaW50c1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjppbnRlcnNlY3RzTm9kZSBjb25zdCk6IFVzZSBpbnRlcnNlY3Rz
IGZyb20gU2ltcGxlUmFuZ2UuCisgICAgICAgIEFsc28gZG9uJ3QgcmFpc2UgZXhjZXB0aW9ucy4K
KyAgICAgICAgKFdlYkNvcmU6Omxlbmd0aE9mQ29udGVudHNJbk5vZGUpOiBEZWxldGVkLiBUaGlz
IGdpdmVzIHRoZSBzYW1lIHJlc3VsdCBhcworICAgICAgICBOb2RlOjpsZW5ndGgsIGJ1dCBsZXNz
IGVmZmljaWVudGx5LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnByb2Nlc3NDb250ZW50cyk6
IFVwZGF0ZWQgc2luY2UgUmFuZ2VCb3VuZGFyeVBvaW50IG5vdworICAgICAgICB1c2VzIHJlZmVy
ZW5jZXMuCisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cyk6
IFJlbW92ZWQgb2Jzb2xldGUgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0b1N0
cmluZyBjb25zdCk6IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyBhbmQKKyAgICAgICAgY2hhcmFjdGVy
RGF0YU9mZnNldFJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRleHQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmRldGFjaCk6IE1vdmVkIHRvIHRoZSBo
ZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y2hlY2tOb2RlT2Zmc2V0UGFpciBjb25z
dCk6IFJuZWFtZWQgZnJvbSBjaGVja05vZGVXT2Zmc2V0LgorICAgICAgICAoV2ViQ29yZTo6UmFu
Z2U6OmNsb25lUmFuZ2UpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnNldFN0YXJ0QWZ0ZXIpOiBUd2Vha2VkIGNvZGluZyBzdHlsZS4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpzZXRFbmRCZWZvcmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjpzZXRFbmRBZnRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVj
dE5vZGUpOiBEaXR0by4gQWxzbyByZW1vdmVkIHVubmVjZXNzYXJ5IGNvZGUgdG8KKyAgICAgICAg
Y2FsbCBzZXREb2N1bWVudCwgc2luY2Ugc2V0U3RhcnQgdGFrZXMgY2FyZSBvZiB0aGF0LgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OnNldFN0YXJ0QmVmb3JlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6Zmlyc3ROb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpwYXN0TGFzdE5vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFyZVJh
bmdlc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlc092ZXJsYXApOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKTog
VHdlYWtlZCBjb2Rpbmcgc3R5bGUgYW5kIHVwZGF0ZWQKKyAgICAgICAgc2luY2UgUmFuZ2VCb3Vu
ZGFyeVBvaW50IHVzZXMgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6bm9k
ZUNoaWxkcmVuQ2hhbmdlZCk6IFVzZSBtX293bmVyRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3Jl
Ojpib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQpOiBSZW1vdmVkIHVubmVlZGVkIGNv
ZGUKKyAgICAgICAgdG8gaGFuZGxlIGNhc2Ugd2hlcmUgb25lIG9mIHRoZSBjaGlsZHJlbiBpcyB0
aGUgY2hpbGRCZWZvcmUgYnV0IHRoZQorICAgICAgICBub2RlIGlzIG5vdCBpbnNpZGUgdGhlIGNv
bnRhaW5lciAtLSB0aGF0IGNhc2UgZG9lc24ndCBleGlzdC4gVXNlCisgICAgICAgIE5vZGU6OmNv
bnRhaW5zLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVDaGlsZHJlbldpbGxCZVJlbW92
ZWQpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2Rl
V2lsbEJlUmVtb3ZlZCk6IFNpbXBsaWZ5IGxvZ2ljIHVzaW5nCisgICAgICAgIFJhbmdlOjpjb250
YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZCk6IFVzZSBt
X293bmVyRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cGFyZW50bGVzc05vZGVN
b3ZlZFRvTmV3RG9jdW1lbnRBZmZlY3RzUmFuZ2UpOgorICAgICAgICBVcGRhdGVkIHNpbmNlIFJh
bmdlQm91bmRhcnlQb2ludCB1c2VzIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6Ym91
bmRhcnlUZXh0SW5zZXJ0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4
dFJlbW92ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dE5vZGVzTWVy
Z2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyeVRleHROb2Rlc1NwbGl0KTog
RGl0dG8uCisgICAgICAgIChzaG93VHJlZSk6IFJlbW92ZWQgY2FsbCB0byBib3VuZGFyeVBvaW50
c1ZhbGlkLiBUaGF0J3MgY2hlY2tpbmcgc29tZXRoaW5nCisgICAgICAgIHRoZSBjbGFzcyBhbHJl
YWR5IHRyZWF0cyBhcyBhbiBpbnZhcmlhbnQsIHNvIGl0J3Mgb2Jzb2xldGUgY29kZSBsZWZ0IGZy
b20KKyAgICAgICAgbG9uZyBhZ28gd2hlbiB3ZSBkaWRuJ3QgaGF2ZSB0aGF0IGltcGxlbWVudGVk
IGNvcnJlY3RseS4KKworICAgICAgICAqIGRvbS9SYW5nZS5oOiBSZW9yZ2FuaXplZCB0aGUgaGVh
ZGVyIHRvIG1hdGNoIHRoZSBJREwgZmlsZS4KKyAgICAgICAgUmVtb3ZlZCBvd25lckRvY3VtZW50
LCBjb21wYXJlQm91bmRhcnlQb2ludHMgb3ZlcmxvYWRzIG90aGVyIHRoYW4gdGhlIG9uZQorICAg
ICAgICB1c2VkIGZyb20gYmluZGluZ3MsIGZpcnN0Tm9kZSwgcGFzdExhc3ROb2RlLCB0ZXh0LCBj
b250YWlucywgYXJlUmFuZ2VzRXF1YWwsCisgICAgICAgIGFuZCByYW5nZXNPdmVybGFwLiBBbHNv
IHVwZGF0ZWQgc2luY2UgUmFuZ2VCb3VuZGFyeVBvaW50Ojpjb250YWluZXIgaXMgbm93CisgICAg
ICAgIGEgcmVmZXJlbmNlLiBNb3ZlZCBkZXRhY2ggZnVuY3Rpb24gaGVyZSB0byB0aGUgaGVhZGVy
IGFzIGFuIGVtcHR5IGlubGluZS4KKworICAgICAgICAqIGRvbS9SYW5nZS5pZGw6IENoYW5nZWQg
c3RhcnQvZW5kT2Zmc2V0IHRvIHVuc2lnbmVkLiBTdG9wcGVkIHVzaW5nIHRoZQorICAgICAgICBu
YW1lIGNvbXBhcmVCb3VuZGFyeVBvaW50ZXJzRm9yQmluZGluZ3MuIFVwZGF0ZWQgaW50ZXJzZWN0
c05vZGUgdG8gbm90CisgICAgICAgIHRocm93IGV4Y2VwdGlvbnMgYXMgY2FsbGVkIGZvciBpbiB0
aGUgRE9NIHNwZWNpZmljYXRpb24uIFR3ZWFrZWQgY29tbWVudHMuCisKKyAgICAgICAgKiBkb20v
UmFuZ2VCb3VuZGFyeVBvaW50Lmg6IENoYW5nZWQgY29uc3RydWN0b3IgYXJndW1lbnQgdG8gYSBy
ZWZlcmVuY2UuCisgICAgICAgIFJlbmFtZWQgc2V0VG9CZWZvcmVDaGlsZCwgc2V0VG9BZnRlckNo
aWxkLCBzZXRUb1N0YXJ0T2ZOb2RlLCBhbmQgc2V0VG9FbmRPZk5vZGUKKyAgICAgICAgdG8gc2V0
VG9CZWZvcmVOb2RlLCBzZXRUb0FmdGVyTm9kZSwgc2V0VG9CZWZvcmVDb250ZW50cywgc2V0VG9B
ZnRlckNvbnRlbnRzLgorICAgICAgICBNZXJnZWQgZW5zdXJlT2Zmc2V0SXNWYWxpZCBpbnRvIHRo
ZSBvZmZzZXQgZnVuY3Rpb24uIENoYW5nZWQgbV9jb250YWluZXJOb2RlCisgICAgICAgIGludG8g
YSBSZWY8PiBhbmQgcmVuYW1lZCBpdCBtX2NvbnRhaW5lci4gUmVtb3ZlZCBjbGVhci4KKworICAg
ICAgICAqIGRvbS9TaW1wbGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1BvaW50SW5S
YW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRPcmRlcik6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omlu
dGVyc2VjdHMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVuaW9uUmFuZ2VzKTogQWRkZWQu
CisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorCisgICAg
ICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVQb3Np
dGlvbnMpOiBVc2UgZG9jdW1lbnRPcmRlci4KKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2li
bHlDb250YWluZWRXaXRoaW4pOiBVc2UgY29udGFpbnMuCisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNGcmFtZUluUmFuZ2UpOiBVc2UgaW50ZXJzZWN0
cy4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51
bWJlcnMpOiBVc2UgaW50ZXJzZWN0cy4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bmlvblJhbmdlcyk6IE1vdmVkIHRvIFNpbXBsZVJh
bmdlLmNwcCwgd2hlcmUgaXQncyBub3cKKyAgICAgICAgaW1wbGVtZW50ZWQgdXNpbmcgZG9jdW1l
bnRPcmRlci4KKworICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24pOiBV
c2UgaW50ZXJzZWN0cy4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBM
ZWdhY3kubW06CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3Rpb25Db250YWluc1Bvc2l0aW9uKTog
VXNlIGlzUG9pbnRJblJhbmdlLgorCisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpleHRlbmQpOiBVc2UgbWFrZVJlZlB0ciBh
bmQgTm9kZTo6bGVuZ3RoCisgICAgICAgIHRvIHN0cmVhbWxpbmUgdGhlIGltcGxlbWVudGF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpnZXRSYW5nZUF0KTogVXNlIG1ha2VC
b3VuZGFyeVBvaW50QmVmb3JlTm9kZQorICAgICAgICBhbmQgcmVtb3ZlIHVubmVlZGVkIG51bGwg
Y2hlY2sgdGhhdCdzIGFscmVhZHkgY292ZXJlZCBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6YWRkUmFuZ2UpOiBVc2UgaW50ZXJzZWN0cyBhbmQgdW5pb25SYW5nZXMuCisg
ICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbnRhaW5zTm9kZSBjb25zdCk6IFVzZSBp
bnRlcnNlY3RzIGFuZCBjb250YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6
aXNWYWxpZEZvclBvc2l0aW9uIGNvbnN0KTogVXNlIGJvb2xlYW4gbG9naWMuCisKKyAgICAgICAg
KiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9s
bGVyOjpkcmFnZ2FibGVFbGVtZW50IGNvbnN0KTogVXNlIGNvbnRhaW5zLgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0NvbnRyb2xsZXI6Omluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2Fy
ZXQpOiBVc2UgaW50ZXJzZWN0cy4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNl
IGNvbnRhaW5zLgorCisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OmZpbmRUZXh0TWF0Y2hlcyk6IFVzZSBkb2N1bWVudE9yZGVyLgorCisgICAgICAgICog
cGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmZpbmRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRD
b250YWluaW5nU2VsZWN0aW9uSGlnaGxpZ2h0KToKKyAgICAgICAgVXNlIGNvbnRhaW5zLgorCisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpyYW5nZUFzVGV4dCk6IFVzZSBwbGFpblRleHQuCisgICAgICAgIChXZWJDb3JlOjpqb2lu
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdC
YWNrd2FyZHNUZXh0SXRlcmF0b3IpOiBVc2UgYSB2ZWN0b3IKKyAgICAgICAgdGhhdCB3ZSByZXZl
cnNlIGFuZCBqb2luIHJhdGhlciB0aGFuIGluc2VydGluZyBhdCB0aGUgc3RhcnQgb2YgYSBzdHJp
bmcuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnN1YnJhbmdlKTogQWRkZWQgYSBjYWxs
IHRvIHVwZGF0ZUxheW91dCBzaW5jZSB0ZXh0IGl0ZXJhdG9yCisgICAgICAgIGZ1bmN0aW9ucyBk
ZXBlbmQgb24gdGhlIHN0YXRlIG9mIHRoZSByZW5kZXIgdHJlZS4gUmVhbGl6ZWQgdGhpcyB3YXMg
dGhlb3JldGljYWxseQorICAgICAgICBuZWVkZWQgYmVjYXVzZSBvZiBJbnRlcm5hbHM6OnJhbmdl
QXNUZXh0LgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyYW5nZU9mU3RyaW5nTmVhckxv
Y2F0aW9uKTogRGl0dG8uCisKIDIwMjAtMDgtMjYgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZsaWNrZXJpbmcgb24gc2Vkb25hLmRldgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1Mzk5
NWI3Mjk2NTY3YWE1OTNiMjExOTI3YzliZWE1ZjhmZWJmNTJjLi43YWViZDYyODhkYjJiMDNhODFh
YzVjOTcwMTg4ZDQwZGZkMTAyMTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIwLTA4
LTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxt
b3N0IGFsbCB0aGUgcmVtYWluaW5nIHVzZXMgb2YgbGl2ZSByYW5nZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTc1NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZS5jcHA6CisgICAgICAgICh3ZWJraXRfZG9t
X3JhbmdlX2NvbXBhcmVfYm91bmRhcnlfcG9pbnRzKTogVXBkYXRlIGZvciByZW5hbWUgb2YKKyAg
ICAgICAgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MuCisgICAgICAgICh3ZWJraXRf
ZG9tX3JhbmdlX2ludGVyc2VjdHNfbm9kZSk6IFJlbW92ZWQgZXhjZXB0aW9uIGhhbmRsaW5nLgor
ICAgICAgICAod2Via2l0X2RvbV9yYW5nZV9nZXRfdGV4dCk6IFVzZSBwbGFpblRleHQuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbToK
KyAgICAgICAgKC1bV0tET01SYW5nZSBpbml0V2l0aERvY3VtZW50Ol0pOiBUaWdodGVuZWQgdXAg
aW50byBhIG9uZS1saW5lci4KKyAgICAgICAgKC1bV0tET01SYW5nZSB0ZXh0XSk6IFVzZSBwbGFp
blRleHQuCisgICAgICAgICgtW1dLRE9NUmFuZ2UgdGV4dFJlY3RzXSk6IFN0b3BwZWQgdXNpbmcg
UmFuZ2U6Om93bmVyRG9jdW1lbnQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6ZG9jdW1lbnQpOiBTdG9wcGVkIHVzaW5nCisgICAg
ICAgIFJhbmdlOjpvd25lckRvY3VtZW50LgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlOjpib3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzIGNvbnN0KToKKyAg
ICAgICAgRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6
OnJlbmRlcmVkSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZTo6dGV4dCBjb25zdCk6IFVzZSBwbGFpblRleHQuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KTogVXNlIGludGVyc2VjdHMuCisKIDIw
MjAtMDgtMjYgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEVu
YWJsZSBXcml0YWJsZVN0cmVhbSBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
aW5kZXggZDZmNmU0ZThmYmE1MzA1M2EwMzQzYzY0MjQ5MzM2NzA4NjE3MGZlMS4uY2U0NDYyMmIy
MzVmMzRkOGRjYTc4MWRkMjQwMjVjNjgxNzI2MDk1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTA4LTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxtb3N0IGFsbCB0aGUgcmVtYWluaW5nIHVzZXMg
b2YgbGl2ZSByYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTc1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogRE9NL0RPTVJhbmdlLm1tOgorICAgICAgICAoLVtET01SYW5nZSB0ZXh0XSk6IFVz
ZSBwbGFpblRleHQuCisgICAgICAgICgtW0RPTVJhbmdlIGNvbXBhcmVCb3VuZGFyeVBvaW50czpz
b3VyY2VSYW5nZTpdKTogVXBkYXRlIGZvciByZW5hbWUgb2YKKyAgICAgICAgY29tcGFyZUJvdW5k
YXJ5UG9pbnRzRm9yQmluZGluZ3MuCisgICAgICAgICgtW0RPTVJhbmdlIGludGVyc2VjdHNOb2Rl
Ol0pOiBSZW1vdmVkIHJhaXNlT25ET01FcnJvci4KKworICAgICAgICAqIERPTS9ET01VSUtpdEV4
dGVuc2lvbnMubW06CisgICAgICAgIChmaXJzdE5vZGVBZnRlcik6IE1vdmVkIFJhbmdlOjpmaXJz
dE5vZGUgaGVyZSBzaW5jZSBpdCdzIHRoZSBvbmx5IHJlbWFpbmluZyBjYWxsZXI7CisgICAgICAg
IG1pZ2h0IG5lZWQgdG8ga2VlcCBsZWdhY3kgYmVoYXZpb3IgZGVwZW5kaW5nIG9uIGhvdyB0aGlz
IGlzIHVzZWQgYnkgVUlLaXQuCisgICAgICAgICgtW0RPTVJhbmdlIGZpcnN0Tm9kZV0pOiBDYWxs
IGZpcnN0Tm9kZUFmdGVyLgorCisgICAgICAgICogRE9NL1dlYkRPTU9wZXJhdGlvbnMubW06Cisg
ICAgICAgICgtW0RPTVJhbmdlIG1hcmt1cFN0cmluZ10pOiBTdG9wIHVzaW5nIFJhbmdlOjpvd25l
ckRvY3VtZW50LgorCiAyMDIwLTA4LTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEhhc2hNYXA8UmVmPFQ+Pjo6dGFrZSBzaG91bGQgcmV0dXJuIFJlZlB0cjxU
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5k
ZXggNjM4YmFmMGJjNzk4NGQ5Nzk5YjI4MmNiYmFlOGNhMTc2MTM2ZmNjZi4uMWUxMDU5ZGUxZTIw
MTVjNTM0MGQyMzE1YmJhNTYwNDliMzAxMDdkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0yMDM2LDYgKzIwMzYsOCBAQCBzdGF0aWMg
Ym9vbCBpc1JlcGxhY2VkTm9kZU9yQlIoTm9kZSogbm9kZSkKIAogc3RhdGljIGJvb2wgY2hhcmFj
dGVyT2Zmc2V0c0luT3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQx
LCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldDIpCiB7CisgICAgLy8gRklY
TUU6IFNob3VsZCBqdXN0IGJlIGFibGUgdG8gY2FsbCBkb2N1bWVudE9yZGVyIHdpdGhvdXQgYWNj
ZXNzaWJpbGl0eS1zcGVjaWZpYyBsb2dpYy4gTm90IGNsZWFyIHdoeSB3ZSBuZWVkIENoYXJhY3Rl
ck9mZnNldCBpbnN0ZWFkIG9mIFBvc2l0aW9uIG9yIEJvdW5kYXJ5UG9pbnQuCisKICAgICBpZiAo
Y2hhcmFjdGVyT2Zmc2V0MS5pc051bGwoKSB8fCBjaGFyYWN0ZXJPZmZzZXQyLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0yMDQ4LDE2ICsyMDUwLDEyIEBAIHN0YXRp
YyBib29sIGNoYXJhY3Rlck9mZnNldHNJbk9yZGVyKGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hh
cmFjdGVyT2Zmc2V0MSwgY29uCiAgICAgICAgIG5vZGUxID0gbm9kZTEtPnRyYXZlcnNlVG9DaGls
ZEF0KGNoYXJhY3Rlck9mZnNldDEub2Zmc2V0KTsKICAgICBpZiAoIW5vZGUyLT5pc0NoYXJhY3Rl
ckRhdGFOb2RlKCkgJiYgIWlzUmVwbGFjZWROb2RlT3JCUihub2RlMikgJiYgbm9kZTItPmhhc0No
aWxkTm9kZXMoKSkKICAgICAgICAgbm9kZTIgPSBub2RlMi0+dHJhdmVyc2VUb0NoaWxkQXQoY2hh
cmFjdGVyT2Zmc2V0Mi5vZmZzZXQpOwotICAgIAogICAgIGlmICghbm9kZTEgfHwgIW5vZGUyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgYXV0byByYW5nZTEgPSBBWE9iamVjdENh
Y2hlOjpyYW5nZUZvck5vZGVDb250ZW50cygqbm9kZTEpOwogICAgIGF1dG8gcmFuZ2UyID0gQVhP
YmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoKm5vZGUyKTsKLSAgICBhdXRvIHJlc3Vs
dCA9IGNyZWF0ZUxpdmVSYW5nZShyYW5nZTEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UyKSk7Ci0gICAgaWYgKHJlc3Vs
dC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwOworICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50
T3JkZXIocmFuZ2UxLnN0YXJ0LCByYW5nZTIuc3RhcnQpKTsKIH0KIAogc3RhdGljIE5vZGUqIHJl
c2V0Tm9kZUFuZE9mZnNldEZvclJlcGxhY2VkTm9kZShOb2RlJiByZXBsYWNlZE5vZGUsIGludCYg
b2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBjYTVmMjIxMzA2YzU5N2Fm
ZDFmYmUxMzcyYTlkY2E2NDNjNTg4NGQ4Li4wMmE2YTRlZGVhMDU2YjZhNWU2OTVjOGY1YzAyNTBi
NWIwMTEyNWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTI5NywyNiArMjk3LDE3IEBAIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiBzCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gbWlzc3BlbGxpbmdzOwog
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgVGV4
dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIG1pc3NwZWxsaW5ncywgZnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKIAotICAgIC8vIFRoZSByZXR1cm5lZCBtaXNzcGVsbGluZ3MgYXJlIGFz
c3VtZWQgdG8gYmUgb3JkZXJlZCBpbiB0aGUgZG9jdW1lbnQKLSAgICAvLyBsb2dpY2FsIG9yZGVy
LCB3aGljaCBzaG91bGQgYmUgbWF0Y2hlZCBieSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
LgotICAgIC8vIFNvIGl0ZXJhdGUgZm9yd2FyZCBvciBiYWNrd2FyZHMgZGVwZW5kaW5nIG9uIHRo
ZSBkZXNpcmVkIHNlYXJjaAotICAgIC8vIGRpcmVjdGlvbiB0byBmaW5kIHRoZSBjbG9zZXN0IG1p
c3NwZWxsaW5nIGluIHRoYXQgZGlyZWN0aW9uLgorICAgIC8vIEZpbmQgdGhlIGZpcnN0IG1pc3Nw
ZWxsaW5nIHBhc3QgdGhlIHN0YXJ0LgogICAgIGlmIChkaXJlY3Rpb24gPT0gQWNjZXNzaWJpbGl0
eVNlYXJjaERpcmVjdGlvbjo6TmV4dCkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1pc3Nw
ZWxsaW5nIDogbWlzc3BlbGxpbmdzKSB7CisgICAgICAgIGZvciAoYXV0byYgbWlzc3BlbGxpbmcg
OiBtaXNzcGVsbGluZ3MpIHsKICAgICAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGVk
aXRvci5yYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChtaXNzcGVsbGluZyk7Ci0gICAgICAgICAg
ICBpZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgIGlmIChjcmVhdGVMaXZlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJl
Qm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkp
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKKyAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ1Jh
bmdlICYmIGlzX2d0KGRvY3VtZW50T3JkZXIobWlzc3BlbGxpbmdSYW5nZS0+ZW5kLCBzdGFydC5l
bmQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0
aW9uOjpQcmV2aW91cykgewotICAgICAgICBmb3IgKGF1dG8gcml0ID0gbWlzc3BlbGxpbmdzLnJi
ZWdpbigpOyByaXQgIT0gbWlzc3BlbGxpbmdzLnJlbmQoKTsgKytyaXQpIHsKLSAgICAgICAgICAg
IGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGVkaXRvci5yYW5nZUZvclRleHRDaGVja2luZ1Jlc3Vs
dCgqcml0KTsKLSAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGNyZWF0ZUxpdmVSYW5nZSgqbWlzc3Bl
bGxpbmdSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQs
IGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKKyAgICB9
IGVsc2UgeworICAgICAgICBmb3IgKGF1dG8mIG1pc3NwZWxsaW5nIDogbWFrZVJldmVyc2VkUmFu
Z2UobWlzc3BlbGxpbmdzKSkgeworICAgICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0g
ZWRpdG9yLnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KG1pc3NwZWxsaW5nKTsKKyAgICAgICAg
ICAgIGlmIChtaXNzcGVsbGluZ1JhbmdlICYmIGlzX2x0KGRvY3VtZW50T3JkZXIobWlzc3BlbGxp
bmdSYW5nZS0+c3RhcnQsIHN0YXJ0LnN0YXJ0KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICpt
aXNzcGVsbGluZ1JhbmdlOwogICAgICAgICB9CiAgICAgfQpAQCAtNTY1LDI4ICs1NTYsMTMgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpmaW5kTWF0Y2hpbmdPYmplY3RzKEFjY2Vzc2liaWxp
dHlTZWFyY2hDcml0ZXJpYSogY3JpdGUKIC8vIHJhbmdlIGlzIGV4cGVjdGVkIHRvIEFDVFVBTExZ
IGJlIGJlZm9yZS4gVGhlc2UgYXJlIG5vdCBjaGVja2VkIGZvciBwZXJmb3JtYW5jZSByZWFzb25z
Lgogc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUNsb3Nlc3RUb1JhbmdlKGNvbnN0
IFNpbXBsZVJhbmdlJiByZWZlcmVuY2VSYW5nZSwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiYgYWZ0
ZXJSYW5nZSwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiYgYmVmb3JlUmFuZ2UpCiB7Ci0gICAgLy8g
VGhlIHRyZWVTY29wZSBmb3Igc2hhZG93IG5vZGVzIG1heSBub3QgYmUgdGhlIHNhbWUgc2NvcGUg
YXMgYW5vdGhlciBlbGVtZW50IGluIGEgZG9jdW1lbnQuCi0gICAgLy8gQ29tcGFyaXNvbnMgbWF5
IGZhaWwgaW4gdGhhdCBjYXNlLCB3aGljaCBhcmUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHNob3Vs
ZCBub3QgYXNzZXJ0LgotCi0gICAgaWYgKGFmdGVyUmFuZ2UgJiYgKGFmdGVyUmFuZ2UtPnN0YXJ0
LmNvbnRhaW5lci0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24ocmVmZXJlbmNlUmFuZ2UuZW5kLmNv
bnRhaW5lcikgJiBOb2RlOjpET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQpKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIEFTU0VSVCghYWZ0ZXJSYW5nZSB8fCBjcmVhdGVM
aXZlUmFuZ2UoYWZ0ZXJSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRf
VE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShyZWZlcmVuY2VSYW5nZSkpLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpID49IDApOwotCi0gICAgaWYgKGJlZm9yZVJhbmdlICYmIChiZWZvcmVSYW5nZS0+ZW5k
LmNvbnRhaW5lci0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24ocmVmZXJlbmNlUmFuZ2Uuc3RhcnQu
Y29udGFpbmVyKSAmIE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCkpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgQVNTRVJUKCFiZWZvcmVSYW5nZSB8fCBjcmVh
dGVMaXZlUmFuZ2UoYmVmb3JlUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNU
QVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpKS5yZWxlYXNlUmV0
dXJuVmFsdWUoKSA8PSAwKTsKLQotICAgIGlmICghYWZ0ZXJSYW5nZSAmJiAhYmVmb3JlUmFuZ2Up
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKCFiZWZvcmVSYW5nZSkKICAg
ICAgICAgcmV0dXJuIFdURk1vdmUoYWZ0ZXJSYW5nZSk7CiAgICAgaWYgKCFhZnRlclJhbmdlKQog
ICAgICAgICByZXR1cm4gV1RGTW92ZShiZWZvcmVSYW5nZSk7Ci0KLSAgICBhdXRvIHBvc2l0aW9u
c1RvQWZ0ZXJSYW5nZSA9IFBvc2l0aW9uOjpwb3NpdGlvbkNvdW50QmV0d2VlblBvc2l0aW9ucyhj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oYWZ0ZXJSYW5nZS0+c3RhcnQpLCBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24ocmVmZXJlbmNlUmFuZ2UuZW5kKSk7Ci0gICAgYXV0byBwb3NpdGlv
bnNUb0JlZm9yZVJhbmdlID0gUG9zaXRpb246OnBvc2l0aW9uQ291bnRCZXR3ZWVuUG9zaXRpb25z
KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihiZWZvcmVSYW5nZS0+ZW5kKSwgY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHJlZmVyZW5jZVJhbmdlLnN0YXJ0KSk7Ci0KLSAgICByZXR1cm4g
V1RGTW92ZShwb3NpdGlvbnNUb0FmdGVyUmFuZ2UgPCBwb3NpdGlvbnNUb0JlZm9yZVJhbmdlID8g
YWZ0ZXJSYW5nZSA6IGJlZm9yZVJhbmdlKTsKKyAgICBhdXRvIGRpc3RhbmNlQmVmb3JlID0gY2hh
cmFjdGVyQ291bnQoeyBiZWZvcmVSYW5nZS0+ZW5kLCByZWZlcmVuY2VSYW5nZS5zdGFydCB9KTsK
KyAgICBhdXRvIGRpc3RhbmNlQWZ0ZXIgPSBjaGFyYWN0ZXJDb3VudCh7IGFmdGVyUmFuZ2UtPnN0
YXJ0LCByZWZlcmVuY2VSYW5nZS5lbmQgfSk7CisgICAgcmV0dXJuIFdURk1vdmUoZGlzdGFuY2VC
ZWZvcmUgPD0gZGlzdGFuY2VBZnRlciA/IGJlZm9yZVJhbmdlIDogYWZ0ZXJSYW5nZSk7CiB9CiAK
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5n
Q2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihjb25zdCBTaW1wbGVSYW5nZSYgcmVmZXJlbmNlUmFu
Z2UsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24gc2VhcmNoRGlyZWN0aW9uLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgc2VhcmNoU3RyaW5ncykgY29uc3QKQEAgLTYwMywyMyArNTc5LDE2IEBA
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5n
Q2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvCiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNsb3Nl
c3RTdHJpbmdSYW5nZTsKICAgICBmb3IgKGF1dG8mIHNlYXJjaFN0cmluZyA6IHNlYXJjaFN0cmlu
Z3MpIHsKICAgICAgICAgaWYgKGF1dG8gZm91bmRTdHJpbmdSYW5nZSA9IGZyYW1lLT5lZGl0b3Io
KS5yYW5nZU9mU3RyaW5nKHNlYXJjaFN0cmluZywgcmVmZXJlbmNlUmFuZ2UsIGZpbmRPcHRpb25z
KSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZFN0cmluZ0lzQ2xvc2VyOwogICAgICAgICAgICAg
aWYgKCFjbG9zZXN0U3RyaW5nUmFuZ2UpCi0gICAgICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1Jh
bmdlID0gKmZvdW5kU3RyaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAgZm91bmRTdHJpbmdJc0Ns
b3NlciA9IHRydWU7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJZiBz
ZWFyY2hpbmcgYmFja3dhcmQsIHVzZSB0aGUgdHJhaWxpbmcgcmFuZ2UgZWRnZXMgdG8gY29ycmVj
dGx5IGRldGVybWluZSB3aGljaAotICAgICAgICAgICAgICAgIC8vIHJhbmdlIGlzIGNsb3Nlc3Qu
IFNpbWlsYXJseSwgaWYgc2VhcmNoaW5nIGZvcndhcmQsIHVzZSB0aGUgbGVhZGluZyByYW5nZSBl
ZGdlcy4KLSAgICAgICAgICAgICAgICBhdXRvJiBjbG9zZXN0U3RyaW5nUG9zaXRpb24gPSBpc0Jh
Y2t3YXJkU2VhcmNoID8gY2xvc2VzdFN0cmluZ1JhbmdlLT5lbmQgOiBjbG9zZXN0U3RyaW5nUmFu
Z2UtPnN0YXJ0OwotICAgICAgICAgICAgICAgIGF1dG8mIGZvdW5kU3RyaW5nUG9zaXRpb24gPSBp
c0JhY2t3YXJkU2VhcmNoID8gZm91bmRTdHJpbmdSYW5nZS0+ZW5kIDogZm91bmRTdHJpbmdSYW5n
ZS0+c3RhcnQ7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXV0byBjbG9zZXN0
UG9zaXRpb25PZmZzZXQgPSBjbG9zZXN0U3RyaW5nUG9zaXRpb24ub2Zmc2V0OwotICAgICAgICAg
ICAgICAgIGF1dG8gc2VhcmNoUG9zaXRpb25PZmZzZXQgPSBmb3VuZFN0cmluZ1Bvc2l0aW9uLm9m
ZnNldDsKLSAgICAgICAgICAgICAgICBhdXRvIGNsb3Nlc3RDb250YWluZXJOb2RlID0gY2xvc2Vz
dFN0cmluZ1Bvc2l0aW9uLmNvbnRhaW5lci5wdHIoKTsKLSAgICAgICAgICAgICAgICBhdXRvIHNl
YXJjaENvbnRhaW5lck5vZGUgPSBmb3VuZFN0cmluZ1Bvc2l0aW9uLmNvbnRhaW5lci5wdHIoKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFJhbmdlOjpj
b21wYXJlQm91bmRhcnlQb2ludHMoY2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nlc3RQb3NpdGlv
bk9mZnNldCwgc2VhcmNoQ29udGFpbmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZzZXQpLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICgoIWlzQmFja3dhcmRTZWFyY2gg
JiYgcmVzdWx0ID4gMCkgfHwgKGlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0IDwgMCkpCi0gICAg
ICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9ICpmb3VuZFN0cmluZ1JhbmdlOwor
ICAgICAgICAgICAgICAgIGZvdW5kU3RyaW5nSXNDbG9zZXIgPSBpc0JhY2t3YXJkU2VhcmNoCisg
ICAgICAgICAgICAgICAgICAgID8gaXNfZ3QoZG9jdW1lbnRPcmRlcihmb3VuZFN0cmluZ1Jhbmdl
LT5lbmQsIGNsb3Nlc3RTdHJpbmdSYW5nZS0+ZW5kKSkKKyAgICAgICAgICAgICAgICAgICAgOiBp
c19sdChkb2N1bWVudE9yZGVyKGZvdW5kU3RyaW5nUmFuZ2UtPnN0YXJ0LCBjbG9zZXN0U3RyaW5n
UmFuZ2UtPnN0YXJ0KSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZm91bmRTdHJp
bmdJc0Nsb3NlcikKKyAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAqZm91bmRT
dHJpbmdSYW5nZTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gY2xvc2VzdFN0cmluZ1Jh
bmdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggNzliOGNhNGExMGE0MzVkYjMxOGY5MDZmNDA3
MWNkNWIwNDQxNjY5OC4uMmFjMTM0MmRhYzM0NDQ0N2VkNTEzMjE4OWUwOGVmMzU5NTIzZmU5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC05MTUsNyArOTE1LDcgQEAgSW50UG9pbnQgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6bGlua0NsaWNrUG9pbnQoKQogICAgIGlmIChhdXRvIHJhbmdl
ID0gZWxlbWVudFJhbmdlKCkpIHsKICAgICAgICAgYXV0byBzdGFydCA9IFZpc2libGVQb3NpdGlv
biB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpIH07CiAgICAgICAg
IGF1dG8gZW5kID0gbmV4dFZpc2libGVQb3NpdGlvbihzdGFydCk7Ci0gICAgICAgIGlmICghZW5k
LmlzTnVsbCgpICYmIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbnRhaW5zKGVuZCkpCisgICAg
ICAgIGlmIChpc1BvaW50SW5SYW5nZSgqcmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGVuZCkpKQog
ICAgICAgICAgICAgcmV0dXJuIHsgYm91bmRzRm9yUmFuZ2UoKm1ha2VTaW1wbGVSYW5nZShzdGFy
dCwgZW5kKSkuY2VudGVyKCkgfTsKICAgICB9CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmNsaWNrUG9pbnQoKTsKQEAgLTE1NjEsMTcgKzE1NjEsOSBAQCBQbGFpblRleHRSYW5nZSBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2Uo
KSBjb25zdAogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7
CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsK
LSAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCi0gICAgICAgIHJldHVybiBQbGFpblRl
eHRSYW5nZSgpOwotCi0gICAgLy8gRklYTUU6IFRoZSByZWFzb24gdGhpcyBkb2VzIHRoZSBjb3Jy
ZWN0IHRoaW5nIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBpbiB0aGUKLSAgICAvLyBzaGFkb3cgdHJl
ZSBvZiBhbiBpbnB1dCBlbGVtZW50IGlzIHRoYXQgd2UgZ2V0IGFuIGV4Y2VwdGlvbiBiZWxvdywg
YW5kIHdlCi0gICAgLy8gY2hvb3NlIHRvIGludGVycHJldCBhbGwgZXhjZXB0aW9ucyBhcyAiZG9l
cyBub3QgaW50ZXJzZWN0Ii4gU2VlbXMgbGlrZWx5Ci0gICAgLy8gdGhhdCBkb2VzIG5vdCBoYW5k
bGUgYWxsIGNhc2VzIGNvcnJlY3RseS4KLSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjcmVh
dGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm5vZGUpOwotICAg
IGlmICghaW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiAhaW50ZXJzZWN0c1Jlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKKyAgICBhdXRvIHZpc2libGVTZWxlY3Rpb24gPSBzZWxl
Y3Rpb24oKTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi5maXJz
dFJhbmdlKCk7CisgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSB8fCAhaW50ZXJzZWN0cygqc2VsZWN0
aW9uUmFuZ2UsICpub2RlKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKICAg
ICBpbnQgc3RhcnQgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLnN0
YXJ0KCkpOwpAQCAtMTY1NiwxMCArMTY0OCwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZQog
ICAgICAgICBhdXRvJiBub2RlID0gKnRoaXMtPm5vZGUoKTsKICAgICAgICAgYXV0byBlbGVtZW50
UmFuZ2UgPSB0aGlzLT5lbGVtZW50UmFuZ2UoKTsKICAgICAgICAgYXV0byBzdGFydCA9IHZpc2li
bGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcihub2RlLCByYW5nZS5zdGFy
dCk7Ci0gICAgICAgIGlmICghY3JlYXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSktPmNvbnRhaW5z
KHN0YXJ0KSkKKyAgICAgICAgaWYgKCFpc1BvaW50SW5SYW5nZSgqZWxlbWVudFJhbmdlLCBtYWtl
Qm91bmRhcnlQb2ludChzdGFydCkpKQogICAgICAgICAgICAgc3RhcnQgPSBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFydCk7CiAgICAgICAgIGF1dG8gZW5kID0g
dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKG5vZGUsIHJhbmdl
LnN0YXJ0ICsgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2UoZWxl
bWVudFJhbmdlKS0+Y29udGFpbnMoZW5kKSkKKyAgICAgICAgaWYgKCFpc1BvaW50SW5SYW5nZSgq
ZWxlbWVudFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChlbmQpKSkKICAgICAgICAgICAgIGVuZCA9
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAgICAg
ICAgbV9yZW5kZXJlci0+ZnJhbWUoKS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNl
bGVjdGlvbihzdGFydCwgZW5kKSwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25P
cHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKICAgICB9CkBAIC0yMjE2LDcgKzIyMDgsNyBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFu
Z2UoY29uc3QgVmlzaWJsZVBvcwogCiAgICAgICAgIGF1dG8gc3RhcnQgPSByYW5nZS5zdGFydDsK
ICAgICAgICAgaWYgKGF1dG8gZWxlbWVudFJhbmdlID0gdGhpcy0+ZWxlbWVudFJhbmdlKCkpIHsK
LSAgICAgICAgICAgIGlmICghY3JlYXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSktPmNvbnRhaW5z
KHN0YXJ0KSkKKyAgICAgICAgICAgIGlmICghaXNQb2ludEluUmFuZ2UoKmVsZW1lbnRSYW5nZSwg
bWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpKSkKICAgICAgICAgICAgICAgICBzdGFydCA9IGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlVXRpbC5jcHAKaW5kZXggOGQ2MjFiZTc4MWU5OTBjMWRjNDA2MGZlZGZiMzkyYjcx
NjU3NTRhOS4uOGY0M2YzODVjMzNhMjQzNzU5ZjEyY2Y3NGQ2MjkxZmVkZTkzZTMwZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0
aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcApAQCAtMTU1LDI1ICsxNTUsOCBAQCBib29sIHNlbGVjdGlvbkJlbG9uZ3NU
b09iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9u
JgogICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWxlY3Rpb24u
aXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSB3YW50IHRvIGNoZWNrIHRoYXQgYm90aCB0aGUgc2VsZWN0
aW9uIGludGVyc2VjdHMgdGhlIG5vZGUKLSAgICAvLyBBTkQgdGhhdCB0aGUgc2VsZWN0aW9uIGlz
IG5vdCBqdXN0ICJ0b3VjaGluZyIgb25lIG9mIHRoZQotICAgIC8vIGJvdW5kYXJpZXMgZm9yIHRo
ZSBzZWxlY3RlZCBub2RlLiBXZSB3YW50IHRvIGNoZWNrIHdoZXRoZXIgdGhlCi0gICAgLy8gbm9k
ZSBpcyBhY3R1YWxseSBpbnNpZGUgdGhlIHJlZ2lvbiwgYXQgbGVhc3QgcGFydGlhbGx5LgotICAg
IGF1dG8mIG5vZGUgPSAqY29yZU9iamVjdC0+bm9kZSgpOwotICAgIGF1dG8qIGxhc3REZXNjZW5k
YW50ID0gbm9kZS5sYXN0RGVzY2VuZGFudCgpOwotICAgIHVuc2lnbmVkIGxhc3RPZmZzZXQgPSBs
YXN0RGVzY2VuZGFudC0+bGVuZ3RoKCk7Ci0gICAgYXV0byBpbnRlcnNlY3RzUmVzdWx0ID0gY3Jl
YXRlTGl2ZVJhbmdlKCpyYW5nZSktPmludGVyc2VjdHNOb2RlKG5vZGUpOwotICAgIHJldHVybiAh
aW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKQotICAgICAgICAmJiBpbnRlcnNlY3RzUmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpCi0gICAgICAgICYmIChyYW5nZS0+ZW5kLmNvbnRhaW5l
ci5wdHIoKSAhPSAmbm9kZSB8fCByYW5nZS0+ZW5kLm9mZnNldCkKLSAgICAgICAgJiYgKHJhbmdl
LT5zdGFydC5jb250YWluZXIucHRyKCkgIT0gbGFzdERlc2NlbmRhbnQgfHwgcmFuZ2UtPnN0YXJ0
Lm9mZnNldCAhPSBsYXN0T2Zmc2V0KTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmZpcnN0
UmFuZ2UoKTsKKyAgICByZXR1cm4gcmFuZ2UgJiYgaW50ZXJzZWN0cygqcmFuZ2UsICpjb3JlT2Jq
ZWN0LT5ub2RlKCkpOwogfQogCiBBWENvcmVPYmplY3QqIG9iamVjdEZvY3VzZWRBbmRDYXJldE9m
ZnNldFVuaWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5jZU9iamVjdCwgaW50JiBvZmZzZXQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IGYwYzhhMzRlZjMzZWJjMDZkZDU3Mjk2MjA4NTBmYTEx
OTVjYjc1MDIuLjVhYmMyNGViYjk4MWU1NjRmMDdhZGViOGU1ZmMxMTU4MTMxYzUzNTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCkBAIC05MDUsNyArOTA1LDcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0
dXJucyB0aGUgb3duaW5nIGVsZW1lbnQgaW4gdGhlIHBhcmVudCBkb2N1bWVudC4KICAgICAvLyBS
ZXR1cm5zIG51bGxwdHIgaWYgdGhpcyBpcyB0aGUgdG9wIGxldmVsIGRvY3VtZW50LgotICAgIEhU
TUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQoKSBjb25zdDsKIAogICAg
IC8vIFVzZWQgYnkgRE9NIGJpbmRpbmdzOyBubyBkaXJlY3Rpb24ga25vd24uCiAgICAgY29uc3Qg
U3RyaW5nJiB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGl0bGUuc3RyaW5nOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IDBmN2Y5
OTBlM2VkOWE3NWM2MzExMjQwYWVkNTU3YTgxNzA1MWNlZTQuLjhhZTFkOGQ1NWI4ZmU3MGVlZTM5
NTdkM2RkZWQ3NTM4Y2QxM2JmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuY3BwCkBAIC02NDksNyArNjQ5LDcgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5n
ZShjb25zdAogCiB2b2lkIGFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IERvY3VtZW50TWFya2VyOjpEYXRhJiBk
YXRhKQogewotICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5tYXJrZXJzKCku
YWRkTWFya2VyKHJhbmdlLCB0eXBlLCBkYXRhKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgp
Lm1hcmtlcnMoKS5hZGRNYXJrZXIocmFuZ2UsIHR5cGUsIGRhdGEpOwogfQogCiB2b2lkIGFkZE1h
cmtlcihUZXh0JiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmIGRh
dGEpCkBAIC02NTksNyArNjU5LDcgQEAgdm9pZCBhZGRNYXJrZXIoVGV4dCYgbm9kZSwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXIKIAogdm9pZCBy
ZW1vdmVNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJr
ZXIgcG9saWN5KQogewotICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5tYXJr
ZXJzKCkucmVtb3ZlTWFya2VycyhyYW5nZSwgdHlwZXMsIHBvbGljeSk7CisgICAgcmFuZ2Uuc3Rh
cnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhyYW5nZSwgdHlwZXMsIHBvbGlj
eSk7CiB9CiAKIFNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShOb2RlJiBub2RlLCBjb25zdCBE
b2N1bWVudE1hcmtlciYgbWFya2VyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggZTc3YWQ3MjlkMzIw
M2IxMDM5NGQwYmViMDUyZmY1ZDU2YmEyZWRlNS4uODRmZmE3NzNlYmJiMzFmMTdjYTNlOWE5OWIw
ZjJjNjkxMTI3ZGE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0yOTcsNyArMjk3LDcgQEAgcHVi
bGljOgogICAgICAgICBTaGFkb3dSb290TW9kZSBtb2RlOwogICAgICAgICBib29sIGRlbGVnYXRl
c0ZvY3VzIHsgZmFsc2UgfTsKICAgICB9OwotICAgIEV4Y2VwdGlvbk9yPFNoYWRvd1Jvb3QmPiBh
dHRhY2hTaGFkb3coY29uc3QgU2hhZG93Um9vdEluaXQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBF
eGNlcHRpb25PcjxTaGFkb3dSb290Jj4gYXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0
Jik7CiAKICAgICBSZWZQdHI8U2hhZG93Um9vdD4gdXNlckFnZW50U2hhZG93Um9vdCgpIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIFNoYWRvd1Jvb3QmIGVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jv
b3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBhNjBjMzY1NzNlOTMyN2E5OTM0ZTQ2MzgwNTg4ZWQ0
ODJhMDhjMjMyLi4wZWNmYTg3MWY5YWRkMzhmMzMyMjM5NjQ5NTZiZjNhOWRhZDU2YWIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCkBAIC0yNjMyLDYgKzI2MzIsNyBAQCBzdGF0aWMgc2l6ZV90IGRlcHRoKGNv
bnN0IE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIGRlcHRoOwogfQogCisvLyBGSVhNRTogRE9NIHNw
ZWNpZmljYXRpb24gY2FsbHMgdGhpcyAic2hhZG93LWluY2x1c2l2ZSIgYnV0IHRoYXQncyBub3Qg
cmVmbGVjdGVkIGluIHRoaXMgZnVuY3Rpb24ncyBuYW1lLgogc3RydWN0IEFuY2VzdG9yQW5kQ2hp
bGRyZW4gewogICAgIGNvbnN0IE5vZGUqIGNvbW1vbkFuY2VzdG9yOwogICAgIGNvbnN0IE5vZGUq
IGRpc3RpbmN0QW5jZXN0b3JBOwpAQCAtMjY2NCw2ICsyNjY1LDcgQEAgc3RhdGljIEFuY2VzdG9y
QW5kQ2hpbGRyZW4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3JBbmRDaGlsZHJlbihjb25zdCBOb2Rl
JiBhLCBjb24KICAgICByZXR1cm4geyB4LCBkaXN0aW5jdEFuY2VzdG9yQSwgZGlzdGluY3RBbmNl
c3RvckIgfTsKIH0KIAorLy8gRklYTUU6IERPTSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoaXMgInNo
YWRvdy1pbmNsdXNpdmUiIGJ1dCB0aGF0J3Mgbm90IHJlZmxlY3RlZCBpbiB0aGlzIGZ1bmN0aW9u
J3MgbmFtZS4KIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihOb2RlJiBhLCBO
b2RlJiBiKQogewogICAgIHJldHVybiBjb25zdF9jYXN0PE5vZGUqPihjb21tb25JbmNsdXNpdmVB
bmNlc3RvckFuZENoaWxkcmVuKGEsIGIpLmNvbW1vbkFuY2VzdG9yKTsKQEAgLTI2NzEsNiArMjY3
Myw4IEBAIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihOb2RlJiBhLCBOb2Rl
JiBiKQogCiBzdGF0aWMgYm9vbCBpc1NpYmxpbmdTdWJzZXF1ZW50KGNvbnN0IE5vZGUmIHNpYmxp
bmdBLCBjb25zdCBOb2RlJiBzaWJsaW5nQikKIHsKKyAgICBBU1NFUlQoc2libGluZ0EucGFyZW50
Tm9kZSgpKTsKKyAgICBBU1NFUlQoc2libGluZ0EucGFyZW50Tm9kZSgpID09IHNpYmxpbmdCLnBh
cmVudE5vZGUoKSk7CiAgICAgQVNTRVJUKCZzaWJsaW5nQSAhPSAmc2libGluZ0IpOwogICAgIGZv
ciAoYXV0byBzaWJsaW5nID0gJnNpYmxpbmdBOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+
bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoc2libGluZyA9PSAmc2libGluZ0IpCkBAIC0y
NjkwLDYgKzI2OTQsMTYgQEAgUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgTm9k
ZSYgYSwgY29uc3QgTm9kZSYgYikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6bGVz
czsKICAgICBpZiAoIXJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQikKICAgICAgICAgcmV0dXJuIFBh
cnRpYWxPcmRlcmluZzo6Z3JlYXRlcjsKKyAgICBib29sIGlzU2hhZG93Um9vdEEgPSByZXN1bHQu
ZGlzdGluY3RBbmNlc3RvckEtPmlzU2hhZG93Um9vdCgpOworICAgIGJvb2wgaXNTaGFkb3dSb290
QiA9IHJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQi0+aXNTaGFkb3dSb290KCk7CisgICAgaWYgKGlz
U2hhZG93Um9vdEEgfHwgaXNTaGFkb3dSb290QikgeworICAgICAgICBpZiAoIWlzU2hhZG93Um9v
dEIpCisgICAgICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpsZXNzOworICAgICAgICBp
ZiAoIWlzU2hhZG93Um9vdEEpCisgICAgICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpn
cmVhdGVyOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFBh
cnRpYWxPcmRlcmluZzo6dW5vcmRlcmVkOworICAgIH0KICAgICByZXR1cm4gaXNTaWJsaW5nU3Vi
c2VxdWVudCgqcmVzdWx0LmRpc3RpbmN0QW5jZXN0b3JBLCAqcmVzdWx0LmRpc3RpbmN0QW5jZXN0
b3JCKSA/IFBhcnRpYWxPcmRlcmluZzo6bGVzcyA6IFBhcnRpYWxPcmRlcmluZzo6Z3JlYXRlcjsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgKaW5kZXggNThlNDA1ZDE1M2JjYjI2NjExMDkxNDY5ZTg2ZjkyZWY3Njdm
ZjA0ZC4uNTllY2IxYjJmOWNiNWM3MDBjMWZlODViZTgzMjc2MmUwMTA4ODgyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oCkBAIC02OTIsNiArNjkyLDEyIEBAIHByaXZhdGU6CiAgICAgY29uc3RleHByIFBhcnRpYWxP
cmRlcmluZyhUeXBlIHR5cGUpIDogbV90eXBlIHsgdHlwZSB9IHsgfQogICAgIFR5cGUgbV90eXBl
OwogfTsKK2NvbnN0ZXhwciBib29sIGlzX2VxKFBhcnRpYWxPcmRlcmluZyk7Citjb25zdGV4cHIg
Ym9vbCBpc19sdChQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHByIGJvb2wgaXNfZ3QoUGFydGlh
bE9yZGVyaW5nKTsKK2NvbnN0ZXhwciBib29sIGlzX25lcShQYXJ0aWFsT3JkZXJpbmcpOworY29u
c3RleHByIGJvb2wgaXNfbHRlcShQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHByIGJvb2wgaXNf
Z3RlcShQYXJ0aWFsT3JkZXJpbmcpOwogCiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcg
ZG9jdW1lbnRPcmRlcihjb25zdCBOb2RlJiwgY29uc3QgTm9kZSYpOwogCkBAIC04MjgsNiArODM0
LDIxIEBAIGNvbnN0ZXhwciBib29sIGlzX2d0KFBhcnRpYWxPcmRlcmluZyBvcmRlcmluZykKICAg
ICByZXR1cm4gb3JkZXJpbmcubV90eXBlID09IFBhcnRpYWxPcmRlcmluZzo6VHlwZTo6R3JlYXRl
cjsKIH0KIAorY29uc3RleHByIGJvb2wgaXNfbmVxKFBhcnRpYWxPcmRlcmluZyBvcmRlcmluZykK
K3sKKyAgICByZXR1cm4gaXNfbHQob3JkZXJpbmcpIHx8IGlzX2d0KG9yZGVyaW5nKTsKK30KKwor
Y29uc3RleHByIGJvb2wgaXNfbHRlcShQYXJ0aWFsT3JkZXJpbmcgb3JkZXJpbmcpCit7CisgICAg
cmV0dXJuIGlzX2x0KG9yZGVyaW5nKSB8fCBpc19lcShvcmRlcmluZyk7Cit9CisKK2NvbnN0ZXhw
ciBib29sIGlzX2d0ZXEoUGFydGlhbE9yZGVyaW5nIG9yZGVyaW5nKQoreworICAgIHJldHVybiBp
c19ndChvcmRlcmluZykgfHwgaXNfZXEob3JkZXJpbmcpOworfQorCiBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgTm9kZSYpOwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA4ZjZmZDNiYzhhYmE1YWZhNDU4Yzkz
NmYyZWUzY2M3NDA4NGRiYzJjLi4zNjIyMjc5Y2NhMDNmMTEyYmFjMTc1MDQxODc0NjlmNWJlMThj
NDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTY2LDcgKzY2LDYgQEAgdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIERFRklORV9ERUJVR19PTkxZX0dMT0JBTChXVEY6OlJlZkNvdW50ZWRMZWFr
Q291bnRlciwgcmFuZ2VDb3VudGVyLCAoIlJhbmdlIikpOwogCiBlbnVtIENvbnRlbnRzUHJvY2Vz
c0RpcmVjdGlvbiB7IFByb2Nlc3NDb250ZW50c0ZvcndhcmQsIFByb2Nlc3NDb250ZW50c0JhY2t3
YXJkIH07Ci1lbnVtIGNsYXNzIENvb3JkaW5hdGVTcGFjZSB7IEFic29sdXRlLCBDbGllbnQgfTsK
IAogc3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NOb2RlcyhSYW5nZTo6QWN0aW9uVHlw
ZSwgVmVjdG9yPFJlZjxOb2RlPj4mLCBOb2RlKiBvbGRDb250YWluZXIsIFJlZlB0cjxOb2RlPiBu
ZXdDb250YWluZXIpOwogc3RhdGljIEV4Y2VwdGlvbk9yPFJlZlB0cjxOb2RlPj4gcHJvY2Vzc0Nv
bnRlbnRzQmV0d2Vlbk9mZnNldHMoUmFuZ2U6OkFjdGlvblR5cGUsIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiwgUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCk7CkBAIC03NCw4ICs3Myw4IEBAIHN0YXRpYyBFeGNlcHRpb25PcjxS
ZWZQdHI8Tm9kZT4+IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKFJhbmdlOjpBY3Rp
b25UCiAKIGlubGluZSBSYW5nZTo6UmFuZ2UoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQpCiAgICAg
OiBtX293bmVyRG9jdW1lbnQob3duZXJEb2N1bWVudCkKLSAgICAsIG1fc3RhcnQoJm93bmVyRG9j
dW1lbnQpCi0gICAgLCBtX2VuZCgmb3duZXJEb2N1bWVudCkKKyAgICAsIG1fc3RhcnQob3duZXJE
b2N1bWVudCkKKyAgICAsIG1fZW5kKG93bmVyRG9jdW1lbnQpCiB7CiAjaWZuZGVmIE5ERUJVRwog
ICAgIHJhbmdlQ291bnRlci5pbmNyZW1lbnQoKTsKQEAgLTk4LDY1ICs5NywzOSBAQCBSYW5nZTo6
flJhbmdlKCkKICNlbmRpZgogfQogCi12b2lkIFJhbmdlOjpzZXREb2N1bWVudChEb2N1bWVudCYg
ZG9jdW1lbnQpCit2b2lkIFJhbmdlOjp1cGRhdGVEb2N1bWVudCgpCiB7Ci0gICAgQVNTRVJUKG1f
b3duZXJEb2N1bWVudC5wdHIoKSAhPSAmZG9jdW1lbnQpOworICAgIGF1dG8mIGRvY3VtZW50ID0g
c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpOworICAgIGlmIChtX293bmVyRG9jdW1lbnQucHRy
KCkgPT0gJmRvY3VtZW50KQorICAgICAgICByZXR1cm47CiAgICAgbV9vd25lckRvY3VtZW50LT5k
ZXRhY2hSYW5nZSgqdGhpcyk7CiAgICAgbV9vd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7Ci0gICAg
bV9zdGFydC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKLSAgICBtX2VuZC5zZXRUb1N0YXJ0
T2ZOb2RlKGRvY3VtZW50KTsKICAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlz
KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5l
cihjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIHN0YXJ0LCBjb25zdCBSYW5nZUJvdW5kYXJ5UG9p
bnQmIGVuZCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRTdGFydChSZWY8Tm9kZT4mJiBj
b250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICBOb2RlKiBlbmRSb290Q29udGFpbmVy
ID0gZW5kLmNvbnRhaW5lcigpOwotICAgIHdoaWxlIChlbmRSb290Q29udGFpbmVyLT5wYXJlbnRO
b2RlKCkpCi0gICAgICAgIGVuZFJvb3RDb250YWluZXIgPSBlbmRSb290Q29udGFpbmVyLT5wYXJl
bnROb2RlKCk7Ci0gICAgTm9kZSogc3RhcnRSb290Q29udGFpbmVyID0gc3RhcnQuY29udGFpbmVy
KCk7Ci0gICAgd2hpbGUgKHN0YXJ0Um9vdENvbnRhaW5lci0+cGFyZW50Tm9kZSgpKQotICAgICAg
ICBzdGFydFJvb3RDb250YWluZXIgPSBzdGFydFJvb3RDb250YWluZXItPnBhcmVudE5vZGUoKTsK
LQotICAgIHJldHVybiBzdGFydFJvb3RDb250YWluZXIgIT0gZW5kUm9vdENvbnRhaW5lciB8fCBS
YW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHN0YXJ0LCBlbmQpLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpID4gMDsKLX0KLQotRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldFN0YXJ0KFJlZjxOb2Rl
PiYmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKLXsKLSAgICBib29sIGRpZE1vdmVEb2N1bWVu
dCA9IGZhbHNlOwotICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVu
dCgpKSB7Ci0gICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUtPmRvY3VtZW50KCkpOwotICAgICAg
ICBkaWRNb3ZlRG9jdW1lbnQgPSB0cnVlOwotICAgIH0KLQotICAgIGF1dG8gY2hpbGROb2RlID0g
Y2hlY2tOb2RlV09mZnNldChyZWZOb2RlLCBvZmZzZXQpOworICAgIGF1dG8gY2hpbGROb2RlID0g
Y2hlY2tOb2RlT2Zmc2V0UGFpcihjb250YWluZXIsIG9mZnNldCk7CiAgICAgaWYgKGNoaWxkTm9k
ZS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS5yZWxlYXNlRXhjZXB0
aW9uKCk7CiAKLSAgICBtX3N0YXJ0LnNldChXVEZNb3ZlKHJlZk5vZGUpLCBvZmZzZXQsIGNoaWxk
Tm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci0KLSAgICBpZiAoZGlkTW92ZURvY3VtZW50IHx8
IGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5lcihtX3N0YXJ0LCBtX2VuZCkpCi0gICAgICAg
IGNvbGxhcHNlKHRydWUpOwotCisgICAgbV9zdGFydC5zZXQoV1RGTW92ZShjb250YWluZXIpLCBv
ZmZzZXQsIGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgaWYgKCFpc19sdGVx
KGRvY3VtZW50T3JkZXIobWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCksIG1ha2VCb3VuZGFyeVBv
aW50KG1fZW5kKSkpKQorICAgICAgICBtX2VuZCA9IG1fc3RhcnQ7CisgICAgdXBkYXRlRG9jdW1l
bnQoKTsKICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0
RW5kKFJlZjxOb2RlPiYmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK0V4Y2VwdGlvbk9yPHZv
aWQ+IFJhbmdlOjpzZXRFbmQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQp
CiB7Ci0gICAgYm9vbCBkaWRNb3ZlRG9jdW1lbnQgPSBmYWxzZTsKLSAgICBpZiAoJnJlZk5vZGUt
PmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgewotICAgICAgICBzZXREb2N1bWVudChy
ZWZOb2RlLT5kb2N1bWVudCgpKTsKLSAgICAgICAgZGlkTW92ZURvY3VtZW50ID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBhdXRvIGNoaWxkTm9kZSA9IGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zm
c2V0KTsKKyAgICBhdXRvIGNoaWxkTm9kZSA9IGNoZWNrTm9kZU9mZnNldFBhaXIoY29udGFpbmVy
LCBvZmZzZXQpOwogICAgIGlmIChjaGlsZE5vZGUuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBjaGlsZE5vZGUucmVsZWFzZUV4Y2VwdGlvbigpOwogCi0gICAgbV9lbmQuc2V0KFdURk1v
dmUocmVmTm9kZSksIG9mZnNldCwgY2hpbGROb2RlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLQot
ICAgIGlmIChkaWRNb3ZlRG9jdW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVy
KG1fc3RhcnQsIG1fZW5kKSkKLSAgICAgICAgY29sbGFwc2UoZmFsc2UpOwotCisgICAgbV9lbmQu
c2V0KFdURk1vdmUoY29udGFpbmVyKSwgb2Zmc2V0LCBjaGlsZE5vZGUucmVsZWFzZVJldHVyblZh
bHVlKCkpOworICAgIGlmICghaXNfbHRlcShkb2N1bWVudE9yZGVyKG1ha2VCb3VuZGFyeVBvaW50
KG1fc3RhcnQpLCBtYWtlQm91bmRhcnlQb2ludChtX2VuZCkpKSkKKyAgICAgICAgbV9zdGFydCA9
IG1fZW5kOworICAgIHVwZGF0ZURvY3VtZW50KCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAt
MTY4LDIzNyArMTQxLDEwMyBAQCB2b2lkIFJhbmdlOjpjb2xsYXBzZShib29sIHRvU3RhcnQpCiAg
ICAgICAgIG1fc3RhcnQgPSBtX2VuZDsKIH0KIAotRXhjZXB0aW9uT3I8Ym9vbD4gUmFuZ2U6Omlz
UG9pbnRJblJhbmdlKE5vZGUmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK0V4Y2VwdGlvbk9y
PGJvb2w+IFJhbmdlOjppc1BvaW50SW5SYW5nZShOb2RlJiBjb250YWluZXIsIHVuc2lnbmVkIG9m
ZnNldCkKIHsKLSAgICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGNoZWNrTm9kZVJlc3VsdCA9IGNo
ZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0KTsKLSAgICBpZiAoY2hlY2tOb2RlUmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIC8vIERPTTQgc3BlYyByZXF1aXJlcyB1cyB0byBj
aGVjayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZlIHRoZSBzYW1lIHJv
b3QgZmlyc3QKLSAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZlcnNlIG9yZGVyIHRv
IGF2b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0gICAgICAgIGlmICgh
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmVmTm9kZSwgc3RhcnRDb250YWluZXIoKSkpCisgICAg
aWYgKGF1dG8gY2hlY2tSZXN1bHQgPSBjaGVja05vZGVPZmZzZXRQYWlyKGNvbnRhaW5lciwgb2Zm
c2V0KTsgY2hlY2tSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgLy8gRE9NIHNwZWNp
ZmljYXRpb24gcmVxdWlyZXMgdGhpcyBjaGVjayBiZSBkb25lIGZpcnN0IGJ1dCBzaW5jZSB0aGVy
ZSBhcmUgbm8gc2lkZSBlZmZlY3RzLAorICAgICAgICAvLyB3ZSBjYW4gZG8gaXQgaW4gcmV2ZXJz
ZSBvcmRlciB0byBhdm9pZCBhbiBleHRyYSByb290IG5vZGUgY2hlY2sgaW4gdGhlIGNvbW1vbiBj
YXNlLgorICAgICAgICBpZiAoJmNvbnRhaW5lci5yb290Tm9kZSgpICE9ICZzdGFydENvbnRhaW5l
cigpLnJvb3ROb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVy
biBjaGVja05vZGVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gY2hl
Y2tSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KLQotICAgIGF1dG8gc3RhcnRDb21w
YXJlUmVzdWx0ID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZzdGFy
dENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpKTsKLSAgICBpZiAoISghc3RhcnRDb21wYXJl
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHN0YXJ0Q29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJu
VmFsdWUoKSA+PSAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gZW5kQ29tcGFy
ZVJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29u
dGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsKLSAgICByZXR1cm4gIWVuZENvbXBhcmVSZXN1bHQu
aGFzRXhjZXB0aW9uKCkgJiYgZW5kQ29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8
PSAwOworICAgIHJldHVybiBXZWJDb3JlOjppc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2Uo
KnRoaXMpLCB7IGNvbnRhaW5lciwgb2Zmc2V0IH0pOwogfQogCi1FeGNlcHRpb25PcjxzaG9ydD4g
UmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0
CitFeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiBjb250YWluZXIs
IHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsKLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemls
bGEub3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNvbXBhcmVQb2ludAotICAgIC8vIFRoaXMgbWV0aG9k
IHJldHVybnMgLTEsIDAgb3IgMSBkZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRlc2NyaWJlZCBi
eSB0aGUgCi0gICAgLy8gcmVmTm9kZSBub2RlIGFuZCBhbiBvZmZzZXQgd2l0aGluIHRoZSBub2Rl
IGlzIGJlZm9yZSwgc2FtZSBhcywgb3IgYWZ0ZXIgdGhlIHJhbmdlIHJlc3BlY3RpdmVseS4KLSAg
ICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgV3JvbmdEb2N1bWVudEVycm9yIH07Ci0KLSAgICBhdXRvIGNoZWNr
Tm9kZVJlc3VsdCA9IGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0KTsKLSAgICBpZiAo
Y2hlY2tOb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIC8vIERPTTQgc3BlYyBy
ZXF1aXJlcyB1cyB0byBjaGVjayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBo
YXZlIHRoZSBzYW1lIHJvb3QgZmlyc3QKLSAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSBy
ZXZlcnNlIG9yZGVyIHRvIGF2b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2Uu
Ci0gICAgICAgIGlmICghcmVmTm9kZS5pc0Nvbm5lY3RlZCgpICYmICFjb21tb25JbmNsdXNpdmVB
bmNlc3RvcihyZWZOb2RlLCBzdGFydENvbnRhaW5lcigpKSkKKyAgICBpZiAoYXV0byBjaGVja1Jl
c3VsdCA9IGNoZWNrTm9kZU9mZnNldFBhaXIoY29udGFpbmVyLCBvZmZzZXQpOyBjaGVja1Jlc3Vs
dC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICAvLyBET00gc3BlY2lmaWNhdGlvbiByZXF1aXJl
cyB0aGlzIGNoZWNrIGJlIGRvbmUgZmlyc3QgYnV0IHNpbmNlIHRoZXJlIGFyZSBubyBzaWRlIGVm
ZmVjdHMsCisgICAgICAgIC8vIHdlIGNhbiBkbyBpdCBpbiByZXZlcnNlIG9yZGVyIHRvIGF2b2lk
IGFuIGV4dHJhIHJvb3Qgbm9kZSBjaGVjayBpbiB0aGUgY29tbW9uIGNhc2UuCisgICAgICAgIGlm
ICgmY29udGFpbmVyLnJvb3ROb2RlKCkgIT0gJnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSkK
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKLSAg
ICAgICAgcmV0dXJuIGNoZWNrTm9kZVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgICAg
IHJldHVybiBjaGVja1Jlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgfQotCi0gICAgLy8g
Y29tcGFyZSB0byBzdGFydCwgYW5kIHBvaW50IGNvbWVzIGJlZm9yZQotICAgIGF1dG8gc3RhcnRD
b21wYXJlUmVzdWx0ID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZz
dGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpKTsKLSAgICBpZiAoc3RhcnRDb21wYXJl
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gc3RhcnRDb21wYXJlUmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBpZiAoc3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpIDwgMCkKKyAgICBhdXRvIG9yZGVyaW5nID0gZG9jdW1lbnRPcmRlcih7IGNv
bnRhaW5lciwgb2Zmc2V0IH0sIG1ha2VTaW1wbGVSYW5nZSgqdGhpcykpOworICAgIGlmIChpc19s
dChvcmRlcmluZykpCiAgICAgICAgIHJldHVybiAtMTsKLQotICAgIC8vIGNvbXBhcmUgdG8gZW5k
LCBhbmQgcG9pbnQgY29tZXMgYWZ0ZXIKLSAgICBhdXRvIGVuZENvbXBhcmVSZXN1bHQgPSBjb21w
YXJlQm91bmRhcnlQb2ludHMoJnJlZk5vZGUsIG9mZnNldCwgJmVuZENvbnRhaW5lcigpLCBtX2Vu
ZC5vZmZzZXQoKSk7Ci0gICAgaWYgKGVuZENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBlbmRDb21wYXJlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBp
ZiAoZW5kQ29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+IDApCisgICAgaWYgKGlz
X2VxKG9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGlzX2d0KG9yZGVyaW5n
KSkKICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAvLyBwb2ludCBpcyBpbiB0aGUgbWlkZGxlIG9m
IHRoaXMgcmFuZ2UsIG9yIG9uIHRoZSBib3VuZGFyeSBwb2ludHMKLSAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgV3JvbmdEb2N1bWVudEVycm9yIH07CiB9CiAKLUV4Y2VwdGlv
bk9yPFJhbmdlOjpDb21wYXJlUmVzdWx0cz4gUmFuZ2U6OmNvbXBhcmVOb2RlKE5vZGUmIHJlZk5v
ZGUpIGNvbnN0CitFeGNlcHRpb25PcjxSYW5nZTo6Q29tcGFyZVJlc3VsdHM+IFJhbmdlOjpjb21w
YXJlTm9kZShOb2RlJiBub2RlKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBUaGlzIGRlcHJlY2F0
ZWQgZnVuY3Rpb24gc2hvdWxkIGJlIHJlbW92ZWQuCisgICAgLy8gV2Ugb3JpZ2luYWxseSBhZGRl
ZCBpdCBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIEZpcmVmb3guCisgICAgLy8gUmVjZW50IHZl
cnNpb25zIG9mIEZpcmVmb3ggaGF2ZSByZW1vdmVkIGl0LgorCiAgICAgLy8gaHR0cDovL2RldmVs
b3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL0RPTTpyYW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRo
aXMgbWV0aG9kIHJldHVybnMgMCwgMSwgMiwgb3IgMyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBi
ZWZvcmUsIGFmdGVyLAotICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5z
aWRlIHRoZSByYW5nZSwgcmVzcGVjdGl2ZWx5Ci0KLSAgICBpZiAoIXJlZk5vZGUuaXNDb25uZWN0
ZWQoKSkgewotICAgICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZv
ciB0aGlzIGNhc2U7IGl0IHJldHVybnMgMC4KLSAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOwot
ICAgIH0KKyAgICAvLyBiZWZvcmUgYW5kIGFmdGVyKHN1cnJvdW5kcyksIG9yIGluc2lkZSB0aGUg
cmFuZ2UsIHJlc3BlY3RpdmVseS4KIAotICAgIGlmICgmcmVmTm9kZS5kb2N1bWVudCgpICE9ICZv
d25lckRvY3VtZW50KCkpIHsKLSAgICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4
Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBpdCByZXR1cm5zIDAuCisgICAgaWYgKCFub2RlLmlzQ29u
bmVjdGVkKCkgfHwgJm5vZGUuZG9jdW1lbnQoKSAhPSBtX293bmVyRG9jdW1lbnQucHRyKCkpIHsK
KyAgICAgICAgLy8gTWF0Y2ggaGlzdG9yaWNhbCBGaXJlZm94IGJlaGF2aW9yLgogICAgICAgICBy
ZXR1cm4gTk9ERV9CRUZPUkU7CiAgICAgfQogCi0gICAgYXV0byogcGFyZW50Tm9kZSA9IHJlZk5v
ZGUucGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50Tm9kZSkgewotICAgICAgICAvLyBJZiB0
aGUgbm9kZSBpcyB0aGUgdG9wIG9mIHRoZSB0cmVlIHdlIHNob3VsZCByZXR1cm4gTk9ERV9CRUZP
UkVfQU5EX0FGVEVSLAotICAgICAgICAvLyBidXQgd2UgdGhyb3cgdG8gbWF0Y2ggZmlyZWZveCBi
ZWhhdmlvci4KKyAgICBhdXRvIG5vZGVSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUobm9k
ZSk7CisgICAgaWYgKCFub2RlUmFuZ2UpIHsKKyAgICAgICAgLy8gTWF0Y2ggaGlzdG9yaWNhbCBG
aXJlZm94IGJlaGF2aW9yLgogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJv
ciB9OwogICAgIH0KLSAgICBhdXRvIG5vZGVJbmRleCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRl
eCgpOwotCi0gICAgYXV0byBub2RlU3RhcnRDb21wYXJlUmVzdWx0ID0gY29tcGFyZVBvaW50KCpw
YXJlbnROb2RlLCBub2RlSW5kZXgpOwotICAgIGlmIChub2RlU3RhcnRDb21wYXJlUmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gbm9kZVN0YXJ0Q29tcGFyZVJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCk7Ci0gICAgYXV0byBub2RlRW5kQ29tcGFyZVJlc3VsdCA9IGNvbXBhcmVQ
b2ludCgqcGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSk7Ci0gICAgaWYgKG5vZGVFbmRDb21wYXJl
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gbm9kZUVuZENvbXBhcmVSZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotCi0gICAgYm9vbCBub2RlU3RhcnRzQmVmb3JlUmFuZ2Ug
PSBub2RlU3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMDsKLSAgICBi
b29sIG5vZGVFbmRzQWZ0ZXJSYW5nZSA9IG5vZGVFbmRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpID4gMDsKLQotICAgIHJldHVybiBub2RlU3RhcnRzQmVmb3JlUmFuZ2UKLSAgICAg
ICAgPyAobm9kZUVuZHNBZnRlclJhbmdlID8gTk9ERV9CRUZPUkVfQU5EX0FGVEVSIDogTk9ERV9C
RUZPUkUpCi0gICAgICAgIDogKG5vZGVFbmRzQWZ0ZXJSYW5nZSA/IE5PREVfQUZURVIgOiBOT0RF
X0lOU0lERSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTm9kZSogdG9wKE5vZGUmIG5vZGUpCi17Ci0g
ICAgYXV0byogdG9wID0gJm5vZGU7Ci0gICAgd2hpbGUgKGF1dG8qIHBhcmVudCA9IHRvcC0+cGFy
ZW50Tm9kZSgpKQotICAgICAgICB0b3AgPSBwYXJlbnQ7Ci0gICAgcmV0dXJuIHRvcDsKLX0KLQot
RXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoQ29tcGFyZUhv
dyBob3csIGNvbnN0IFJhbmdlJiBzb3VyY2VSYW5nZSkgY29uc3QKLXsKLSAgICBhdXRvKiB0aGlz
Q29udGFpbmVyID0gY29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICBhdXRvKiBzb3VyY2VD
b250YWluZXIgPSBzb3VyY2VSYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwotICAgIGlm
ICghdGhpc0NvbnRhaW5lciB8fCAhc291cmNlQ29udGFpbmVyIHx8ICZ0aGlzQ29udGFpbmVyLT5k
b2N1bWVudCgpICE9ICZzb3VyY2VDb250YWluZXItPmRvY3VtZW50KCkgfHwgdG9wKCp0aGlzQ29u
dGFpbmVyKSAhPSB0b3AoKnNvdXJjZUNvbnRhaW5lcikpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKLQotICAgIHN3aXRjaCAoaG93KSB7Ci0gICAgY2Fz
ZSBTVEFSVF9UT19TVEFSVDoKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyht
X3N0YXJ0LCBzb3VyY2VSYW5nZS5tX3N0YXJ0KTsKLSAgICBjYXNlIFNUQVJUX1RPX0VORDoKLSAg
ICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2VuZCwgc291cmNlUmFuZ2UubV9z
dGFydCk7Ci0gICAgY2FzZSBFTkRfVE9fRU5EOgotICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS5tX2VuZCk7Ci0gICAgY2FzZSBFTkRfVE9fU1RB
UlQ6Ci0gICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFydCwgc291cmNl
UmFuZ2UubV9lbmQpOwotICAgIH0KIAotICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OworICAgIGF1dG8gc3RhcnRPcmRlcmluZyA9IGRvY3VtZW50T3JkZXIobm9kZVJhbmdlLT5z
dGFydCwgbWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCkpOworICAgIGF1dG8gZW5kT3JkZXJpbmcg
PSBkb2N1bWVudE9yZGVyKG5vZGVSYW5nZS0+ZW5kLCBtYWtlQm91bmRhcnlQb2ludChtX2VuZCkp
OworICAgIGlmIChpc19ndGVxKHN0YXJ0T3JkZXJpbmcpICYmIGlzX2x0ZXEoZW5kT3JkZXJpbmcp
KQorICAgICAgICByZXR1cm4gTk9ERV9JTlNJREU7CisgICAgaWYgKGlzX2x0ZXEoc3RhcnRPcmRl
cmluZykgJiYgaXNfZ3RlcShlbmRPcmRlcmluZykpCisgICAgICAgIHJldHVybiBOT0RFX0JFRk9S
RV9BTkRfQUZURVI7CisgICAgaWYgKGlzX2x0ZXEoc3RhcnRPcmRlcmluZykpCisgICAgICAgIHJl
dHVybiBOT0RFX0JFRk9SRTsKKyAgICBpZiAoaXNfZ3RlcShlbmRPcmRlcmluZykpCisgICAgICAg
IHJldHVybiBOT0RFX0FGVEVSOworICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50
RXJyb3IgfTsKIH0KIAotRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQ
b2ludHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9ydCBob3csIGNvbnN0IFJhbmdlJiBzb3VyY2VS
YW5nZSkgY29uc3QKK0V4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKHVuc2lnbmVkIHNob3J0IGhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlKSBjb25zdAog
eworICAgIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCogdGhpc1BvaW50OworICAgIGNvbnN0IFJh
bmdlQm91bmRhcnlQb2ludCogb3RoZXJQb2ludDsKICAgICBzd2l0Y2ggKGhvdykgewogICAgIGNh
c2UgU1RBUlRfVE9fU1RBUlQ6CisgICAgICAgIHRoaXNQb2ludCA9ICZtX3N0YXJ0OworICAgICAg
ICBvdGhlclBvaW50ID0gJnNvdXJjZVJhbmdlLm1fc3RhcnQ7CisgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgU1RBUlRfVE9fRU5EOgorICAgICAgICB0aGlzUG9pbnQgPSAmbV9lbmQ7CisgICAgICAg
IG90aGVyUG9pbnQgPSAmc291cmNlUmFuZ2UubV9zdGFydDsKKyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBFTkRfVE9fRU5EOgorICAgICAgICB0aGlzUG9pbnQgPSAmbV9lbmQ7CisgICAgICAgIG90
aGVyUG9pbnQgPSAmc291cmNlUmFuZ2UubV9lbmQ7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RU5EX1RPX1NUQVJUOgotICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHN0YXRp
Y19jYXN0PENvbXBhcmVIb3c+KGhvdyksIHNvdXJjZVJhbmdlKTsKKyAgICAgICAgdGhpc1BvaW50
ID0gJm1fc3RhcnQ7CisgICAgICAgIG90aGVyUG9pbnQgPSAmc291cmNlUmFuZ2UubV9lbmQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
b3RTdXBwb3J0ZWRFcnJvciB9OwogICAgIH0KLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3Vw
cG9ydGVkRXJyb3IgfTsKLX0KLQotRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91
bmRhcnlQb2ludHMoTm9kZSogY29udGFpbmVyQSwgdW5zaWduZWQgb2Zmc2V0QSwgTm9kZSogY29u
dGFpbmVyQiwgdW5zaWduZWQgb2Zmc2V0QikKLXsKLSAgICBBU1NFUlQoY29udGFpbmVyQSk7Ci0g
ICAgQVNTRVJUKGNvbnRhaW5lckIpOwotCi0gICAgaWYgKCFjb250YWluZXJBKQorICAgIGF1dG8g
b3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKG1ha2VCb3VuZGFyeVBvaW50KCp0aGlzUG9pbnQpLCBt
YWtlQm91bmRhcnlQb2ludCgqb3RoZXJQb2ludCkpOworICAgIGlmIChpc19sdChvcmRlcmluZykp
CiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIWNvbnRhaW5lckIpCisgICAgaWYgKGlzX2Vx
KG9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGlzX2d0KG9yZGVyaW5nKSkK
ICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAvLyBzZWUgRE9NMiB0cmF2ZXJzYWwgJiByYW5nZSBz
ZWN0aW9uIDIuNQotCi0gICAgLy8gY2FzZSAxOiBib3RoIHBvaW50cyBoYXZlIHRoZSBzYW1lIGNv
bnRhaW5lcgotICAgIGlmIChjb250YWluZXJBID09IGNvbnRhaW5lckIpIHsKLSAgICAgICAgaWYg
KG9mZnNldEEgPT0gb2Zmc2V0QikKLSAgICAgICAgICAgIHJldHVybiAwOyAvLyBBIGlzIGVxdWFs
IHRvIEIKLSAgICAgICAgaWYgKG9mZnNldEEgPCBvZmZzZXRCKQotICAgICAgICAgICAgcmV0dXJu
IC0xOyAvLyBBIGlzIGJlZm9yZSBCCi0gICAgICAgIHJldHVybiAxOyAvLyBBIGlzIGFmdGVyIEIK
LSAgICB9Ci0KLSAgICAvLyBjYXNlIDI6IG5vZGUgQyAoY29udGFpbmVyIEIgb3IgYW4gYW5jZXN0
b3IpIGlzIGEgY2hpbGQgbm9kZSBvZiBBCi0gICAgTm9kZSogYyA9IGNvbnRhaW5lckI7Ci0gICAg
d2hpbGUgKGMgJiYgYy0+cGFyZW50Tm9kZSgpICE9IGNvbnRhaW5lckEpCi0gICAgICAgIGMgPSBj
LT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKGMpIHsKLSAgICAgICAgdW5zaWduZWQgb2Zmc2V0QyA9
IDA7Ci0gICAgICAgIE5vZGUqIG4gPSBjb250YWluZXJBLT5maXJzdENoaWxkKCk7Ci0gICAgICAg
IHdoaWxlIChuICE9IGMgJiYgb2Zmc2V0QyA8IG9mZnNldEEpIHsKLSAgICAgICAgICAgIG9mZnNl
dEMrKzsKLSAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChvZmZzZXRBIDw9IG9mZnNldEMpCi0gICAgICAgICAgICByZXR1cm4gLTE7IC8vIEEg
aXMgYmVmb3JlIEIKLSAgICAgICAgcmV0dXJuIDE7IC8vIEEgaXMgYWZ0ZXIgQgotICAgIH0KLQot
ICAgIC8vIGNhc2UgMzogbm9kZSBDIChjb250YWluZXIgQSBvciBhbiBhbmNlc3RvcikgaXMgYSBj
aGlsZCBub2RlIG9mIEIKLSAgICBjID0gY29udGFpbmVyQTsKLSAgICB3aGlsZSAoYyAmJiBjLT5w
YXJlbnROb2RlKCkgIT0gY29udGFpbmVyQikKLSAgICAgICAgYyA9IGMtPnBhcmVudE5vZGUoKTsK
LSAgICBpZiAoYykgewotICAgICAgICB1bnNpZ25lZCBvZmZzZXRDID0gMDsKLSAgICAgICAgTm9k
ZSogbiA9IGNvbnRhaW5lckItPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgd2hpbGUgKG4gIT0gYyAm
JiBvZmZzZXRDIDwgb2Zmc2V0QikgewotICAgICAgICAgICAgb2Zmc2V0QysrOwotICAgICAgICAg
ICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldEMg
PCBvZmZzZXRCKQotICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBBIGlzIGJlZm9yZSBCCi0gICAg
ICAgIHJldHVybiAxOyAvLyBBIGlzIGFmdGVyIEIKLSAgICB9Ci0KLSAgICAvLyBjYXNlIDQ6IGNv
bnRhaW5lcnMgQSAmIEIgYXJlIHNpYmxpbmdzLCBvciBjaGlsZHJlbiBvZiBzaWJsaW5ncwotICAg
IC8vICMjIyB3ZSBuZWVkIHRvIGRvIGEgdHJhdmVyc2FsIGhlcmUgaW5zdGVhZAotICAgIGF1dG8g
Y29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqY29udGFpbmVyQSwgKmNv
bnRhaW5lckIpOwotICAgIGlmICghY29tbW9uQW5jZXN0b3IpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKLSAgICBOb2RlKiBjaGlsZEEgPSBjb250YWlu
ZXJBOwotICAgIHdoaWxlIChjaGlsZEEgJiYgY2hpbGRBLT5wYXJlbnROb2RlKCkgIT0gY29tbW9u
QW5jZXN0b3IpCi0gICAgICAgIGNoaWxkQSA9IGNoaWxkQS0+cGFyZW50Tm9kZSgpOwotICAgIGlm
ICghY2hpbGRBKQotICAgICAgICBjaGlsZEEgPSBjb21tb25BbmNlc3Rvci5nZXQoKTsKLSAgICBO
b2RlKiBjaGlsZEIgPSBjb250YWluZXJCOwotICAgIHdoaWxlIChjaGlsZEIgJiYgY2hpbGRCLT5w
YXJlbnROb2RlKCkgIT0gY29tbW9uQW5jZXN0b3IpCi0gICAgICAgIGNoaWxkQiA9IGNoaWxkQi0+
cGFyZW50Tm9kZSgpOwotICAgIGlmICghY2hpbGRCKQotICAgICAgICBjaGlsZEIgPSBjb21tb25B
bmNlc3Rvci5nZXQoKTsKLQotICAgIGlmIChjaGlsZEEgPT0gY2hpbGRCKQotICAgICAgICByZXR1
cm4gMDsgLy8gQSBpcyBlcXVhbCB0byBCCi0KLSAgICBOb2RlKiBuID0gY29tbW9uQW5jZXN0b3It
PmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAobikgewotICAgICAgICBpZiAobiA9PSBjaGlsZEEp
Ci0gICAgICAgICAgICByZXR1cm4gLTE7IC8vIEEgaXMgYmVmb3JlIEIKLSAgICAgICAgaWYgKG4g
PT0gY2hpbGRCKQotICAgICAgICAgICAgcmV0dXJuIDE7IC8vIEEgaXMgYWZ0ZXIgQgotICAgICAg
ICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyBTaG91bGQgbmV2ZXIgcmVh
Y2ggdGhpcyBwb2ludC4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoY29u
c3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeUEsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2lu
dCYgYm91bmRhcnlCKQotewotICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMoYm91bmRh
cnlBLmNvbnRhaW5lcigpLCBib3VuZGFyeUEub2Zmc2V0KCksIGJvdW5kYXJ5Qi5jb250YWluZXIo
KSwgYm91bmRhcnlCLm9mZnNldCgpKTsKLX0KLQotYm9vbCBSYW5nZTo6Ym91bmRhcnlQb2ludHNW
YWxpZCgpIGNvbnN0Ci17Ci0gICAgYXV0byByZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMo
bV9zdGFydCwgbV9lbmQpOwotICAgIHJldHVybiAhcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJl
c3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwOworICAgIHJldHVybiBFeGNlcHRpb24geyBX
cm9uZ0RvY3VtZW50RXJyb3IgfTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OmRlbGV0
ZUNvbnRlbnRzKCkKQEAgLTQwOSwyNiArMjQ4LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6
OmRlbGV0ZUNvbnRlbnRzKCkKICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRpb25Pcjxib29s
PiBSYW5nZTo6aW50ZXJzZWN0c05vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3QKK2Jvb2wgUmFuZ2U6
OmludGVyc2VjdHNOb2RlKE5vZGUmIG5vZGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZWZOb2RlLmlz
Q29ubmVjdGVkKCkgfHwgJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvKiBwYXJlbnROb2RlID0gcmVmTm9kZS5w
YXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnROb2RlKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwot
Ci0gICAgLy8gSWYgKHBhcmVudE5vZGUsIG5vZGVJbmRleCkgaXMgYmVmb3JlIGVuZCBhbmQgKHBh
cmVudE5vZGUsIG5vZGVJbmRleCArIDEpIGlzIGFmdGVyIHN0YXJ0LCByZXR1cm4gdHJ1ZS4KLSAg
ICAvLyBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4KLSAgICBhdXRvIGNvbXBhcmVFbmRSZXN1bHQg
PSBjb21wYXJlQm91bmRhcnlQb2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4LCBtX2VuZC5jb250
YWluZXIoKSwgbV9lbmQub2Zmc2V0KCkpOwotICAgIGlmIChjb21wYXJlRW5kUmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gY29tcGFyZUVuZFJlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCk7Ci0gICAgYXV0byBjb21wYXJlU3RhcnRSZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2lu
dHMocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgbV9zdGFydC5jb250YWluZXIoKSwgbV9zdGFy
dC5vZmZzZXQoKSk7Ci0gICAgaWYgKGNvbXBhcmVTdGFydFJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIGNvbXBhcmVTdGFydFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0g
ICAgcmV0dXJuIGNvbXBhcmVFbmRSZXN1bHQucmV0dXJuVmFsdWUoKSA9PSAtMSAmJiBjb21wYXJl
U3RhcnRSZXN1bHQucmV0dXJuVmFsdWUoKSA9PSAxOworICAgIHJldHVybiBpbnRlcnNlY3RzKG1h
a2VTaW1wbGVSYW5nZSgqdGhpcyksIG5vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIE5vZGUqIGhp
Z2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdChOb2RlKiBub2RlLCBOb2RlKiBjb21tb25Sb290
KQpAQCAtNDY0LDMyICsyODYsMTEgQEAgc3RhdGljIGlubGluZSBOb2RlKiBjaGlsZE9mQ29tbW9u
Um9vdEJlZm9yZU9mZnNldChOb2RlKiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnMKICAgICByZXR1
cm4gY29udGFpbmVyOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxlbmd0aE9mQ29udGVu
dHNJbk5vZGUoTm9kZSYgbm9kZSkKLXsKLSAgICAvLyBUaGlzIHN3aXRjaCBzdGF0ZW1lbnQgbXVz
dCBiZSBjb25zaXN0ZW50IHdpdGggdGhhdCBvZiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRzQmV0d2Vl
bk9mZnNldHMuCi0gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKCkpIHsKLSAgICBjYXNlIE5vZGU6
OkRPQ1VNRU5UX1RZUEVfTk9ERToKLSAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgotICAg
ICAgICByZXR1cm4gMDsKLSAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKLSAgICBjYXNlIE5vZGU6
OkNEQVRBX1NFQ1RJT05fTk9ERToKLSAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKLSAgICBj
YXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpLmxlbmd0aCgpOwotICAgIGNhc2UgTm9kZTo6RUxF
TUVOVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKLSAgICBjYXNlIE5vZGU6
OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxDb250YWlu
ZXJOb2RlPihub2RlKS5jb3VudENoaWxkTm9kZXMoKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50Pj4gUmFuZ2U6OnByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlIGFjdGlvbikKIHsK
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQ7CiAgICAgaWYgKGFjdGlvbiA9
PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBDbG9uZSkKLSAgICAgICAgZnJhZ21lbnQgPSBEb2N1bWVu
dEZyYWdtZW50OjpjcmVhdGUob3duZXJEb2N1bWVudCgpKTsKKyAgICAgICAgZnJhZ21lbnQgPSBE
b2N1bWVudEZyYWdtZW50OjpjcmVhdGUobV9vd25lckRvY3VtZW50KTsKIAogICAgIGlmIChjb2xs
YXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwpAQCAtNTA5LDggKzMxMCw4IEBAIEV4
Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6OnByb2Nlc3NDb250ZW50
cyhBY3Rpb25UeXBlIGFjdGlvbikKICAgICBSYW5nZUJvdW5kYXJ5UG9pbnQgb3JpZ2luYWxFbmQo
bV9lbmQpOwogCiAgICAgLy8gd2hhdCBpcyB0aGUgaGlnaGVzdCBub2RlIHRoYXQgcGFydGlhbGx5
IHNlbGVjdHMgdGhlIHN0YXJ0IC8gZW5kIG9mIHRoZSByYW5nZT8KLSAgICBSZWZQdHI8Tm9kZT4g
cGFydGlhbFN0YXJ0ID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21tb25Sb290KG9yaWdpbmFsU3Rh
cnQuY29udGFpbmVyKCksIGNvbW1vblJvb3QuZ2V0KCkpOwotICAgIFJlZlB0cjxOb2RlPiBwYXJ0
aWFsRW5kID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21tb25Sb290KG9yaWdpbmFsRW5kLmNvbnRh
aW5lcigpLCBjb21tb25Sb290LmdldCgpKTsKKyAgICBSZWZQdHI8Tm9kZT4gcGFydGlhbFN0YXJ0
ID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21tb25Sb290KCZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5l
cigpLCBjb21tb25Sb290LmdldCgpKTsKKyAgICBSZWZQdHI8Tm9kZT4gcGFydGlhbEVuZCA9IGhp
Z2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdCgmb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIGNv
bW1vblJvb3QuZ2V0KCkpOwogCiAgICAgLy8gU3RhcnQgYW5kIGVuZCBjb250YWluZXJzIGFyZSBk
aWZmZXJlbnQuCiAgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXMgaGVyZToKQEAg
LTUzMywyOCArMzM0LDI4IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4g
UmFuZ2U6OnByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlIGFjdGlvbikKICAgICAvLyBhZnRlciBh
bnkgRE9NIG11dGF0aW9uIGV2ZW50LCBhdCB2YXJpb3VzIHN0YWdlcyBiZWxvdy4gU2VlIHdlYmtp
dCBidWcgNjAzNTAuCiAKICAgICBSZWZQdHI8Tm9kZT4gbGVmdENvbnRlbnRzOwotICAgIGlmIChv
cmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpICE9IGNvbW1vblJvb3QgJiYgY29tbW9uUm9vdC0+Y29u
dGFpbnMob3JpZ2luYWxTdGFydC5jb250YWluZXIoKSkpIHsKLSAgICAgICAgYXV0byBmaXJzdFJl
c3VsdCA9IHByb2Nlc3NDb250ZW50c0JldHdlZW5PZmZzZXRzKGFjdGlvbiwgbnVsbHB0ciwgb3Jp
Z2luYWxTdGFydC5jb250YWluZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgbGVuZ3RoT2ZD
b250ZW50c0luTm9kZSgqb3JpZ2luYWxTdGFydC5jb250YWluZXIoKSkpOwotICAgICAgICBhdXRv
IHNlY29uZFJlc3VsdCA9IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKGFjdGlvbiwg
b3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgUHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCwgV1RGTW92
ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0KCkpOworICAgIGlmICgmb3JpZ2luYWxTdGFy
dC5jb250YWluZXIoKSAhPSBjb21tb25Sb290ICYmIGNvbW1vblJvb3QtPmNvbnRhaW5zKCZvcmln
aW5hbFN0YXJ0LmNvbnRhaW5lcigpKSkgeworICAgICAgICBhdXRvIGZpcnN0UmVzdWx0ID0gcHJv
Y2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMoYWN0aW9uLCBudWxscHRyLCAmb3JpZ2luYWxTdGFy
dC5jb250YWluZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgb3JpZ2luYWxTdGFydC5jb250
YWluZXIoKS5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8gc2Vjb25kUmVzdWx0ID0gcHJvY2Vzc0Fu
Y2VzdG9yc0FuZFRoZWlyU2libGluZ3MoYWN0aW9uLCAmb3JpZ2luYWxTdGFydC5jb250YWluZXIo
KSwgUHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJv
b3QuZ2V0KCkpOwogICAgICAgICAvLyBGSVhNRTogQSBiaXQgcGVjdWxpYXIgdGhhdCB3ZSBzaWxl
bnRseSBpZ25vcmUgdGhlIGV4Y2VwdGlvbiBoZXJlLCBidXQgd2UgZG8gaGF2ZSBhdCBsZWFzdCBz
b21lIHJlZ3Jlc3Npb24gdGVzdHMgdGhhdCByZWx5IG9uIHRoaXMgYmVoYXZpb3IuCiAgICAgICAg
IGlmICghc2Vjb25kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAgbGVmdENvbnRl
bnRzID0gc2Vjb25kUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgIH0KIAogICAgIFJl
ZlB0cjxOb2RlPiByaWdodENvbnRlbnRzOwotICAgIGlmICgmZW5kQ29udGFpbmVyKCkgIT0gY29t
bW9uUm9vdCAmJiBjb21tb25Sb290LT5jb250YWlucyhvcmlnaW5hbEVuZC5jb250YWluZXIoKSkp
IHsKLSAgICAgICAgYXV0byBmaXJzdFJlc3VsdCA9IHByb2Nlc3NDb250ZW50c0JldHdlZW5PZmZz
ZXRzKGFjdGlvbiwgbnVsbHB0ciwgb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIDAsIG9yaWdpbmFs
RW5kLm9mZnNldCgpKTsKLSAgICAgICAgYXV0byBzZWNvbmRSZXN1bHQgPSBwcm9jZXNzQW5jZXN0
b3JzQW5kVGhlaXJTaWJsaW5ncyhhY3Rpb24sIG9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBQcm9j
ZXNzQ29udGVudHNCYWNrd2FyZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0
KCkpOworICAgIGlmICgmZW5kQ29udGFpbmVyKCkgIT0gY29tbW9uUm9vdCAmJiBjb21tb25Sb290
LT5jb250YWlucygmb3JpZ2luYWxFbmQuY29udGFpbmVyKCkpKSB7CisgICAgICAgIGF1dG8gZmly
c3RSZXN1bHQgPSBwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cyhhY3Rpb24sIG51bGxwdHIs
ICZvcmlnaW5hbEVuZC5jb250YWluZXIoKSwgMCwgb3JpZ2luYWxFbmQub2Zmc2V0KCkpOworICAg
ICAgICBhdXRvIHNlY29uZFJlc3VsdCA9IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdz
KGFjdGlvbiwgJm9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBQcm9jZXNzQ29udGVudHNCYWNrd2Fy
ZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0KCkpOwogICAgICAgICAvLyBG
SVhNRTogQSBiaXQgcGVjdWxpYXIgdGhhdCB3ZSBzaWxlbnRseSBpZ25vcmUgdGhlIGV4Y2VwdGlv
biBoZXJlLCBidXQgd2UgZG8gaGF2ZSBhdCBsZWFzdCBzb21lIHJlZ3Jlc3Npb24gdGVzdHMgdGhh
dCByZWx5IG9uIHRoaXMgYmVoYXZpb3IuCiAgICAgICAgIGlmICghc2Vjb25kUmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKQogICAgICAgICAgICAgcmlnaHRDb250ZW50cyA9IHNlY29uZFJlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKTsKICAgICB9CiAKICAgICAvLyBkZWxldGUgYWxsIGNoaWxkcmVuIG9m
IGNvbW1vblJvb3QgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBjb250YWluZXIKLSAgICBSZWZQ
dHI8Tm9kZT4gcHJvY2Vzc1N0YXJ0ID0gY2hpbGRPZkNvbW1vblJvb3RCZWZvcmVPZmZzZXQob3Jp
Z2luYWxTdGFydC5jb250YWluZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgY29tbW9uUm9v
dC5nZXQoKSk7Ci0gICAgaWYgKHByb2Nlc3NTdGFydCAmJiBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5l
cigpICE9IGNvbW1vblJvb3QpIC8vIHByb2Nlc3NTdGFydCBjb250YWlucyBub2RlcyBiZWZvcmUg
bV9zdGFydC4KKyAgICBSZWZQdHI8Tm9kZT4gcHJvY2Vzc1N0YXJ0ID0gY2hpbGRPZkNvbW1vblJv
b3RCZWZvcmVPZmZzZXQoJm9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCksIG9yaWdpbmFsU3RhcnQu
b2Zmc2V0KCksIGNvbW1vblJvb3QuZ2V0KCkpOworICAgIGlmIChwcm9jZXNzU3RhcnQgJiYgJm9y
aWdpbmFsU3RhcnQuY29udGFpbmVyKCkgIT0gY29tbW9uUm9vdCkgLy8gcHJvY2Vzc1N0YXJ0IGNv
bnRhaW5zIG5vZGVzIGJlZm9yZSBtX3N0YXJ0LgogICAgICAgICBwcm9jZXNzU3RhcnQgPSBwcm9j
ZXNzU3RhcnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgUmVmUHRyPE5vZGU+IHByb2Nlc3NFbmQgPSBj
aGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldChvcmlnaW5hbEVuZC5jb250YWluZXIoKSwgb3Jp
Z2luYWxFbmQub2Zmc2V0KCksIGNvbW1vblJvb3QuZ2V0KCkpOworICAgIFJlZlB0cjxOb2RlPiBw
cm9jZXNzRW5kID0gY2hpbGRPZkNvbW1vblJvb3RCZWZvcmVPZmZzZXQoJm9yaWdpbmFsRW5kLmNv
bnRhaW5lcigpLCBvcmlnaW5hbEVuZC5vZmZzZXQoKSwgY29tbW9uUm9vdC5nZXQoKSk7CiAKICAg
ICAvLyBDb2xsYXBzZSB0aGUgcmFuZ2UsIG1ha2luZyBzdXJlIHRoYXQgdGhlIHJlc3VsdCBpcyBu
b3Qgd2l0aGluIGEgbm9kZSB0aGF0IHdhcyBwYXJ0aWFsbHkgc2VsZWN0ZWQuCiAgICAgaWYgKGFj
dGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBEZWxldGUpIHsKQEAgLTYxOSw3ICs0MjAsNiBA
QCBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmUHRyPE5vZGU+PiBwcm9jZXNzQ29udGVudHNCZXR3ZWVu
T2Zmc2V0cyhSYW5nZTo6QWN0aW9uVHlwZQogCiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdDsKIAot
ICAgIC8vIFRoaXMgc3dpdGNoIHN0YXRlbWVudCBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGF0
IG9mIGxlbmd0aE9mQ29udGVudHNJbk5vZGUuCiAgICAgc3dpdGNoIChjb250YWluZXItPm5vZGVU
eXBlKCkpIHsKICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKICAgICBjYXNlIE5vZGU6OkNEQVRB
X1NFQ1RJT05fTk9ERToKQEAgLTg2OCwzMCArNjY4LDE3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJh
bmdlOjppbnNlcnROb2RlKFJlZjxOb2RlPiYmIG5vZGUpCiAKIFN0cmluZyBSYW5nZTo6dG9TdHJp
bmcoKSBjb25zdAogeworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpOwog
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgIE5vZGUqIHBhc3RMYXN0ID0gcGFzdExh
c3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFz
dExhc3Q7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBhdXRv
IHR5cGUgPSBub2RlLT5ub2RlVHlwZSgpOwotICAgICAgICBpZiAodHlwZSA9PSBOb2RlOjpURVhU
X05PREUgfHwgdHlwZSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0ID0gbm9kZSA9PSAmc3RhcnRDb250YWluZXIoKSA/IG1fc3RhcnQub2Zm
c2V0KCkgOiAwVTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IG5vZGUgPT0gJmVuZENvbnRh
aW5lcigpID8gc3RkOjptYXgoc3RhcnQsIG1fZW5kLm9mZnNldCgpKSA6IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3Vic3Ry
aW5nKGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCpub2RlKS5kYXRhKCksIHN0YXJ0LCBlbmQgLSBz
dGFydCk7CisgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7
CisgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkgeworICAgICAgICAgICAgYXV0byBvZmZzZXRS
YW5nZSA9IGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShyYW5nZSwgbm9kZSk7CisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZFN1YnN0cmluZyhkb3duY2FzdDxUZXh0Pihub2RlKS5kYXRhKCksIG9m
ZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5lbmQgLSBvZmZzZXRSYW5nZS5zdGFydCk7CiAg
ICAgICAgIH0KICAgICB9Ci0KICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1T
dHJpbmcgUmFuZ2U6OnRleHQoKSBjb25zdAotewotICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIGxh
eW91dCwgc2luY2UgcGxhaW5UZXh0IHVzZXMgbGluZSBib3hlcyBpbiB0aGUgcmVuZGVyIHRyZWUu
Ci0gICAgLy8gRklYTUU6IEFzIHdpdGggaW5uZXJUZXh0LCB3ZSdkIGxpa2UgdGhpcyB0byB3b3Jr
IGV2ZW4gaWYgdGhlcmUgYXJlIG5vIHJlbmRlciBvYmplY3RzLgotICAgIHN0YXJ0Q29udGFpbmVy
KCkuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKLQotICAgIHJldHVybiBwbGFpblRleHQobWFr
ZVNpbXBsZVJhbmdlKCp0aGlzKSk7Ci19Ci0KIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9ET00t
UGFyc2luZy8jd2lkbC1SYW5nZS1jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQtRG9jdW1lbnRGcmFn
bWVudC1ET01TdHJpbmctZnJhZ21lbnQKIEV4Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50
Pj4gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCkK
IHsKQEAgLTkwOCwxMiArNjk1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+
PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYKICAgICByZXR1
cm4gV2ViQ29yZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCplbGVtZW50LCBtYXJrdXAsIEFs
bG93U2NyaXB0aW5nQ29udGVudEFuZERvTm90TWFya0FscmVhZHlTdGFydGVkKTsKIH0KIAotdm9p
ZCBSYW5nZTo6ZGV0YWNoKCkKLXsKLSAgICAvLyBUaGlzIGlzIG5vdyBhIG5vLW9wIGFzIHBlciB0
aGUgRE9NIHNwZWNpZmljYXRpb24uCi19Ci0KLUV4Y2VwdGlvbk9yPE5vZGUqPiBSYW5nZTo6Y2hl
Y2tOb2RlV09mZnNldChOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CitFeGNlcHRp
b25PcjxOb2RlKj4gUmFuZ2U6OmNoZWNrTm9kZU9mZnNldFBhaXIoTm9kZSYgbm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0KSBjb25zdAogewogICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgpAQCAtOTQzLDU5ICs3MjUsNTUgQEAg
RXhjZXB0aW9uT3I8Tm9kZSo+IFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUmIG5vZGUsIHVu
c2lnbmVkIG9mZnNldCkgY29uc3QKIAogUmVmPFJhbmdlPiBSYW5nZTo6Y2xvbmVSYW5nZSgpIGNv
bnN0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBjcmVhdGUob3duZXJEb2N1bWVudCgpKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGNyZWF0ZShtX293bmVyRG9jdW1lbnQpOwogICAgIHJlc3VsdC0+c2V0U3Rh
cnQoc3RhcnRDb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSk7CiAgICAgcmVzdWx0LT5zZXRF
bmQoZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlJiByZWZOb2Rl
KQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoTm9kZSYgbm9kZSkKIHsK
LSAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKQorICAgIGF1dG8gcGFyZW50ID0gbm9kZS5w
YXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwotICAgIHJldHVybiBzZXRTdGFydCgqcmVmTm9kZS5w
YXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSk7CisgICAgcmV0dXJu
IHNldFN0YXJ0KCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSk7CiB9CiAKLUV4
Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmRCZWZvcmUoTm9kZSYgcmVmTm9kZSkKK0V4Y2Vw
dGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmRCZWZvcmUoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAo
IXJlZk5vZGUucGFyZW50Tm9kZSgpKQorICAgIGF1dG8gcGFyZW50ID0gbm9kZS5wYXJlbnROb2Rl
KCk7CisgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
Tm9kZVR5cGVFcnJvciB9OwotICAgIHJldHVybiBzZXRFbmQoKnJlZk5vZGUucGFyZW50Tm9kZSgp
LCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSk7CisgICAgcmV0dXJuIHNldEVuZCgqcGFyZW50
LCBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdl
OjpzZXRFbmRBZnRlcihOb2RlJiByZWZOb2RlKQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNl
dEVuZEFmdGVyKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkK
KyAgICBhdXRvIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpOworICAgIGlmICghcGFyZW50KQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKLSAgICBy
ZXR1cm4gc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUlu
ZGV4KCkgKyAxKTsKKyAgICByZXR1cm4gc2V0RW5kKCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJ
bmRleCgpICsgMSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZWxlY3ROb2RlKE5v
ZGUmIHJlZk5vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2VsZWN0Tm9kZShOb2RlJiBu
b2RlKQogewotICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQg
PSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07Ci0KLSAgICBpZiAoJm93bmVyRG9jdW1l
bnQoKSAhPSAmcmVmTm9kZS5kb2N1bWVudCgpKQotICAgICAgICBzZXREb2N1bWVudChyZWZOb2Rl
LmRvY3VtZW50KCkpOwotCi0gICAgdW5zaWduZWQgaW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2Rl
SW5kZXgoKTsKLSAgICBhdXRvIHJlc3VsdCA9IHNldFN0YXJ0KCpyZWZOb2RlLnBhcmVudE5vZGUo
KSwgaW5kZXgpOworICAgIHVuc2lnbmVkIGluZGV4ID0gbm9kZS5jb21wdXRlTm9kZUluZGV4KCk7
CisgICAgYXV0byByZXN1bHQgPSBzZXRTdGFydCgqcGFyZW50LCBpbmRleCk7CiAgICAgaWYgKHJl
c3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCk7Ci0gICAgcmV0dXJuIHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIGluZGV4ICsg
MSk7CisgICAgcmV0dXJuIHNldEVuZCgqcGFyZW50LCBpbmRleCArIDEpOwogfQogCi1FeGNlcHRp
b25Pcjx2b2lkPiBSYW5nZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmIHJlZk5vZGUpCitFeGNl
cHRpb25Pcjx2b2lkPiBSYW5nZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7Ci0g
ICAgaWYgKHJlZk5vZGUuaXNEb2N1bWVudFR5cGVOb2RlKCkpCisgICAgaWYgKG5vZGUuaXNEb2N1
bWVudFR5cGVOb2RlKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5
cGVFcnJvciB9OwogCi0gICAgaWYgKCZvd25lckRvY3VtZW50KCkgIT0gJnJlZk5vZGUuZG9jdW1l
bnQoKSkKLSAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9kZS5kb2N1bWVudCgpKTsKLQotICAgIG1f
c3RhcnQuc2V0VG9TdGFydE9mTm9kZShyZWZOb2RlKTsKLSAgICBtX2VuZC5zZXRUb0VuZE9mTm9k
ZShyZWZOb2RlKTsKLQorICAgIG1fc3RhcnQuc2V0VG9CZWZvcmVDb250ZW50cyhub2RlKTsKKyAg
ICBtX2VuZC5zZXRUb0FmdGVyQ29udGVudHMobm9kZSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApA
QCAtMTA1MiwzMSArODMwLDEyIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzdXJyb3VuZENv
bnRlbnRzKE5vZGUmIG5ld1BhcmVudCkKICAgICByZXR1cm4gc2VsZWN0Tm9kZShuZXdQYXJlbnQp
OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnRCZWZvcmUoTm9kZSYgcmVm
Tm9kZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlJiBub2Rl
KQogewotICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQgPSBu
b2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07Ci0gICAgcmV0dXJuIHNldFN0YXJ0KCpyZWZO
b2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCkpOwotfQotCi1Ob2Rl
KiBSYW5nZTo6Zmlyc3ROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoc3RhcnRDb250YWluZXIoKS5p
c0NoYXJhY3RlckRhdGFOb2RlKCkpCi0gICAgICAgIHJldHVybiAmc3RhcnRDb250YWluZXIoKTsK
LSAgICBpZiAoTm9kZSogY2hpbGQgPSBzdGFydENvbnRhaW5lcigpLnRyYXZlcnNlVG9DaGlsZEF0
KG1fc3RhcnQub2Zmc2V0KCkpKQotICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgaWYgKCFtX3N0
YXJ0Lm9mZnNldCgpKQotICAgICAgICByZXR1cm4gJnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgcmV0
dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHN0YXJ0Q29udGFpbmVyKCkp
OwotfQotCi1Ob2RlKiBSYW5nZTo6cGFzdExhc3ROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoZW5k
Q29udGFpbmVyKCkuaXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gTm9kZVRy
YXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oZW5kQ29udGFpbmVyKCkpOwotICAgIGlmIChO
b2RlKiBjaGlsZCA9IGVuZENvbnRhaW5lcigpLnRyYXZlcnNlVG9DaGlsZEF0KG1fZW5kLm9mZnNl
dCgpKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpu
ZXh0U2tpcHBpbmdDaGlsZHJlbihlbmRDb250YWluZXIoKSk7CisgICAgcmV0dXJuIHNldFN0YXJ0
KCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpKTsKIH0KIAogI2lmIEVOQUJMRShUUkVF
X0RFQlVHR0lORykKQEAgLTExMDEsMTI0ICs4NjAsNDQgQEAgdm9pZCBSYW5nZTo6Zm9ybWF0Rm9y
RGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB9CiAjZW5kaWYK
IAotYm9vbCBSYW5nZTo6Y29udGFpbnMoY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAotewotICAg
IGlmIChjb21tb25BbmNlc3RvckNvbnRhaW5lcigpLT5kb2N1bWVudCgpICE9IG90aGVyLmNvbW1v
bkFuY2VzdG9yQ29udGFpbmVyKCktPmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8gc3RhcnRUb1N0YXJ0ID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpT
VEFSVF9UT19TVEFSVCwgb3RoZXIpOwotICAgIGlmIChzdGFydFRvU3RhcnQuaGFzRXhjZXB0aW9u
KCkgfHwgc3RhcnRUb1N0YXJ0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byBlbmRUb0VuZCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6RU5EX1RPX0VORCwgb3RoZXIpOwotICAgIHJldHVybiAhZW5kVG9FbmQuaGFzRXhjZXB0
aW9uKCkgJiYgZW5kVG9FbmQucmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMDsKLX0KLQotYm9vbCBS
YW5nZTo6Y29udGFpbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKLXsK
LSAgICBhdXRvIHBvc2l0aW9uUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwotICAg
IGlmICghcG9zaXRpb25SYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBj
b250YWlucyhjcmVhdGVMaXZlUmFuZ2UoKnBvc2l0aW9uUmFuZ2UpKTsKLX0KLQotYm9vbCBhcmVS
YW5nZXNFcXVhbChjb25zdCBSYW5nZSogYSwgY29uc3QgUmFuZ2UqIGIpCi17Ci0gICAgaWYgKGEg
PT0gYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFhIHx8ICFiKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICZhLT5zdGFydENvbnRhaW5lcigpID09ICZiLT5zdGFy
dENvbnRhaW5lcigpICYmIGEtPnN0YXJ0T2Zmc2V0KCkgPT0gYi0+c3RhcnRPZmZzZXQoKSAmJiAm
YS0+ZW5kQ29udGFpbmVyKCkgPT0gJmItPmVuZENvbnRhaW5lcigpICYmIGEtPmVuZE9mZnNldCgp
ID09IGItPmVuZE9mZnNldCgpOwotfQotCi1ib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2Uq
IGEsIGNvbnN0IFJhbmdlKiBiKQotewotICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGEgPT0gYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAoIWNvbm5lY3RlZEluU2FtZVRyZWVTY29wZShhLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigp
LCBiLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgc2hvcnQgc3RhcnRUb1N0YXJ0ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpTVEFSVF9UT19TVEFSVCwgKmIpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgIHNob3J0IGVu
ZFRvRW5kID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqYiku
cmVsZWFzZVJldHVyblZhbHVlKCk7Ci0KLSAgICAvLyBGaXJzdCByYW5nZSBjb250YWlucyB0aGUg
c2Vjb25kIHJhbmdlLgotICAgIGlmIChzdGFydFRvU3RhcnQgPD0gMCAmJiBlbmRUb0VuZCA+PSAw
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEVuZCBvZiBmaXJzdCByYW5nZSBpcyBp
bnNpZGUgc2Vjb25kIHJhbmdlLgotICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OlNUQVJUX1RPX0VORCwgKmIpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID49IDAgJiYgZW5kVG9F
bmQgPD0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBTdGFydCBvZiBmaXJzdCBy
YW5nZSBpcyBpbnNpZGUgc2Vjb25kIHJhbmdlLgotICAgIGlmIChzdGFydFRvU3RhcnQgPj0gMCAm
JiBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKmIpLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpIDw9IDApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlOb2RlQ2hpbGRyZW5DaGFu
Z2VkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIENvbnRhaW5lck5vZGUmIGNvbnRhaW5l
cikKIHsKLSAgICBpZiAoIWJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJmNvbnRhaW5lcikKLSAgICAgICAgcmV0
dXJuOwotICAgIGJvdW5kYXJ5LmludmFsaWRhdGVPZmZzZXQoKTsKKyAgICBpZiAoYm91bmRhcnku
Y2hpbGRCZWZvcmUoKSAmJiAmYm91bmRhcnkuY29udGFpbmVyKCkgPT0gJmNvbnRhaW5lcikKKyAg
ICAgICAgYm91bmRhcnkuaW52YWxpZGF0ZU9mZnNldCgpOwogfQogCiB2b2lkIFJhbmdlOjpub2Rl
Q2hpbGRyZW5DaGFuZ2VkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKLSAgICBBU1NFUlQo
JmNvbnRhaW5lci5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgm
Y29udGFpbmVyLmRvY3VtZW50KCkgPT0gbV9vd25lckRvY3VtZW50LnB0cigpKTsKICAgICBib3Vu
ZGFyeU5vZGVDaGlsZHJlbkNoYW5nZWQobV9zdGFydCwgY29udGFpbmVyKTsKICAgICBib3VuZGFy
eU5vZGVDaGlsZHJlbkNoYW5nZWQobV9lbmQsIGNvbnRhaW5lcik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCBib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoUmFuZ2VCb3VuZGFyeVBv
aW50JiBib3VuZGFyeSwgQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQorc3RhdGljIGlubGluZSB2
b2lkIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQm
IGJvdW5kYXJ5LCBDb250YWluZXJOb2RlJiBjb250YWluZXJPZk5vZGVzVG9CZVJlbW92ZWQpCiB7
Ci0gICAgZm9yIChOb2RlKiBub2RlVG9CZVJlbW92ZWQgPSBjb250YWluZXIuZmlyc3RDaGlsZCgp
OyBub2RlVG9CZVJlbW92ZWQ7IG5vZGVUb0JlUmVtb3ZlZCA9IG5vZGVUb0JlUmVtb3ZlZC0+bmV4
dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSBub2Rl
VG9CZVJlbW92ZWQpIHsKLSAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29u
dGFpbmVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAo
Tm9kZSogbiA9IGJvdW5kYXJ5LmNvbnRhaW5lcigpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7
Ci0gICAgICAgICAgICBpZiAobiA9PSBub2RlVG9CZVJlbW92ZWQpIHsKLSAgICAgICAgICAgICAg
ICBib3VuZGFyeS5zZXRUb1N0YXJ0T2ZOb2RlKGNvbnRhaW5lcik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChjb250YWlu
ZXJPZk5vZGVzVG9CZVJlbW92ZWQuY29udGFpbnMoJmJvdW5kYXJ5LmNvbnRhaW5lcigpKSkKKyAg
ICAgICAgYm91bmRhcnkuc2V0VG9CZWZvcmVDb250ZW50cyhjb250YWluZXJPZk5vZGVzVG9CZVJl
bW92ZWQpOwogfQogCiB2b2lkIFJhbmdlOjpub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRh
aW5lck5vZGUmIGNvbnRhaW5lcikKIHsKLSAgICBBU1NFUlQoJmNvbnRhaW5lci5kb2N1bWVudCgp
ID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmY29udGFpbmVyLmRvY3VtZW50KCkg
PT0gbV9vd25lckRvY3VtZW50LnB0cigpKTsKICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxC
ZVJlbW92ZWQobV9zdGFydCwgY29udGFpbmVyKTsKICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbldp
bGxCZVJlbW92ZWQobV9lbmQsIGNvbnRhaW5lcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBi
b3VuZGFyeU5vZGVXaWxsQmVSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5v
ZGUmIG5vZGVUb0JlUmVtb3ZlZCkKIHsKLSAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9
PSAmbm9kZVRvQmVSZW1vdmVkKSB7CisgICAgaWYgKGJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkgPT0g
Jm5vZGVUb0JlUmVtb3ZlZCkKICAgICAgICAgYm91bmRhcnkuY2hpbGRCZWZvcmVXaWxsQmVSZW1v
dmVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKE5vZGUqIG4gPSBib3Vu
ZGFyeS5jb250YWluZXIoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAo
biA9PSAmbm9kZVRvQmVSZW1vdmVkKSB7Ci0gICAgICAgICAgICBib3VuZGFyeS5zZXRUb0JlZm9y
ZUNoaWxkKG5vZGVUb0JlUmVtb3ZlZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9CisgICAgZWxzZSBpZiAobm9kZVRvQmVSZW1vdmVkLmNvbnRhaW5zKCZib3VuZGFyeS5j
b250YWluZXIoKSkpCisgICAgICAgIGJvdW5kYXJ5LnNldFRvQmVmb3JlTm9kZShub2RlVG9CZVJl
bW92ZWQpOwogfQogCiB2b2lkIFJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZChOb2RlJiBub2RlKQog
ewotICAgIEFTU0VSVCgmbm9kZS5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOwotICAg
IEFTU0VSVCgmbm9kZSAhPSAmb3duZXJEb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoJm5vZGUuZG9j
dW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQucHRyKCkpOworICAgIEFTU0VSVCgmbm9kZSAhPSBt
X293bmVyRG9jdW1lbnQucHRyKCkpOwogICAgIEFTU0VSVChub2RlLnBhcmVudE5vZGUoKSk7CiAg
ICAgYm91bmRhcnlOb2RlV2lsbEJlUmVtb3ZlZChtX3N0YXJ0LCBub2RlKTsKICAgICBib3VuZGFy
eU5vZGVXaWxsQmVSZW1vdmVkKG1fZW5kLCBub2RlKTsKQEAgLTEyMjYsNyArOTA1LDcgQEAgdm9p
ZCBSYW5nZTo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSYgbm9kZSkKIAogYm9vbCBSYW5nZTo6cGFy
ZW50bGVzc05vZGVNb3ZlZFRvTmV3RG9jdW1lbnRBZmZlY3RzUmFuZ2UoTm9kZSYgbm9kZSkKIHsK
LSAgICByZXR1cm4gbm9kZS5jb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTShtX3N0YXJ0LmNvbnRh
aW5lcigpKTsKKyAgICByZXR1cm4gbm9kZS5jb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTSgmbV9z
dGFydC5jb250YWluZXIoKSk7CiB9CiAKIHZvaWQgUmFuZ2U6OnVwZGF0ZVJhbmdlRm9yUGFyZW50
bGVzc05vZGVNb3ZlZFRvTmV3RG9jdW1lbnQoTm9kZSYgbm9kZSkKQEAgLTEyMzgsNyArOTE3LDcg
QEAgdm9pZCBSYW5nZTo6dXBkYXRlUmFuZ2VGb3JQYXJlbnRsZXNzTm9kZU1vdmVkVG9OZXdEb2N1
bWVudChOb2RlJiBub2RlKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0SW5zZXJ0
ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9
ICZ0ZXh0KQorICAgIGlmICgmYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJnRleHQpCiAgICAgICAg
IHJldHVybjsKICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgp
OwogICAgIGlmIChvZmZzZXQgPj0gYm91bmRhcnlPZmZzZXQpCkBAIC0xMjQ4LDE0ICs5MjcsMTQg
QEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dEluc2VydGVkKFJhbmdlQm91bmRhcnlQ
b2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQKIAogdm9pZCBSYW5nZTo6dGV4dEluc2VydGVkKE5v
ZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEFTU0VS
VCgmdGV4dC5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmdGV4
dC5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1bWVudC5wdHIoKSk7CiAgICAgYm91bmRhcnlUZXh0
SW5zZXJ0ZWQobV9zdGFydCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIGJvdW5kYXJ5VGV4
dEluc2VydGVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgdm9pZCBib3VuZGFyeVRleHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnks
IE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlm
IChib3VuZGFyeS5jb250YWluZXIoKSAhPSAmdGV4dCkKKyAgICBpZiAoJmJvdW5kYXJ5LmNvbnRh
aW5lcigpICE9ICZ0ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYm91bmRhcnlP
ZmZzZXQgPSBib3VuZGFyeS5vZmZzZXQoKTsKICAgICBpZiAob2Zmc2V0ID49IGJvdW5kYXJ5T2Zm
c2V0KQpAQCAtMTI2OCwyMyArOTQ3LDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRl
eHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQsCiAKIHZv
aWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogewotICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09ICZvd25lckRvY3Vt
ZW50KCkpOworICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1bWVudC5w
dHIoKSk7CiAgICAgYm91bmRhcnlUZXh0UmVtb3ZlZChtX3N0YXJ0LCB0ZXh0LCBvZmZzZXQsIGxl
bmd0aCk7CiAgICAgYm91bmRhcnlUZXh0UmVtb3ZlZChtX2VuZCwgdGV4dCwgb2Zmc2V0LCBsZW5n
dGgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNNZXJnZWQoUmFu
Z2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0KQogewotICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSBvbGROb2RlLm5v
ZGUoKSkKKyAgICBpZiAoJmJvdW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUubm9kZSgpKQog
ICAgICAgICBib3VuZGFyeS5zZXQoKm9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSwg
Ym91bmRhcnkub2Zmc2V0KCkgKyBvZmZzZXQsIDApOwotICAgIGVsc2UgaWYgKGJvdW5kYXJ5LmNv
bnRhaW5lcigpID09IG9sZE5vZGUubm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8
aW50Pihib3VuZGFyeS5vZmZzZXQoKSkgPT0gb2xkTm9kZS5pbmRleCgpKQorICAgIGVsc2UgaWYg
KCZib3VuZGFyeS5jb250YWluZXIoKSA9PSBvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpICYm
IGJvdW5kYXJ5Lm9mZnNldCgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvbGROb2RlLmluZGV4
KCkpKQogICAgICAgICBib3VuZGFyeS5zZXQoKm9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxp
bmcoKSwgb2Zmc2V0LCAwKTsKIH0KIAogdm9pZCBSYW5nZTo6dGV4dE5vZGVzTWVyZ2VkKE5vZGVX
aXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBBU1NFUlQob2xkTm9k
ZS5ub2RlKCkpOwotICAgIEFTU0VSVCgmb2xkTm9kZS5ub2RlKCktPmRvY3VtZW50KCkgPT0gJm93
bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZvbGROb2RlLm5vZGUoKS0+ZG9jdW1lbnQoKSA9
PSBtX293bmVyRG9jdW1lbnQucHRyKCkpOwogICAgIEFTU0VSVChvbGROb2RlLm5vZGUoKS0+cGFy
ZW50Tm9kZSgpKTsKICAgICBBU1NFUlQob2xkTm9kZS5ub2RlKCktPmlzVGV4dE5vZGUoKSk7CiAg
ICAgQVNTRVJUKG9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CkBAIC0xMjk2LDcg
Kzk3NSw3IEBAIHZvaWQgUmFuZ2U6OnRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGRO
b2RlLCB1bnNpZ25lZCBvZmZzZXQpCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9k
ZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBUZXh0JiBvbGROb2RlKQogewog
ICAgIGF1dG8qIHBhcmVudCA9IG9sZE5vZGUucGFyZW50Tm9kZSgpOwotICAgIGlmIChib3VuZGFy
eS5jb250YWluZXIoKSA9PSAmb2xkTm9kZSkgeworICAgIGlmICgmYm91bmRhcnkuY29udGFpbmVy
KCkgPT0gJm9sZE5vZGUpIHsKICAgICAgICAgdW5zaWduZWQgc3BsaXRPZmZzZXQgPSBvbGROb2Rl
Lmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9m
ZnNldCgpOwogICAgICAgICBpZiAoYm91bmRhcnlPZmZzZXQgPiBzcGxpdE9mZnNldCkgewpAQCAt
MTMwOSwxNiArOTg4LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1Nw
bGl0KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIFRleHQmIG9sCiAgICAgfQogICAgIGlm
ICghcGFyZW50KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigp
ID09IHBhcmVudCAmJiBib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09ICZvbGROb2RlKSB7CisgICAg
aWYgKCZib3VuZGFyeS5jb250YWluZXIoKSA9PSBwYXJlbnQgJiYgYm91bmRhcnkuY2hpbGRCZWZv
cmUoKSA9PSAmb2xkTm9kZSkgewogICAgICAgICBhdXRvKiBuZXdDaGlsZCA9IG9sZE5vZGUubmV4
dFNpYmxpbmcoKTsKICAgICAgICAgQVNTRVJUKG5ld0NoaWxkKTsKLSAgICAgICAgYm91bmRhcnku
c2V0VG9BZnRlckNoaWxkKCpuZXdDaGlsZCk7CisgICAgICAgIGJvdW5kYXJ5LnNldFRvQWZ0ZXJO
b2RlKCpuZXdDaGlsZCk7CiAgICAgfQogfQogCiB2b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRl
eHQmIG9sZE5vZGUpCiB7Ci0gICAgQVNTRVJUKCZvbGROb2RlLmRvY3VtZW50KCkgPT0gJm93bmVy
RG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZvbGROb2RlLmRvY3VtZW50KCkgPT0gbV9vd25lckRv
Y3VtZW50LnB0cigpKTsKICAgICBBU1NFUlQoIW9sZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5v
ZGUubmV4dFNpYmxpbmcoKSk7CiAgICAgQVNTRVJUKCFvbGROb2RlLnBhcmVudE5vZGUoKSB8fCBv
bGROb2RlLm5leHRTaWJsaW5nKCktPmlzVGV4dE5vZGUoKSk7CiAgICAgYm91bmRhcnlUZXh0Tm9k
ZXNTcGxpdChtX3N0YXJ0LCBvbGROb2RlKTsKQEAgLTE0MTMsNyArMTA5Miw3IEBAIFJlZlB0cjxS
YW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2Up
CiAKIHZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQogewotICAgIGlm
IChyYW5nZSAmJiByYW5nZS0+Ym91bmRhcnlQb2ludHNWYWxpZCgpKSB7CisgICAgaWYgKHJhbmdl
KSB7CiAgICAgICAgIHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnNob3dUcmVlQW5kTWFyaygmcmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCksICJTIiwgJnJhbmdlLT5lbmRDb250YWluZXIoKSwgIkUiKTsK
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzdGFydCBvZmZzZXQ6ICVkLCBlbmQgb2Zmc2V0OiAl
ZFxuIiwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuaAppbmRleCA0ZDFjZDRmMTM2NzQ2Y2JmNDQyZmQ2ODlkNjkxOGMzYzVmZDhlOTA0
Li4xZWM1YWVkNGM1MDAwZjdmNWM5MzQxNzViN2U5MjNjY2JiMDg0NGRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
aApAQCAtMzMsNjEgKzMzLDYwIEBAIGNsYXNzIERPTVJlY3RMaXN0OwogY2xhc3MgRG9jdW1lbnRG
cmFnbWVudDsKIGNsYXNzIE5vZGVXaXRoSW5kZXg7CiBjbGFzcyBUZXh0OwotY2xhc3MgVmlzaWJs
ZVBvc2l0aW9uOwogCiBzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiAKLS8vIEZJWE1FOiBSZW5hbWUgdG8g
TGl2ZVJhbmdlLCB3aGlsZSBsZWF2aW5nIHRoZSBET00tZXhwb3NlZCBuYW1lIGFzIFJhbmdlLgog
Y2xhc3MgUmFuZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxSYW5nZT4gewogcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8UmFuZ2U+IGNyZWF0ZShEb2N1bWVudCYpOwogICAgIFdF
QkNPUkVfRVhQT1JUIH5SYW5nZSgpOwogCi0gICAgRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX293bmVyRG9jdW1lbnQ7IH0KLQotICAgIE5vZGUmIHN0YXJ0Q29udGFp
bmVyKCkgY29uc3QgeyBBU1NFUlQobV9zdGFydC5jb250YWluZXIoKSk7IHJldHVybiAqbV9zdGFy
dC5jb250YWluZXIoKTsgfQorICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydC5jb250YWluZXIoKTsgfQogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydC5vZmZzZXQoKTsgfQotICAgIE5vZGUmIGVuZENvbnRhaW5lcigp
IGNvbnN0IHsgQVNTRVJUKG1fZW5kLmNvbnRhaW5lcigpKTsgcmV0dXJuICptX2VuZC5jb250YWlu
ZXIoKTsgfQorICAgIE5vZGUmIGVuZENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLmNv
bnRhaW5lcigpOyB9CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9l
bmQub2Zmc2V0KCk7IH0KICAgICBib29sIGNvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnQgPT0gbV9lbmQ7IH0KLQogICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29u
c3QgeyByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Ioc3RhcnRDb250YWluZXIoKSwgZW5k
Q29udGFpbmVyKCkpLmdldCgpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0U3RhcnQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpOwotICAg
IFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZChSZWY8Tm9kZT4mJiBjb250
YWluZXIsIHVuc2lnbmVkIG9mZnNldCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25P
cjx2b2lkPiBzZXRTdGFydChSZWY8Tm9kZT4mJiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRFbmQoUmVmPE5vZGU+JiYsIHVuc2lnbmVk
IG9mZnNldCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnRC
ZWZvcmUoTm9kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0
YXJ0QWZ0ZXIoTm9kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNl
dEVuZEJlZm9yZShOb2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4g
c2V0RW5kQWZ0ZXIoTm9kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29sbGFwc2UoYm9v
bCB0b1N0YXJ0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjxib29sPiBpc1BvaW50
SW5SYW5nZShOb2RlJiByZWZOb2RlLCB1bnNpZ25lZCBvZmZzZXQpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIEV4Y2VwdGlvbk9yPHNob3J0PiBjb21wYXJlUG9pbnQoTm9kZSYgcmVmTm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0KSBjb25zdDsKLSAgICBlbnVtIENvbXBhcmVSZXN1bHRzIHsgTk9ERV9CRUZPUkUs
IE5PREVfQUZURVIsIE5PREVfQkVGT1JFX0FORF9BRlRFUiwgTk9ERV9JTlNJREUgfTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxDb21wYXJlUmVzdWx0cz4gY29tcGFyZU5vZGUoTm9k
ZSYgcmVmTm9kZSkgY29uc3Q7Ci0gICAgZW51bSBDb21wYXJlSG93IHsgU1RBUlRfVE9fU1RBUlQs
IFNUQVJUX1RPX0VORCwgRU5EX1RPX0VORCwgRU5EX1RPX1NUQVJUIH07Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRXhjZXB0aW9uT3I8c2hvcnQ+IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93
LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHNob3J0PiBjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNpZ25l
ZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0OwotICAg
IHN0YXRpYyBFeGNlcHRpb25PcjxzaG9ydD4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNv
bnRhaW5lckEsIHVuc2lnbmVkIG9mZnNldEEsIE5vZGUqIGNvbnRhaW5lckIsIHVuc2lnbmVkIG9m
ZnNldEIpOwotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxzaG9ydD4gY29tcGFyZUJvdW5kYXJ5UG9p
bnRzKGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlBLCBjb25zdCBSYW5nZUJvdW5k
YXJ5UG9pbnQmIGJvdW5kYXJ5Qik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBib3VuZGFyeVBv
aW50c1ZhbGlkKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4g
aW50ZXJzZWN0c05vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8dm9pZD4gc2VsZWN0Tm9kZShOb2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8dm9pZD4gc2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmKTsKKworICAgIGVudW0g
Q29tcGFyZUhvdyA6IHVuc2lnbmVkIHNob3J0IHsgU1RBUlRfVE9fU1RBUlQsIFNUQVJUX1RPX0VO
RCwgRU5EX1RPX0VORCwgRU5EX1RPX1NUQVJUIH07CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8c2hvcnQ+IGNvbXBhcmVCb3VuZGFyeVBvaW50cyh1bnNpZ25lZCBzaG9ydCBjb21wYXJl
SG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0OworCiAgICAgV0VCQ09SRV9FWFBP
UlQgRXhjZXB0aW9uT3I8dm9pZD4gZGVsZXRlQ29udGVudHMoKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVudD4+IGV4dHJhY3RDb250ZW50cygpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gY2xv
bmVDb250ZW50cygpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IGluc2Vy
dE5vZGUoUmVmPE5vZGU+JiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0b1N0cmluZygp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHN1cnJvdW5kQ29u
dGVudHMoTm9kZSYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRleHQoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IGNsb25lUmFuZ2UoKSBjb25zdDsKKyAgICBz
dGF0aWMgdm9pZCBkZXRhY2goKSB7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9y
PFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0
cmluZyYgaHRtbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4gaXNQb2lu
dEluUmFuZ2UoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhj
ZXB0aW9uT3I8c2hvcnQ+IGNvbXBhcmVQb2ludChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0KSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGludGVyc2VjdHNOb2RlKE5vZGUmKSBjb25zdDsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGV0YWNoKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
UmVmPFJhbmdlPiBjbG9uZVJhbmdlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lk
PiBzZXRTdGFydEFmdGVyKE5vZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2
b2lkPiBzZXRFbmRCZWZvcmUoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9y
PHZvaWQ+IHNldEVuZEFmdGVyKE5vZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25P
cjx2b2lkPiBzZWxlY3ROb2RlKE5vZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25P
cjx2b2lkPiBzZWxlY3ROb2RlQ29udGVudHMoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHZvaWQ+IHN1cnJvdW5kQ29udGVudHMoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0QmVmb3JlKE5vZGUmKTsKKyAgICBSZWY8RE9N
UmVjdExpc3Q+IGdldENsaWVudFJlY3RzKCkgY29uc3Q7CisgICAgUmVmPERPTVJlY3Q+IGdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9u
T3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3Qg
U3RyaW5nJiBmcmFnbWVudCk7CisKKyAgICAvLyBFeHBhbmQgcmFuZ2UgdG8gYSB1bml0ICh3b3Jk
IG9yIHNlbnRlbmNlIG9yIGJsb2NrIG9yIGRvY3VtZW50KSBib3VuZGFyeS4KKyAgICAvLyBQbGVh
c2UgcmVmZXIgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NjMy
IGNvbW1lbnQgIzUgZm9yIGRldGFpbHMuCisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8
dm9pZD4gZXhwYW5kKGNvbnN0IFN0cmluZyYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgTm9kZSog
Zmlyc3ROb2RlKCkgY29uc3Q7CisgICAgZW51bSBDb21wYXJlUmVzdWx0cyA6IHVpbnQ4X3QgeyBO
T0RFX0JFRk9SRSwgTk9ERV9BRlRFUiwgTk9ERV9CRUZPUkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lE
RSB9OworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPENvbXBhcmVSZXN1bHRzPiBjb21w
YXJlTm9kZShOb2RlJikgY29uc3Q7CiAKICAgICB2b2lkIG5vZGVDaGlsZHJlbkNoYW5nZWQoQ29u
dGFpbmVyTm9kZSYpOwogICAgIHZvaWQgbm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWlu
ZXJOb2RlJik7CkBAIC0xMDAsNDAgKzk5LDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIHRleHROb2Rl
c01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpOwogICAgIHZv
aWQgdGV4dE5vZGVTcGxpdChUZXh0JiBvbGROb2RlKTsKIAotICAgIC8vIEV4cGFuZCByYW5nZSB0
byBhIHVuaXQgKHdvcmQgb3Igc2VudGVuY2Ugb3IgYmxvY2sgb3IgZG9jdW1lbnQpIGJvdW5kYXJ5
LgotICAgIC8vIFBsZWFzZSByZWZlciB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mjc2MzIgY29tbWVudCAjNSAKLSAgICAvLyBmb3IgZGV0YWlscy4KLSAgICBXRUJD
T1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBleHBhbmQoY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICBSZWY8RE9NUmVjdExpc3Q+IGdldENsaWVudFJlY3RzKCkgY29uc3Q7Ci0gICAgUmVmPERPTVJl
Y3Q+IGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0OwotCiAjaWYgRU5BQkxFKFRSRUVfREVC
VUdHSU5HKQogICAgIHZvaWQgZm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBsZW5ndGgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRh
aW5zKGNvbnN0IFJhbmdlJikgY29uc3Q7Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBWaXNpYmxl
UG9zaXRpb24mKSBjb25zdDsKLQotICAgIGVudW0gQWN0aW9uVHlwZSB7IERlbGV0ZSwgRXh0cmFj
dCwgQ2xvbmUgfTsKKyAgICBlbnVtIEFjdGlvblR5cGUgOiB1aW50OF90IHsgRGVsZXRlLCBFeHRy
YWN0LCBDbG9uZSB9OwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFJhbmdlKERvY3VtZW50Jik7
CiAKLSAgICB2b2lkIHNldERvY3VtZW50KERvY3VtZW50Jik7Ci0gICAgRXhjZXB0aW9uT3I8Tm9k
ZSo+IGNoZWNrTm9kZVdPZmZzZXQoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CisgICAg
dm9pZCB1cGRhdGVEb2N1bWVudCgpOworICAgIEV4Y2VwdGlvbk9yPE5vZGUqPiBjaGVja05vZGVP
ZmZzZXRQYWlyKE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9y
PFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gcHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUpOwog
Ci0gICAgTm9kZSogcGFzdExhc3ROb2RlKCkgY29uc3Q7Ci0KICAgICBSZWY8RG9jdW1lbnQ+IG1f
b3duZXJEb2N1bWVudDsKICAgICBSYW5nZUJvdW5kYXJ5UG9pbnQgbV9zdGFydDsKICAgICBSYW5n
ZUJvdW5kYXJ5UG9pbnQgbV9lbmQ7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdl
c0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wg
cmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7Ci0KIFdFQkNPUkVfRVhQ
T1JUIFNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOwogV0VCQ09SRV9F
WFBPUlQgU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKIFdF
QkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3Qg
UmFuZ2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCmluZGV4IDE1NGU4OWM2NmU1N2EyZWJhODM0MDY2NjFi
NmE1M2MzM2EyNDkwYmEuLmEwNWMxNDM2YzU4YjgzMDIwZTI2MDk5OTdiMzY2YTYxNGY4MDY3Yjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmlkbApAQCAtMjUsOSArMjUsOSBAQAogICAgIFtDYWxsV2l0aD1Eb2N1
bWVudF0gY29uc3RydWN0b3IoKTsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlIHN0YXJ0
Q29udGFpbmVyOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHN0YXJ0T2Zmc2V0OyAvLyBG
SVhNRTogU2hvdWxkIGJlIHVuc2lnbmVkIGxvbmcuCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIGxvbmcgc3RhcnRPZmZzZXQ7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgZW5k
Q29udGFpbmVyOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGVuZE9mZnNldDsgLy8gRklY
TUU6IFNob3VsZCBiZSB1bnNpZ25lZCBsb25nLgorICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNp
Z25lZCBsb25nIGVuZE9mZnNldDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjb2xs
YXBzZWQ7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgY29tbW9uQW5jZXN0b3JDb250YWlu
ZXI7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVEFSVF9U
T19FTkQgPSAxOwogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEVORF9UT19FTkQgPSAyOwogICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IEVORF9UT19TVEFSVCA9IDM7Ci0gICAgW01heVRocm93RXhj
ZXB0aW9uLCBJbXBsZW1lbnRlZEFzPWNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzXSBz
aG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHModW5zaWduZWQgc2hvcnQgaG93LCBSYW5nZSBzb3Vy
Y2VSYW5nZSk7CisgICAgW01heVRocm93RXhjZXB0aW9uXSBzaG9ydCBjb21wYXJlQm91bmRhcnlQ
b2ludHModW5zaWduZWQgc2hvcnQgaG93LCBSYW5nZSBzb3VyY2VSYW5nZSk7CiAKICAgICBbQ0VS
ZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIGRlbGV0ZUNvbnRlbnRzKCk7CiAgICAg
W0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBEb2N1bWVudEZyYWdt
ZW50IGV4dHJhY3RDb250ZW50cygpOwpAQCAtNTksNyArNTksNyBAQAogICAgIFtNYXlUaHJvd0V4
Y2VwdGlvbl0gYm9vbGVhbiBpc1BvaW50SW5SYW5nZShOb2RlIG5vZGUsIHVuc2lnbmVkIGxvbmcg
b2Zmc2V0KTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHNob3J0IGNvbXBhcmVQb2ludChOb2Rl
IG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKIAotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0g
Ym9vbGVhbiBpbnRlcnNlY3RzTm9kZShOb2RlIG5vZGUpOworICAgIGJvb2xlYW4gaW50ZXJzZWN0
c05vZGUoTm9kZSBub2RlKTsKIAogICAgIHN0cmluZ2lmaWVyOwogCkBAIC03MCwxMCArNzAsMTEg
QEAKICAgICAvLyBFeHRlbnNpb25zIGZyb20gRE9NUGFyc2luZyBhbmQgU2VyaWFsaXphdGlvbiBz
cGVjaWZpY2F0aW9uIChodHRwczovL3czYy5naXRodWIuaW8vRE9NLVBhcnNpbmcvI2V4dGVuc2lv
bnMtdG8tdGhlLXJhbmdlLWludGVyZmFjZSkuCiAgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4
Y2VwdGlvbiwgTmV3T2JqZWN0XSBEb2N1bWVudEZyYWdtZW50IGNyZWF0ZUNvbnRleHR1YWxGcmFn
bWVudChET01TdHJpbmcgZnJhZ21lbnQpOwogCi0gICAgLy8gTm9uIHN0YW5kYXJkLgotICAgIFtN
YXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBleHBhbmQob3B0aW9uYWwgRE9NU3RyaW5nIHVuaXQgPSAi
Iik7CisgICAgLy8gTm9uLXN0YW5kYXJkIGV4dGVuc2lvbi4KKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGV2ZW50dWFsbHkgZHJvcCB0aGlzIHNpbmNlIG5vIG90aGVyIGJyb3dzZXIgc3VwcG9ydHMg
aXQuCisgICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIGV4cGFuZChvcHRpb25hbCBET01TdHJp
bmcgdW5pdCk7CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGxpa2VseSBkcm9wIHRoaXMgc2lu
Y2Ugbm8gb3RoZXIgYnJvd3NlciBzdXBwb3J0cyBpdC4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGxpa2VseSBkcm9wIHRoaXMgc2luY2Ugd2UgYWRkZWQgaXQgZm9yIEZpcmVmb3ggaW50ZXJvcGVy
YWJpbGl0eSwgYnV0IG5vdyBubyBvdGhlciBicm93c2VyIHN1cHBvcnRzIGl0LgogICAgIFtNYXlU
aHJvd0V4Y2VwdGlvbl0gc2hvcnQgY29tcGFyZU5vZGUoTm9kZSBub2RlKTsKICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBOT0RFX0JFRk9SRSA9IDA7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
Tk9ERV9BRlRFUiA9IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3Vu
ZGFyeVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5k
ZXggYjI0NDA5ODQ3OGI3Nzc3ZjA0Y2RmNjhkNjE5MjliZGM4ODQ1NTE0Zi4uZDAwMzQ0ZDlmNjYw
NGI5Y2VkMGFlZmViOWU3ZThkM2Q3OTg0M2FiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJv
dW5kYXJ5UG9pbnQuaApAQCAtMzIsNDMgKzMyLDM5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgUmFuZ2VCb3VuZGFyeVBvaW50IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBSYW5nZUJv
dW5kYXJ5UG9pbnQoTm9kZSogY29udGFpbmVyKTsKKyAgICBleHBsaWNpdCBSYW5nZUJvdW5kYXJ5
UG9pbnQoTm9kZSYgY29udGFpbmVyKTsKIAotICAgIE5vZGUqIGNvbnRhaW5lcigpIGNvbnN0Owor
ICAgIE5vZGUmIGNvbnRhaW5lcigpIGNvbnN0OwogICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0
OwogICAgIE5vZGUqIGNoaWxkQmVmb3JlKCkgY29uc3Q7CiAKLSAgICB2b2lkIGNsZWFyKCk7Ci0K
ICAgICB2b2lkIHNldChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCwgTm9k
ZSogY2hpbGRCZWZvcmUpOwogICAgIHZvaWQgc2V0T2Zmc2V0KHVuc2lnbmVkKTsKIAotICAgIHZv
aWQgc2V0VG9CZWZvcmVDaGlsZChOb2RlJik7Ci0gICAgdm9pZCBzZXRUb0FmdGVyQ2hpbGQoTm9k
ZSYpOwotICAgIHZvaWQgc2V0VG9TdGFydE9mTm9kZShSZWY8Tm9kZT4mJik7Ci0gICAgdm9pZCBz
ZXRUb0VuZE9mTm9kZShSZWY8Tm9kZT4mJik7CisgICAgdm9pZCBzZXRUb0JlZm9yZU5vZGUoTm9k
ZSYpOworICAgIHZvaWQgc2V0VG9BZnRlck5vZGUoTm9kZSYpOworICAgIHZvaWQgc2V0VG9CZWZv
cmVDb250ZW50cyhSZWY8Tm9kZT4mJik7CisgICAgdm9pZCBzZXRUb0FmdGVyQ29udGVudHMoUmVm
PE5vZGU+JiYpOwogCiAgICAgdm9pZCBjaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQoKTsKICAgICB2
b2lkIGludmFsaWRhdGVPZmZzZXQoKSBjb25zdDsKLSAgICB2b2lkIGVuc3VyZU9mZnNldElzVmFs
aWQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV9jb250YWluZXJOb2Rl
OworICAgIFJlZjxOb2RlPiBtX2NvbnRhaW5lcjsKICAgICBtdXRhYmxlIE9wdGlvbmFsPHVuc2ln
bmVkPiBtX29mZnNldEluQ29udGFpbmVyIHsgMCB9OwogICAgIFJlZlB0cjxOb2RlPiBtX2NoaWxk
QmVmb3JlQm91bmRhcnk7CiB9OwogCiBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50KGNv
bnN0IFJhbmdlQm91bmRhcnlQb2ludCYpOwogCi1pbmxpbmUgUmFuZ2VCb3VuZGFyeVBvaW50OjpS
YW5nZUJvdW5kYXJ5UG9pbnQoTm9kZSogY29udGFpbmVyKQotICAgIDogbV9jb250YWluZXJOb2Rl
KGNvbnRhaW5lcikKK2lubGluZSBSYW5nZUJvdW5kYXJ5UG9pbnQ6OlJhbmdlQm91bmRhcnlQb2lu
dChOb2RlJiBjb250YWluZXIpCisgICAgOiBtX2NvbnRhaW5lcihjb250YWluZXIpCiB7Ci0gICAg
QVNTRVJUKG1fY29udGFpbmVyTm9kZSk7CiB9CiAKLWlubGluZSBOb2RlKiBSYW5nZUJvdW5kYXJ5
UG9pbnQ6OmNvbnRhaW5lcigpIGNvbnN0CitpbmxpbmUgTm9kZSYgUmFuZ2VCb3VuZGFyeVBvaW50
Ojpjb250YWluZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbnRhaW5lck5vZGUuZ2V0KCk7
CisgICAgcmV0dXJuIG1fY29udGFpbmVyOwogfQogCiBpbmxpbmUgTm9kZSogUmFuZ2VCb3VuZGFy
eVBvaW50OjpjaGlsZEJlZm9yZSgpIGNvbnN0CkBAIC03Niw3NyArNzIsNjMgQEAgaW5saW5lIE5v
ZGUqIFJhbmdlQm91bmRhcnlQb2ludDo6Y2hpbGRCZWZvcmUoKSBjb25zdAogICAgIHJldHVybiBt
X2NoaWxkQmVmb3JlQm91bmRhcnkuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRh
cnlQb2ludDo6ZW5zdXJlT2Zmc2V0SXNWYWxpZCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb2Zmc2V0
SW5Db250YWluZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2NoaWxkQmVmb3Jl
Qm91bmRhcnkpOwotICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRh
cnktPmNvbXB1dGVOb2RlSW5kZXgoKSArIDE7Ci19Ci0KIGlubGluZSB1bnNpZ25lZCBSYW5nZUJv
dW5kYXJ5UG9pbnQ6Om9mZnNldCgpIGNvbnN0CiB7Ci0gICAgZW5zdXJlT2Zmc2V0SXNWYWxpZCgp
OwotICAgIHJldHVybiBtX29mZnNldEluQ29udGFpbmVyLnZhbHVlKCk7Ci19Ci0KLWlubGluZSB2
b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6Y2xlYXIoKQotewotICAgIG1fY29udGFpbmVyTm9kZSA9
IG51bGxwdHI7Ci0gICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IDA7Ci0gICAgbV9jaGlsZEJlZm9y
ZUJvdW5kYXJ5ID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fb2Zmc2V0SW5Db250YWluZXIpIHsKKyAg
ICAgICAgQVNTRVJUKG1fY2hpbGRCZWZvcmVCb3VuZGFyeSk7CisgICAgICAgIG1fb2Zmc2V0SW5D
b250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnktPmNvbXB1dGVOb2RlSW5kZXgoKSArIDE7
CisgICAgfQorICAgIHJldHVybiAqbV9vZmZzZXRJbkNvbnRhaW5lcjsKIH0KIAogaW5saW5lIHZv
aWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25l
ZCBvZmZzZXQsIE5vZGUqIGNoaWxkQmVmb3JlKQogewogICAgIEFTU0VSVChjaGlsZEJlZm9yZSA9
PSAob2Zmc2V0ID8gY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKSA6IDAp
KTsKLSAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CisgICAgbV9jb250
YWluZXIgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG9m
ZnNldDsKICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBjaGlsZEJlZm9yZTsKIH0KIAogaW5s
aW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQog
ewotICAgIEFTU0VSVChtX2NvbnRhaW5lck5vZGUpOwotICAgIEFTU0VSVChtX2NvbnRhaW5lck5v
ZGUtPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSk7CisgICAgQVNTRVJUKG1fY29udGFpbmVyLT5pc0No
YXJhY3RlckRhdGFOb2RlKCkpOwogICAgIEFTU0VSVChtX29mZnNldEluQ29udGFpbmVyKTsKICAg
ICBBU1NFUlQoIW1fY2hpbGRCZWZvcmVCb3VuZGFyeSk7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5l
ciA9IG9mZnNldDsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0Jl
Zm9yZUNoaWxkKE5vZGUmIGNoaWxkKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50Ojpz
ZXRUb0JlZm9yZU5vZGUoTm9kZSYgY2hpbGQpCiB7CiAgICAgQVNTRVJUKGNoaWxkLnBhcmVudE5v
ZGUoKSk7CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gY2hpbGQucHJldmlvdXNTaWJsaW5n
KCk7Ci0gICAgbV9jb250YWluZXJOb2RlID0gY2hpbGQucGFyZW50Tm9kZSgpOwotICAgIG1fb2Zm
c2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBP
cHRpb25hbDx1bnNpZ25lZD4oMCk7CisgICAgbV9jb250YWluZXIgPSAqY2hpbGQucGFyZW50Tm9k
ZSgpOworICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBX
VEY6Om51bGxvcHQgOiBtYWtlT3B0aW9uYWwoMFUpOwogfQogCi1pbmxpbmUgdm9pZCBSYW5nZUJv
dW5kYXJ5UG9pbnQ6OnNldFRvQWZ0ZXJDaGlsZChOb2RlJiBjaGlsZCkKK2lubGluZSB2b2lkIFJh
bmdlQm91bmRhcnlQb2ludDo6c2V0VG9BZnRlck5vZGUoTm9kZSYgY2hpbGQpCiB7CiAgICAgQVNT
RVJUKGNoaWxkLnBhcmVudE5vZGUoKSk7CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gJmNo
aWxkOwotICAgIG1fY29udGFpbmVyTm9kZSA9IGNoaWxkLnBhcmVudE5vZGUoKTsKLSAgICBtX29m
ZnNldEluQ29udGFpbmVyID0gbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8gV1RGOjpudWxsb3B0IDog
T3B0aW9uYWw8dW5zaWduZWQ+KDApOworICAgIG1fY29udGFpbmVyID0gKmNoaWxkLnBhcmVudE5v
ZGUoKTsKKyAgICBtX29mZnNldEluQ29udGFpbmVyID0gbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8g
V1RGOjpudWxsb3B0IDogbWFrZU9wdGlvbmFsKDBVKTsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VC
b3VuZGFyeVBvaW50OjpzZXRUb1N0YXJ0T2ZOb2RlKFJlZjxOb2RlPiYmIGNvbnRhaW5lcikKK2lu
bGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9CZWZvcmVDb250ZW50cyhSZWY8Tm9k
ZT4mJiBjb250YWluZXIpCiB7Ci0gICAgbV9jb250YWluZXJOb2RlID0gV1RGTW92ZShjb250YWlu
ZXIpOworICAgIG1fY29udGFpbmVyID0gV1RGTW92ZShjb250YWluZXIpOwogICAgIG1fb2Zmc2V0
SW5Db250YWluZXIgPSAwOwogICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CiB9
CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9FbmRPZk5vZGUoUmVmPE5v
ZGU+JiYgY29udGFpbmVyKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0Fm
dGVyQ29udGVudHMoUmVmPE5vZGU+JiYgY29udGFpbmVyKQogewotICAgIG1fY29udGFpbmVyTm9k
ZSA9IFdURk1vdmUoY29udGFpbmVyKTsKLSAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKm1fY29u
dGFpbmVyTm9kZSkpIHsKLSAgICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IGRvd25jYXN0PENo
YXJhY3RlckRhdGE+KCptX2NvbnRhaW5lck5vZGUpLmxlbmd0aCgpOworICAgIG1fY29udGFpbmVy
ID0gV1RGTW92ZShjb250YWluZXIpOworICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPihtX2NvbnRh
aW5lcikpIHsKKyAgICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IGRvd25jYXN0PENoYXJhY3Rl
ckRhdGE+KG1fY29udGFpbmVyLmdldCgpKS5sZW5ndGgoKTsKICAgICAgICAgbV9jaGlsZEJlZm9y
ZUJvdW5kYXJ5ID0gbnVsbHB0cjsKICAgICB9IGVsc2UgewotICAgICAgICBtX2NoaWxkQmVmb3Jl
Qm91bmRhcnkgPSBtX2NvbnRhaW5lck5vZGUtPmxhc3RDaGlsZCgpOwotICAgICAgICBtX29mZnNl
dEluQ29udGFpbmVyID0gbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8gV1RGOjpudWxsb3B0IDogT3B0
aW9uYWw8dW5zaWduZWQ+KDApOworICAgICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBtX2Nv
bnRhaW5lci0+bGFzdENoaWxkKCk7CisgICAgICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2No
aWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBtYWtlT3B0aW9uYWwoMFUpOwogICAg
IH0KIH0KIApAQCAtMTY3LDIxICsxNDksMTYgQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBv
aW50OjppbnZhbGlkYXRlT2Zmc2V0KCkgY29uc3QKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIGEsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYikK
IHsKLSAgICBpZiAoYS5jb250YWluZXIoKSAhPSBiLmNvbnRhaW5lcigpKQorICAgIGlmICgmYS5j
b250YWluZXIoKSAhPSAmYi5jb250YWluZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChhLmNoaWxkQmVmb3JlKCkgfHwgYi5jaGlsZEJlZm9yZSgpKSB7Ci0gICAgICAgIGlmIChh
LmNoaWxkQmVmb3JlKCkgIT0gYi5jaGlsZEJlZm9yZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChhLm9mZnNldCgpICE9IGIub2Zmc2V0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAg
IGlmIChhLmNoaWxkQmVmb3JlKCkgfHwgYi5jaGlsZEJlZm9yZSgpKQorICAgICAgICByZXR1cm4g
YS5jaGlsZEJlZm9yZSgpID09IGIuY2hpbGRCZWZvcmUoKTsKKyAgICByZXR1cm4gYS5vZmZzZXQo
KSA9PSBiLm9mZnNldCgpOwogfQogCiBpbmxpbmUgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQ
b2ludChjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIHBvaW50KQogewotICAgIHJldHVybiB7ICpw
b2ludC5jb250YWluZXIoKSwgcG9pbnQub2Zmc2V0KCkgfTsKKyAgICByZXR1cm4geyBwb2ludC5j
b250YWluZXIoKSwgcG9pbnQub2Zmc2V0KCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggYzFiNzQ2OGUxZGUwNzk3ZWI5ZTYy
Y2I1OTZkMzRmM2YyOTM3NmZmMS4uZDk4N2Y0MDQxNTViNWZjNTFkODY3ZGEwZmNjZTk3OTkwNGRm
YTE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC0yMDUsNCArMjA1LDY5IEBA
IFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpCiAgICAgcmV0dXJuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNv
bnRhaW5lciwgcmFuZ2UuZW5kLmNvbnRhaW5lcik7CiB9CiAKK2Jvb2wgaXNQb2ludEluUmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sK
KyAgICByZXR1cm4gaXNfbHRlcShkb2N1bWVudE9yZGVyKHJhbmdlLnN0YXJ0LCBwb2ludCkpICYm
IGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihwb2ludCwgcmFuZ2UuZW5kKSk7Cit9CisKK2Jvb2wgaXNQ
b2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBPcHRpb25hbDxCb3Vu
ZGFyeVBvaW50PiYgcG9pbnQpCit7CisgICAgcmV0dXJuIHBvaW50ICYmIGlzUG9pbnRJblJhbmdl
KHJhbmdlLCAqcG9pbnQpOworfQorCitQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50KQoreworICAg
IGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRPcmRlcihyYW5nZS5zdGFydCwgcG9pbnQpOyAhaXNf
bHQob3JkZXIpKQorICAgICAgICByZXR1cm4gb3JkZXI7CisgICAgaWYgKGF1dG8gb3JkZXIgPSBk
b2N1bWVudE9yZGVyKHJhbmdlLmVuZCwgcG9pbnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgICAgICBy
ZXR1cm4gb3JkZXI7CisgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6ZXF1aXZhbGVudDsKK30K
KworUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYgcG9p
bnQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAoYXV0byBvcmRlciA9IGRv
Y3VtZW50T3JkZXIocG9pbnQsIHJhbmdlLnN0YXJ0KTsgIWlzX2d0KG9yZGVyKSkKKyAgICAgICAg
cmV0dXJuIG9yZGVyOworICAgIGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRPcmRlcihwb2ludCwg
cmFuZ2UuZW5kKTsgIWlzX2x0KG9yZGVyKSkKKyAgICAgICAgcmV0dXJuIG9yZGVyOworICAgIHJl
dHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7Cit9CisKK2Jvb2wgY29udGFpbnMoY29u
c3QgU2ltcGxlUmFuZ2UmIG91dGVyUmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBpbm5lclJhbmdl
KQoreworICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIob3V0ZXJSYW5nZS5zdGFydCwg
aW5uZXJSYW5nZS5zdGFydCkpICYmIGlzX2d0ZXEoZG9jdW1lbnRPcmRlcihvdXRlclJhbmdlLmVu
ZCwgaW5uZXJSYW5nZS5lbmQpKTsKK30KKworYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJh
bmdlJiBhLCBjb25zdCBTaW1wbGVSYW5nZSYgYikKK3sKKyAgICByZXR1cm4gaXNfbHRlcShkb2N1
bWVudE9yZGVyKGEuc3RhcnQsIGIuZW5kKSkgJiYgaXNfbHRlcShkb2N1bWVudE9yZGVyKGIuc3Rh
cnQsIGEuZW5kKSk7Cit9CisKKy8vIEZJWE1FOiBOYW1lIHRoaXMgInVuaW9uUmFuZ2UiIGluc3Rl
YWQ/IFRoZSB3b3JkICJ1bmlvbiIgaXMgYSBub3VuIG1vcmUgdGhhbiBhIHZlcmIuIFdvdWxkIGxp
a2UgdG8gY2FsbCBpdCBqdXN0IHVuaW9uIGlmIGl0IHdhc24ndCBmb3IgdGhlIGNvbmZsaWN0IHdp
dGggdGhlIEMga2V5d29yZC4KK1NpbXBsZVJhbmdlIHVuaW9uUmFuZ2VzKGNvbnN0IFNpbXBsZVJh
bmdlJiBhLCBjb25zdCBTaW1wbGVSYW5nZSYgYikKK3sKKyAgICBhdXRvJiBzdGFydCA9IGlzX2x0
ZXEoZG9jdW1lbnRPcmRlcihhLnN0YXJ0LCBiLnN0YXJ0KSkgPyBhIDogYjsKKyAgICBhdXRvJiBl
bmQgPSBpc19sdGVxKGRvY3VtZW50T3JkZXIoYS5lbmQsIGIuZW5kKSkgPyBiIDogYTsKKyAgICBy
ZXR1cm4geyBzdGFydC5zdGFydCwgZW5kLmVuZCB9OworfQorCitib29sIGNvbnRhaW5zKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICAvLyBGSVhNRTog
Q29uc2lkZXIgYSBtb3JlIGVmZmljaWVudCBhbGdvcml0aG0gdGhhdCBhdm9pZHMgYWx3YXlzIGNv
bXB1dGluZyB0aGUgbm9kZSBpbmRleC4KKyAgICAvLyBGSVhNRTogRG9lcyB0aGlzIGNvbnN0X2Nh
c3QgcG9pbnQgdG8gYSBkZXNpZ24gcHJvYmxlbT8KKyAgICBhdXRvIG5vZGVSYW5nZSA9IG1ha2VS
YW5nZVNlbGVjdGluZ05vZGUoY29uc3RfY2FzdDxOb2RlJj4obm9kZSkpOworICAgIHJldHVybiBu
b2RlUmFuZ2UgJiYgY29udGFpbnMocmFuZ2UsICpub2RlUmFuZ2UpOworfQorCitib29sIGludGVy
c2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQoreworICAg
IC8vIEZJWE1FOiBDb25zaWRlciBhIG1vcmUgZWZmaWNpZW50IGFsZ29yaXRobSB0aGF0IGF2b2lk
cyBhbHdheXMgY29tcHV0aW5nIHRoZSBub2RlIGluZGV4LgorICAgIC8vIEZJWE1FOiBEb2VzIHRo
aXMgY29uc3RfY2FzdCBwb2ludCB0byBhIGRlc2lnbiBwcm9ibGVtPworICAgIGF1dG8gbm9kZVJh
bmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShjb25zdF9jYXN0PE5vZGUmPihub2RlKSk7Cisg
ICAgaWYgKCFub2RlUmFuZ2UpCisgICAgICAgIHJldHVybiBub2RlLmNvbnRhaW5zKHJhbmdlLnN0
YXJ0LmNvbnRhaW5lci5wdHIoKSk7CisgICAgcmV0dXJuIGlzX2x0KGRvY3VtZW50T3JkZXIobm9k
ZVJhbmdlLT5zdGFydCwgcmFuZ2UuZW5kKSkgJiYgaXNfbHQoZG9jdW1lbnRPcmRlcihyYW5nZS5z
dGFydCwgbm9kZVJhbmdlLT5lbmQpKTsKKworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5o
CmluZGV4IDBkNWNkMWVhYjJhNzcxZWI2NzI2NWRkNjMwMjQ1MzQxMTI3ZmM1ZGYuLjQ2MjEwZDc4
ZjE4NGUxZjU4YjViNGViMzM2MjVmODNhMjgxOWM1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5oCkBAIC02NSw2ICs2NSwyMCBAQCBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAorV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5
UG9pbnQmKTsKK2Jvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBP
cHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOworCitXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5z
KGNvbnN0IFNpbXBsZVJhbmdlJiBvdXRlclJhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgaW5uZXJS
YW5nZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2Um
LCBjb25zdCBTaW1wbGVSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgdW5pb25S
YW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOworCitXRUJDT1JF
X0VYUE9SVCBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOwor
V0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3Qg
Tm9kZSYpOworCisvLyBSZXR1cm5zIGVxdWl2YWxlbnQgaWYgcG9pbnQgaXMgaW4gcmFuZ2UuCitX
RUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBTaW1wbGVS
YW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK1dFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRl
cmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBTaW1wbGVSYW5n
ZSYpOworCiBjbGFzcyBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U7CiBJbnRlcnNlY3RpbmdOb2RlUmFu
Z2UgaW50ZXJzZWN0aW5nTm9kZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZy5jcHAKaW5kZXggMjgzYWVhZDY1OGQ0MWVlMmEwYmMzNWYyMzAxZTk1YWY0Y2Ux
MjNiYy4uNmIxODRjYTg1N2NhN2VlY2E1MWQ2YmFmZjU1NGI1YTIxNTI1NzdkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC03OSw0MCArNzksMTggQEAgYm9vbCBpc0F0b21pY05v
ZGUoY29uc3QgTm9kZSogbm9kZSkKICAgICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxk
Tm9kZXMoKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm5vZGUpKTsKIH0KIAotLy8gQ29tcGFy
ZSB0d28gcG9zaXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBwb3NzaWJpbGl0eSB0aGF0
IG9uZSBvciBib3RoCi0vLyBjb3VsZCBiZSBpbnNpZGUgYSBzaGFkb3cgdHJlZS4gT25seSB3b3Jr
cyBmb3Igbm9uLW51bGwgdmFsdWVzLgorLy8gRklYTUU6IENoYW5nZSBjYWxsZXJzIHRvIHVzZSBk
b2N1bWVudE9yZGVyIGFuZCBkZWxldGUgdGhpcy4KIGludCBjb21wYXJlUG9zaXRpb25zKGNvbnN0
IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKIHsKLSAgICBUcmVlU2NvcGUqIGNvbW1v
blNjb3BlID0gY29tbW9uVHJlZVNjb3BlKGEuY29udGFpbmVyTm9kZSgpLCBiLmNvbnRhaW5lck5v
ZGUoKSk7Ci0KLSAgICBpZiAoIWNvbW1vblNjb3BlKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IE5vZGUqIG5vZGVBID0gY29tbW9uU2NvcGUtPmFuY2VzdG9yTm9kZUluVGhpc1Njb3BlKGEuY29u
dGFpbmVyTm9kZSgpKTsKLSAgICBBU1NFUlQobm9kZUEpOwotICAgIGJvb2wgaGFzRGVzY2VuZGVu
dEEgPSBub2RlQSAhPSBhLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpbnQgb2Zmc2V0QSA9IGhhc0Rl
c2NlbmRlbnRBID8gMCA6IGEuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotCi0gICAg
Tm9kZSogbm9kZUIgPSBjb21tb25TY29wZS0+YW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUoYi5jb250
YWluZXJOb2RlKCkpOwotICAgIEFTU0VSVChub2RlQik7Ci0gICAgYm9vbCBoYXNEZXNjZW5kZW50
QiA9IG5vZGVCICE9IGIuY29udGFpbmVyTm9kZSgpOwotICAgIGludCBvZmZzZXRCID0gaGFzRGVz
Y2VuZGVudEIgPyAwIDogYi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0KLSAgICBp
bnQgYmlhcyA9IDA7Ci0gICAgaWYgKG5vZGVBID09IG5vZGVCKSB7Ci0gICAgICAgIGlmIChoYXNE
ZXNjZW5kZW50QSkKLSAgICAgICAgICAgIGJpYXMgPSAtMTsKLSAgICAgICAgZWxzZSBpZiAoaGFz
RGVzY2VuZGVudEIpCi0gICAgICAgICAgICBiaWFzID0gMTsKLSAgICB9Ci0KLSAgICBhdXRvIGNv
bXBhcmlzb25SZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKG5vZGVBLCBvZmZz
ZXRBLCBub2RlQiwgb2Zmc2V0Qik7Ci0gICAgaWYgKGNvbXBhcmlzb25SZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBiaWFzOwotICAgIGF1dG8gcmVzdWx0ID0gY29tcGFyaXNv
blJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLSAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0
IDogYmlhczsKKyAgICBhdXRvIG9yZGVyaW5nID0gZG9jdW1lbnRPcmRlcihhLCBiKTsKKyAgICBp
ZiAoaXNfbHQob3JkZXJpbmcpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKGlzX2d0KG9y
ZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7CiB9CiAKKy8vIEZJWE1F
OiBDaGFuZ2UgY2FsbGVycyB0byB1c2UgZG9jdW1lbnRPcmRlciBhbmQgZGVsZXRlIHRoaXMuCiBp
bnQgY29tcGFyZVBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhhLmRlZXBFcXVp
dmFsZW50KCksIGIuZGVlcEVxdWl2YWxlbnQoKSk7CkBAIC0xMTYzLDkgKzExNDEsNyBAQCBzdGF0
aWMgYm9vbCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBv
c2l0aW9uJiBzZWNvbmQpCiAvLyBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRo
ZXIgYSBub2RlIGlzIHZpc2libHkgZml0IGluc2lkZSBzZWxlY3RlZFJhbmdlCiBib29sIGlzTm9k
ZVZpc2libHlDb250YWluZWRXaXRoaW4oTm9kZSYgbm9kZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKQogewotICAgIC8vIElmIHRoZSBub2RlIGlzIGluc2lkZSB0aGUgcmFuZ2UsIHRoZW4gaXQg
c3VyZWx5IGlzIGNvbnRhaW5lZCB3aXRoaW4uCi0gICAgYXV0byBjb21wYXJpc29uUmVzdWx0ID0g
Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+Y29tcGFyZU5vZGUobm9kZSk7Ci0gICAgaWYgKCFjb21w
YXJpc29uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmlzb25SZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCkgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKQorICAgIGlmIChjb250YWlucyhyYW5n
ZSwgbm9kZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYXV0byBzdGFydFBvc2l0aW9u
ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAppbmRleCAxZjBhNzcyMjllY2YzMzBiYzM5MTNmZjdhZDc0MTY5ZGUyMTYw
MTlhLi4xNjA3ZTg3Y2RhYzEzMWE0YzE2MDk3N2E2NDhjZjUyMWQ0NGE3MGViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0zNTUwLDEwICszNTUwLDggQEAgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IEVkaXRvcjo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3Qg
T3B0aW9uYWwKIHN0YXRpYyBib29sIGlzRnJhbWVJblJhbmdlKEZyYW1lJiBmcmFtZSwgY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIGZvciAoYXV0byogb3duZXJFbGVtZW50ID0gZnJh
bWUub3duZXJFbGVtZW50KCk7IG93bmVyRWxlbWVudDsgb3duZXJFbGVtZW50ID0gb3duZXJFbGVt
ZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIGlmICgmb3duZXJFbGVt
ZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS5zdGFydC5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmludGVyc2VjdHNOb2RlKCpv
d25lckVsZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuICFyZXN1bHQuaGFzRXhjZXB0aW9uKCkg
JiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgICAgICB9CisgICAgICAgIGlmICgm
b3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS5zdGFydC5kb2N1bWVudCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGludGVyc2VjdHMocmFuZ2UsICpvd25lckVsZW1lbnQpOwogICAgIH0K
ICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0zNzAzLDE4ICszNzAxLDE2IEBAIHZvaWQgRWRpdG9y
OjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAKICAgICBhdXRvJiBzZWxlY3Rp
b24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgp
KSB7Ci0gICAgICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpKSB7Ci0gICAgICAgICAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3
IGNoYXJhY3RlcnMgaW4gZWFjaCBkaXJlY3Rpb24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxl
Y3RlZCBwaG9uZSBudW1iZXJzLgotICAgICAgICAgICAgY29uc3RleHByIHVuc2lnbmVkIGNoYXJh
Y3RlcnNUb0V4dGVuZCA9IDE1OwotICAgICAgICAgICAgYXV0byBzZWxlY3RlZExpdmVSYW5nZSA9
IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IHJhbmdlIDogc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoZXh0ZW5kU2VsZWN0aW9uKCpzZWxlY3Rl
ZFJhbmdlLCBjaGFyYWN0ZXJzVG9FeHRlbmQpKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBXaHkgZG8gd2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgYW5kIHRoZSBjb2RlIGJlbG93IHRo
aXMgb25seSB3aGVuIGl0IG92ZXJsYXBzIHRoZSBzZWxlY3Rpb24/Ci0gICAgICAgICAgICAgICAg
YWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKLQotICAg
ICAgICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxl
cGhvbmUgbnVtYmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBhY3R1YWwgc2VsZWN0aW9uIHJh
bmdlLgotICAgICAgICAgICAgICAgIGlmIChyYW5nZXNPdmVybGFwKGNyZWF0ZUxpdmVSYW5nZShy
YW5nZSkucHRyKCksIHNlbGVjdGVkTGl2ZVJhbmdlLnB0cigpKSkKLSAgICAgICAgICAgICAgICAg
ICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2UpOwotICAgICAg
ICAgICAgfQorICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSAqc2VsZWN0aW9uLnNlbGVjdGlv
bigpLmZpcnN0UmFuZ2UoKTsKKyAgICAgICAgLy8gRXh0ZW5kIHRoZSByYW5nZSBhIGZldyBjaGFy
YWN0ZXJzIGluIGVhY2ggZGlyZWN0aW9uIHRvIGRldGVjdCBpbmNvbXBsZXRlbHkgc2VsZWN0ZWQg
cGhvbmUgbnVtYmVycy4KKyAgICAgICAgY29uc3RleHByIHVuc2lnbmVkIGNoYXJhY3RlcnNUb0V4
dGVuZCA9IDE1OworICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogc2NhbkZvclRlbGVwaG9uZU51
bWJlcnMoZXh0ZW5kU2VsZWN0aW9uKHNlbGVjdGVkUmFuZ2UsIGNoYXJhY3RlcnNUb0V4dGVuZCkp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIGRvIHRoaXMgdW5jb25kaXRpb25h
bGx5IGluc3RlYWQgb2Ygd2hlbiBvbmx5IHdoZW4gaXQgb3ZlcmxhcHMgdGhlIHNlbGVjdGlvbj8K
KyAgICAgICAgICAgIGFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51
bWJlcik7CisKKyAgICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRl
Y3RlZCB0ZWxlcGhvbmUgbnVtYmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBzZWxlY3Rpb24u
CisgICAgICAgICAgICBpZiAoaW50ZXJzZWN0cyhyYW5nZSwgc2VsZWN0ZWRSYW5nZSkpCisgICAg
ICAgICAgICAgICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2Up
OwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcAppbmRleCAyNDZmYjI2YjdlODc0N2YzMGQ4OWJlNjk3Yjk5MDZkNzRlNmM5OWQxLi5iMDQ5
NzU5NmE3NWJlYzExOWI2ODcyNDQ5YzRmNTc0N2M1ZjAzYzYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTIyOCwxMyArMjI4LDYgQEAgc3RhdGljIHVuc2ln
bmVkIHZlcnRpY2FsU2Nyb2xsRGlzdGFuY2UoRnJhbWUmIGZyYW1lKQogICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oU2Nyb2xsYmFyOjpwYWdlU3RlcChoZWlnaHQpKTsKIH0KIAotc3Rh
dGljIFNpbXBsZVJhbmdlIHVuaW9uUmFuZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBT
aW1wbGVSYW5nZSYgYikKLXsKLSAgICBhdXRvJiBzdGFydCA9IGNyZWF0ZUxpdmVSYW5nZShhKS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJh
bmdlKGIpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYSA6IGI7Ci0gICAgYXV0byYgZW5k
ID0gY3JlYXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9U
T19FTkQsIGNyZWF0ZUxpdmVSYW5nZShiKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGIg
OiBhOwotICAgIHJldHVybiB7IHN0YXJ0LnN0YXJ0LCBlbmQuZW5kIH07Ci19Ci0KIC8vIEV4ZWN1
dGUgY29tbWFuZCBmdW5jdGlvbnMKIAogc3RhdGljIGJvb2wgZXhlY3V0ZUJhY2tDb2xvcihGcmFt
ZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCkBAIC0zNTMsMTQgKzM0NiwxNiBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRl
VG9FbmRPZlBhcmFncmFwaChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdQog
CiBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBF
ZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGF1dG8gbWFyayA9IGZy
YW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8mIGVkaXRv
ciA9IGZyYW1lLmVkaXRvcigpOwogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlv
bigpOwotICAgIGlmIChtYXJrICYmIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgewot
ICAgICAgICBpZiAoIXNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uUmFuZ2VzKCptYXJr
LCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQorICAgIGF1dG8gbWFya1JhbmdlID0gZWRp
dG9yLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2Ug
PSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAobWFy
a1JhbmdlICYmIHNlbGVjdGlvblJhbmdlKSB7CisgICAgICAgIGlmICghc2VsZWN0aW9uLnNldFNl
bGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmtSYW5nZSwgKnNlbGVjdGlvblJhbmdlKSwgRE9X
TlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFtZS5lZGl0b3IoKS5wZXJmb3JtRGVs
ZXRlKCk7Ci0gICAgZnJhbWUuZWRpdG9yKCkuc2V0TWFyayhzZWxlY3Rpb24uc2VsZWN0aW9uKCkp
OworICAgIGVkaXRvci5wZXJmb3JtRGVsZXRlKCk7CisgICAgZWRpdG9yLnNldE1hcmsoc2VsZWN0
aW9uLnNlbGVjdGlvbigpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA1MCwxMyArMTA0
NSwxNSBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0U2VudGVuY2UoRnJhbWUmIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbgogCiBzdGF0aWMgYm9vbCBleGVjdXRlU2Vs
ZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25z
dCBTdHJpbmcmKQogewotICAgIGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUuZWRpdG9yKCkuc2Vs
ZWN0ZWRSYW5nZSgpOwotICAgIGlmICghbWFyayB8fCAhc2VsZWN0aW9uKSB7CisgICAgYXV0byYg
ZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2Vs
ZWN0aW9uKCk7CisgICAgYXV0byBtYXJrUmFuZ2UgPSBlZGl0b3IubWFyaygpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghbWFya1JhbmdlIHx8ICFzZWxlY3Rpb25S
YW5nZSkgewogICAgICAgICBQQUw6OnN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uUmFu
Z2VzKCptYXJrLCAqc2VsZWN0aW9uKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMpOworICAgIHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9u
UmFuZ2VzKCptYXJrUmFuZ2UsICpzZWxlY3Rpb25SYW5nZSksIERPV05TVFJFQU0sIEZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICAvLyBGSVhNRTogV2h5IGRvIHdl
IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gc2V0U2VsZWN0ZWRSYW5nZSBoZXJlPwogICAg
IHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAppbmRleCBlMDEwOGIyM2E2NWZmMDg2NWUyMzgwZjVlYzFjYWFkNTg2M2E1NzY4Li5mZDA2ZjY0
ZmMwNTUzOWJhNDlhYjVjNzUyNWU0YWQ3MjVkYjA5OTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNTU0LDE4ICs1NTQsMTIgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VS
ZW1vdmVkLCBib28KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zZWxlY3Rpb24uc2V0V2l0
aG91dFZhbGlkYXRpb24obV9zZWxlY3Rpb24uZW5kKCksIG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwog
ICAgIH0gZWxzZSBpZiAoaXNSYW5nZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9z
ZWxlY3Rpb24uZmlyc3RSYW5nZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbXBhcmVOb2RlUmVz
dWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKG5vZGUpOwotICAgICAg
ICAgICAgaWYgKCFjb21wYXJlTm9kZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICAg
ICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNvbXBhcmVOb2RlUmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpO
T0RFX0JFRk9SRV9BTkRfQUZURVIgfHwgY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9JTlNJ
REUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdGhpbmcgaGVyZSwgd2hl
biB0aGlzIG5vZGUncyByZW5kZXJlciB3YXMgZGVzdHJveWVkLCB0aGUgcmVjdCB0aGF0IGl0Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQs
IHNlbGVjdGlvbiBnYXBzIHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mCi0gICAgICAgICAgICAg
ICAgICAgIC8vIHRoZSByZW1vdmFsIHdvdWxkbid0IGJlIGludmFsaWRhdGVkLgotICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogRG9uJ3QgZG8gc28gbXVjaCB1bm5lY2Vzc2FyeSBpbnZhbGlk
YXRpb24uCi0gICAgICAgICAgICAgICAgICAgIGNsZWFyUmVuZGVyVHJlZVNlbGVjdGlvbiA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBy
YW5nZSA9IG1fc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsgcmFuZ2UgJiYgaW50ZXJzZWN0cygqcmFu
Z2UsIG5vZGUpKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBkaWQgbm90aGluZyBoZXJlLCB3aGVu
IHRoaXMgbm9kZSdzIHJlbmRlcmVyIHdhcyBkZXN0cm95ZWQsIHRoZSByZWN0IHRoYXQgaXQKKyAg
ICAgICAgICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVjdGlv
biBnYXBzIHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mCisgICAgICAgICAgICAvLyB0aGUgcmVt
b3ZhbCB3b3VsZG4ndCBiZSBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBEb24n
dCBkbyBzbyBtdWNoIHVubmVjZXNzYXJ5IGludmFsaWRhdGlvbi4KKyAgICAgICAgICAgIGNsZWFy
UmVuZGVyVHJlZVNlbGVjdGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwMzQs
NyArMjAyOCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRUFmZmluCiAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCZyYW5nZS0+c3RhcnQuY29udGFpbmVyLT5k
b2N1bWVudCgpICE9ICZyYW5nZS0+ZW5kLmNvbnRhaW5lci0+ZG9jdW1lbnQoKSkKKyAgICBpZiAo
JnJhbmdlLT5zdGFydC5kb2N1bWVudCgpICE9ICZyYW5nZS0+ZW5kLmRvY3VtZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKCpy
YW5nZSwgYWZmaW5pdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCmluZGV4IDVlZDBkZTlhMzEwYjMxYmU2M2UwYTNk
NDMzODk4YzE5NTI3Mjg1NmUuLjViN2JlNzg4YzY4NGUxMjIyOWJjNzc3ZTk5NmJmOTFhZDllNWRi
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRl
eHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdp
dGhUZXh0Q29tbWFuZC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1h
bmQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHRl
eHQpCi0gICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChyYW5nZVRvQmVSZXBsYWNlZC5zdGFydC5j
b250YWluZXItPmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQorICAg
IDogQ29tcG9zaXRlRWRpdENvbW1hbmQocmFuZ2VUb0JlUmVwbGFjZWQuc3RhcnQuZG9jdW1lbnQo
KSwgRWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCiAgICAgLCBtX3JhbmdlVG9CZVJlcGxh
Y2VkKHJhbmdlVG9CZVJlcGxhY2VkKQogICAgICwgbV90ZXh0KHRleHQpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRl
eCA4NjcxMzIwZGM0M2M2NWFlM2YwMDUwNDM3ZjQzOTFmMTZmODljZjU2Li5hODQ4NjYzNjUzYTBm
N2ZmMjk3MzczNmIxMTk3MmM4YzY0YzhjYWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTg0LDcgKzg0LDcgQEAg
cHJpdmF0ZToKICNlbmRpZgogCiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpTcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNv
bnN0IFN0cmluZyYgY29ycmVjdGlvbikKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJhbmdl
VG9CZUNvcnJlY3RlZC5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCksIEVkaXRBY3Rpb246Oklu
c2VydFJlcGxhY2VtZW50KQorICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQocmFuZ2VUb0JlQ29y
cmVjdGVkLnN0YXJ0LmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQog
ICAgICwgbV9yYW5nZVRvQmVDb3JyZWN0ZWQocmFuZ2VUb0JlQ29ycmVjdGVkKQogICAgICwgbV9z
ZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKG1fcmFuZ2VUb0JlQ29ycmVjdGVkKQogICAgICwgbV9jb3Jy
ZWN0aW9uKGNvcnJlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5jcHAKaW5kZXggZTIzODJiZWIwMTc5ODU0YzJhNTIzOGIzZDM3MGI5NGE1ZTUwNTdk
NS4uMzVmZTlkNmE4ZWRkYzk4YWRjNDNlNTU0MDA4NjFiOTRlNDNlNGZjNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMzM2LDcgKzMzNiw3
IEBAIGF1dG8gVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5n
cmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrCiAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3Jh
bW1hcikKICAgICAgICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5n
VHlwZTo6R3JhbW1hcik7CiAgICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50
U2VsZWN0aW9uOwotICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3JhcGhS
YW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgICAgICAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gcGFyYWdyYXBoUmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFt
ZSgpKQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgICAgICAgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KCptX2NsaWVudC50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMs
IHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQppbmRleCA4NzYxMjBiYjA5YjEy
ZTA5ZTRkZWNhNThlNTU0ZDMwMjcwMWVmNDM1Li41NTgyNGZhMDgzNmUwMzNjNzkyNjYxNmE0Nzk3
MTEyMGUzNzQzYzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Rp
Y3Rpb25hcnlMb29rdXBMZWdhY3kubW0KQEAgLTY4LDExICs2OCw4IEBAIHN0YXRpYyBib29sIHNl
bGVjdGlvbkNvbnRhaW5zUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwg
Y29uc3QgVmlzCiAgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb250YWlucyhw
b3NpdGlvbik7CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2Uo
KTsKKyAgICByZXR1cm4gc2VsZWN0ZWRSYW5nZSAmJiBpc1BvaW50SW5SYW5nZSgqc2VsZWN0ZWRS
YW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pKTsKIH0KIAogT3B0aW9uYWw8c3RkOjp0
dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggMWY3MTk0YTczMjhlOTQ3YWViYjYyYWMxYzhkNThmZTky
YTE1MGE3ZS4uNmI4ZTM5OWE1ZjhhZWRmMWViYjQ3YmJiNmY2ZDUyNjlkYmE4NWQ4ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMTEyMCw3ICsxMTIwLDcgQEAgc3RhdGljIGJvb2wg
Y29udGV4dFByZXNlcnZlc05ld2xpbmUoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQpCiAKIFJl
ZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnN0IFNpbXBsZVJh
bmdlJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgYXV0byYgZG9jdW1lbnQg
PSBjb250ZXh0LnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVu
dCA9IGNvbnRleHQuc3RhcnQuZG9jdW1lbnQoKTsKICAgICBhdXRvIGZyYWdtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgIAogICAgIGlmICh0ZXh0LmlzRW1wdHko
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdl
YkFyY2hpdmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2Vi
QXJjaGl2ZS5jcHAKaW5kZXggYTViZTA3MWUzNjg2MDc3ZWUzNmQyMWUzNWE1ODM5ODA0ZDk4N2Yy
Mi4uNjA5ZWQxMTE0ZmQxOTk2Y2U4OTczYjc0Yzc5YmM3ZmUwNTI2ZWQ3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAK
QEAgLTQ1NSw3ICs0NTUsNyBAQCBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJj
aGl2ZTo6Y3JlYXRlKEZyYW1lJiBmcmFtZSkKIAogUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExl
Z2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAg
YXV0byYgZG9jdW1lbnQgPSByYW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCk7CisgICAg
YXV0byYgZG9jdW1lbnQgPSByYW5nZS5zdGFydC5kb2N1bWVudCgpOwogICAgIGF1dG8qIGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCA5NjQ0OWQzMjdhZWI5
YTkxY2ZlZDc5MjljYTZjMzY2NDEyMDIwNWJmLi5iN2IxMmFlNjE3OWU4NTBlNmQ4YjZkOTliMDMw
NWJkNTYyMzNiODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0yODQs
MTUgKzI4NCwxMyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6bW9kaWZ5KGNvbnN0IFN0cmluZyYgYWx0
ZXJTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaQogCiBFeGNlcHRpb25Pcjx2b2lk
PiBET01TZWxlY3Rpb246OmV4dGVuZChOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0g
ICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVm
UHRyKHRoaXMtPmZyYW1lKCkpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgaWYgKG9mZnNldCA+IChub2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSA/IGNhcmV0TWF4
T2Zmc2V0KG5vZGUpIDogbm9kZS5jb3VudENoaWxkTm9kZXMoKSkpCisgICAgaWYgKG9mZnNldCA+
IG5vZGUubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJv
ciB9OwogICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKCZub2RlKSkKICAgICAgICAgcmV0dXJu
IHsgfTsKLQotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CiAgICAgZnJhbWUtPnNl
bGVjdGlvbigpLnNldEV4dGVudChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJm5vZGUsIG9m
ZnNldCksIERPV05TVFJFQU0pOwogICAgIHJldHVybiB7IH07CiB9CkBAIC0zMDEsMjIgKzI5OSwx
MCBAQCBFeGNlcHRpb25PcjxSZWY8UmFuZ2U+PiBET01TZWxlY3Rpb246OmdldFJhbmdlQXQodW5z
aWduZWQgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IHJhbmdlQ291bnQoKSkKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07Ci0KLSAgICAvLyBJZiB5b3UncmUg
aGl0dGluZyB0aGlzLCB5b3UndmUgYWRkZWQgYnJva2VuIG11bHRpLXJhbmdlIHNlbGVjdGlvbiBz
dXBwb3J0LgotICAgIEFTU0VSVChyYW5nZUNvdW50KCkgPT0gMSk7Ci0KLSAgICBhdXRvKiBmcmFt
ZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKGF1dG8qIHNoYWRvd0FuY2VzdG9yID0gc2VsZWN0
aW9uU2hhZG93QW5jZXN0b3IoKmZyYW1lKSkgewotICAgICAgICBhdXRvKiBjb250YWluZXIgPSBz
aGFkb3dBbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOwotICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSBzaGFkb3dBbmNlc3Rvci0+Y29tcHV0ZU5vZGVJbmRleCgpOwotICAg
ICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1ha2VTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50
IHsgKmNvbnRhaW5lciwgb2Zmc2V0IH0pKTsKLSAgICB9Ci0KLSAgICBhdXRvIGZpcnN0UmFuZ2Ug
PSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwotICAgIEFTU0VS
VChmaXJzdFJhbmdlKTsKLSAgICBpZiAoIWZpcnN0UmFuZ2UpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKmZp
cnN0UmFuZ2UpOworICAgIGF1dG8mIGZyYW1lID0gKnRoaXMtPmZyYW1lKCk7CisgICAgaWYgKGF1
dG8gc2hhZG93QW5jZXN0b3IgPSBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcihmcmFtZSkpCisgICAg
ICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UobWFrZVNpbXBsZVJhbmdlKCptYWtlQm91bmRhcnlQ
b2ludEJlZm9yZU5vZGUoKnNoYWRvd0FuY2VzdG9yKSkpOworICAgIHJldHVybiBjcmVhdGVMaXZl
UmFuZ2UoKmZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSk7CiB9CiAK
IHZvaWQgRE9NU2VsZWN0aW9uOjpyZW1vdmVBbGxSYW5nZXMoKQpAQCAtMzI3LDUwICszMTMsMjIg
QEAgdm9pZCBET01TZWxlY3Rpb246OnJlbW92ZUFsbFJhbmdlcygpCiAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLmNsZWFyKCk7CiB9CiAKLXZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYg
cmFuZ2UpCit2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIGxpdmVSYW5nZSkKIHsK
LSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAgYXV0byBmcmFtZSA9IG1ha2VS
ZWZQdHIodGhpcy0+ZnJhbWUoKSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKLQorICAgIGF1dG8gcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UobGl2ZVJhbmdlKTsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+
c2VsZWN0aW9uKCk7Ci0gICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVj
dGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgewotICAg
ICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOworCisg
ICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKSB7CisgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFp
bmVyLT5jb250YWluaW5nU2hhZG93Um9vdCgpICYmIGludGVyc2VjdHMoKnNlbGVjdGVkUmFuZ2Us
IHJhbmdlKSkKKyAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24odW5pb25SYW5nZXMo
KnNlbGVjdGVkUmFuZ2UsIHJhbmdlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvIG5vcm1hbGl6ZWRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKTsKLSAg
ICBhdXRvIHJlc3VsdCA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRf
VE9fU1RBUlQsICpub3JtYWxpemVkUmFuZ2UpOwotICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlv
bigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewotICAgICAgICAvLyBX
ZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0
aGluZyBpZiB0aGUgdHdvIHJhbmdlcyBkb24ndCBpbnRlcnNlY3QuCi0gICAgICAgIHJlc3VsdCA9
IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqbm9ybWFs
aXplZFJhbmdlKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gLTEpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHJhbmdl
LmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKm5vcm1hbGl6ZWRSYW5n
ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVs
ZWFzZVJldHVyblZhbHVlKCkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgcmFuZ2Vz
IGludGVyc2VjdC4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKG1ha2VEZXByZWNh
dGVkTGVnYWN5UG9zaXRpb24oJnJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLnN0YXJ0T2Zm
c2V0KCkpLCBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZub3JtYWxpemVkUmFuZ2UtPmVu
ZENvbnRhaW5lcigpLCBub3JtYWxpemVkUmFuZ2UtPmVuZE9mZnNldCgpKSwgRE9XTlNUUkVBTSk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRoZSBuZXcgcmFuZ2Ug
Y29udGFpbnMgdGhlIG9yaWdpbmFsIHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRp
Z3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgdHdvIHJhbmdlcyBk
b24ndCBpbnRlcnNlY3QuCi0gICAgICAgIHJlc3VsdCA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqbm9ybWFsaXplZFJhbmdlKTsKLSAgICAgICAgaWYg
KCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwg
MSkgewotICAgICAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpFTkRfVE9fRU5ELCAqbm9ybWFsaXplZFJhbmdlKTsKLSAgICAgICAgICAgIGlmICghcmVz
dWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkg
ewotICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBjb250YWlucyB0aGUgbmV3
IHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obWFrZVNpbXBs
ZVJhbmdlKCpub3JtYWxpemVkUmFuZ2UpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVGhlIHJhbmdlcyBpbnRlcnNlY3QuCi0gICAgICAgICAgICAgICAgc2VsZWN0
aW9uLm1vdmVUbyhtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZub3JtYWxpemVkUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCksIG5vcm1hbGl6ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSksIG1ha2VE
ZXByZWNhdGVkTGVnYWN5UG9zaXRpb24oJnJhbmdlLmVuZENvbnRhaW5lcigpLCByYW5nZS5lbmRP
ZmZzZXQoKSksIERPV05TVFJFQU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQor
ICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24ocmFuZ2UpOwogfQogCiB2b2lkIERPTVNlbGVjdGlv
bjo6ZGVsZXRlRnJvbURvY3VtZW50KCkKQEAgLTM5Miw0NSArMzUwLDE5IEBAIHZvaWQgRE9NU2Vs
ZWN0aW9uOjpkZWxldGVGcm9tRG9jdW1lbnQoKQogCiBib29sIERPTVNlbGVjdGlvbjo6Y29udGFp
bnNOb2RlKE5vZGUmIG5vZGUsIGJvb2wgYWxsb3dQYXJ0aWFsKSBjb25zdAogeworICAgIC8vIEZJ
WE1FOiBUaGlzIGJlaGF2aW9yIGRvZXMgbm90IG1hdGNoIHdoYXQgdGhlIHNlbGVjdGlvbiBBUEkg
c3RhbmRhcmQgc3BlY2lmaWVzLgorICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSkKKyAgICAgICAg
YWxsb3dQYXJ0aWFsID0gdHJ1ZTsKKwogICAgIGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBzZWxl
Y3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICE9
ICZub2RlLmRvY3VtZW50KCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBSZWY8Tm9kZT4gcHJvdGVjdGVkTm9kZShub2RlKTsKLSAgICBhdXRvIHNl
bGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
KyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
Zmlyc3RSYW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5z
dGFydC5jb250YWluZXItPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGUo
KTsKLSAgICBpZiAoIXBhcmVudE5vZGUgfHwgIXBhcmVudE5vZGUtPmlzQ29ubmVjdGVkKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBub2RlSW5kZXggPSBub2RlLmNvbXB1
dGVOb2RlSW5kZXgoKTsKLQotICAgIGF1dG8gc3RhcnRzUmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5kZXgsICZzZWxlY3RlZFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBpZiAoc3Rh
cnRzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvIGVuZHNSZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBhcmVudE5vZGUs
IG5vZGVJbmRleCArIDEsICZzZWxlY3RlZFJhbmdlLT5lbmRDb250YWluZXIoKSwgc2VsZWN0ZWRS
YW5nZS0+ZW5kT2Zmc2V0KCkpOwotICAgIEFTU0VSVCghZW5kc1Jlc3VsdC5oYXNFeGNlcHRpb24o
KSk7Ci0gICAgYm9vbCBpc05vZGVGdWxseVNlbGVjdGVkID0gIXN0YXJ0c1Jlc3VsdC5oYXNFeGNl
cHRpb24oKSAmJiBzdGFydHNSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMAotICAgICAg
ICAmJiAhZW5kc1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBlbmRzUmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpIDw9IDA7Ci0gICAgaWYgKGlzTm9kZUZ1bGx5U2VsZWN0ZWQpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgYXV0byBzdGFydEVuZFJlc3VsdCA9IFJhbmdlOjpjb21wYXJlQm91
bmRhcnlQb2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4LCAmc2VsZWN0ZWRSYW5nZS0+ZW5kQ29u
dGFpbmVyKCksIHNlbGVjdGVkUmFuZ2UtPmVuZE9mZnNldCgpKTsKLSAgICBBU1NFUlQoIXN0YXJ0
RW5kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKTsKLSAgICBhdXRvIGVuZFN0YXJ0UmVzdWx0ID0gUmFu
Z2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCAmc2Vs
ZWN0ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+c3RhcnRPZmZzZXQo
KSk7Ci0gICAgQVNTRVJUKCFlbmRTdGFydFJlc3VsdC5oYXNFeGNlcHRpb24oKSk7Ci0gICAgYm9v
bCBpc05vZGVGdWxseVVuc2VsZWN0ZWQgPSAoIXN0YXJ0RW5kUmVzdWx0Lmhhc0V4Y2VwdGlvbigp
ICYmIHN0YXJ0RW5kUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgfHwg
KCFlbmRTdGFydFJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBlbmRTdGFydFJlc3VsdC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSA8IDApOwotICAgIGlmIChpc05vZGVGdWxseVVuc2VsZWN0ZWQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBhbGxvd1BhcnRpYWwgfHwgbm9kZS5pc1Rl
eHROb2RlKCk7CisgICAgcmV0dXJuIGFsbG93UGFydGlhbCA/IGludGVyc2VjdHMoKnNlbGVjdGVk
UmFuZ2UsIG5vZGUpIDogY29udGFpbnMoKnNlbGVjdGVkUmFuZ2UsIG5vZGUpOwogfQogCiB2b2lk
IERPTVNlbGVjdGlvbjo6c2VsZWN0QWxsQ2hpbGRyZW4oTm9kZSYgbm9kZSkKQEAgLTQ4MywxMSAr
NDE1LDcgQEAgdW5zaWduZWQgRE9NU2VsZWN0aW9uOjpzaGFkb3dBZGp1c3RlZE9mZnNldChjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiBib29sIERPTVNlbGVjdGlvbjo6aXNWYWxpZEZv
clBvc2l0aW9uKE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgYXV0byogZnJhbWUgPSB0aGlzLT5m
cmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IW5vZGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAmbm9kZS0+ZG9jdW1lbnQo
KSA9PSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gZnJhbWUgJiYgKCFub2RlIHx8ICZu
b2RlLT5kb2N1bWVudCgpID09IGZyYW1lLT5kb2N1bWVudCgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBmOTJh
YjNiZTY0MDhiZWIxNjY3NDNlNTgzZjNjY2I4MmQ0YTllZDczLi4zY2MyY2ViYWM1YTgwMWYzOWM4
N2FhMzBhZjkwMjllZmFlZmMyOWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZG9jdW1lbnRGcmFnbWVudEZyb21EcmFnRGF0YShjb25zdCBEcmFnRGF0YSYgZHJhCiAgICAgICAg
ICAgICBTdHJpbmcgdGl0bGU7CiAgICAgICAgICAgICBTdHJpbmcgdXJsID0gZHJhZ0RhdGEuYXNV
UkwoRHJhZ0RhdGE6OkRvTm90Q29udmVydEZpbGVuYW1lcywgJnRpdGxlKTsKICAgICAgICAgICAg
IGlmICghdXJsLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
Y29udGV4dC5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCk7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0YXJ0LmRvY3VtZW50KCk7CiAgICAgICAgICAgICAgICAg
YXV0byBhbmNob3IgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICAg
ICAgICAgICAgICBhbmNob3ItPnNldEhyZWYodXJsKTsKICAgICAgICAgICAgICAgICBpZiAodGl0
bGUuaXNFbXB0eSgpKSB7CkBAIC03NzQsMTcgKzc3NCwxMyBAQCBFbGVtZW50KiBEcmFnQ29udHJv
bGxlcjo6ZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSogc291cmNlRnJhbWUsIEVsZW1lbnQq
IHN0YQogICAgIHN0YXRlLnR5cGUgPSBzb3VyY2VGcmFtZS0+c2VsZWN0aW9uKCkuY29udGFpbnMo
ZHJhZ09yaWdpbikgPyBEcmFnU291cmNlQWN0aW9uOjpTZWxlY3Rpb24gOiBPcHRpb25TZXQ8RHJh
Z1NvdXJjZUFjdGlvbj4oeyB9KTsKICAgICBpZiAoIXN0YXJ0RWxlbWVudCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIGlmIChh
dXRvIGF0dGFjaG1lbnQgPSBlbmNsb3NpbmdBdHRhY2htZW50RWxlbWVudCgqc3RhcnRFbGVtZW50
KSkgewotICAgICAgICBhdXRvIHNlbGVjdGlvbiA9IHNvdXJjZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICAgICAgYXV0byYgc2VsZWN0aW9uID0gc291cmNlRnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgICAgICBib29sIGlzU2luZ2xlQXR0YWNobWVudFNlbGVj
dGlvbiA9IHNlbGVjdGlvbi5zdGFydCgpID09IFBvc2l0aW9uKGF0dGFjaG1lbnQuZ2V0KCksIFBv
c2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKSAmJiBzZWxlY3Rpb24uZW5kKCkgPT0gUG9z
aXRpb24oYXR0YWNobWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7
Ci0gICAgICAgIGJvb2wgaXNBdHRhY2htZW50RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiA9IGZh
bHNlOwotICAgICAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNyZWF0ZUxp
dmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVOb2RlKCphdHRhY2htZW50KTsKLSAgICAg
ICAgICAgIGlzQXR0YWNobWVudEVsZW1lbnRJbkN1cnJlbnRTZWxlY3Rpb24gPSAhY29tcGFyZVJl
c3VsdC5oYXNFeGNlcHRpb24oKSAmJiBjb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
ID09IFJhbmdlOjpOT0RFX0lOU0lERTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNBdHRh
Y2htZW50RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiB8fCBpc1NpbmdsZUF0dGFjaG1lbnRTZWxl
Y3Rpb24pIHsKKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFu
Z2UoKTsKKyAgICAgICAgaWYgKGlzU2luZ2xlQXR0YWNobWVudFNlbGVjdGlvbiB8fCAhc2VsZWN0
ZWRSYW5nZSB8fCAhY29udGFpbnMoKnNlbGVjdGVkUmFuZ2UsICphdHRhY2htZW50KSkgewogICAg
ICAgICAgICAgc3RhdGUudHlwZSA9IERyYWdTb3VyY2VBY3Rpb246OkF0dGFjaG1lbnQ7CiAgICAg
ICAgICAgICByZXR1cm4gYXR0YWNobWVudC5nZXQoKTsKICAgICAgICAgfQpAQCAtMTQ3MSw4ICsx
NDY3LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xk
ZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4KIAogICAgIFZlY3RvcjxSZWY8SFRNTElt
YWdlRWxlbWVudD4+IHBsYWNlaG9sZGVyczsKICAgICBmb3IgKGF1dG8mIHBsYWNlaG9sZGVyIDog
ZGVzY2VuZGFudHNPZlR5cGU8SFRNTEltYWdlRWxlbWVudD4oZG93bmNhc3Q8Q29udGFpbmVyTm9k
ZT4oKmNvbnRhaW5lcikpKSB7Ci0gICAgICAgIGF1dG8gaW50ZXJzZWN0c05vZGUgPSBjcmVhdGVM
aXZlUmFuZ2UoKmluc2VydGVkQ29udGVudFJhbmdlKS0+aW50ZXJzZWN0c05vZGUocGxhY2Vob2xk
ZXIpOwotICAgICAgICBpZiAoIWludGVyc2VjdHNOb2RlLmhhc0V4Y2VwdGlvbigpICYmIGludGVy
c2VjdHNOb2RlLnJldHVyblZhbHVlKCkpCisgICAgICAgIGlmIChpbnRlcnNlY3RzKCppbnNlcnRl
ZENvbnRlbnRSYW5nZSwgcGxhY2Vob2xkZXIpKQogICAgICAgICAgICAgcGxhY2Vob2xkZXJzLmFw
cGVuZChwbGFjZWhvbGRlcik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKaW5kZXggYTgyYmM4MjFjZWJhMzJlYmM4NGQxNWUyMDMwNjNlODNmZDNlNTVmMS4uMDllYjA2
ZGY0YTMwMzZmYTU1ODdkMzhhZmY5MTljOGJlNjExM2VkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcApAQCAtMjc0Niw4ICsyNzQ2LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRp
c3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIHRhcmdl
dE4KICAgICAvLyB3aWxsIHNldCBhIHNlbGVjdGlvbiBpbnNpZGUgaXQsIHdoaWNoIHdpbGwgYWxz
byBzZXQgdGhlIGZvY3VzZWQgZWxlbWVudC4KICAgICBpZiAoZWxlbWVudCAmJiBtX2ZyYW1lLnNl
bGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tcGFyZU5vZGUoKmVs
ZW1lbnQpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lERSAmJiBlbGVtZW50LT5p
c0Rlc2NlbmRhbnRPZihtX2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkpKQorICAg
ICAgICAgICAgaWYgKGNvbnRhaW5zKCpyYW5nZSwgKmVsZW1lbnQpICYmIGVsZW1lbnQtPmlzRGVz
Y2VuZGFudE9mKG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApp
bmRleCA0OTcyOWQwOTY5NzgwMTFlOGU3NTBhYTM4NDhiNmJjMzQwMGUzMDYxLi5hNzc4MTBiMDIw
YmY1YThkODUyMmNhYzhiMjViMzY5MjU4ODMyNTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTcz
MCwxOSArNzMwLDE5IEBAIGF1dG8gUGFnZTo6ZmluZFRleHRNYXRjaGVzKGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBsCiAKICAgICBpZiAoZnJhbWVX
aXRoU2VsZWN0aW9uKSB7CiAgICAgICAgIHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbiA9IE5vTWF0
Y2hBZnRlclVzZXJTZWxlY3Rpb247Ci0gICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1l
V2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAg
ICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSAqZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5z
KEJhY2t3YXJkcykpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHQucmFuZ2Vz
LnNpemUoKTsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29tcGFyaXNvblJl
c3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHQucmFuZ2VzW2kg
LSAxXSkpOwotICAgICAgICAgICAgICAgIGlmICghY29tcGFyaXNvblJlc3VsdC5oYXNFeGNlcHRp
b24oKSAmJiBjb21wYXJpc29uUmVzdWx0LnJldHVyblZhbHVlKCkgPiAwKSB7CisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFNlZW1zIGxpa2UgdGhpcyBzaG91bGQgYmUgaXNfZ3RlcSB0byBjb3Jy
ZWN0bHkgaGFuZGxlIHRoZSBzYW1lIHN0cmluZyBmb3VuZCB0d2ljZSBpbiBhIHJvdy4KKyAgICAg
ICAgICAgICAgICBpZiAoaXNfZ3QoZG9jdW1lbnRPcmRlcihzZWxlY3RlZFJhbmdlLnN0YXJ0LCBy
ZXN1bHQucmFuZ2VzW2kgLSAxXS5lbmQpKSkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHQu
aW5kZXhGb3JTZWxlY3Rpb24gPSBpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSByZXN1bHQucmFuZ2VzLnNpemUoKTsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9IGNy
ZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpTVEFSVF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHQucmFuZ2VzW2ldKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb21wYXJpc29uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBh
cmlzb25SZXN1bHQucmV0dXJuVmFsdWUoKSA8IDApIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogU2VlbXMgbGlrZSB0aGlzIHNob3VsZCBiZSBpc19sdGVxIHRvIGNvcnJlY3RseSBoYW5kbGUg
dGhlIHNhbWUgc3RyaW5nIGZvdW5kIHR3aWNlIGluIGEgcm93LgorICAgICAgICAgICAgICAgIGlm
IChpc19sdChkb2N1bWVudE9yZGVyKHNlbGVjdGVkUmFuZ2UuZW5kLCByZXN1bHQucmFuZ2VzW2ld
LnN0YXJ0KSkpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9u
ID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAt
NzYzLDExICs3NjMsMTEgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFBhZ2U6OnJhbmdlT2ZTdHJp
bmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IE9wdGlvbmFsPFMKICAgICBpZiAodGFyZ2V0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChyZWZl
cmVuY2VSYW5nZSAmJiByZWZlcmVuY2VSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgp
LnBhZ2UoKSAhPSB0aGlzKQorICAgIGlmIChyZWZlcmVuY2VSYW5nZSAmJiByZWZlcmVuY2VSYW5n
ZS0+c3RhcnQuZG9jdW1lbnQoKS5wYWdlKCkgIT0gdGhpcykKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIENhbldyYXAgY2FuV3JhcCA9IG9wdGlvbnMuY29udGFpbnMoV3JhcEFy
b3VuZCkgPyBDYW5XcmFwOjpZZXMgOiBDYW5XcmFwOjpObzsKLSAgICBGcmFtZSogZnJhbWUgPSBy
ZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydC5jb250YWluZXItPmRvY3VtZW50
KCkuZnJhbWUoKSA6ICZtYWluRnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VS
YW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbWFpbkZy
YW1lKCk7CiAgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBmcmFtZTsKICAgICBkbyB7CiAgICAgICAg
IGlmIChhdXRvIHJlc3VsdFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFy
Z2V0LCBmcmFtZSA9PSBzdGFydEZyYW1lID8gcmVmZXJlbmNlUmFuZ2UgOiBXVEY6Om51bGxvcHQs
IG9wdGlvbnMgLSBXcmFwQXJvdW5kKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmluZGV4IDJlZmM0MWUzZDQyNzMyNjU5Mjdh
ZGU1YjhiYmE5NmE3NzEyMzY5ODUuLmYxNmViYzU4NmM3YTdjMDQxOGY0N2VmOTRjNjU1NjMyNzhi
OTk1YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbQpAQCAtNjMwLDcgKzYzMCw3IEBAIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI6OkhpZ2hsaWdodCogU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZmluZFRlbGVwaG9u
ZU51CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChhdXRvJiBoaWdobGlnaHQg
OiBtX3BvdGVudGlhbEhpZ2hsaWdodHMpIHsKLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgp
ID09IEhpZ2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSAmJiBjcmVhdGVMaXZlUmFuZ2UoaGln
aGxpZ2h0LT5yYW5nZSgpKS0+Y29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5n
ZSkpKQorICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUZWxlcGhv
bmVOdW1iZXJUeXBlICYmIGNvbnRhaW5zKGhpZ2hsaWdodC0+cmFuZ2UoKSwgKnNlbGVjdGlvblJh
bmdlKSkKICAgICAgICAgICAgIHJldHVybiBoaWdobGlnaHQuZ2V0KCk7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGI2ZWExNTUzMDc5Nzdk
OWU1N2QyNGE4MDdlMGYyNjcyOGU5Y2VkYjIuLjk2YmRmNTRlNWMzYTIzMzUxZGFhOWE2MTIxYjE5
MDc5ZTczYzQ5ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CkBAIC0xOTc1LDcgKzE5NzUsNyBAQCBzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gYm9yZGVyQW5k
VGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgQ29vcmRpbmF0ZQogewogICAgIFZl
Y3RvcjxGbG9hdFJlY3Q+IHJlY3RzOwogCi0gICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1
bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJhbmdl
LnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
CiAKICAgICBib29sIHVzZVZpc2libGVCb3VuZHMgPSBiZWhhdmlvci5jb250YWlucyhSZW5kZXJP
YmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VWaXNpYmxlQm91bmRzKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGIwNDM2ZjJjZTczZjg5MmIzOWJjZmIxNTAy
MTkyNTE1ODU3ZGVjYjkuLjMxOWY3ZTIxMGE2ODgzZmI2OGJhMDRjN2QzYTkwMzMzYTc1YWE5N2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTIxNjEsMjcgKzIxNjEsNDUg
QEAgdW5zaWduZWQgSW50ZXJuYWxzOjpsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCYgc2NvcGUsIGNv
bnN0IFJhbmdlJiByYW5nZSkKICAgICByZXR1cm4gY2xhbXBUbzx1bnNpZ25lZD4oY2hhcmFjdGVy
UmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoc2NvcGUpLCBtYWtlU2lt
cGxlUmFuZ2UocmFuZ2UpKS5sZW5ndGgpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFz
VGV4dChjb25zdCBSYW5nZSYgcmFuZ2UpCitTdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dChj
b25zdCBSYW5nZSYgbGl2ZVJhbmdlKQogewotICAgIHJldHVybiByYW5nZS50ZXh0KCk7CisgICAg
YXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShsaXZlUmFuZ2UpOworICAgIHJhbmdlLnN0YXJ0
LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIHBsYWluVGV4dChyYW5nZSk7
CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRl
cmF0b3IoY29uc3QgUmFuZ2UmIHJhbmdlKQorLy8gRklYTUU6IEZpbmQgYSBnb29kIHBsYWNlIGZv
ciB0aGlzIGdlbmVyYWwgcHVycG9zZSBhbGdvcml0aG0uCitzdGF0aWMgU3RyaW5nIGpvaW4oVmVj
dG9yPFN0cmluZz4mJiBzdHJpbmdzKQogewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgZm9yIChT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKG1ha2VTaW1w
bGVSYW5nZShyYW5nZSkpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRl
cmF0b3IuYWR2YW5jZSgpKQotICAgICAgICByZXN1bHQuaW5zZXJ0KGJhY2t3YXJkc0l0ZXJhdG9y
LnRleHQoKS50b1N0cmluZygpLCAwKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OworICAgIGZvciAoYXV0byYgc3RyaW5nIDogc3RyaW5ncykKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOworICAgIHJldHVybiByZXN1bHQudG9TdHJp
bmcoKTsKK30KKworU3RyaW5nIEludGVybmFsczo6cmFuZ2VBc1RleHRVc2luZ0JhY2t3YXJkc1Rl
eHRJdGVyYXRvcihjb25zdCBSYW5nZSYgbGl2ZVJhbmdlKQoreworICAgIGF1dG8gcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UobGl2ZVJhbmdlKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVw
ZGF0ZUxheW91dCgpOworICAgIFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7CisgICAgZm9yIChTaW1w
bGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKHJhbmdlKTsgIWJh
Y2t3YXJkc0l0ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKKyAg
ICAgICAgc3RyaW5ncy5hcHBlbmQoYmFja3dhcmRzSXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCkp
OworICAgIHN0cmluZ3MucmV2ZXJzZSgpOworICAgIHJldHVybiBqb2luKFdURk1vdmUoc3RyaW5n
cykpOwogfQogCi1SZWY8UmFuZ2U+IEludGVybmFsczo6c3VicmFuZ2UoUmFuZ2UmIHJhbmdlLCB1
bnNpZ25lZCByYW5nZUxvY2F0aW9uLCB1bnNpZ25lZCByYW5nZUxlbmd0aCkKK1JlZjxSYW5nZT4g
SW50ZXJuYWxzOjpzdWJyYW5nZShSYW5nZSYgbGl2ZVJhbmdlLCB1bnNpZ25lZCByYW5nZUxvY2F0
aW9uLCB1bnNpZ25lZCByYW5nZUxlbmd0aCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdl
KHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpLCB7IHJhbmdlTG9j
YXRpb24sIHJhbmdlTGVuZ3RoIH0pKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdl
KGxpdmVSYW5nZSk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsK
KyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShyYW5nZSwg
eyByYW5nZUxvY2F0aW9uLCByYW5nZUxlbmd0aCB9KSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gSW50
ZXJuYWxzOjpyYW5nZU9mU3RyaW5nTmVhckxvY2F0aW9uKGNvbnN0IFJhbmdlJiByYW5nZSwgY29u
c3QgU3RyaW5nJiB0ZXh0LCB1bnNpZ25lZCB0YXJnZXRPZmZzZXQpCitSZWZQdHI8UmFuZ2U+IElu
dGVybmFsczo6cmFuZ2VPZlN0cmluZ05lYXJMb2NhdGlvbihjb25zdCBSYW5nZSYgbGl2ZVJhbmdl
LCBjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIHRhcmdldE9mZnNldCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlTGl2ZVJhbmdlKGZpbmRDbG9zZXN0UGxhaW5UZXh0KG1ha2VTaW1wbGVSYW5nZShy
YW5nZSksIHRleHQsIHsgfSwgdGFyZ2V0T2Zmc2V0KSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VT
aW1wbGVSYW5nZShsaXZlUmFuZ2UpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRl
TGF5b3V0KCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShmaW5kQ2xvc2VzdFBsYWluVGV4
dChyYW5nZSwgdGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpKTsKIH0KIAogI2lmICFQTEFURk9STShN
QUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlLmNwcAppbmRleCAwNjc4
Y2Q0M2QzNjFjNDg3ZDZkOGZlYmNmNGNlNmRhODY2N2VjNzg3Li5iYjMyNDYwMDM1YWU3ODMyMDY0
MDAwNDNhODFkMWQyMDVmZDM0Y2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01SYW5nZS5jcHAKQEAgLTM1NSw5ICszNTUsNyBAQCBnc2hvcnQgd2Via2l0X2RvbV9yYW5nZV9j
b21wYXJlX2JvdW5kYXJ5X3BvaW50cyhXZWJLaXRET01SYW5nZSogc2VsZiwgZ3VzaG9ydCBobwog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZiksIDApOwog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc291cmNlUmFuZ2Up
LCAwKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0g
ICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29y
ZTo6UmFuZ2UqIGNvbnZlcnRlZFNvdXJjZVJhbmdlID0gV2ViS2l0Ojpjb3JlKHNvdXJjZVJhbmdl
KTsKLSAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPmNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRp
bmdzKGhvdywgKmNvbnZlcnRlZFNvdXJjZVJhbmdlKTsKKyAgICBhdXRvIHJlc3VsdCA9IFdlYktp
dDo6Y29yZShzZWxmKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKGhvdywgKldlYktpdDo6Y29yZShz
b3VyY2VSYW5nZSkpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAg
YXV0byBkZXNjcmlwdGlvbiA9IFdlYkNvcmU6OkRPTUV4Y2VwdGlvbjo6ZGVzY3JpcHRpb24ocmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwogICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9u
LmxlZ2FjeUNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOwpAQCAtNTA4LDE1ICs1MDYsNyBAQCBnYm9v
bGVhbiB3ZWJraXRfZG9tX3JhbmdlX2ludGVyc2VjdHNfbm9kZShXZWJLaXRET01SYW5nZSogc2Vs
ZiwgV2ViS2l0RE9NTm9kZSogcgogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfUkFOR0Uoc2VsZiksIEZBTFNFKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX05PREUocmVmTm9kZSksIEZBTFNFKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvciwgRkFMU0UpOwotICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZFJlZk5vZGUgPSBX
ZWJLaXQ6OmNvcmUocmVmTm9kZSk7Ci0gICAgYXV0byByZXN1bHQgPSBpdGVtLT5pbnRlcnNlY3Rz
Tm9kZSgqY29udmVydGVkUmVmTm9kZSk7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkg
ewotICAgICAgICBhdXRvIGRlc2NyaXB0aW9uID0gV2ViQ29yZTo6RE9NRXhjZXB0aW9uOjpkZXNj
cmlwdGlvbihyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7Ci0gICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZGVzY3JpcHRpb24ubGVnYWN5Q29kZSwgZGVzY3JpcHRpb24ubmFtZSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsK
KyAgICByZXR1ciBXZWJLaXQ6OmNvcmUoc2VsZiktPmludGVyc2VjdHNOb2RlKCpXZWJLaXQ6OmNv
cmUocmVmTm9kZSkpOwogfQogCiBnc2hvcnQgd2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX3BvaW50
KFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBnbG9uZyBvZmZz
ZXQsIEdFcnJvcioqIGVycm9yKQpAQCAtNjMyLDkgKzYyMiw5IEBAIGdjaGFyKiB3ZWJraXRfZG9t
X3JhbmdlX2dldF90ZXh0KFdlYktpdERPTVJhbmdlKiBzZWxmKQogewogICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT50ZXh0KCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byByYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZSgqV2ViS2l0Ojpjb3JlKHNlbGYpKTsKKyAgICByYW5nZS5zdGFydC5kb2N1
bWVudCgpLnVwZGF0ZUxheW91dCgpOworICAgIHJldHVybiBjb252ZXJ0VG9VVEY4U3RyaW5nKHBs
YWluVGV4dChyYW5nZSkpOwogfQogCiBHX0dOVUNfRU5EX0lHTk9SRV9ERVBSRUNBVElPTlM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21h
Yy9XS0RPTVJhbmdlLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9tYWMvV0tET01SYW5nZS5tbQppbmRleCBjZjI2OWExY2RkMzAyYTQzYjk3YWIyYjYwMDBj
MGFkMzAyODBlODIyLi4zY2FkMmM1ZTgxMGJmNGJiNjUzYTRkNDk1NmMwNzFkNWU4MmVhODdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21h
Yy9XS0RPTVJhbmdlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIldL
QnVuZGxlQVBJQ2FzdC5oIgogI2ltcG9ydCAiV0tET01JbnRlcm5hbHMuaCIKICNpbXBvcnQgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1Zpc2libGVVbml0cy5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNv
Y29hLmg+CiAKQEAgLTQ5LDEyICs1MCw3IEBAIC0gKGlkKV9pbml0V2l0aEltcGw6KFdlYkNvcmU6
OlJhbmdlKilpbXBsCiAKIC0gKGlkKWluaXRXaXRoRG9jdW1lbnQ6KFdLRE9NRG9jdW1lbnQgKilk
b2N1bWVudAogewotICAgIGF1dG8gcmFuZ2UgPSBXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKCpXZWJL
aXQ6OnRvV2ViQ29yZURvY3VtZW50KGRvY3VtZW50KSk7Ci0gICAgc2VsZiA9IFtzZWxmIF9pbml0
V2l0aEltcGw6cmFuZ2UucHRyKCldOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIHJldHVybiBzZWxmOworICAgIHJldHVybiBbc2VsZiBfaW5pdFdpdGhJbXBsOldl
YkNvcmU6OlJhbmdlOjpjcmVhdGUoKldlYktpdDo6dG9XZWJDb3JlRG9jdW1lbnQoZG9jdW1lbnQp
KS5wdHIoKV07CiB9CiAKIC0gKHZvaWQpZGVhbGxvYwpAQCAtMTE4LDcgKzExNCw5IEBAIC0gKE5T
SW50ZWdlcillbmRPZmZzZXQKIAogLSAoTlNTdHJpbmcgKil0ZXh0CiB7Ci0gICAgcmV0dXJuIF9p
bXBsLT50ZXh0KCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqX2ltcGwpOwor
ICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIHBs
YWluVGV4dChyYW5nZSk7CiB9CiAKIC0gKEJPT0wpaXNDb2xsYXBzZWQKQEAgLTEyOCw4ICsxMjYs
OSBAQCAtIChCT09MKWlzQ29sbGFwc2VkCiAKIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKIHsKLSAg
ICBfaW1wbC0+b3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwotICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
YWJzb2x1dGVUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKCpfaW1wbCkpKS5hdXRvcmVsZWFzZSgp
OworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKl9pbXBsKTsKKyAgICByYW5nZS5z
dGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwor
ICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVU
ZXh0UmVjdHMocmFuZ2UpKS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChXS0RPTVJhbmdlICopcmFu
Z2VCeUV4cGFuZGluZ1RvV29yZEJvdW5kYXJ5QnlDaGFyYWN0ZXJzOihOU1VJbnRlZ2VyKWNoYXJh
Y3RlcnMgaW5EaXJlY3Rpb246KFdLRE9NUmFuZ2VEaXJlY3Rpb24pZGlyZWN0aW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAppbmRleCA2M2YzYzc4NmU2
ZmIyMTVjOWEyZjRlMjU5ZmFjOWU2MTFiNmRiOGIyLi41YTI2ZTUzM2ZjMTVmZWZmMjVlZDgwYzcy
N2QxM2UwYTc0ZWNkYmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZS5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaW1w
bGVSYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9WaXNpYmxlU2VsZWN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTk3LDIzICs5OCwzMiBAQCBSYW5nZSYg
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Y29yZVJhbmdlKCkgY29uc3QKIAogUmVmPEluamVj
dGVkQnVuZGxlTm9kZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6ZG9jdW1lbnQo
KQogewotICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKG1f
cmFuZ2UtPm93bmVyRG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlTm9kZUhh
bmRsZTo6Z2V0T3JDcmVhdGUobV9yYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpKTsK
IH0KIAogV2ViQ29yZTo6SW50UmVjdCBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpib3VuZGlu
Z1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29uc3QKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBt
X3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICByZXR1cm4gZnJhbWUtPnZpZXco
KS0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVy
b1JlY3RzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBs
ZVJhbmdlKG1fcmFuZ2UpKSkpKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1f
cmFuZ2UpOworICAgIGF1dG8gZnJhbWUgPSByYW5nZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCk7
CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHZpZXcgPSBm
cmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBy
ZXR1cm4gdmlldy0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHVuaW9uUmVjdEln
bm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMo
cmFuZ2UpKSkpOwogfQogCiBSZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgRG9jdW1l
bnQmIG93bmVyRG9jdW1lbnQgPSBtX3JhbmdlLT5vd25lckRvY3VtZW50KCk7Ci0gICAgRnJhbWUq
IGZyYW1lID0gb3duZXJEb2N1bWVudC5mcmFtZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UobV9yYW5nZSk7CisKKyAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZihyYW5nZS5z
dGFydC5kb2N1bWVudCgpKTsKKworICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKGRvY3VtZW50
LT5mcmFtZSgpKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBhdXRvIGZyYW1l
VmlldyA9IGZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCkBAIC0xMjEsMTMgKzEzMSwxMSBAQCBSZWZQdHI8V2ViSW1hZ2U+IEluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9wdGlv
bgogICAgIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UgbG9jYWxBcHBlYXJhbmNlKGZyYW1l
Vmlldy0+dXNlRGFya0FwcGVhcmFuY2UoKSk7CiAjZW5kaWYKIAotICAgIFJlZjxGcmFtZT4gcHJv
dGVjdG9yKCpmcmFtZSk7Ci0KICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZy
YW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZShtX3JhbmdlKSk7CisgICAgZnJhbWUtPnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihyYW5nZSk7CiAKICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IChvcHRp
b25zICYgU25hcHNob3RPcHRpb25zRXhjbHVkZURldmljZVNjYWxlRmFjdG9yKSA/IDEgOiBmcmFt
ZS0+cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIEludFJlY3QgcGFpbnRSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdCh1bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0cyhSZW5kZXJPYmplY3Q6
OmFic29sdXRlQm9yZGVyQW5kVGV4dFJlY3RzKG1ha2VTaW1wbGVSYW5nZShtX3JhbmdlKSkpKTsK
KyAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodW5pb25SZWN0SWdub3Jp
bmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvcmRlckFuZFRleHRSZWN0cyhyYW5n
ZSkpKTsKICAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBwYWludFJlY3Quc2l6ZSgpOwog
ICAgIGJhY2tpbmdTdG9yZVNpemUuc2NhbGUoc2NhbGVGYWN0b3IpOwogCkBAIC0xNTUsNyArMTYz
LDcgQEAgUmVmUHRyPFdlYkltYWdlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpyZW5kZXJl
ZEltYWdlKFNuYXBzaG90T3B0aW9ucyBvcHRpb24KICAgICAgICAgcGFpbnRCZWhhdmlvci5hZGQo
UGFpbnRCZWhhdmlvcjo6Rm9yY2VXaGl0ZVRleHQpOwogCiAgICAgZnJhbWVWaWV3LT5zZXRQYWlu
dEJlaGF2aW9yKHBhaW50QmVoYXZpb3IpOwotICAgIG93bmVyRG9jdW1lbnQudXBkYXRlTGF5b3V0
KCk7CisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwogCiAgICAgZnJhbWVWaWV3LT5wYWlu
dCgqZ3JhcGhpY3NDb250ZXh0LCBwYWludFJlY3QpOwogICAgIGZyYW1lVmlldy0+c2V0UGFpbnRC
ZWhhdmlvcihvbGRQYWludEJlaGF2aW9yKTsKQEAgLTE2Nyw3ICsxNzUsOSBAQCBSZWZQdHI8V2Vi
SW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RP
cHRpb25zIG9wdGlvbgogCiBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6dGV4dCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmFuZ2UtPnRleHQoKTsKKyAgICBhdXRvIHJhbmdlID0g
bWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBk
YXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIHBsYWluVGV4dChyYW5nZSk7CiB9CiAKIFJlZlB0cjxJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBjcmVhdGVIYW5kbGUoY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAyYTU3ZmQyMDllNjM1NzBiNzM4
OTIzZjBiNTlmYjNjY2RiMmY0ZDQ0Li5iOGMwN2I4YzI1NDA2MmRhZmJmZDNjYzY4NDIyNzFmYWRm
NzYxMzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmlu
ZENvbnRyb2xsZXIuY3BwCkBAIC0zMDUsNyArMzA1LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6
Z2V0SW1hZ2VGb3JGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJbmRleCkKIHsKICAgICBpZiAobWF0
Y2hJbmRleCA+PSBtX2ZpbmRNYXRjaGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEZy
YW1lKiBmcmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0uc3RhcnQuY29udGFpbmVyLT5k
b2N1bWVudCgpLmZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gbV9maW5kTWF0Y2hlc1ttYXRj
aEluZGV4XS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6c2Vs
ZWN0RmluZE1hdGNoKHVpbnQzMl90IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1hdGNoSW5kZXgg
Pj0gbV9maW5kTWF0Y2hlcy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBGcmFtZSogZnJh
bWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQo
KS5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0u
c3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
bjsKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1fZmluZE1hdGNoZXNbbWF0
Y2hJbmRleF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
V2ViUGFnZUlPUy5tbQppbmRleCBlOWQ2N2YwMTc1N2RlYzU5MjMxNzNlM2MzYTVhNzdhNGNjMDhj
ZDdiLi4xMGU5ZDE4OTVmYmRjOWMzNTJjMWE2YTI2MTk1MDk4NTg1YjQwYjNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAt
NDE4NCw3ICs0MTg0LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29u
dGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKIAogICAgIGF1dG8gc2Vs
ZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBhdXRvIHJh
bmdlT2ZJbnRlcmVzdCA9ICptYWtlU2ltcGxlUmFuZ2UocmFuZ2VPZkludGVyZXN0U3RhcnQsIHJh
bmdlT2ZJbnRlcmVzdEVuZCk7Ci0gICAgaWYgKHNlbGVjdGlvblJhbmdlICYmIHJhbmdlc092ZXJs
YXAoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdCkucHRyKCksIGNyZWF0ZUxpdmVSYW5n
ZSgqc2VsZWN0aW9uUmFuZ2UpLnB0cigpKSkgeworICAgIGlmIChzZWxlY3Rpb25SYW5nZSAmJiBp
bnRlcnNlY3RzKHJhbmdlT2ZJbnRlcmVzdCwgKnNlbGVjdGlvblJhbmdlKSkgewogICAgICAgICBz
dGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSBzdGQ6Om1heChyYW5nZU9mSW50ZXJl
c3RTdGFydCwgc2VsZWN0aW9uU3RhcnQpOwogICAgICAgICBlbmRPZlJhbmdlT2ZJbnRlcmVzdElu
U2VsZWN0aW9uID0gc3RkOjptaW4ocmFuZ2VPZkludGVyZXN0RW5kLCBzZWxlY3Rpb25FbmQpOwog
ICAgIH0gZWxzZSB7CkBAIC00MjQ5LDcgKzQyNDksNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RE
b2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVl
cwogICAgIGNvbnRleHQuY29udGV4dEJlZm9yZSA9IG1ha2VTdHJpbmcoY29udGV4dEJlZm9yZVN0
YXJ0LCBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24pOwogICAgIGNvbnRleHQuc2Vs
ZWN0ZWRUZXh0ID0gbWFrZVN0cmluZyhzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24s
IGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24pOwogICAgIGNvbnRleHQuY29udGV4dEFm
dGVyID0gbWFrZVN0cmluZyhlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uLCBjb250ZXh0
QWZ0ZXJFbmQpOwotICAgIGlmIChjb21wb3NpdGlvblJhbmdlICYmIHJhbmdlc092ZXJsYXAoY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdCkucHRyKCksIGNyZWF0ZUxpdmVSYW5nZSgqY29t
cG9zaXRpb25SYW5nZSkucHRyKCkpKSB7CisgICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgaW50
ZXJzZWN0cyhyYW5nZU9mSW50ZXJlc3QsICpjb21wb3NpdGlvblJhbmdlKSkgewogICAgICAgICBW
aXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25TdGFydChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGNv
bXBvc2l0aW9uRW5kKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdl
LT5lbmQpKTsKICAgICAgICAgY29udGV4dC5tYXJrZWRUZXh0ID0gbWFrZVN0cmluZyhjb21wb3Np
dGlvblN0YXJ0LCBjb21wb3NpdGlvbkVuZCk7CkBAIC00MjY1LDcgKzQyNjUsNyBAQCB2b2lkIFdl
YlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRl
eHRSZXF1ZXN0IHJlcXVlcwogICAgICAgICB3aGlsZSAoIWl0ZXJhdG9yLmF0RW5kKCkpIHsKICAg
ICAgICAgICAgIGlmICghaXRlcmF0b3IudGV4dCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
ICAgIGF1dG8gYWJzb2x1dGVCb3VuZGluZ0JveCA9IHVuaW9uUmVjdChSZW5kZXJPYmplY3Q6OmFi
c29sdXRlVGV4dFJlY3RzKGl0ZXJhdG9yLnJhbmdlKCksIFJlbmRlck9iamVjdDo6Qm91bmRpbmdS
ZWN0QmVoYXZpb3I6Oklnbm9yZUVtcHR5VGV4dFNlbGVjdGlvbnMpKTsKLSAgICAgICAgICAgICAg
ICByZWN0cy5hcHBlbmQoeyBpdGVyYXRvci5yYW5nZSgpLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1l
bnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhhYnNvbHV0ZUJvdW5kaW5nQm94KSwgeyBv
ZmZzZXRTb0ZhcisrLCBzdHJpZGUgfSB9KTsKKyAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQo
eyBpdGVyYXRvci5yYW5nZSgpLnN0YXJ0LmRvY3VtZW50KCkudmlldygpLT5jb250ZW50c1RvUm9v
dFZpZXcoYWJzb2x1dGVCb3VuZGluZ0JveCksIHsgb2Zmc2V0U29GYXIrKywgc3RyaWRlIH0gfSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKHN0cmlkZSk7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KaW5kZXggZmY3NDBmNWZlY2QzNzMyNTQyNTA5MzZlZThkMWFhODMwZWVmZDUx
MC4uYzllNmUzNzU4M2I3YWVmZGY3ZDZmMTA3ZjQ5NGI2ZWRiNDUwZTgwNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTg3
Nyw3ICs4NzcsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0
QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aQogICAgICAgICBpZiAoIWFjdGlv
bkNvbnRleHQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIHZpZXcgPSBh
Y3Rpb25Db250ZXh0LT5yYW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkudmlldygpOwor
ICAgICAgICBhdXRvIHZpZXcgPSBhY3Rpb25Db250ZXh0LT5yYW5nZS5zdGFydC5kb2N1bWVudCgp
LnZpZXcoKTsKICAgICAgICAgaWYgKCF2aWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0gYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCmluZGV4IGRlNWVhOGQ2YmM5MDNkZGVlYWFmNjEwNDRm
NDQ4NDgxOWQ2YmVlYTEuLjViOGNiNmMzOGM3YTViMTY2NzRiZjE0YWMwMTIwYzM1ZmRmM2FkZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQpAQCAtNTcwLDEwICs1NzAsOSBAQCAtIChD
R1JlY3QpYm91bmRpbmdCb3gKIC0gKE5TUmVjdClib3VuZGluZ0JveAogI2VuZGlmCiB7Ci0gICAg
Ly8gRklYTUU6IFRoZSBjYWxsIHRvIHVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cyBzaG91bGQgYmUgbW92ZWQgaW50byBXZWJDb3JlOjpSYW5nZS4KLSAgICBhdXRvJiByYW5nZSA9
ICpjb3JlKHNlbGYpOwotICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gdW5pb25SZWN0KFJlbmRlck9iamVj
dDo6YWJzb2x1dGVUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKHJhbmdlKSkpOworICAgIGF1dG8g
cmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKmNvcmUoc2VsZikpOworICAgIHJhbmdlLnN0YXJ0LmRv
Y3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgcmV0
dXJuIHVuaW9uUmVjdChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKSk7CiB9
CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC01ODMsNyArNTgyLDcgQEAgLSAoQ0dJbWFnZVJlZily
ZW5kZXJlZEltYWdlRm9yY2luZ0JsYWNrVGV4dDooQk9PTClmb3JjZUJsYWNrVGV4dAogI2VuZGlm
CiB7CiAgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqY29yZShzZWxmKSk7Ci0gICAg
YXV0byBmcmFtZSA9IG1ha2VSZWZQdHIocmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgp
LmZyYW1lKCkpOworICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKHJhbmdlLnN0YXJ0LmRvY3Vt
ZW50KCkuZnJhbWUoKSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApA
QCAtNjAyLDcgKzYwMSw3IEBAIC0gKENHSW1hZ2VSZWYpcmVuZGVyZWRJbWFnZUZvcmNpbmdCbGFj
a1RleHQ6KEJPT0wpZm9yY2VCbGFja1RleHQKIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKIHsKICAg
ICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpjb3JlKHNlbGYpKTsKLSAgICByYW5nZS5z
dGFydC5jb250YWluZXItPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKSkuYXV0b3JlbGVhc2UoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tCmluZGV4IDVlZTBiY2RmZDk5NzQzNzJhM2Vi
YzRhZDJhODdhZjgzYmRmNTNmNTEuLjI4NzY2MGZlY2FlOTg2ZGY5YjM5ZDhkNTdlMDNlYmJjZDBm
OTQxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0KQEAgLTMzLDYg
KzMzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSlNFeGVjU3RhdGUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RocmVhZENoZWNrLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dl
YlNjcmlwdE9iamVjdFByaXZhdGUuaD4KQEAgLTkyLDcgKzkzLDkgQEAgLSAoRE9NTm9kZSAqKWNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyCiAtIChOU1N0cmluZyAqKXRleHQKIHsKICAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJuIElNUEwtPnRleHQoKTsK
KyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpJTVBMKTsKKyAgICByYW5nZS5zdGFy
dC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworICAgIHJldHVybiBwbGFpblRleHQocmFuZ2Up
OwogfQogCiAtICh2b2lkKXNldFN0YXJ0OihET01Ob2RlICopcmVmTm9kZSBvZmZzZXQ6KGludClv
ZmZzZXQKQEAgLTE3MCw3ICsxNzMsNyBAQCAtIChzaG9ydCljb21wYXJlQm91bmRhcnlQb2ludHM6
KHVuc2lnbmVkIHNob3J0KWhvdyBzb3VyY2VSYW5nZTooRE9NUmFuZ2UgKilzb3VyYwogICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBpZiAoIXNvdXJjZVJhbmdl
KQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigpOwotICAgIHJldHVybiByYWlzZU9u
RE9NRXJyb3IoSU1QTC0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MoaG93LCAqY29y
ZShzb3VyY2VSYW5nZSkpKTsKKyAgICByZXR1cm4gcmFpc2VPbkRPTUVycm9yKElNUEwtPmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhob3csICpjb3JlKHNvdXJjZVJhbmdlKSkpOwogfQogCiAtICh2b2lk
KWRlbGV0ZUNvbnRlbnRzCkBAIC0yNDQsNyArMjQ3LDcgQEAgLSAoQk9PTClpbnRlcnNlY3RzTm9k
ZTooRE9NTm9kZSAqKXJlZk5vZGUKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgaWYgKCFyZWZOb2RlKQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlv
bigpOwotICAgIHJldHVybiByYWlzZU9uRE9NRXJyb3IoSU1QTC0+aW50ZXJzZWN0c05vZGUoKmNv
cmUocmVmTm9kZSkpKTsKKyAgICByZXR1cm4gSU1QTC0+aW50ZXJzZWN0c05vZGUoKmNvcmUocmVm
Tm9kZSkpOwogfQogCiAtIChzaG9ydCljb21wYXJlUG9pbnQ6KERPTU5vZGUgKilyZWZOb2RlIG9m
ZnNldDooaW50KW9mZnNldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTVVJS2l0RXh0ZW5zaW9ucy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01V
SUtpdEV4dGVuc2lvbnMubW0KaW5kZXggYWU1YzQ5YmYxNDc1OGYzMTQwOTQyMGQ5ZjZkNTVhMmU2
MzYyNjFjOS4uNTg3MWQwMDhhYWNmN2EyMmNiOGNkNmRjZmJhZjRmNGI0NzQ3YzM0NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCkBA
IC01MSw3ICs1MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxUZXh0QXJlYUVsZW1lbnQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW5saW5lQm94Lmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL05vZGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm9kZVRyYXZlcnNh
bC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJC
bG9jay5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCbG9ja0Zsb3cuaD4KQEAgLTEyNCw5ICsx
MjQsMjEgQEAgLSAodm9pZClleHRlbmQ6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRl
eHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgogICAgICAgICByYW5nZS5zZXRFbmQoKmVu
ZC5jb250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiB9CiAKKy8v
IEZJWE1FOiBDb3VsZCB1c2UgU2ltcGxlUmFuZ2U6OmludGVyc2VjdGluZ05vZGVzIGluc3RlYWQs
IGlmIHdlIGRpZCBub3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvciBv
ZiByZXR1cm5pbmcgYSBub2RlIHdpdGggbm8gY2hpbGRyZW4gd2hlbiB0aGUgcmFuZ2Ugc3RhcnRz
IGluc2lkZSBpdC4KK3N0YXRpYyBXZWJDb3JlOjpOb2RlKiBmaXJzdE5vZGVBZnRlcihjb25zdCBX
ZWJDb3JlOjpCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAocG9pbnQuY29udGFpbmVy
LT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCisgICAgICAgIHJldHVybiBwb2ludC5jb250YWluZXIu
cHRyKCk7CisgICAgaWYgKGF1dG8gY2hpbGQgPSBwb2ludC5jb250YWluZXItPnRyYXZlcnNlVG9D
aGlsZEF0KHBvaW50Lm9mZnNldCkpCisgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICBpZiAoIXBv
aW50Lm9mZnNldCkKKyAgICAgICAgcmV0dXJuIHBvaW50LmNvbnRhaW5lci5wdHIoKTsKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4ocG9pbnQu
Y29udGFpbmVyKTsKK30KKwogLSAoRE9NTm9kZSAqKWZpcnN0Tm9kZQogewotICAgIHJldHVybiBr
aXQoY29yZShzZWxmKS0+Zmlyc3ROb2RlKCkpOworICAgIHJldHVybiBraXQoZmlyc3ROb2RlQWZ0
ZXIobWFrZVNpbXBsZVJhbmdlKCpjb3JlKHNlbGYpKS5zdGFydCkpOwogfQogCiBAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCmluZGV4IGNh
ZDM1OTFiZTYzMzIzZWU2N2FhNmFmOGQxM2U0NWZkNzE2MGRhYTguLjczOGI0ZjhmMjQ4NDg0ZmQy
NzdjYjcyOGMyODAyOGQ3YjljMDA4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9XZWJET01PcGVyYXRpb25zLm1tCkBAIC0xOTEsOCArMTkxLDggQEAgLSAoV2ViQXJjaGl2
ZSAqKXdlYkFyY2hpdmUKIAogLSAoTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcKIHsKLSAgICBhdXRv
JiByYW5nZSA9ICpjb3JlKHNlbGYpOwotICAgIHJldHVybiBTdHJpbmcgeyBkb2N1bWVudFR5cGVT
dHJpbmcocmFuZ2Uub3duZXJEb2N1bWVudCgpKSArIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxB
cHBlYXJhbmNlKG1ha2VTaW1wbGVSYW5nZShyYW5nZSksIG51bGxwdHIsIEFubm90YXRlRm9ySW50
ZXJjaGFuZ2U6OlllcykgfTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpjb3Jl
KHNlbGYpKTsKKyAgICByZXR1cm4gU3RyaW5nIHsgZG9jdW1lbnRUeXBlU3RyaW5nKHJhbmdlLnN0
YXJ0LmRvY3VtZW50KCkpICsgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UocmFu
Z2UsIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6OlllcykgfTsKIH0KIAogQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCmluZGV4IDFi
YzY3ZDM2ODQyNmNjODkxYjNlNTA3OWUyYjZkZjMyYTEwNjg5OTguLmZiNzQyMDhmOTk4YzNjYWI0
ZjVhZjdlYzNjN2E0NmMyMjk5MjIxZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYlBERlZpZXcubW0KQEAgLTYzNiwyMSArNjM2LDE4IEBAIC0gKEJPT0wpbWFya2Vk
VGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZAogICAgIHJldHVybiBOTzsKIH0KIAotc3RhdGljIEJP
T0wgaXNGcmFtZUluUmFuZ2UoV2ViRnJhbWUgKmZyYW1lLCBET01SYW5nZSAqcmFuZ2UpCitzdGF0
aWMgYm9vbCBpc0ZyYW1lSW5SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYkNv
cmU6OlNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBCT09MIGluUmFuZ2UgPSBOTzsKLSAgICBm
b3IgKGF1dG8qIG93bmVyRWxlbWVudCA9IGNvcmUoZnJhbWUpLT5vd25lckVsZW1lbnQoKTsgb3du
ZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUo
KS0+b3duZXJFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3VtZW50
KCkgPT0gJmNvcmUocmFuZ2UpLT5vd25lckRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGluUmFu
Z2UgPSBbcmFuZ2UgaW50ZXJzZWN0c05vZGU6a2l0KG93bmVyRWxlbWVudCldOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8qIG93bmVyRWxlbWVudCA9IGZyYW1l
Lm93bmVyRWxlbWVudCgpOyBvd25lckVsZW1lbnQ7IG93bmVyRWxlbWVudCA9IG93bmVyRWxlbWVu
dC0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkgeworICAgICAgICBpZiAoJm93bmVyRWxlbWVu
dC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBpbnRlcnNlY3RzKHJhbmdlLCAqb3duZXJFbGVtZW50KTsKICAgICB9Ci0gICAgcmV0dXJu
IGluUmFuZ2U7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiAtIChOU1VJbnRlZ2VyKWNvdW50TWF0
Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGluRE9NUmFuZ2U6KERPTVJhbmdlICopcmFu
Z2Ugb3B0aW9uczooV2ViRmluZE9wdGlvbnMpb3B0aW9ucyBsaW1pdDooTlNVSW50ZWdlcilsaW1p
dCBtYXJrTWF0Y2hlczooQk9PTCltYXJrTWF0Y2hlcwogewotICAgIGlmIChyYW5nZSAmJiAhaXNG
cmFtZUluUmFuZ2UoW2RhdGFTb3VyY2Ugd2ViRnJhbWVdLCByYW5nZSkpCisgICAgaWYgKHJhbmdl
ICYmICFpc0ZyYW1lSW5SYW5nZSgqY29yZShbZGF0YVNvdXJjZSB3ZWJGcmFtZV0pLCBtYWtlU2lt
cGxlUmFuZ2UoKmNvcmUocmFuZ2UpKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUERGU2Vs
ZWN0aW9uICpwcmV2aW91c01hdGNoID0gbmlsOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDdkZjA4YmE1YTA0NGJiNDE5NmJiZDBlNTUwYmQzNjg1
NDRmOTkzYjIuLjVjNDRmYTc0YzZkZDRmMTM1NDdhYTgwYmVkNWY1MTM1Y2RkYjdlMjYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAyMC0wOC0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlIGFsbW9zdCBhbGwgdGhlIHJlbWFpbmluZyB1c2VzIG9mIGxpdmUgcmFuZ2VzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3NTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOiBBZGRlZCBhIHRlc3QgY2FzZSBmb3IgYSBub24tdXNlci1hZ2VudCBzaGFk
b3cgdHJlZS4KKwogMjAyMC0wOC0yNiAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CiAKICAgICAgICBbd2Via2l0Y29yZXB5XSBTdGFuZGFyZCBQb3BlbiBtb2NraW5nIEFQSQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai94
Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1Rlc3RXZWJLaXRBUEkueGNzY2hlbWUgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMv
VGVzdFdlYktpdEFQSS54Y3NjaGVtZQppbmRleCA1ZjVlYzJlNGFlYzM5ZWRjMzlmYzdmODVjN2Q5
NjdlNWM0OTQ2OTRlLi4wZDI0ZWUzNjkzZTVmMTJhYWM0NGRlNjE0MzI5ZjRlOTk5NmU0ZDgyIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3hj
c2hhcmVkZGF0YS94Y3NjaGVtZXMvVGVzdFdlYktpdEFQSS54Y3NjaGVtZQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVt
ZXMvVGVzdFdlYktpdEFQSS54Y3NjaGVtZQpAQCAtNTAsNiArNTAsMTIgQEAKICAgICAgICAgICAg
IFJlZmVyZW5jZWRDb250YWluZXIgPSAiY29udGFpbmVyOlRlc3RXZWJLaXRBUEkueGNvZGVwcm9q
Ij4KICAgICAgICAgIDwvQnVpbGRhYmxlUmVmZXJlbmNlPgogICAgICAgPC9CdWlsZGFibGVQcm9k
dWN0UnVubmFibGU+CisgICAgICA8Q29tbWFuZExpbmVBcmd1bWVudHM+CisgICAgICAgICA8Q29t
bWFuZExpbmVBcmd1bWVudAorICAgICAgICAgICAgYXJndW1lbnQgPSAiLS1ndGVzdF9maWx0ZXI9
KkRvY3VtZW50T3JkZXIqIgorICAgICAgICAgICAgaXNFbmFibGVkID0gIllFUyI+CisgICAgICAg
ICA8L0NvbW1hbmRMaW5lQXJndW1lbnQ+CisgICAgICA8L0NvbW1hbmRMaW5lQXJndW1lbnRzPgog
ICAgPC9MYXVuY2hBY3Rpb24+CiAgICA8UHJvZmlsZUFjdGlvbgogICAgICAgYnVpbGRDb25maWd1
cmF0aW9uID0gIlJlbGVhc2UiCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvRG9jdW1lbnRPcmRlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvRG9jdW1lbnRPcmRlci5jcHAKaW5kZXggMDdlNjdkNGNkMGNhZDViNjZiOWI5NjdmYzY5
NTQ5NTAwMmI3NDM2MS4uOTljNjAwYzJlODM0MTgyNTY2MjBmZTJjNDAxMWFiNWRiMDcwYjVlYyAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3Jk
ZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9y
ZGVyLmNwcApAQCAtMjUsMTMgKzI1LDE0IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lu
Y2x1ZGUgPFdlYkNvcmUvQm91bmRhcnlQb2ludC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxCb2R5RWxlbWVudC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTERpdkVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxIdG1sRWxlbWVu
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRleHRBcmVhRWxlbWVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUG9zaXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYWRvd1Jvb3QuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuaD4KIAogI2RlZmluZSBFWFBFQ1RfQk9USChhLCBiLCBmb3J3YXJk
LCByZXZlcnNlZCkgZG8geyBFWFBFQ1RfU1RSRVEoc3RyaW5nKGRvY3VtZW50T3JkZXIoYSwgYikp
LCBmb3J3YXJkKTsgRVhQRUNUX1NUUkVRKHN0cmluZyhkb2N1bWVudE9yZGVyKGIsIGEpKSwgcmV2
ZXJzZWQpOyB9IHdoaWxlICgwKQpAQCAtMzksNiArNDAsMTQgQEAKICNkZWZpbmUgRVhQRUNUX0xF
U1MoYSwgYikgRVhQRUNUX0JPVEgoYSwgYiwgImxlc3MiLCAiZ3JlYXRlciIpCiAjZGVmaW5lIEVY
UEVDVF9VTk9SREVSRUQoYSwgYikgRVhQRUNUX0JPVEgoYSwgYiwgInVub3JkZXJlZCIsICJ1bm9y
ZGVyZWQiKQogCisjZGVmaW5lIEVYUEVDVF9DT05UQUlOU19TRUxGKGEpIEVYUEVDVF9UUlVFKGNv
bnRhaW5zKGEsIGEpKQorI2RlZmluZSBFWFBFQ1RfTkVTVEVEKGEsIGIpIGRvIHsgRVhQRUNUX1RS
VUUoY29udGFpbnMoYSwgYikpOyBFWFBFQ1RfRkFMU0UoY29udGFpbnMoYiwgYSkpOyB9IHdoaWxl
ICgwKQorI2RlZmluZSBFWFBFQ1RfTk9UX0NPTlRBSU5FRChhLCBiKSBkbyB7IEVYUEVDVF9GQUxT
RShjb250YWlucyhhLCBiKSk7IEVYUEVDVF9GQUxTRShjb250YWlucyhiLCBhKSk7IH0gd2hpbGUg
KDApCisKKyNkZWZpbmUgRVhQRUNUX0lOVEVSU0VDVFNfU0VMRihhKSBFWFBFQ1RfVFJVRShpbnRl
cnNlY3RzKGEsIGEpKQorI2RlZmluZSBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dBWVMoYSwgYikg
ZG8geyBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKGEsIGIpKTsgRVhQRUNUX1RSVUUoaW50ZXJzZWN0
cyhiLCBhKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIEVYUEVDVF9OT1RfSU5URVJTRUNUSU5HX0JP
VEhfV0FZUyhhLCBiKSBkbyB7IEVYUEVDVF9GQUxTRShpbnRlcnNlY3RzKGEsIGIpKTsgRVhQRUNU
X0ZBTFNFKGludGVyc2VjdHMoYiwgYSkpOyB9IHdoaWxlICgwKQorCiBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMTQxLDYgKzE1MCwxMCBA
QCBURVNUKERvY3VtZW50T3JkZXIsIE5vZGUpCiAKICAgICBhdXRvJiBoID0gKmctPmlubmVyVGV4
dEVsZW1lbnQoKTsKICAgICBFWFBFQ1RfTEVTUyhib2R5LCBoKTsKKworICAgIGF1dG8mIGkgPSBh
LT5hdHRhY2hTaGFkb3coeyBTaGFkb3dSb290TW9kZTo6Q2xvc2VkIH0pLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpOworICAgIEVYUEVDVF9MRVNTKGJvZHksIGkpOworICAgIEVYUEVDVF9MRVNTKGksIGQp
OwogfQogCiBURVNUKERvY3VtZW50T3JkZXIsIEJvdW5kYXJ5UG9pbnRPZmZzZXRaZXJvKQpAQCAt
MTk3LDYgKzIxMCw3IEBAIFRFU1QoRG9jdW1lbnRPcmRlciwgQm91bmRhcnlQb2ludE9mZnNldHMp
CiAKICAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VC
b3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSk7CiAgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5
UG9pbnQoYm9keSwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSk7CisgICAgRVhQ
RUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMSksIG1ha2VCb3VuZGFyeVBvaW50KGRv
Y3VtZW50LCAxKSk7CiAKICAgICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KTsKICAgICBib2R5LmFwcGVuZENoaWxkKGEpOwpAQCAtNDUyLDQgKzQ2NiwyNDQgQEAgVEVT
VChEb2N1bWVudE9yZGVyLCBQb3NpdGlvbnMpCiAgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVNf
QihtYWtlUG9zaXRpb25BZnRlcihkb2N1bWVudCksIGgsIDAsIGdyZWF0ZXIpOwogfQogCitURVNU
KERvY3VtZW50T3JkZXIsIElzUG9pbnRJblJhbmdlKQoreworICAgIGF1dG8gZG9jdW1lbnQgPSBj
cmVhdGVEb2N1bWVudCgpOworICAgIGF1dG8mIGRvY3VtZW50RWxlbWVudCA9ICpkb2N1bWVudC0+
ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgYXV0byYgYm9keSA9ICpkb2N1bWVudC0+Ym9keSgpOwor
CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNv
bnRlbnRzKGRvY3VtZW50KSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApKSk7CisgICAg
RVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KGRvY3VtZW50KSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpKSk7CisgICAgRVhQRUNU
X0ZBTFNFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1
bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAyKSkpOworICAgIEVYUEVDVF9UUlVF
KGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCks
IG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDApKSk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludElu
UmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZUJvdW5k
YXJ5UG9pbnQoYm9keSwgMSkpKTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQb2ludChi
b2R5LCAyKSkpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFu
Z2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1
bWVudEVsZW1lbnQsIDApKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpKTsKKyAgICBFWFBF
Q1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQo
ZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSksIG1ha2VCb3VuZGFyeVBv
aW50KGJvZHksIDApKSk7CisKKyAgICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQb2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoaXNQb2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGJvZHkpLCBtYWtlQm91bmRhcnlQb2ludChhLCAwKSkpOworCisgICAgYm9keS5hcHBlbmRD
aGlsZChhKTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQb2ludChhLCAwKSkpOworICAg
IEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQ
b2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGEsIDApKSwgbWFrZUJvdW5kYXJ5
UG9pbnQoYSwgMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQb2ludEluUmFuZ2UobWFrZVNpbXBs
ZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQo
Ym9keSwgMCkpLCBtYWtlQm91bmRhcnlQb2ludChhLCAwKSkpOworICAgIEVYUEVDVF9UUlVFKGlz
UG9pbnRJblJhbmdlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwg
MCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEpKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQb2ludEluUmFuZ2UobWFrZVNpbXBsZVJhbmdlKG1ha2VC
b3VuZGFyeVBvaW50KGJvZHksIDEpLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpLCBt
YWtlQm91bmRhcnlQb2ludChhLCAwKSkpOworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdl
KG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSwgbWFrZUJvdW5kYXJ5
UG9pbnQoZG9jdW1lbnQsIDEpKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpKTsKKworICAgIGF1
dG8gYiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGJvZHkuYXBwZW5k
Q2hpbGQoYik7CisKKyAgICBhdXRvIGMgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KTsKKyAgICBiLT5hcHBlbmRDaGlsZChjKTsKKworICAgIGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGEtPmFwcGVuZENoaWxkKGQpOworCisgICAgYXV0byBl
ID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byBmID0gSFRNTERp
dkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgZS0+YXBwZW5kQ2hpbGQoZik7CisgICAg
RVhQRUNUX0ZBTFNFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cyhib2R5KSwgbWFrZUJvdW5kYXJ5UG9pbnQoZiwgMCkpKTsKKworICAgIGF1dG8gZyA9IEhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byYgaCA9ICpnLT5pbm5l
clRleHRFbGVtZW50KCk7CisgICAgYy0+YXBwZW5kQ2hpbGQoZyk7CisgICAgRVhQRUNUX1RSVUUo
aXNQb2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBtYWtl
Qm91bmRhcnlQb2ludChoLCAwKSkpOworfQorCitURVNUKERvY3VtZW50T3JkZXIsIFJhbmdlQ29u
dGFpbnNSYW5nZSkKK3sKKyAgICBhdXRvIGRvY3VtZW50ID0gY3JlYXRlRG9jdW1lbnQoKTsKKyAg
ICBhdXRvJiBkb2N1bWVudEVsZW1lbnQgPSAqZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwor
ICAgIGF1dG8mIGJvZHkgPSAqZG9jdW1lbnQtPmJvZHkoKTsKKworICAgIEVYUEVDVF9DT05UQUlO
U19TRUxGKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCkpOworICAgIEVY
UEVDVF9DT05UQUlOU19TRUxGKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVu
dEVsZW1lbnQpKTsKKyAgICBFWFBFQ1RfQ09OVEFJTlNfU0VMRihtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoYm9keSkpOworCisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
ZG9jdW1lbnRFbGVtZW50KSk7CisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9k
eSkpOworICAgIEVYUEVDVF9ORVNURUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRv
Y3VtZW50RWxlbWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSk7CisK
KyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVu
dCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpKTsKKwor
ICAgIEVYUEVDVF9ORVNURUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50
RWxlbWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSk7CisKKyAgICBF
WFBFQ1RfTkVTVEVEKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1h
a2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCkpKTsKKyAgICBFWFBF
Q1RfTkVTVEVEKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VT
aW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpKTsKKyAgICBFWFBFQ1Rf
Tk9UX0NPTlRBSU5FRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBt
YWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDIpKSk7CisKKyAgICBF
WFBFQ1RfTkVTVEVEKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwg
MCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAyKSksIG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhkb2N1bWVudCkpOworICAgIEVYUEVDVF9OT1RfQ09OVEFJTkVEKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91
bmRhcnlQb2ludChkb2N1bWVudCwgMSksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAyKSkp
OworCisgICAgRVhQRUNUX05PVF9DT05UQUlORUQobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFy
eVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAw
KSksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSk7CisgICAgRVhQRUNUX05F
U1RFRChtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtl
Qm91bmRhcnlQb2ludChib2R5LCAwKSksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2lu
dChib2R5LCAwKSkpOworCisgICAgYXV0byBhID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1
bWVudCk7CisgICAgRVhQRUNUX05PVF9DT05UQUlORUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNv
bnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGEpKTsKKwor
ICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisKKyAgICBhdXRvIGIgPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBib2R5LmFwcGVuZENoaWxkKGIpOworCisgICAgYXV0byBj
ID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5kQ2hpbGQo
Yyk7CisKKyAgICBhdXRvIGQgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAg
ICBhLT5hcHBlbmRDaGlsZChkKTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQpOworICAgIGF1dG8gZiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQpOworICAgIGUtPmFwcGVuZENoaWxkKGYpOworICAgIEVYUEVDVF9OT1RfQ09OVEFJTkVEKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9k
ZUNvbnRlbnRzKGYpKTsKKworICAgIGF1dG8gZyA9IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCk7CisgICAgYXV0byYgaCA9ICpnLT5pbm5lclRleHRFbGVtZW50KCk7CisgICAg
Yy0+YXBwZW5kQ2hpbGQoZyk7CisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoYm9keSksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhoKSk7Cit9
CisKK1RFU1QoRG9jdW1lbnRPcmRlciwgUmFuZ2VJbnRlcnNlY3RzUmFuZ2UpCit7CisgICAgYXV0
byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CisgICAgYXV0byYgZG9jdW1lbnRFbGVtZW50
ID0gKmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBhdXRvJiBib2R5ID0gKmRvY3Vt
ZW50LT5ib2R5KCk7CisKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19TRUxGKG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhkb2N1bWVudCkpOworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX1NFTEYo
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCkpOworICAgIEVY
UEVDVF9JTlRFUlNFQ1RTX1NFTEYobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkp
KTsKKworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9j
dW1lbnRFbGVtZW50KSk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhib2R5KSk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoYm9keSkpOworCisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlT
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpKTsKKworICAgIEVYUEVDVF9JTlRFUlNF
Q1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVt
ZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsKKworICAgIEVYUEVD
VF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9j
dW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApKSk7
CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhkb2N1bWVudCksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1
bWVudCwgMSkpKTsKKyAgICBFWFBFQ1RfTk9UX0lOVEVSU0VDVElOR19CT1RIX1dBWVMobWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VC
b3VuZGFyeVBvaW50KGRvY3VtZW50LCAyKSkpOworCisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9U
SF9XQVlTKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1h
a2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAyKSksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cyhkb2N1bWVudCkpOworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJv
dW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikp
KTsKKworICAgIEVYUEVDVF9OT1RfSU5URVJTRUNUSU5HX0JPVEhfV0FZUyhtYWtlU2ltcGxlUmFu
Z2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1
bWVudEVsZW1lbnQsIDApKSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsK
KyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dBWVMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3Vu
ZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpLCBtYWtl
U2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpKTsKKworICAgIGF1dG8gYSA9
IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIEVYUEVDVF9OT1RfSU5URVJT
RUNUSU5HX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQp
LCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYSkpOworCisgICAgYm9keS5hcHBlbmRD
aGlsZChhKTsKKworICAgIGF1dG8gYiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQp
OworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYik7CisKKyAgICBhdXRvIGMgPSBIVE1MRGl2RWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBiLT5hcHBlbmRDaGlsZChjKTsKKworICAgIGF1dG8g
ZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGEtPmFwcGVuZENoaWxk
KGQpOworCisgICAgYXV0byBlID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7Cisg
ICAgYXV0byBmID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgZS0+YXBw
ZW5kQ2hpbGQoZik7CisgICAgRVhQRUNUX05PVF9JTlRFUlNFQ1RJTkdfQk9USF9XQVlTKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNv
bnRlbnRzKGYpKTsKKworICAgIGF1dG8gZyA9IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNyZWF0ZShk
b2N1bWVudCk7CisgICAgYXV0byYgaCA9ICpnLT5pbm5lclRleHRFbGVtZW50KCk7CisgICAgYy0+
YXBwZW5kQ2hpbGQoZyk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGgpKTsKK30KKworVEVTVChEb2N1bWVudE9yZGVyLCBSYW5nZUNvbnRhaW5zTm9kZSkKK3sK
KyAgICBhdXRvIGRvY3VtZW50ID0gY3JlYXRlRG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVu
dEVsZW1lbnQgPSAqZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIGF1dG8mIGJvZHkg
PSAqZG9jdW1lbnQtPmJvZHkoKTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5zKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGRvY3VtZW50RWxlbWVudCkpOworICAg
IEVYUEVDVF9UUlVFKGNvbnRhaW5zKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1
bWVudCksIGJvZHkpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250YWlucyhtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50KSwgYm9keSkpOworCisgICAgRVhQRUNUX0ZB
TFNFKGNvbnRhaW5zKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGRv
Y3VtZW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRhaW5zKG1ha2VTaW1wbGVSYW5nZShtYWtl
Qm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAy
KSksIGRvY3VtZW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRhaW5zKG1ha2VTaW1wbGVSYW5n
ZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3Vt
ZW50RWxlbWVudCwgMCkpLCBib2R5KSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRhaW5zKG1ha2VT
aW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBv
aW50KGJvZHksIDApKSwgYm9keSkpOworICAgIEVYUEVDVF9GQUxTRShjb250YWlucyhtYWtlU2lt
cGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2lu
dChib2R5LCAxKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250YWlucyhtYWtlU2ltcGxl
UmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChk
b2N1bWVudEVsZW1lbnQsIDEpKSwgYm9keSkpOworCisgICAgYXV0byBhID0gSFRNTERpdkVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRhaW5zKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGEpKTsKKworICAgIGJvZHkuYXBwZW5k
Q2hpbGQoYSk7CisKKyAgICBhdXRvIGIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KTsKKyAgICBib2R5LmFwcGVuZENoaWxkKGIpOworCisgICAgYXV0byBjID0gSFRNTERpdkVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5kQ2hpbGQoYyk7CisKKyAgICBhdXRv
IGQgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhLT5hcHBlbmRDaGls
ZChkKTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwor
ICAgIGF1dG8gZiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGUtPmFw
cGVuZENoaWxkKGYpOworICAgIEVYUEVDVF9GQUxTRShjb250YWlucyhtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoYm9keSksIGYpKTsKKworICAgIGF1dG8gZyA9IEhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byYgaCA9ICpnLT5pbm5lclRleHRFbGVt
ZW50KCk7CisgICAgYy0+YXBwZW5kQ2hpbGQoZyk7CisgICAgRVhQRUNUX1RSVUUoY29udGFpbnMo
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBoKSk7Cit9CisKK1RFU1QoRG9j
dW1lbnRPcmRlciwgUmFuZ2VJbnRlcnNlY3RzTm9kZSkKK3sKKyAgICBhdXRvIGRvY3VtZW50ID0g
Y3JlYXRlRG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudEVsZW1lbnQgPSAqZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOworICAgIGF1dG8mIGJvZHkgPSAqZG9jdW1lbnQtPmJvZHkoKTsK
KworICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGRvY3VtZW50KSwgZG9jdW1lbnRFbGVtZW50KSk7CisgICAgRVhQRUNUX1RSVUUoaW50ZXJz
ZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBib2R5KSk7Cisg
ICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
ZG9jdW1lbnRFbGVtZW50KSwgYm9keSkpOworCisgICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyht
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBkb2N1bWVudCkpOworICAg
IEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50
KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDIpKSwgZG9jdW1lbnQp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoaW50ZXJzZWN0cyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5k
YXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudEVsZW1lbnQs
IDApKSwgYm9keSkpOworICAgIEVYUEVDVF9GQUxTRShpbnRlcnNlY3RzKG1ha2VTaW1wbGVSYW5n
ZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudEVsZW1lbnQsIDEpLCBtYWtlQm91bmRhcnlQb2lu
dChkb2N1bWVudCwgMSkpLCBib2R5KSk7CisgICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtl
U2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQ
b2ludChib2R5LCAwKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKG1ha2VT
aW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBv
aW50KGJvZHksIDEpKSwgYm9keSkpOworICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVNp
bXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9p
bnQoZG9jdW1lbnRFbGVtZW50LCAxKSksIGJvZHkpKTsKKworICAgIGF1dG8gYSA9IEhUTUxEaXZF
bGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIEVYUEVDVF9GQUxTRShpbnRlcnNlY3RzKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGEpKTsKKworICAgIGJvZHku
YXBwZW5kQ2hpbGQoYSk7CisKKyAgICBhdXRvIGIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKKyAgICBib2R5LmFwcGVuZENoaWxkKGIpOworCisgICAgYXV0byBjID0gSFRNTERp
dkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5kQ2hpbGQoYyk7CisKKyAg
ICBhdXRvIGQgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhLT5hcHBl
bmRDaGlsZChkKTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQpOworICAgIGF1dG8gZiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAg
IGUtPmFwcGVuZENoaWxkKGYpOworICAgIEVYUEVDVF9GQUxTRShpbnRlcnNlY3RzKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgZSkpOworICAgIEVYUEVDVF9UUlVFKGludGVy
c2VjdHMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGYpLCBlKSk7CisgICAgRVhQRUNU
X0ZBTFNFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBm
KSk7CisKKyAgICBhdXRvIGcgPSBIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQp
OworICAgIGF1dG8mIGggPSAqZy0+aW5uZXJUZXh0RWxlbWVudCgpOworICAgIGMtPmFwcGVuZENo
aWxkKGcpOworICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0aW5nTm9k
ZUNvbnRlbnRzKGJvZHkpLCBoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407347</attachid>
            <date>2020-08-26 15:51:42 -0700</date>
            <delta_ts>2020-08-26 16:10:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215755-20200826155141.patch</filename>
            <type>text/plain</type>
            <size>161445</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjQ0YTA1NzQ0NGRjMTNk
OTk0YThmNTk0NTkwZWU3MGM2N2RiMzdjNy4uNTdlZjQzYWFjOGNlMTkwMjE1MjIxOWFkOGY5Nzg3
OWIwZjMzZTMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NCBAQAorMjAyMC0wOC0yNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwg
dGhlIHJlbWFpbmluZyB1c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcik6IFVzZSBkb2N1
bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1Jh
bmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNsb3Nlc3RUb1Jhbmdl
KTogVXNlIGNoYXJhY3RlckNvdW50LiBBbHNvIHJlbW92ZWQgdW5ubmVjZXNzYXJ5IGFzc2VydGlv
bnMKKyAgICAgICAgYW5kIHNwZWNpYWwgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbiBjb25z
dCk6IFVzZSBkb2N1bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOiBVc2UgaW50
ZXJzZWN0cy4KKyAgICAgICAgQWxzbyB1c2UgZmlyc3RSYW5nZSBpbnN0ZWFkIG9mIHRvTm9ybWFs
aXplZFJhbmdlLgorCisgICAgICAgICogZG9tL0VsZW1lbnQuaDogRXhwb3J0IGF0dGFjaFNoYWRv
dyBzbyBpdCBjYW4gYmUgdXNlZCBpbiB1bml0IHRlc3RzLgorCisgICAgICAgICogZG9tL05vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTaWJsaW5nU3Vic2VxdWVudCk6IEFkZGVkIGEgY291
cGxlIGFzc2VydGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpkb2N1bWVudE9yZGVyKTogQWRkIGxv
Z2ljIHNvIHRoYXQgc2hhZG93IHRyZWVzIGFyZSBvcmRlcmVkIGJlZm9yZSB0aGUKKyAgICAgICAg
b3RoZXIgY2hpbGRyZW4gb2YgdGhlaXIgaG9zdHMuCisKKyAgICAgICAgKiBkb20vTm9kZS5oOiBB
ZGRlZCBpc19uZXEsIGlzX2x0ZXEsIGFuZCBpc19ndGVxIGZvciB1c2Ugd2l0aCBQYXJ0aWFsT3Jk
ZXJpbmcsCisgICAgICAgIG1hdGNoaW5nIHRoZSBuYW1lcyBhbmQgYmVoYXZpb3IgZnJvbSBDKysy
MC4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6IFJlbW92ZWQgdW51c2VkIENvb3JkaW5hdGVT
cGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpSYW5nZSk6IFVwZGF0ZWQgc2luY2UgUmFu
Z2VCb3VuZGFyeVBvaW50IG5vdyB1c2VzIHJlZmVyZW5jZXMuCisgICAgICAgIChXZWJDb3JlOjpS
YW5nZTo6dXBkYXRlRG9jdW1lbnQpOiBSZW5hbWVkIGZyb20gc2V0RG9jdW1lbnQgYW5kIGNoYW5n
ZWQgc28gdGhhdAorICAgICAgICBpdCBtYWludGFpbnMgdGhlIGludmFyaWFudHMgd2l0aG91dCBy
ZXF1aXJpbmcgdGhlIGNhbGxlciBwYXNzIGFueSBhcmd1bWVudHMuCisgICAgICAgIEFsc28gdXBk
YXRlZCBmb3IgUmFuZ2VCb3VuZGFyeVBvaW50IGFubWUgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjpzZXRTdGFydCk6IFVwZGF0ZWQgZm9yIGNoZWNrTm9kZU9mZnNldFBh
aXIgbmFtZSBjaGFuZ2UuCisgICAgICAgIFJlbW92ZWQgdG9vLWNvbXBsZXggY29kZSBmb3IgbW92
aW5nIGJldHdlZW4gZG9jdW1lbnRzLiBVc2UgZG9jdW1lbnRPcmRlcgorICAgICAgICBpbnN0ZWFk
IG9mIGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5lciB0byBjaGVjayBmb3Igc3RhcnQvZW5k
IHRoYXQgaGF2ZQorICAgICAgICBpbmNvcnJlY3Qgb3JkZXIgb3Igbm8gY29tbW9uIGFuY2VzdG9y
LiBVc2UgdXBkYXRlRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6aXNQb2ludEluUmFuZ2UpOiBVc2UgaXNQ
b2ludEluUmFuZ2UgdGhhdCB0YWtlcyBhIFNpbXBsZVJhbmdlLgorICAgICAgICBBbHNvIHVwZGF0
ZWQgZm9yIGNoZWNrTm9kZU9mZnNldFBhaXIgbmFtZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Y29tcGFyZVBvaW50IGNvbnN0KTogVXNlIGRvY3VtZW50T3JkZXIuIERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVOb2RlIGNvbnN0KTogVXNlIGRvY3VtZW50
T3JkZXIuCisgICAgICAgIChXZWJDb3JlOjp0b3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyBjb25zdCk6IERlbGV0ZWQgbW9yZSBvdmVy
bG9hZHMuCisgICAgICAgIEtlcHQgb25seSB0aGUgb25lIG5lZWRlZCBmb3IgYmluZGluZ3MsIGFu
ZCByZW5hbWVkIGl0IGZyb20KKyAgICAgICAgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGlu
Z3MuIEFsc28gZml4ZWQgdGhlIGltcGxlbWVudGF0aW4gdG8gYmUgc2ltcGxlciwKKyAgICAgICAg
dXNlIGRvY3VtZW50T3JkZXIsIGFuZCBtYXRjaCB0aGUgRE9NIHNwZWNpZmljYXRpb24gbW9yZSBj
bG9zZWx5ICh3aXRob3V0IGEKKyAgICAgICAgYmVoYXZpb3IgY2hhbmdlKS4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpib3VuZGFyeVBvaW50c1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjppbnRlcnNlY3RzTm9kZSBjb25zdCk6IFVzZSBpbnRlcnNlY3Rz
IGZyb20gU2ltcGxlUmFuZ2UuCisgICAgICAgIEFsc28gZG9uJ3QgcmFpc2UgZXhjZXB0aW9ucy4K
KyAgICAgICAgKFdlYkNvcmU6Omxlbmd0aE9mQ29udGVudHNJbk5vZGUpOiBEZWxldGVkLiBUaGlz
IGdpdmVzIHRoZSBzYW1lIHJlc3VsdCBhcworICAgICAgICBOb2RlOjpsZW5ndGgsIGJ1dCBsZXNz
IGVmZmljaWVudGx5LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnByb2Nlc3NDb250ZW50cyk6
IFVwZGF0ZWQgc2luY2UgUmFuZ2VCb3VuZGFyeVBvaW50IG5vdworICAgICAgICB1c2VzIHJlZmVy
ZW5jZXMuCisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cyk6
IFJlbW92ZWQgb2Jzb2xldGUgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0b1N0
cmluZyBjb25zdCk6IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyBhbmQKKyAgICAgICAgY2hhcmFjdGVy
RGF0YU9mZnNldFJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRleHQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmRldGFjaCk6IE1vdmVkIHRvIHRoZSBo
ZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y2hlY2tOb2RlT2Zmc2V0UGFpciBjb25z
dCk6IFJuZWFtZWQgZnJvbSBjaGVja05vZGVXT2Zmc2V0LgorICAgICAgICAoV2ViQ29yZTo6UmFu
Z2U6OmNsb25lUmFuZ2UpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnNldFN0YXJ0QWZ0ZXIpOiBUd2Vha2VkIGNvZGluZyBzdHlsZS4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpzZXRFbmRCZWZvcmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjpzZXRFbmRBZnRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVj
dE5vZGUpOiBEaXR0by4gQWxzbyByZW1vdmVkIHVubmVjZXNzYXJ5IGNvZGUgdG8KKyAgICAgICAg
Y2FsbCBzZXREb2N1bWVudCwgc2luY2Ugc2V0U3RhcnQgdGFrZXMgY2FyZSBvZiB0aGF0LgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OnNldFN0YXJ0QmVmb3JlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6Zmlyc3ROb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpwYXN0TGFzdE5vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFyZVJh
bmdlc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlc092ZXJsYXApOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKTog
VHdlYWtlZCBjb2Rpbmcgc3R5bGUgYW5kIHVwZGF0ZWQKKyAgICAgICAgc2luY2UgUmFuZ2VCb3Vu
ZGFyeVBvaW50IHVzZXMgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6bm9k
ZUNoaWxkcmVuQ2hhbmdlZCk6IFVzZSBtX293bmVyRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3Jl
Ojpib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQpOiBSZW1vdmVkIHVubmVlZGVkIGNv
ZGUKKyAgICAgICAgdG8gaGFuZGxlIGNhc2Ugd2hlcmUgb25lIG9mIHRoZSBjaGlsZHJlbiBpcyB0
aGUgY2hpbGRCZWZvcmUgYnV0IHRoZQorICAgICAgICBub2RlIGlzIG5vdCBpbnNpZGUgdGhlIGNv
bnRhaW5lciAtLSB0aGF0IGNhc2UgZG9lc24ndCBleGlzdC4gVXNlCisgICAgICAgIE5vZGU6OmNv
bnRhaW5zLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVDaGlsZHJlbldpbGxCZVJlbW92
ZWQpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2Rl
V2lsbEJlUmVtb3ZlZCk6IFNpbXBsaWZ5IGxvZ2ljIHVzaW5nCisgICAgICAgIFJhbmdlOjpjb250
YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZCk6IFVzZSBt
X293bmVyRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cGFyZW50bGVzc05vZGVN
b3ZlZFRvTmV3RG9jdW1lbnRBZmZlY3RzUmFuZ2UpOgorICAgICAgICBVcGRhdGVkIHNpbmNlIFJh
bmdlQm91bmRhcnlQb2ludCB1c2VzIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6Ym91
bmRhcnlUZXh0SW5zZXJ0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4
dFJlbW92ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dE5vZGVzTWVy
Z2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyeVRleHROb2Rlc1NwbGl0KTog
RGl0dG8uCisgICAgICAgIChzaG93VHJlZSk6IFJlbW92ZWQgY2FsbCB0byBib3VuZGFyeVBvaW50
c1ZhbGlkLiBUaGF0J3MgY2hlY2tpbmcgc29tZXRoaW5nCisgICAgICAgIHRoZSBjbGFzcyBhbHJl
YWR5IHRyZWF0cyBhcyBhbiBpbnZhcmlhbnQsIHNvIGl0J3Mgb2Jzb2xldGUgY29kZSBsZWZ0IGZy
b20KKyAgICAgICAgbG9uZyBhZ28gd2hlbiB3ZSBkaWRuJ3QgaGF2ZSB0aGF0IGltcGxlbWVudGVk
IGNvcnJlY3RseS4KKworICAgICAgICAqIGRvbS9SYW5nZS5oOiBSZW9yZ2FuaXplZCB0aGUgaGVh
ZGVyIHRvIG1hdGNoIHRoZSBJREwgZmlsZS4KKyAgICAgICAgUmVtb3ZlZCBvd25lckRvY3VtZW50
LCBjb21wYXJlQm91bmRhcnlQb2ludHMgb3ZlcmxvYWRzIG90aGVyIHRoYW4gdGhlIG9uZQorICAg
ICAgICB1c2VkIGZyb20gYmluZGluZ3MsIGZpcnN0Tm9kZSwgcGFzdExhc3ROb2RlLCB0ZXh0LCBj
b250YWlucywgYXJlUmFuZ2VzRXF1YWwsCisgICAgICAgIGFuZCByYW5nZXNPdmVybGFwLiBBbHNv
IHVwZGF0ZWQgc2luY2UgUmFuZ2VCb3VuZGFyeVBvaW50Ojpjb250YWluZXIgaXMgbm93CisgICAg
ICAgIGEgcmVmZXJlbmNlLiBNb3ZlZCBkZXRhY2ggZnVuY3Rpb24gaGVyZSB0byB0aGUgaGVhZGVy
IGFzIGFuIGVtcHR5IGlubGluZS4KKworICAgICAgICAqIGRvbS9SYW5nZS5pZGw6IENoYW5nZWQg
c3RhcnQvZW5kT2Zmc2V0IHRvIHVuc2lnbmVkLiBTdG9wcGVkIHVzaW5nIHRoZQorICAgICAgICBu
YW1lIGNvbXBhcmVCb3VuZGFyeVBvaW50ZXJzRm9yQmluZGluZ3MuIFVwZGF0ZWQgaW50ZXJzZWN0
c05vZGUgdG8gbm90CisgICAgICAgIHRocm93IGV4Y2VwdGlvbnMgYXMgY2FsbGVkIGZvciBpbiB0
aGUgRE9NIHNwZWNpZmljYXRpb24uIFR3ZWFrZWQgY29tbWVudHMuCisKKyAgICAgICAgKiBkb20v
UmFuZ2VCb3VuZGFyeVBvaW50Lmg6IENoYW5nZWQgY29uc3RydWN0b3IgYXJndW1lbnQgdG8gYSBy
ZWZlcmVuY2UuCisgICAgICAgIFJlbmFtZWQgc2V0VG9CZWZvcmVDaGlsZCwgc2V0VG9BZnRlckNo
aWxkLCBzZXRUb1N0YXJ0T2ZOb2RlLCBhbmQgc2V0VG9FbmRPZk5vZGUKKyAgICAgICAgdG8gc2V0
VG9CZWZvcmVOb2RlLCBzZXRUb0FmdGVyTm9kZSwgc2V0VG9CZWZvcmVDb250ZW50cywgc2V0VG9B
ZnRlckNvbnRlbnRzLgorICAgICAgICBNZXJnZWQgZW5zdXJlT2Zmc2V0SXNWYWxpZCBpbnRvIHRo
ZSBvZmZzZXQgZnVuY3Rpb24uIENoYW5nZWQgbV9jb250YWluZXJOb2RlCisgICAgICAgIGludG8g
YSBSZWY8PiBhbmQgcmVuYW1lZCBpdCBtX2NvbnRhaW5lci4gUmVtb3ZlZCBjbGVhci4KKworICAg
ICAgICAqIGRvbS9TaW1wbGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1BvaW50SW5S
YW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRPcmRlcik6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omlu
dGVyc2VjdHMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVuaW9uUmFuZ2VzKTogQWRkZWQu
CisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorCisgICAg
ICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVQb3Np
dGlvbnMpOiBVc2UgZG9jdW1lbnRPcmRlci4KKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2li
bHlDb250YWluZWRXaXRoaW4pOiBVc2UgY29udGFpbnMuCisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNGcmFtZUluUmFuZ2UpOiBVc2UgaW50ZXJzZWN0
cy4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51
bWJlcnMpOiBVc2UgaW50ZXJzZWN0cy4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bmlvblJhbmdlcyk6IE1vdmVkIHRvIFNpbXBsZVJh
bmdlLmNwcCwgd2hlcmUgaXQncyBub3cKKyAgICAgICAgaW1wbGVtZW50ZWQgdXNpbmcgZG9jdW1l
bnRPcmRlci4KKworICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24pOiBV
c2UgaW50ZXJzZWN0cy4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBM
ZWdhY3kubW06CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3Rpb25Db250YWluc1Bvc2l0aW9uKTog
VXNlIGlzUG9pbnRJblJhbmdlLgorCisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpleHRlbmQpOiBVc2UgbWFrZVJlZlB0ciBh
bmQgTm9kZTo6bGVuZ3RoCisgICAgICAgIHRvIHN0cmVhbWxpbmUgdGhlIGltcGxlbWVudGF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpnZXRSYW5nZUF0KTogVXNlIG1ha2VC
b3VuZGFyeVBvaW50QmVmb3JlTm9kZQorICAgICAgICBhbmQgcmVtb3ZlIHVubmVlZGVkIG51bGwg
Y2hlY2sgdGhhdCdzIGFscmVhZHkgY292ZXJlZCBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6YWRkUmFuZ2UpOiBVc2UgaW50ZXJzZWN0cyBhbmQgdW5pb25SYW5nZXMuCisg
ICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbnRhaW5zTm9kZSBjb25zdCk6IFVzZSBp
bnRlcnNlY3RzIGFuZCBjb250YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6
aXNWYWxpZEZvclBvc2l0aW9uIGNvbnN0KTogVXNlIGJvb2xlYW4gbG9naWMuCisKKyAgICAgICAg
KiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9s
bGVyOjpkcmFnZ2FibGVFbGVtZW50IGNvbnN0KTogVXNlIGNvbnRhaW5zLgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0NvbnRyb2xsZXI6Omluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2Fy
ZXQpOiBVc2UgaW50ZXJzZWN0cy4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNl
IGNvbnRhaW5zLgorCisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OmZpbmRUZXh0TWF0Y2hlcyk6IFVzZSBkb2N1bWVudE9yZGVyLgorCisgICAgICAgICog
cGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmZpbmRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRD
b250YWluaW5nU2VsZWN0aW9uSGlnaGxpZ2h0KToKKyAgICAgICAgVXNlIGNvbnRhaW5zLgorCisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpyYW5nZUFzVGV4dCk6IFVzZSBwbGFpblRleHQuCisgICAgICAgIChXZWJDb3JlOjpqb2lu
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdC
YWNrd2FyZHNUZXh0SXRlcmF0b3IpOiBVc2UgYSB2ZWN0b3IKKyAgICAgICAgdGhhdCB3ZSByZXZl
cnNlIGFuZCBqb2luIHJhdGhlciB0aGFuIGluc2VydGluZyBhdCB0aGUgc3RhcnQgb2YgYSBzdHJp
bmcuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnN1YnJhbmdlKTogQWRkZWQgYSBjYWxs
IHRvIHVwZGF0ZUxheW91dCBzaW5jZSB0ZXh0IGl0ZXJhdG9yCisgICAgICAgIGZ1bmN0aW9ucyBk
ZXBlbmQgb24gdGhlIHN0YXRlIG9mIHRoZSByZW5kZXIgdHJlZS4gUmVhbGl6ZWQgdGhpcyB3YXMg
dGhlb3JldGljYWxseQorICAgICAgICBuZWVkZWQgYmVjYXVzZSBvZiBJbnRlcm5hbHM6OnJhbmdl
QXNUZXh0LgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyYW5nZU9mU3RyaW5nTmVhckxv
Y2F0aW9uKTogRGl0dG8uCisKIDIwMjAtMDgtMjYgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2ll
aEBhcHBsZS5jb20+CiAKICAgICAgICAgQXZvaWQgdW5uZWNlc3NhcmlseSBjb3B5aW5nIGEgVmVj
dG9yIGluIFdlYkNvcmU6OnRyYW5zZm9ybXNGb3JWYWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAyYjgxYTMxMTVm
ZmI3YmQ2Y2Y2OTQ2ZjUwNjgyM2U4ZjdkNmYzYWI1Li41OTRhZGFiZjI1YzJkOGUzMGZhNDQ2ODI5
MGNlZGVkZWVjZDlkMzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIwLTA4LTI2ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxtb3N0IGFs
bCB0aGUgcmVtYWluaW5nIHVzZXMgb2YgbGl2ZSByYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTc1NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZS5jcHA6CisgICAgICAgICh3ZWJraXRfZG9tX3Jhbmdl
X2NvbXBhcmVfYm91bmRhcnlfcG9pbnRzKTogVXBkYXRlIGZvciByZW5hbWUgb2YKKyAgICAgICAg
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MuCisgICAgICAgICh3ZWJraXRfZG9tX3Jh
bmdlX2ludGVyc2VjdHNfbm9kZSk6IFJlbW92ZWQgZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAg
ICAod2Via2l0X2RvbV9yYW5nZV9nZXRfdGV4dCk6IFVzZSBwbGFpblRleHQuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbToKKyAgICAg
ICAgKC1bV0tET01SYW5nZSBpbml0V2l0aERvY3VtZW50Ol0pOiBUaWdodGVuZWQgdXAgaW50byBh
IG9uZS1saW5lci4KKyAgICAgICAgKC1bV0tET01SYW5nZSB0ZXh0XSk6IFVzZSBwbGFpblRleHQu
CisgICAgICAgICgtW1dLRE9NUmFuZ2UgdGV4dFJlY3RzXSk6IFN0b3BwZWQgdXNpbmcgUmFuZ2U6
Om93bmVyRG9jdW1lbnQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RP
TS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZTo6ZG9jdW1lbnQpOiBTdG9wcGVkIHVzaW5nCisgICAgICAgIFJh
bmdlOjpvd25lckRvY3VtZW50LgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlOjpib3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAg
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRl
cmVkSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZTo6dGV4dCBjb25zdCk6IFVzZSBwbGFpblRleHQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJl
cXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KTogVXNlIGludGVyc2VjdHMuCisKIDIwMjAtMDgt
MjYgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1Nd
IERpc2FibGVkIG9wdGlvbnMgaW4gdGhlIG11bHRpLXNlbGVjdCBwaWNrZXIgc2hvdWxkIG5vdCBi
ZSBzZWxlY3RhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggZDZmNmU0ZThmYmE1
MzA1M2EwMzQzYzY0MjQ5MzM2NzA4NjE3MGZlMS4uY2U0NDYyMmIyMzVmMzRkOGRjYTc4MWRkMjQw
MjVjNjgxNzI2MDk1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0
IEBACisyMDIwLTA4LTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmUgYWxtb3N0IGFsbCB0aGUgcmVtYWluaW5nIHVzZXMgb2YgbGl2ZSByYW5nZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTc1NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTVJh
bmdlLm1tOgorICAgICAgICAoLVtET01SYW5nZSB0ZXh0XSk6IFVzZSBwbGFpblRleHQuCisgICAg
ICAgICgtW0RPTVJhbmdlIGNvbXBhcmVCb3VuZGFyeVBvaW50czpzb3VyY2VSYW5nZTpdKTogVXBk
YXRlIGZvciByZW5hbWUgb2YKKyAgICAgICAgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGlu
Z3MuCisgICAgICAgICgtW0RPTVJhbmdlIGludGVyc2VjdHNOb2RlOl0pOiBSZW1vdmVkIHJhaXNl
T25ET01FcnJvci4KKworICAgICAgICAqIERPTS9ET01VSUtpdEV4dGVuc2lvbnMubW06CisgICAg
ICAgIChmaXJzdE5vZGVBZnRlcik6IE1vdmVkIFJhbmdlOjpmaXJzdE5vZGUgaGVyZSBzaW5jZSBp
dCdzIHRoZSBvbmx5IHJlbWFpbmluZyBjYWxsZXI7CisgICAgICAgIG1pZ2h0IG5lZWQgdG8ga2Vl
cCBsZWdhY3kgYmVoYXZpb3IgZGVwZW5kaW5nIG9uIGhvdyB0aGlzIGlzIHVzZWQgYnkgVUlLaXQu
CisgICAgICAgICgtW0RPTVJhbmdlIGZpcnN0Tm9kZV0pOiBDYWxsIGZpcnN0Tm9kZUFmdGVyLgor
CisgICAgICAgICogRE9NL1dlYkRPTU9wZXJhdGlvbnMubW06CisgICAgICAgICgtW0RPTVJhbmdl
IG1hcmt1cFN0cmluZ10pOiBTdG9wIHVzaW5nIFJhbmdlOjpvd25lckRvY3VtZW50LgorCiAyMDIw
LTA4LTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEhhc2hN
YXA8UmVmPFQ+Pjo6dGFrZSBzaG91bGQgcmV0dXJuIFJlZlB0cjxUPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggNjM4YmFmMGJjNzk4NGQ5
Nzk5YjI4MmNiYmFlOGNhMTc2MTM2ZmNjZi4uMWUxMDU5ZGUxZTIwMTVjNTM0MGQyMzE1YmJhNTYw
NDliMzAxMDdkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCkBAIC0yMDM2LDYgKzIwMzYsOCBAQCBzdGF0aWMgYm9vbCBpc1JlcGxhY2VkTm9k
ZU9yQlIoTm9kZSogbm9kZSkKIAogc3RhdGljIGJvb2wgY2hhcmFjdGVyT2Zmc2V0c0luT3JkZXIo
Y29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb25zdCBDaGFyYWN0ZXJP
ZmZzZXQmIGNoYXJhY3Rlck9mZnNldDIpCiB7CisgICAgLy8gRklYTUU6IFNob3VsZCBqdXN0IGJl
IGFibGUgdG8gY2FsbCBkb2N1bWVudE9yZGVyIHdpdGhvdXQgYWNjZXNzaWJpbGl0eS1zcGVjaWZp
YyBsb2dpYy4gTm90IGNsZWFyIHdoeSB3ZSBuZWVkIENoYXJhY3Rlck9mZnNldCBpbnN0ZWFkIG9m
IFBvc2l0aW9uIG9yIEJvdW5kYXJ5UG9pbnQuCisKICAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0MS5p
c051bGwoKSB8fCBjaGFyYWN0ZXJPZmZzZXQyLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCkBAIC0yMDQ4LDE2ICsyMDUwLDEyIEBAIHN0YXRpYyBib29sIGNoYXJhY3Rlck9m
ZnNldHNJbk9yZGVyKGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0MSwgY29u
CiAgICAgICAgIG5vZGUxID0gbm9kZTEtPnRyYXZlcnNlVG9DaGlsZEF0KGNoYXJhY3Rlck9mZnNl
dDEub2Zmc2V0KTsKICAgICBpZiAoIW5vZGUyLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkgJiYgIWlz
UmVwbGFjZWROb2RlT3JCUihub2RlMikgJiYgbm9kZTItPmhhc0NoaWxkTm9kZXMoKSkKICAgICAg
ICAgbm9kZTIgPSBub2RlMi0+dHJhdmVyc2VUb0NoaWxkQXQoY2hhcmFjdGVyT2Zmc2V0Mi5vZmZz
ZXQpOwotICAgIAogICAgIGlmICghbm9kZTEgfHwgIW5vZGUyKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCiAgICAgYXV0byByYW5nZTEgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVD
b250ZW50cygqbm9kZTEpOwogICAgIGF1dG8gcmFuZ2UyID0gQVhPYmplY3RDYWNoZTo6cmFuZ2VG
b3JOb2RlQ29udGVudHMoKm5vZGUyKTsKLSAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5n
ZShyYW5nZTEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBj
cmVhdGVMaXZlUmFuZ2UocmFuZ2UyKSk7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFs
dWUoKSA8PSAwOworICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIocmFuZ2UxLnN0YXJ0
LCByYW5nZTIuc3RhcnQpKTsKIH0KIAogc3RhdGljIE5vZGUqIHJlc2V0Tm9kZUFuZE9mZnNldEZv
clJlcGxhY2VkTm9kZShOb2RlJiByZXBsYWNlZE5vZGUsIGludCYgb2Zmc2V0LCBpbnQgY2hhcmFj
dGVyQ291bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAppbmRleCBjYTVmMjIxMzA2YzU5N2FmZDFmYmUxMzcyYTlkY2E2NDNj
NTg4NGQ4Li4wMmE2YTRlZGVhMDU2YjZhNWU2OTVjOGY1YzAyNTBiNWIwMTEyNWQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKQEAgLTI5NywyNiArMjk3LDE3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmls
aXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzCiAgICAgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gbWlzc3BlbGxpbmdzOwogICAgIGNoZWNrVGV4dE9mUGFy
YWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgVGV4dENoZWNraW5nVHlwZTo6U3Bl
bGxpbmcsIG1pc3NwZWxsaW5ncywgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIAot
ICAgIC8vIFRoZSByZXR1cm5lZCBtaXNzcGVsbGluZ3MgYXJlIGFzc3VtZWQgdG8gYmUgb3JkZXJl
ZCBpbiB0aGUgZG9jdW1lbnQKLSAgICAvLyBsb2dpY2FsIG9yZGVyLCB3aGljaCBzaG91bGQgYmUg
bWF0Y2hlZCBieSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzLgotICAgIC8vIFNvIGl0ZXJh
dGUgZm9yd2FyZCBvciBiYWNrd2FyZHMgZGVwZW5kaW5nIG9uIHRoZSBkZXNpcmVkIHNlYXJjaAot
ICAgIC8vIGRpcmVjdGlvbiB0byBmaW5kIHRoZSBjbG9zZXN0IG1pc3NwZWxsaW5nIGluIHRoYXQg
ZGlyZWN0aW9uLgorICAgIC8vIEZpbmQgdGhlIGZpcnN0IG1pc3NwZWxsaW5nIHBhc3QgdGhlIHN0
YXJ0LgogICAgIGlmIChkaXJlY3Rpb24gPT0gQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6
TmV4dCkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1pc3NwZWxsaW5nIDogbWlzc3BlbGxp
bmdzKSB7CisgICAgICAgIGZvciAoYXV0byYgbWlzc3BlbGxpbmcgOiBtaXNzcGVsbGluZ3MpIHsK
ICAgICAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGVkaXRvci5yYW5nZUZvclRleHRD
aGVja2luZ1Jlc3VsdChtaXNzcGVsbGluZyk7Ci0gICAgICAgICAgICBpZiAoIW1pc3NwZWxsaW5n
UmFuZ2UpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmIChjcmVh
dGVMaXZlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OkVORF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpID4gMCkKKyAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ1JhbmdlICYmIGlzX2d0KGRvY3Vt
ZW50T3JkZXIobWlzc3BlbGxpbmdSYW5nZS0+ZW5kLCBzdGFydC5lbmQpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gKm1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2aW91cykgewot
ICAgICAgICBmb3IgKGF1dG8gcml0ID0gbWlzc3BlbGxpbmdzLnJiZWdpbigpOyByaXQgIT0gbWlz
c3BlbGxpbmdzLnJlbmQoKTsgKytyaXQpIHsKLSAgICAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdS
YW5nZSA9IGVkaXRvci5yYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdCgqcml0KTsKLSAgICAgICAg
ICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAgICAgaWYgKGNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxpbmdSYW5nZSktPmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShz
dGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKKyAgICB9IGVsc2UgeworICAgICAgICBm
b3IgKGF1dG8mIG1pc3NwZWxsaW5nIDogbWFrZVJldmVyc2VkUmFuZ2UobWlzc3BlbGxpbmdzKSkg
eworICAgICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gZWRpdG9yLnJhbmdlRm9yVGV4
dENoZWNraW5nUmVzdWx0KG1pc3NwZWxsaW5nKTsKKyAgICAgICAgICAgIGlmIChtaXNzcGVsbGlu
Z1JhbmdlICYmIGlzX2x0KGRvY3VtZW50T3JkZXIobWlzc3BlbGxpbmdSYW5nZS0+c3RhcnQsIHN0
YXJ0LnN0YXJ0KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICptaXNzcGVsbGluZ1JhbmdlOwog
ICAgICAgICB9CiAgICAgfQpAQCAtNTY1LDI4ICs1NTYsMTMgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpmaW5kTWF0Y2hpbmdPYmplY3RzKEFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYSog
Y3JpdGUKIC8vIHJhbmdlIGlzIGV4cGVjdGVkIHRvIEFDVFVBTExZIGJlIGJlZm9yZS4gVGhlc2Ug
YXJlIG5vdCBjaGVja2VkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgogc3RhdGljIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiByYW5nZUNsb3Nlc3RUb1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByZWZl
cmVuY2VSYW5nZSwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiYgYWZ0ZXJSYW5nZSwgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiYgYmVmb3JlUmFuZ2UpCiB7Ci0gICAgLy8gVGhlIHRyZWVTY29wZSBmb3Ig
c2hhZG93IG5vZGVzIG1heSBub3QgYmUgdGhlIHNhbWUgc2NvcGUgYXMgYW5vdGhlciBlbGVtZW50
IGluIGEgZG9jdW1lbnQuCi0gICAgLy8gQ29tcGFyaXNvbnMgbWF5IGZhaWwgaW4gdGhhdCBjYXNl
LCB3aGljaCBhcmUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHNob3VsZCBub3QgYXNzZXJ0LgotCi0g
ICAgaWYgKGFmdGVyUmFuZ2UgJiYgKGFmdGVyUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29tcGFy
ZURvY3VtZW50UG9zaXRpb24ocmVmZXJlbmNlUmFuZ2UuZW5kLmNvbnRhaW5lcikgJiBOb2RlOjpE
T0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIEFTU0VSVCghYWZ0ZXJSYW5nZSB8fCBjcmVhdGVMaXZlUmFuZ2UoYWZ0ZXJSYW5n
ZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxp
dmVSYW5nZShyZWZlcmVuY2VSYW5nZSkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID49IDApOwotCi0g
ICAgaWYgKGJlZm9yZVJhbmdlICYmIChiZWZvcmVSYW5nZS0+ZW5kLmNvbnRhaW5lci0+Y29tcGFy
ZURvY3VtZW50UG9zaXRpb24ocmVmZXJlbmNlUmFuZ2Uuc3RhcnQuY29udGFpbmVyKSAmIE5vZGU6
OkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgQVNTRVJUKCFiZWZvcmVSYW5nZSB8fCBjcmVhdGVMaXZlUmFuZ2UoYmVmb3Jl
UmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBjcmVh
dGVMaXZlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwKTsK
LQotICAgIGlmICghYWZ0ZXJSYW5nZSAmJiAhYmVmb3JlUmFuZ2UpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgaWYgKCFiZWZvcmVSYW5nZSkKICAgICAgICAgcmV0dXJuIFdURk1v
dmUoYWZ0ZXJSYW5nZSk7CiAgICAgaWYgKCFhZnRlclJhbmdlKQogICAgICAgICByZXR1cm4gV1RG
TW92ZShiZWZvcmVSYW5nZSk7Ci0KLSAgICBhdXRvIHBvc2l0aW9uc1RvQWZ0ZXJSYW5nZSA9IFBv
c2l0aW9uOjpwb3NpdGlvbkNvdW50QmV0d2VlblBvc2l0aW9ucyhjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24oYWZ0ZXJSYW5nZS0+c3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
cmVmZXJlbmNlUmFuZ2UuZW5kKSk7Ci0gICAgYXV0byBwb3NpdGlvbnNUb0JlZm9yZVJhbmdlID0g
UG9zaXRpb246OnBvc2l0aW9uQ291bnRCZXR3ZWVuUG9zaXRpb25zKGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihiZWZvcmVSYW5nZS0+ZW5kKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KHJlZmVyZW5jZVJhbmdlLnN0YXJ0KSk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShwb3NpdGlvbnNU
b0FmdGVyUmFuZ2UgPCBwb3NpdGlvbnNUb0JlZm9yZVJhbmdlID8gYWZ0ZXJSYW5nZSA6IGJlZm9y
ZVJhbmdlKTsKKyAgICBhdXRvIGRpc3RhbmNlQmVmb3JlID0gY2hhcmFjdGVyQ291bnQoeyBiZWZv
cmVSYW5nZS0+ZW5kLCByZWZlcmVuY2VSYW5nZS5zdGFydCB9KTsKKyAgICBhdXRvIGRpc3RhbmNl
QWZ0ZXIgPSBjaGFyYWN0ZXJDb3VudCh7IGFmdGVyUmFuZ2UtPnN0YXJ0LCByZWZlcmVuY2VSYW5n
ZS5lbmQgfSk7CisgICAgcmV0dXJuIFdURk1vdmUoZGlzdGFuY2VCZWZvcmUgPD0gZGlzdGFuY2VB
ZnRlciA/IGJlZm9yZVJhbmdlIDogYWZ0ZXJSYW5nZSk7CiB9CiAKIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRp
cmVjdGlvbihjb25zdCBTaW1wbGVSYW5nZSYgcmVmZXJlbmNlUmFuZ2UsIEFjY2Vzc2liaWxpdHlT
ZWFyY2hEaXJlY3Rpb24gc2VhcmNoRGlyZWN0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2Vh
cmNoU3RyaW5ncykgY29uc3QKQEAgLTYwMywyMyArNTc5LDE2IEBAIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRp
cmVjdGlvCiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNsb3Nlc3RTdHJpbmdSYW5nZTsKICAg
ICBmb3IgKGF1dG8mIHNlYXJjaFN0cmluZyA6IHNlYXJjaFN0cmluZ3MpIHsKICAgICAgICAgaWYg
KGF1dG8gZm91bmRTdHJpbmdSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHNl
YXJjaFN0cmluZywgcmVmZXJlbmNlUmFuZ2UsIGZpbmRPcHRpb25zKSkgeworICAgICAgICAgICAg
Ym9vbCBmb3VuZFN0cmluZ0lzQ2xvc2VyOwogICAgICAgICAgICAgaWYgKCFjbG9zZXN0U3RyaW5n
UmFuZ2UpCi0gICAgICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1JhbmdlID0gKmZvdW5kU3RyaW5n
UmFuZ2U7CisgICAgICAgICAgICAgICAgZm91bmRTdHJpbmdJc0Nsb3NlciA9IHRydWU7CiAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJZiBzZWFyY2hpbmcgYmFja3dhcmQs
IHVzZSB0aGUgdHJhaWxpbmcgcmFuZ2UgZWRnZXMgdG8gY29ycmVjdGx5IGRldGVybWluZSB3aGlj
aAotICAgICAgICAgICAgICAgIC8vIHJhbmdlIGlzIGNsb3Nlc3QuIFNpbWlsYXJseSwgaWYgc2Vh
cmNoaW5nIGZvcndhcmQsIHVzZSB0aGUgbGVhZGluZyByYW5nZSBlZGdlcy4KLSAgICAgICAgICAg
ICAgICBhdXRvJiBjbG9zZXN0U3RyaW5nUG9zaXRpb24gPSBpc0JhY2t3YXJkU2VhcmNoID8gY2xv
c2VzdFN0cmluZ1JhbmdlLT5lbmQgOiBjbG9zZXN0U3RyaW5nUmFuZ2UtPnN0YXJ0OwotICAgICAg
ICAgICAgICAgIGF1dG8mIGZvdW5kU3RyaW5nUG9zaXRpb24gPSBpc0JhY2t3YXJkU2VhcmNoID8g
Zm91bmRTdHJpbmdSYW5nZS0+ZW5kIDogZm91bmRTdHJpbmdSYW5nZS0+c3RhcnQ7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXV0byBjbG9zZXN0UG9zaXRpb25PZmZzZXQgPSBj
bG9zZXN0U3RyaW5nUG9zaXRpb24ub2Zmc2V0OwotICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNo
UG9zaXRpb25PZmZzZXQgPSBmb3VuZFN0cmluZ1Bvc2l0aW9uLm9mZnNldDsKLSAgICAgICAgICAg
ICAgICBhdXRvIGNsb3Nlc3RDb250YWluZXJOb2RlID0gY2xvc2VzdFN0cmluZ1Bvc2l0aW9uLmNv
bnRhaW5lci5wdHIoKTsKLSAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaENvbnRhaW5lck5vZGUg
PSBmb3VuZFN0cmluZ1Bvc2l0aW9uLmNvbnRhaW5lci5wdHIoKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2lu
dHMoY2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nlc3RQb3NpdGlvbk9mZnNldCwgc2VhcmNoQ29u
dGFpbmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZzZXQpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwot
ICAgICAgICAgICAgICAgIGlmICgoIWlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0ID4gMCkgfHwg
KGlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0IDwgMCkpCi0gICAgICAgICAgICAgICAgICAgIGNs
b3Nlc3RTdHJpbmdSYW5nZSA9ICpmb3VuZFN0cmluZ1JhbmdlOworICAgICAgICAgICAgICAgIGZv
dW5kU3RyaW5nSXNDbG9zZXIgPSBpc0JhY2t3YXJkU2VhcmNoCisgICAgICAgICAgICAgICAgICAg
ID8gaXNfZ3QoZG9jdW1lbnRPcmRlcihmb3VuZFN0cmluZ1JhbmdlLT5lbmQsIGNsb3Nlc3RTdHJp
bmdSYW5nZS0+ZW5kKSkKKyAgICAgICAgICAgICAgICAgICAgOiBpc19sdChkb2N1bWVudE9yZGVy
KGZvdW5kU3RyaW5nUmFuZ2UtPnN0YXJ0LCBjbG9zZXN0U3RyaW5nUmFuZ2UtPnN0YXJ0KSk7CiAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZm91bmRTdHJpbmdJc0Nsb3NlcikKKyAgICAg
ICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAqZm91bmRTdHJpbmdSYW5nZTsKICAgICAg
ICAgfQogICAgIH0KICAgICByZXR1cm4gY2xvc2VzdFN0cmluZ1JhbmdlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAKaW5kZXggNzliOGNhNGExMGE0MzVkYjMxOGY5MDZmNDA3MWNkNWIwNDQxNjY5OC4uMmFj
MTM0MmRhYzM0NDQ0N2VkNTEzMjE4OWUwOGVmMzU5NTIzZmU5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwCkBAIC05MTUsNyArOTE1LDcgQEAgSW50UG9pbnQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6bGlua0NsaWNrUG9pbnQoKQogICAgIGlmIChhdXRvIHJhbmdlID0gZWxlbWVudFJhbmdlKCkp
IHsKICAgICAgICAgYXV0byBzdGFydCA9IFZpc2libGVQb3NpdGlvbiB7IGNyZWF0ZUxlZ2FjeUVk
aXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpIH07CiAgICAgICAgIGF1dG8gZW5kID0gbmV4dFZp
c2libGVQb3NpdGlvbihzdGFydCk7Ci0gICAgICAgIGlmICghZW5kLmlzTnVsbCgpICYmIGNyZWF0
ZUxpdmVSYW5nZShyYW5nZSktPmNvbnRhaW5zKGVuZCkpCisgICAgICAgIGlmIChpc1BvaW50SW5S
YW5nZSgqcmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGVuZCkpKQogICAgICAgICAgICAgcmV0dXJu
IHsgYm91bmRzRm9yUmFuZ2UoKm1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKSkuY2VudGVyKCkg
fTsKICAgICB9CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNsaWNrUG9pbnQoKTsK
QEAgLTE1NjEsMTcgKzE1NjEsOSBAQCBQbGFpblRleHRSYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25zdAogICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKLSAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBhdXRvIHNlbGVjdGlv
blJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICgh
c2VsZWN0aW9uUmFuZ2UpCi0gICAgICAgIHJldHVybiBQbGFpblRleHRSYW5nZSgpOwotCi0gICAg
Ly8gRklYTUU6IFRoZSByZWFzb24gdGhpcyBkb2VzIHRoZSBjb3JyZWN0IHRoaW5nIHdoZW4gdGhl
IHNlbGVjdGlvbiBpcyBpbiB0aGUKLSAgICAvLyBzaGFkb3cgdHJlZSBvZiBhbiBpbnB1dCBlbGVt
ZW50IGlzIHRoYXQgd2UgZ2V0IGFuIGV4Y2VwdGlvbiBiZWxvdywgYW5kIHdlCi0gICAgLy8gY2hv
b3NlIHRvIGludGVycHJldCBhbGwgZXhjZXB0aW9ucyBhcyAiZG9lcyBub3QgaW50ZXJzZWN0Ii4g
U2VlbXMgbGlrZWx5Ci0gICAgLy8gdGhhdCBkb2VzIG5vdCBoYW5kbGUgYWxsIGNhc2VzIGNvcnJl
Y3RseS4KLSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVj
dGlvblJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm5vZGUpOwotICAgIGlmICghaW50ZXJzZWN0c1Jl
c3VsdC5oYXNFeGNlcHRpb24oKSAmJiAhaW50ZXJzZWN0c1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFs
dWUoKSkKKyAgICBhdXRvIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKKyAgICBhdXRv
IHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi5maXJzdFJhbmdlKCk7CisgICAgaWYg
KCFzZWxlY3Rpb25SYW5nZSB8fCAhaW50ZXJzZWN0cygqc2VsZWN0aW9uUmFuZ2UsICpub2RlKSkK
ICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKICAgICBpbnQgc3RhcnQgPSBpbmRl
eEZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLnN0YXJ0KCkpOwpAQCAtMTY1Niwx
MCArMTY0OCwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVk
VGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZQogICAgICAgICBhdXRvJiBub2Rl
ID0gKnRoaXMtPm5vZGUoKTsKICAgICAgICAgYXV0byBlbGVtZW50UmFuZ2UgPSB0aGlzLT5lbGVt
ZW50UmFuZ2UoKTsKICAgICAgICAgYXV0byBzdGFydCA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4
VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcihub2RlLCByYW5nZS5zdGFydCk7Ci0gICAgICAgIGlmICgh
Y3JlYXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSktPmNvbnRhaW5zKHN0YXJ0KSkKKyAgICAgICAg
aWYgKCFpc1BvaW50SW5SYW5nZSgqZWxlbWVudFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChzdGFy
dCkpKQogICAgICAgICAgICAgc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxl
bWVudFJhbmdlLT5zdGFydCk7CiAgICAgICAgIGF1dG8gZW5kID0gdmlzaWJsZVBvc2l0aW9uRm9y
SW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKG5vZGUsIHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVu
Z3RoKTsKLSAgICAgICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2UoZWxlbWVudFJhbmdlKS0+Y29udGFp
bnMoZW5kKSkKKyAgICAgICAgaWYgKCFpc1BvaW50SW5SYW5nZSgqZWxlbWVudFJhbmdlLCBtYWtl
Qm91bmRhcnlQb2ludChlbmQpKSkKICAgICAgICAgICAgIGVuZCA9IGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAgICAgICAgbV9yZW5kZXJlci0+ZnJh
bWUoKS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5k
KSwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2Vy
ZWQpKTsKICAgICB9CkBAIC0yMjE2LDcgKzIyMDgsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBv
cwogCiAgICAgICAgIGF1dG8gc3RhcnQgPSByYW5nZS5zdGFydDsKICAgICAgICAgaWYgKGF1dG8g
ZWxlbWVudFJhbmdlID0gdGhpcy0+ZWxlbWVudFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGlmICgh
Y3JlYXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSktPmNvbnRhaW5zKHN0YXJ0KSkKKyAgICAgICAg
ICAgIGlmICghaXNQb2ludEluUmFuZ2UoKmVsZW1lbnRSYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQo
c3RhcnQpKSkKICAgICAgICAgICAgICAgICBzdGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAK
aW5kZXggOGQ2MjFiZTc4MWU5OTBjMWRjNDA2MGZlZGZiMzkyYjcxNjU3NTRhOS4uOGY0M2YzODVj
MzNhMjQzNzU5ZjEyY2Y3NGQ2MjkxZmVkZTkzZTMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcApAQCAt
MTU1LDI1ICsxNTUsOCBAQCBib29sIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uJgogICAgIGlmICghY29yZU9i
amVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAv
LyBXZSB3YW50IHRvIGNoZWNrIHRoYXQgYm90aCB0aGUgc2VsZWN0aW9uIGludGVyc2VjdHMgdGhl
IG5vZGUKLSAgICAvLyBBTkQgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIG5vdCBqdXN0ICJ0b3VjaGlu
ZyIgb25lIG9mIHRoZQotICAgIC8vIGJvdW5kYXJpZXMgZm9yIHRoZSBzZWxlY3RlZCBub2RlLiBX
ZSB3YW50IHRvIGNoZWNrIHdoZXRoZXIgdGhlCi0gICAgLy8gbm9kZSBpcyBhY3R1YWxseSBpbnNp
ZGUgdGhlIHJlZ2lvbiwgYXQgbGVhc3QgcGFydGlhbGx5LgotICAgIGF1dG8mIG5vZGUgPSAqY29y
ZU9iamVjdC0+bm9kZSgpOwotICAgIGF1dG8qIGxhc3REZXNjZW5kYW50ID0gbm9kZS5sYXN0RGVz
Y2VuZGFudCgpOwotICAgIHVuc2lnbmVkIGxhc3RPZmZzZXQgPSBsYXN0RGVzY2VuZGFudC0+bGVu
Z3RoKCk7Ci0gICAgYXV0byBpbnRlcnNlY3RzUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5n
ZSktPmludGVyc2VjdHNOb2RlKG5vZGUpOwotICAgIHJldHVybiAhaW50ZXJzZWN0c1Jlc3VsdC5o
YXNFeGNlcHRpb24oKQotICAgICAgICAmJiBpbnRlcnNlY3RzUmVzdWx0LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpCi0gICAgICAgICYmIChyYW5nZS0+ZW5kLmNvbnRhaW5lci5wdHIoKSAhPSAmbm9kZSB8
fCByYW5nZS0+ZW5kLm9mZnNldCkKLSAgICAgICAgJiYgKHJhbmdlLT5zdGFydC5jb250YWluZXIu
cHRyKCkgIT0gbGFzdERlc2NlbmRhbnQgfHwgcmFuZ2UtPnN0YXJ0Lm9mZnNldCAhPSBsYXN0T2Zm
c2V0KTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKKyAgICByZXR1
cm4gcmFuZ2UgJiYgaW50ZXJzZWN0cygqcmFuZ2UsICpjb3JlT2JqZWN0LT5ub2RlKCkpOwogfQog
CiBBWENvcmVPYmplY3QqIG9iamVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChBWENv
cmVPYmplY3QqIHJlZmVyZW5jZU9iamVjdCwgaW50JiBvZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CmluZGV4IGYwYzhhMzRlZjMzZWJjMDZkZDU3Mjk2MjA4NTBmYTExOTVjYjc1MDIuLjVhYmMyNGVi
Yjk4MWU1NjRmMDdhZGViOGU1ZmMxMTU4MTMxYzUzNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBA
IC05MDUsNyArOTA1LDcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJucyB0aGUgb3duaW5nIGVs
ZW1lbnQgaW4gdGhlIHBhcmVudCBkb2N1bWVudC4KICAgICAvLyBSZXR1cm5zIG51bGxwdHIgaWYg
dGhpcyBpcyB0aGUgdG9wIGxldmVsIGRvY3VtZW50LgotICAgIEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiBvd25lckVsZW1lbnQoKSBjb25zdDsKIAogICAgIC8vIFVzZWQgYnkgRE9NIGJp
bmRpbmdzOyBubyBkaXJlY3Rpb24ga25vd24uCiAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGl0bGUuc3RyaW5nOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IDBmN2Y5OTBlM2VkOWE3NWM2MzExMjQw
YWVkNTU3YTgxNzA1MWNlZTQuLjhhZTFkOGQ1NWI4ZmU3MGVlZTM5NTdkM2RkZWQ3NTM4Y2QxM2Jm
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
Y3BwCkBAIC02NDksNyArNjQ5LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNs
ZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZShjb25zdAogCiB2b2lkIGFk
ZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlIHR5cGUsIGNvbnN0IERvY3VtZW50TWFya2VyOjpEYXRhJiBkYXRhKQogewotICAgIHJhbmdl
LnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJhbmdlLCB0
eXBlLCBkYXRhKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJr
ZXIocmFuZ2UsIHR5cGUsIGRhdGEpOwogfQogCiB2b2lkIGFkZE1hcmtlcihUZXh0JiBub2RlLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmIGRhdGEpCkBAIC02NTksNyArNjU5
LDcgQEAgdm9pZCBhZGRNYXJrZXIoVGV4dCYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXIKIAogdm9pZCByZW1vdmVNYXJrZXJzKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
PiB0eXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgcG9saWN5KQogewotICAg
IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cyhyYW5nZSwgdHlwZXMsIHBvbGljeSk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5tYXJr
ZXJzKCkucmVtb3ZlTWFya2VycyhyYW5nZSwgdHlwZXMsIHBvbGljeSk7CiB9CiAKIFNpbXBsZVJh
bmdlIG1ha2VTaW1wbGVSYW5nZShOb2RlJiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFy
a2VyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggZTc3YWQ3MjlkMzIwM2IxMDM5NGQwYmViMDUyZmY1
ZDU2YmEyZWRlNS4uODRmZmE3NzNlYmJiMzFmMTdjYTNlOWE5OWIwZjJjNjkxMTI3ZGE2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oCkBAIC0yOTcsNyArMjk3LDcgQEAgcHVibGljOgogICAgICAgICBTaGFk
b3dSb290TW9kZSBtb2RlOwogICAgICAgICBib29sIGRlbGVnYXRlc0ZvY3VzIHsgZmFsc2UgfTsK
ICAgICB9OwotICAgIEV4Y2VwdGlvbk9yPFNoYWRvd1Jvb3QmPiBhdHRhY2hTaGFkb3coY29uc3Qg
U2hhZG93Um9vdEluaXQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxTaGFkb3dS
b290Jj4gYXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0Jik7CiAKICAgICBSZWZQdHI8
U2hhZG93Um9vdD4gdXNlckFnZW50U2hhZG93Um9vdCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIFNoYWRvd1Jvb3QmIGVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAppbmRleCBhNjBjMzY1NzNlOTMyN2E5OTM0ZTQ2MzgwNTg4ZWQ0ODJhMDhjMjMyLi4wZWNmYTg3
MWY5YWRkMzhmMzMyMjM5NjQ5NTZiZjNhOWRhZDU2YWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0y
NjMyLDYgKzI2MzIsNyBAQCBzdGF0aWMgc2l6ZV90IGRlcHRoKGNvbnN0IE5vZGUmIG5vZGUpCiAg
ICAgcmV0dXJuIGRlcHRoOwogfQogCisvLyBGSVhNRTogRE9NIHNwZWNpZmljYXRpb24gY2FsbHMg
dGhpcyAic2hhZG93LWluY2x1c2l2ZSIgYnV0IHRoYXQncyBub3QgcmVmbGVjdGVkIGluIHRoaXMg
ZnVuY3Rpb24ncyBuYW1lLgogc3RydWN0IEFuY2VzdG9yQW5kQ2hpbGRyZW4gewogICAgIGNvbnN0
IE5vZGUqIGNvbW1vbkFuY2VzdG9yOwogICAgIGNvbnN0IE5vZGUqIGRpc3RpbmN0QW5jZXN0b3JB
OwpAQCAtMjY2NCw2ICsyNjY1LDcgQEAgc3RhdGljIEFuY2VzdG9yQW5kQ2hpbGRyZW4gY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3JBbmRDaGlsZHJlbihjb25zdCBOb2RlJiBhLCBjb24KICAgICByZXR1
cm4geyB4LCBkaXN0aW5jdEFuY2VzdG9yQSwgZGlzdGluY3RBbmNlc3RvckIgfTsKIH0KIAorLy8g
RklYTUU6IERPTSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoaXMgInNoYWRvdy1pbmNsdXNpdmUiIGJ1
dCB0aGF0J3Mgbm90IHJlZmxlY3RlZCBpbiB0aGlzIGZ1bmN0aW9uJ3MgbmFtZS4KIFJlZlB0cjxO
b2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihOb2RlJiBhLCBOb2RlJiBiKQogewogICAgIHJl
dHVybiBjb25zdF9jYXN0PE5vZGUqPihjb21tb25JbmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcmVu
KGEsIGIpLmNvbW1vbkFuY2VzdG9yKTsKQEAgLTI2NzEsNiArMjY3Myw4IEBAIFJlZlB0cjxOb2Rl
PiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihOb2RlJiBhLCBOb2RlJiBiKQogCiBzdGF0aWMgYm9v
bCBpc1NpYmxpbmdTdWJzZXF1ZW50KGNvbnN0IE5vZGUmIHNpYmxpbmdBLCBjb25zdCBOb2RlJiBz
aWJsaW5nQikKIHsKKyAgICBBU1NFUlQoc2libGluZ0EucGFyZW50Tm9kZSgpKTsKKyAgICBBU1NF
UlQoc2libGluZ0EucGFyZW50Tm9kZSgpID09IHNpYmxpbmdCLnBhcmVudE5vZGUoKSk7CiAgICAg
QVNTRVJUKCZzaWJsaW5nQSAhPSAmc2libGluZ0IpOwogICAgIGZvciAoYXV0byBzaWJsaW5nID0g
JnNpYmxpbmdBOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICBpZiAoc2libGluZyA9PSAmc2libGluZ0IpCkBAIC0yNjkwLDYgKzI2OTQsMTYgQEAg
UGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgTm9kZSYgYSwgY29uc3QgTm9kZSYg
YikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6bGVzczsKICAgICBpZiAoIXJlc3Vs
dC5kaXN0aW5jdEFuY2VzdG9yQikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6Z3Jl
YXRlcjsKKyAgICBib29sIGlzU2hhZG93Um9vdEEgPSByZXN1bHQuZGlzdGluY3RBbmNlc3RvckEt
PmlzU2hhZG93Um9vdCgpOworICAgIGJvb2wgaXNTaGFkb3dSb290QiA9IHJlc3VsdC5kaXN0aW5j
dEFuY2VzdG9yQi0+aXNTaGFkb3dSb290KCk7CisgICAgaWYgKGlzU2hhZG93Um9vdEEgfHwgaXNT
aGFkb3dSb290QikgeworICAgICAgICBpZiAoIWlzU2hhZG93Um9vdEIpCisgICAgICAgICAgICBy
ZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpsZXNzOworICAgICAgICBpZiAoIWlzU2hhZG93Um9vdEEp
CisgICAgICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpncmVhdGVyOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6dW5v
cmRlcmVkOworICAgIH0KICAgICByZXR1cm4gaXNTaWJsaW5nU3Vic2VxdWVudCgqcmVzdWx0LmRp
c3RpbmN0QW5jZXN0b3JBLCAqcmVzdWx0LmRpc3RpbmN0QW5jZXN0b3JCKSA/IFBhcnRpYWxPcmRl
cmluZzo6bGVzcyA6IFBhcnRpYWxPcmRlcmluZzo6Z3JlYXRlcjsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5k
ZXggNThlNDA1ZDE1M2JjYjI2NjExMDkxNDY5ZTg2ZjkyZWY3NjdmZjA0ZC4uNTllY2IxYjJmOWNi
NWM3MDBjMWZlODViZTgzMjc2MmUwMTA4ODgyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC02OTIsNiArNjky
LDEyIEBAIHByaXZhdGU6CiAgICAgY29uc3RleHByIFBhcnRpYWxPcmRlcmluZyhUeXBlIHR5cGUp
IDogbV90eXBlIHsgdHlwZSB9IHsgfQogICAgIFR5cGUgbV90eXBlOwogfTsKK2NvbnN0ZXhwciBi
b29sIGlzX2VxKFBhcnRpYWxPcmRlcmluZyk7Citjb25zdGV4cHIgYm9vbCBpc19sdChQYXJ0aWFs
T3JkZXJpbmcpOworY29uc3RleHByIGJvb2wgaXNfZ3QoUGFydGlhbE9yZGVyaW5nKTsKK2NvbnN0
ZXhwciBib29sIGlzX25lcShQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHByIGJvb2wgaXNfbHRl
cShQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHByIGJvb2wgaXNfZ3RlcShQYXJ0aWFsT3JkZXJp
bmcpOwogCiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25z
dCBOb2RlJiwgY29uc3QgTm9kZSYpOwogCkBAIC04MjgsNiArODM0LDIxIEBAIGNvbnN0ZXhwciBi
b29sIGlzX2d0KFBhcnRpYWxPcmRlcmluZyBvcmRlcmluZykKICAgICByZXR1cm4gb3JkZXJpbmcu
bV90eXBlID09IFBhcnRpYWxPcmRlcmluZzo6VHlwZTo6R3JlYXRlcjsKIH0KIAorY29uc3RleHBy
IGJvb2wgaXNfbmVxKFBhcnRpYWxPcmRlcmluZyBvcmRlcmluZykKK3sKKyAgICByZXR1cm4gaXNf
bHQob3JkZXJpbmcpIHx8IGlzX2d0KG9yZGVyaW5nKTsKK30KKworY29uc3RleHByIGJvb2wgaXNf
bHRlcShQYXJ0aWFsT3JkZXJpbmcgb3JkZXJpbmcpCit7CisgICAgcmV0dXJuIGlzX2x0KG9yZGVy
aW5nKSB8fCBpc19lcShvcmRlcmluZyk7Cit9CisKK2NvbnN0ZXhwciBib29sIGlzX2d0ZXEoUGFy
dGlhbE9yZGVyaW5nIG9yZGVyaW5nKQoreworICAgIHJldHVybiBpc19ndChvcmRlcmluZykgfHwg
aXNfZXEob3JkZXJpbmcpOworfQorCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgY29uc3QgTm9kZSYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmNwcAppbmRleCA4ZjZmZDNiYzhhYmE1YWZhNDU4YzkzNmYyZWUzY2M3NDA4NGRiYzJj
Li4zNjIyMjc5Y2NhMDNmMTEyYmFjMTc1MDQxODc0NjlmNWJlMThjNDk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5jcHAKQEAgLTY2LDcgKzY2LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIERFRklO
RV9ERUJVR19PTkxZX0dMT0JBTChXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciwgcmFuZ2VDb3Vu
dGVyLCAoIlJhbmdlIikpOwogCiBlbnVtIENvbnRlbnRzUHJvY2Vzc0RpcmVjdGlvbiB7IFByb2Nl
c3NDb250ZW50c0ZvcndhcmQsIFByb2Nlc3NDb250ZW50c0JhY2t3YXJkIH07Ci1lbnVtIGNsYXNz
IENvb3JkaW5hdGVTcGFjZSB7IEFic29sdXRlLCBDbGllbnQgfTsKIAogc3RhdGljIEV4Y2VwdGlv
bk9yPHZvaWQ+IHByb2Nlc3NOb2RlcyhSYW5nZTo6QWN0aW9uVHlwZSwgVmVjdG9yPFJlZjxOb2Rl
Pj4mLCBOb2RlKiBvbGRDb250YWluZXIsIFJlZlB0cjxOb2RlPiBuZXdDb250YWluZXIpOwogc3Rh
dGljIEV4Y2VwdGlvbk9yPFJlZlB0cjxOb2RlPj4gcHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNl
dHMoUmFuZ2U6OkFjdGlvblR5cGUsIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgUmVmUHRyPE5v
ZGU+IGNvbnRhaW5lciwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7
CkBAIC03NCw4ICs3Myw4IEBAIHN0YXRpYyBFeGNlcHRpb25PcjxSZWZQdHI8Tm9kZT4+IHByb2Nl
c3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKFJhbmdlOjpBY3Rpb25UCiAKIGlubGluZSBSYW5n
ZTo6UmFuZ2UoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQpCiAgICAgOiBtX293bmVyRG9jdW1lbnQo
b3duZXJEb2N1bWVudCkKLSAgICAsIG1fc3RhcnQoJm93bmVyRG9jdW1lbnQpCi0gICAgLCBtX2Vu
ZCgmb3duZXJEb2N1bWVudCkKKyAgICAsIG1fc3RhcnQob3duZXJEb2N1bWVudCkKKyAgICAsIG1f
ZW5kKG93bmVyRG9jdW1lbnQpCiB7CiAjaWZuZGVmIE5ERUJVRwogICAgIHJhbmdlQ291bnRlci5p
bmNyZW1lbnQoKTsKQEAgLTk4LDY1ICs5NywzOSBAQCBSYW5nZTo6flJhbmdlKCkKICNlbmRpZgog
fQogCi12b2lkIFJhbmdlOjpzZXREb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCit2b2lkIFJh
bmdlOjp1cGRhdGVEb2N1bWVudCgpCiB7Ci0gICAgQVNTRVJUKG1fb3duZXJEb2N1bWVudC5wdHIo
KSAhPSAmZG9jdW1lbnQpOworICAgIGF1dG8mIGRvY3VtZW50ID0gc3RhcnRDb250YWluZXIoKS5k
b2N1bWVudCgpOworICAgIGlmIChtX293bmVyRG9jdW1lbnQucHRyKCkgPT0gJmRvY3VtZW50KQor
ICAgICAgICByZXR1cm47CiAgICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hSYW5nZSgqdGhpcyk7
CiAgICAgbV9vd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7Ci0gICAgbV9zdGFydC5zZXRUb1N0YXJ0
T2ZOb2RlKGRvY3VtZW50KTsKLSAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsK
ICAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5lcihjb25zdCBSYW5nZUJvdW5k
YXJ5UG9pbnQmIHN0YXJ0LCBjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIGVuZCkKK0V4Y2VwdGlv
bk9yPHZvaWQ+IFJhbmdlOjpzZXRTdGFydChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVk
IG9mZnNldCkKIHsKLSAgICBOb2RlKiBlbmRSb290Q29udGFpbmVyID0gZW5kLmNvbnRhaW5lcigp
OwotICAgIHdoaWxlIChlbmRSb290Q29udGFpbmVyLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGVu
ZFJvb3RDb250YWluZXIgPSBlbmRSb290Q29udGFpbmVyLT5wYXJlbnROb2RlKCk7Ci0gICAgTm9k
ZSogc3RhcnRSb290Q29udGFpbmVyID0gc3RhcnQuY29udGFpbmVyKCk7Ci0gICAgd2hpbGUgKHN0
YXJ0Um9vdENvbnRhaW5lci0+cGFyZW50Tm9kZSgpKQotICAgICAgICBzdGFydFJvb3RDb250YWlu
ZXIgPSBzdGFydFJvb3RDb250YWluZXItPnBhcmVudE5vZGUoKTsKLQotICAgIHJldHVybiBzdGFy
dFJvb3RDb250YWluZXIgIT0gZW5kUm9vdENvbnRhaW5lciB8fCBSYW5nZTo6Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKHN0YXJ0LCBlbmQpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMDsKLX0KLQotRXhj
ZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldFN0YXJ0KFJlZjxOb2RlPiYmIHJlZk5vZGUsIHVuc2ln
bmVkIG9mZnNldCkKLXsKLSAgICBib29sIGRpZE1vdmVEb2N1bWVudCA9IGZhbHNlOwotICAgIGlm
ICgmcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7Ci0gICAgICAgIHNl
dERvY3VtZW50KHJlZk5vZGUtPmRvY3VtZW50KCkpOwotICAgICAgICBkaWRNb3ZlRG9jdW1lbnQg
PSB0cnVlOwotICAgIH0KLQotICAgIGF1dG8gY2hpbGROb2RlID0gY2hlY2tOb2RlV09mZnNldChy
ZWZOb2RlLCBvZmZzZXQpOworICAgIGF1dG8gY2hpbGROb2RlID0gY2hlY2tOb2RlT2Zmc2V0UGFp
cihjb250YWluZXIsIG9mZnNldCk7CiAgICAgaWYgKGNoaWxkTm9kZS5oYXNFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKLSAgICBtX3N0
YXJ0LnNldChXVEZNb3ZlKHJlZk5vZGUpLCBvZmZzZXQsIGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSk7Ci0KLSAgICBpZiAoZGlkTW92ZURvY3VtZW50IHx8IGNoZWNrRm9yRGlmZmVyZW50
Um9vdENvbnRhaW5lcihtX3N0YXJ0LCBtX2VuZCkpCi0gICAgICAgIGNvbGxhcHNlKHRydWUpOwot
CisgICAgbV9zdGFydC5zZXQoV1RGTW92ZShjb250YWluZXIpLCBvZmZzZXQsIGNoaWxkTm9kZS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgaWYgKCFpc19sdGVxKGRvY3VtZW50T3JkZXIobWFr
ZUJvdW5kYXJ5UG9pbnQobV9zdGFydCksIG1ha2VCb3VuZGFyeVBvaW50KG1fZW5kKSkpKQorICAg
ICAgICBtX2VuZCA9IG1fc3RhcnQ7CisgICAgdXBkYXRlRG9jdW1lbnQoKTsKICAgICByZXR1cm4g
eyB9OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0RW5kKFJlZjxOb2RlPiYmIHJl
Zk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmQo
UmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgYm9vbCBkaWRN
b3ZlRG9jdW1lbnQgPSBmYWxzZTsKLSAgICBpZiAoJnJlZk5vZGUtPmRvY3VtZW50KCkgIT0gJm93
bmVyRG9jdW1lbnQoKSkgewotICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLT5kb2N1bWVudCgp
KTsKLSAgICAgICAgZGlkTW92ZURvY3VtZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhdXRvIGNo
aWxkTm9kZSA9IGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0KTsKKyAgICBhdXRvIGNo
aWxkTm9kZSA9IGNoZWNrTm9kZU9mZnNldFBhaXIoY29udGFpbmVyLCBvZmZzZXQpOwogICAgIGlm
IChjaGlsZE5vZGUuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBjaGlsZE5vZGUucmVs
ZWFzZUV4Y2VwdGlvbigpOwogCi0gICAgbV9lbmQuc2V0KFdURk1vdmUocmVmTm9kZSksIG9mZnNl
dCwgY2hpbGROb2RlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLQotICAgIGlmIChkaWRNb3ZlRG9j
dW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKG1fc3RhcnQsIG1fZW5kKSkK
LSAgICAgICAgY29sbGFwc2UoZmFsc2UpOwotCisgICAgbV9lbmQuc2V0KFdURk1vdmUoY29udGFp
bmVyKSwgb2Zmc2V0LCBjaGlsZE5vZGUucmVsZWFzZVJldHVyblZhbHVlKCkpOworICAgIGlmICgh
aXNfbHRlcShkb2N1bWVudE9yZGVyKG1ha2VCb3VuZGFyeVBvaW50KG1fc3RhcnQpLCBtYWtlQm91
bmRhcnlQb2ludChtX2VuZCkpKSkKKyAgICAgICAgbV9zdGFydCA9IG1fZW5kOworICAgIHVwZGF0
ZURvY3VtZW50KCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTY4LDIzNyArMTQxLDEwMyBA
QCB2b2lkIFJhbmdlOjpjb2xsYXBzZShib29sIHRvU3RhcnQpCiAgICAgICAgIG1fc3RhcnQgPSBt
X2VuZDsKIH0KIAotRXhjZXB0aW9uT3I8Ym9vbD4gUmFuZ2U6OmlzUG9pbnRJblJhbmdlKE5vZGUm
IHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK0V4Y2VwdGlvbk9yPGJvb2w+IFJhbmdlOjppc1Bv
aW50SW5SYW5nZShOb2RlJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICBpZiAo
JnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIGNoZWNrTm9kZVJlc3VsdCA9IGNoZWNrTm9kZVdPZmZzZXQocmVm
Tm9kZSwgb2Zmc2V0KTsKLSAgICBpZiAoY2hlY2tOb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIC8vIERPTTQgc3BlYyByZXF1aXJlcyB1cyB0byBjaGVjayB3aGV0aGVyIHJlZk5v
ZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZlIHRoZSBzYW1lIHJvb3QgZmlyc3QKLSAgICAgICAg
Ly8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIE8obikgb3BlcmF0
aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0gICAgICAgIGlmICghY29tbW9uSW5jbHVzaXZlQW5j
ZXN0b3IocmVmTm9kZSwgc3RhcnRDb250YWluZXIoKSkpCisgICAgaWYgKGF1dG8gY2hlY2tSZXN1
bHQgPSBjaGVja05vZGVPZmZzZXRQYWlyKGNvbnRhaW5lciwgb2Zmc2V0KTsgY2hlY2tSZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgLy8gRE9NIHNwZWNpZmljYXRpb24gcmVxdWlyZXMg
dGhpcyBjaGVjayBiZSBkb25lIGZpcnN0IGJ1dCBzaW5jZSB0aGVyZSBhcmUgbm8gc2lkZSBlZmZl
Y3RzLAorICAgICAgICAvLyB3ZSBjYW4gZG8gaXQgaW4gcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBh
biBleHRyYSByb290IG5vZGUgY2hlY2sgaW4gdGhlIGNvbW1vbiBjYXNlLgorICAgICAgICBpZiAo
JmNvbnRhaW5lci5yb290Tm9kZSgpICE9ICZzdGFydENvbnRhaW5lcigpLnJvb3ROb2RlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBjaGVja05vZGVSZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gY2hlY2tSZXN1bHQucmVsZWFzZUV4
Y2VwdGlvbigpOwogICAgIH0KLQotICAgIGF1dG8gc3RhcnRDb21wYXJlUmVzdWx0ID0gY29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZzdGFydENvbnRhaW5lcigpLCBtX3N0
YXJ0Lm9mZnNldCgpKTsKLSAgICBpZiAoISghc3RhcnRDb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlv
bigpICYmIHN0YXJ0Q29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+PSAwKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gZW5kQ29tcGFyZVJlc3VsdCA9IGNvbXBhcmVC
b3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9m
ZnNldCgpKTsKLSAgICByZXR1cm4gIWVuZENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYg
ZW5kQ29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwOworICAgIHJldHVybiBX
ZWJDb3JlOjppc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpLCB7IGNvbnRhaW5l
ciwgb2Zmc2V0IH0pOwogfQogCi1FeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVQb2lu
dChOb2RlJiByZWZOb2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CitFeGNlcHRpb25PcjxzaG9y
dD4gUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkg
Y29uc3QKIHsKLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9N
OnJhbmdlLmNvbXBhcmVQb2ludAotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgLTEsIDAgb3Ig
MSBkZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRlc2NyaWJlZCBieSB0aGUgCi0gICAgLy8gcmVm
Tm9kZSBub2RlIGFuZCBhbiBvZmZzZXQgd2l0aGluIHRoZSBub2RlIGlzIGJlZm9yZSwgc2FtZSBh
cywgb3IgYWZ0ZXIgdGhlIHJhbmdlIHJlc3BlY3RpdmVseS4KLSAgICBpZiAoJnJlZk5vZGUuZG9j
dW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
V3JvbmdEb2N1bWVudEVycm9yIH07Ci0KLSAgICBhdXRvIGNoZWNrTm9kZVJlc3VsdCA9IGNoZWNr
Tm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0KTsKLSAgICBpZiAoY2hlY2tOb2RlUmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIC8vIERPTTQgc3BlYyByZXF1aXJlcyB1cyB0byBjaGVj
ayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZlIHRoZSBzYW1lIHJvb3Qg
Zmlyc3QKLSAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZlcnNlIG9yZGVyIHRvIGF2
b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0gICAgICAgIGlmICghcmVm
Tm9kZS5pc0Nvbm5lY3RlZCgpICYmICFjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyZWZOb2RlLCBz
dGFydENvbnRhaW5lcigpKSkKKyAgICBpZiAoYXV0byBjaGVja1Jlc3VsdCA9IGNoZWNrTm9kZU9m
ZnNldFBhaXIoY29udGFpbmVyLCBvZmZzZXQpOyBjaGVja1Jlc3VsdC5oYXNFeGNlcHRpb24oKSkg
eworICAgICAgICAvLyBET00gc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGlzIGNoZWNrIGJlIGRv
bmUgZmlyc3QgYnV0IHNpbmNlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMsCisgICAgICAgIC8v
IHdlIGNhbiBkbyBpdCBpbiByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIGFuIGV4dHJhIHJvb3Qgbm9k
ZSBjaGVjayBpbiB0aGUgY29tbW9uIGNhc2UuCisgICAgICAgIGlmICgmY29udGFpbmVyLnJvb3RO
b2RlKCkgIT0gJnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSkKICAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKLSAgICAgICAgcmV0dXJuIGNoZWNr
Tm9kZVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBjaGVja1Jlc3Vs
dC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgfQotCi0gICAgLy8gY29tcGFyZSB0byBzdGFydCwg
YW5kIHBvaW50IGNvbWVzIGJlZm9yZQotICAgIGF1dG8gc3RhcnRDb21wYXJlUmVzdWx0ID0gY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZzdGFydENvbnRhaW5lcigpLCBt
X3N0YXJ0Lm9mZnNldCgpKTsKLSAgICBpZiAoc3RhcnRDb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4gc3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KTsKLSAgICBpZiAoc3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkK
KyAgICBhdXRvIG9yZGVyaW5nID0gZG9jdW1lbnRPcmRlcih7IGNvbnRhaW5lciwgb2Zmc2V0IH0s
IG1ha2VTaW1wbGVSYW5nZSgqdGhpcykpOworICAgIGlmIChpc19sdChvcmRlcmluZykpCiAgICAg
ICAgIHJldHVybiAtMTsKLQotICAgIC8vIGNvbXBhcmUgdG8gZW5kLCBhbmQgcG9pbnQgY29tZXMg
YWZ0ZXIKLSAgICBhdXRvIGVuZENvbXBhcmVSZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMo
JnJlZk5vZGUsIG9mZnNldCwgJmVuZENvbnRhaW5lcigpLCBtX2VuZC5vZmZzZXQoKSk7Ci0gICAg
aWYgKGVuZENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBlbmRD
b21wYXJlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBpZiAoZW5kQ29tcGFyZVJlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+IDApCisgICAgaWYgKGlzX2VxKG9yZGVyaW5nKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGlzX2d0KG9yZGVyaW5nKSkKICAgICAgICAgcmV0dXJu
IDE7Ci0KLSAgICAvLyBwb2ludCBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoaXMgcmFuZ2UsIG9yIG9u
IHRoZSBib3VuZGFyeSBwb2ludHMKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gRXhjZXB0aW9u
IHsgV3JvbmdEb2N1bWVudEVycm9yIH07CiB9CiAKLUV4Y2VwdGlvbk9yPFJhbmdlOjpDb21wYXJl
UmVzdWx0cz4gUmFuZ2U6OmNvbXBhcmVOb2RlKE5vZGUmIHJlZk5vZGUpIGNvbnN0CitFeGNlcHRp
b25PcjxSYW5nZTo6Q29tcGFyZVJlc3VsdHM+IFJhbmdlOjpjb21wYXJlTm9kZShOb2RlJiBub2Rl
KSBjb25zdAogeworICAgIC8vIEZJWE1FOiBUaGlzIGRlcHJlY2F0ZWQgZnVuY3Rpb24gc2hvdWxk
IGJlIHJlbW92ZWQuCisgICAgLy8gV2Ugb3JpZ2luYWxseSBhZGRlZCBpdCBmb3IgaW50ZXJvcGVy
YWJpbGl0eSB3aXRoIEZpcmVmb3guCisgICAgLy8gUmVjZW50IHZlcnNpb25zIG9mIEZpcmVmb3gg
aGF2ZSByZW1vdmVkIGl0LgorCiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9l
bi9kb2NzL0RPTTpyYW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMg
MCwgMSwgMiwgb3IgMyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBiZWZvcmUsIGFmdGVyLAotICAg
IC8vIGJlZm9yZSBhbmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5zaWRlIHRoZSByYW5nZSwgcmVz
cGVjdGl2ZWx5Ci0KLSAgICBpZiAoIXJlZk5vZGUuaXNDb25uZWN0ZWQoKSkgewotICAgICAgICAv
LyBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNhc2U7IGl0IHJl
dHVybnMgMC4KLSAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOwotICAgIH0KKyAgICAvLyBiZWZv
cmUgYW5kIGFmdGVyKHN1cnJvdW5kcyksIG9yIGluc2lkZSB0aGUgcmFuZ2UsIHJlc3BlY3RpdmVs
eS4KIAotICAgIGlmICgmcmVmTm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsK
LSAgICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBj
YXNlOyBpdCByZXR1cm5zIDAuCisgICAgaWYgKCFub2RlLmlzQ29ubmVjdGVkKCkgfHwgJm5vZGUu
ZG9jdW1lbnQoKSAhPSBtX293bmVyRG9jdW1lbnQucHRyKCkpIHsKKyAgICAgICAgLy8gTWF0Y2gg
aGlzdG9yaWNhbCBGaXJlZm94IGJlaGF2aW9yLgogICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkU7
CiAgICAgfQogCi0gICAgYXV0byogcGFyZW50Tm9kZSA9IHJlZk5vZGUucGFyZW50Tm9kZSgpOwot
ICAgIGlmICghcGFyZW50Tm9kZSkgewotICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyB0aGUgdG9w
IG9mIHRoZSB0cmVlIHdlIHNob3VsZCByZXR1cm4gTk9ERV9CRUZPUkVfQU5EX0FGVEVSLAotICAg
ICAgICAvLyBidXQgd2UgdGhyb3cgdG8gbWF0Y2ggZmlyZWZveCBiZWhhdmlvci4KKyAgICBhdXRv
IG5vZGVSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUobm9kZSk7CisgICAgaWYgKCFub2Rl
UmFuZ2UpIHsKKyAgICAgICAgLy8gTWF0Y2ggaGlzdG9yaWNhbCBGaXJlZm94IGJlaGF2aW9yLgog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogICAgIH0KLSAgICBh
dXRvIG5vZGVJbmRleCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwotCi0gICAgYXV0byBu
b2RlU3RhcnRDb21wYXJlUmVzdWx0ID0gY29tcGFyZVBvaW50KCpwYXJlbnROb2RlLCBub2RlSW5k
ZXgpOwotICAgIGlmIChub2RlU3RhcnRDb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm4gbm9kZVN0YXJ0Q29tcGFyZVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0g
ICAgYXV0byBub2RlRW5kQ29tcGFyZVJlc3VsdCA9IGNvbXBhcmVQb2ludCgqcGFyZW50Tm9kZSwg
bm9kZUluZGV4ICsgMSk7Ci0gICAgaWYgKG5vZGVFbmRDb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4gbm9kZUVuZENvbXBhcmVSZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpOwotCi0gICAgYm9vbCBub2RlU3RhcnRzQmVmb3JlUmFuZ2UgPSBub2RlU3RhcnRDb21wYXJl
UmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMDsKLSAgICBib29sIG5vZGVFbmRzQWZ0ZXJS
YW5nZSA9IG5vZGVFbmRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMDsKLQot
ICAgIHJldHVybiBub2RlU3RhcnRzQmVmb3JlUmFuZ2UKLSAgICAgICAgPyAobm9kZUVuZHNBZnRl
clJhbmdlID8gTk9ERV9CRUZPUkVfQU5EX0FGVEVSIDogTk9ERV9CRUZPUkUpCi0gICAgICAgIDog
KG5vZGVFbmRzQWZ0ZXJSYW5nZSA/IE5PREVfQUZURVIgOiBOT0RFX0lOU0lERSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgTm9kZSogdG9wKE5vZGUmIG5vZGUpCi17Ci0gICAgYXV0byogdG9wID0gJm5v
ZGU7Ci0gICAgd2hpbGUgKGF1dG8qIHBhcmVudCA9IHRvcC0+cGFyZW50Tm9kZSgpKQotICAgICAg
ICB0b3AgPSBwYXJlbnQ7Ci0gICAgcmV0dXJuIHRvcDsKLX0KLQotRXhjZXB0aW9uT3I8c2hvcnQ+
IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoQ29tcGFyZUhvdyBob3csIGNvbnN0IFJhbmdl
JiBzb3VyY2VSYW5nZSkgY29uc3QKLXsKLSAgICBhdXRvKiB0aGlzQ29udGFpbmVyID0gY29tbW9u
QW5jZXN0b3JDb250YWluZXIoKTsKLSAgICBhdXRvKiBzb3VyY2VDb250YWluZXIgPSBzb3VyY2VS
YW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwotICAgIGlmICghdGhpc0NvbnRhaW5lciB8
fCAhc291cmNlQ29udGFpbmVyIHx8ICZ0aGlzQ29udGFpbmVyLT5kb2N1bWVudCgpICE9ICZzb3Vy
Y2VDb250YWluZXItPmRvY3VtZW50KCkgfHwgdG9wKCp0aGlzQ29udGFpbmVyKSAhPSB0b3AoKnNv
dXJjZUNvbnRhaW5lcikpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50
RXJyb3IgfTsKLQotICAgIHN3aXRjaCAoaG93KSB7Ci0gICAgY2FzZSBTVEFSVF9UT19TVEFSVDoK
LSAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5n
ZS5tX3N0YXJ0KTsKLSAgICBjYXNlIFNUQVJUX1RPX0VORDoKLSAgICAgICAgcmV0dXJuIGNvbXBh
cmVCb3VuZGFyeVBvaW50cyhtX2VuZCwgc291cmNlUmFuZ2UubV9zdGFydCk7Ci0gICAgY2FzZSBF
TkRfVE9fRU5EOgotICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fZW5kLCBz
b3VyY2VSYW5nZS5tX2VuZCk7Ci0gICAgY2FzZSBFTkRfVE9fU1RBUlQ6Ci0gICAgICAgIHJldHVy
biBjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFydCwgc291cmNlUmFuZ2UubV9lbmQpOwotICAg
IH0KIAotICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OworICAgIGF1dG8gc3Rh
cnRPcmRlcmluZyA9IGRvY3VtZW50T3JkZXIobm9kZVJhbmdlLT5zdGFydCwgbWFrZUJvdW5kYXJ5
UG9pbnQobV9zdGFydCkpOworICAgIGF1dG8gZW5kT3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKG5v
ZGVSYW5nZS0+ZW5kLCBtYWtlQm91bmRhcnlQb2ludChtX2VuZCkpOworICAgIGlmIChpc19ndGVx
KHN0YXJ0T3JkZXJpbmcpICYmIGlzX2x0ZXEoZW5kT3JkZXJpbmcpKQorICAgICAgICByZXR1cm4g
Tk9ERV9JTlNJREU7CisgICAgaWYgKGlzX2x0ZXEoc3RhcnRPcmRlcmluZykgJiYgaXNfZ3RlcShl
bmRPcmRlcmluZykpCisgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRV9BTkRfQUZURVI7CisgICAg
aWYgKGlzX2x0ZXEoc3RhcnRPcmRlcmluZykpCisgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsK
KyAgICBpZiAoaXNfZ3RlcShlbmRPcmRlcmluZykpCisgICAgICAgIHJldHVybiBOT0RFX0FGVEVS
OworICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKIH0KIAotRXhj
ZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1
bnNpZ25lZCBzaG9ydCBob3csIGNvbnN0IFJhbmdlJiBzb3VyY2VSYW5nZSkgY29uc3QKK0V4Y2Vw
dGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHVuc2lnbmVkIHNob3J0
IGhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlKSBjb25zdAogeworICAgIGNvbnN0IFJhbmdl
Qm91bmRhcnlQb2ludCogdGhpc1BvaW50OworICAgIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCog
b3RoZXJQb2ludDsKICAgICBzd2l0Y2ggKGhvdykgewogICAgIGNhc2UgU1RBUlRfVE9fU1RBUlQ6
CisgICAgICAgIHRoaXNQb2ludCA9ICZtX3N0YXJ0OworICAgICAgICBvdGhlclBvaW50ID0gJnNv
dXJjZVJhbmdlLm1fc3RhcnQ7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU1RBUlRfVE9fRU5E
OgorICAgICAgICB0aGlzUG9pbnQgPSAmbV9lbmQ7CisgICAgICAgIG90aGVyUG9pbnQgPSAmc291
cmNlUmFuZ2UubV9zdGFydDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFTkRfVE9fRU5EOgor
ICAgICAgICB0aGlzUG9pbnQgPSAmbV9lbmQ7CisgICAgICAgIG90aGVyUG9pbnQgPSAmc291cmNl
UmFuZ2UubV9lbmQ7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRU5EX1RPX1NUQVJUOgotICAg
ICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHN0YXRpY19jYXN0PENvbXBhcmVIb3c+
KGhvdyksIHNvdXJjZVJhbmdlKTsKKyAgICAgICAgdGhpc1BvaW50ID0gJm1fc3RhcnQ7CisgICAg
ICAgIG90aGVyUG9pbnQgPSAmc291cmNlUmFuZ2UubV9lbmQ7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9
OwogICAgIH0KLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKLX0K
LQotRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoTm9kZSog
Y29udGFpbmVyQSwgdW5zaWduZWQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgdW5zaWduZWQg
b2Zmc2V0QikKLXsKLSAgICBBU1NFUlQoY29udGFpbmVyQSk7Ci0gICAgQVNTRVJUKGNvbnRhaW5l
ckIpOwotCi0gICAgaWYgKCFjb250YWluZXJBKQorICAgIGF1dG8gb3JkZXJpbmcgPSBkb2N1bWVu
dE9yZGVyKG1ha2VCb3VuZGFyeVBvaW50KCp0aGlzUG9pbnQpLCBtYWtlQm91bmRhcnlQb2ludCgq
b3RoZXJQb2ludCkpOworICAgIGlmIChpc19sdChvcmRlcmluZykpCiAgICAgICAgIHJldHVybiAt
MTsKLSAgICBpZiAoIWNvbnRhaW5lckIpCisgICAgaWYgKGlzX2VxKG9yZGVyaW5nKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKGlzX2d0KG9yZGVyaW5nKSkKICAgICAgICAgcmV0dXJuIDE7
Ci0KLSAgICAvLyBzZWUgRE9NMiB0cmF2ZXJzYWwgJiByYW5nZSBzZWN0aW9uIDIuNQotCi0gICAg
Ly8gY2FzZSAxOiBib3RoIHBvaW50cyBoYXZlIHRoZSBzYW1lIGNvbnRhaW5lcgotICAgIGlmIChj
b250YWluZXJBID09IGNvbnRhaW5lckIpIHsKLSAgICAgICAgaWYgKG9mZnNldEEgPT0gb2Zmc2V0
QikKLSAgICAgICAgICAgIHJldHVybiAwOyAvLyBBIGlzIGVxdWFsIHRvIEIKLSAgICAgICAgaWYg
KG9mZnNldEEgPCBvZmZzZXRCKQotICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBBIGlzIGJlZm9y
ZSBCCi0gICAgICAgIHJldHVybiAxOyAvLyBBIGlzIGFmdGVyIEIKLSAgICB9Ci0KLSAgICAvLyBj
YXNlIDI6IG5vZGUgQyAoY29udGFpbmVyIEIgb3IgYW4gYW5jZXN0b3IpIGlzIGEgY2hpbGQgbm9k
ZSBvZiBBCi0gICAgTm9kZSogYyA9IGNvbnRhaW5lckI7Ci0gICAgd2hpbGUgKGMgJiYgYy0+cGFy
ZW50Tm9kZSgpICE9IGNvbnRhaW5lckEpCi0gICAgICAgIGMgPSBjLT5wYXJlbnROb2RlKCk7Ci0g
ICAgaWYgKGMpIHsKLSAgICAgICAgdW5zaWduZWQgb2Zmc2V0QyA9IDA7Ci0gICAgICAgIE5vZGUq
IG4gPSBjb250YWluZXJBLT5maXJzdENoaWxkKCk7Ci0gICAgICAgIHdoaWxlIChuICE9IGMgJiYg
b2Zmc2V0QyA8IG9mZnNldEEpIHsKLSAgICAgICAgICAgIG9mZnNldEMrKzsKLSAgICAgICAgICAg
IG4gPSBuLT5uZXh0U2libGluZygpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvZmZzZXRBIDw9
IG9mZnNldEMpCi0gICAgICAgICAgICByZXR1cm4gLTE7IC8vIEEgaXMgYmVmb3JlIEIKLSAgICAg
ICAgcmV0dXJuIDE7IC8vIEEgaXMgYWZ0ZXIgQgotICAgIH0KLQotICAgIC8vIGNhc2UgMzogbm9k
ZSBDIChjb250YWluZXIgQSBvciBhbiBhbmNlc3RvcikgaXMgYSBjaGlsZCBub2RlIG9mIEIKLSAg
ICBjID0gY29udGFpbmVyQTsKLSAgICB3aGlsZSAoYyAmJiBjLT5wYXJlbnROb2RlKCkgIT0gY29u
dGFpbmVyQikKLSAgICAgICAgYyA9IGMtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoYykgewotICAg
ICAgICB1bnNpZ25lZCBvZmZzZXRDID0gMDsKLSAgICAgICAgTm9kZSogbiA9IGNvbnRhaW5lckIt
PmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgd2hpbGUgKG4gIT0gYyAmJiBvZmZzZXRDIDwgb2Zmc2V0
QikgewotICAgICAgICAgICAgb2Zmc2V0QysrOwotICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJs
aW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldEMgPCBvZmZzZXRCKQotICAgICAg
ICAgICAgcmV0dXJuIC0xOyAvLyBBIGlzIGJlZm9yZSBCCi0gICAgICAgIHJldHVybiAxOyAvLyBB
IGlzIGFmdGVyIEIKLSAgICB9Ci0KLSAgICAvLyBjYXNlIDQ6IGNvbnRhaW5lcnMgQSAmIEIgYXJl
IHNpYmxpbmdzLCBvciBjaGlsZHJlbiBvZiBzaWJsaW5ncwotICAgIC8vICMjIyB3ZSBuZWVkIHRv
IGRvIGEgdHJhdmVyc2FsIGhlcmUgaW5zdGVhZAotICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBj
b21tb25JbmNsdXNpdmVBbmNlc3RvcigqY29udGFpbmVyQSwgKmNvbnRhaW5lckIpOwotICAgIGlm
ICghY29tbW9uQW5jZXN0b3IpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3Vt
ZW50RXJyb3IgfTsKLSAgICBOb2RlKiBjaGlsZEEgPSBjb250YWluZXJBOwotICAgIHdoaWxlIChj
aGlsZEEgJiYgY2hpbGRBLT5wYXJlbnROb2RlKCkgIT0gY29tbW9uQW5jZXN0b3IpCi0gICAgICAg
IGNoaWxkQSA9IGNoaWxkQS0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghY2hpbGRBKQotICAgICAg
ICBjaGlsZEEgPSBjb21tb25BbmNlc3Rvci5nZXQoKTsKLSAgICBOb2RlKiBjaGlsZEIgPSBjb250
YWluZXJCOwotICAgIHdoaWxlIChjaGlsZEIgJiYgY2hpbGRCLT5wYXJlbnROb2RlKCkgIT0gY29t
bW9uQW5jZXN0b3IpCi0gICAgICAgIGNoaWxkQiA9IGNoaWxkQi0+cGFyZW50Tm9kZSgpOwotICAg
IGlmICghY2hpbGRCKQotICAgICAgICBjaGlsZEIgPSBjb21tb25BbmNlc3Rvci5nZXQoKTsKLQot
ICAgIGlmIChjaGlsZEEgPT0gY2hpbGRCKQotICAgICAgICByZXR1cm4gMDsgLy8gQSBpcyBlcXVh
bCB0byBCCi0KLSAgICBOb2RlKiBuID0gY29tbW9uQW5jZXN0b3ItPmZpcnN0Q2hpbGQoKTsKLSAg
ICB3aGlsZSAobikgewotICAgICAgICBpZiAobiA9PSBjaGlsZEEpCi0gICAgICAgICAgICByZXR1
cm4gLTE7IC8vIEEgaXMgYmVmb3JlIEIKLSAgICAgICAgaWYgKG4gPT0gY2hpbGRCKQotICAgICAg
ICAgICAgcmV0dXJuIDE7IC8vIEEgaXMgYWZ0ZXIgQgotICAgICAgICBuID0gbi0+bmV4dFNpYmxp
bmcoKTsKLSAgICB9Ci0KLSAgICAvLyBTaG91bGQgbmV2ZXIgcmVhY2ggdGhpcyBwb2ludC4KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotRXhjZXB0aW9uT3I8
c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoY29uc3QgUmFuZ2VCb3VuZGFyeVBv
aW50JiBib3VuZGFyeUEsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlCKQotewot
ICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMoYm91bmRhcnlBLmNvbnRhaW5lcigpLCBi
b3VuZGFyeUEub2Zmc2V0KCksIGJvdW5kYXJ5Qi5jb250YWluZXIoKSwgYm91bmRhcnlCLm9mZnNl
dCgpKTsKLX0KLQotYm9vbCBSYW5nZTo6Ym91bmRhcnlQb2ludHNWYWxpZCgpIGNvbnN0Ci17Ci0g
ICAgYXV0byByZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFydCwgbV9lbmQpOwot
ICAgIHJldHVybiAhcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJu
VmFsdWUoKSA8PSAwOworICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3Ig
fTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OmRlbGV0ZUNvbnRlbnRzKCkKQEAgLTQw
OSwyNiArMjQ4LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OmRlbGV0ZUNvbnRlbnRzKCkK
ICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRpb25Pcjxib29sPiBSYW5nZTo6aW50ZXJzZWN0
c05vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3QKK2Jvb2wgUmFuZ2U6OmludGVyc2VjdHNOb2RlKE5v
ZGUmIG5vZGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZWZOb2RlLmlzQ29ubmVjdGVkKCkgfHwgJnJl
Zk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhdXRvKiBwYXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnROb2RlKCk7Ci0gICAg
aWYgKCFwYXJlbnROb2RlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHVuc2lnbmVkIG5v
ZGVJbmRleCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwotCi0gICAgLy8gSWYgKHBhcmVu
dE5vZGUsIG5vZGVJbmRleCkgaXMgYmVmb3JlIGVuZCBhbmQgKHBhcmVudE5vZGUsIG5vZGVJbmRl
eCArIDEpIGlzIGFmdGVyIHN0YXJ0LCByZXR1cm4gdHJ1ZS4KLSAgICAvLyBPdGhlcndpc2UsIHJl
dHVybiBmYWxzZS4KLSAgICBhdXRvIGNvbXBhcmVFbmRSZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQ
b2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4LCBtX2VuZC5jb250YWluZXIoKSwgbV9lbmQub2Zm
c2V0KCkpOwotICAgIGlmIChjb21wYXJlRW5kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4gY29tcGFyZUVuZFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgYXV0byBj
b21wYXJlU3RhcnRSZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMocGFyZW50Tm9kZSwgbm9k
ZUluZGV4ICsgMSwgbV9zdGFydC5jb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSk7Ci0gICAg
aWYgKGNvbXBhcmVTdGFydFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGNv
bXBhcmVTdGFydFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGNvbXBhcmVF
bmRSZXN1bHQucmV0dXJuVmFsdWUoKSA9PSAtMSAmJiBjb21wYXJlU3RhcnRSZXN1bHQucmV0dXJu
VmFsdWUoKSA9PSAxOworICAgIHJldHVybiBpbnRlcnNlY3RzKG1ha2VTaW1wbGVSYW5nZSgqdGhp
cyksIG5vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIE5vZGUqIGhpZ2hlc3RBbmNlc3RvclVuZGVy
Q29tbW9uUm9vdChOb2RlKiBub2RlLCBOb2RlKiBjb21tb25Sb290KQpAQCAtNDY0LDMyICsyODYs
MTEgQEAgc3RhdGljIGlubGluZSBOb2RlKiBjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldChO
b2RlKiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnMKICAgICByZXR1cm4gY29udGFpbmVyOwogfQog
Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxlbmd0aE9mQ29udGVudHNJbk5vZGUoTm9kZSYgbm9k
ZSkKLXsKLSAgICAvLyBUaGlzIHN3aXRjaCBzdGF0ZW1lbnQgbXVzdCBiZSBjb25zaXN0ZW50IHdp
dGggdGhhdCBvZiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMuCi0gICAgc3dp
dGNoIChub2RlLm5vZGVUeXBlKCkpIHsKLSAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9E
RToKLSAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgotICAgICAgICByZXR1cm4gMDsKLSAg
ICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKLSAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9E
RToKLSAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKLSAgICBjYXNlIE5vZGU6OlBST0NFU1NJ
TkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENoYXJhY3RlckRh
dGE+KG5vZGUpLmxlbmd0aCgpOwotICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgotICAgIGNh
c2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKLSAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5U
X05PREU6Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxDb250YWluZXJOb2RlPihub2RlKS5jb3Vu
dENoaWxkTm9kZXMoKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KIEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6
OnByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlIGFjdGlvbikKIHsKICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQ7CiAgICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlv
biA9PSBDbG9uZSkKLSAgICAgICAgZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUo
b3duZXJEb2N1bWVudCgpKTsKKyAgICAgICAgZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50Ojpj
cmVhdGUobV9vd25lckRvY3VtZW50KTsKIAogICAgIGlmIChjb2xsYXBzZWQoKSkKICAgICAgICAg
cmV0dXJuIGZyYWdtZW50OwpAQCAtNTA5LDggKzMxMCw4IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6OnByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlIGFjdGlv
bikKICAgICBSYW5nZUJvdW5kYXJ5UG9pbnQgb3JpZ2luYWxFbmQobV9lbmQpOwogCiAgICAgLy8g
d2hhdCBpcyB0aGUgaGlnaGVzdCBub2RlIHRoYXQgcGFydGlhbGx5IHNlbGVjdHMgdGhlIHN0YXJ0
IC8gZW5kIG9mIHRoZSByYW5nZT8KLSAgICBSZWZQdHI8Tm9kZT4gcGFydGlhbFN0YXJ0ID0gaGln
aGVzdEFuY2VzdG9yVW5kZXJDb21tb25Sb290KG9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCksIGNv
bW1vblJvb3QuZ2V0KCkpOwotICAgIFJlZlB0cjxOb2RlPiBwYXJ0aWFsRW5kID0gaGlnaGVzdEFu
Y2VzdG9yVW5kZXJDb21tb25Sb290KG9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBjb21tb25Sb290
LmdldCgpKTsKKyAgICBSZWZQdHI8Tm9kZT4gcGFydGlhbFN0YXJ0ID0gaGlnaGVzdEFuY2VzdG9y
VW5kZXJDb21tb25Sb290KCZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpLCBjb21tb25Sb290Lmdl
dCgpKTsKKyAgICBSZWZQdHI8Tm9kZT4gcGFydGlhbEVuZCA9IGhpZ2hlc3RBbmNlc3RvclVuZGVy
Q29tbW9uUm9vdCgmb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIGNvbW1vblJvb3QuZ2V0KCkpOwog
CiAgICAgLy8gU3RhcnQgYW5kIGVuZCBjb250YWluZXJzIGFyZSBkaWZmZXJlbnQuCiAgICAgLy8g
VGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXMgaGVyZToKQEAgLTUzMywyOCArMzM0LDI4IEBA
IEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6OnByb2Nlc3NDb250
ZW50cyhBY3Rpb25UeXBlIGFjdGlvbikKICAgICAvLyBhZnRlciBhbnkgRE9NIG11dGF0aW9uIGV2
ZW50LCBhdCB2YXJpb3VzIHN0YWdlcyBiZWxvdy4gU2VlIHdlYmtpdCBidWcgNjAzNTAuCiAKICAg
ICBSZWZQdHI8Tm9kZT4gbGVmdENvbnRlbnRzOwotICAgIGlmIChvcmlnaW5hbFN0YXJ0LmNvbnRh
aW5lcigpICE9IGNvbW1vblJvb3QgJiYgY29tbW9uUm9vdC0+Y29udGFpbnMob3JpZ2luYWxTdGFy
dC5jb250YWluZXIoKSkpIHsKLSAgICAgICAgYXV0byBmaXJzdFJlc3VsdCA9IHByb2Nlc3NDb250
ZW50c0JldHdlZW5PZmZzZXRzKGFjdGlvbiwgbnVsbHB0ciwgb3JpZ2luYWxTdGFydC5jb250YWlu
ZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgbGVuZ3RoT2ZDb250ZW50c0luTm9kZSgqb3Jp
Z2luYWxTdGFydC5jb250YWluZXIoKSkpOwotICAgICAgICBhdXRvIHNlY29uZFJlc3VsdCA9IHBy
b2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKGFjdGlvbiwgb3JpZ2luYWxTdGFydC5jb250
YWluZXIoKSwgUHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNv
bW1vblJvb3QuZ2V0KCkpOworICAgIGlmICgmb3JpZ2luYWxTdGFydC5jb250YWluZXIoKSAhPSBj
b21tb25Sb290ICYmIGNvbW1vblJvb3QtPmNvbnRhaW5zKCZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5l
cigpKSkgeworICAgICAgICBhdXRvIGZpcnN0UmVzdWx0ID0gcHJvY2Vzc0NvbnRlbnRzQmV0d2Vl
bk9mZnNldHMoYWN0aW9uLCBudWxscHRyLCAmb3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgb3Jp
Z2luYWxTdGFydC5vZmZzZXQoKSwgb3JpZ2luYWxTdGFydC5jb250YWluZXIoKS5sZW5ndGgoKSk7
CisgICAgICAgIGF1dG8gc2Vjb25kUmVzdWx0ID0gcHJvY2Vzc0FuY2VzdG9yc0FuZFRoZWlyU2li
bGluZ3MoYWN0aW9uLCAmb3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgUHJvY2Vzc0NvbnRlbnRz
Rm9yd2FyZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0KCkpOwogICAgICAg
ICAvLyBGSVhNRTogQSBiaXQgcGVjdWxpYXIgdGhhdCB3ZSBzaWxlbnRseSBpZ25vcmUgdGhlIGV4
Y2VwdGlvbiBoZXJlLCBidXQgd2UgZG8gaGF2ZSBhdCBsZWFzdCBzb21lIHJlZ3Jlc3Npb24gdGVz
dHMgdGhhdCByZWx5IG9uIHRoaXMgYmVoYXZpb3IuCiAgICAgICAgIGlmICghc2Vjb25kUmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAgbGVmdENvbnRlbnRzID0gc2Vjb25kUmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgIH0KIAogICAgIFJlZlB0cjxOb2RlPiByaWdodENv
bnRlbnRzOwotICAgIGlmICgmZW5kQ29udGFpbmVyKCkgIT0gY29tbW9uUm9vdCAmJiBjb21tb25S
b290LT5jb250YWlucyhvcmlnaW5hbEVuZC5jb250YWluZXIoKSkpIHsKLSAgICAgICAgYXV0byBm
aXJzdFJlc3VsdCA9IHByb2Nlc3NDb250ZW50c0JldHdlZW5PZmZzZXRzKGFjdGlvbiwgbnVsbHB0
ciwgb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIDAsIG9yaWdpbmFsRW5kLm9mZnNldCgpKTsKLSAg
ICAgICAgYXV0byBzZWNvbmRSZXN1bHQgPSBwcm9jZXNzQW5jZXN0b3JzQW5kVGhlaXJTaWJsaW5n
cyhhY3Rpb24sIG9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBQcm9jZXNzQ29udGVudHNCYWNrd2Fy
ZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0KCkpOworICAgIGlmICgmZW5k
Q29udGFpbmVyKCkgIT0gY29tbW9uUm9vdCAmJiBjb21tb25Sb290LT5jb250YWlucygmb3JpZ2lu
YWxFbmQuY29udGFpbmVyKCkpKSB7CisgICAgICAgIGF1dG8gZmlyc3RSZXN1bHQgPSBwcm9jZXNz
Q29udGVudHNCZXR3ZWVuT2Zmc2V0cyhhY3Rpb24sIG51bGxwdHIsICZvcmlnaW5hbEVuZC5jb250
YWluZXIoKSwgMCwgb3JpZ2luYWxFbmQub2Zmc2V0KCkpOworICAgICAgICBhdXRvIHNlY29uZFJl
c3VsdCA9IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKGFjdGlvbiwgJm9yaWdpbmFs
RW5kLmNvbnRhaW5lcigpLCBQcm9jZXNzQ29udGVudHNCYWNrd2FyZCwgV1RGTW92ZShmaXJzdFJl
c3VsdCksIGNvbW1vblJvb3QuZ2V0KCkpOwogICAgICAgICAvLyBGSVhNRTogQSBiaXQgcGVjdWxp
YXIgdGhhdCB3ZSBzaWxlbnRseSBpZ25vcmUgdGhlIGV4Y2VwdGlvbiBoZXJlLCBidXQgd2UgZG8g
aGF2ZSBhdCBsZWFzdCBzb21lIHJlZ3Jlc3Npb24gdGVzdHMgdGhhdCByZWx5IG9uIHRoaXMgYmVo
YXZpb3IuCiAgICAgICAgIGlmICghc2Vjb25kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgcmlnaHRDb250ZW50cyA9IHNlY29uZFJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsK
ICAgICB9CiAKICAgICAvLyBkZWxldGUgYWxsIGNoaWxkcmVuIG9mIGNvbW1vblJvb3QgYmV0d2Vl
biB0aGUgc3RhcnQgYW5kIGVuZCBjb250YWluZXIKLSAgICBSZWZQdHI8Tm9kZT4gcHJvY2Vzc1N0
YXJ0ID0gY2hpbGRPZkNvbW1vblJvb3RCZWZvcmVPZmZzZXQob3JpZ2luYWxTdGFydC5jb250YWlu
ZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgY29tbW9uUm9vdC5nZXQoKSk7Ci0gICAgaWYg
KHByb2Nlc3NTdGFydCAmJiBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpICE9IGNvbW1vblJvb3Qp
IC8vIHByb2Nlc3NTdGFydCBjb250YWlucyBub2RlcyBiZWZvcmUgbV9zdGFydC4KKyAgICBSZWZQ
dHI8Tm9kZT4gcHJvY2Vzc1N0YXJ0ID0gY2hpbGRPZkNvbW1vblJvb3RCZWZvcmVPZmZzZXQoJm9y
aWdpbmFsU3RhcnQuY29udGFpbmVyKCksIG9yaWdpbmFsU3RhcnQub2Zmc2V0KCksIGNvbW1vblJv
b3QuZ2V0KCkpOworICAgIGlmIChwcm9jZXNzU3RhcnQgJiYgJm9yaWdpbmFsU3RhcnQuY29udGFp
bmVyKCkgIT0gY29tbW9uUm9vdCkgLy8gcHJvY2Vzc1N0YXJ0IGNvbnRhaW5zIG5vZGVzIGJlZm9y
ZSBtX3N0YXJ0LgogICAgICAgICBwcm9jZXNzU3RhcnQgPSBwcm9jZXNzU3RhcnQtPm5leHRTaWJs
aW5nKCk7Ci0gICAgUmVmUHRyPE5vZGU+IHByb2Nlc3NFbmQgPSBjaGlsZE9mQ29tbW9uUm9vdEJl
Zm9yZU9mZnNldChvcmlnaW5hbEVuZC5jb250YWluZXIoKSwgb3JpZ2luYWxFbmQub2Zmc2V0KCks
IGNvbW1vblJvb3QuZ2V0KCkpOworICAgIFJlZlB0cjxOb2RlPiBwcm9jZXNzRW5kID0gY2hpbGRP
ZkNvbW1vblJvb3RCZWZvcmVPZmZzZXQoJm9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBvcmlnaW5h
bEVuZC5vZmZzZXQoKSwgY29tbW9uUm9vdC5nZXQoKSk7CiAKICAgICAvLyBDb2xsYXBzZSB0aGUg
cmFuZ2UsIG1ha2luZyBzdXJlIHRoYXQgdGhlIHJlc3VsdCBpcyBub3Qgd2l0aGluIGEgbm9kZSB0
aGF0IHdhcyBwYXJ0aWFsbHkgc2VsZWN0ZWQuCiAgICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8
IGFjdGlvbiA9PSBEZWxldGUpIHsKQEAgLTYxOSw3ICs0MjAsNiBAQCBzdGF0aWMgRXhjZXB0aW9u
T3I8UmVmUHRyPE5vZGU+PiBwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cyhSYW5nZTo6QWN0
aW9uVHlwZQogCiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdDsKIAotICAgIC8vIFRoaXMgc3dpdGNo
IHN0YXRlbWVudCBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGF0IG9mIGxlbmd0aE9mQ29udGVu
dHNJbk5vZGUuCiAgICAgc3dpdGNoIChjb250YWluZXItPm5vZGVUeXBlKCkpIHsKICAgICBjYXNl
IE5vZGU6OlRFWFRfTk9ERToKICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKQEAg
LTg2OCwzMCArNjY4LDE3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjppbnNlcnROb2RlKFJl
ZjxOb2RlPiYmIG5vZGUpCiAKIFN0cmluZyBSYW5nZTo6dG9TdHJpbmcoKSBjb25zdAogeworICAg
IGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpOwogICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKLQotICAgIE5vZGUqIHBhc3RMYXN0ID0gcGFzdExhc3ROb2RlKCk7Ci0gICAgZm9y
IChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3Q7IG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBhdXRvIHR5cGUgPSBub2RlLT5ub2Rl
VHlwZSgpOwotICAgICAgICBpZiAodHlwZSA9PSBOb2RlOjpURVhUX05PREUgfHwgdHlwZSA9PSBO
b2RlOjpDREFUQV9TRUNUSU9OX05PREUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0g
bm9kZSA9PSAmc3RhcnRDb250YWluZXIoKSA/IG1fc3RhcnQub2Zmc2V0KCkgOiAwVTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGVuZCA9IG5vZGUgPT0gJmVuZENvbnRhaW5lcigpID8gc3RkOjptYXgo
c3RhcnQsIG1fZW5kLm9mZnNldCgpKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3Vic3RyaW5nKGRvd25jYXN0PENoYXJh
Y3RlckRhdGE+KCpub2RlKS5kYXRhKCksIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisgICAgZm9yIChh
dXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGlmIChpczxU
ZXh0Pihub2RlKSkgeworICAgICAgICAgICAgYXV0byBvZmZzZXRSYW5nZSA9IGNoYXJhY3RlckRh
dGFPZmZzZXRSYW5nZShyYW5nZSwgbm9kZSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFN1
YnN0cmluZyhkb3duY2FzdDxUZXh0Pihub2RlKS5kYXRhKCksIG9mZnNldFJhbmdlLnN0YXJ0LCBv
ZmZzZXRSYW5nZS5lbmQgLSBvZmZzZXRSYW5nZS5zdGFydCk7CiAgICAgICAgIH0KICAgICB9Ci0K
ICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1TdHJpbmcgUmFuZ2U6OnRleHQo
KSBjb25zdAotewotICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIGxheW91dCwgc2luY2UgcGxhaW5U
ZXh0IHVzZXMgbGluZSBib3hlcyBpbiB0aGUgcmVuZGVyIHRyZWUuCi0gICAgLy8gRklYTUU6IEFz
IHdpdGggaW5uZXJUZXh0LCB3ZSdkIGxpa2UgdGhpcyB0byB3b3JrIGV2ZW4gaWYgdGhlcmUgYXJl
IG5vIHJlbmRlciBvYmplY3RzLgotICAgIHN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS51cGRh
dGVMYXlvdXQoKTsKLQotICAgIHJldHVybiBwbGFpblRleHQobWFrZVNpbXBsZVJhbmdlKCp0aGlz
KSk7Ci19Ci0KIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9ET00tUGFyc2luZy8jd2lkbC1SYW5n
ZS1jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQtRG9jdW1lbnRGcmFnbWVudC1ET01TdHJpbmctZnJh
Z21lbnQKIEV4Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6OmNyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCkKIHsKQEAgLTkwOCwxMiArNjk1
LDcgQEAgRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6Y3JlYXRlQ29u
dGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gV2ViQ29yZTo6Y3JlYXRl
Q29udGV4dHVhbEZyYWdtZW50KCplbGVtZW50LCBtYXJrdXAsIEFsbG93U2NyaXB0aW5nQ29udGVu
dEFuZERvTm90TWFya0FscmVhZHlTdGFydGVkKTsKIH0KIAotdm9pZCBSYW5nZTo6ZGV0YWNoKCkK
LXsKLSAgICAvLyBUaGlzIGlzIG5vdyBhIG5vLW9wIGFzIHBlciB0aGUgRE9NIHNwZWNpZmljYXRp
b24uCi19Ci0KLUV4Y2VwdGlvbk9yPE5vZGUqPiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2Rl
JiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CitFeGNlcHRpb25PcjxOb2RlKj4gUmFuZ2U6
OmNoZWNrTm9kZU9mZnNldFBhaXIoTm9kZSYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdAog
ewogICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgTm9kZTo6RE9D
VU1FTlRfVFlQRV9OT0RFOgpAQCAtOTQzLDU5ICs3MjUsNTUgQEAgRXhjZXB0aW9uT3I8Tm9kZSo+
IFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCkgY29u
c3QKIAogUmVmPFJhbmdlPiBSYW5nZTo6Y2xvbmVSYW5nZSgpIGNvbnN0CiB7Ci0gICAgYXV0byBy
ZXN1bHQgPSBjcmVhdGUob3duZXJEb2N1bWVudCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNyZWF0
ZShtX293bmVyRG9jdW1lbnQpOwogICAgIHJlc3VsdC0+c2V0U3RhcnQoc3RhcnRDb250YWluZXIo
KSwgbV9zdGFydC5vZmZzZXQoKSk7CiAgICAgcmVzdWx0LT5zZXRFbmQoZW5kQ29udGFpbmVyKCks
IG1fZW5kLm9mZnNldCgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FeGNlcHRpb25Pcjx2
b2lkPiBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlJiByZWZOb2RlKQorRXhjZXB0aW9uT3I8dm9p
ZD4gUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIXJlZk5vZGUu
cGFyZW50Tm9kZSgpKQorICAgIGF1dG8gcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCk7CisgICAg
aWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVF
cnJvciB9OwotICAgIHJldHVybiBzZXRTdGFydCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJlZk5v
ZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSk7CisgICAgcmV0dXJuIHNldFN0YXJ0KCpwYXJlbnQs
IG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJh
bmdlOjpzZXRFbmRCZWZvcmUoTm9kZSYgcmVmTm9kZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdl
OjpzZXRFbmRCZWZvcmUoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9k
ZSgpKQorICAgIGF1dG8gcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJl
bnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9Owot
ICAgIHJldHVybiBzZXRFbmQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCByZWZOb2RlLmNvbXB1dGVO
b2RlSW5kZXgoKSk7CisgICAgcmV0dXJuIHNldEVuZCgqcGFyZW50LCBub2RlLmNvbXB1dGVOb2Rl
SW5kZXgoKSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmRBZnRlcihOb2Rl
JiByZWZOb2RlKQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldEVuZEFmdGVyKE5vZGUmIG5v
ZGUpCiB7Ci0gICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkKKyAgICBhdXRvIHBhcmVudCA9
IG5vZGUucGFyZW50Tm9kZSgpOworICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKLSAgICByZXR1cm4gc2V0RW5kKCpyZWZO
b2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCkgKyAxKTsKKyAgICBy
ZXR1cm4gc2V0RW5kKCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSk7CiB9CiAK
LUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUmIHJlZk5vZGUpCitFeGNl
cHRpb25Pcjx2b2lkPiBSYW5nZTo6c2VsZWN0Tm9kZShOb2RlJiBub2RlKQogewotICAgIGlmICgh
cmVmTm9kZS5wYXJlbnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUo
KTsKKyAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRO
b2RlVHlwZUVycm9yIH07Ci0KLSAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5k
b2N1bWVudCgpKQotICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwotCi0g
ICAgdW5zaWduZWQgaW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKLSAgICBhdXRv
IHJlc3VsdCA9IHNldFN0YXJ0KCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgaW5kZXgpOworICAgIHVu
c2lnbmVkIGluZGV4ID0gbm9kZS5jb21wdXRlTm9kZUluZGV4KCk7CisgICAgYXV0byByZXN1bHQg
PSBzZXRTdGFydCgqcGFyZW50LCBpbmRleCk7CiAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJu
IHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIGluZGV4ICsgMSk7CisgICAgcmV0dXJuIHNl
dEVuZCgqcGFyZW50LCBpbmRleCArIDEpOwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6
c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmIHJlZk5vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBSYW5n
ZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKHJlZk5vZGUuaXNE
b2N1bWVudFR5cGVOb2RlKCkpCisgICAgaWYgKG5vZGUuaXNEb2N1bWVudFR5cGVOb2RlKCkpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwogCi0gICAg
aWYgKCZvd25lckRvY3VtZW50KCkgIT0gJnJlZk5vZGUuZG9jdW1lbnQoKSkKLSAgICAgICAgc2V0
RG9jdW1lbnQocmVmTm9kZS5kb2N1bWVudCgpKTsKLQotICAgIG1fc3RhcnQuc2V0VG9TdGFydE9m
Tm9kZShyZWZOb2RlKTsKLSAgICBtX2VuZC5zZXRUb0VuZE9mTm9kZShyZWZOb2RlKTsKLQorICAg
IG1fc3RhcnQuc2V0VG9CZWZvcmVDb250ZW50cyhub2RlKTsKKyAgICBtX2VuZC5zZXRUb0FmdGVy
Q29udGVudHMobm9kZSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTA1MiwzMSArODMwLDEy
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKE5vZGUmIG5ld1Bh
cmVudCkKICAgICByZXR1cm4gc2VsZWN0Tm9kZShuZXdQYXJlbnQpOwogfQogCi1FeGNlcHRpb25P
cjx2b2lkPiBSYW5nZTo6c2V0U3RhcnRCZWZvcmUoTm9kZSYgcmVmTm9kZSkKK0V4Y2VwdGlvbk9y
PHZvaWQ+IFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlJiBub2RlKQogewotICAgIGlmICghcmVm
Tm9kZS5wYXJlbnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsK
KyAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2Rl
VHlwZUVycm9yIH07Ci0gICAgcmV0dXJuIHNldFN0YXJ0KCpyZWZOb2RlLnBhcmVudE5vZGUoKSwg
cmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCkpOwotfQotCi1Ob2RlKiBSYW5nZTo6Zmlyc3ROb2Rl
KCkgY29uc3QKLXsKLSAgICBpZiAoc3RhcnRDb250YWluZXIoKS5pc0NoYXJhY3RlckRhdGFOb2Rl
KCkpCi0gICAgICAgIHJldHVybiAmc3RhcnRDb250YWluZXIoKTsKLSAgICBpZiAoTm9kZSogY2hp
bGQgPSBzdGFydENvbnRhaW5lcigpLnRyYXZlcnNlVG9DaGlsZEF0KG1fc3RhcnQub2Zmc2V0KCkp
KQotICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgaWYgKCFtX3N0YXJ0Lm9mZnNldCgpKQotICAg
ICAgICByZXR1cm4gJnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6
Om5leHRTa2lwcGluZ0NoaWxkcmVuKHN0YXJ0Q29udGFpbmVyKCkpOwotfQotCi1Ob2RlKiBSYW5n
ZTo6cGFzdExhc3ROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoZW5kQ29udGFpbmVyKCkuaXNDaGFy
YWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBw
aW5nQ2hpbGRyZW4oZW5kQ29udGFpbmVyKCkpOwotICAgIGlmIChOb2RlKiBjaGlsZCA9IGVuZENv
bnRhaW5lcigpLnRyYXZlcnNlVG9DaGlsZEF0KG1fZW5kLm9mZnNldCgpKSkKLSAgICAgICAgcmV0
dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJl
bihlbmRDb250YWluZXIoKSk7CisgICAgcmV0dXJuIHNldFN0YXJ0KCpwYXJlbnQsIG5vZGUuY29t
cHV0ZU5vZGVJbmRleCgpKTsKIH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKQEAgLTEx
MDEsMTI0ICs4NjAsNDQgQEAgdm9pZCBSYW5nZTo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB9CiAjZW5kaWYKIAotYm9vbCBSYW5nZTo6Y29u
dGFpbnMoY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAotewotICAgIGlmIChjb21tb25BbmNlc3Rv
ckNvbnRhaW5lcigpLT5kb2N1bWVudCgpICE9IG90aGVyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
KCktPmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gc3RhcnRU
b1N0YXJ0ID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgb3Ro
ZXIpOwotICAgIGlmIChzdGFydFRvU3RhcnQuaGFzRXhjZXB0aW9uKCkgfHwgc3RhcnRUb1N0YXJ0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YXV0byBlbmRUb0VuZCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwg
b3RoZXIpOwotICAgIHJldHVybiAhZW5kVG9FbmQuaGFzRXhjZXB0aW9uKCkgJiYgZW5kVG9FbmQu
cmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMDsKLX0KLQotYm9vbCBSYW5nZTo6Y29udGFpbnMoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBhdXRvIHBvc2l0aW9u
UmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwotICAgIGlmICghcG9zaXRpb25SYW5n
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb250YWlucyhjcmVhdGVMaXZl
UmFuZ2UoKnBvc2l0aW9uUmFuZ2UpKTsKLX0KLQotYm9vbCBhcmVSYW5nZXNFcXVhbChjb25zdCBS
YW5nZSogYSwgY29uc3QgUmFuZ2UqIGIpCi17Ci0gICAgaWYgKGEgPT0gYikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgaWYgKCFhIHx8ICFiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuICZhLT5zdGFydENvbnRhaW5lcigpID09ICZiLT5zdGFydENvbnRhaW5lcigpICYmIGEt
PnN0YXJ0T2Zmc2V0KCkgPT0gYi0+c3RhcnRPZmZzZXQoKSAmJiAmYS0+ZW5kQ29udGFpbmVyKCkg
PT0gJmItPmVuZENvbnRhaW5lcigpICYmIGEtPmVuZE9mZnNldCgpID09IGItPmVuZE9mZnNldCgp
OwotfQotCi1ib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2UqIGEsIGNvbnN0IFJhbmdlKiBi
KQotewotICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGEgPT0gYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIWNvbm5lY3RlZEluU2Ft
ZVRyZWVTY29wZShhLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpLCBiLT5jb21tb25BbmNlc3Rv
ckNvbnRhaW5lcigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2hvcnQgc3RhcnRU
b1N0YXJ0ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwg
KmIpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgIHNob3J0IGVuZFRvRW5kID0gYS0+Y29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqYikucmVsZWFzZVJldHVyblZhbHVl
KCk7Ci0KLSAgICAvLyBGaXJzdCByYW5nZSBjb250YWlucyB0aGUgc2Vjb25kIHJhbmdlLgotICAg
IGlmIChzdGFydFRvU3RhcnQgPD0gMCAmJiBlbmRUb0VuZCA+PSAwKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIC8vIEVuZCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUgc2Vjb25kIHJhbmdl
LgotICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwg
KmIpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID49IDAgJiYgZW5kVG9FbmQgPD0gMCkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAvLyBTdGFydCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUgc2Vj
b25kIHJhbmdlLgotICAgIGlmIChzdGFydFRvU3RhcnQgPj0gMCAmJiBhLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKmIpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9
IDApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0
aWMgaW5saW5lIHZvaWQgYm91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKFJhbmdlQm91bmRhcnlQ
b2ludCYgYm91bmRhcnksIENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKLSAgICBpZiAoIWJv
dW5kYXJ5LmNoaWxkQmVmb3JlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoYm91bmRhcnku
Y29udGFpbmVyKCkgIT0gJmNvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuOwotICAgIGJvdW5kYXJ5
LmludmFsaWRhdGVPZmZzZXQoKTsKKyAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSAmJiAm
Ym91bmRhcnkuY29udGFpbmVyKCkgPT0gJmNvbnRhaW5lcikKKyAgICAgICAgYm91bmRhcnkuaW52
YWxpZGF0ZU9mZnNldCgpOwogfQogCiB2b2lkIFJhbmdlOjpub2RlQ2hpbGRyZW5DaGFuZ2VkKENv
bnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKLSAgICBBU1NFUlQoJmNvbnRhaW5lci5kb2N1bWVu
dCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmY29udGFpbmVyLmRvY3VtZW50
KCkgPT0gbV9vd25lckRvY3VtZW50LnB0cigpKTsKICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbkNo
YW5nZWQobV9zdGFydCwgY29udGFpbmVyKTsKICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbkNoYW5n
ZWQobV9lbmQsIGNvbnRhaW5lcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeU5v
ZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgQ29u
dGFpbmVyTm9kZSYgY29udGFpbmVyKQorc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5Tm9kZUNo
aWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBDb250YWlu
ZXJOb2RlJiBjb250YWluZXJPZk5vZGVzVG9CZVJlbW92ZWQpCiB7Ci0gICAgZm9yIChOb2RlKiBu
b2RlVG9CZVJlbW92ZWQgPSBjb250YWluZXIuZmlyc3RDaGlsZCgpOyBub2RlVG9CZVJlbW92ZWQ7
IG5vZGVUb0JlUmVtb3ZlZCA9IG5vZGVUb0JlUmVtb3ZlZC0+bmV4dFNpYmxpbmcoKSkgewotICAg
ICAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSBub2RlVG9CZVJlbW92ZWQpIHsKLSAg
ICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29udGFpbmVyKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoTm9kZSogbiA9IGJvdW5kYXJ5
LmNvbnRhaW5lcigpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
biA9PSBub2RlVG9CZVJlbW92ZWQpIHsKLSAgICAgICAgICAgICAgICBib3VuZGFyeS5zZXRUb1N0
YXJ0T2ZOb2RlKGNvbnRhaW5lcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChjb250YWluZXJPZk5vZGVzVG9CZVJlbW92
ZWQuY29udGFpbnMoJmJvdW5kYXJ5LmNvbnRhaW5lcigpKSkKKyAgICAgICAgYm91bmRhcnkuc2V0
VG9CZWZvcmVDb250ZW50cyhjb250YWluZXJPZk5vZGVzVG9CZVJlbW92ZWQpOwogfQogCiB2b2lk
IFJhbmdlOjpub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5l
cikKIHsKLSAgICBBU1NFUlQoJmNvbnRhaW5lci5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50
KCkpOworICAgIEFTU0VSVCgmY29udGFpbmVyLmRvY3VtZW50KCkgPT0gbV9vd25lckRvY3VtZW50
LnB0cigpKTsKICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQobV9zdGFydCwg
Y29udGFpbmVyKTsKICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQobV9lbmQs
IGNvbnRhaW5lcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeU5vZGVXaWxsQmVS
ZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIG5vZGVUb0JlUmVtb3Zl
ZCkKIHsKLSAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSAmbm9kZVRvQmVSZW1vdmVk
KSB7CisgICAgaWYgKGJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkgPT0gJm5vZGVUb0JlUmVtb3ZlZCkK
ICAgICAgICAgYm91bmRhcnkuY2hpbGRCZWZvcmVXaWxsQmVSZW1vdmVkKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKE5vZGUqIG4gPSBib3VuZGFyeS5jb250YWluZXIoKTsg
bjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAobiA9PSAmbm9kZVRvQmVSZW1v
dmVkKSB7Ci0gICAgICAgICAgICBib3VuZGFyeS5zZXRUb0JlZm9yZUNoaWxkKG5vZGVUb0JlUmVt
b3ZlZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgZWxzZSBp
ZiAobm9kZVRvQmVSZW1vdmVkLmNvbnRhaW5zKCZib3VuZGFyeS5jb250YWluZXIoKSkpCisgICAg
ICAgIGJvdW5kYXJ5LnNldFRvQmVmb3JlTm9kZShub2RlVG9CZVJlbW92ZWQpOwogfQogCiB2b2lk
IFJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZChOb2RlJiBub2RlKQogewotICAgIEFTU0VSVCgmbm9k
ZS5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOwotICAgIEFTU0VSVCgmbm9kZSAhPSAm
b3duZXJEb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoJm5vZGUuZG9jdW1lbnQoKSA9PSBtX293bmVy
RG9jdW1lbnQucHRyKCkpOworICAgIEFTU0VSVCgmbm9kZSAhPSBtX293bmVyRG9jdW1lbnQucHRy
KCkpOwogICAgIEFTU0VSVChub2RlLnBhcmVudE5vZGUoKSk7CiAgICAgYm91bmRhcnlOb2RlV2ls
bEJlUmVtb3ZlZChtX3N0YXJ0LCBub2RlKTsKICAgICBib3VuZGFyeU5vZGVXaWxsQmVSZW1vdmVk
KG1fZW5kLCBub2RlKTsKQEAgLTEyMjYsNyArOTA1LDcgQEAgdm9pZCBSYW5nZTo6bm9kZVdpbGxC
ZVJlbW92ZWQoTm9kZSYgbm9kZSkKIAogYm9vbCBSYW5nZTo6cGFyZW50bGVzc05vZGVNb3ZlZFRv
TmV3RG9jdW1lbnRBZmZlY3RzUmFuZ2UoTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZS5j
b250YWluc0luY2x1ZGluZ1NoYWRvd0RPTShtX3N0YXJ0LmNvbnRhaW5lcigpKTsKKyAgICByZXR1
cm4gbm9kZS5jb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTSgmbV9zdGFydC5jb250YWluZXIoKSk7
CiB9CiAKIHZvaWQgUmFuZ2U6OnVwZGF0ZVJhbmdlRm9yUGFyZW50bGVzc05vZGVNb3ZlZFRvTmV3
RG9jdW1lbnQoTm9kZSYgbm9kZSkKQEAgLTEyMzgsNyArOTE3LDcgQEAgdm9pZCBSYW5nZTo6dXBk
YXRlUmFuZ2VGb3JQYXJlbnRsZXNzTm9kZU1vdmVkVG9OZXdEb2N1bWVudChOb2RlJiBub2RlKQog
CiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBv
aW50JiBib3VuZGFyeSwgTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCiB7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9ICZ0ZXh0KQorICAgIGlmICgm
Ym91bmRhcnkuY29udGFpbmVyKCkgIT0gJnRleHQpCiAgICAgICAgIHJldHVybjsKICAgICB1bnNp
Z25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgIGlmIChvZmZzZXQg
Pj0gYm91bmRhcnlPZmZzZXQpCkBAIC0xMjQ4LDE0ICs5MjcsMTQgQEAgc3RhdGljIGlubGluZSB2
b2lkIGJvdW5kYXJ5VGV4dEluc2VydGVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5v
ZGUmIHRleHQKIAogdm9pZCBSYW5nZTo6dGV4dEluc2VydGVkKE5vZGUmIHRleHQsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgp
ID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09IG1f
b3duZXJEb2N1bWVudC5wdHIoKSk7CiAgICAgYm91bmRhcnlUZXh0SW5zZXJ0ZWQobV9zdGFydCwg
dGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIGJvdW5kYXJ5VGV4dEluc2VydGVkKG1fZW5kLCB0
ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRl
eHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlmIChib3VuZGFyeS5jb250YWlu
ZXIoKSAhPSAmdGV4dCkKKyAgICBpZiAoJmJvdW5kYXJ5LmNvbnRhaW5lcigpICE9ICZ0ZXh0KQog
ICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYm91bmRhcnlPZmZzZXQgPSBib3VuZGFyeS5v
ZmZzZXQoKTsKICAgICBpZiAob2Zmc2V0ID49IGJvdW5kYXJ5T2Zmc2V0KQpAQCAtMTI2OCwyMyAr
OTQ3LDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRSZW1vdmVkKFJhbmdlQm91
bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQsCiAKIHZvaWQgUmFuZ2U6OnRleHRSZW1v
dmVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAg
IEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VS
VCgmdGV4dC5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1bWVudC5wdHIoKSk7CiAgICAgYm91bmRh
cnlUZXh0UmVtb3ZlZChtX3N0YXJ0LCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgYm91bmRh
cnlUZXh0UmVtb3ZlZChtX2VuZCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiBzdGF0aWMg
aW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNNZXJnZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBi
b3VuZGFyeSwgTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogewotICAg
IGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSBvbGROb2RlLm5vZGUoKSkKKyAgICBpZiAoJmJv
dW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUubm9kZSgpKQogICAgICAgICBib3VuZGFyeS5z
ZXQoKm9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSwgYm91bmRhcnkub2Zmc2V0KCkg
KyBvZmZzZXQsIDApOwotICAgIGVsc2UgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5v
ZGUubm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGFyeS5vZmZz
ZXQoKSkgPT0gb2xkTm9kZS5pbmRleCgpKQorICAgIGVsc2UgaWYgKCZib3VuZGFyeS5jb250YWlu
ZXIoKSA9PSBvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIGJvdW5kYXJ5Lm9mZnNldCgp
ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvbGROb2RlLmluZGV4KCkpKQogICAgICAgICBib3Vu
ZGFyeS5zZXQoKm9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSwgb2Zmc2V0LCAwKTsK
IH0KIAogdm9pZCBSYW5nZTo6dGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUs
IHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBBU1NFUlQob2xkTm9kZS5ub2RlKCkpOwotICAgIEFT
U0VSVCgmb2xkTm9kZS5ub2RlKCktPmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7Cisg
ICAgQVNTRVJUKCZvbGROb2RlLm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQu
cHRyKCkpOwogICAgIEFTU0VSVChvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpKTsKICAgICBB
U1NFUlQob2xkTm9kZS5ub2RlKCktPmlzVGV4dE5vZGUoKSk7CiAgICAgQVNTRVJUKG9sZE5vZGUu
bm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CkBAIC0xMjk2LDcgKzk3NSw3IEBAIHZvaWQgUmFu
Z2U6OnRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZz
ZXQpCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5k
YXJ5UG9pbnQmIGJvdW5kYXJ5LCBUZXh0JiBvbGROb2RlKQogewogICAgIGF1dG8qIHBhcmVudCA9
IG9sZE5vZGUucGFyZW50Tm9kZSgpOwotICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSAm
b2xkTm9kZSkgeworICAgIGlmICgmYm91bmRhcnkuY29udGFpbmVyKCkgPT0gJm9sZE5vZGUpIHsK
ICAgICAgICAgdW5zaWduZWQgc3BsaXRPZmZzZXQgPSBvbGROb2RlLmxlbmd0aCgpOwogICAgICAg
ICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgICAgICBp
ZiAoYm91bmRhcnlPZmZzZXQgPiBzcGxpdE9mZnNldCkgewpAQCAtMTMwOSwxNiArOTg4LDE2IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1NwbGl0KFJhbmdlQm91bmRhcnlQ
b2ludCYgYm91bmRhcnksIFRleHQmIG9sCiAgICAgfQogICAgIGlmICghcGFyZW50KQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IHBhcmVudCAmJiBib3Vu
ZGFyeS5jaGlsZEJlZm9yZSgpID09ICZvbGROb2RlKSB7CisgICAgaWYgKCZib3VuZGFyeS5jb250
YWluZXIoKSA9PSBwYXJlbnQgJiYgYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSAmb2xkTm9kZSkg
ewogICAgICAgICBhdXRvKiBuZXdDaGlsZCA9IG9sZE5vZGUubmV4dFNpYmxpbmcoKTsKICAgICAg
ICAgQVNTRVJUKG5ld0NoaWxkKTsKLSAgICAgICAgYm91bmRhcnkuc2V0VG9BZnRlckNoaWxkKCpu
ZXdDaGlsZCk7CisgICAgICAgIGJvdW5kYXJ5LnNldFRvQWZ0ZXJOb2RlKCpuZXdDaGlsZCk7CiAg
ICAgfQogfQogCiB2b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUpCiB7Ci0g
ICAgQVNTRVJUKCZvbGROb2RlLmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAg
QVNTRVJUKCZvbGROb2RlLmRvY3VtZW50KCkgPT0gbV9vd25lckRvY3VtZW50LnB0cigpKTsKICAg
ICBBU1NFUlQoIW9sZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5vZGUubmV4dFNpYmxpbmcoKSk7
CiAgICAgQVNTRVJUKCFvbGROb2RlLnBhcmVudE5vZGUoKSB8fCBvbGROb2RlLm5leHRTaWJsaW5n
KCktPmlzVGV4dE5vZGUoKSk7CiAgICAgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChtX3N0YXJ0LCBv
bGROb2RlKTsKQEAgLTE0MTMsNyArMTA5Miw3IEBAIFJlZlB0cjxSYW5nZT4gY3JlYXRlTGl2ZVJh
bmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiAKIHZvaWQgc2hvd1RyZWUo
Y29uc3QgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQogewotICAgIGlmIChyYW5nZSAmJiByYW5nZS0+
Ym91bmRhcnlQb2ludHNWYWxpZCgpKSB7CisgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgIHJhbmdl
LT5zdGFydENvbnRhaW5lcigpLnNob3dUcmVlQW5kTWFyaygmcmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCksICJTIiwgJnJhbmdlLT5lbmRDb250YWluZXIoKSwgIkUiKTsKICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJzdGFydCBvZmZzZXQ6ICVkLCBlbmQgb2Zmc2V0OiAlZFxuIiwgcmFuZ2UtPnN0YXJ0
T2Zmc2V0KCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCA0
ZDFjZDRmMTM2NzQ2Y2JmNDQyZmQ2ODlkNjkxOGMzYzVmZDhlOTA0Li4xZWM1YWVkNGM1MDAwZjdm
NWM5MzQxNzViN2U5MjNjY2JiMDg0NGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtMzMsNjEgKzMzLDYw
IEBAIGNsYXNzIERPTVJlY3RMaXN0OwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIE5v
ZGVXaXRoSW5kZXg7CiBjbGFzcyBUZXh0OwotY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCiBzdHJ1
Y3QgU2ltcGxlUmFuZ2U7CiAKLS8vIEZJWE1FOiBSZW5hbWUgdG8gTGl2ZVJhbmdlLCB3aGlsZSBs
ZWF2aW5nIHRoZSBET00tZXhwb3NlZCBuYW1lIGFzIFJhbmdlLgogY2xhc3MgUmFuZ2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxSYW5nZT4gewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWY8UmFuZ2U+IGNyZWF0ZShEb2N1bWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5SYW5n
ZSgpOwogCi0gICAgRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX293
bmVyRG9jdW1lbnQ7IH0KLQotICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyKCkgY29uc3QgeyBBU1NF
UlQobV9zdGFydC5jb250YWluZXIoKSk7IHJldHVybiAqbV9zdGFydC5jb250YWluZXIoKTsgfQor
ICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC5jb250YWlu
ZXIoKTsgfQogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dC5vZmZzZXQoKTsgfQotICAgIE5vZGUmIGVuZENvbnRhaW5lcigpIGNvbnN0IHsgQVNTRVJUKG1f
ZW5kLmNvbnRhaW5lcigpKTsgcmV0dXJuICptX2VuZC5jb250YWluZXIoKTsgfQorICAgIE5vZGUm
IGVuZENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLmNvbnRhaW5lcigpOyB9CiAgICAg
dW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmQub2Zmc2V0KCk7IH0KICAg
ICBib29sIGNvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQgPT0gbV9lbmQ7IH0KLQog
ICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3Ioc3RhcnRDb250YWluZXIoKSwgZW5kQ29udGFpbmVyKCkpLmdldCgp
OyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnQoUmVmPE5v
ZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9m
ZnNldCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdGFydChS
ZWY8Tm9kZT4mJiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRp
b25Pcjx2b2lkPiBzZXRFbmQoUmVmPE5vZGU+JiYsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnRCZWZvcmUoTm9kZSYpOworICAg
IFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0QWZ0ZXIoTm9kZSYpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZEJlZm9yZShOb2RlJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RW5kQWZ0ZXIoTm9kZSYp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29sbGFwc2UoYm9vbCB0b1N0YXJ0KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjxib29sPiBpc1BvaW50SW5SYW5nZShOb2RlJiByZWZO
b2RlLCB1bnNpZ25lZCBvZmZzZXQpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHNo
b3J0PiBjb21wYXJlUG9pbnQoTm9kZSYgcmVmTm9kZSwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdDsK
LSAgICBlbnVtIENvbXBhcmVSZXN1bHRzIHsgTk9ERV9CRUZPUkUsIE5PREVfQUZURVIsIE5PREVf
QkVGT1JFX0FORF9BRlRFUiwgTk9ERV9JTlNJREUgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNl
cHRpb25PcjxDb21wYXJlUmVzdWx0cz4gY29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3Q7
Ci0gICAgZW51bSBDb21wYXJlSG93IHsgU1RBUlRfVE9fU1RBUlQsIFNUQVJUX1RPX0VORCwgRU5E
X1RPX0VORCwgRU5EX1RPX1NUQVJUIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8
c2hvcnQ+IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291
cmNlUmFuZ2UpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHNob3J0PiBj
b21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9ydCBjb21wYXJlSG93
LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0OwotICAgIHN0YXRpYyBFeGNlcHRpb25P
cjxzaG9ydD4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNvbnRhaW5lckEsIHVuc2lnbmVk
IG9mZnNldEEsIE5vZGUqIGNvbnRhaW5lckIsIHVuc2lnbmVkIG9mZnNldEIpOwotICAgIHN0YXRp
YyBFeGNlcHRpb25PcjxzaG9ydD4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGNvbnN0IFJhbmdlQm91
bmRhcnlQb2ludCYgYm91bmRhcnlBLCBjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5
Qik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBib3VuZGFyeVBvaW50c1ZhbGlkKCkgY29uc3Q7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4gaW50ZXJzZWN0c05vZGUoTm9k
ZSYgcmVmTm9kZSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4g
c2VsZWN0Tm9kZShOb2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4g
c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmKTsKKworICAgIGVudW0gQ29tcGFyZUhvdyA6IHVuc2ln
bmVkIHNob3J0IHsgU1RBUlRfVE9fU1RBUlQsIFNUQVJUX1RPX0VORCwgRU5EX1RPX0VORCwgRU5E
X1RPX1NUQVJUIH07CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8c2hvcnQ+IGNvbXBh
cmVCb3VuZGFyeVBvaW50cyh1bnNpZ25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSYg
c291cmNlUmFuZ2UpIGNvbnN0OworCiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9p
ZD4gZGVsZXRlQ29udGVudHMoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxSZWY8
RG9jdW1lbnRGcmFnbWVudD4+IGV4dHJhY3RDb250ZW50cygpOwogICAgIFdFQkNPUkVfRVhQT1JU
IEV4Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gY2xvbmVDb250ZW50cygpOwogICAg
IFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IGluc2VydE5vZGUoUmVmPE5vZGU+JiYp
OwotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHN1cnJvdW5kQ29udGVudHMoTm9kZSYpOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCBSZWY8UmFuZ2U+IGNsb25lUmFuZ2UoKSBjb25zdDsKKyAgICBzdGF0aWMgdm9pZCBkZXRhY2go
KSB7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdt
ZW50Pj4gY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgaHRtbCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4gaXNQb2ludEluUmFuZ2UoTm9kZSYsIHVu
c2lnbmVkIG9mZnNldCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8c2hvcnQ+IGNv
bXBhcmVQb2ludChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBib29sIGludGVyc2VjdHNOb2RlKE5vZGUmKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZGV0YWNoKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmPFJhbmdlPiBjbG9uZVJh
bmdlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdGFydEFmdGVyKE5v
ZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRFbmRCZWZvcmUo
Tm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZEFmdGVy
KE5vZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZWxlY3ROb2Rl
KE5vZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZWxlY3ROb2Rl
Q29udGVudHMoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHN1
cnJvdW5kQ29udGVudHMoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNldFN0YXJ0QmVmb3JlKE5vZGUmKTsKKyAgICBSZWY8RE9NUmVjdExpc3Q+IGdldENsaWVu
dFJlY3RzKCkgY29uc3Q7CisgICAgUmVmPERPTVJlY3Q+IGdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
IGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJh
Z21lbnQ+PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiBmcmFnbWVudCk7
CisKKyAgICAvLyBFeHBhbmQgcmFuZ2UgdG8gYSB1bml0ICh3b3JkIG9yIHNlbnRlbmNlIG9yIGJs
b2NrIG9yIGRvY3VtZW50KSBib3VuZGFyeS4KKyAgICAvLyBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NjMyIGNvbW1lbnQgIzUgZm9yIGRl
dGFpbHMuCisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gZXhwYW5kKGNvbnN0
IFN0cmluZyYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogZmlyc3ROb2RlKCkgY29uc3Q7
CisgICAgZW51bSBDb21wYXJlUmVzdWx0cyA6IHVpbnQ4X3QgeyBOT0RFX0JFRk9SRSwgTk9ERV9B
RlRFUiwgTk9ERV9CRUZPUkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lERSB9OworICAgIFdFQkNPUkVf
RVhQT1JUIEV4Y2VwdGlvbk9yPENvbXBhcmVSZXN1bHRzPiBjb21wYXJlTm9kZShOb2RlJikgY29u
c3Q7CiAKICAgICB2b2lkIG5vZGVDaGlsZHJlbkNoYW5nZWQoQ29udGFpbmVyTm9kZSYpOwogICAg
IHZvaWQgbm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2RlJik7CkBAIC0xMDAs
NDAgKzk5LDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIHRleHROb2Rlc01lcmdlZChOb2RlV2l0aElu
ZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpOwogICAgIHZvaWQgdGV4dE5vZGVTcGxpdChU
ZXh0JiBvbGROb2RlKTsKIAotICAgIC8vIEV4cGFuZCByYW5nZSB0byBhIHVuaXQgKHdvcmQgb3Ig
c2VudGVuY2Ugb3IgYmxvY2sgb3IgZG9jdW1lbnQpIGJvdW5kYXJ5LgotICAgIC8vIFBsZWFzZSBy
ZWZlciB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzIgY29t
bWVudCAjNSAKLSAgICAvLyBmb3IgZGV0YWlscy4KLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRp
b25Pcjx2b2lkPiBleHBhbmQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBSZWY8RE9NUmVjdExpc3Q+
IGdldENsaWVudFJlY3RzKCkgY29uc3Q7Ci0gICAgUmVmPERPTVJlY3Q+IGdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpIGNvbnN0OwotCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogICAgIHZvaWQg
Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Owog
I2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNvbnN0IFJhbmdlJikg
Y29uc3Q7Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdDsK
LQotICAgIGVudW0gQWN0aW9uVHlwZSB7IERlbGV0ZSwgRXh0cmFjdCwgQ2xvbmUgfTsKKyAgICBl
bnVtIEFjdGlvblR5cGUgOiB1aW50OF90IHsgRGVsZXRlLCBFeHRyYWN0LCBDbG9uZSB9OwogCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IFJhbmdlKERvY3VtZW50Jik7CiAKLSAgICB2b2lkIHNldERv
Y3VtZW50KERvY3VtZW50Jik7Ci0gICAgRXhjZXB0aW9uT3I8Tm9kZSo+IGNoZWNrTm9kZVdPZmZz
ZXQoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVEb2N1bWVu
dCgpOworICAgIEV4Y2VwdGlvbk9yPE5vZGUqPiBjaGVja05vZGVPZmZzZXRQYWlyKE5vZGUmLCB1
bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50Pj4gcHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUpOwogCi0gICAgTm9kZSogcGFzdExh
c3ROb2RlKCkgY29uc3Q7Ci0KICAgICBSZWY8RG9jdW1lbnQ+IG1fb3duZXJEb2N1bWVudDsKICAg
ICBSYW5nZUJvdW5kYXJ5UG9pbnQgbV9zdGFydDsKICAgICBSYW5nZUJvdW5kYXJ5UG9pbnQgbV9l
bmQ7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdl
KiwgY29uc3QgUmFuZ2UqKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25z
dCBSYW5nZSosIGNvbnN0IFJhbmdlKik7Ci0KIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIG1h
a2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOwogV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2Ug
bWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKIFdFQkNPUkVfRVhQT1JUIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2UuaWRsCmluZGV4IDE1NGU4OWM2NmU1N2EyZWJhODM0MDY2NjFiNmE1M2MzM2EyNDkwYmEuLmEw
NWMxNDM2YzU4YjgzMDIwZTI2MDk5OTdiMzY2YTYxNGY4MDY3YjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlk
bApAQCAtMjUsOSArMjUsOSBAQAogICAgIFtDYWxsV2l0aD1Eb2N1bWVudF0gY29uc3RydWN0b3Io
KTsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlIHN0YXJ0Q29udGFpbmVyOwotICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBsb25nIHN0YXJ0T2Zmc2V0OyAvLyBGSVhNRTogU2hvdWxkIGJlIHVu
c2lnbmVkIGxvbmcuCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc3RhcnRP
ZmZzZXQ7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgZW5kQ29udGFpbmVyOwotICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBsb25nIGVuZE9mZnNldDsgLy8gRklYTUU6IFNob3VsZCBiZSB1bnNp
Z25lZCBsb25nLgorICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGVuZE9mZnNl
dDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjb2xsYXBzZWQ7CiAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIE5vZGUgY29tbW9uQW5jZXN0b3JDb250YWluZXI7CiAKQEAgLTQ1LDcgKzQ1
LDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVEFSVF9UT19FTkQgPSAxOwogICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IEVORF9UT19FTkQgPSAyOwogICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IEVORF9UT19TVEFSVCA9IDM7Ci0gICAgW01heVRocm93RXhjZXB0aW9uLCBJbXBsZW1lbnRl
ZEFzPWNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzXSBzaG9ydCBjb21wYXJlQm91bmRh
cnlQb2ludHModW5zaWduZWQgc2hvcnQgaG93LCBSYW5nZSBzb3VyY2VSYW5nZSk7CisgICAgW01h
eVRocm93RXhjZXB0aW9uXSBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHModW5zaWduZWQgc2hv
cnQgaG93LCBSYW5nZSBzb3VyY2VSYW5nZSk7CiAKICAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93
RXhjZXB0aW9uXSB2b2lkIGRlbGV0ZUNvbnRlbnRzKCk7CiAgICAgW0NFUmVhY3Rpb25zLCBNYXlU
aHJvd0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBEb2N1bWVudEZyYWdtZW50IGV4dHJhY3RDb250ZW50
cygpOwpAQCAtNTksNyArNTksNyBAQAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBp
c1BvaW50SW5SYW5nZShOb2RlIG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKICAgICBbTWF5
VGhyb3dFeGNlcHRpb25dIHNob3J0IGNvbXBhcmVQb2ludChOb2RlIG5vZGUsIHVuc2lnbmVkIGxv
bmcgb2Zmc2V0KTsKIAotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBpbnRlcnNlY3Rz
Tm9kZShOb2RlIG5vZGUpOworICAgIGJvb2xlYW4gaW50ZXJzZWN0c05vZGUoTm9kZSBub2RlKTsK
IAogICAgIHN0cmluZ2lmaWVyOwogCkBAIC03MCwxMCArNzAsMTEgQEAKICAgICAvLyBFeHRlbnNp
b25zIGZyb20gRE9NUGFyc2luZyBhbmQgU2VyaWFsaXphdGlvbiBzcGVjaWZpY2F0aW9uIChodHRw
czovL3czYy5naXRodWIuaW8vRE9NLVBhcnNpbmcvI2V4dGVuc2lvbnMtdG8tdGhlLXJhbmdlLWlu
dGVyZmFjZSkuCiAgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbiwgTmV3T2JqZWN0
XSBEb2N1bWVudEZyYWdtZW50IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChET01TdHJpbmcgZnJh
Z21lbnQpOwogCi0gICAgLy8gTm9uIHN0YW5kYXJkLgotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0g
dm9pZCBleHBhbmQob3B0aW9uYWwgRE9NU3RyaW5nIHVuaXQgPSAiIik7CisgICAgLy8gTm9uLXN0
YW5kYXJkIGV4dGVuc2lvbi4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgZHJv
cCB0aGlzIHNpbmNlIG5vIG90aGVyIGJyb3dzZXIgc3VwcG9ydHMgaXQuCisgICAgW01heVRocm93
RXhjZXB0aW9uXSB2b2lkIGV4cGFuZChvcHRpb25hbCBET01TdHJpbmcgdW5pdCk7CiAKLSAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGxpa2VseSBkcm9wIHRoaXMgc2luY2Ugbm8gb3RoZXIgYnJvd3Nl
ciBzdXBwb3J0cyBpdC4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGxpa2VseSBkcm9wIHRoaXMg
c2luY2Ugd2UgYWRkZWQgaXQgZm9yIEZpcmVmb3ggaW50ZXJvcGVyYWJpbGl0eSwgYnV0IG5vdyBu
byBvdGhlciBicm93c2VyIHN1cHBvcnRzIGl0LgogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gc2hv
cnQgY29tcGFyZU5vZGUoTm9kZSBub2RlKTsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT0RF
X0JFRk9SRSA9IDA7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTk9ERV9BRlRFUiA9IDE7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5kZXggYjI0NDA5ODQ3OGI3Nzc3
ZjA0Y2RmNjhkNjE5MjliZGM4ODQ1NTE0Zi4uZDAwMzQ0ZDlmNjYwNGI5Y2VkMGFlZmViOWU3ZThk
M2Q3OTg0M2FiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQ
b2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaApAQCAt
MzIsNDMgKzMyLDM5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmFuZ2VCb3VuZGFy
eVBvaW50IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBSYW5nZUJvdW5kYXJ5UG9pbnQoTm9kZSog
Y29udGFpbmVyKTsKKyAgICBleHBsaWNpdCBSYW5nZUJvdW5kYXJ5UG9pbnQoTm9kZSYgY29udGFp
bmVyKTsKIAotICAgIE5vZGUqIGNvbnRhaW5lcigpIGNvbnN0OworICAgIE5vZGUmIGNvbnRhaW5l
cigpIGNvbnN0OwogICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0OwogICAgIE5vZGUqIGNoaWxk
QmVmb3JlKCkgY29uc3Q7CiAKLSAgICB2b2lkIGNsZWFyKCk7Ci0KICAgICB2b2lkIHNldChSZWY8
Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCwgTm9kZSogY2hpbGRCZWZvcmUpOwog
ICAgIHZvaWQgc2V0T2Zmc2V0KHVuc2lnbmVkKTsKIAotICAgIHZvaWQgc2V0VG9CZWZvcmVDaGls
ZChOb2RlJik7Ci0gICAgdm9pZCBzZXRUb0FmdGVyQ2hpbGQoTm9kZSYpOwotICAgIHZvaWQgc2V0
VG9TdGFydE9mTm9kZShSZWY8Tm9kZT4mJik7Ci0gICAgdm9pZCBzZXRUb0VuZE9mTm9kZShSZWY8
Tm9kZT4mJik7CisgICAgdm9pZCBzZXRUb0JlZm9yZU5vZGUoTm9kZSYpOworICAgIHZvaWQgc2V0
VG9BZnRlck5vZGUoTm9kZSYpOworICAgIHZvaWQgc2V0VG9CZWZvcmVDb250ZW50cyhSZWY8Tm9k
ZT4mJik7CisgICAgdm9pZCBzZXRUb0FmdGVyQ29udGVudHMoUmVmPE5vZGU+JiYpOwogCiAgICAg
dm9pZCBjaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQoKTsKICAgICB2b2lkIGludmFsaWRhdGVPZmZz
ZXQoKSBjb25zdDsKLSAgICB2b2lkIGVuc3VyZU9mZnNldElzVmFsaWQoKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV9jb250YWluZXJOb2RlOworICAgIFJlZjxOb2RlPiBt
X2NvbnRhaW5lcjsKICAgICBtdXRhYmxlIE9wdGlvbmFsPHVuc2lnbmVkPiBtX29mZnNldEluQ29u
dGFpbmVyIHsgMCB9OwogICAgIFJlZlB0cjxOb2RlPiBtX2NoaWxkQmVmb3JlQm91bmRhcnk7CiB9
OwogCiBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50KGNvbnN0IFJhbmdlQm91bmRhcnlQ
b2ludCYpOwogCi1pbmxpbmUgUmFuZ2VCb3VuZGFyeVBvaW50OjpSYW5nZUJvdW5kYXJ5UG9pbnQo
Tm9kZSogY29udGFpbmVyKQotICAgIDogbV9jb250YWluZXJOb2RlKGNvbnRhaW5lcikKK2lubGlu
ZSBSYW5nZUJvdW5kYXJ5UG9pbnQ6OlJhbmdlQm91bmRhcnlQb2ludChOb2RlJiBjb250YWluZXIp
CisgICAgOiBtX2NvbnRhaW5lcihjb250YWluZXIpCiB7Ci0gICAgQVNTRVJUKG1fY29udGFpbmVy
Tm9kZSk7CiB9CiAKLWlubGluZSBOb2RlKiBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmNvbnRhaW5lcigp
IGNvbnN0CitpbmxpbmUgTm9kZSYgUmFuZ2VCb3VuZGFyeVBvaW50Ojpjb250YWluZXIoKSBjb25z
dAogewotICAgIHJldHVybiBtX2NvbnRhaW5lck5vZGUuZ2V0KCk7CisgICAgcmV0dXJuIG1fY29u
dGFpbmVyOwogfQogCiBpbmxpbmUgTm9kZSogUmFuZ2VCb3VuZGFyeVBvaW50OjpjaGlsZEJlZm9y
ZSgpIGNvbnN0CkBAIC03Niw3NyArNzIsNjMgQEAgaW5saW5lIE5vZGUqIFJhbmdlQm91bmRhcnlQ
b2ludDo6Y2hpbGRCZWZvcmUoKSBjb25zdAogICAgIHJldHVybiBtX2NoaWxkQmVmb3JlQm91bmRh
cnkuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6ZW5zdXJlT2Zm
c2V0SXNWYWxpZCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb2Zmc2V0SW5Db250YWluZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2NoaWxkQmVmb3JlQm91bmRhcnkpOwotICAgIG1f
b2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnktPmNvbXB1dGVOb2RlSW5k
ZXgoKSArIDE7Ci19Ci0KIGlubGluZSB1bnNpZ25lZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6Om9mZnNl
dCgpIGNvbnN0CiB7Ci0gICAgZW5zdXJlT2Zmc2V0SXNWYWxpZCgpOwotICAgIHJldHVybiBtX29m
ZnNldEluQ29udGFpbmVyLnZhbHVlKCk7Ci19Ci0KLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQ
b2ludDo6Y2xlYXIoKQotewotICAgIG1fY29udGFpbmVyTm9kZSA9IG51bGxwdHI7Ci0gICAgbV9v
ZmZzZXRJbkNvbnRhaW5lciA9IDA7Ci0gICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbnVsbHB0
cjsKKyAgICBpZiAoIW1fb2Zmc2V0SW5Db250YWluZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fY2hp
bGRCZWZvcmVCb3VuZGFyeSk7CisgICAgICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxk
QmVmb3JlQm91bmRhcnktPmNvbXB1dGVOb2RlSW5kZXgoKSArIDE7CisgICAgfQorICAgIHJldHVy
biAqbV9vZmZzZXRJbkNvbnRhaW5lcjsKIH0KIAogaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBv
aW50OjpzZXQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIGNo
aWxkQmVmb3JlKQogewogICAgIEFTU0VSVChjaGlsZEJlZm9yZSA9PSAob2Zmc2V0ID8gY29udGFp
bmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKSA6IDApKTsKLSAgICBtX2NvbnRhaW5l
ck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CisgICAgbV9jb250YWluZXIgPSBXVEZNb3ZlKGNv
bnRhaW5lcik7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG9mZnNldDsKICAgICBtX2NoaWxk
QmVmb3JlQm91bmRhcnkgPSBjaGlsZEJlZm9yZTsKIH0KIAogaW5saW5lIHZvaWQgUmFuZ2VCb3Vu
ZGFyeVBvaW50OjpzZXRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQogewotICAgIEFTU0VSVChtX2Nv
bnRhaW5lck5vZGUpOwotICAgIEFTU0VSVChtX2NvbnRhaW5lck5vZGUtPmlzQ2hhcmFjdGVyRGF0
YU5vZGUoKSk7CisgICAgQVNTRVJUKG1fY29udGFpbmVyLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkp
OwogICAgIEFTU0VSVChtX29mZnNldEluQ29udGFpbmVyKTsKICAgICBBU1NFUlQoIW1fY2hpbGRC
ZWZvcmVCb3VuZGFyeSk7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG9mZnNldDsKIH0KIAot
aW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0JlZm9yZUNoaWxkKE5vZGUmIGNo
aWxkKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0JlZm9yZU5vZGUoTm9k
ZSYgY2hpbGQpCiB7CiAgICAgQVNTRVJUKGNoaWxkLnBhcmVudE5vZGUoKSk7CiAgICAgbV9jaGls
ZEJlZm9yZUJvdW5kYXJ5ID0gY2hpbGQucHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgbV9jb250YWlu
ZXJOb2RlID0gY2hpbGQucGFyZW50Tm9kZSgpOwotICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBt
X2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBPcHRpb25hbDx1bnNpZ25lZD4o
MCk7CisgICAgbV9jb250YWluZXIgPSAqY2hpbGQucGFyZW50Tm9kZSgpOworICAgIG1fb2Zmc2V0
SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBtYWtl
T3B0aW9uYWwoMFUpOwogfQogCi1pbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRv
QWZ0ZXJDaGlsZChOb2RlJiBjaGlsZCkKK2lubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6
c2V0VG9BZnRlck5vZGUoTm9kZSYgY2hpbGQpCiB7CiAgICAgQVNTRVJUKGNoaWxkLnBhcmVudE5v
ZGUoKSk7CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gJmNoaWxkOwotICAgIG1fY29udGFp
bmVyTm9kZSA9IGNoaWxkLnBhcmVudE5vZGUoKTsKLSAgICBtX29mZnNldEluQ29udGFpbmVyID0g
bV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8gV1RGOjpudWxsb3B0IDogT3B0aW9uYWw8dW5zaWduZWQ+
KDApOworICAgIG1fY29udGFpbmVyID0gKmNoaWxkLnBhcmVudE5vZGUoKTsKKyAgICBtX29mZnNl
dEluQ29udGFpbmVyID0gbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8gV1RGOjpudWxsb3B0IDogbWFr
ZU9wdGlvbmFsKDBVKTsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRU
b1N0YXJ0T2ZOb2RlKFJlZjxOb2RlPiYmIGNvbnRhaW5lcikKK2lubGluZSB2b2lkIFJhbmdlQm91
bmRhcnlQb2ludDo6c2V0VG9CZWZvcmVDb250ZW50cyhSZWY8Tm9kZT4mJiBjb250YWluZXIpCiB7
Ci0gICAgbV9jb250YWluZXJOb2RlID0gV1RGTW92ZShjb250YWluZXIpOworICAgIG1fY29udGFp
bmVyID0gV1RGTW92ZShjb250YWluZXIpOwogICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSAwOwog
ICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CiB9CiAKLWlubGluZSB2b2lkIFJh
bmdlQm91bmRhcnlQb2ludDo6c2V0VG9FbmRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFpbmVyKQor
aW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0FmdGVyQ29udGVudHMoUmVmPE5v
ZGU+JiYgY29udGFpbmVyKQogewotICAgIG1fY29udGFpbmVyTm9kZSA9IFdURk1vdmUoY29udGFp
bmVyKTsKLSAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKm1fY29udGFpbmVyTm9kZSkpIHsKLSAg
ICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCptX2Nv
bnRhaW5lck5vZGUpLmxlbmd0aCgpOworICAgIG1fY29udGFpbmVyID0gV1RGTW92ZShjb250YWlu
ZXIpOworICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPihtX2NvbnRhaW5lcikpIHsKKyAgICAgICAg
bV9vZmZzZXRJbkNvbnRhaW5lciA9IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG1fY29udGFpbmVy
LmdldCgpKS5sZW5ndGgoKTsKICAgICAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbnVsbHB0
cjsKICAgICB9IGVsc2UgewotICAgICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBtX2NvbnRh
aW5lck5vZGUtPmxhc3RDaGlsZCgpOwotICAgICAgICBtX29mZnNldEluQ29udGFpbmVyID0gbV9j
aGlsZEJlZm9yZUJvdW5kYXJ5ID8gV1RGOjpudWxsb3B0IDogT3B0aW9uYWw8dW5zaWduZWQ+KDAp
OworICAgICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBtX2NvbnRhaW5lci0+bGFzdENoaWxk
KCk7CisgICAgICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkg
PyBXVEY6Om51bGxvcHQgOiBtYWtlT3B0aW9uYWwoMFUpOwogICAgIH0KIH0KIApAQCAtMTY3LDIx
ICsxNDksMTYgQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjppbnZhbGlkYXRlT2Zm
c2V0KCkgY29uc3QKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSYW5nZUJvdW5kYXJ5
UG9pbnQmIGEsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYikKIHsKLSAgICBpZiAoYS5jb250
YWluZXIoKSAhPSBiLmNvbnRhaW5lcigpKQorICAgIGlmICgmYS5jb250YWluZXIoKSAhPSAmYi5j
b250YWluZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLmNoaWxkQmVmb3Jl
KCkgfHwgYi5jaGlsZEJlZm9yZSgpKSB7Ci0gICAgICAgIGlmIChhLmNoaWxkQmVmb3JlKCkgIT0g
Yi5jaGlsZEJlZm9yZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChhLm9mZnNldCgpICE9IGIub2Zmc2V0KCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAgIGlmIChhLmNoaWxkQmVmb3Jl
KCkgfHwgYi5jaGlsZEJlZm9yZSgpKQorICAgICAgICByZXR1cm4gYS5jaGlsZEJlZm9yZSgpID09
IGIuY2hpbGRCZWZvcmUoKTsKKyAgICByZXR1cm4gYS5vZmZzZXQoKSA9PSBiLm9mZnNldCgpOwog
fQogCiBpbmxpbmUgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludChjb25zdCBSYW5nZUJv
dW5kYXJ5UG9pbnQmIHBvaW50KQogewotICAgIHJldHVybiB7ICpwb2ludC5jb250YWluZXIoKSwg
cG9pbnQub2Zmc2V0KCkgfTsKKyAgICByZXR1cm4geyBwb2ludC5jb250YWluZXIoKSwgcG9pbnQu
b2Zmc2V0KCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1w
bGVSYW5nZS5jcHAKaW5kZXggYzFiNzQ2OGUxZGUwNzk3ZWI5ZTYyY2I1OTZkMzRmM2YyOTM3NmZm
MS4uZDk4N2Y0MDQxNTViNWZjNTFkODY3ZGEwZmNjZTk3OTkwNGRmYTE0ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2ltcGxlUmFuZ2UuY3BwCkBAIC0yMDUsNCArMjA1LDY5IEBAIFJlZlB0cjxOb2RlPiBjb21t
b25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgcmV0dXJu
IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UuZW5k
LmNvbnRhaW5lcik7CiB9CiAKK2Jvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gaXNfbHRl
cShkb2N1bWVudE9yZGVyKHJhbmdlLnN0YXJ0LCBwb2ludCkpICYmIGlzX2x0ZXEoZG9jdW1lbnRP
cmRlcihwb2ludCwgcmFuZ2UuZW5kKSk7Cit9CisKK2Jvb2wgaXNQb2ludEluUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgcG9pbnQp
Cit7CisgICAgcmV0dXJuIHBvaW50ICYmIGlzUG9pbnRJblJhbmdlKHJhbmdlLCAqcG9pbnQpOwor
fQorCitQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50KQoreworICAgIGlmIChhdXRvIG9yZGVyID0g
ZG9jdW1lbnRPcmRlcihyYW5nZS5zdGFydCwgcG9pbnQpOyAhaXNfbHQob3JkZXIpKQorICAgICAg
ICByZXR1cm4gb3JkZXI7CisgICAgaWYgKGF1dG8gb3JkZXIgPSBkb2N1bWVudE9yZGVyKHJhbmdl
LmVuZCwgcG9pbnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgICAgICByZXR1cm4gb3JkZXI7CisgICAg
cmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6ZXF1aXZhbGVudDsKK30KKworUGFydGlhbE9yZGVyaW5n
IGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQsIGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSkKK3sKKyAgICBpZiAoYXV0byBvcmRlciA9IGRvY3VtZW50T3JkZXIocG9pbnQs
IHJhbmdlLnN0YXJ0KTsgIWlzX2d0KG9yZGVyKSkKKyAgICAgICAgcmV0dXJuIG9yZGVyOworICAg
IGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRPcmRlcihwb2ludCwgcmFuZ2UuZW5kKTsgIWlzX2x0
KG9yZGVyKSkKKyAgICAgICAgcmV0dXJuIG9yZGVyOworICAgIHJldHVybiBQYXJ0aWFsT3JkZXJp
bmc6OmVxdWl2YWxlbnQ7Cit9CisKK2Jvb2wgY29udGFpbnMoY29uc3QgU2ltcGxlUmFuZ2UmIG91
dGVyUmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBpbm5lclJhbmdlKQoreworICAgIHJldHVybiBp
c19sdGVxKGRvY3VtZW50T3JkZXIob3V0ZXJSYW5nZS5zdGFydCwgaW5uZXJSYW5nZS5zdGFydCkp
ICYmIGlzX2d0ZXEoZG9jdW1lbnRPcmRlcihvdXRlclJhbmdlLmVuZCwgaW5uZXJSYW5nZS5lbmQp
KTsKK30KKworYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBTaW1w
bGVSYW5nZSYgYikKK3sKKyAgICByZXR1cm4gaXNfbHRlcShkb2N1bWVudE9yZGVyKGEuc3RhcnQs
IGIuZW5kKSkgJiYgaXNfbHRlcShkb2N1bWVudE9yZGVyKGIuc3RhcnQsIGEuZW5kKSk7Cit9CisK
Ky8vIEZJWE1FOiBOYW1lIHRoaXMgInVuaW9uUmFuZ2UiIGluc3RlYWQ/IFRoZSB3b3JkICJ1bmlv
biIgaXMgYSBub3VuIG1vcmUgdGhhbiBhIHZlcmIuIFdvdWxkIGxpa2UgdG8gY2FsbCBpdCBqdXN0
IHVuaW9uIGlmIGl0IHdhc24ndCBmb3IgdGhlIGNvbmZsaWN0IHdpdGggdGhlIEMga2V5d29yZC4K
K1NpbXBsZVJhbmdlIHVuaW9uUmFuZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBTaW1w
bGVSYW5nZSYgYikKK3sKKyAgICBhdXRvJiBzdGFydCA9IGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihh
LnN0YXJ0LCBiLnN0YXJ0KSkgPyBhIDogYjsKKyAgICBhdXRvJiBlbmQgPSBpc19sdGVxKGRvY3Vt
ZW50T3JkZXIoYS5lbmQsIGIuZW5kKSkgPyBiIDogYTsKKyAgICByZXR1cm4geyBzdGFydC5zdGFy
dCwgZW5kLmVuZCB9OworfQorCitib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSwgY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgYSBtb3JlIGVm
ZmljaWVudCBhbGdvcml0aG0gdGhhdCBhdm9pZHMgYWx3YXlzIGNvbXB1dGluZyB0aGUgbm9kZSBp
bmRleC4KKyAgICAvLyBGSVhNRTogRG9lcyB0aGlzIGNvbnN0X2Nhc3QgcG9pbnQgdG8gYSBkZXNp
Z24gcHJvYmxlbT8KKyAgICBhdXRvIG5vZGVSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUo
Y29uc3RfY2FzdDxOb2RlJj4obm9kZSkpOworICAgIHJldHVybiBub2RlUmFuZ2UgJiYgY29udGFp
bnMocmFuZ2UsICpub2RlUmFuZ2UpOworfQorCitib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQoreworICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBhIG1vcmUgZWZmaWNpZW50IGFsZ29yaXRobSB0aGF0IGF2b2lkcyBhbHdheXMgY29tcHV0aW5n
IHRoZSBub2RlIGluZGV4LgorICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgY29uc3RfY2FzdCBwb2lu
dCB0byBhIGRlc2lnbiBwcm9ibGVtPworICAgIGF1dG8gbm9kZVJhbmdlID0gbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZShjb25zdF9jYXN0PE5vZGUmPihub2RlKSk7CisgICAgaWYgKCFub2RlUmFuZ2Up
CisgICAgICAgIHJldHVybiBub2RlLmNvbnRhaW5zKHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIo
KSk7CisgICAgcmV0dXJuIGlzX2x0KGRvY3VtZW50T3JkZXIobm9kZVJhbmdlLT5zdGFydCwgcmFu
Z2UuZW5kKSkgJiYgaXNfbHQoZG9jdW1lbnRPcmRlcihyYW5nZS5zdGFydCwgbm9kZVJhbmdlLT5l
bmQpKTsKKworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCmluZGV4IDBkNWNkMWVhYjJh
NzcxZWI2NzI2NWRkNjMwMjQ1MzQxMTI3ZmM1ZGYuLjQ2MjEwZDc4ZjE4NGUxZjU4YjViNGViMzM2
MjVmODNhMjgxOWM1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCkBAIC02NSw2ICs2NSwy
MCBAQCBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Io
Y29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBsZVJhbmdl
JiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAorV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BvaW50SW5S
YW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK2Jvb2wgaXNQ
b2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBv
aW50PiYpOworCitXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdl
JiBvdXRlclJhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgaW5uZXJSYW5nZSk7CitXRUJDT1JFX0VY
UE9SVCBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5n
ZSYpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgdW5pb25SYW5nZXMoY29uc3QgU2ltcGxl
UmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOworCitXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRh
aW5zKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOworV0VCQ09SRV9FWFBPUlQgYm9v
bCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOworCisvLyBSZXR1
cm5zIGVxdWl2YWxlbnQgaWYgcG9pbnQgaXMgaW4gcmFuZ2UuCitXRUJDT1JFX0VYUE9SVCBQYXJ0
aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5k
YXJ5UG9pbnQmKTsKK1dFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVy
KGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYpOworCiBjbGFzcyBJbnRl
cnNlY3RpbmdOb2RlUmFuZ2U7CiBJbnRlcnNlY3RpbmdOb2RlUmFuZ2UgaW50ZXJzZWN0aW5nTm9k
ZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5k
ZXggMjgzYWVhZDY1OGQ0MWVlMmEwYmMzNWYyMzAxZTk1YWY0Y2UxMjNiYy4uNmIxODRjYTg1N2Nh
N2VlY2E1MWQ2YmFmZjU1NGI1YTIxNTI1NzdkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcu
Y3BwCkBAIC03OSw0MCArNzksMTggQEAgYm9vbCBpc0F0b21pY05vZGUoY29uc3QgTm9kZSogbm9k
ZSkKICAgICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSB8fCBlZGl0aW5n
SWdub3Jlc0NvbnRlbnQoKm5vZGUpKTsKIH0KIAotLy8gQ29tcGFyZSB0d28gcG9zaXRpb25zLCB0
YWtpbmcgaW50byBhY2NvdW50IHRoZSBwb3NzaWJpbGl0eSB0aGF0IG9uZSBvciBib3RoCi0vLyBj
b3VsZCBiZSBpbnNpZGUgYSBzaGFkb3cgdHJlZS4gT25seSB3b3JrcyBmb3Igbm9uLW51bGwgdmFs
dWVzLgorLy8gRklYTUU6IENoYW5nZSBjYWxsZXJzIHRvIHVzZSBkb2N1bWVudE9yZGVyIGFuZCBk
ZWxldGUgdGhpcy4KIGludCBjb21wYXJlUG9zaXRpb25zKGNvbnN0IFBvc2l0aW9uJiBhLCBjb25z
dCBQb3NpdGlvbiYgYikKIHsKLSAgICBUcmVlU2NvcGUqIGNvbW1vblNjb3BlID0gY29tbW9uVHJl
ZVNjb3BlKGEuY29udGFpbmVyTm9kZSgpLCBiLmNvbnRhaW5lck5vZGUoKSk7Ci0KLSAgICBpZiAo
IWNvbW1vblNjb3BlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE5vZGUqIG5vZGVBID0gY29t
bW9uU2NvcGUtPmFuY2VzdG9yTm9kZUluVGhpc1Njb3BlKGEuY29udGFpbmVyTm9kZSgpKTsKLSAg
ICBBU1NFUlQobm9kZUEpOwotICAgIGJvb2wgaGFzRGVzY2VuZGVudEEgPSBub2RlQSAhPSBhLmNv
bnRhaW5lck5vZGUoKTsKLSAgICBpbnQgb2Zmc2V0QSA9IGhhc0Rlc2NlbmRlbnRBID8gMCA6IGEu
Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotCi0gICAgTm9kZSogbm9kZUIgPSBjb21t
b25TY29wZS0+YW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUoYi5jb250YWluZXJOb2RlKCkpOwotICAg
IEFTU0VSVChub2RlQik7Ci0gICAgYm9vbCBoYXNEZXNjZW5kZW50QiA9IG5vZGVCICE9IGIuY29u
dGFpbmVyTm9kZSgpOwotICAgIGludCBvZmZzZXRCID0gaGFzRGVzY2VuZGVudEIgPyAwIDogYi5j
b21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0KLSAgICBpbnQgYmlhcyA9IDA7Ci0gICAg
aWYgKG5vZGVBID09IG5vZGVCKSB7Ci0gICAgICAgIGlmIChoYXNEZXNjZW5kZW50QSkKLSAgICAg
ICAgICAgIGJpYXMgPSAtMTsKLSAgICAgICAgZWxzZSBpZiAoaGFzRGVzY2VuZGVudEIpCi0gICAg
ICAgICAgICBiaWFzID0gMTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbXBhcmlzb25SZXN1bHQgPSBS
YW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKG5vZGVBLCBvZmZzZXRBLCBub2RlQiwgb2Zmc2V0
Qik7Ci0gICAgaWYgKGNvbXBhcmlzb25SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBiaWFzOwotICAgIGF1dG8gcmVzdWx0ID0gY29tcGFyaXNvblJlc3VsdC5yZWxlYXNlUmV0
dXJuVmFsdWUoKTsKLSAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0IDogYmlhczsKKyAgICBhdXRv
IG9yZGVyaW5nID0gZG9jdW1lbnRPcmRlcihhLCBiKTsKKyAgICBpZiAoaXNfbHQob3JkZXJpbmcp
KQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKGlzX2d0KG9yZGVyaW5nKSkKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgcmV0dXJuIDA7CiB9CiAKKy8vIEZJWE1FOiBDaGFuZ2UgY2FsbGVycyB0
byB1c2UgZG9jdW1lbnRPcmRlciBhbmQgZGVsZXRlIHRoaXMuCiBpbnQgY29tcGFyZVBvc2l0aW9u
cyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsK
ICAgICByZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhhLmRlZXBFcXVpdmFsZW50KCksIGIuZGVlcEVx
dWl2YWxlbnQoKSk7CkBAIC0xMTYzLDkgKzExNDEsNyBAQCBzdGF0aWMgYm9vbCBpc1Zpc2libHlB
ZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpCiAv
LyBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBub2RlIGlzIHZpc2li
bHkgZml0IGluc2lkZSBzZWxlY3RlZFJhbmdlCiBib29sIGlzTm9kZVZpc2libHlDb250YWluZWRX
aXRoaW4oTm9kZSYgbm9kZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIC8vIElm
IHRoZSBub2RlIGlzIGluc2lkZSB0aGUgcmFuZ2UsIHRoZW4gaXQgc3VyZWx5IGlzIGNvbnRhaW5l
ZCB3aXRoaW4uCi0gICAgYXV0byBjb21wYXJpc29uUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHJh
bmdlKS0+Y29tcGFyZU5vZGUobm9kZSk7Ci0gICAgaWYgKCFjb21wYXJpc29uUmVzdWx0Lmhhc0V4
Y2VwdGlvbigpICYmIGNvbXBhcmlzb25SZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPT0gUmFu
Z2U6Ok5PREVfSU5TSURFKQorICAgIGlmIChjb250YWlucyhyYW5nZSwgbm9kZSkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgYXV0byBzdGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRl
eCAxZjBhNzcyMjllY2YzMzBiYzM5MTNmZjdhZDc0MTY5ZGUyMTYwMTlhLi4xNjA3ZTg3Y2RhYzEz
MWE0YzE2MDk3N2E2NDhjZjUyMWQ0NGE3MGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CkBAIC0zNTUwLDEwICszNTUwLDggQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFu
Z2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9uYWwKIHN0YXRpYyBi
b29sIGlzRnJhbWVJblJhbmdlKEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
KQogewogICAgIGZvciAoYXV0byogb3duZXJFbGVtZW50ID0gZnJhbWUub3duZXJFbGVtZW50KCk7
IG93bmVyRWxlbWVudDsgb3duZXJFbGVtZW50ID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLm93
bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIGlmICgmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09
ICZyYW5nZS5zdGFydC5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNy
ZWF0ZUxpdmVSYW5nZShyYW5nZSktPmludGVyc2VjdHNOb2RlKCpvd25lckVsZW1lbnQpOwotICAg
ICAgICAgICAgcmV0dXJuICFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpOwotICAgICAgICB9CisgICAgICAgIGlmICgmb3duZXJFbGVtZW50LT5kb2N1
bWVudCgpID09ICZyYW5nZS5zdGFydC5kb2N1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGlu
dGVyc2VjdHMocmFuZ2UsICpvd25lckVsZW1lbnQpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CiB9CkBAIC0zNzAzLDE4ICszNzAxLDE2IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9y
VGVsZXBob25lTnVtYmVycygpCiAKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7Ci0gICAgICAgIGlmIChh
dXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKSB7
Ci0gICAgICAgICAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gZWFj
aCBkaXJlY3Rpb24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBwaG9uZSBudW1iZXJz
LgotICAgICAgICAgICAgY29uc3RleHByIHVuc2lnbmVkIGNoYXJhY3RlcnNUb0V4dGVuZCA9IDE1
OwotICAgICAgICAgICAgYXV0byBzZWxlY3RlZExpdmVSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZSgq
c2VsZWN0ZWRSYW5nZSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogc2NhbkZvclRl
bGVwaG9uZU51bWJlcnMoZXh0ZW5kU2VsZWN0aW9uKCpzZWxlY3RlZFJhbmdlLCBjaGFyYWN0ZXJz
VG9FeHRlbmQpKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgZG8gdGhp
cyB1bmNvbmRpdGlvbmFsbHkgYW5kIHRoZSBjb2RlIGJlbG93IHRoaXMgb25seSB3aGVuIGl0IG92
ZXJsYXBzIHRoZSBzZWxlY3Rpb24/Ci0gICAgICAgICAgICAgICAgYWRkTWFya2VyKHJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKLQotICAgICAgICAgICAgICAgIC8vIE9u
bHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVtYmVyIGlmIHRo
ZXkgb3ZlcmxhcCB3aXRoIHRoZSBhY3R1YWwgc2VsZWN0aW9uIHJhbmdlLgotICAgICAgICAgICAg
ICAgIGlmIChyYW5nZXNPdmVybGFwKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCksIHNlbGVj
dGVkTGl2ZVJhbmdlLnB0cigpKSkKLSAgICAgICAgICAgICAgICAgICAgbV9kZXRlY3RlZFRlbGVw
aG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2UpOwotICAgICAgICAgICAgfQorICAgICAgICBh
dXRvIHNlbGVjdGVkUmFuZ2UgPSAqc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsK
KyAgICAgICAgLy8gRXh0ZW5kIHRoZSByYW5nZSBhIGZldyBjaGFyYWN0ZXJzIGluIGVhY2ggZGly
ZWN0aW9uIHRvIGRldGVjdCBpbmNvbXBsZXRlbHkgc2VsZWN0ZWQgcGhvbmUgbnVtYmVycy4KKyAg
ICAgICAgY29uc3RleHByIHVuc2lnbmVkIGNoYXJhY3RlcnNUb0V4dGVuZCA9IDE1OworICAgICAg
ICBmb3IgKGF1dG8mIHJhbmdlIDogc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoZXh0ZW5kU2VsZWN0
aW9uKHNlbGVjdGVkUmFuZ2UsIGNoYXJhY3RlcnNUb0V4dGVuZCkpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogV2h5IGRvIHdlIGRvIHRoaXMgdW5jb25kaXRpb25hbGx5IGluc3RlYWQgb2Ygd2hl
biBvbmx5IHdoZW4gaXQgb3ZlcmxhcHMgdGhlIHNlbGVjdGlvbj8KKyAgICAgICAgICAgIGFkZE1h
cmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcik7CisKKyAgICAgICAg
ICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVt
YmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBzZWxlY3Rpb24uCisgICAgICAgICAgICBpZiAo
aW50ZXJzZWN0cyhyYW5nZSwgc2VsZWN0ZWRSYW5nZSkpCisgICAgICAgICAgICAgICAgbV9kZXRl
Y3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2UpOwogICAgICAgICB9CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCAyNDZmYjI2
YjdlODc0N2YzMGQ4OWJlNjk3Yjk5MDZkNzRlNmM5OWQxLi5iMDQ5NzU5NmE3NWJlYzExOWI2ODcy
NDQ5YzRmNTc0N2M1ZjAzYzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKQEAgLTIyOCwxMyArMjI4LDYgQEAgc3RhdGljIHVuc2lnbmVkIHZlcnRpY2FsU2Nyb2xs
RGlzdGFuY2UoRnJhbWUmIGZyYW1lKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
U2Nyb2xsYmFyOjpwYWdlU3RlcChoZWlnaHQpKTsKIH0KIAotc3RhdGljIFNpbXBsZVJhbmdlIHVu
aW9uUmFuZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBTaW1wbGVSYW5nZSYgYikKLXsK
LSAgICBhdXRvJiBzdGFydCA9IGNyZWF0ZUxpdmVSYW5nZShhKS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKGIpKS5yZWxlYXNlUmV0
dXJuVmFsdWUoKSA8PSAwID8gYSA6IGI7Ci0gICAgYXV0byYgZW5kID0gY3JlYXRlTGl2ZVJhbmdl
KGEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGNyZWF0ZUxpdmVS
YW5nZShiKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGIgOiBhOwotICAgIHJldHVybiB7
IHN0YXJ0LnN0YXJ0LCBlbmQuZW5kIH07Ci19Ci0KIC8vIEV4ZWN1dGUgY29tbWFuZCBmdW5jdGlv
bnMKIAogc3RhdGljIGJvb2wgZXhlY3V0ZUJhY2tDb2xvcihGcmFtZSYgZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0zNTMs
MTQgKzM0NiwxNiBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9FbmRPZlBhcmFncmFwaChG
cmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdQogCiBzdGF0aWMgYm9vbCBleGVj
dXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
LCBjb25zdCBTdHJpbmcmKQogewotICAgIGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmso
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8mIGVkaXRvciA9IGZyYW1lLmVkaXRvcigp
OwogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwotICAgIGlmIChtYXJr
ICYmIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgewotICAgICAgICBpZiAoIXNlbGVj
dGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uUmFuZ2VzKCptYXJrLCAqZnJhbWUuZWRpdG9yKCku
c2VsZWN0ZWRSYW5nZSgpKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3Nl
VHlwaW5nOjpZZXMpKQorICAgIGF1dG8gbWFya1JhbmdlID0gZWRpdG9yLm1hcmsoKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAobWFya1JhbmdlICYmIHNlbGVjdGlv
blJhbmdlKSB7CisgICAgICAgIGlmICghc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25S
YW5nZXMoKm1hcmtSYW5nZSwgKnNlbGVjdGlvblJhbmdlKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICBmcmFtZS5lZGl0b3IoKS5wZXJmb3JtRGVsZXRlKCk7Ci0gICAgZnJhbWUu
ZWRpdG9yKCkuc2V0TWFyayhzZWxlY3Rpb24uc2VsZWN0aW9uKCkpOworICAgIGVkaXRvci5wZXJm
b3JtRGVsZXRlKCk7CisgICAgZWRpdG9yLnNldE1hcmsoc2VsZWN0aW9uLnNlbGVjdGlvbigpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA1MCwxMyArMTA0NSwxNSBAQCBzdGF0aWMgYm9v
bCBleGVjdXRlU2VsZWN0U2VudGVuY2UoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbgogCiBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lJiBm
cmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAg
IGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOwot
ICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpOwotICAg
IGlmICghbWFyayB8fCAhc2VsZWN0aW9uKSB7CisgICAgYXV0byYgZWRpdG9yID0gZnJhbWUuZWRp
dG9yKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgYXV0
byBtYXJrUmFuZ2UgPSBlZGl0b3IubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0
byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGlmICghbWFya1JhbmdlIHx8ICFzZWxlY3Rpb25SYW5nZSkgewogICAgICAgICBQ
QUw6OnN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uUmFuZ2VzKCptYXJrLCAqc2VsZWN0
aW9uKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMp
OworICAgIHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uUmFuZ2VzKCptYXJrUmFuZ2Us
ICpzZWxlY3Rpb25SYW5nZSksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6WWVzKTsKICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIGlnbm9yZSB0aGUgcmV0dXJu
IHZhbHVlIGZyb20gc2V0U2VsZWN0ZWRSYW5nZSBoZXJlPwogICAgIHJldHVybiB0cnVlOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBlMDEwOGIyM2E2
NWZmMDg2NWUyMzgwZjVlYzFjYWFkNTg2M2E1NzY4Li5mZDA2ZjY0ZmMwNTUzOWJhNDlhYjVjNzUy
NWU0YWQ3MjVkYjA5OTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcApAQCAtNTU0LDE4ICs1NTQsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRv
Tm9kZU1vZGlmaWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVkLCBib28KICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgbV9zZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24obV9z
ZWxlY3Rpb24uZW5kKCksIG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIH0gZWxzZSBpZiAoaXNS
YW5nZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9zZWxlY3Rpb24uZmlyc3RSYW5n
ZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbXBhcmVOb2RlUmVzdWx0ID0gY3JlYXRlTGl2ZVJh
bmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKG5vZGUpOwotICAgICAgICAgICAgaWYgKCFjb21wYXJl
Tm9kZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29tcGFy
ZVJlc3VsdCA9IGNvbXBhcmVOb2RlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgICAg
ICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0JFRk9SRV9BTkRfQUZU
RVIgfHwgY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdGhpbmcgaGVyZSwgd2hlbiB0aGlzIG5vZGUncyByZW5k
ZXJlciB3YXMgZGVzdHJveWVkLCB0aGUgcmVjdCB0aGF0IGl0Ci0gICAgICAgICAgICAgICAgICAg
IC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVjdGlvbiBnYXBzIHRo
YXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSByZW1v
dmFsIHdvdWxkbid0IGJlIGludmFsaWRhdGVkLgotICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogRG9uJ3QgZG8gc28gbXVjaCB1bm5lY2Vzc2FyeSBpbnZhbGlkYXRpb24uCi0gICAgICAgICAg
ICAgICAgICAgIGNsZWFyUmVuZGVyVHJlZVNlbGVjdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQorICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fc2VsZWN0aW9u
LmZpcnN0UmFuZ2UoKTsgcmFuZ2UgJiYgaW50ZXJzZWN0cygqcmFuZ2UsIG5vZGUpKSB7CisgICAg
ICAgICAgICAvLyBJZiB3ZSBkaWQgbm90aGluZyBoZXJlLCB3aGVuIHRoaXMgbm9kZSdzIHJlbmRl
cmVyIHdhcyBkZXN0cm95ZWQsIHRoZSByZWN0IHRoYXQgaXQKKyAgICAgICAgICAgIC8vIG9jY3Vw
aWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVjdGlvbiBnYXBzIHRoYXQgY2hhbmdl
IGFzIGEgcmVzdWx0IG9mCisgICAgICAgICAgICAvLyB0aGUgcmVtb3ZhbCB3b3VsZG4ndCBiZSBp
bnZhbGlkYXRlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBkbyBzbyBtdWNoIHVubmVj
ZXNzYXJ5IGludmFsaWRhdGlvbi4KKyAgICAgICAgICAgIGNsZWFyUmVuZGVyVHJlZVNlbGVjdGlv
biA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwMzQsNyArMjAyOCw3IEBAIGJvb2wg
RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiByYW5nZSwgRUFmZmluCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKCZyYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpICE9ICZyYW5n
ZS0+ZW5kLmNvbnRhaW5lci0+ZG9jdW1lbnQoKSkKKyAgICBpZiAoJnJhbmdlLT5zdGFydC5kb2N1
bWVudCgpICE9ICZyYW5nZS0+ZW5kLmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKCpyYW5nZSwgYWZmaW5pdHkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENv
bW1hbmQuY3BwCmluZGV4IDVlZDBkZTlhMzEwYjMxYmU2M2UwYTNkNDMzODk4YzE5NTI3Mjg1NmUu
LjViN2JlNzg4YzY4NGUxMjIyOWJjNzc3ZTk5NmJmOTFhZDllNWRiMmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAK
QEAgLTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVwbGFjZVJhbmdlV2l0
aFRleHRDb21tYW5kOjpSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHRleHQpCi0gICAgOiBDb21wb3Np
dGVFZGl0Q29tbWFuZChyYW5nZVRvQmVSZXBsYWNlZC5zdGFydC5jb250YWluZXItPmRvY3VtZW50
KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQorICAgIDogQ29tcG9zaXRlRWRpdENv
bW1hbmQocmFuZ2VUb0JlUmVwbGFjZWQuc3RhcnQuZG9jdW1lbnQoKSwgRWRpdEFjdGlvbjo6SW5z
ZXJ0UmVwbGFjZW1lbnQpCiAgICAgLCBtX3JhbmdlVG9CZVJlcGxhY2VkKHJhbmdlVG9CZVJlcGxh
Y2VkKQogICAgICwgbV90ZXh0KHRleHQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRleCA4NjcxMzIwZGM0M2M2NWFl
M2YwMDUwNDM3ZjQzOTFmMTZmODljZjU2Li5hODQ4NjYzNjUzYTBmN2ZmMjk3MzczNmIxMTk3MmM4
YzY0YzhjYWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVj
dGlvbikKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJhbmdlVG9CZUNvcnJlY3RlZC5zdGFy
dC5jb250YWluZXItPmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQor
ICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQocmFuZ2VUb0JlQ29ycmVjdGVkLnN0YXJ0LmRvY3Vt
ZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQogICAgICwgbV9yYW5nZVRvQmVD
b3JyZWN0ZWQocmFuZ2VUb0JlQ29ycmVjdGVkKQogICAgICwgbV9zZWxlY3Rpb25Ub0JlQ29ycmVj
dGVkKG1fcmFuZ2VUb0JlQ29ycmVjdGVkKQogICAgICwgbV9jb3JyZWN0aW9uKGNvcnJlY3Rpb24p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXgg
ZTIzODJiZWIwMTc5ODU0YzJhNTIzOGIzZDM3MGI5NGE1ZTUwNTdkNS4uMzVmZTlkNmE4ZWRkYzk4
YWRjNDNlNTU0MDA4NjFiOTRlNDNlNGZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMzM2LDcgKzMzNiw3IEBAIGF1dG8gVGV4dENoZWNr
aW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShi
b29sIGNoZWNrCiAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hcikKICAgICAgICAgICAg
ICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CiAg
ICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uOwotICAgICAg
ICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3JhcGhSYW5nZS5zdGFydC5jb250YWlu
ZXItPmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gcGFyYWdyYXBoUmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwogICAgICAgICAgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCptX2NsaWVudC50ZXh0Q2hl
Y2tlcigpLCBwYXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMsIGN1cnJlbnRT
ZWxlY3Rpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwTGVnYWN5Lm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlv
bmFyeUxvb2t1cExlZ2FjeS5tbQppbmRleCA4NzYxMjBiYjA5YjEyZTA5ZTRkZWNhNThlNTU0ZDMw
MjcwMWVmNDM1Li41NTgyNGZhMDgzNmUwMzNjNzkyNjYxNmE0Nzk3MTEyMGUzNzQzYzk5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdh
Y3kubW0KQEAgLTY4LDExICs2OCw4IEBAIHN0YXRpYyBib29sIHNlbGVjdGlvbkNvbnRhaW5zUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmlzCiAgICAgaWYg
KCFzZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRv
IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAo
IXNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjcmVh
dGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb250YWlucyhwb3NpdGlvbik7CisgICAgYXV0
byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKKyAgICByZXR1cm4gc2Vs
ZWN0ZWRSYW5nZSAmJiBpc1BvaW50SW5SYW5nZSgqc2VsZWN0ZWRSYW5nZSwgbWFrZUJvdW5kYXJ5
UG9pbnQocG9zaXRpb24pKTsKIH0KIAogT3B0aW9uYWw8c3RkOjp0dXBsZTxTaW1wbGVSYW5nZSwg
TlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
aW5kZXggMWY3MTk0YTczMjhlOTQ3YWViYjYyYWMxYzhkNThmZTkyYTE1MGE3ZS4uNmI4ZTM5OWE1
ZjhhZWRmMWViYjQ3YmJiNmY2ZDUyNjlkYmE4NWQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcApAQCAtMTEyMCw3ICsxMTIwLDcgQEAgc3RhdGljIGJvb2wgY29udGV4dFByZXNlcnZlc05l
d2xpbmUoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQpCiAKIFJlZjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgYXV0byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0YXJ0LmNv
bnRhaW5lci0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IGNvbnRleHQuc3RhcnQu
ZG9jdW1lbnQoKTsKICAgICBhdXRvIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRG
cmFnbWVudCgpOwogICAgIAogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKaW5kZXgg
YTViZTA3MWUzNjg2MDc3ZWUzNmQyMWUzNWE1ODM5ODA0ZDk4N2YyMi4uNjA5ZWQxMTE0ZmQxOTk2
Y2U4OTczYjc0Yzc5YmM3ZmUwNTI2ZWQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKQEAgLTQ1NSw3ICs0NTUsNyBA
QCBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKEZyYW1l
JiBmcmFtZSkKIAogUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNy
ZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgYXV0byYgZG9jdW1lbnQgPSBy
YW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBy
YW5nZS5zdGFydC5kb2N1bWVudCgpOwogICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUo
KTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCA5NjQ0OWQzMjdhZWI5YTkxY2ZlZDc5MjljYTZjMzY2
NDEyMDIwNWJmLi5iN2IxMmFlNjE3OWU4NTBlNmQ4YjZkOTliMDMwNWJkNTYyMzNiODEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0yODQsMTUgKzI4NCwxMyBAQCB2b2lk
IERPTVNlbGVjdGlvbjo6bW9kaWZ5KGNvbnN0IFN0cmluZyYgYWx0ZXJTdHJpbmcsIGNvbnN0IFN0
cmluZyYgZGlyZWN0aW9uU3RyaQogCiBFeGNlcHRpb25Pcjx2b2lkPiBET01TZWxlY3Rpb246OmV4
dGVuZChOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgYXV0byogZnJhbWUgPSB0
aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKHRoaXMtPmZyYW1lKCkp
OwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYgKG9mZnNldCA+
IChub2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSA/IGNhcmV0TWF4T2Zmc2V0KG5vZGUpIDogbm9k
ZS5jb3VudENoaWxkTm9kZXMoKSkpCisgICAgaWYgKG9mZnNldCA+IG5vZGUubGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogICAgIGlmICghaXNW
YWxpZEZvclBvc2l0aW9uKCZub2RlKSkKICAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFJlZjxG
cmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldEV4dGVu
dChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJm5vZGUsIG9mZnNldCksIERPV05TVFJFQU0p
OwogICAgIHJldHVybiB7IH07CiB9CkBAIC0zMDEsMjIgKzI5OSwxMCBAQCBFeGNlcHRpb25PcjxS
ZWY8UmFuZ2U+PiBET01TZWxlY3Rpb246OmdldFJhbmdlQXQodW5zaWduZWQgaW5kZXgpCiB7CiAg
ICAgaWYgKGluZGV4ID49IHJhbmdlQ291bnQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEluZGV4U2l6ZUVycm9yIH07Ci0KLSAgICAvLyBJZiB5b3UncmUgaGl0dGluZyB0aGlzLCB5b3Un
dmUgYWRkZWQgYnJva2VuIG11bHRpLXJhbmdlIHNlbGVjdGlvbiBzdXBwb3J0LgotICAgIEFTU0VS
VChyYW5nZUNvdW50KCkgPT0gMSk7Ci0KLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7
Ci0gICAgaWYgKGF1dG8qIHNoYWRvd0FuY2VzdG9yID0gc2VsZWN0aW9uU2hhZG93QW5jZXN0b3Io
KmZyYW1lKSkgewotICAgICAgICBhdXRvKiBjb250YWluZXIgPSBzaGFkb3dBbmNlc3Rvci0+cGFy
ZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOwotICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBz
aGFkb3dBbmNlc3Rvci0+Y29tcHV0ZU5vZGVJbmRleCgpOwotICAgICAgICByZXR1cm4gY3JlYXRl
TGl2ZVJhbmdlKG1ha2VTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50IHsgKmNvbnRhaW5lciwgb2Zm
c2V0IH0pKTsKLSAgICB9Ci0KLSAgICBhdXRvIGZpcnN0UmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwotICAgIEFTU0VSVChmaXJzdFJhbmdlKTsKLSAg
ICBpZiAoIWZpcnN0UmFuZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVF
cnJvciB9OwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKmZpcnN0UmFuZ2UpOworICAgIGF1
dG8mIGZyYW1lID0gKnRoaXMtPmZyYW1lKCk7CisgICAgaWYgKGF1dG8gc2hhZG93QW5jZXN0b3Ig
PSBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcihmcmFtZSkpCisgICAgICAgIHJldHVybiBjcmVhdGVM
aXZlUmFuZ2UobWFrZVNpbXBsZVJhbmdlKCptYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGUoKnNo
YWRvd0FuY2VzdG9yKSkpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKmZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9u
OjpyZW1vdmVBbGxSYW5nZXMoKQpAQCAtMzI3LDUwICszMTMsMjIgQEAgdm9pZCBET01TZWxlY3Rp
b246OnJlbW92ZUFsbFJhbmdlcygpCiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLmNsZWFyKCk7CiB9
CiAKLXZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgcmFuZ2UpCit2b2lkIERPTVNl
bGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIGxpdmVSYW5nZSkKIHsKLSAgICBhdXRvKiBmcmFtZSA9
IHRoaXMtPmZyYW1lKCk7CisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIodGhpcy0+ZnJhbWUo
KSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmPEZyYW1lPiBw
cm90ZWN0b3IoKmZyYW1lKTsKLQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobGl2
ZVJhbmdlKTsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAg
YXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNv
bnRhaW5lci0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgewotICAgICAgICBzZWxlY3Rpb24uc2V0
U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOworCisgICAgaWYgKGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7Cisg
ICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb250YWluaW5nU2hh
ZG93Um9vdCgpICYmIGludGVyc2VjdHMoKnNlbGVjdGVkUmFuZ2UsIHJhbmdlKSkKKyAgICAgICAg
ICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24odW5pb25SYW5nZXMoKnNlbGVjdGVkUmFuZ2UsIHJh
bmdlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIG5vcm1hbGl6ZWRSYW5n
ZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKTsKLSAgICBhdXRvIHJlc3VsdCA9IHJh
bmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpub3JtYWxp
emVkUmFuZ2UpOwotICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewotICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRp
c2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgdHdvIHJh
bmdlcyBkb24ndCBpbnRlcnNlY3QuCi0gICAgICAgIHJlc3VsdCA9IHJhbmdlLmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqbm9ybWFsaXplZFJhbmdlKTsKLSAgICAg
ICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpID4gLTEpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKm5vcm1hbGl6ZWRSYW5nZSk7Ci0gICAgICAgICAgICBp
ZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkg
PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgcmFuZ2VzIGludGVyc2VjdC4KLSAgICAg
ICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24o
JnJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLnN0YXJ0T2Zmc2V0KCkpLCBtYWtlRGVwcmVj
YXRlZExlZ2FjeVBvc2l0aW9uKCZub3JtYWxpemVkUmFuZ2UtPmVuZENvbnRhaW5lcigpLCBub3Jt
YWxpemVkUmFuZ2UtPmVuZE9mZnNldCgpKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIFRoZSBuZXcgcmFuZ2UgY29udGFpbnMgdGhlIG9yaWdp
bmFsIHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obWFrZVNp
bXBsZVJhbmdlKHJhbmdlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBX
ZSBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgdHdvIHJhbmdlcyBkb24ndCBpbnRlcnNlY3QuCi0g
ICAgICAgIHJlc3VsdCA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RP
X1NUQVJULCAqbm9ybWFsaXplZFJhbmdlKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0
aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMSkgewotICAgICAgICAgICAg
cmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAq
bm9ybWFsaXplZFJhbmdlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigp
ICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewotICAgICAgICAgICAgICAg
IC8vIFRoZSBvcmlnaW5hbCByYW5nZSBjb250YWlucyB0aGUgbmV3IHJhbmdlLgotICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdlKCpub3JtYWxpemVk
UmFuZ2UpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHJh
bmdlcyBpbnRlcnNlY3QuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhtYWtlRGVw
cmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZub3JtYWxpemVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCks
IG5vcm1hbGl6ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSksIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9z
aXRpb24oJnJhbmdlLmVuZENvbnRhaW5lcigpLCByYW5nZS5lbmRPZmZzZXQoKSksIERPV05TVFJF
QU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIHNlbGVjdGlvbi5zZXRT
ZWxlY3Rpb24ocmFuZ2UpOwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3Vt
ZW50KCkKQEAgLTM5Miw0NSArMzUwLDE5IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpkZWxldGVGcm9t
RG9jdW1lbnQoKQogCiBib29sIERPTVNlbGVjdGlvbjo6Y29udGFpbnNOb2RlKE5vZGUmIG5vZGUs
IGJvb2wgYWxsb3dQYXJ0aWFsKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBUaGlzIGJlaGF2aW9y
IGRvZXMgbm90IG1hdGNoIHdoYXQgdGhlIHNlbGVjdGlvbiBBUEkgc3RhbmRhcmQgc3BlY2lmaWVz
LgorICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSkKKyAgICAgICAgYWxsb3dQYXJ0aWFsID0gdHJ1
ZTsKKwogICAgIGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+c2Vs
ZWN0aW9uKCk7Ci0gICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICE9ICZub2RlLmRvY3VtZW50KCkg
fHwgc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWY8
Tm9kZT4gcHJvdGVjdGVkTm9kZShub2RlKTsKLSAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxl
Y3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGVk
UmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAg
IGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5zdGFydC5jb250YWluZXItPmNv
bnRhaW5pbmdTaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENvbnRh
aW5lck5vZGUqIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVu
dE5vZGUgfHwgIXBhcmVudE5vZGUtPmlzQ29ubmVjdGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB1bnNpZ25lZCBub2RlSW5kZXggPSBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKLQot
ICAgIGF1dG8gc3RhcnRzUmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhwYXJl
bnROb2RlLCBub2RlSW5kZXgsICZzZWxlY3RlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBzZWxl
Y3RlZFJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBpZiAoc3RhcnRzUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGVuZHNSZXN1bHQgPSBS
YW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsICZz
ZWxlY3RlZFJhbmdlLT5lbmRDb250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+ZW5kT2Zmc2V0KCkp
OwotICAgIEFTU0VSVCghZW5kc1Jlc3VsdC5oYXNFeGNlcHRpb24oKSk7Ci0gICAgYm9vbCBpc05v
ZGVGdWxseVNlbGVjdGVkID0gIXN0YXJ0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBzdGFydHNS
ZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMAotICAgICAgICAmJiAhZW5kc1Jlc3VsdC5o
YXNFeGNlcHRpb24oKSAmJiBlbmRzUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDA7Ci0g
ICAgaWYgKGlzTm9kZUZ1bGx5U2VsZWN0ZWQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
YXV0byBzdGFydEVuZFJlc3VsdCA9IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMocGFyZW50
Tm9kZSwgbm9kZUluZGV4LCAmc2VsZWN0ZWRSYW5nZS0+ZW5kQ29udGFpbmVyKCksIHNlbGVjdGVk
UmFuZ2UtPmVuZE9mZnNldCgpKTsKLSAgICBBU1NFUlQoIXN0YXJ0RW5kUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKTsKLSAgICBhdXRvIGVuZFN0YXJ0UmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCAmc2VsZWN0ZWRSYW5nZS0+c3RhcnRD
b250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSk7Ci0gICAgQVNTRVJUKCFl
bmRTdGFydFJlc3VsdC5oYXNFeGNlcHRpb24oKSk7Ci0gICAgYm9vbCBpc05vZGVGdWxseVVuc2Vs
ZWN0ZWQgPSAoIXN0YXJ0RW5kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHN0YXJ0RW5kUmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgfHwgKCFlbmRTdGFydFJlc3VsdC5o
YXNFeGNlcHRpb24oKSAmJiBlbmRTdGFydFJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8IDAp
OwotICAgIGlmIChpc05vZGVGdWxseVVuc2VsZWN0ZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBhbGxvd1BhcnRpYWwgfHwgbm9kZS5pc1RleHROb2RlKCk7CisgICAgcmV0
dXJuIGFsbG93UGFydGlhbCA/IGludGVyc2VjdHMoKnNlbGVjdGVkUmFuZ2UsIG5vZGUpIDogY29u
dGFpbnMoKnNlbGVjdGVkUmFuZ2UsIG5vZGUpOwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6c2Vs
ZWN0QWxsQ2hpbGRyZW4oTm9kZSYgbm9kZSkKQEAgLTQ4MywxMSArNDE1LDcgQEAgdW5zaWduZWQg
RE9NU2VsZWN0aW9uOjpzaGFkb3dBZGp1c3RlZE9mZnNldChjb25zdCBQb3NpdGlvbiYgcG9zaXRp
b24pIGNvbnN0CiBib29sIERPTVNlbGVjdGlvbjo6aXNWYWxpZEZvclBvc2l0aW9uKE5vZGUqIG5v
ZGUpIGNvbnN0CiB7CiAgICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIHJldHVybiAmbm9kZS0+ZG9jdW1lbnQoKSA9PSBmcmFtZS0+ZG9jdW1l
bnQoKTsKKyAgICByZXR1cm4gZnJhbWUgJiYgKCFub2RlIHx8ICZub2RlLT5kb2N1bWVudCgpID09
IGZyYW1lLT5kb2N1bWVudCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBmOTJhYjNiZTY0MDhiZWIxNjY3NDNl
NTgzZjNjY2I4MmQ0YTllZDczLi4zY2MyY2ViYWM1YTgwMWYzOWM4N2FhMzBhZjkwMjllZmFlZmMy
OWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMTU0LDcgKzE1
NCw3IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudEZy
b21EcmFnRGF0YShjb25zdCBEcmFnRGF0YSYgZHJhCiAgICAgICAgICAgICBTdHJpbmcgdGl0bGU7
CiAgICAgICAgICAgICBTdHJpbmcgdXJsID0gZHJhZ0RhdGEuYXNVUkwoRHJhZ0RhdGE6OkRvTm90
Q29udmVydEZpbGVuYW1lcywgJnRpdGxlKTsKICAgICAgICAgICAgIGlmICghdXJsLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gY29udGV4dC5zdGFydC5jb250
YWluZXItPmRvY3VtZW50KCk7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBjb250
ZXh0LnN0YXJ0LmRvY3VtZW50KCk7CiAgICAgICAgICAgICAgICAgYXV0byBhbmNob3IgPSBIVE1M
QW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICAgICAgICAgICAgICBhbmNob3It
PnNldEhyZWYodXJsKTsKICAgICAgICAgICAgICAgICBpZiAodGl0bGUuaXNFbXB0eSgpKSB7CkBA
IC03NzQsMTcgKzc3NCwxMyBAQCBFbGVtZW50KiBEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxl
bWVudChjb25zdCBGcmFtZSogc291cmNlRnJhbWUsIEVsZW1lbnQqIHN0YQogICAgIHN0YXRlLnR5
cGUgPSBzb3VyY2VGcmFtZS0+c2VsZWN0aW9uKCkuY29udGFpbnMoZHJhZ09yaWdpbikgPyBEcmFn
U291cmNlQWN0aW9uOjpTZWxlY3Rpb24gOiBPcHRpb25TZXQ8RHJhZ1NvdXJjZUFjdGlvbj4oeyB9
KTsKICAgICBpZiAoIXN0YXJ0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICNp
ZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBl
bmNsb3NpbmdBdHRhY2htZW50RWxlbWVudCgqc3RhcnRFbGVtZW50KSkgewotICAgICAgICBhdXRv
IHNlbGVjdGlvbiA9IHNvdXJjZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICAg
ICAgYXV0byYgc2VsZWN0aW9uID0gc291cmNlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwogICAgICAgICBib29sIGlzU2luZ2xlQXR0YWNobWVudFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5z
dGFydCgpID09IFBvc2l0aW9uKGF0dGFjaG1lbnQuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklz
QmVmb3JlQW5jaG9yKSAmJiBzZWxlY3Rpb24uZW5kKCkgPT0gUG9zaXRpb24oYXR0YWNobWVudC5n
ZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7Ci0gICAgICAgIGJvb2wgaXNB
dHRhY2htZW50RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiA9IGZhbHNlOwotICAgICAgICBpZiAo
YXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAg
ICAgICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRS
YW5nZSktPmNvbXBhcmVOb2RlKCphdHRhY2htZW50KTsKLSAgICAgICAgICAgIGlzQXR0YWNobWVu
dEVsZW1lbnRJbkN1cnJlbnRTZWxlY3Rpb24gPSAhY29tcGFyZVJlc3VsdC5oYXNFeGNlcHRpb24o
KSAmJiBjb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IFJhbmdlOjpOT0RFX0lO
U0lERTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNBdHRhY2htZW50RWxlbWVudEluQ3Vy
cmVudFNlbGVjdGlvbiB8fCBpc1NpbmdsZUF0dGFjaG1lbnRTZWxlY3Rpb24pIHsKKyAgICAgICAg
YXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKKyAgICAgICAgaWYg
KGlzU2luZ2xlQXR0YWNobWVudFNlbGVjdGlvbiB8fCAhc2VsZWN0ZWRSYW5nZSB8fCAhY29udGFp
bnMoKnNlbGVjdGVkUmFuZ2UsICphdHRhY2htZW50KSkgewogICAgICAgICAgICAgc3RhdGUudHlw
ZSA9IERyYWdTb3VyY2VBY3Rpb246OkF0dGFjaG1lbnQ7CiAgICAgICAgICAgICByZXR1cm4gYXR0
YWNobWVudC5nZXQoKTsKICAgICAgICAgfQpAQCAtMTQ3MSw4ICsxNDY3LDcgQEAgdm9pZCBEcmFn
Q29udHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBW
ZWN0b3I8SW50U2l6ZT4KIAogICAgIFZlY3RvcjxSZWY8SFRNTEltYWdlRWxlbWVudD4+IHBsYWNl
aG9sZGVyczsKICAgICBmb3IgKGF1dG8mIHBsYWNlaG9sZGVyIDogZGVzY2VuZGFudHNPZlR5cGU8
SFRNTEltYWdlRWxlbWVudD4oZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKmNvbnRhaW5lcikpKSB7
Ci0gICAgICAgIGF1dG8gaW50ZXJzZWN0c05vZGUgPSBjcmVhdGVMaXZlUmFuZ2UoKmluc2VydGVk
Q29udGVudFJhbmdlKS0+aW50ZXJzZWN0c05vZGUocGxhY2Vob2xkZXIpOwotICAgICAgICBpZiAo
IWludGVyc2VjdHNOb2RlLmhhc0V4Y2VwdGlvbigpICYmIGludGVyc2VjdHNOb2RlLnJldHVyblZh
bHVlKCkpCisgICAgICAgIGlmIChpbnRlcnNlY3RzKCppbnNlcnRlZENvbnRlbnRSYW5nZSwgcGxh
Y2Vob2xkZXIpKQogICAgICAgICAgICAgcGxhY2Vob2xkZXJzLmFwcGVuZChwbGFjZWhvbGRlcik7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYTgyYmM4MjFj
ZWJhMzJlYmM4NGQxNWUyMDMwNjNlODNmZDNlNTVmMS4uMDllYjA2ZGY0YTMwMzZmYTU1ODdkMzhh
ZmY5MTljOGJlNjExM2VkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAt
Mjc0Niw4ICsyNzQ2LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudChj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIHRhcmdldE4KICAgICAvLyB3aWxsIHNl
dCBhIHNlbGVjdGlvbiBpbnNpZGUgaXQsIHdoaWNoIHdpbGwgYWxzbyBzZXQgdGhlIGZvY3VzZWQg
ZWxlbWVudC4KICAgICBpZiAoZWxlbWVudCAmJiBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2Uo
KSkgewogICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBj
cmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tcGFyZU5vZGUoKmVsZW1lbnQpOwotICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lERSAmJiBlbGVtZW50LT5pc0Rlc2NlbmRhbnRPZihtX2Zy
YW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkpKQorICAgICAgICAgICAgaWYgKGNvbnRh
aW5zKCpyYW5nZSwgKmVsZW1lbnQpICYmIGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUu
ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA0OTcyOWQwOTY5Nzgw
MTFlOGU3NTBhYTM4NDhiNmJjMzQwMGUzMDYxLi5hNzc4MTBiMDIwYmY1YThkODUyMmNhYzhiMjVi
MzY5MjU4ODMyNTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTczMCwxOSArNzMwLDE5IEBAIGF1
dG8gUGFnZTo6ZmluZFRleHRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9u
cyBvcHRpb25zLCB1bnNpZ25lZCBsCiAKICAgICBpZiAoZnJhbWVXaXRoU2VsZWN0aW9uKSB7CiAg
ICAgICAgIHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbiA9IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rp
b247Ci0gICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgICAgICBhdXRvIHNlbGVjdGVk
UmFuZ2UgPSAqZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJz
dFJhbmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykpIHsKICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHQucmFuZ2VzLnNpemUoKTsgaSA+IDA7IC0t
aSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9IGNyZWF0ZUxpdmVS
YW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9f
U1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHQucmFuZ2VzW2kgLSAxXSkpOwotICAgICAgICAg
ICAgICAgIGlmICghY29tcGFyaXNvblJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBjb21wYXJpc29u
UmVzdWx0LnJldHVyblZhbHVlKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNl
ZW1zIGxpa2UgdGhpcyBzaG91bGQgYmUgaXNfZ3RlcSB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBz
YW1lIHN0cmluZyBmb3VuZCB0d2ljZSBpbiBhIHJvdy4KKyAgICAgICAgICAgICAgICBpZiAoaXNf
Z3QoZG9jdW1lbnRPcmRlcihzZWxlY3RlZFJhbmdlLnN0YXJ0LCByZXN1bHQucmFuZ2VzW2kgLSAx
XS5lbmQpKSkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5kZXhGb3JTZWxlY3Rpb24g
PSBpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDAsIHNpemUgPSByZXN1bHQucmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICAgICAgICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxl
Y3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIGNy
ZWF0ZUxpdmVSYW5nZShyZXN1bHQucmFuZ2VzW2ldKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b21wYXJpc29uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmlzb25SZXN1bHQucmV0dXJu
VmFsdWUoKSA8IDApIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2VlbXMgbGlrZSB0aGlz
IHNob3VsZCBiZSBpc19sdGVxIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIHNhbWUgc3RyaW5nIGZv
dW5kIHR3aWNlIGluIGEgcm93LgorICAgICAgICAgICAgICAgIGlmIChpc19sdChkb2N1bWVudE9y
ZGVyKHNlbGVjdGVkUmFuZ2UuZW5kLCByZXN1bHQucmFuZ2VzW2ldLnN0YXJ0KSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uID0gaTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzYzLDExICs3NjMsMTEgQEAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFBhZ2U6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIGNvbnN0IE9wdGlvbmFsPFMKICAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChyZWZlcmVuY2VSYW5nZSAmJiByZWZl
cmVuY2VSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLnBhZ2UoKSAhPSB0aGlzKQor
ICAgIGlmIChyZWZlcmVuY2VSYW5nZSAmJiByZWZlcmVuY2VSYW5nZS0+c3RhcnQuZG9jdW1lbnQo
KS5wYWdlKCkgIT0gdGhpcykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIENh
bldyYXAgY2FuV3JhcCA9IG9wdGlvbnMuY29udGFpbnMoV3JhcEFyb3VuZCkgPyBDYW5XcmFwOjpZ
ZXMgOiBDYW5XcmFwOjpObzsKLSAgICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VSYW5nZSA/IHJl
ZmVyZW5jZVJhbmdlLT5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtYWlu
RnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJh
bmdlLT5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbWFpbkZyYW1lKCk7CiAgICAgRnJhbWUq
IHN0YXJ0RnJhbWUgPSBmcmFtZTsKICAgICBkbyB7CiAgICAgICAgIGlmIChhdXRvIHJlc3VsdFJh
bmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBmcmFtZSA9PSBzdGFy
dEZyYW1lID8gcmVmZXJlbmNlUmFuZ2UgOiBXVEY6Om51bGxvcHQsIG9wdGlvbnMgLSBXcmFwQXJv
dW5kKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLm1tCmluZGV4IDJlZmM0MWUzZDQyNzMyNjU5MjdhZGU1YjhiYmE5NmE3NzEyMzY5
ODUuLmYxNmViYzU4NmM3YTdjMDQxOGY0N2VmOTRjNjU1NjMyNzhiOTk1YjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpA
QCAtNjMwLDcgKzYzMCw3IEBAIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodCog
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZmluZFRlbGVwaG9uZU51CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBtX3BvdGVudGlhbEhpZ2hs
aWdodHMpIHsKLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgpID09IEhpZ2hsaWdodDo6VGVs
ZXBob25lTnVtYmVyVHlwZSAmJiBjcmVhdGVMaXZlUmFuZ2UoaGlnaGxpZ2h0LT5yYW5nZSgpKS0+
Y29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkpKQorICAgICAgICBpZiAo
aGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlICYmIGNv
bnRhaW5zKGhpZ2hsaWdodC0+cmFuZ2UoKSwgKnNlbGVjdGlvblJhbmdlKSkKICAgICAgICAgICAg
IHJldHVybiBoaWdobGlnaHQuZ2V0KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGI2ZWExNTUzMDc5NzdkOWU1N2QyNGE4MDdlMGYyNjcy
OGU5Y2VkYjIuLjk2YmRmNTRlNWMzYTIzMzUxZGFhOWE2MTIxYjE5MDc5ZTczYzQ5ZTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xOTc1LDcgKzE5NzUs
NyBAQCBzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gYm9yZGVyQW5kVGV4dFJlY3RzKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSwgQ29vcmRpbmF0ZQogewogICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHJl
Y3RzOwogCi0gICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCku
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBib29sIHVzZVZp
c2libGVCb3VuZHMgPSBiZWhhdmlvci5jb250YWlucyhSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVj
dEJlaGF2aW9yOjpVc2VWaXNpYmxlQm91bmRzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCmluZGV4IGIwNDM2ZjJjZTczZjg5MmIzOWJjZmIxNTAyMTkyNTE1ODU3ZGVjYjkuLjMx
OWY3ZTIxMGE2ODgzZmI2OGJhMDRjN2QzYTkwMzMzYTc1YWE5N2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKQEAgLTIxNjEsMjcgKzIxNjEsNDUgQEAgdW5zaWduZWQgSW50ZXJu
YWxzOjpsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCYgc2NvcGUsIGNvbnN0IFJhbmdlJiByYW5nZSkK
ICAgICByZXR1cm4gY2xhbXBUbzx1bnNpZ25lZD4oY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5
UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoc2NvcGUpLCBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKS5s
ZW5ndGgpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dChjb25zdCBSYW5nZSYg
cmFuZ2UpCitTdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dChjb25zdCBSYW5nZSYgbGl2ZVJh
bmdlKQogewotICAgIHJldHVybiByYW5nZS50ZXh0KCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VT
aW1wbGVSYW5nZShsaXZlUmFuZ2UpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRl
TGF5b3V0KCk7CisgICAgcmV0dXJuIHBsYWluVGV4dChyYW5nZSk7CiB9CiAKLVN0cmluZyBJbnRl
cm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2Um
IHJhbmdlKQorLy8gRklYTUU6IEZpbmQgYSBnb29kIHBsYWNlIGZvciB0aGlzIGdlbmVyYWwgcHVy
cG9zZSBhbGdvcml0aG0uCitzdGF0aWMgU3RyaW5nIGpvaW4oVmVjdG9yPFN0cmluZz4mJiBzdHJp
bmdzKQogewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgZm9yIChTaW1wbGlmaWVkQmFja3dhcmRz
VGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOyAh
YmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRlcmF0b3IuYWR2YW5jZSgpKQot
ICAgICAgICByZXN1bHQuaW5zZXJ0KGJhY2t3YXJkc0l0ZXJhdG9yLnRleHQoKS50b1N0cmluZygp
LCAwKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAg
IGZvciAoYXV0byYgc3RyaW5nIDogc3RyaW5ncykKKyAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZN
b3ZlKHN0cmluZykpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3RyaW5n
IEludGVybmFsczo6cmFuZ2VBc1RleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBS
YW5nZSYgbGl2ZVJhbmdlKQoreworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobGl2
ZVJhbmdlKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworICAg
IFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7CisgICAgZm9yIChTaW1wbGlmaWVkQmFja3dhcmRzVGV4
dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKHJhbmdlKTsgIWJhY2t3YXJkc0l0ZXJhdG9yLmF0
RW5kKCk7IGJhY2t3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKKyAgICAgICAgc3RyaW5ncy5hcHBl
bmQoYmFja3dhcmRzSXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCkpOworICAgIHN0cmluZ3MucmV2
ZXJzZSgpOworICAgIHJldHVybiBqb2luKFdURk1vdmUoc3RyaW5ncykpOwogfQogCi1SZWY8UmFu
Z2U+IEludGVybmFsczo6c3VicmFuZ2UoUmFuZ2UmIHJhbmdlLCB1bnNpZ25lZCByYW5nZUxvY2F0
aW9uLCB1bnNpZ25lZCByYW5nZUxlbmd0aCkKK1JlZjxSYW5nZT4gSW50ZXJuYWxzOjpzdWJyYW5n
ZShSYW5nZSYgbGl2ZVJhbmdlLCB1bnNpZ25lZCByYW5nZUxvY2F0aW9uLCB1bnNpZ25lZCByYW5n
ZUxlbmd0aCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJS
YW5nZShtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpLCB7IHJhbmdlTG9jYXRpb24sIHJhbmdlTGVuZ3Ro
IH0pKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGxpdmVSYW5nZSk7CisgICAg
cmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKKyAgICByZXR1cm4gY3JlYXRl
TGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShyYW5nZSwgeyByYW5nZUxvY2F0aW9uLCBy
YW5nZUxlbmd0aCB9KSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gSW50ZXJuYWxzOjpyYW5nZU9mU3Ry
aW5nTmVhckxvY2F0aW9uKGNvbnN0IFJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCB1
bnNpZ25lZCB0YXJnZXRPZmZzZXQpCitSZWZQdHI8UmFuZ2U+IEludGVybmFsczo6cmFuZ2VPZlN0
cmluZ05lYXJMb2NhdGlvbihjb25zdCBSYW5nZSYgbGl2ZVJhbmdlLCBjb25zdCBTdHJpbmcmIHRl
eHQsIHVuc2lnbmVkIHRhcmdldE9mZnNldCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdl
KGZpbmRDbG9zZXN0UGxhaW5UZXh0KG1ha2VTaW1wbGVSYW5nZShyYW5nZSksIHRleHQsIHsgfSwg
dGFyZ2V0T2Zmc2V0KSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShsaXZlUmFu
Z2UpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0
dXJuIGNyZWF0ZUxpdmVSYW5nZShmaW5kQ2xvc2VzdFBsYWluVGV4dChyYW5nZSwgdGV4dCwgeyB9
LCB0YXJnZXRPZmZzZXQpKTsKIH0KIAogI2lmICFQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVJhbmdlLmNwcAppbmRleCAwNjc4Y2Q0M2QzNjFjNDg3ZDZkOGZl
YmNmNGNlNmRhODY2N2VjNzg3Li45YzcxZTRmZTM3NTI0M2FkYTE3YjcyOWM3MjY0NDUxM2ZhNWM2
MDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZS5jcHAKQEAgLTI1
LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RPTUV4Y2VwdGlvbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRXhlY1N0YXRlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbmNsdWRlICJXZWJLaXRET01Eb2N1
bWVudEZyYWdtZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgpAQCAtMzU1LDkgKzM1Niw3IEBAIGdzaG9y
dCB3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfYm91bmRhcnlfcG9pbnRzKFdlYktpdERPTVJhbmdl
KiBzZWxmLCBndXNob3J0IGhvCiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19SQU5HRShzZWxmKSwgMCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19SQU5HRShzb3VyY2VSYW5nZSksIDApOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJv
ciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBXZWJDb3JlOjpSYW5nZSogY29udmVydGVkU291cmNlUmFuZ2UgPSBXZWJL
aXQ6OmNvcmUoc291cmNlUmFuZ2UpOwotICAgIGF1dG8gcmVzdWx0ID0gaXRlbS0+Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MoaG93LCAqY29udmVydGVkU291cmNlUmFuZ2UpOworICAg
IGF1dG8gcmVzdWx0ID0gV2ViS2l0Ojpjb3JlKHNlbGYpLT5jb21wYXJlQm91bmRhcnlQb2ludHMo
aG93LCAqV2ViS2l0Ojpjb3JlKHNvdXJjZVJhbmdlKSk7CiAgICAgaWYgKHJlc3VsdC5oYXNFeGNl
cHRpb24oKSkgewogICAgICAgICBhdXRvIGRlc2NyaXB0aW9uID0gV2ViQ29yZTo6RE9NRXhjZXB0
aW9uOjpkZXNjcmlwdGlvbihyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7CiAgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZGVzY3JpcHRpb24ubGVnYWN5Q29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CkBAIC01
MDgsMTUgKzUwNyw3IEBAIGdib29sZWFuIHdlYmtpdF9kb21fcmFuZ2VfaW50ZXJzZWN0c19ub2Rl
KFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByCiAgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgRkFMU0UpOwogICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSwgRkFMU0UpOwogICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCBGQUxTRSk7Ci0gICAgV2ViQ29y
ZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6Tm9kZSog
Y29udmVydGVkUmVmTm9kZSA9IFdlYktpdDo6Y29yZShyZWZOb2RlKTsKLSAgICBhdXRvIHJlc3Vs
dCA9IGl0ZW0tPmludGVyc2VjdHNOb2RlKCpjb252ZXJ0ZWRSZWZOb2RlKTsKLSAgICBpZiAocmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRpb24gPSBXZWJDb3Jl
OjpET01FeGNlcHRpb246OmRlc2NyaXB0aW9uKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29k
ZSgpKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5sZWdhY3lDb2RlLCBkZXNjcmlwdGlvbi5u
YW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpOworICAgIHJldHVybiBXZWJLaXQ6OmNvcmUoc2VsZiktPmludGVy
c2VjdHNOb2RlKCpXZWJLaXQ6OmNvcmUocmVmTm9kZSkpOwogfQogCiBnc2hvcnQgd2Via2l0X2Rv
bV9yYW5nZV9jb21wYXJlX3BvaW50KFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2Rl
KiByZWZOb2RlLCBnbG9uZyBvZmZzZXQsIEdFcnJvcioqIGVycm9yKQpAQCAtNjMyLDkgKzYyMyw5
IEBAIGdjaGFyKiB3ZWJraXRfZG9tX3JhbmdlX2dldF90ZXh0KFdlYktpdERPTVJhbmdlKiBzZWxm
KQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKLSAgICBXZWJD
b3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50ZXh0KCkpOwotICAgIHJldHVybiByZXN1bHQ7
CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqV2ViS2l0Ojpjb3JlKHNlbGYpKTsK
KyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworICAgIHJldHVybiBj
b252ZXJ0VG9VVEY4U3RyaW5nKHBsYWluVGV4dChyYW5nZSkpOwogfQogCiBHX0dOVUNfRU5EX0lH
Tk9SRV9ERVBSRUNBVElPTlM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQppbmRleCBjZjI2OWEx
Y2RkMzAyYTQzYjk3YWIyYjYwMDBjMGFkMzAyODBlODIyLi4zY2FkMmM1ZTgxMGJmNGJiNjUzYTRk
NDk1NmMwNzFkNWU4MmVhODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KQEAgLTMwLDYg
KzMwLDcgQEAKICNpbXBvcnQgIldLQnVuZGxlQVBJQ2FzdC5oIgogI2ltcG9ydCAiV0tET01JbnRl
cm5hbHMuaCIKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
VGV4dEl0ZXJhdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Zpc2libGVVbml0cy5oPgogI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKQEAgLTQ5LDEyICs1MCw3IEBAIC0gKGlkKV9p
bml0V2l0aEltcGw6KFdlYkNvcmU6OlJhbmdlKilpbXBsCiAKIC0gKGlkKWluaXRXaXRoRG9jdW1l
bnQ6KFdLRE9NRG9jdW1lbnQgKilkb2N1bWVudAogewotICAgIGF1dG8gcmFuZ2UgPSBXZWJDb3Jl
OjpSYW5nZTo6Y3JlYXRlKCpXZWJLaXQ6OnRvV2ViQ29yZURvY3VtZW50KGRvY3VtZW50KSk7Ci0g
ICAgc2VsZiA9IFtzZWxmIF9pbml0V2l0aEltcGw6cmFuZ2UucHRyKCldOwotICAgIGlmICghc2Vs
ZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOworICAgIHJldHVybiBb
c2VsZiBfaW5pdFdpdGhJbXBsOldlYkNvcmU6OlJhbmdlOjpjcmVhdGUoKldlYktpdDo6dG9XZWJD
b3JlRG9jdW1lbnQoZG9jdW1lbnQpKS5wdHIoKV07CiB9CiAKIC0gKHZvaWQpZGVhbGxvYwpAQCAt
MTE4LDcgKzExNCw5IEBAIC0gKE5TSW50ZWdlcillbmRPZmZzZXQKIAogLSAoTlNTdHJpbmcgKil0
ZXh0CiB7Ci0gICAgcmV0dXJuIF9pbXBsLT50ZXh0KCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VT
aW1wbGVSYW5nZSgqX2ltcGwpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5
b3V0KCk7CisgICAgcmV0dXJuIHBsYWluVGV4dChyYW5nZSk7CiB9CiAKIC0gKEJPT0wpaXNDb2xs
YXBzZWQKQEAgLTEyOCw4ICsxMjYsOSBAQCAtIChCT09MKWlzQ29sbGFwc2VkCiAKIC0gKE5TQXJy
YXkgKil0ZXh0UmVjdHMKIHsKLSAgICBfaW1wbC0+b3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKCpf
aW1wbCkpKS5hdXRvcmVsZWFzZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uo
Kl9pbXBsKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKS5hdXRvcmVsZWFzZSgpOwogfQog
CiAtIChXS0RPTVJhbmdlICopcmFuZ2VCeUV4cGFuZGluZ1RvV29yZEJvdW5kYXJ5QnlDaGFyYWN0
ZXJzOihOU1VJbnRlZ2VyKWNoYXJhY3RlcnMgaW5EaXJlY3Rpb246KFdLRE9NUmFuZ2VEaXJlY3Rp
b24pZGlyZWN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
LmNwcAppbmRleCA2M2YzYzc4NmU2ZmIyMTVjOWEyZjRlMjU5ZmFjOWU2MTFiNmRiOGIyLi41YTI2
ZTUzM2ZjMTVmZWZmMjVlZDgwYzcyN2QxM2UwYTc0ZWNkYmFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9E
T00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1JhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEl0
ZXJhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlU2VsZWN0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTk3
LDIzICs5OCwzMiBAQCBSYW5nZSYgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Y29yZVJhbmdl
KCkgY29uc3QKIAogUmVmPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZTo6ZG9jdW1lbnQoKQogewotICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZU5vZGVI
YW5kbGU6OmdldE9yQ3JlYXRlKG1fcmFuZ2UtPm93bmVyRG9jdW1lbnQoKSk7CisgICAgcmV0dXJu
IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUobV9yYW5nZS0+c3RhcnRDb250
YWluZXIoKS5kb2N1bWVudCgpKTsKIH0KIAogV2ViQ29yZTo6SW50UmVjdCBJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlOjpib3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29uc3QKIHsK
LSAgICBGcmFtZSogZnJhbWUgPSBtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKTsKLSAg
ICByZXR1cm4gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0
KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3JkZXJB
bmRUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpKSkpKTsKKyAgICBhdXRvIHJhbmdl
ID0gbWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpOworICAgIGF1dG8gZnJhbWUgPSByYW5nZS5zdGFy
dC5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICBhdXRvIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3Np
bmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVjdDo6YWJzb2x1
dGVCb3JkZXJBbmRUZXh0UmVjdHMocmFuZ2UpKSkpOwogfQogCiBSZWZQdHI8V2ViSW1hZ2U+IElu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9w
dGlvbnMpCiB7Ci0gICAgRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQgPSBtX3JhbmdlLT5vd25lckRv
Y3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gb3duZXJEb2N1bWVudC5mcmFtZSgpOworICAg
IGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobV9yYW5nZSk7CisKKyAgICBhdXRvIGRvY3Vt
ZW50ID0gbWFrZVJlZihyYW5nZS5zdGFydC5kb2N1bWVudCgpKTsKKworICAgIGF1dG8gZnJhbWUg
PSBtYWtlUmVmUHRyKGRvY3VtZW50LT5mcmFtZSgpKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZp
ZXcoKTsKKyAgICBhdXRvIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCFmcmFt
ZVZpZXcpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMjEsMTMgKzEzMSwxMSBAQCBS
ZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2Uo
U25hcHNob3RPcHRpb25zIG9wdGlvbgogICAgIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2Ug
bG9jYWxBcHBlYXJhbmNlKGZyYW1lVmlldy0+dXNlRGFya0FwcGVhcmFuY2UoKSk7CiAjZW5kaWYK
IAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7Ci0KICAgICBWaXNpYmxlU2VsZWN0
aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBm
cmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZShtX3JhbmdlKSk7
CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihyYW5nZSk7CiAKICAgICBmbG9h
dCBzY2FsZUZhY3RvciA9IChvcHRpb25zICYgU25hcHNob3RPcHRpb25zRXhjbHVkZURldmljZVNj
YWxlRmFjdG9yKSA/IDEgOiBmcmFtZS0+cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAg
IEludFJlY3QgcGFpbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh1bmlvblJlY3RJZ25vcmluZ1pl
cm9SZWN0cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9yZGVyQW5kVGV4dFJlY3RzKG1ha2VTaW1w
bGVSYW5nZShtX3JhbmdlKSkpKTsKKyAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QodW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJv
cmRlckFuZFRleHRSZWN0cyhyYW5nZSkpKTsKICAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUg
PSBwYWludFJlY3Quc2l6ZSgpOwogICAgIGJhY2tpbmdTdG9yZVNpemUuc2NhbGUoc2NhbGVGYWN0
b3IpOwogCkBAIC0xNTUsNyArMTYzLDcgQEAgUmVmUHRyPFdlYkltYWdlPiBJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlOjpyZW5kZXJlZEltYWdlKFNuYXBzaG90T3B0aW9ucyBvcHRpb24KICAgICAg
ICAgcGFpbnRCZWhhdmlvci5hZGQoUGFpbnRCZWhhdmlvcjo6Rm9yY2VXaGl0ZVRleHQpOwogCiAg
ICAgZnJhbWVWaWV3LT5zZXRQYWludEJlaGF2aW9yKHBhaW50QmVoYXZpb3IpOwotICAgIG93bmVy
RG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwog
CiAgICAgZnJhbWVWaWV3LT5wYWludCgqZ3JhcGhpY3NDb250ZXh0LCBwYWludFJlY3QpOwogICAg
IGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihvbGRQYWludEJlaGF2aW9yKTsKQEAgLTE2Nyw3
ICsxNzUsOSBAQCBSZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJl
bmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9wdGlvbgogCiBTdHJpbmcgSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZTo6dGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmFuZ2UtPnRleHQo
KTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpOworICAgIHJhbmdl
LnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIHBsYWluVGV4dChy
YW5nZSk7CiB9CiAKIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBjcmVhdGVIYW5k
bGUoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRl
eCAyYTU3ZmQyMDllNjM1NzBiNzM4OTIzZjBiNTlmYjNjY2RiMmY0ZDQ0Li5iOGMwN2I4YzI1NDA2
MmRhZmJmZDNjYzY4NDIyNzFmYWRmNzYxMzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC0zMDUsNyArMzA1LDcgQEAg
dm9pZCBGaW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJ
bmRleCkKIHsKICAgICBpZiAobWF0Y2hJbmRleCA+PSBtX2ZpbmRNYXRjaGVzLnNpemUoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRl
eF0uc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1l
ID0gbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCk7CiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMzYsNyArMzM2LDcgQEAgdm9p
ZCBGaW5kQ29udHJvbGxlcjo6c2VsZWN0RmluZE1hdGNoKHVpbnQzMl90IG1hdGNoSW5kZXgpCiB7
CiAgICAgaWYgKG1hdGNoSW5kZXggPj0gbV9maW5kTWF0Y2hlcy5zaXplKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLnN0YXJ0
LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fZmlu
ZE1hdGNoZXNbbWF0Y2hJbmRleF0uc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCBlOWQ2N2YwMTc1N2RlYzU5
MjMxNzNlM2MzYTVhNzdhNGNjMDhjZDdiLi4xMGU5ZDE4OTVmYmRjOWMzNTJjMWE2YTI2MTk1MDk4
NTg1YjQwYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbQpAQCAtNDE4NCw3ICs0MTg0LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1
ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCBy
ZXF1ZXMKIAogICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICBhdXRvIHJhbmdlT2ZJbnRlcmVzdCA9ICptYWtlU2ltcGxlUmFuZ2UocmFu
Z2VPZkludGVyZXN0U3RhcnQsIHJhbmdlT2ZJbnRlcmVzdEVuZCk7Ci0gICAgaWYgKHNlbGVjdGlv
blJhbmdlICYmIHJhbmdlc092ZXJsYXAoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdCku
cHRyKCksIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpLnB0cigpKSkgeworICAgIGlm
IChzZWxlY3Rpb25SYW5nZSAmJiBpbnRlcnNlY3RzKHJhbmdlT2ZJbnRlcmVzdCwgKnNlbGVjdGlv
blJhbmdlKSkgewogICAgICAgICBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSBz
dGQ6Om1heChyYW5nZU9mSW50ZXJlc3RTdGFydCwgc2VsZWN0aW9uU3RhcnQpOwogICAgICAgICBl
bmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gc3RkOjptaW4ocmFuZ2VPZkludGVyZXN0
RW5kLCBzZWxlY3Rpb25FbmQpOwogICAgIH0gZWxzZSB7CkBAIC00MjQ5LDcgKzQyNDksNyBAQCB2
b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGlu
Z0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgIGNvbnRleHQuY29udGV4dEJlZm9yZSA9IG1ha2VT
dHJpbmcoY29udGV4dEJlZm9yZVN0YXJ0LCBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rp
b24pOwogICAgIGNvbnRleHQuc2VsZWN0ZWRUZXh0ID0gbWFrZVN0cmluZyhzdGFydE9mUmFuZ2VP
ZkludGVyZXN0SW5TZWxlY3Rpb24sIGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24pOwog
ICAgIGNvbnRleHQuY29udGV4dEFmdGVyID0gbWFrZVN0cmluZyhlbmRPZlJhbmdlT2ZJbnRlcmVz
dEluU2VsZWN0aW9uLCBjb250ZXh0QWZ0ZXJFbmQpOwotICAgIGlmIChjb21wb3NpdGlvblJhbmdl
ICYmIHJhbmdlc092ZXJsYXAoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdCkucHRyKCks
IGNyZWF0ZUxpdmVSYW5nZSgqY29tcG9zaXRpb25SYW5nZSkucHRyKCkpKSB7CisgICAgaWYgKGNv
bXBvc2l0aW9uUmFuZ2UgJiYgaW50ZXJzZWN0cyhyYW5nZU9mSW50ZXJlc3QsICpjb21wb3NpdGlv
blJhbmdlKSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25TdGFydChjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpKTsKICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIGNvbXBvc2l0aW9uRW5kKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihjb21wb3NpdGlvblJhbmdlLT5lbmQpKTsKICAgICAgICAgY29udGV4dC5tYXJrZWRUZXh0
ID0gbWFrZVN0cmluZyhjb21wb3NpdGlvblN0YXJ0LCBjb21wb3NpdGlvbkVuZCk7CkBAIC00MjY1
LDcgKzQyNjUsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0
KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgICAgICB3aGlsZSAoIWl0
ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgICAgIGlmICghaXRlcmF0b3IudGV4dCgpLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVCb3VuZGluZ0JveCA9IHVuaW9u
UmVjdChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKGl0ZXJhdG9yLnJhbmdlKCksIFJl
bmRlck9iamVjdDo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6Oklnbm9yZUVtcHR5VGV4dFNlbGVjdGlv
bnMpKTsKLSAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoeyBpdGVyYXRvci5yYW5nZSgpLnN0
YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhhYnNv
bHV0ZUJvdW5kaW5nQm94KSwgeyBvZmZzZXRTb0ZhcisrLCBzdHJpZGUgfSB9KTsKKyAgICAgICAg
ICAgICAgICByZWN0cy5hcHBlbmQoeyBpdGVyYXRvci5yYW5nZSgpLnN0YXJ0LmRvY3VtZW50KCku
dmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoYWJzb2x1dGVCb3VuZGluZ0JveCksIHsgb2Zmc2V0
U29GYXIrKywgc3RyaWRlIH0gfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpdGVyYXRv
ci5hZHZhbmNlKHN0cmlkZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggZmY3NDBmNWZlY2QzNzMyNTQy
NTA5MzZlZThkMWFhODMwZWVmZDUxMC4uYzllNmUzNzU4M2I3YWVmZGY3ZDZmMTA3ZjQ5NGI2ZWRi
NDUwZTgwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0KQEAgLTg3Nyw3ICs4NzcsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1J
bW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0
aQogICAgICAgICBpZiAoIWFjdGlvbkNvbnRleHQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBhdXRvIHZpZXcgPSBhY3Rpb25Db250ZXh0LT5yYW5nZS5zdGFydC5jb250YWluZXIt
PmRvY3VtZW50KCkudmlldygpOworICAgICAgICBhdXRvIHZpZXcgPSBhY3Rpb25Db250ZXh0LT5y
YW5nZS5zdGFydC5kb2N1bWVudCgpLnZpZXcoKTsKICAgICAgICAgaWYgKCF2aWV3KQogICAgICAg
ICAgICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET00ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCmluZGV4IGRlNWVh
OGQ2YmM5MDNkZGVlYWFmNjEwNDRmNDQ4NDgxOWQ2YmVlYTEuLjViOGNiNmMzOGM3YTViMTY2NzRi
ZjE0YWMwMTIwYzM1ZmRmM2FkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET00ubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQpAQCAt
NTcwLDEwICs1NzAsOSBAQCAtIChDR1JlY3QpYm91bmRpbmdCb3gKIC0gKE5TUmVjdClib3VuZGlu
Z0JveAogI2VuZGlmCiB7Ci0gICAgLy8gRklYTUU6IFRoZSBjYWxsIHRvIHVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cyBzaG91bGQgYmUgbW92ZWQgaW50byBXZWJDb3JlOjpSYW5n
ZS4KLSAgICBhdXRvJiByYW5nZSA9ICpjb3JlKHNlbGYpOwotICAgIHJhbmdlLm93bmVyRG9jdW1l
bnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4g
dW5pb25SZWN0KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdl
KHJhbmdlKSkpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKmNvcmUoc2VsZikp
OworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CisgICAgcmV0dXJuIHVuaW9uUmVjdChSZW5kZXJPYmplY3Q6OmFic29sdXRl
VGV4dFJlY3RzKHJhbmdlKSk7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC01ODMsNyArNTgy
LDcgQEAgLSAoQ0dJbWFnZVJlZilyZW5kZXJlZEltYWdlRm9yY2luZ0JsYWNrVGV4dDooQk9PTClm
b3JjZUJsYWNrVGV4dAogI2VuZGlmCiB7CiAgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZSgqY29yZShzZWxmKSk7Ci0gICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIocmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCkpOworICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVm
UHRyKHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkuZnJhbWUoKSk7CiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKIApAQCAtNjAyLDcgKzYwMSw3IEBAIC0gKENHSW1hZ2VSZWYpcmVu
ZGVyZWRJbWFnZUZvcmNpbmdCbGFja1RleHQ6KEJPT0wpZm9yY2VCbGFja1RleHQKIC0gKE5TQXJy
YXkgKil0ZXh0UmVjdHMKIHsKICAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpjb3Jl
KHNlbGYpKTsKLSAgICByYW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkudXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQo
KS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICByZXR1cm4gY3Jl
YXRlTlNBcnJheShSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKSkuYXV0b3Jl
bGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TVJhbmdlLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tCmluZGV4
IDVlZTBiY2RmZDk5NzQzNzJhM2ViYzRhZDJhODdhZjgzYmRmNTNmNTEuLjI4NzY2MGZlY2FlOTg2
ZGY5YjM5ZDhkNTdlMDNlYmJjZDBmOTQxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01SYW5nZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00v
RE9NUmFuZ2UubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSlNFeGVjU3Rh
dGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2ltcGxl
UmFuZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1RocmVhZENoZWNrLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1dlYlNjcmlwdE9iamVjdFByaXZhdGUuaD4KQEAgLTkyLDcgKzkz
LDkgQEAgLSAoRE9NTm9kZSAqKWNvbW1vbkFuY2VzdG9yQ29udGFpbmVyCiAtIChOU1N0cmluZyAq
KXRleHQKIHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
cmV0dXJuIElNUEwtPnRleHQoKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpJ
TVBMKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworICAgIHJl
dHVybiBwbGFpblRleHQocmFuZ2UpOwogfQogCiAtICh2b2lkKXNldFN0YXJ0OihET01Ob2RlICop
cmVmTm9kZSBvZmZzZXQ6KGludClvZmZzZXQKQEAgLTE3MCw3ICsxNzMsNyBAQCAtIChzaG9ydClj
b21wYXJlQm91bmRhcnlQb2ludHM6KHVuc2lnbmVkIHNob3J0KWhvdyBzb3VyY2VSYW5nZTooRE9N
UmFuZ2UgKilzb3VyYwogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBpZiAoIXNvdXJjZVJhbmdlKQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigp
OwotICAgIHJldHVybiByYWlzZU9uRE9NRXJyb3IoSU1QTC0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
Rm9yQmluZGluZ3MoaG93LCAqY29yZShzb3VyY2VSYW5nZSkpKTsKKyAgICByZXR1cm4gcmFpc2VP
bkRPTUVycm9yKElNUEwtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhob3csICpjb3JlKHNvdXJjZVJh
bmdlKSkpOwogfQogCiAtICh2b2lkKWRlbGV0ZUNvbnRlbnRzCkBAIC0yNDQsNyArMjQ3LDcgQEAg
LSAoQk9PTClpbnRlcnNlY3RzTm9kZTooRE9NTm9kZSAqKXJlZk5vZGUKICAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgaWYgKCFyZWZOb2RlKQogICAgICAgICBy
YWlzZVR5cGVFcnJvckV4Y2VwdGlvbigpOwotICAgIHJldHVybiByYWlzZU9uRE9NRXJyb3IoSU1Q
TC0+aW50ZXJzZWN0c05vZGUoKmNvcmUocmVmTm9kZSkpKTsKKyAgICByZXR1cm4gSU1QTC0+aW50
ZXJzZWN0c05vZGUoKmNvcmUocmVmTm9kZSkpOwogfQogCiAtIChzaG9ydCljb21wYXJlUG9pbnQ6
KERPTU5vZGUgKilyZWZOb2RlIG9mZnNldDooaW50KW9mZnNldApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KaW5kZXggYWU1YzQ5YmYxNDc1
OGYzMTQwOTQyMGQ5ZjZkNTVhMmU2MzYyNjFjOS4uNTg3MWQwMDhhYWNmN2EyMmNiOGNkNmRjZmJh
ZjRmNGI0NzQ3YzM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TVVJS2l0RXh0ZW5zaW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
VUlLaXRFeHRlbnNpb25zLm1tCkBAIC01MSw3ICs1MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0hU
TUxUZXh0QXJlYUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSW5saW5lQm94Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL05vZGUuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvTm9kZVRyYXZlcnNhbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9SZW5kZXJCbG9jay5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCbG9j
a0Zsb3cuaD4KQEAgLTEyNCw5ICsxMjQsMjEgQEAgLSAodm9pZClleHRlbmQ6KFVJbnQzMilhbW91
bnQgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgogICAg
ICAgICByYW5nZS5zZXRFbmQoKmVuZC5jb250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSk7CiB9CiAKKy8vIEZJWE1FOiBDb3VsZCB1c2UgU2ltcGxlUmFuZ2U6OmludGVy
c2VjdGluZ05vZGVzIGluc3RlYWQsIGlmIHdlIGRpZCBub3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGUg
aGlzdG9yaWNhbCBiZWhhdmlvciBvZiByZXR1cm5pbmcgYSBub2RlIHdpdGggbm8gY2hpbGRyZW4g
d2hlbiB0aGUgcmFuZ2Ugc3RhcnRzIGluc2lkZSBpdC4KK3N0YXRpYyBXZWJDb3JlOjpOb2RlKiBm
aXJzdE5vZGVBZnRlcihjb25zdCBXZWJDb3JlOjpCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sKKyAg
ICBpZiAocG9pbnQuY29udGFpbmVyLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCisgICAgICAgIHJl
dHVybiBwb2ludC5jb250YWluZXIucHRyKCk7CisgICAgaWYgKGF1dG8gY2hpbGQgPSBwb2ludC5j
b250YWluZXItPnRyYXZlcnNlVG9DaGlsZEF0KHBvaW50Lm9mZnNldCkpCisgICAgICAgIHJldHVy
biBjaGlsZDsKKyAgICBpZiAoIXBvaW50Lm9mZnNldCkKKyAgICAgICAgcmV0dXJuIHBvaW50LmNv
bnRhaW5lci5wdHIoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dFNr
aXBwaW5nQ2hpbGRyZW4ocG9pbnQuY29udGFpbmVyKTsKK30KKwogLSAoRE9NTm9kZSAqKWZpcnN0
Tm9kZQogewotICAgIHJldHVybiBraXQoY29yZShzZWxmKS0+Zmlyc3ROb2RlKCkpOworICAgIHJl
dHVybiBraXQoZmlyc3ROb2RlQWZ0ZXIobWFrZVNpbXBsZVJhbmdlKCpjb3JlKHNlbGYpKS5zdGFy
dCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00v
V2ViRE9NT3BlcmF0aW9ucy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01P
cGVyYXRpb25zLm1tCmluZGV4IGNhZDM1OTFiZTYzMzIzZWU2N2FhNmFmOGQxM2U0NWZkNzE2MGRh
YTguLjczOGI0ZjhmMjQ4NDg0ZmQyNzdjYjcyOGMyODAyOGQ3YjljMDA4NTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCkBAIC0xOTEsOCAr
MTkxLDggQEAgLSAoV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmUKIAogLSAoTlNTdHJpbmcgKiltYXJr
dXBTdHJpbmcKIHsKLSAgICBhdXRvJiByYW5nZSA9ICpjb3JlKHNlbGYpOwotICAgIHJldHVybiBT
dHJpbmcgeyBkb2N1bWVudFR5cGVTdHJpbmcocmFuZ2Uub3duZXJEb2N1bWVudCgpKSArIHNlcmlh
bGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1ha2VTaW1wbGVSYW5nZShyYW5nZSksIG51
bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6OlllcykgfTsKKyAgICBhdXRvIHJhbmdlID0g
bWFrZVNpbXBsZVJhbmdlKCpjb3JlKHNlbGYpKTsKKyAgICByZXR1cm4gU3RyaW5nIHsgZG9jdW1l
bnRUeXBlU3RyaW5nKHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpICsgc2VyaWFsaXplUHJlc2Vydmlu
Z1Zpc3VhbEFwcGVhcmFuY2UocmFuZ2UsIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6
OlllcykgfTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJQREZWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJQREZWaWV3Lm1tCmluZGV4IDFiYzY3ZDM2ODQyNmNjODkxYjNlNTA3OWUyYjZkZjMyYTEwNjg5
OTguLmZiNzQyMDhmOTk4YzNjYWI0ZjVhZjdlYzNjN2E0NmMyMjk5MjIxZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0KQEAgLTYzNiwyMSArNjM2
LDE4IEBAIC0gKEJPT0wpbWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZAogICAgIHJldHVy
biBOTzsKIH0KIAotc3RhdGljIEJPT0wgaXNGcmFtZUluUmFuZ2UoV2ViRnJhbWUgKmZyYW1lLCBE
T01SYW5nZSAqcmFuZ2UpCitzdGF0aWMgYm9vbCBpc0ZyYW1lSW5SYW5nZShXZWJDb3JlOjpGcmFt
ZSYgZnJhbWUsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBCT09M
IGluUmFuZ2UgPSBOTzsKLSAgICBmb3IgKGF1dG8qIG93bmVyRWxlbWVudCA9IGNvcmUoZnJhbWUp
LT5vd25lckVsZW1lbnQoKTsgb3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1l
bnQtPmRvY3VtZW50KCkuZnJhbWUoKS0+b3duZXJFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCZv
d25lckVsZW1lbnQtPmRvY3VtZW50KCkgPT0gJmNvcmUocmFuZ2UpLT5vd25lckRvY3VtZW50KCkp
IHsKLSAgICAgICAgICAgIGluUmFuZ2UgPSBbcmFuZ2UgaW50ZXJzZWN0c05vZGU6a2l0KG93bmVy
RWxlbWVudCldOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8q
IG93bmVyRWxlbWVudCA9IGZyYW1lLm93bmVyRWxlbWVudCgpOyBvd25lckVsZW1lbnQ7IG93bmVy
RWxlbWVudCA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkgeworICAg
ICAgICBpZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Uuc3RhcnQuZG9jdW1l
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBpbnRlcnNlY3RzKHJhbmdlLCAqb3duZXJFbGVtZW50
KTsKICAgICB9Ci0gICAgcmV0dXJuIGluUmFuZ2U7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiAt
IChOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGluRE9N
UmFuZ2U6KERPTVJhbmdlICopcmFuZ2Ugb3B0aW9uczooV2ViRmluZE9wdGlvbnMpb3B0aW9ucyBs
aW1pdDooTlNVSW50ZWdlcilsaW1pdCBtYXJrTWF0Y2hlczooQk9PTCltYXJrTWF0Y2hlcwogewot
ICAgIGlmIChyYW5nZSAmJiAhaXNGcmFtZUluUmFuZ2UoW2RhdGFTb3VyY2Ugd2ViRnJhbWVdLCBy
YW5nZSkpCisgICAgaWYgKHJhbmdlICYmICFpc0ZyYW1lSW5SYW5nZSgqY29yZShbZGF0YVNvdXJj
ZSB3ZWJGcmFtZV0pLCBtYWtlU2ltcGxlUmFuZ2UoKmNvcmUocmFuZ2UpKSkpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgUERGU2VsZWN0aW9uICpwcmV2aW91c01hdGNoID0gbmlsOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDdkZjA4YmE1YTA0
NGJiNDE5NmJiZDBlNTUwYmQzNjg1NDRmOTkzYjIuLjVjNDRmYTc0YzZkZDRmMTM1NDdhYTgwYmVk
NWY1MTM1Y2RkYjdlMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wOC0yNiAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwgdGhlIHJlbWFpbmluZyB1
c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNw
cDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBBZGRlZCBhIHRlc3QgY2FzZSBmb3Ig
YSBub24tdXNlci1hZ2VudCBzaGFkb3cgdHJlZS4KKwogMjAyMC0wOC0yNiAgSm9uYXRoYW4gQmVk
YXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICBbd2Via2l0Y29yZXB5XSBTdGFuZGFy
ZCBQb3BlbiBtb2NraW5nIEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1Rlc3RXZWJLaXRBUEku
eGNzY2hlbWUgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3hj
c2hhcmVkZGF0YS94Y3NjaGVtZXMvVGVzdFdlYktpdEFQSS54Y3NjaGVtZQppbmRleCA1ZjVlYzJl
NGFlYzM5ZWRjMzlmYzdmODVjN2Q5NjdlNWM0OTQ2OTRlLi4wZDI0ZWUzNjkzZTVmMTJhYWM0NGRl
NjE0MzI5ZjRlOTk5NmU0ZDgyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvVGVzdFdlYktpdEFQSS54
Y3NjaGVtZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvVGVzdFdlYktpdEFQSS54Y3NjaGVtZQpAQCAtNTAsNiAr
NTAsMTIgQEAKICAgICAgICAgICAgIFJlZmVyZW5jZWRDb250YWluZXIgPSAiY29udGFpbmVyOlRl
c3RXZWJLaXRBUEkueGNvZGVwcm9qIj4KICAgICAgICAgIDwvQnVpbGRhYmxlUmVmZXJlbmNlPgog
ICAgICAgPC9CdWlsZGFibGVQcm9kdWN0UnVubmFibGU+CisgICAgICA8Q29tbWFuZExpbmVBcmd1
bWVudHM+CisgICAgICAgICA8Q29tbWFuZExpbmVBcmd1bWVudAorICAgICAgICAgICAgYXJndW1l
bnQgPSAiLS1ndGVzdF9maWx0ZXI9KkRvY3VtZW50T3JkZXIqIgorICAgICAgICAgICAgaXNFbmFi
bGVkID0gIllFUyI+CisgICAgICAgICA8L0NvbW1hbmRMaW5lQXJndW1lbnQ+CisgICAgICA8L0Nv
bW1hbmRMaW5lQXJndW1lbnRzPgogICAgPC9MYXVuY2hBY3Rpb24+CiAgICA8UHJvZmlsZUFjdGlv
bgogICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gIlJlbGVhc2UiCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRG9jdW1lbnRPcmRlci5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRG9jdW1lbnRPcmRlci5jcHAKaW5kZXggMDdlNjdk
NGNkMGNhZDViNjZiOWI5NjdmYzY5NTQ5NTAwMmI3NDM2MS4uOTljNjAwYzJlODM0MTgyNTY2MjBm
ZTJjNDAxMWFiNWRiMDcwYjVlYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNwcApAQCAtMjUsMTMgKzI1LDE0IEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgPFdlYkNvcmUvQm91bmRhcnlQb2ludC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxCb2R5RWxl
bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTERpdkVsZW1lbnQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxIdG1sRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRleHRBcmVh
RWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUG9zaXRpb24uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1NoYWRvd1Jvb3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaD4KIAogI2RlZmluZSBFWFBF
Q1RfQk9USChhLCBiLCBmb3J3YXJkLCByZXZlcnNlZCkgZG8geyBFWFBFQ1RfU1RSRVEoc3RyaW5n
KGRvY3VtZW50T3JkZXIoYSwgYikpLCBmb3J3YXJkKTsgRVhQRUNUX1NUUkVRKHN0cmluZyhkb2N1
bWVudE9yZGVyKGIsIGEpKSwgcmV2ZXJzZWQpOyB9IHdoaWxlICgwKQpAQCAtMzksNiArNDAsMTQg
QEAKICNkZWZpbmUgRVhQRUNUX0xFU1MoYSwgYikgRVhQRUNUX0JPVEgoYSwgYiwgImxlc3MiLCAi
Z3JlYXRlciIpCiAjZGVmaW5lIEVYUEVDVF9VTk9SREVSRUQoYSwgYikgRVhQRUNUX0JPVEgoYSwg
YiwgInVub3JkZXJlZCIsICJ1bm9yZGVyZWQiKQogCisjZGVmaW5lIEVYUEVDVF9DT05UQUlOU19T
RUxGKGEpIEVYUEVDVF9UUlVFKGNvbnRhaW5zKGEsIGEpKQorI2RlZmluZSBFWFBFQ1RfTkVTVEVE
KGEsIGIpIGRvIHsgRVhQRUNUX1RSVUUoY29udGFpbnMoYSwgYikpOyBFWFBFQ1RfRkFMU0UoY29u
dGFpbnMoYiwgYSkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBFWFBFQ1RfTk9UX0NPTlRBSU5FRChh
LCBiKSBkbyB7IEVYUEVDVF9GQUxTRShjb250YWlucyhhLCBiKSk7IEVYUEVDVF9GQUxTRShjb250
YWlucyhiLCBhKSk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRVhQRUNUX0lOVEVSU0VDVFNfU0VM
RihhKSBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKGEsIGEpKQorI2RlZmluZSBFWFBFQ1RfSU5URVJT
RUNUU19CT1RIX1dBWVMoYSwgYikgZG8geyBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKGEsIGIpKTsg
RVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhiLCBhKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIEVYUEVD
VF9OT1RfSU5URVJTRUNUSU5HX0JPVEhfV0FZUyhhLCBiKSBkbyB7IEVYUEVDVF9GQUxTRShpbnRl
cnNlY3RzKGEsIGIpKTsgRVhQRUNUX0ZBTFNFKGludGVyc2VjdHMoYiwgYSkpOyB9IHdoaWxlICgw
KQorCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwpAQCAtMTQxLDYgKzE1MCwxMCBAQCBURVNUKERvY3VtZW50T3JkZXIsIE5vZGUpCiAKICAgICBh
dXRvJiBoID0gKmctPmlubmVyVGV4dEVsZW1lbnQoKTsKICAgICBFWFBFQ1RfTEVTUyhib2R5LCBo
KTsKKworICAgIGF1dG8mIGkgPSBhLT5hdHRhY2hTaGFkb3coeyBTaGFkb3dSb290TW9kZTo6Q2xv
c2VkIH0pLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworICAgIEVYUEVDVF9MRVNTKGJvZHksIGkpOwor
ICAgIEVYUEVDVF9MRVNTKGksIGQpOwogfQogCiBURVNUKERvY3VtZW50T3JkZXIsIEJvdW5kYXJ5
UG9pbnRPZmZzZXRaZXJvKQpAQCAtMTk3LDYgKzIxMCw3IEBAIFRFU1QoRG9jdW1lbnRPcmRlciwg
Qm91bmRhcnlQb2ludE9mZnNldHMpCiAKICAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2lu
dChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSk7CiAgICAgRVhQ
RUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRv
Y3VtZW50LCAxKSk7CisgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMSks
IG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSk7CiAKICAgICBhdXRvIGEgPSBIVE1MRGl2
RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICBib2R5LmFwcGVuZENoaWxkKGEpOwpAQCAt
NDUyLDQgKzQ2NiwyNDQgQEAgVEVTVChEb2N1bWVudE9yZGVyLCBQb3NpdGlvbnMpCiAgICAgVEVT
VF9BTExfUE9TSVRJT05fVFlQRVNfQihtYWtlUG9zaXRpb25BZnRlcihkb2N1bWVudCksIGgsIDAs
IGdyZWF0ZXIpOwogfQogCitURVNUKERvY3VtZW50T3JkZXIsIElzUG9pbnRJblJhbmdlKQorewor
ICAgIGF1dG8gZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOworICAgIGF1dG8mIGRvY3VtZW50
RWxlbWVudCA9ICpkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgYXV0byYgYm9keSA9
ICpkb2N1bWVudC0+Ym9keSgpOworCisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZUJvdW5kYXJ5UG9pbnQo
ZG9jdW1lbnQsIDApKSk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1l
bnQsIDEpKSk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAy
KSkpOworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDApKSk7CisgICAg
RVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KGRvY3VtZW50KSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMSkpKTsKKyAgICBFWFBFQ1RfVFJV
RShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQp
LCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAyKSkpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50
SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBt
YWtlQm91bmRhcnlQb2ludChkb2N1bWVudEVsZW1lbnQsIDApKSwgbWFrZUJvdW5kYXJ5UG9pbnQo
Ym9keSwgMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFu
Z2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5
LCAwKSksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDApKSk7CisKKyAgICBhdXRvIGEgPSBIVE1M
RGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQb2ludElu
UmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZUJvdW5k
YXJ5UG9pbnQoYSwgMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQb2ludEluUmFuZ2UobWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBtYWtlQm91bmRhcnlQb2ludChhLCAwKSkp
OworCisgICAgYm9keS5hcHBlbmRDaGlsZChhKTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5S
YW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRh
cnlQb2ludChhLCAwKSkpOworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VTaW1w
bGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50
KGEsIDApKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQ
b2ludEluUmFuZ2UobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAw
KSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpLCBtYWtlQm91bmRhcnlQb2ludChhLCAwKSkp
OworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91
bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEpKSwgbWFr
ZUJvdW5kYXJ5UG9pbnQoYSwgMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQb2ludEluUmFuZ2Uo
bWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEpLCBtYWtlQm91bmRhcnlQ
b2ludChkb2N1bWVudCwgMSkpLCBtYWtlQm91bmRhcnlQb2ludChhLCAwKSkpOworICAgIEVYUEVD
VF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChi
b2R5LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpKSwgbWFrZUJvdW5kYXJ5UG9p
bnQoYSwgMCkpKTsKKworICAgIGF1dG8gYiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYik7CisKKyAgICBhdXRvIGMgPSBIVE1MRGl2RWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBiLT5hcHBlbmRDaGlsZChjKTsKKworICAgIGF1
dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGEtPmFwcGVuZENo
aWxkKGQpOworCisgICAgYXV0byBlID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7
CisgICAgYXV0byBmID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgZS0+
YXBwZW5kQ2hpbGQoZik7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFrZUJvdW5kYXJ5UG9pbnQoZiwgMCkpKTsK
KworICAgIGF1dG8gZyA9IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7Cisg
ICAgYXV0byYgaCA9ICpnLT5pbm5lclRleHRFbGVtZW50KCk7CisgICAgYy0+YXBwZW5kQ2hpbGQo
Zyk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9k
ZUNvbnRlbnRzKGJvZHkpLCBtYWtlQm91bmRhcnlQb2ludChoLCAwKSkpOworfQorCitURVNUKERv
Y3VtZW50T3JkZXIsIFJhbmdlQ29udGFpbnNSYW5nZSkKK3sKKyAgICBhdXRvIGRvY3VtZW50ID0g
Y3JlYXRlRG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudEVsZW1lbnQgPSAqZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOworICAgIGF1dG8mIGJvZHkgPSAqZG9jdW1lbnQtPmJvZHkoKTsK
KworICAgIEVYUEVDVF9DT05UQUlOU19TRUxGKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cyhkb2N1bWVudCkpOworICAgIEVYUEVDVF9DT05UQUlOU19TRUxGKG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpKTsKKyAgICBFWFBFQ1RfQ09OVEFJTlNfU0VM
RihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSkpOworCisgICAgRVhQRUNUX05F
U1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50KSk7CisgICAgRVhQRUNUX05FU1RF
RChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoYm9keSkpOworICAgIEVYUEVDVF9ORVNURUQobWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhib2R5KSk7CisKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhk
b2N1bWVudEVsZW1lbnQpKTsKKworICAgIEVYUEVDVF9ORVNURUQobWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cyhib2R5KSk7CisKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhkb2N1bWVudCksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1
bWVudCwgMCkpKTsKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cyhkb2N1bWVudCksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVu
dCwgMSkpKTsKKyAgICBFWFBFQ1RfTk9UX0NPTlRBSU5FRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9j
dW1lbnQsIDIpKSk7CisKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91
bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAyKSks
IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCkpOworICAgIEVYUEVDVF9O
T1RfQ09OVEFJTkVEKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1h
a2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSksIG1ha2VCb3VuZGFy
eVBvaW50KGRvY3VtZW50LCAyKSkpOworCisgICAgRVhQRUNUX05PVF9DT05UQUlORUQobWFrZVNp
bXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9p
bnQoZG9jdW1lbnRFbGVtZW50LCAwKSksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhi
b2R5KSk7CisgICAgRVhQRUNUX05FU1RFRChtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9p
bnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSksIG1ha2VTaW1wbGVS
YW5nZShtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSkpOworCisgICAgYXV0byBhID0gSFRNTERp
dkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgRVhQRUNUX05PVF9DT05UQUlORUQobWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGEpKTsKKworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisKKyAgICBhdXRv
IGIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBib2R5LmFwcGVuZENo
aWxkKGIpOworCisgICAgYXV0byBjID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7
CisgICAgYi0+YXBwZW5kQ2hpbGQoYyk7CisKKyAgICBhdXRvIGQgPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhLT5hcHBlbmRDaGlsZChkKTsKKworICAgIGF1dG8gZSA9
IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8gZiA9IEhUTUxEaXZF
bGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGUtPmFwcGVuZENoaWxkKGYpOworICAgIEVY
UEVDVF9OT1RfQ09OVEFJTkVEKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwg
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGYpKTsKKworICAgIGF1dG8gZyA9IEhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byYgaCA9ICpnLT5pbm5l
clRleHRFbGVtZW50KCk7CisgICAgYy0+YXBwZW5kQ2hpbGQoZyk7CisgICAgRVhQRUNUX05FU1RF
RChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhoKSk7Cit9CisKK1RFU1QoRG9jdW1lbnRPcmRlciwgUmFuZ2VJbnRlcnNl
Y3RzUmFuZ2UpCit7CisgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CisgICAg
YXV0byYgZG9jdW1lbnRFbGVtZW50ID0gKmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAg
ICBhdXRvJiBib2R5ID0gKmRvY3VtZW50LT5ib2R5KCk7CisKKyAgICBFWFBFQ1RfSU5URVJTRUNU
U19TRUxGKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCkpOworICAgIEVY
UEVDVF9JTlRFUlNFQ1RTX1NFTEYobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3Vt
ZW50RWxlbWVudCkpOworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX1NFTEYobWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsKKworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZ
UyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50KSk7CisgICAgRVhQRUNUX0lOVEVSU0VD
VFNfQk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSk7CisgICAgRVhQRUNUX0lOVEVSU0VD
VFNfQk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1l
bnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSkpOworCisgICAgRVhQRUNU
X0lOVEVSU0VDVFNfQk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1
bWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpKTsK
KworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoZG9jdW1lbnRFbGVtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KGJvZHkpKTsKKworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5
UG9pbnQoZG9jdW1lbnQsIDApKSk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VTaW1wbGVSYW5nZSht
YWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpKTsKKyAgICBFWFBFQ1RfTk9UX0lOVEVSU0VD
VElOR19CT1RIX1dBWVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwg
bWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAyKSkpOworCisgICAg
RVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQ
b2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAyKSksIG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCkpOworICAgIEVYUEVDVF9JTlRFUlNF
Q1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBt
YWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpLCBtYWtlQm91bmRh
cnlQb2ludChkb2N1bWVudCwgMikpKTsKKworICAgIEVYUEVDVF9OT1RfSU5URVJTRUNUSU5HX0JP
VEhfV0FZUyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBt
YWtlQm91bmRhcnlQb2ludChkb2N1bWVudEVsZW1lbnQsIDApKSwgbWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGJvZHkpKTsKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dBWVMobWFr
ZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5
UG9pbnQoYm9keSwgMCkpLCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwg
MCkpKTsKKworICAgIGF1dG8gYSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwor
ICAgIEVYUEVDVF9OT1RfSU5URVJTRUNUSU5HX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYSkp
OworCisgICAgYm9keS5hcHBlbmRDaGlsZChhKTsKKworICAgIGF1dG8gYiA9IEhUTUxEaXZFbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYik7CisKKyAgICBh
dXRvIGMgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBiLT5hcHBlbmRD
aGlsZChjKTsKKworICAgIGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQp
OworICAgIGEtPmFwcGVuZENoaWxkKGQpOworCisgICAgYXV0byBlID0gSFRNTERpdkVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byBmID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShk
b2N1bWVudCk7CisgICAgZS0+YXBwZW5kQ2hpbGQoZik7CisgICAgRVhQRUNUX05PVF9JTlRFUlNF
Q1RJTkdfQk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGYpKTsKKworICAgIGF1dG8gZyA9IEhUTUxUZXh0
QXJlYUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byYgaCA9ICpnLT5pbm5lclRl
eHRFbGVtZW50KCk7CisgICAgYy0+YXBwZW5kQ2hpbGQoZyk7CisgICAgRVhQRUNUX0lOVEVSU0VD
VFNfQk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGgpKTsKK30KKworVEVTVChEb2N1bWVudE9yZGVyLCBS
YW5nZUNvbnRhaW5zTm9kZSkKK3sKKyAgICBhdXRvIGRvY3VtZW50ID0gY3JlYXRlRG9jdW1lbnQo
KTsKKyAgICBhdXRvJiBkb2N1bWVudEVsZW1lbnQgPSAqZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVu
dCgpOworICAgIGF1dG8mIGJvZHkgPSAqZG9jdW1lbnQtPmJvZHkoKTsKKworICAgIEVYUEVDVF9U
UlVFKGNvbnRhaW5zKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGRv
Y3VtZW50RWxlbWVudCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5zKG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGJvZHkpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250
YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50KSwgYm9k
eSkpOworCisgICAgRVhQRUNUX0ZBTFNFKGNvbnRhaW5zKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhkb2N1bWVudCksIGRvY3VtZW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRhaW5z
KG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3Vu
ZGFyeVBvaW50KGRvY3VtZW50LCAyKSksIGRvY3VtZW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKGNv
bnRhaW5zKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1h
a2VCb3VuZGFyeVBvaW50KGRvY3VtZW50RWxlbWVudCwgMCkpLCBib2R5KSk7CisgICAgRVhQRUNU
X0ZBTFNFKGNvbnRhaW5zKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVu
dCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDApKSwgYm9keSkpOworICAgIEVYUEVDVF9G
QUxTRShjb250YWlucyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQs
IDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfVFJV
RShjb250YWlucyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDAp
LCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudEVsZW1lbnQsIDEpKSwgYm9keSkpOworCisgICAg
YXV0byBhID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgRVhQRUNUX0ZB
TFNFKGNvbnRhaW5zKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGEp
KTsKKworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisKKyAgICBhdXRvIGIgPSBIVE1MRGl2RWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBib2R5LmFwcGVuZENoaWxkKGIpOworCisgICAg
YXV0byBjID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5k
Q2hpbGQoYyk7CisKKyAgICBhdXRvIGQgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KTsKKyAgICBhLT5hcHBlbmRDaGlsZChkKTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8gZiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUo
ZG9jdW1lbnQpOworICAgIGUtPmFwcGVuZENoaWxkKGYpOworICAgIEVYUEVDVF9GQUxTRShjb250
YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIGYpKTsKKworICAgIGF1
dG8gZyA9IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byYg
aCA9ICpnLT5pbm5lclRleHRFbGVtZW50KCk7CisgICAgYy0+YXBwZW5kQ2hpbGQoZyk7CisgICAg
RVhQRUNUX1RSVUUoY29udGFpbnMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkp
LCBoKSk7Cit9CisKK1RFU1QoRG9jdW1lbnRPcmRlciwgUmFuZ2VJbnRlcnNlY3RzTm9kZSkKK3sK
KyAgICBhdXRvIGRvY3VtZW50ID0gY3JlYXRlRG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVu
dEVsZW1lbnQgPSAqZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIGF1dG8mIGJvZHkg
PSAqZG9jdW1lbnQtPmJvZHkoKTsKKworICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgZG9jdW1lbnRFbGVtZW50KSk7Cisg
ICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
ZG9jdW1lbnQpLCBib2R5KSk7CisgICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50KSwgYm9keSkpOworCisgICAgRVhQ
RUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1l
bnQpLCBkb2N1bWVudCkpOworICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVNpbXBsZVJh
bmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9j
dW1lbnQsIDIpKSwgZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaW50ZXJzZWN0cyhtYWtl
U2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQ
b2ludChkb2N1bWVudEVsZW1lbnQsIDApKSwgYm9keSkpOworICAgIEVYUEVDVF9GQUxTRShpbnRl
cnNlY3RzKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudEVsZW1lbnQs
IDEpLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpLCBib2R5KSk7CisgICAgRVhQRUNU
X1RSVUUoaW50ZXJzZWN0cyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1l
bnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSksIGJvZHkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShpbnRlcnNlY3RzKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVu
dCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEpKSwgYm9keSkpOworICAgIEVYUEVDVF9U
UlVFKGludGVyc2VjdHMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50
LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAxKSksIGJvZHkpKTsKKwor
ICAgIGF1dG8gYSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIEVYUEVD
VF9GQUxTRShpbnRlcnNlY3RzKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVu
dCksIGEpKTsKKworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisKKyAgICBhdXRvIGIgPSBIVE1M
RGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBib2R5LmFwcGVuZENoaWxkKGIpOwor
CisgICAgYXV0byBjID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+
YXBwZW5kQ2hpbGQoYyk7CisKKyAgICBhdXRvIGQgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKKyAgICBhLT5hcHBlbmRDaGlsZChkKTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZF
bGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8gZiA9IEhUTUxEaXZFbGVtZW50Ojpj
cmVhdGUoZG9jdW1lbnQpOworICAgIGUtPmFwcGVuZENoaWxkKGYpOworICAgIEVYUEVDVF9GQUxT
RShpbnRlcnNlY3RzKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgZSkpOwor
ICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KGYpLCBlKSk7CisgICAgRVhQRUNUX0ZBTFNFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGJvZHkpLCBmKSk7CisKKyAgICBhdXRvIGcgPSBIVE1MVGV4dEFyZWFFbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8mIGggPSAqZy0+aW5uZXJUZXh0RWxlbWVu
dCgpOworICAgIGMtPmFwcGVuZENoaWxkKGcpOworICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMo
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBoKSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407348</attachid>
            <date>2020-08-26 16:10:13 -0700</date>
            <delta_ts>2020-08-27 19:04:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215755-20200826161012.patch</filename>
            <type>text/plain</type>
            <size>162803</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjQ0YTA1NzQ0NGRjMTNk
OTk0YThmNTk0NTkwZWU3MGM2N2RiMzdjNy4uNTdlZjQzYWFjOGNlMTkwMjE1MjIxOWFkOGY5Nzg3
OWIwZjMzZTMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NCBAQAorMjAyMC0wOC0yNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwg
dGhlIHJlbWFpbmluZyB1c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcik6IFVzZSBkb2N1
bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1Jh
bmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNsb3Nlc3RUb1Jhbmdl
KTogVXNlIGNoYXJhY3RlckNvdW50LiBBbHNvIHJlbW92ZWQgdW5ubmVjZXNzYXJ5IGFzc2VydGlv
bnMKKyAgICAgICAgYW5kIHNwZWNpYWwgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbiBjb25z
dCk6IFVzZSBkb2N1bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOiBVc2UgaW50
ZXJzZWN0cy4KKyAgICAgICAgQWxzbyB1c2UgZmlyc3RSYW5nZSBpbnN0ZWFkIG9mIHRvTm9ybWFs
aXplZFJhbmdlLgorCisgICAgICAgICogZG9tL0VsZW1lbnQuaDogRXhwb3J0IGF0dGFjaFNoYWRv
dyBzbyBpdCBjYW4gYmUgdXNlZCBpbiB1bml0IHRlc3RzLgorCisgICAgICAgICogZG9tL05vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTaWJsaW5nU3Vic2VxdWVudCk6IEFkZGVkIGEgY291
cGxlIGFzc2VydGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpkb2N1bWVudE9yZGVyKTogQWRkIGxv
Z2ljIHNvIHRoYXQgc2hhZG93IHRyZWVzIGFyZSBvcmRlcmVkIGJlZm9yZSB0aGUKKyAgICAgICAg
b3RoZXIgY2hpbGRyZW4gb2YgdGhlaXIgaG9zdHMuCisKKyAgICAgICAgKiBkb20vTm9kZS5oOiBB
ZGRlZCBpc19uZXEsIGlzX2x0ZXEsIGFuZCBpc19ndGVxIGZvciB1c2Ugd2l0aCBQYXJ0aWFsT3Jk
ZXJpbmcsCisgICAgICAgIG1hdGNoaW5nIHRoZSBuYW1lcyBhbmQgYmVoYXZpb3IgZnJvbSBDKysy
MC4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6IFJlbW92ZWQgdW51c2VkIENvb3JkaW5hdGVT
cGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpSYW5nZSk6IFVwZGF0ZWQgc2luY2UgUmFu
Z2VCb3VuZGFyeVBvaW50IG5vdyB1c2VzIHJlZmVyZW5jZXMuCisgICAgICAgIChXZWJDb3JlOjpS
YW5nZTo6dXBkYXRlRG9jdW1lbnQpOiBSZW5hbWVkIGZyb20gc2V0RG9jdW1lbnQgYW5kIGNoYW5n
ZWQgc28gdGhhdAorICAgICAgICBpdCBtYWludGFpbnMgdGhlIGludmFyaWFudHMgd2l0aG91dCBy
ZXF1aXJpbmcgdGhlIGNhbGxlciBwYXNzIGFueSBhcmd1bWVudHMuCisgICAgICAgIEFsc28gdXBk
YXRlZCBmb3IgUmFuZ2VCb3VuZGFyeVBvaW50IGFubWUgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjpzZXRTdGFydCk6IFVwZGF0ZWQgZm9yIGNoZWNrTm9kZU9mZnNldFBh
aXIgbmFtZSBjaGFuZ2UuCisgICAgICAgIFJlbW92ZWQgdG9vLWNvbXBsZXggY29kZSBmb3IgbW92
aW5nIGJldHdlZW4gZG9jdW1lbnRzLiBVc2UgZG9jdW1lbnRPcmRlcgorICAgICAgICBpbnN0ZWFk
IG9mIGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5lciB0byBjaGVjayBmb3Igc3RhcnQvZW5k
IHRoYXQgaGF2ZQorICAgICAgICBpbmNvcnJlY3Qgb3JkZXIgb3Igbm8gY29tbW9uIGFuY2VzdG9y
LiBVc2UgdXBkYXRlRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6aXNQb2ludEluUmFuZ2UpOiBVc2UgaXNQ
b2ludEluUmFuZ2UgdGhhdCB0YWtlcyBhIFNpbXBsZVJhbmdlLgorICAgICAgICBBbHNvIHVwZGF0
ZWQgZm9yIGNoZWNrTm9kZU9mZnNldFBhaXIgbmFtZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Y29tcGFyZVBvaW50IGNvbnN0KTogVXNlIGRvY3VtZW50T3JkZXIuIERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVOb2RlIGNvbnN0KTogVXNlIGRvY3VtZW50
T3JkZXIuCisgICAgICAgIChXZWJDb3JlOjp0b3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyBjb25zdCk6IERlbGV0ZWQgbW9yZSBvdmVy
bG9hZHMuCisgICAgICAgIEtlcHQgb25seSB0aGUgb25lIG5lZWRlZCBmb3IgYmluZGluZ3MsIGFu
ZCByZW5hbWVkIGl0IGZyb20KKyAgICAgICAgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGlu
Z3MuIEFsc28gZml4ZWQgdGhlIGltcGxlbWVudGF0aW4gdG8gYmUgc2ltcGxlciwKKyAgICAgICAg
dXNlIGRvY3VtZW50T3JkZXIsIGFuZCBtYXRjaCB0aGUgRE9NIHNwZWNpZmljYXRpb24gbW9yZSBj
bG9zZWx5ICh3aXRob3V0IGEKKyAgICAgICAgYmVoYXZpb3IgY2hhbmdlKS4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpib3VuZGFyeVBvaW50c1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjppbnRlcnNlY3RzTm9kZSBjb25zdCk6IFVzZSBpbnRlcnNlY3Rz
IGZyb20gU2ltcGxlUmFuZ2UuCisgICAgICAgIEFsc28gZG9uJ3QgcmFpc2UgZXhjZXB0aW9ucy4K
KyAgICAgICAgKFdlYkNvcmU6Omxlbmd0aE9mQ29udGVudHNJbk5vZGUpOiBEZWxldGVkLiBUaGlz
IGdpdmVzIHRoZSBzYW1lIHJlc3VsdCBhcworICAgICAgICBOb2RlOjpsZW5ndGgsIGJ1dCBsZXNz
IGVmZmljaWVudGx5LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnByb2Nlc3NDb250ZW50cyk6
IFVwZGF0ZWQgc2luY2UgUmFuZ2VCb3VuZGFyeVBvaW50IG5vdworICAgICAgICB1c2VzIHJlZmVy
ZW5jZXMuCisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cyk6
IFJlbW92ZWQgb2Jzb2xldGUgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0b1N0
cmluZyBjb25zdCk6IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyBhbmQKKyAgICAgICAgY2hhcmFjdGVy
RGF0YU9mZnNldFJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRleHQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmRldGFjaCk6IE1vdmVkIHRvIHRoZSBo
ZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y2hlY2tOb2RlT2Zmc2V0UGFpciBjb25z
dCk6IFJuZWFtZWQgZnJvbSBjaGVja05vZGVXT2Zmc2V0LgorICAgICAgICAoV2ViQ29yZTo6UmFu
Z2U6OmNsb25lUmFuZ2UpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnNldFN0YXJ0QWZ0ZXIpOiBUd2Vha2VkIGNvZGluZyBzdHlsZS4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpzZXRFbmRCZWZvcmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjpzZXRFbmRBZnRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVj
dE5vZGUpOiBEaXR0by4gQWxzbyByZW1vdmVkIHVubmVjZXNzYXJ5IGNvZGUgdG8KKyAgICAgICAg
Y2FsbCBzZXREb2N1bWVudCwgc2luY2Ugc2V0U3RhcnQgdGFrZXMgY2FyZSBvZiB0aGF0LgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OnNldFN0YXJ0QmVmb3JlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6Zmlyc3ROb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpwYXN0TGFzdE5vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFyZVJh
bmdlc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlc092ZXJsYXApOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKTog
VHdlYWtlZCBjb2Rpbmcgc3R5bGUgYW5kIHVwZGF0ZWQKKyAgICAgICAgc2luY2UgUmFuZ2VCb3Vu
ZGFyeVBvaW50IHVzZXMgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6bm9k
ZUNoaWxkcmVuQ2hhbmdlZCk6IFVzZSBtX293bmVyRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3Jl
Ojpib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQpOiBSZW1vdmVkIHVubmVlZGVkIGNv
ZGUKKyAgICAgICAgdG8gaGFuZGxlIGNhc2Ugd2hlcmUgb25lIG9mIHRoZSBjaGlsZHJlbiBpcyB0
aGUgY2hpbGRCZWZvcmUgYnV0IHRoZQorICAgICAgICBub2RlIGlzIG5vdCBpbnNpZGUgdGhlIGNv
bnRhaW5lciAtLSB0aGF0IGNhc2UgZG9lc24ndCBleGlzdC4gVXNlCisgICAgICAgIE5vZGU6OmNv
bnRhaW5zLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVDaGlsZHJlbldpbGxCZVJlbW92
ZWQpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2Rl
V2lsbEJlUmVtb3ZlZCk6IFNpbXBsaWZ5IGxvZ2ljIHVzaW5nCisgICAgICAgIFJhbmdlOjpjb250
YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZCk6IFVzZSBt
X293bmVyRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cGFyZW50bGVzc05vZGVN
b3ZlZFRvTmV3RG9jdW1lbnRBZmZlY3RzUmFuZ2UpOgorICAgICAgICBVcGRhdGVkIHNpbmNlIFJh
bmdlQm91bmRhcnlQb2ludCB1c2VzIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6Ym91
bmRhcnlUZXh0SW5zZXJ0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4
dFJlbW92ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dE5vZGVzTWVy
Z2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyeVRleHROb2Rlc1NwbGl0KTog
RGl0dG8uCisgICAgICAgIChzaG93VHJlZSk6IFJlbW92ZWQgY2FsbCB0byBib3VuZGFyeVBvaW50
c1ZhbGlkLiBUaGF0J3MgY2hlY2tpbmcgc29tZXRoaW5nCisgICAgICAgIHRoZSBjbGFzcyBhbHJl
YWR5IHRyZWF0cyBhcyBhbiBpbnZhcmlhbnQsIHNvIGl0J3Mgb2Jzb2xldGUgY29kZSBsZWZ0IGZy
b20KKyAgICAgICAgbG9uZyBhZ28gd2hlbiB3ZSBkaWRuJ3QgaGF2ZSB0aGF0IGltcGxlbWVudGVk
IGNvcnJlY3RseS4KKworICAgICAgICAqIGRvbS9SYW5nZS5oOiBSZW9yZ2FuaXplZCB0aGUgaGVh
ZGVyIHRvIG1hdGNoIHRoZSBJREwgZmlsZS4KKyAgICAgICAgUmVtb3ZlZCBvd25lckRvY3VtZW50
LCBjb21wYXJlQm91bmRhcnlQb2ludHMgb3ZlcmxvYWRzIG90aGVyIHRoYW4gdGhlIG9uZQorICAg
ICAgICB1c2VkIGZyb20gYmluZGluZ3MsIGZpcnN0Tm9kZSwgcGFzdExhc3ROb2RlLCB0ZXh0LCBj
b250YWlucywgYXJlUmFuZ2VzRXF1YWwsCisgICAgICAgIGFuZCByYW5nZXNPdmVybGFwLiBBbHNv
IHVwZGF0ZWQgc2luY2UgUmFuZ2VCb3VuZGFyeVBvaW50Ojpjb250YWluZXIgaXMgbm93CisgICAg
ICAgIGEgcmVmZXJlbmNlLiBNb3ZlZCBkZXRhY2ggZnVuY3Rpb24gaGVyZSB0byB0aGUgaGVhZGVy
IGFzIGFuIGVtcHR5IGlubGluZS4KKworICAgICAgICAqIGRvbS9SYW5nZS5pZGw6IENoYW5nZWQg
c3RhcnQvZW5kT2Zmc2V0IHRvIHVuc2lnbmVkLiBTdG9wcGVkIHVzaW5nIHRoZQorICAgICAgICBu
YW1lIGNvbXBhcmVCb3VuZGFyeVBvaW50ZXJzRm9yQmluZGluZ3MuIFVwZGF0ZWQgaW50ZXJzZWN0
c05vZGUgdG8gbm90CisgICAgICAgIHRocm93IGV4Y2VwdGlvbnMgYXMgY2FsbGVkIGZvciBpbiB0
aGUgRE9NIHNwZWNpZmljYXRpb24uIFR3ZWFrZWQgY29tbWVudHMuCisKKyAgICAgICAgKiBkb20v
UmFuZ2VCb3VuZGFyeVBvaW50Lmg6IENoYW5nZWQgY29uc3RydWN0b3IgYXJndW1lbnQgdG8gYSBy
ZWZlcmVuY2UuCisgICAgICAgIFJlbmFtZWQgc2V0VG9CZWZvcmVDaGlsZCwgc2V0VG9BZnRlckNo
aWxkLCBzZXRUb1N0YXJ0T2ZOb2RlLCBhbmQgc2V0VG9FbmRPZk5vZGUKKyAgICAgICAgdG8gc2V0
VG9CZWZvcmVOb2RlLCBzZXRUb0FmdGVyTm9kZSwgc2V0VG9CZWZvcmVDb250ZW50cywgc2V0VG9B
ZnRlckNvbnRlbnRzLgorICAgICAgICBNZXJnZWQgZW5zdXJlT2Zmc2V0SXNWYWxpZCBpbnRvIHRo
ZSBvZmZzZXQgZnVuY3Rpb24uIENoYW5nZWQgbV9jb250YWluZXJOb2RlCisgICAgICAgIGludG8g
YSBSZWY8PiBhbmQgcmVuYW1lZCBpdCBtX2NvbnRhaW5lci4gUmVtb3ZlZCBjbGVhci4KKworICAg
ICAgICAqIGRvbS9TaW1wbGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1BvaW50SW5S
YW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRPcmRlcik6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omlu
dGVyc2VjdHMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVuaW9uUmFuZ2VzKTogQWRkZWQu
CisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorCisgICAg
ICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVQb3Np
dGlvbnMpOiBVc2UgZG9jdW1lbnRPcmRlci4KKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2li
bHlDb250YWluZWRXaXRoaW4pOiBVc2UgY29udGFpbnMuCisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNGcmFtZUluUmFuZ2UpOiBVc2UgaW50ZXJzZWN0
cy4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51
bWJlcnMpOiBVc2UgaW50ZXJzZWN0cy4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bmlvblJhbmdlcyk6IE1vdmVkIHRvIFNpbXBsZVJh
bmdlLmNwcCwgd2hlcmUgaXQncyBub3cKKyAgICAgICAgaW1wbGVtZW50ZWQgdXNpbmcgZG9jdW1l
bnRPcmRlci4KKworICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24pOiBV
c2UgaW50ZXJzZWN0cy4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBM
ZWdhY3kubW06CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3Rpb25Db250YWluc1Bvc2l0aW9uKTog
VXNlIGlzUG9pbnRJblJhbmdlLgorCisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpleHRlbmQpOiBVc2UgbWFrZVJlZlB0ciBh
bmQgTm9kZTo6bGVuZ3RoCisgICAgICAgIHRvIHN0cmVhbWxpbmUgdGhlIGltcGxlbWVudGF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpnZXRSYW5nZUF0KTogVXNlIG1ha2VC
b3VuZGFyeVBvaW50QmVmb3JlTm9kZQorICAgICAgICBhbmQgcmVtb3ZlIHVubmVlZGVkIG51bGwg
Y2hlY2sgdGhhdCdzIGFscmVhZHkgY292ZXJlZCBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6YWRkUmFuZ2UpOiBVc2UgaW50ZXJzZWN0cyBhbmQgdW5pb25SYW5nZXMuCisg
ICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbnRhaW5zTm9kZSBjb25zdCk6IFVzZSBp
bnRlcnNlY3RzIGFuZCBjb250YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6
aXNWYWxpZEZvclBvc2l0aW9uIGNvbnN0KTogVXNlIGJvb2xlYW4gbG9naWMuCisKKyAgICAgICAg
KiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9s
bGVyOjpkcmFnZ2FibGVFbGVtZW50IGNvbnN0KTogVXNlIGNvbnRhaW5zLgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0NvbnRyb2xsZXI6Omluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2Fy
ZXQpOiBVc2UgaW50ZXJzZWN0cy4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNl
IGNvbnRhaW5zLgorCisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OmZpbmRUZXh0TWF0Y2hlcyk6IFVzZSBkb2N1bWVudE9yZGVyLgorCisgICAgICAgICog
cGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmZpbmRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRD
b250YWluaW5nU2VsZWN0aW9uSGlnaGxpZ2h0KToKKyAgICAgICAgVXNlIGNvbnRhaW5zLgorCisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpyYW5nZUFzVGV4dCk6IFVzZSBwbGFpblRleHQuCisgICAgICAgIChXZWJDb3JlOjpqb2lu
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdC
YWNrd2FyZHNUZXh0SXRlcmF0b3IpOiBVc2UgYSB2ZWN0b3IKKyAgICAgICAgdGhhdCB3ZSByZXZl
cnNlIGFuZCBqb2luIHJhdGhlciB0aGFuIGluc2VydGluZyBhdCB0aGUgc3RhcnQgb2YgYSBzdHJp
bmcuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnN1YnJhbmdlKTogQWRkZWQgYSBjYWxs
IHRvIHVwZGF0ZUxheW91dCBzaW5jZSB0ZXh0IGl0ZXJhdG9yCisgICAgICAgIGZ1bmN0aW9ucyBk
ZXBlbmQgb24gdGhlIHN0YXRlIG9mIHRoZSByZW5kZXIgdHJlZS4gUmVhbGl6ZWQgdGhpcyB3YXMg
dGhlb3JldGljYWxseQorICAgICAgICBuZWVkZWQgYmVjYXVzZSBvZiBJbnRlcm5hbHM6OnJhbmdl
QXNUZXh0LgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyYW5nZU9mU3RyaW5nTmVhckxv
Y2F0aW9uKTogRGl0dG8uCisKIDIwMjAtMDgtMjYgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2ll
aEBhcHBsZS5jb20+CiAKICAgICAgICAgQXZvaWQgdW5uZWNlc3NhcmlseSBjb3B5aW5nIGEgVmVj
dG9yIGluIFdlYkNvcmU6OnRyYW5zZm9ybXNGb3JWYWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAyYjgxYTMxMTVm
ZmI3YmQ2Y2Y2OTQ2ZjUwNjgyM2U4ZjdkNmYzYWI1Li5lMmRhMGI5ZTg5OGFkNjA1MTBhZGY5M2Yx
MzhmYjQ2MGU4Yzg1NmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIwLTA4LTI2ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxtb3N0IGFs
bCB0aGUgcmVtYWluaW5nIHVzZXMgb2YgbGl2ZSByYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTc1NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZS5jcHA6CisgICAgICAgICh3ZWJraXRfZG9tX3Jhbmdl
X2NvbXBhcmVfYm91bmRhcnlfcG9pbnRzKTogVXBkYXRlIGZvciByZW5hbWUgb2YKKyAgICAgICAg
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MuCisgICAgICAgICh3ZWJraXRfZG9tX3Jh
bmdlX2ludGVyc2VjdHNfbm9kZSk6IFJlbW92ZWQgZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAg
ICAod2Via2l0X2RvbV9yYW5nZV9nZXRfdGV4dCk6IFVzZSBwbGFpblRleHQuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbToKKyAgICAg
ICAgKC1bV0tET01SYW5nZSBpbml0V2l0aERvY3VtZW50Ol0pOiBUaWdodGVuZWQgdXAgaW50byBh
IG9uZS1saW5lci4KKyAgICAgICAgKC1bV0tET01SYW5nZSB0ZXh0XSk6IFVzZSBwbGFpblRleHQu
CisgICAgICAgICgtW1dLRE9NUmFuZ2UgdGV4dFJlY3RzXSk6IFN0b3BwZWQgdXNpbmcgUmFuZ2U6
Om93bmVyRG9jdW1lbnQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RP
TS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZTo6ZG9jdW1lbnQpOiBTdG9wcGVkIHVzaW5nCisgICAgICAgIFJh
bmdlOjpvd25lckRvY3VtZW50LgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlOjpib3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAg
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRl
cmVkSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZTo6dGV4dCBjb25zdCk6IFVzZSBwbGFpblRleHQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUgY29uc3QpOiBVc2UgY29udGFpbnMuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KTogVXNlIGludGVyc2VjdHMu
CisKIDIwMjAtMDgtMjYgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpT1NdIERpc2FibGVkIG9wdGlvbnMgaW4gdGhlIG11bHRpLXNlbGVjdCBwaWNrZXIg
c2hvdWxkIG5vdCBiZSBzZWxlY3RhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXgg
ZDZmNmU0ZThmYmE1MzA1M2EwMzQzYzY0MjQ5MzM2NzA4NjE3MGZlMS4uY2U0NDYyMmIyMzVmMzRk
OGRjYTc4MWRkMjQwMjVjNjgxNzI2MDk1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI0IEBACisyMDIwLTA4LTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgYWxtb3N0IGFsbCB0aGUgcmVtYWluaW5nIHVzZXMgb2YgbGl2
ZSByYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNTc1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogRE9NL0RPTVJhbmdlLm1tOgorICAgICAgICAoLVtET01SYW5nZSB0ZXh0XSk6IFVzZSBwbGFp
blRleHQuCisgICAgICAgICgtW0RPTVJhbmdlIGNvbXBhcmVCb3VuZGFyeVBvaW50czpzb3VyY2VS
YW5nZTpdKTogVXBkYXRlIGZvciByZW5hbWUgb2YKKyAgICAgICAgY29tcGFyZUJvdW5kYXJ5UG9p
bnRzRm9yQmluZGluZ3MuCisgICAgICAgICgtW0RPTVJhbmdlIGludGVyc2VjdHNOb2RlOl0pOiBS
ZW1vdmVkIHJhaXNlT25ET01FcnJvci4KKworICAgICAgICAqIERPTS9ET01VSUtpdEV4dGVuc2lv
bnMubW06CisgICAgICAgIChmaXJzdE5vZGVBZnRlcik6IE1vdmVkIFJhbmdlOjpmaXJzdE5vZGUg
aGVyZSBzaW5jZSBpdCdzIHRoZSBvbmx5IHJlbWFpbmluZyBjYWxsZXI7CisgICAgICAgIG1pZ2h0
IG5lZWQgdG8ga2VlcCBsZWdhY3kgYmVoYXZpb3IgZGVwZW5kaW5nIG9uIGhvdyB0aGlzIGlzIHVz
ZWQgYnkgVUlLaXQuCisgICAgICAgICgtW0RPTVJhbmdlIGZpcnN0Tm9kZV0pOiBDYWxsIGZpcnN0
Tm9kZUFmdGVyLgorCisgICAgICAgICogRE9NL1dlYkRPTU9wZXJhdGlvbnMubW06CisgICAgICAg
ICgtW0RPTVJhbmdlIG1hcmt1cFN0cmluZ10pOiBTdG9wIHVzaW5nIFJhbmdlOjpvd25lckRvY3Vt
ZW50LgorCiAyMDIwLTA4LTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEhhc2hNYXA8UmVmPFQ+Pjo6dGFrZSBzaG91bGQgcmV0dXJuIFJlZlB0cjxUPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggNjM4
YmFmMGJjNzk4NGQ5Nzk5YjI4MmNiYmFlOGNhMTc2MTM2ZmNjZi4uMWUxMDU5ZGUxZTIwMTVjNTM0
MGQyMzE1YmJhNTYwNDliMzAxMDdkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0yMDM2LDYgKzIwMzYsOCBAQCBzdGF0aWMgYm9vbCBp
c1JlcGxhY2VkTm9kZU9yQlIoTm9kZSogbm9kZSkKIAogc3RhdGljIGJvb2wgY2hhcmFjdGVyT2Zm
c2V0c0luT3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb25z
dCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldDIpCiB7CisgICAgLy8gRklYTUU6IFNo
b3VsZCBqdXN0IGJlIGFibGUgdG8gY2FsbCBkb2N1bWVudE9yZGVyIHdpdGhvdXQgYWNjZXNzaWJp
bGl0eS1zcGVjaWZpYyBsb2dpYy4gTm90IGNsZWFyIHdoeSB3ZSBuZWVkIENoYXJhY3Rlck9mZnNl
dCBpbnN0ZWFkIG9mIFBvc2l0aW9uIG9yIEJvdW5kYXJ5UG9pbnQuCisKICAgICBpZiAoY2hhcmFj
dGVyT2Zmc2V0MS5pc051bGwoKSB8fCBjaGFyYWN0ZXJPZmZzZXQyLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0yMDQ4LDE2ICsyMDUwLDEyIEBAIHN0YXRpYyBib29s
IGNoYXJhY3Rlck9mZnNldHNJbk9yZGVyKGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVy
T2Zmc2V0MSwgY29uCiAgICAgICAgIG5vZGUxID0gbm9kZTEtPnRyYXZlcnNlVG9DaGlsZEF0KGNo
YXJhY3Rlck9mZnNldDEub2Zmc2V0KTsKICAgICBpZiAoIW5vZGUyLT5pc0NoYXJhY3RlckRhdGFO
b2RlKCkgJiYgIWlzUmVwbGFjZWROb2RlT3JCUihub2RlMikgJiYgbm9kZTItPmhhc0NoaWxkTm9k
ZXMoKSkKICAgICAgICAgbm9kZTIgPSBub2RlMi0+dHJhdmVyc2VUb0NoaWxkQXQoY2hhcmFjdGVy
T2Zmc2V0Mi5vZmZzZXQpOwotICAgIAogICAgIGlmICghbm9kZTEgfHwgIW5vZGUyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgYXV0byByYW5nZTEgPSBBWE9iamVjdENhY2hlOjpy
YW5nZUZvck5vZGVDb250ZW50cygqbm9kZTEpOwogICAgIGF1dG8gcmFuZ2UyID0gQVhPYmplY3RD
YWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoKm5vZGUyKTsKLSAgICBhdXRvIHJlc3VsdCA9IGNy
ZWF0ZUxpdmVSYW5nZShyYW5nZTEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJU
X1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UyKSk7Ci0gICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKSA8PSAwOworICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIo
cmFuZ2UxLnN0YXJ0LCByYW5nZTIuc3RhcnQpKTsKIH0KIAogc3RhdGljIE5vZGUqIHJlc2V0Tm9k
ZUFuZE9mZnNldEZvclJlcGxhY2VkTm9kZShOb2RlJiByZXBsYWNlZE5vZGUsIGludCYgb2Zmc2V0
LCBpbnQgY2hhcmFjdGVyQ291bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBjYTVmMjIxMzA2YzU5N2FmZDFmYmUx
MzcyYTlkY2E2NDNjNTg4NGQ4Li4wMmE2YTRlZGVhMDU2YjZhNWU2OTVjOGY1YzAyNTBiNWIwMTEy
NWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKQEAgLTI5NywyNiArMjk3LDE3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiBzCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gbWlzc3BlbGxpbmdzOwogICAgIGNo
ZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgVGV4dENoZWNr
aW5nVHlwZTo6U3BlbGxpbmcsIG1pc3NwZWxsaW5ncywgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKIAotICAgIC8vIFRoZSByZXR1cm5lZCBtaXNzcGVsbGluZ3MgYXJlIGFzc3VtZWQg
dG8gYmUgb3JkZXJlZCBpbiB0aGUgZG9jdW1lbnQKLSAgICAvLyBsb2dpY2FsIG9yZGVyLCB3aGlj
aCBzaG91bGQgYmUgbWF0Y2hlZCBieSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzLgotICAg
IC8vIFNvIGl0ZXJhdGUgZm9yd2FyZCBvciBiYWNrd2FyZHMgZGVwZW5kaW5nIG9uIHRoZSBkZXNp
cmVkIHNlYXJjaAotICAgIC8vIGRpcmVjdGlvbiB0byBmaW5kIHRoZSBjbG9zZXN0IG1pc3NwZWxs
aW5nIGluIHRoYXQgZGlyZWN0aW9uLgorICAgIC8vIEZpbmQgdGhlIGZpcnN0IG1pc3NwZWxsaW5n
IHBhc3QgdGhlIHN0YXJ0LgogICAgIGlmIChkaXJlY3Rpb24gPT0gQWNjZXNzaWJpbGl0eVNlYXJj
aERpcmVjdGlvbjo6TmV4dCkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1pc3NwZWxsaW5n
IDogbWlzc3BlbGxpbmdzKSB7CisgICAgICAgIGZvciAoYXV0byYgbWlzc3BlbGxpbmcgOiBtaXNz
cGVsbGluZ3MpIHsKICAgICAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGVkaXRvci5y
YW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChtaXNzcGVsbGluZyk7Ci0gICAgICAgICAgICBpZiAo
IW1pc3NwZWxsaW5nUmFuZ2UpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgIGlmIChjcmVhdGVMaXZlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpID4gMCkKKyAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ1JhbmdlICYm
IGlzX2d0KGRvY3VtZW50T3JkZXIobWlzc3BlbGxpbmdSYW5nZS0+ZW5kLCBzdGFydC5lbmQpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQ
cmV2aW91cykgewotICAgICAgICBmb3IgKGF1dG8gcml0ID0gbWlzc3BlbGxpbmdzLnJiZWdpbigp
OyByaXQgIT0gbWlzc3BlbGxpbmdzLnJlbmQoKTsgKytyaXQpIHsKLSAgICAgICAgICAgIGF1dG8g
bWlzc3BlbGxpbmdSYW5nZSA9IGVkaXRvci5yYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdCgqcml0
KTsKLSAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxpbmdS
YW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0
ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKKyAgICB9IGVsc2Ug
eworICAgICAgICBmb3IgKGF1dG8mIG1pc3NwZWxsaW5nIDogbWFrZVJldmVyc2VkUmFuZ2UobWlz
c3BlbGxpbmdzKSkgeworICAgICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gZWRpdG9y
LnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KG1pc3NwZWxsaW5nKTsKKyAgICAgICAgICAgIGlm
IChtaXNzcGVsbGluZ1JhbmdlICYmIGlzX2x0KGRvY3VtZW50T3JkZXIobWlzc3BlbGxpbmdSYW5n
ZS0+c3RhcnQsIHN0YXJ0LnN0YXJ0KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICptaXNzcGVs
bGluZ1JhbmdlOwogICAgICAgICB9CiAgICAgfQpAQCAtNTY1LDI4ICs1NTYsMTMgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpmaW5kTWF0Y2hpbmdPYmplY3RzKEFjY2Vzc2liaWxpdHlTZWFy
Y2hDcml0ZXJpYSogY3JpdGUKIC8vIHJhbmdlIGlzIGV4cGVjdGVkIHRvIEFDVFVBTExZIGJlIGJl
Zm9yZS4gVGhlc2UgYXJlIG5vdCBjaGVja2VkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgogc3Rh
dGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUNsb3Nlc3RUb1JhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiByZWZlcmVuY2VSYW5nZSwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiYgYWZ0ZXJSYW5n
ZSwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiYgYmVmb3JlUmFuZ2UpCiB7Ci0gICAgLy8gVGhlIHRy
ZWVTY29wZSBmb3Igc2hhZG93IG5vZGVzIG1heSBub3QgYmUgdGhlIHNhbWUgc2NvcGUgYXMgYW5v
dGhlciBlbGVtZW50IGluIGEgZG9jdW1lbnQuCi0gICAgLy8gQ29tcGFyaXNvbnMgbWF5IGZhaWwg
aW4gdGhhdCBjYXNlLCB3aGljaCBhcmUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHNob3VsZCBub3Qg
YXNzZXJ0LgotCi0gICAgaWYgKGFmdGVyUmFuZ2UgJiYgKGFmdGVyUmFuZ2UtPnN0YXJ0LmNvbnRh
aW5lci0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24ocmVmZXJlbmNlUmFuZ2UuZW5kLmNvbnRhaW5l
cikgJiBOb2RlOjpET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQpKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgIEFTU0VSVCghYWZ0ZXJSYW5nZSB8fCBjcmVhdGVMaXZlUmFu
Z2UoYWZ0ZXJSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RB
UlQsIGNyZWF0ZUxpdmVSYW5nZShyZWZlcmVuY2VSYW5nZSkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgp
ID49IDApOwotCi0gICAgaWYgKGJlZm9yZVJhbmdlICYmIChiZWZvcmVSYW5nZS0+ZW5kLmNvbnRh
aW5lci0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24ocmVmZXJlbmNlUmFuZ2Uuc3RhcnQuY29udGFp
bmVyKSAmIE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCkpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgQVNTRVJUKCFiZWZvcmVSYW5nZSB8fCBjcmVhdGVMaXZl
UmFuZ2UoYmVmb3JlUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RP
X1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpKS5yZWxlYXNlUmV0dXJuVmFs
dWUoKSA8PSAwKTsKLQotICAgIGlmICghYWZ0ZXJSYW5nZSAmJiAhYmVmb3JlUmFuZ2UpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKCFiZWZvcmVSYW5nZSkKICAgICAgICAg
cmV0dXJuIFdURk1vdmUoYWZ0ZXJSYW5nZSk7CiAgICAgaWYgKCFhZnRlclJhbmdlKQogICAgICAg
ICByZXR1cm4gV1RGTW92ZShiZWZvcmVSYW5nZSk7Ci0KLSAgICBhdXRvIHBvc2l0aW9uc1RvQWZ0
ZXJSYW5nZSA9IFBvc2l0aW9uOjpwb3NpdGlvbkNvdW50QmV0d2VlblBvc2l0aW9ucyhjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24oYWZ0ZXJSYW5nZS0+c3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmVmZXJlbmNlUmFuZ2UuZW5kKSk7Ci0gICAgYXV0byBwb3NpdGlvbnNUb0Jl
Zm9yZVJhbmdlID0gUG9zaXRpb246OnBvc2l0aW9uQ291bnRCZXR3ZWVuUG9zaXRpb25zKGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihiZWZvcmVSYW5nZS0+ZW5kKSwgY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKHJlZmVyZW5jZVJhbmdlLnN0YXJ0KSk7Ci0KLSAgICByZXR1cm4gV1RGTW92
ZShwb3NpdGlvbnNUb0FmdGVyUmFuZ2UgPCBwb3NpdGlvbnNUb0JlZm9yZVJhbmdlID8gYWZ0ZXJS
YW5nZSA6IGJlZm9yZVJhbmdlKTsKKyAgICBhdXRvIGRpc3RhbmNlQmVmb3JlID0gY2hhcmFjdGVy
Q291bnQoeyBiZWZvcmVSYW5nZS0+ZW5kLCByZWZlcmVuY2VSYW5nZS5zdGFydCB9KTsKKyAgICBh
dXRvIGRpc3RhbmNlQWZ0ZXIgPSBjaGFyYWN0ZXJDb3VudCh7IGFmdGVyUmFuZ2UtPnN0YXJ0LCBy
ZWZlcmVuY2VSYW5nZS5lbmQgfSk7CisgICAgcmV0dXJuIFdURk1vdmUoZGlzdGFuY2VCZWZvcmUg
PD0gZGlzdGFuY2VBZnRlciA/IGJlZm9yZVJhbmdlIDogYWZ0ZXJSYW5nZSk7CiB9CiAKIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2Vz
dFRvUmFuZ2VJbkRpcmVjdGlvbihjb25zdCBTaW1wbGVSYW5nZSYgcmVmZXJlbmNlUmFuZ2UsIEFj
Y2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24gc2VhcmNoRGlyZWN0aW9uLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgc2VhcmNoU3RyaW5ncykgY29uc3QKQEAgLTYwMywyMyArNTc5LDE2IEBAIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2Vz
dFRvUmFuZ2VJbkRpcmVjdGlvCiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNsb3Nlc3RTdHJp
bmdSYW5nZTsKICAgICBmb3IgKGF1dG8mIHNlYXJjaFN0cmluZyA6IHNlYXJjaFN0cmluZ3MpIHsK
ICAgICAgICAgaWYgKGF1dG8gZm91bmRTdHJpbmdSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5yYW5n
ZU9mU3RyaW5nKHNlYXJjaFN0cmluZywgcmVmZXJlbmNlUmFuZ2UsIGZpbmRPcHRpb25zKSkgewor
ICAgICAgICAgICAgYm9vbCBmb3VuZFN0cmluZ0lzQ2xvc2VyOwogICAgICAgICAgICAgaWYgKCFj
bG9zZXN0U3RyaW5nUmFuZ2UpCi0gICAgICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1JhbmdlID0g
KmZvdW5kU3RyaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAgZm91bmRTdHJpbmdJc0Nsb3NlciA9
IHRydWU7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJZiBzZWFyY2hp
bmcgYmFja3dhcmQsIHVzZSB0aGUgdHJhaWxpbmcgcmFuZ2UgZWRnZXMgdG8gY29ycmVjdGx5IGRl
dGVybWluZSB3aGljaAotICAgICAgICAgICAgICAgIC8vIHJhbmdlIGlzIGNsb3Nlc3QuIFNpbWls
YXJseSwgaWYgc2VhcmNoaW5nIGZvcndhcmQsIHVzZSB0aGUgbGVhZGluZyByYW5nZSBlZGdlcy4K
LSAgICAgICAgICAgICAgICBhdXRvJiBjbG9zZXN0U3RyaW5nUG9zaXRpb24gPSBpc0JhY2t3YXJk
U2VhcmNoID8gY2xvc2VzdFN0cmluZ1JhbmdlLT5lbmQgOiBjbG9zZXN0U3RyaW5nUmFuZ2UtPnN0
YXJ0OwotICAgICAgICAgICAgICAgIGF1dG8mIGZvdW5kU3RyaW5nUG9zaXRpb24gPSBpc0JhY2t3
YXJkU2VhcmNoID8gZm91bmRTdHJpbmdSYW5nZS0+ZW5kIDogZm91bmRTdHJpbmdSYW5nZS0+c3Rh
cnQ7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXV0byBjbG9zZXN0UG9zaXRp
b25PZmZzZXQgPSBjbG9zZXN0U3RyaW5nUG9zaXRpb24ub2Zmc2V0OwotICAgICAgICAgICAgICAg
IGF1dG8gc2VhcmNoUG9zaXRpb25PZmZzZXQgPSBmb3VuZFN0cmluZ1Bvc2l0aW9uLm9mZnNldDsK
LSAgICAgICAgICAgICAgICBhdXRvIGNsb3Nlc3RDb250YWluZXJOb2RlID0gY2xvc2VzdFN0cmlu
Z1Bvc2l0aW9uLmNvbnRhaW5lci5wdHIoKTsKLSAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaENv
bnRhaW5lck5vZGUgPSBmb3VuZFN0cmluZ1Bvc2l0aW9uLmNvbnRhaW5lci5wdHIoKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFJhbmdlOjpjb21wYXJl
Qm91bmRhcnlQb2ludHMoY2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nlc3RQb3NpdGlvbk9mZnNl
dCwgc2VhcmNoQ29udGFpbmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZzZXQpLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICgoIWlzQmFja3dhcmRTZWFyY2ggJiYgcmVz
dWx0ID4gMCkgfHwgKGlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0IDwgMCkpCi0gICAgICAgICAg
ICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9ICpmb3VuZFN0cmluZ1JhbmdlOworICAgICAg
ICAgICAgICAgIGZvdW5kU3RyaW5nSXNDbG9zZXIgPSBpc0JhY2t3YXJkU2VhcmNoCisgICAgICAg
ICAgICAgICAgICAgID8gaXNfZ3QoZG9jdW1lbnRPcmRlcihmb3VuZFN0cmluZ1JhbmdlLT5lbmQs
IGNsb3Nlc3RTdHJpbmdSYW5nZS0+ZW5kKSkKKyAgICAgICAgICAgICAgICAgICAgOiBpc19sdChk
b2N1bWVudE9yZGVyKGZvdW5kU3RyaW5nUmFuZ2UtPnN0YXJ0LCBjbG9zZXN0U3RyaW5nUmFuZ2Ut
PnN0YXJ0KSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZm91bmRTdHJpbmdJc0Ns
b3NlcikKKyAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAqZm91bmRTdHJpbmdS
YW5nZTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gY2xvc2VzdFN0cmluZ1JhbmdlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAKaW5kZXggNzliOGNhNGExMGE0MzVkYjMxOGY5MDZmNDA3MWNkNWIw
NDQxNjY5OC4uMmFjMTM0MmRhYzM0NDQ0N2VkNTEzMjE4OWUwOGVmMzU5NTIzZmU5NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCkBAIC05MTUsNyArOTE1LDcgQEAgSW50UG9pbnQgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6bGlua0NsaWNrUG9pbnQoKQogICAgIGlmIChhdXRvIHJhbmdlID0gZWxl
bWVudFJhbmdlKCkpIHsKICAgICAgICAgYXV0byBzdGFydCA9IFZpc2libGVQb3NpdGlvbiB7IGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpIH07CiAgICAgICAgIGF1dG8g
ZW5kID0gbmV4dFZpc2libGVQb3NpdGlvbihzdGFydCk7Ci0gICAgICAgIGlmICghZW5kLmlzTnVs
bCgpICYmIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbnRhaW5zKGVuZCkpCisgICAgICAgIGlm
IChpc1BvaW50SW5SYW5nZSgqcmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGVuZCkpKQogICAgICAg
ICAgICAgcmV0dXJuIHsgYm91bmRzRm9yUmFuZ2UoKm1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5k
KSkuY2VudGVyKCkgfTsKICAgICB9CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNs
aWNrUG9pbnQoKTsKQEAgLTE1NjEsMTcgKzE1NjEsOSBAQCBQbGFpblRleHRSYW5nZSBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25z
dAogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKLSAg
ICBWaXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBh
dXRvIHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
OwotICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCi0gICAgICAgIHJldHVybiBQbGFpblRleHRSYW5n
ZSgpOwotCi0gICAgLy8gRklYTUU6IFRoZSByZWFzb24gdGhpcyBkb2VzIHRoZSBjb3JyZWN0IHRo
aW5nIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBpbiB0aGUKLSAgICAvLyBzaGFkb3cgdHJlZSBvZiBh
biBpbnB1dCBlbGVtZW50IGlzIHRoYXQgd2UgZ2V0IGFuIGV4Y2VwdGlvbiBiZWxvdywgYW5kIHdl
Ci0gICAgLy8gY2hvb3NlIHRvIGludGVycHJldCBhbGwgZXhjZXB0aW9ucyBhcyAiZG9lcyBub3Qg
aW50ZXJzZWN0Ii4gU2VlbXMgbGlrZWx5Ci0gICAgLy8gdGhhdCBkb2VzIG5vdCBoYW5kbGUgYWxs
IGNhc2VzIGNvcnJlY3RseS4KLSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjcmVhdGVMaXZl
UmFuZ2UoKnNlbGVjdGlvblJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm5vZGUpOwotICAgIGlmICgh
aW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiAhaW50ZXJzZWN0c1Jlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKSkKKyAgICBhdXRvIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24o
KTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi5maXJzdFJhbmdl
KCk7CisgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSB8fCAhaW50ZXJzZWN0cygqc2VsZWN0aW9uUmFu
Z2UsICpub2RlKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKICAgICBpbnQg
c3RhcnQgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLnN0YXJ0KCkp
OwpAQCAtMTY1NiwxMCArMTY0OCwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZQogICAgICAg
ICBhdXRvJiBub2RlID0gKnRoaXMtPm5vZGUoKTsKICAgICAgICAgYXV0byBlbGVtZW50UmFuZ2Ug
PSB0aGlzLT5lbGVtZW50UmFuZ2UoKTsKICAgICAgICAgYXV0byBzdGFydCA9IHZpc2libGVQb3Np
dGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcihub2RlLCByYW5nZS5zdGFydCk7Ci0g
ICAgICAgIGlmICghY3JlYXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSktPmNvbnRhaW5zKHN0YXJ0
KSkKKyAgICAgICAgaWYgKCFpc1BvaW50SW5SYW5nZSgqZWxlbWVudFJhbmdlLCBtYWtlQm91bmRh
cnlQb2ludChzdGFydCkpKQogICAgICAgICAgICAgc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFydCk7CiAgICAgICAgIGF1dG8gZW5kID0gdmlzaWJs
ZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKG5vZGUsIHJhbmdlLnN0YXJ0
ICsgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2UoZWxlbWVudFJh
bmdlKS0+Y29udGFpbnMoZW5kKSkKKyAgICAgICAgaWYgKCFpc1BvaW50SW5SYW5nZSgqZWxlbWVu
dFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChlbmQpKSkKICAgICAgICAgICAgIGVuZCA9IGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAgICAgICAgbV9y
ZW5kZXJlci0+ZnJhbWUoKS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihzdGFydCwgZW5kKSwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25z
KFVzZXJUcmlnZ2VyZWQpKTsKICAgICB9CkBAIC0yMjE2LDcgKzIyMDgsNyBAQCB2b2lkIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29u
c3QgVmlzaWJsZVBvcwogCiAgICAgICAgIGF1dG8gc3RhcnQgPSByYW5nZS5zdGFydDsKICAgICAg
ICAgaWYgKGF1dG8gZWxlbWVudFJhbmdlID0gdGhpcy0+ZWxlbWVudFJhbmdlKCkpIHsKLSAgICAg
ICAgICAgIGlmICghY3JlYXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSktPmNvbnRhaW5zKHN0YXJ0
KSkKKyAgICAgICAgICAgIGlmICghaXNQb2ludEluUmFuZ2UoKmVsZW1lbnRSYW5nZSwgbWFrZUJv
dW5kYXJ5UG9pbnQoc3RhcnQpKSkKICAgICAgICAgICAgICAgICBzdGFydCA9IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
VXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlVXRpbC5jcHAKaW5kZXggOGQ2MjFiZTc4MWU5OTBjMWRjNDA2MGZlZGZiMzkyYjcxNjU3NTRh
OS4uOGY0M2YzODVjMzNhMjQzNzU5ZjEyY2Y3NGQ2MjkxZmVkZTkzZTMwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVV
dGlsLmNwcApAQCAtMTU1LDI1ICsxNTUsOCBAQCBib29sIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVj
dChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uJgogICAg
IGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWxlY3Rpb24uaXNOb25l
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBXZSB3YW50IHRvIGNoZWNrIHRoYXQgYm90aCB0aGUgc2VsZWN0aW9uIGlu
dGVyc2VjdHMgdGhlIG5vZGUKLSAgICAvLyBBTkQgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIG5vdCBq
dXN0ICJ0b3VjaGluZyIgb25lIG9mIHRoZQotICAgIC8vIGJvdW5kYXJpZXMgZm9yIHRoZSBzZWxl
Y3RlZCBub2RlLiBXZSB3YW50IHRvIGNoZWNrIHdoZXRoZXIgdGhlCi0gICAgLy8gbm9kZSBpcyBh
Y3R1YWxseSBpbnNpZGUgdGhlIHJlZ2lvbiwgYXQgbGVhc3QgcGFydGlhbGx5LgotICAgIGF1dG8m
IG5vZGUgPSAqY29yZU9iamVjdC0+bm9kZSgpOwotICAgIGF1dG8qIGxhc3REZXNjZW5kYW50ID0g
bm9kZS5sYXN0RGVzY2VuZGFudCgpOwotICAgIHVuc2lnbmVkIGxhc3RPZmZzZXQgPSBsYXN0RGVz
Y2VuZGFudC0+bGVuZ3RoKCk7Ci0gICAgYXV0byBpbnRlcnNlY3RzUmVzdWx0ID0gY3JlYXRlTGl2
ZVJhbmdlKCpyYW5nZSktPmludGVyc2VjdHNOb2RlKG5vZGUpOwotICAgIHJldHVybiAhaW50ZXJz
ZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKQotICAgICAgICAmJiBpbnRlcnNlY3RzUmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpCi0gICAgICAgICYmIChyYW5nZS0+ZW5kLmNvbnRhaW5lci5wdHIo
KSAhPSAmbm9kZSB8fCByYW5nZS0+ZW5kLm9mZnNldCkKLSAgICAgICAgJiYgKHJhbmdlLT5zdGFy
dC5jb250YWluZXIucHRyKCkgIT0gbGFzdERlc2NlbmRhbnQgfHwgcmFuZ2UtPnN0YXJ0Lm9mZnNl
dCAhPSBsYXN0T2Zmc2V0KTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2Uo
KTsKKyAgICByZXR1cm4gcmFuZ2UgJiYgaW50ZXJzZWN0cygqcmFuZ2UsICpjb3JlT2JqZWN0LT5u
b2RlKCkpOwogfQogCiBBWENvcmVPYmplY3QqIG9iamVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVu
aWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5jZU9iamVjdCwgaW50JiBvZmZzZXQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCmluZGV4IGYwYzhhMzRlZjMzZWJjMDZkZDU3Mjk2MjA4NTBmYTExOTVjYjc1
MDIuLjVhYmMyNGViYjk4MWU1NjRmMDdhZGViOGU1ZmMxMTU4MTMxYzUzNTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCkBAIC05MDUsNyArOTA1LDcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJucyB0
aGUgb3duaW5nIGVsZW1lbnQgaW4gdGhlIHBhcmVudCBkb2N1bWVudC4KICAgICAvLyBSZXR1cm5z
IG51bGxwdHIgaWYgdGhpcyBpcyB0aGUgdG9wIGxldmVsIGRvY3VtZW50LgotICAgIEhUTUxGcmFt
ZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQoKSBjb25zdDsKIAogICAgIC8vIFVz
ZWQgYnkgRE9NIGJpbmRpbmdzOyBubyBkaXJlY3Rpb24ga25vd24uCiAgICAgY29uc3QgU3RyaW5n
JiB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGl0bGUuc3RyaW5nOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IDBmN2Y5OTBlM2Vk
OWE3NWM2MzExMjQwYWVkNTU3YTgxNzA1MWNlZTQuLjhhZTFkOGQ1NWI4ZmU3MGVlZTM5NTdkM2Rk
ZWQ3NTM4Y2QxM2JmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuY3BwCkBAIC02NDksNyArNjQ5LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OmNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZShjb25z
dAogCiB2b2lkIGFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IERvY3VtZW50TWFya2VyOjpEYXRhJiBkYXRhKQog
ewotICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFy
a2VyKHJhbmdlLCB0eXBlLCBkYXRhKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLm1hcmtl
cnMoKS5hZGRNYXJrZXIocmFuZ2UsIHR5cGUsIGRhdGEpOwogfQogCiB2b2lkIGFkZE1hcmtlcihU
ZXh0JiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmIGRhdGEpCkBA
IC02NTksNyArNjU5LDcgQEAgdm9pZCBhZGRNYXJrZXIoVGV4dCYgbm9kZSwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXIKIAogdm9pZCByZW1vdmVN
YXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiB0eXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgcG9s
aWN5KQogewotICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5tYXJrZXJzKCku
cmVtb3ZlTWFya2VycyhyYW5nZSwgdHlwZXMsIHBvbGljeSk7CisgICAgcmFuZ2Uuc3RhcnQuZG9j
dW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhyYW5nZSwgdHlwZXMsIHBvbGljeSk7CiB9
CiAKIFNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShOb2RlJiBub2RlLCBjb25zdCBEb2N1bWVu
dE1hcmtlciYgbWFya2VyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggZTc3YWQ3MjlkMzIwM2IxMDM5
NGQwYmViMDUyZmY1ZDU2YmEyZWRlNS4uODRmZmE3NzNlYmJiMzFmMTdjYTNlOWE5OWIwZjJjNjkx
MTI3ZGE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0yOTcsNyArMjk3LDcgQEAgcHVibGljOgog
ICAgICAgICBTaGFkb3dSb290TW9kZSBtb2RlOwogICAgICAgICBib29sIGRlbGVnYXRlc0ZvY3Vz
IHsgZmFsc2UgfTsKICAgICB9OwotICAgIEV4Y2VwdGlvbk9yPFNoYWRvd1Jvb3QmPiBhdHRhY2hT
aGFkb3coY29uc3QgU2hhZG93Um9vdEluaXQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRp
b25PcjxTaGFkb3dSb290Jj4gYXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0Jik7CiAK
ICAgICBSZWZQdHI8U2hhZG93Um9vdD4gdXNlckFnZW50U2hhZG93Um9vdCgpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIFNoYWRvd1Jvb3QmIGVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAppbmRleCBhNjBjMzY1NzNlOTMyN2E5OTM0ZTQ2MzgwNTg4ZWQ0ODJhMDhj
MjMyLi4wZWNmYTg3MWY5YWRkMzhmMzMyMjM5NjQ5NTZiZjNhOWRhZDU2YWIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCkBAIC0yNjMyLDYgKzI2MzIsNyBAQCBzdGF0aWMgc2l6ZV90IGRlcHRoKGNvbnN0IE5v
ZGUmIG5vZGUpCiAgICAgcmV0dXJuIGRlcHRoOwogfQogCisvLyBGSVhNRTogRE9NIHNwZWNpZmlj
YXRpb24gY2FsbHMgdGhpcyAic2hhZG93LWluY2x1c2l2ZSIgYnV0IHRoYXQncyBub3QgcmVmbGVj
dGVkIGluIHRoaXMgZnVuY3Rpb24ncyBuYW1lLgogc3RydWN0IEFuY2VzdG9yQW5kQ2hpbGRyZW4g
ewogICAgIGNvbnN0IE5vZGUqIGNvbW1vbkFuY2VzdG9yOwogICAgIGNvbnN0IE5vZGUqIGRpc3Rp
bmN0QW5jZXN0b3JBOwpAQCAtMjY2NCw2ICsyNjY1LDcgQEAgc3RhdGljIEFuY2VzdG9yQW5kQ2hp
bGRyZW4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3JBbmRDaGlsZHJlbihjb25zdCBOb2RlJiBhLCBj
b24KICAgICByZXR1cm4geyB4LCBkaXN0aW5jdEFuY2VzdG9yQSwgZGlzdGluY3RBbmNlc3RvckIg
fTsKIH0KIAorLy8gRklYTUU6IERPTSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoaXMgInNoYWRvdy1p
bmNsdXNpdmUiIGJ1dCB0aGF0J3Mgbm90IHJlZmxlY3RlZCBpbiB0aGlzIGZ1bmN0aW9uJ3MgbmFt
ZS4KIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihOb2RlJiBhLCBOb2RlJiBi
KQogewogICAgIHJldHVybiBjb25zdF9jYXN0PE5vZGUqPihjb21tb25JbmNsdXNpdmVBbmNlc3Rv
ckFuZENoaWxkcmVuKGEsIGIpLmNvbW1vbkFuY2VzdG9yKTsKQEAgLTI2NzEsNiArMjY3Myw4IEBA
IFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihOb2RlJiBhLCBOb2RlJiBiKQog
CiBzdGF0aWMgYm9vbCBpc1NpYmxpbmdTdWJzZXF1ZW50KGNvbnN0IE5vZGUmIHNpYmxpbmdBLCBj
b25zdCBOb2RlJiBzaWJsaW5nQikKIHsKKyAgICBBU1NFUlQoc2libGluZ0EucGFyZW50Tm9kZSgp
KTsKKyAgICBBU1NFUlQoc2libGluZ0EucGFyZW50Tm9kZSgpID09IHNpYmxpbmdCLnBhcmVudE5v
ZGUoKSk7CiAgICAgQVNTRVJUKCZzaWJsaW5nQSAhPSAmc2libGluZ0IpOwogICAgIGZvciAoYXV0
byBzaWJsaW5nID0gJnNpYmxpbmdBOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dFNp
YmxpbmcoKSkgewogICAgICAgICBpZiAoc2libGluZyA9PSAmc2libGluZ0IpCkBAIC0yNjkwLDYg
KzI2OTQsMTYgQEAgUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgTm9kZSYgYSwg
Y29uc3QgTm9kZSYgYikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6bGVzczsKICAg
ICBpZiAoIXJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxP
cmRlcmluZzo6Z3JlYXRlcjsKKyAgICBib29sIGlzU2hhZG93Um9vdEEgPSByZXN1bHQuZGlzdGlu
Y3RBbmNlc3RvckEtPmlzU2hhZG93Um9vdCgpOworICAgIGJvb2wgaXNTaGFkb3dSb290QiA9IHJl
c3VsdC5kaXN0aW5jdEFuY2VzdG9yQi0+aXNTaGFkb3dSb290KCk7CisgICAgaWYgKGlzU2hhZG93
Um9vdEEgfHwgaXNTaGFkb3dSb290QikgeworICAgICAgICBpZiAoIWlzU2hhZG93Um9vdEIpCisg
ICAgICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpsZXNzOworICAgICAgICBpZiAoIWlz
U2hhZG93Um9vdEEpCisgICAgICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpncmVhdGVy
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFBhcnRpYWxP
cmRlcmluZzo6dW5vcmRlcmVkOworICAgIH0KICAgICByZXR1cm4gaXNTaWJsaW5nU3Vic2VxdWVu
dCgqcmVzdWx0LmRpc3RpbmN0QW5jZXN0b3JBLCAqcmVzdWx0LmRpc3RpbmN0QW5jZXN0b3JCKSA/
IFBhcnRpYWxPcmRlcmluZzo6bGVzcyA6IFBhcnRpYWxPcmRlcmluZzo6Z3JlYXRlcjsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKaW5kZXggNThlNDA1ZDE1M2JjYjI2NjExMDkxNDY5ZTg2ZjkyZWY3NjdmZjA0ZC4u
NTllY2IxYjJmOWNiNWM3MDBjMWZlODViZTgzMjc2MmUwMTA4ODgyZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBA
IC02OTIsNiArNjkyLDEyIEBAIHByaXZhdGU6CiAgICAgY29uc3RleHByIFBhcnRpYWxPcmRlcmlu
ZyhUeXBlIHR5cGUpIDogbV90eXBlIHsgdHlwZSB9IHsgfQogICAgIFR5cGUgbV90eXBlOwogfTsK
K2NvbnN0ZXhwciBib29sIGlzX2VxKFBhcnRpYWxPcmRlcmluZyk7Citjb25zdGV4cHIgYm9vbCBp
c19sdChQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHByIGJvb2wgaXNfZ3QoUGFydGlhbE9yZGVy
aW5nKTsKK2NvbnN0ZXhwciBib29sIGlzX25lcShQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHBy
IGJvb2wgaXNfbHRlcShQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHByIGJvb2wgaXNfZ3RlcShQ
YXJ0aWFsT3JkZXJpbmcpOwogCiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1l
bnRPcmRlcihjb25zdCBOb2RlJiwgY29uc3QgTm9kZSYpOwogCkBAIC04MjgsNiArODM0LDIxIEBA
IGNvbnN0ZXhwciBib29sIGlzX2d0KFBhcnRpYWxPcmRlcmluZyBvcmRlcmluZykKICAgICByZXR1
cm4gb3JkZXJpbmcubV90eXBlID09IFBhcnRpYWxPcmRlcmluZzo6VHlwZTo6R3JlYXRlcjsKIH0K
IAorY29uc3RleHByIGJvb2wgaXNfbmVxKFBhcnRpYWxPcmRlcmluZyBvcmRlcmluZykKK3sKKyAg
ICByZXR1cm4gaXNfbHQob3JkZXJpbmcpIHx8IGlzX2d0KG9yZGVyaW5nKTsKK30KKworY29uc3Rl
eHByIGJvb2wgaXNfbHRlcShQYXJ0aWFsT3JkZXJpbmcgb3JkZXJpbmcpCit7CisgICAgcmV0dXJu
IGlzX2x0KG9yZGVyaW5nKSB8fCBpc19lcShvcmRlcmluZyk7Cit9CisKK2NvbnN0ZXhwciBib29s
IGlzX2d0ZXEoUGFydGlhbE9yZGVyaW5nIG9yZGVyaW5nKQoreworICAgIHJldHVybiBpc19ndChv
cmRlcmluZykgfHwgaXNfZXEob3JkZXJpbmcpOworfQorCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgTm9kZSYpOwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA4ZjZmZDNiYzhhYmE1YWZhNDU4YzkzNmYyZWUz
Y2M3NDA4NGRiYzJjLi4zNjIyMjc5Y2NhMDNmMTEyYmFjMTc1MDQxODc0NjlmNWJlMThjNDk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5jcHAKQEAgLTY2LDcgKzY2LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIERFRklORV9ERUJVR19PTkxZX0dMT0JBTChXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRl
ciwgcmFuZ2VDb3VudGVyLCAoIlJhbmdlIikpOwogCiBlbnVtIENvbnRlbnRzUHJvY2Vzc0RpcmVj
dGlvbiB7IFByb2Nlc3NDb250ZW50c0ZvcndhcmQsIFByb2Nlc3NDb250ZW50c0JhY2t3YXJkIH07
Ci1lbnVtIGNsYXNzIENvb3JkaW5hdGVTcGFjZSB7IEFic29sdXRlLCBDbGllbnQgfTsKIAogc3Rh
dGljIEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NOb2RlcyhSYW5nZTo6QWN0aW9uVHlwZSwgVmVj
dG9yPFJlZjxOb2RlPj4mLCBOb2RlKiBvbGRDb250YWluZXIsIFJlZlB0cjxOb2RlPiBuZXdDb250
YWluZXIpOwogc3RhdGljIEV4Y2VwdGlvbk9yPFJlZlB0cjxOb2RlPj4gcHJvY2Vzc0NvbnRlbnRz
QmV0d2Vlbk9mZnNldHMoUmFuZ2U6OkFjdGlvblR5cGUsIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiwgUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCk7CkBAIC03NCw4ICs3Myw4IEBAIHN0YXRpYyBFeGNlcHRpb25PcjxSZWZQdHI8
Tm9kZT4+IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKFJhbmdlOjpBY3Rpb25UCiAK
IGlubGluZSBSYW5nZTo6UmFuZ2UoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQpCiAgICAgOiBtX293
bmVyRG9jdW1lbnQob3duZXJEb2N1bWVudCkKLSAgICAsIG1fc3RhcnQoJm93bmVyRG9jdW1lbnQp
Ci0gICAgLCBtX2VuZCgmb3duZXJEb2N1bWVudCkKKyAgICAsIG1fc3RhcnQob3duZXJEb2N1bWVu
dCkKKyAgICAsIG1fZW5kKG93bmVyRG9jdW1lbnQpCiB7CiAjaWZuZGVmIE5ERUJVRwogICAgIHJh
bmdlQ291bnRlci5pbmNyZW1lbnQoKTsKQEAgLTk4LDY1ICs5NywzOSBAQCBSYW5nZTo6flJhbmdl
KCkKICNlbmRpZgogfQogCi12b2lkIFJhbmdlOjpzZXREb2N1bWVudChEb2N1bWVudCYgZG9jdW1l
bnQpCit2b2lkIFJhbmdlOjp1cGRhdGVEb2N1bWVudCgpCiB7Ci0gICAgQVNTRVJUKG1fb3duZXJE
b2N1bWVudC5wdHIoKSAhPSAmZG9jdW1lbnQpOworICAgIGF1dG8mIGRvY3VtZW50ID0gc3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpOworICAgIGlmIChtX293bmVyRG9jdW1lbnQucHRyKCkgPT0g
JmRvY3VtZW50KQorICAgICAgICByZXR1cm47CiAgICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hS
YW5nZSgqdGhpcyk7CiAgICAgbV9vd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7Ci0gICAgbV9zdGFy
dC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKLSAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2Rl
KGRvY3VtZW50KTsKICAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5lcihjb25z
dCBSYW5nZUJvdW5kYXJ5UG9pbnQmIHN0YXJ0LCBjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIGVu
ZCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRTdGFydChSZWY8Tm9kZT4mJiBjb250YWlu
ZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICBOb2RlKiBlbmRSb290Q29udGFpbmVyID0gZW5k
LmNvbnRhaW5lcigpOwotICAgIHdoaWxlIChlbmRSb290Q29udGFpbmVyLT5wYXJlbnROb2RlKCkp
Ci0gICAgICAgIGVuZFJvb3RDb250YWluZXIgPSBlbmRSb290Q29udGFpbmVyLT5wYXJlbnROb2Rl
KCk7Ci0gICAgTm9kZSogc3RhcnRSb290Q29udGFpbmVyID0gc3RhcnQuY29udGFpbmVyKCk7Ci0g
ICAgd2hpbGUgKHN0YXJ0Um9vdENvbnRhaW5lci0+cGFyZW50Tm9kZSgpKQotICAgICAgICBzdGFy
dFJvb3RDb250YWluZXIgPSBzdGFydFJvb3RDb250YWluZXItPnBhcmVudE5vZGUoKTsKLQotICAg
IHJldHVybiBzdGFydFJvb3RDb250YWluZXIgIT0gZW5kUm9vdENvbnRhaW5lciB8fCBSYW5nZTo6
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHN0YXJ0LCBlbmQpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4g
MDsKLX0KLQotRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldFN0YXJ0KFJlZjxOb2RlPiYmIHJl
Zk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKLXsKLSAgICBib29sIGRpZE1vdmVEb2N1bWVudCA9IGZh
bHNlOwotICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7
Ci0gICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUtPmRvY3VtZW50KCkpOwotICAgICAgICBkaWRN
b3ZlRG9jdW1lbnQgPSB0cnVlOwotICAgIH0KLQotICAgIGF1dG8gY2hpbGROb2RlID0gY2hlY2tO
b2RlV09mZnNldChyZWZOb2RlLCBvZmZzZXQpOworICAgIGF1dG8gY2hpbGROb2RlID0gY2hlY2tO
b2RlT2Zmc2V0UGFpcihjb250YWluZXIsIG9mZnNldCk7CiAgICAgaWYgKGNoaWxkTm9kZS5oYXNF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS5yZWxlYXNlRXhjZXB0aW9uKCk7
CiAKLSAgICBtX3N0YXJ0LnNldChXVEZNb3ZlKHJlZk5vZGUpLCBvZmZzZXQsIGNoaWxkTm9kZS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci0KLSAgICBpZiAoZGlkTW92ZURvY3VtZW50IHx8IGNoZWNr
Rm9yRGlmZmVyZW50Um9vdENvbnRhaW5lcihtX3N0YXJ0LCBtX2VuZCkpCi0gICAgICAgIGNvbGxh
cHNlKHRydWUpOwotCisgICAgbV9zdGFydC5zZXQoV1RGTW92ZShjb250YWluZXIpLCBvZmZzZXQs
IGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgaWYgKCFpc19sdGVxKGRvY3Vt
ZW50T3JkZXIobWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCksIG1ha2VCb3VuZGFyeVBvaW50KG1f
ZW5kKSkpKQorICAgICAgICBtX2VuZCA9IG1fc3RhcnQ7CisgICAgdXBkYXRlRG9jdW1lbnQoKTsK
ICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0RW5kKFJl
ZjxOb2RlPiYmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJh
bmdlOjpzZXRFbmQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0g
ICAgYm9vbCBkaWRNb3ZlRG9jdW1lbnQgPSBmYWxzZTsKLSAgICBpZiAoJnJlZk5vZGUtPmRvY3Vt
ZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgewotICAgICAgICBzZXREb2N1bWVudChyZWZOb2Rl
LT5kb2N1bWVudCgpKTsKLSAgICAgICAgZGlkTW92ZURvY3VtZW50ID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBhdXRvIGNoaWxkTm9kZSA9IGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0KTsK
KyAgICBhdXRvIGNoaWxkTm9kZSA9IGNoZWNrTm9kZU9mZnNldFBhaXIoY29udGFpbmVyLCBvZmZz
ZXQpOwogICAgIGlmIChjaGlsZE5vZGUuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBj
aGlsZE5vZGUucmVsZWFzZUV4Y2VwdGlvbigpOwogCi0gICAgbV9lbmQuc2V0KFdURk1vdmUocmVm
Tm9kZSksIG9mZnNldCwgY2hpbGROb2RlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLQotICAgIGlm
IChkaWRNb3ZlRG9jdW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKG1fc3Rh
cnQsIG1fZW5kKSkKLSAgICAgICAgY29sbGFwc2UoZmFsc2UpOwotCisgICAgbV9lbmQuc2V0KFdU
Rk1vdmUoY29udGFpbmVyKSwgb2Zmc2V0LCBjaGlsZE5vZGUucmVsZWFzZVJldHVyblZhbHVlKCkp
OworICAgIGlmICghaXNfbHRlcShkb2N1bWVudE9yZGVyKG1ha2VCb3VuZGFyeVBvaW50KG1fc3Rh
cnQpLCBtYWtlQm91bmRhcnlQb2ludChtX2VuZCkpKSkKKyAgICAgICAgbV9zdGFydCA9IG1fZW5k
OworICAgIHVwZGF0ZURvY3VtZW50KCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTY4LDIz
NyArMTQxLDEwMyBAQCB2b2lkIFJhbmdlOjpjb2xsYXBzZShib29sIHRvU3RhcnQpCiAgICAgICAg
IG1fc3RhcnQgPSBtX2VuZDsKIH0KIAotRXhjZXB0aW9uT3I8Ym9vbD4gUmFuZ2U6OmlzUG9pbnRJ
blJhbmdlKE5vZGUmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK0V4Y2VwdGlvbk9yPGJvb2w+
IFJhbmdlOjppc1BvaW50SW5SYW5nZShOb2RlJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkK
IHsKLSAgICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGNoZWNrTm9kZVJlc3VsdCA9IGNoZWNrTm9k
ZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0KTsKLSAgICBpZiAoY2hlY2tOb2RlUmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKSB7Ci0gICAgICAgIC8vIERPTTQgc3BlYyByZXF1aXJlcyB1cyB0byBjaGVjayB3
aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZlIHRoZSBzYW1lIHJvb3QgZmly
c3QKLSAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZlcnNlIG9yZGVyIHRvIGF2b2lk
IE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0gICAgICAgIGlmICghY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3IocmVmTm9kZSwgc3RhcnRDb250YWluZXIoKSkpCisgICAgaWYgKGF1
dG8gY2hlY2tSZXN1bHQgPSBjaGVja05vZGVPZmZzZXRQYWlyKGNvbnRhaW5lciwgb2Zmc2V0KTsg
Y2hlY2tSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgLy8gRE9NIHNwZWNpZmljYXRp
b24gcmVxdWlyZXMgdGhpcyBjaGVjayBiZSBkb25lIGZpcnN0IGJ1dCBzaW5jZSB0aGVyZSBhcmUg
bm8gc2lkZSBlZmZlY3RzLAorICAgICAgICAvLyB3ZSBjYW4gZG8gaXQgaW4gcmV2ZXJzZSBvcmRl
ciB0byBhdm9pZCBhbiBleHRyYSByb290IG5vZGUgY2hlY2sgaW4gdGhlIGNvbW1vbiBjYXNlLgor
ICAgICAgICBpZiAoJmNvbnRhaW5lci5yb290Tm9kZSgpICE9ICZzdGFydENvbnRhaW5lcigpLnJv
b3ROb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBjaGVj
a05vZGVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gY2hlY2tSZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KLQotICAgIGF1dG8gc3RhcnRDb21wYXJlUmVz
dWx0ID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZzdGFydENvbnRh
aW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpKTsKLSAgICBpZiAoISghc3RhcnRDb21wYXJlUmVzdWx0
Lmhhc0V4Y2VwdGlvbigpICYmIHN0YXJ0Q29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSA+PSAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gZW5kQ29tcGFyZVJlc3Vs
dCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVy
KCksIG1fZW5kLm9mZnNldCgpKTsKLSAgICByZXR1cm4gIWVuZENvbXBhcmVSZXN1bHQuaGFzRXhj
ZXB0aW9uKCkgJiYgZW5kQ29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwOwor
ICAgIHJldHVybiBXZWJDb3JlOjppc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UoKnRoaXMp
LCB7IGNvbnRhaW5lciwgb2Zmc2V0IH0pOwogfQogCi1FeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6
OmNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CitFeGNl
cHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiBjb250YWluZXIsIHVuc2ln
bmVkIG9mZnNldCkgY29uc3QKIHsKLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3Jn
L2VuL2RvY3MvRE9NOnJhbmdlLmNvbXBhcmVQb2ludAotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVy
bnMgLTEsIDAgb3IgMSBkZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRlc2NyaWJlZCBieSB0aGUg
Ci0gICAgLy8gcmVmTm9kZSBub2RlIGFuZCBhbiBvZmZzZXQgd2l0aGluIHRoZSBub2RlIGlzIGJl
Zm9yZSwgc2FtZSBhcywgb3IgYWZ0ZXIgdGhlIHJhbmdlIHJlc3BlY3RpdmVseS4KLSAgICBpZiAo
JnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgV3JvbmdEb2N1bWVudEVycm9yIH07Ci0KLSAgICBhdXRvIGNoZWNrTm9kZVJl
c3VsdCA9IGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0KTsKLSAgICBpZiAoY2hlY2tO
b2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIC8vIERPTTQgc3BlYyByZXF1aXJl
cyB1cyB0byBjaGVjayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZlIHRo
ZSBzYW1lIHJvb3QgZmlyc3QKLSAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZlcnNl
IG9yZGVyIHRvIGF2b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0gICAg
ICAgIGlmICghcmVmTm9kZS5pc0Nvbm5lY3RlZCgpICYmICFjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cihyZWZOb2RlLCBzdGFydENvbnRhaW5lcigpKSkKKyAgICBpZiAoYXV0byBjaGVja1Jlc3VsdCA9
IGNoZWNrTm9kZU9mZnNldFBhaXIoY29udGFpbmVyLCBvZmZzZXQpOyBjaGVja1Jlc3VsdC5oYXNF
eGNlcHRpb24oKSkgeworICAgICAgICAvLyBET00gc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGlz
IGNoZWNrIGJlIGRvbmUgZmlyc3QgYnV0IHNpbmNlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMs
CisgICAgICAgIC8vIHdlIGNhbiBkbyBpdCBpbiByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIGFuIGV4
dHJhIHJvb3Qgbm9kZSBjaGVjayBpbiB0aGUgY29tbW9uIGNhc2UuCisgICAgICAgIGlmICgmY29u
dGFpbmVyLnJvb3ROb2RlKCkgIT0gJnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSkKICAgICAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKLSAgICAgICAg
cmV0dXJuIGNoZWNrTm9kZVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVy
biBjaGVja1Jlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgfQotCi0gICAgLy8gY29tcGFy
ZSB0byBzdGFydCwgYW5kIHBvaW50IGNvbWVzIGJlZm9yZQotICAgIGF1dG8gc3RhcnRDb21wYXJl
UmVzdWx0ID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZzdGFydENv
bnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpKTsKLSAgICBpZiAoc3RhcnRDb21wYXJlUmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gc3RhcnRDb21wYXJlUmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKTsKLSAgICBpZiAoc3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpIDwgMCkKKyAgICBhdXRvIG9yZGVyaW5nID0gZG9jdW1lbnRPcmRlcih7IGNvbnRhaW5l
ciwgb2Zmc2V0IH0sIG1ha2VTaW1wbGVSYW5nZSgqdGhpcykpOworICAgIGlmIChpc19sdChvcmRl
cmluZykpCiAgICAgICAgIHJldHVybiAtMTsKLQotICAgIC8vIGNvbXBhcmUgdG8gZW5kLCBhbmQg
cG9pbnQgY29tZXMgYWZ0ZXIKLSAgICBhdXRvIGVuZENvbXBhcmVSZXN1bHQgPSBjb21wYXJlQm91
bmRhcnlQb2ludHMoJnJlZk5vZGUsIG9mZnNldCwgJmVuZENvbnRhaW5lcigpLCBtX2VuZC5vZmZz
ZXQoKSk7Ci0gICAgaWYgKGVuZENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBlbmRDb21wYXJlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBpZiAoZW5k
Q29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+IDApCisgICAgaWYgKGlzX2VxKG9y
ZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGlzX2d0KG9yZGVyaW5nKSkKICAg
ICAgICAgcmV0dXJuIDE7Ci0KLSAgICAvLyBwb2ludCBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoaXMg
cmFuZ2UsIG9yIG9uIHRoZSBib3VuZGFyeSBwb2ludHMKLSAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gRXhjZXB0aW9uIHsgV3JvbmdEb2N1bWVudEVycm9yIH07CiB9CiAKLUV4Y2VwdGlvbk9yPFJh
bmdlOjpDb21wYXJlUmVzdWx0cz4gUmFuZ2U6OmNvbXBhcmVOb2RlKE5vZGUmIHJlZk5vZGUpIGNv
bnN0CitFeGNlcHRpb25PcjxSYW5nZTo6Q29tcGFyZVJlc3VsdHM+IFJhbmdlOjpjb21wYXJlTm9k
ZShOb2RlJiBub2RlKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBUaGlzIGRlcHJlY2F0ZWQgZnVu
Y3Rpb24gc2hvdWxkIGJlIHJlbW92ZWQuCisgICAgLy8gV2Ugb3JpZ2luYWxseSBhZGRlZCBpdCBm
b3IgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIEZpcmVmb3guCisgICAgLy8gUmVjZW50IHZlcnNpb25z
IG9mIEZpcmVmb3ggaGF2ZSByZW1vdmVkIGl0LgorCiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5t
b3ppbGxhLm9yZy9lbi9kb2NzL0RPTTpyYW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRoaXMgbWV0
aG9kIHJldHVybnMgMCwgMSwgMiwgb3IgMyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBiZWZvcmUs
IGFmdGVyLAotICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5zaWRlIHRo
ZSByYW5nZSwgcmVzcGVjdGl2ZWx5Ci0KLSAgICBpZiAoIXJlZk5vZGUuaXNDb25uZWN0ZWQoKSkg
ewotICAgICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciB0aGlz
IGNhc2U7IGl0IHJldHVybnMgMC4KLSAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOwotICAgIH0K
KyAgICAvLyBiZWZvcmUgYW5kIGFmdGVyKHN1cnJvdW5kcyksIG9yIGluc2lkZSB0aGUgcmFuZ2Us
IHJlc3BlY3RpdmVseS4KIAotICAgIGlmICgmcmVmTm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRv
Y3VtZW50KCkpIHsKLSAgICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlv
biBmb3IgdGhpcyBjYXNlOyBpdCByZXR1cm5zIDAuCisgICAgaWYgKCFub2RlLmlzQ29ubmVjdGVk
KCkgfHwgJm5vZGUuZG9jdW1lbnQoKSAhPSBtX293bmVyRG9jdW1lbnQucHRyKCkpIHsKKyAgICAg
ICAgLy8gTWF0Y2ggaGlzdG9yaWNhbCBGaXJlZm94IGJlaGF2aW9yLgogICAgICAgICByZXR1cm4g
Tk9ERV9CRUZPUkU7CiAgICAgfQogCi0gICAgYXV0byogcGFyZW50Tm9kZSA9IHJlZk5vZGUucGFy
ZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50Tm9kZSkgewotICAgICAgICAvLyBJZiB0aGUgbm9k
ZSBpcyB0aGUgdG9wIG9mIHRoZSB0cmVlIHdlIHNob3VsZCByZXR1cm4gTk9ERV9CRUZPUkVfQU5E
X0FGVEVSLAotICAgICAgICAvLyBidXQgd2UgdGhyb3cgdG8gbWF0Y2ggZmlyZWZveCBiZWhhdmlv
ci4KKyAgICBhdXRvIG5vZGVSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUobm9kZSk7Cisg
ICAgaWYgKCFub2RlUmFuZ2UpIHsKKyAgICAgICAgLy8gTWF0Y2ggaGlzdG9yaWNhbCBGaXJlZm94
IGJlaGF2aW9yLgogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9Owog
ICAgIH0KLSAgICBhdXRvIG5vZGVJbmRleCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwot
Ci0gICAgYXV0byBub2RlU3RhcnRDb21wYXJlUmVzdWx0ID0gY29tcGFyZVBvaW50KCpwYXJlbnRO
b2RlLCBub2RlSW5kZXgpOwotICAgIGlmIChub2RlU3RhcnRDb21wYXJlUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKQotICAgICAgICByZXR1cm4gbm9kZVN0YXJ0Q29tcGFyZVJlc3VsdC5yZWxlYXNlRXhj
ZXB0aW9uKCk7Ci0gICAgYXV0byBub2RlRW5kQ29tcGFyZVJlc3VsdCA9IGNvbXBhcmVQb2ludCgq
cGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSk7Ci0gICAgaWYgKG5vZGVFbmRDb21wYXJlUmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gbm9kZUVuZENvbXBhcmVSZXN1bHQucmVs
ZWFzZUV4Y2VwdGlvbigpOwotCi0gICAgYm9vbCBub2RlU3RhcnRzQmVmb3JlUmFuZ2UgPSBub2Rl
U3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMDsKLSAgICBib29sIG5v
ZGVFbmRzQWZ0ZXJSYW5nZSA9IG5vZGVFbmRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpID4gMDsKLQotICAgIHJldHVybiBub2RlU3RhcnRzQmVmb3JlUmFuZ2UKLSAgICAgICAgPyAo
bm9kZUVuZHNBZnRlclJhbmdlID8gTk9ERV9CRUZPUkVfQU5EX0FGVEVSIDogTk9ERV9CRUZPUkUp
Ci0gICAgICAgIDogKG5vZGVFbmRzQWZ0ZXJSYW5nZSA/IE5PREVfQUZURVIgOiBOT0RFX0lOU0lE
RSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTm9kZSogdG9wKE5vZGUmIG5vZGUpCi17Ci0gICAgYXV0
byogdG9wID0gJm5vZGU7Ci0gICAgd2hpbGUgKGF1dG8qIHBhcmVudCA9IHRvcC0+cGFyZW50Tm9k
ZSgpKQotICAgICAgICB0b3AgPSBwYXJlbnQ7Ci0gICAgcmV0dXJuIHRvcDsKLX0KLQotRXhjZXB0
aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoQ29tcGFyZUhvdyBob3cs
IGNvbnN0IFJhbmdlJiBzb3VyY2VSYW5nZSkgY29uc3QKLXsKLSAgICBhdXRvKiB0aGlzQ29udGFp
bmVyID0gY29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICBhdXRvKiBzb3VyY2VDb250YWlu
ZXIgPSBzb3VyY2VSYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwotICAgIGlmICghdGhp
c0NvbnRhaW5lciB8fCAhc291cmNlQ29udGFpbmVyIHx8ICZ0aGlzQ29udGFpbmVyLT5kb2N1bWVu
dCgpICE9ICZzb3VyY2VDb250YWluZXItPmRvY3VtZW50KCkgfHwgdG9wKCp0aGlzQ29udGFpbmVy
KSAhPSB0b3AoKnNvdXJjZUNvbnRhaW5lcikpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBX
cm9uZ0RvY3VtZW50RXJyb3IgfTsKLQotICAgIHN3aXRjaCAoaG93KSB7Ci0gICAgY2FzZSBTVEFS
VF9UT19TVEFSVDoKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0
LCBzb3VyY2VSYW5nZS5tX3N0YXJ0KTsKLSAgICBjYXNlIFNUQVJUX1RPX0VORDoKLSAgICAgICAg
cmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2VuZCwgc291cmNlUmFuZ2UubV9zdGFydCk7
Ci0gICAgY2FzZSBFTkRfVE9fRU5EOgotICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9p
bnRzKG1fZW5kLCBzb3VyY2VSYW5nZS5tX2VuZCk7Ci0gICAgY2FzZSBFTkRfVE9fU1RBUlQ6Ci0g
ICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFydCwgc291cmNlUmFuZ2Uu
bV9lbmQpOwotICAgIH0KIAotICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9Owor
ICAgIGF1dG8gc3RhcnRPcmRlcmluZyA9IGRvY3VtZW50T3JkZXIobm9kZVJhbmdlLT5zdGFydCwg
bWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCkpOworICAgIGF1dG8gZW5kT3JkZXJpbmcgPSBkb2N1
bWVudE9yZGVyKG5vZGVSYW5nZS0+ZW5kLCBtYWtlQm91bmRhcnlQb2ludChtX2VuZCkpOworICAg
IGlmIChpc19ndGVxKHN0YXJ0T3JkZXJpbmcpICYmIGlzX2x0ZXEoZW5kT3JkZXJpbmcpKQorICAg
ICAgICByZXR1cm4gTk9ERV9JTlNJREU7CisgICAgaWYgKGlzX2x0ZXEoc3RhcnRPcmRlcmluZykg
JiYgaXNfZ3RlcShlbmRPcmRlcmluZykpCisgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRV9BTkRf
QUZURVI7CisgICAgaWYgKGlzX2x0ZXEoc3RhcnRPcmRlcmluZykpCisgICAgICAgIHJldHVybiBO
T0RFX0JFRk9SRTsKKyAgICBpZiAoaXNfZ3RlcShlbmRPcmRlcmluZykpCisgICAgICAgIHJldHVy
biBOT0RFX0FGVEVSOworICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3Ig
fTsKIH0KIAotRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHNG
b3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9ydCBob3csIGNvbnN0IFJhbmdlJiBzb3VyY2VSYW5nZSkg
Y29uc3QKK0V4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHVu
c2lnbmVkIHNob3J0IGhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlKSBjb25zdAogeworICAg
IGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCogdGhpc1BvaW50OworICAgIGNvbnN0IFJhbmdlQm91
bmRhcnlQb2ludCogb3RoZXJQb2ludDsKICAgICBzd2l0Y2ggKGhvdykgewogICAgIGNhc2UgU1RB
UlRfVE9fU1RBUlQ6CisgICAgICAgIHRoaXNQb2ludCA9ICZtX3N0YXJ0OworICAgICAgICBvdGhl
clBvaW50ID0gJnNvdXJjZVJhbmdlLm1fc3RhcnQ7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U1RBUlRfVE9fRU5EOgorICAgICAgICB0aGlzUG9pbnQgPSAmbV9lbmQ7CisgICAgICAgIG90aGVy
UG9pbnQgPSAmc291cmNlUmFuZ2UubV9zdGFydDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBF
TkRfVE9fRU5EOgorICAgICAgICB0aGlzUG9pbnQgPSAmbV9lbmQ7CisgICAgICAgIG90aGVyUG9p
bnQgPSAmc291cmNlUmFuZ2UubV9lbmQ7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRU5EX1RP
X1NUQVJUOgotICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHN0YXRpY19jYXN0
PENvbXBhcmVIb3c+KGhvdyksIHNvdXJjZVJhbmdlKTsKKyAgICAgICAgdGhpc1BvaW50ID0gJm1f
c3RhcnQ7CisgICAgICAgIG90aGVyUG9pbnQgPSAmc291cmNlUmFuZ2UubV9lbmQ7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBw
b3J0ZWRFcnJvciB9OwogICAgIH0KLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVk
RXJyb3IgfTsKLX0KLQotRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQ
b2ludHMoTm9kZSogY29udGFpbmVyQSwgdW5zaWduZWQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVy
QiwgdW5zaWduZWQgb2Zmc2V0QikKLXsKLSAgICBBU1NFUlQoY29udGFpbmVyQSk7Ci0gICAgQVNT
RVJUKGNvbnRhaW5lckIpOwotCi0gICAgaWYgKCFjb250YWluZXJBKQorICAgIGF1dG8gb3JkZXJp
bmcgPSBkb2N1bWVudE9yZGVyKG1ha2VCb3VuZGFyeVBvaW50KCp0aGlzUG9pbnQpLCBtYWtlQm91
bmRhcnlQb2ludCgqb3RoZXJQb2ludCkpOworICAgIGlmIChpc19sdChvcmRlcmluZykpCiAgICAg
ICAgIHJldHVybiAtMTsKLSAgICBpZiAoIWNvbnRhaW5lckIpCisgICAgaWYgKGlzX2VxKG9yZGVy
aW5nKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGlzX2d0KG9yZGVyaW5nKSkKICAgICAg
ICAgcmV0dXJuIDE7Ci0KLSAgICAvLyBzZWUgRE9NMiB0cmF2ZXJzYWwgJiByYW5nZSBzZWN0aW9u
IDIuNQotCi0gICAgLy8gY2FzZSAxOiBib3RoIHBvaW50cyBoYXZlIHRoZSBzYW1lIGNvbnRhaW5l
cgotICAgIGlmIChjb250YWluZXJBID09IGNvbnRhaW5lckIpIHsKLSAgICAgICAgaWYgKG9mZnNl
dEEgPT0gb2Zmc2V0QikKLSAgICAgICAgICAgIHJldHVybiAwOyAvLyBBIGlzIGVxdWFsIHRvIEIK
LSAgICAgICAgaWYgKG9mZnNldEEgPCBvZmZzZXRCKQotICAgICAgICAgICAgcmV0dXJuIC0xOyAv
LyBBIGlzIGJlZm9yZSBCCi0gICAgICAgIHJldHVybiAxOyAvLyBBIGlzIGFmdGVyIEIKLSAgICB9
Ci0KLSAgICAvLyBjYXNlIDI6IG5vZGUgQyAoY29udGFpbmVyIEIgb3IgYW4gYW5jZXN0b3IpIGlz
IGEgY2hpbGQgbm9kZSBvZiBBCi0gICAgTm9kZSogYyA9IGNvbnRhaW5lckI7Ci0gICAgd2hpbGUg
KGMgJiYgYy0+cGFyZW50Tm9kZSgpICE9IGNvbnRhaW5lckEpCi0gICAgICAgIGMgPSBjLT5wYXJl
bnROb2RlKCk7Ci0gICAgaWYgKGMpIHsKLSAgICAgICAgdW5zaWduZWQgb2Zmc2V0QyA9IDA7Ci0g
ICAgICAgIE5vZGUqIG4gPSBjb250YWluZXJBLT5maXJzdENoaWxkKCk7Ci0gICAgICAgIHdoaWxl
IChuICE9IGMgJiYgb2Zmc2V0QyA8IG9mZnNldEEpIHsKLSAgICAgICAgICAgIG9mZnNldEMrKzsK
LSAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChvZmZzZXRBIDw9IG9mZnNldEMpCi0gICAgICAgICAgICByZXR1cm4gLTE7IC8vIEEgaXMgYmVm
b3JlIEIKLSAgICAgICAgcmV0dXJuIDE7IC8vIEEgaXMgYWZ0ZXIgQgotICAgIH0KLQotICAgIC8v
IGNhc2UgMzogbm9kZSBDIChjb250YWluZXIgQSBvciBhbiBhbmNlc3RvcikgaXMgYSBjaGlsZCBu
b2RlIG9mIEIKLSAgICBjID0gY29udGFpbmVyQTsKLSAgICB3aGlsZSAoYyAmJiBjLT5wYXJlbnRO
b2RlKCkgIT0gY29udGFpbmVyQikKLSAgICAgICAgYyA9IGMtPnBhcmVudE5vZGUoKTsKLSAgICBp
ZiAoYykgewotICAgICAgICB1bnNpZ25lZCBvZmZzZXRDID0gMDsKLSAgICAgICAgTm9kZSogbiA9
IGNvbnRhaW5lckItPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgd2hpbGUgKG4gIT0gYyAmJiBvZmZz
ZXRDIDwgb2Zmc2V0QikgewotICAgICAgICAgICAgb2Zmc2V0QysrOwotICAgICAgICAgICAgbiA9
IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldEMgPCBvZmZz
ZXRCKQotICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBBIGlzIGJlZm9yZSBCCi0gICAgICAgIHJl
dHVybiAxOyAvLyBBIGlzIGFmdGVyIEIKLSAgICB9Ci0KLSAgICAvLyBjYXNlIDQ6IGNvbnRhaW5l
cnMgQSAmIEIgYXJlIHNpYmxpbmdzLCBvciBjaGlsZHJlbiBvZiBzaWJsaW5ncwotICAgIC8vICMj
IyB3ZSBuZWVkIHRvIGRvIGEgdHJhdmVyc2FsIGhlcmUgaW5zdGVhZAotICAgIGF1dG8gY29tbW9u
QW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqY29udGFpbmVyQSwgKmNvbnRhaW5l
ckIpOwotICAgIGlmICghY29tbW9uQW5jZXN0b3IpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKLSAgICBOb2RlKiBjaGlsZEEgPSBjb250YWluZXJBOwot
ICAgIHdoaWxlIChjaGlsZEEgJiYgY2hpbGRBLT5wYXJlbnROb2RlKCkgIT0gY29tbW9uQW5jZXN0
b3IpCi0gICAgICAgIGNoaWxkQSA9IGNoaWxkQS0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghY2hp
bGRBKQotICAgICAgICBjaGlsZEEgPSBjb21tb25BbmNlc3Rvci5nZXQoKTsKLSAgICBOb2RlKiBj
aGlsZEIgPSBjb250YWluZXJCOwotICAgIHdoaWxlIChjaGlsZEIgJiYgY2hpbGRCLT5wYXJlbnRO
b2RlKCkgIT0gY29tbW9uQW5jZXN0b3IpCi0gICAgICAgIGNoaWxkQiA9IGNoaWxkQi0+cGFyZW50
Tm9kZSgpOwotICAgIGlmICghY2hpbGRCKQotICAgICAgICBjaGlsZEIgPSBjb21tb25BbmNlc3Rv
ci5nZXQoKTsKLQotICAgIGlmIChjaGlsZEEgPT0gY2hpbGRCKQotICAgICAgICByZXR1cm4gMDsg
Ly8gQSBpcyBlcXVhbCB0byBCCi0KLSAgICBOb2RlKiBuID0gY29tbW9uQW5jZXN0b3ItPmZpcnN0
Q2hpbGQoKTsKLSAgICB3aGlsZSAobikgewotICAgICAgICBpZiAobiA9PSBjaGlsZEEpCi0gICAg
ICAgICAgICByZXR1cm4gLTE7IC8vIEEgaXMgYmVmb3JlIEIKLSAgICAgICAgaWYgKG4gPT0gY2hp
bGRCKQotICAgICAgICAgICAgcmV0dXJuIDE7IC8vIEEgaXMgYWZ0ZXIgQgotICAgICAgICBuID0g
bi0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyBTaG91bGQgbmV2ZXIgcmVhY2ggdGhp
cyBwb2ludC4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
RXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoY29uc3QgUmFu
Z2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeUEsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91
bmRhcnlCKQotewotICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMoYm91bmRhcnlBLmNv
bnRhaW5lcigpLCBib3VuZGFyeUEub2Zmc2V0KCksIGJvdW5kYXJ5Qi5jb250YWluZXIoKSwgYm91
bmRhcnlCLm9mZnNldCgpKTsKLX0KLQotYm9vbCBSYW5nZTo6Ym91bmRhcnlQb2ludHNWYWxpZCgp
IGNvbnN0Ci17Ci0gICAgYXV0byByZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFy
dCwgbV9lbmQpOwotICAgIHJldHVybiAhcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwOworICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0Rv
Y3VtZW50RXJyb3IgfTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OmRlbGV0ZUNvbnRl
bnRzKCkKQEAgLTQwOSwyNiArMjQ4LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OmRlbGV0
ZUNvbnRlbnRzKCkKICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRpb25Pcjxib29sPiBSYW5n
ZTo6aW50ZXJzZWN0c05vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3QKK2Jvb2wgUmFuZ2U6OmludGVy
c2VjdHNOb2RlKE5vZGUmIG5vZGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZWZOb2RlLmlzQ29ubmVj
dGVkKCkgfHwgJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvKiBwYXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnRO
b2RlKCk7Ci0gICAgaWYgKCFwYXJlbnROb2RlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IHVuc2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwotCi0gICAg
Ly8gSWYgKHBhcmVudE5vZGUsIG5vZGVJbmRleCkgaXMgYmVmb3JlIGVuZCBhbmQgKHBhcmVudE5v
ZGUsIG5vZGVJbmRleCArIDEpIGlzIGFmdGVyIHN0YXJ0LCByZXR1cm4gdHJ1ZS4KLSAgICAvLyBP
dGhlcndpc2UsIHJldHVybiBmYWxzZS4KLSAgICBhdXRvIGNvbXBhcmVFbmRSZXN1bHQgPSBjb21w
YXJlQm91bmRhcnlQb2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4LCBtX2VuZC5jb250YWluZXIo
KSwgbV9lbmQub2Zmc2V0KCkpOwotICAgIGlmIChjb21wYXJlRW5kUmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4gY29tcGFyZUVuZFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7
Ci0gICAgYXV0byBjb21wYXJlU3RhcnRSZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMocGFy
ZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgbV9zdGFydC5jb250YWluZXIoKSwgbV9zdGFydC5vZmZz
ZXQoKSk7Ci0gICAgaWYgKGNvbXBhcmVTdGFydFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAg
ICAgcmV0dXJuIGNvbXBhcmVTdGFydFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0
dXJuIGNvbXBhcmVFbmRSZXN1bHQucmV0dXJuVmFsdWUoKSA9PSAtMSAmJiBjb21wYXJlU3RhcnRS
ZXN1bHQucmV0dXJuVmFsdWUoKSA9PSAxOworICAgIHJldHVybiBpbnRlcnNlY3RzKG1ha2VTaW1w
bGVSYW5nZSgqdGhpcyksIG5vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIE5vZGUqIGhpZ2hlc3RB
bmNlc3RvclVuZGVyQ29tbW9uUm9vdChOb2RlKiBub2RlLCBOb2RlKiBjb21tb25Sb290KQpAQCAt
NDY0LDMyICsyODYsMTEgQEAgc3RhdGljIGlubGluZSBOb2RlKiBjaGlsZE9mQ29tbW9uUm9vdEJl
Zm9yZU9mZnNldChOb2RlKiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnMKICAgICByZXR1cm4gY29u
dGFpbmVyOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxlbmd0aE9mQ29udGVudHNJbk5v
ZGUoTm9kZSYgbm9kZSkKLXsKLSAgICAvLyBUaGlzIHN3aXRjaCBzdGF0ZW1lbnQgbXVzdCBiZSBj
b25zaXN0ZW50IHdpdGggdGhhdCBvZiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNl
dHMuCi0gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKCkpIHsKLSAgICBjYXNlIE5vZGU6OkRPQ1VN
RU5UX1RZUEVfTk9ERToKLSAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKLSAgICBjYXNlIE5vZGU6OkNEQVRB
X1NFQ1RJT05fTk9ERToKLSAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKLSAgICBjYXNlIE5v
ZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENoYXJhY3RlckRhdGE+KG5vZGUpLmxlbmd0aCgpOwotICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9O
T0RFOgotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKLSAgICBjYXNlIE5vZGU6OkRPQ1VN
RU5UX0ZSQUdNRU5UX05PREU6Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxDb250YWluZXJOb2Rl
Pihub2RlKS5jb3VudENoaWxkTm9kZXMoKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50Pj4gUmFuZ2U6OnByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlIGFjdGlvbikKIHsKICAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQ7CiAgICAgaWYgKGFjdGlvbiA9PSBFeHRy
YWN0IHx8IGFjdGlvbiA9PSBDbG9uZSkKLSAgICAgICAgZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdt
ZW50OjpjcmVhdGUob3duZXJEb2N1bWVudCgpKTsKKyAgICAgICAgZnJhZ21lbnQgPSBEb2N1bWVu
dEZyYWdtZW50OjpjcmVhdGUobV9vd25lckRvY3VtZW50KTsKIAogICAgIGlmIChjb2xsYXBzZWQo
KSkKICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwpAQCAtNTA5LDggKzMxMCw4IEBAIEV4Y2VwdGlv
bk9yPFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6OnByb2Nlc3NDb250ZW50cyhBY3Rp
b25UeXBlIGFjdGlvbikKICAgICBSYW5nZUJvdW5kYXJ5UG9pbnQgb3JpZ2luYWxFbmQobV9lbmQp
OwogCiAgICAgLy8gd2hhdCBpcyB0aGUgaGlnaGVzdCBub2RlIHRoYXQgcGFydGlhbGx5IHNlbGVj
dHMgdGhlIHN0YXJ0IC8gZW5kIG9mIHRoZSByYW5nZT8KLSAgICBSZWZQdHI8Tm9kZT4gcGFydGlh
bFN0YXJ0ID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21tb25Sb290KG9yaWdpbmFsU3RhcnQuY29u
dGFpbmVyKCksIGNvbW1vblJvb3QuZ2V0KCkpOwotICAgIFJlZlB0cjxOb2RlPiBwYXJ0aWFsRW5k
ID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21tb25Sb290KG9yaWdpbmFsRW5kLmNvbnRhaW5lcigp
LCBjb21tb25Sb290LmdldCgpKTsKKyAgICBSZWZQdHI8Tm9kZT4gcGFydGlhbFN0YXJ0ID0gaGln
aGVzdEFuY2VzdG9yVW5kZXJDb21tb25Sb290KCZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpLCBj
b21tb25Sb290LmdldCgpKTsKKyAgICBSZWZQdHI8Tm9kZT4gcGFydGlhbEVuZCA9IGhpZ2hlc3RB
bmNlc3RvclVuZGVyQ29tbW9uUm9vdCgmb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIGNvbW1vblJv
b3QuZ2V0KCkpOwogCiAgICAgLy8gU3RhcnQgYW5kIGVuZCBjb250YWluZXJzIGFyZSBkaWZmZXJl
bnQuCiAgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXMgaGVyZToKQEAgLTUzMywy
OCArMzM0LDI4IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6
OnByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlIGFjdGlvbikKICAgICAvLyBhZnRlciBhbnkgRE9N
IG11dGF0aW9uIGV2ZW50LCBhdCB2YXJpb3VzIHN0YWdlcyBiZWxvdy4gU2VlIHdlYmtpdCBidWcg
NjAzNTAuCiAKICAgICBSZWZQdHI8Tm9kZT4gbGVmdENvbnRlbnRzOwotICAgIGlmIChvcmlnaW5h
bFN0YXJ0LmNvbnRhaW5lcigpICE9IGNvbW1vblJvb3QgJiYgY29tbW9uUm9vdC0+Y29udGFpbnMo
b3JpZ2luYWxTdGFydC5jb250YWluZXIoKSkpIHsKLSAgICAgICAgYXV0byBmaXJzdFJlc3VsdCA9
IHByb2Nlc3NDb250ZW50c0JldHdlZW5PZmZzZXRzKGFjdGlvbiwgbnVsbHB0ciwgb3JpZ2luYWxT
dGFydC5jb250YWluZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgbGVuZ3RoT2ZDb250ZW50
c0luTm9kZSgqb3JpZ2luYWxTdGFydC5jb250YWluZXIoKSkpOwotICAgICAgICBhdXRvIHNlY29u
ZFJlc3VsdCA9IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKGFjdGlvbiwgb3JpZ2lu
YWxTdGFydC5jb250YWluZXIoKSwgUHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCwgV1RGTW92ZShmaXJz
dFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0KCkpOworICAgIGlmICgmb3JpZ2luYWxTdGFydC5jb250
YWluZXIoKSAhPSBjb21tb25Sb290ICYmIGNvbW1vblJvb3QtPmNvbnRhaW5zKCZvcmlnaW5hbFN0
YXJ0LmNvbnRhaW5lcigpKSkgeworICAgICAgICBhdXRvIGZpcnN0UmVzdWx0ID0gcHJvY2Vzc0Nv
bnRlbnRzQmV0d2Vlbk9mZnNldHMoYWN0aW9uLCBudWxscHRyLCAmb3JpZ2luYWxTdGFydC5jb250
YWluZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgb3JpZ2luYWxTdGFydC5jb250YWluZXIo
KS5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8gc2Vjb25kUmVzdWx0ID0gcHJvY2Vzc0FuY2VzdG9y
c0FuZFRoZWlyU2libGluZ3MoYWN0aW9uLCAmb3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgUHJv
Y2Vzc0NvbnRlbnRzRm9yd2FyZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0
KCkpOwogICAgICAgICAvLyBGSVhNRTogQSBiaXQgcGVjdWxpYXIgdGhhdCB3ZSBzaWxlbnRseSBp
Z25vcmUgdGhlIGV4Y2VwdGlvbiBoZXJlLCBidXQgd2UgZG8gaGF2ZSBhdCBsZWFzdCBzb21lIHJl
Z3Jlc3Npb24gdGVzdHMgdGhhdCByZWx5IG9uIHRoaXMgYmVoYXZpb3IuCiAgICAgICAgIGlmICgh
c2Vjb25kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAgbGVmdENvbnRlbnRzID0g
c2Vjb25kUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgIH0KIAogICAgIFJlZlB0cjxO
b2RlPiByaWdodENvbnRlbnRzOwotICAgIGlmICgmZW5kQ29udGFpbmVyKCkgIT0gY29tbW9uUm9v
dCAmJiBjb21tb25Sb290LT5jb250YWlucyhvcmlnaW5hbEVuZC5jb250YWluZXIoKSkpIHsKLSAg
ICAgICAgYXV0byBmaXJzdFJlc3VsdCA9IHByb2Nlc3NDb250ZW50c0JldHdlZW5PZmZzZXRzKGFj
dGlvbiwgbnVsbHB0ciwgb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIDAsIG9yaWdpbmFsRW5kLm9m
ZnNldCgpKTsKLSAgICAgICAgYXV0byBzZWNvbmRSZXN1bHQgPSBwcm9jZXNzQW5jZXN0b3JzQW5k
VGhlaXJTaWJsaW5ncyhhY3Rpb24sIG9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBQcm9jZXNzQ29u
dGVudHNCYWNrd2FyZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0KCkpOwor
ICAgIGlmICgmZW5kQ29udGFpbmVyKCkgIT0gY29tbW9uUm9vdCAmJiBjb21tb25Sb290LT5jb250
YWlucygmb3JpZ2luYWxFbmQuY29udGFpbmVyKCkpKSB7CisgICAgICAgIGF1dG8gZmlyc3RSZXN1
bHQgPSBwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cyhhY3Rpb24sIG51bGxwdHIsICZvcmln
aW5hbEVuZC5jb250YWluZXIoKSwgMCwgb3JpZ2luYWxFbmQub2Zmc2V0KCkpOworICAgICAgICBh
dXRvIHNlY29uZFJlc3VsdCA9IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKGFjdGlv
biwgJm9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBQcm9jZXNzQ29udGVudHNCYWNrd2FyZCwgV1RG
TW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0KCkpOwogICAgICAgICAvLyBGSVhNRTog
QSBiaXQgcGVjdWxpYXIgdGhhdCB3ZSBzaWxlbnRseSBpZ25vcmUgdGhlIGV4Y2VwdGlvbiBoZXJl
LCBidXQgd2UgZG8gaGF2ZSBhdCBsZWFzdCBzb21lIHJlZ3Jlc3Npb24gdGVzdHMgdGhhdCByZWx5
IG9uIHRoaXMgYmVoYXZpb3IuCiAgICAgICAgIGlmICghc2Vjb25kUmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmlnaHRDb250ZW50cyA9IHNlY29uZFJlc3VsdC5yZWxlYXNlUmV0
dXJuVmFsdWUoKTsKICAgICB9CiAKICAgICAvLyBkZWxldGUgYWxsIGNoaWxkcmVuIG9mIGNvbW1v
blJvb3QgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBjb250YWluZXIKLSAgICBSZWZQdHI8Tm9k
ZT4gcHJvY2Vzc1N0YXJ0ID0gY2hpbGRPZkNvbW1vblJvb3RCZWZvcmVPZmZzZXQob3JpZ2luYWxT
dGFydC5jb250YWluZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgY29tbW9uUm9vdC5nZXQo
KSk7Ci0gICAgaWYgKHByb2Nlc3NTdGFydCAmJiBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpICE9
IGNvbW1vblJvb3QpIC8vIHByb2Nlc3NTdGFydCBjb250YWlucyBub2RlcyBiZWZvcmUgbV9zdGFy
dC4KKyAgICBSZWZQdHI8Tm9kZT4gcHJvY2Vzc1N0YXJ0ID0gY2hpbGRPZkNvbW1vblJvb3RCZWZv
cmVPZmZzZXQoJm9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCksIG9yaWdpbmFsU3RhcnQub2Zmc2V0
KCksIGNvbW1vblJvb3QuZ2V0KCkpOworICAgIGlmIChwcm9jZXNzU3RhcnQgJiYgJm9yaWdpbmFs
U3RhcnQuY29udGFpbmVyKCkgIT0gY29tbW9uUm9vdCkgLy8gcHJvY2Vzc1N0YXJ0IGNvbnRhaW5z
IG5vZGVzIGJlZm9yZSBtX3N0YXJ0LgogICAgICAgICBwcm9jZXNzU3RhcnQgPSBwcm9jZXNzU3Rh
cnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgUmVmUHRyPE5vZGU+IHByb2Nlc3NFbmQgPSBjaGlsZE9m
Q29tbW9uUm9vdEJlZm9yZU9mZnNldChvcmlnaW5hbEVuZC5jb250YWluZXIoKSwgb3JpZ2luYWxF
bmQub2Zmc2V0KCksIGNvbW1vblJvb3QuZ2V0KCkpOworICAgIFJlZlB0cjxOb2RlPiBwcm9jZXNz
RW5kID0gY2hpbGRPZkNvbW1vblJvb3RCZWZvcmVPZmZzZXQoJm9yaWdpbmFsRW5kLmNvbnRhaW5l
cigpLCBvcmlnaW5hbEVuZC5vZmZzZXQoKSwgY29tbW9uUm9vdC5nZXQoKSk7CiAKICAgICAvLyBD
b2xsYXBzZSB0aGUgcmFuZ2UsIG1ha2luZyBzdXJlIHRoYXQgdGhlIHJlc3VsdCBpcyBub3Qgd2l0
aGluIGEgbm9kZSB0aGF0IHdhcyBwYXJ0aWFsbHkgc2VsZWN0ZWQuCiAgICAgaWYgKGFjdGlvbiA9
PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBEZWxldGUpIHsKQEAgLTYxOSw3ICs0MjAsNiBAQCBzdGF0
aWMgRXhjZXB0aW9uT3I8UmVmUHRyPE5vZGU+PiBwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0
cyhSYW5nZTo6QWN0aW9uVHlwZQogCiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdDsKIAotICAgIC8v
IFRoaXMgc3dpdGNoIHN0YXRlbWVudCBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGF0IG9mIGxl
bmd0aE9mQ29udGVudHNJbk5vZGUuCiAgICAgc3dpdGNoIChjb250YWluZXItPm5vZGVUeXBlKCkp
IHsKICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJ
T05fTk9ERToKQEAgLTg2OCwzMCArNjY4LDE3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpp
bnNlcnROb2RlKFJlZjxOb2RlPiYmIG5vZGUpCiAKIFN0cmluZyBSYW5nZTo6dG9TdHJpbmcoKSBj
b25zdAogeworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpOwogICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgIE5vZGUqIHBhc3RMYXN0ID0gcGFzdExhc3ROb2Rl
KCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3Q7
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBhdXRvIHR5cGUg
PSBub2RlLT5ub2RlVHlwZSgpOwotICAgICAgICBpZiAodHlwZSA9PSBOb2RlOjpURVhUX05PREUg
fHwgdHlwZSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHN0YXJ0ID0gbm9kZSA9PSAmc3RhcnRDb250YWluZXIoKSA/IG1fc3RhcnQub2Zmc2V0KCkg
OiAwVTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IG5vZGUgPT0gJmVuZENvbnRhaW5lcigp
ID8gc3RkOjptYXgoc3RhcnQsIG1fZW5kLm9mZnNldCgpKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3Vic3RyaW5nKGRv
d25jYXN0PENoYXJhY3RlckRhdGE+KCpub2RlKS5kYXRhKCksIHN0YXJ0LCBlbmQgLSBzdGFydCk7
CisgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAg
ICAgIGlmIChpczxUZXh0Pihub2RlKSkgeworICAgICAgICAgICAgYXV0byBvZmZzZXRSYW5nZSA9
IGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShyYW5nZSwgbm9kZSk7CisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZFN1YnN0cmluZyhkb3duY2FzdDxUZXh0Pihub2RlKS5kYXRhKCksIG9mZnNldFJh
bmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5lbmQgLSBvZmZzZXRSYW5nZS5zdGFydCk7CiAgICAgICAg
IH0KICAgICB9Ci0KICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1TdHJpbmcg
UmFuZ2U6OnRleHQoKSBjb25zdAotewotICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIGxheW91dCwg
c2luY2UgcGxhaW5UZXh0IHVzZXMgbGluZSBib3hlcyBpbiB0aGUgcmVuZGVyIHRyZWUuCi0gICAg
Ly8gRklYTUU6IEFzIHdpdGggaW5uZXJUZXh0LCB3ZSdkIGxpa2UgdGhpcyB0byB3b3JrIGV2ZW4g
aWYgdGhlcmUgYXJlIG5vIHJlbmRlciBvYmplY3RzLgotICAgIHN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKLQotICAgIHJldHVybiBwbGFpblRleHQobWFrZVNpbXBs
ZVJhbmdlKCp0aGlzKSk7Ci19Ci0KIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9ET00tUGFyc2lu
Zy8jd2lkbC1SYW5nZS1jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQtRG9jdW1lbnRGcmFnbWVudC1E
T01TdHJpbmctZnJhZ21lbnQKIEV4Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gUmFu
Z2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCkKIHsKQEAg
LTkwOCwxMiArNjk1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5n
ZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gV2Vi
Q29yZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCplbGVtZW50LCBtYXJrdXAsIEFsbG93U2Ny
aXB0aW5nQ29udGVudEFuZERvTm90TWFya0FscmVhZHlTdGFydGVkKTsKIH0KIAotdm9pZCBSYW5n
ZTo6ZGV0YWNoKCkKLXsKLSAgICAvLyBUaGlzIGlzIG5vdyBhIG5vLW9wIGFzIHBlciB0aGUgRE9N
IHNwZWNpZmljYXRpb24uCi19Ci0KLUV4Y2VwdGlvbk9yPE5vZGUqPiBSYW5nZTo6Y2hlY2tOb2Rl
V09mZnNldChOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CitFeGNlcHRpb25PcjxO
b2RlKj4gUmFuZ2U6OmNoZWNrTm9kZU9mZnNldFBhaXIoTm9kZSYgbm9kZSwgdW5zaWduZWQgb2Zm
c2V0KSBjb25zdAogewogICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgpAQCAtOTQzLDU5ICs3MjUsNTUgQEAgRXhjZXB0
aW9uT3I8Tm9kZSo+IFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUmIG5vZGUsIHVuc2lnbmVk
IG9mZnNldCkgY29uc3QKIAogUmVmPFJhbmdlPiBSYW5nZTo6Y2xvbmVSYW5nZSgpIGNvbnN0CiB7
Ci0gICAgYXV0byByZXN1bHQgPSBjcmVhdGUob3duZXJEb2N1bWVudCgpKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGNyZWF0ZShtX293bmVyRG9jdW1lbnQpOwogICAgIHJlc3VsdC0+c2V0U3RhcnQoc3Rh
cnRDb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSk7CiAgICAgcmVzdWx0LT5zZXRFbmQoZW5k
Q29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1F
eGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlJiByZWZOb2RlKQorRXhj
ZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoTm9kZSYgbm9kZSkKIHsKLSAgICBp
ZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKQorICAgIGF1dG8gcGFyZW50ID0gbm9kZS5wYXJlbnRO
b2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkTm9kZVR5cGVFcnJvciB9OwotICAgIHJldHVybiBzZXRTdGFydCgqcmVmTm9kZS5wYXJlbnRO
b2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSk7CisgICAgcmV0dXJuIHNldFN0
YXJ0KCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSk7CiB9CiAKLUV4Y2VwdGlv
bk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmRCZWZvcmUoTm9kZSYgcmVmTm9kZSkKK0V4Y2VwdGlvbk9y
PHZvaWQ+IFJhbmdlOjpzZXRFbmRCZWZvcmUoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIXJlZk5v
ZGUucGFyZW50Tm9kZSgpKQorICAgIGF1dG8gcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCk7Cisg
ICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5
cGVFcnJvciB9OwotICAgIHJldHVybiBzZXRFbmQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCByZWZO
b2RlLmNvbXB1dGVOb2RlSW5kZXgoKSk7CisgICAgcmV0dXJuIHNldEVuZCgqcGFyZW50LCBub2Rl
LmNvbXB1dGVOb2RlSW5kZXgoKSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRF
bmRBZnRlcihOb2RlJiByZWZOb2RlKQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldEVuZEFm
dGVyKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkKKyAgICBh
dXRvIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpOworICAgIGlmICghcGFyZW50KQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKLSAgICByZXR1cm4g
c2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCkg
KyAxKTsKKyAgICByZXR1cm4gc2V0RW5kKCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRleCgp
ICsgMSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUmIHJl
Zk5vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2VsZWN0Tm9kZShOb2RlJiBub2RlKQog
ewotICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQgPSBub2Rl
LnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWROb2RlVHlwZUVycm9yIH07Ci0KLSAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAh
PSAmcmVmTm9kZS5kb2N1bWVudCgpKQotICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLmRvY3Vt
ZW50KCkpOwotCi0gICAgdW5zaWduZWQgaW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgo
KTsKLSAgICBhdXRvIHJlc3VsdCA9IHNldFN0YXJ0KCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgaW5k
ZXgpOworICAgIHVuc2lnbmVkIGluZGV4ID0gbm9kZS5jb21wdXRlTm9kZUluZGV4KCk7CisgICAg
YXV0byByZXN1bHQgPSBzZXRTdGFydCgqcGFyZW50LCBpbmRleCk7CiAgICAgaWYgKHJlc3VsdC5o
YXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7
Ci0gICAgcmV0dXJuIHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIGluZGV4ICsgMSk7Cisg
ICAgcmV0dXJuIHNldEVuZCgqcGFyZW50LCBpbmRleCArIDEpOwogfQogCi1FeGNlcHRpb25Pcjx2
b2lkPiBSYW5nZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmIHJlZk5vZGUpCitFeGNlcHRpb25P
cjx2b2lkPiBSYW5nZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYg
KHJlZk5vZGUuaXNEb2N1bWVudFR5cGVOb2RlKCkpCisgICAgaWYgKG5vZGUuaXNEb2N1bWVudFR5
cGVOb2RlKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJv
ciB9OwogCi0gICAgaWYgKCZvd25lckRvY3VtZW50KCkgIT0gJnJlZk5vZGUuZG9jdW1lbnQoKSkK
LSAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9kZS5kb2N1bWVudCgpKTsKLQotICAgIG1fc3RhcnQu
c2V0VG9TdGFydE9mTm9kZShyZWZOb2RlKTsKLSAgICBtX2VuZC5zZXRUb0VuZE9mTm9kZShyZWZO
b2RlKTsKLQorICAgIG1fc3RhcnQuc2V0VG9CZWZvcmVDb250ZW50cyhub2RlKTsKKyAgICBtX2Vu
ZC5zZXRUb0FmdGVyQ29udGVudHMobm9kZSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTA1
MiwzMSArODMwLDEyIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzdXJyb3VuZENvbnRlbnRz
KE5vZGUmIG5ld1BhcmVudCkKICAgICByZXR1cm4gc2VsZWN0Tm9kZShuZXdQYXJlbnQpOwogfQog
Ci1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnRCZWZvcmUoTm9kZSYgcmVmTm9kZSkK
K0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlJiBub2RlKQogewot
ICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBh
cmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWROb2RlVHlwZUVycm9yIH07Ci0gICAgcmV0dXJuIHNldFN0YXJ0KCpyZWZOb2RlLnBh
cmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCkpOwotfQotCi1Ob2RlKiBSYW5n
ZTo6Zmlyc3ROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoc3RhcnRDb250YWluZXIoKS5pc0NoYXJh
Y3RlckRhdGFOb2RlKCkpCi0gICAgICAgIHJldHVybiAmc3RhcnRDb250YWluZXIoKTsKLSAgICBp
ZiAoTm9kZSogY2hpbGQgPSBzdGFydENvbnRhaW5lcigpLnRyYXZlcnNlVG9DaGlsZEF0KG1fc3Rh
cnQub2Zmc2V0KCkpKQotICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgaWYgKCFtX3N0YXJ0Lm9m
ZnNldCgpKQotICAgICAgICByZXR1cm4gJnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgcmV0dXJuIE5v
ZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHN0YXJ0Q29udGFpbmVyKCkpOwotfQot
Ci1Ob2RlKiBSYW5nZTo6cGFzdExhc3ROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoZW5kQ29udGFp
bmVyKCkuaXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNh
bDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oZW5kQ29udGFpbmVyKCkpOwotICAgIGlmIChOb2RlKiBj
aGlsZCA9IGVuZENvbnRhaW5lcigpLnRyYXZlcnNlVG9DaGlsZEF0KG1fZW5kLm9mZnNldCgpKSkK
LSAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tp
cHBpbmdDaGlsZHJlbihlbmRDb250YWluZXIoKSk7CisgICAgcmV0dXJuIHNldFN0YXJ0KCpwYXJl
bnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpKTsKIH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVH
R0lORykKQEAgLTExMDEsMTI0ICs4NjAsNDQgQEAgdm9pZCBSYW5nZTo6Zm9ybWF0Rm9yRGVidWdn
ZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB9CiAjZW5kaWYKIAotYm9v
bCBSYW5nZTo6Y29udGFpbnMoY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAotewotICAgIGlmIChj
b21tb25BbmNlc3RvckNvbnRhaW5lcigpLT5kb2N1bWVudCgpICE9IG90aGVyLmNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKCktPmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8gc3RhcnRUb1N0YXJ0ID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9U
T19TVEFSVCwgb3RoZXIpOwotICAgIGlmIChzdGFydFRvU3RhcnQuaGFzRXhjZXB0aW9uKCkgfHwg
c3RhcnRUb1N0YXJ0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBlbmRUb0VuZCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6
RU5EX1RPX0VORCwgb3RoZXIpOwotICAgIHJldHVybiAhZW5kVG9FbmQuaGFzRXhjZXB0aW9uKCkg
JiYgZW5kVG9FbmQucmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMDsKLX0KLQotYm9vbCBSYW5nZTo6
Y29udGFpbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBh
dXRvIHBvc2l0aW9uUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwotICAgIGlmICgh
cG9zaXRpb25SYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb250YWlu
cyhjcmVhdGVMaXZlUmFuZ2UoKnBvc2l0aW9uUmFuZ2UpKTsKLX0KLQotYm9vbCBhcmVSYW5nZXNF
cXVhbChjb25zdCBSYW5nZSogYSwgY29uc3QgUmFuZ2UqIGIpCi17Ci0gICAgaWYgKGEgPT0gYikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFhIHx8ICFiKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuICZhLT5zdGFydENvbnRhaW5lcigpID09ICZiLT5zdGFydENvbnRh
aW5lcigpICYmIGEtPnN0YXJ0T2Zmc2V0KCkgPT0gYi0+c3RhcnRPZmZzZXQoKSAmJiAmYS0+ZW5k
Q29udGFpbmVyKCkgPT0gJmItPmVuZENvbnRhaW5lcigpICYmIGEtPmVuZE9mZnNldCgpID09IGIt
PmVuZE9mZnNldCgpOwotfQotCi1ib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2UqIGEsIGNv
bnN0IFJhbmdlKiBiKQotewotICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGEgPT0gYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIWNv
bm5lY3RlZEluU2FtZVRyZWVTY29wZShhLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpLCBiLT5j
b21tb25BbmNlc3RvckNvbnRhaW5lcigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
c2hvcnQgc3RhcnRUb1N0YXJ0ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFS
VF9UT19TVEFSVCwgKmIpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgIHNob3J0IGVuZFRvRW5k
ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqYikucmVsZWFz
ZVJldHVyblZhbHVlKCk7Ci0KLSAgICAvLyBGaXJzdCByYW5nZSBjb250YWlucyB0aGUgc2Vjb25k
IHJhbmdlLgotICAgIGlmIChzdGFydFRvU3RhcnQgPD0gMCAmJiBlbmRUb0VuZCA+PSAwKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEVuZCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUg
c2Vjb25kIHJhbmdlLgotICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNU
QVJUX1RPX0VORCwgKmIpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID49IDAgJiYgZW5kVG9FbmQgPD0g
MCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBTdGFydCBvZiBmaXJzdCByYW5nZSBp
cyBpbnNpZGUgc2Vjb25kIHJhbmdlLgotICAgIGlmIChzdGFydFRvU3RhcnQgPj0gMCAmJiBhLT5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKmIpLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpIDw9IDApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKFJh
bmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsK
LSAgICBpZiAoIWJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJmNvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuOwot
ICAgIGJvdW5kYXJ5LmludmFsaWRhdGVPZmZzZXQoKTsKKyAgICBpZiAoYm91bmRhcnkuY2hpbGRC
ZWZvcmUoKSAmJiAmYm91bmRhcnkuY29udGFpbmVyKCkgPT0gJmNvbnRhaW5lcikKKyAgICAgICAg
Ym91bmRhcnkuaW52YWxpZGF0ZU9mZnNldCgpOwogfQogCiB2b2lkIFJhbmdlOjpub2RlQ2hpbGRy
ZW5DaGFuZ2VkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKLSAgICBBU1NFUlQoJmNvbnRh
aW5lci5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmY29udGFp
bmVyLmRvY3VtZW50KCkgPT0gbV9vd25lckRvY3VtZW50LnB0cigpKTsKICAgICBib3VuZGFyeU5v
ZGVDaGlsZHJlbkNoYW5nZWQobV9zdGFydCwgY29udGFpbmVyKTsKICAgICBib3VuZGFyeU5vZGVD
aGlsZHJlbkNoYW5nZWQobV9lbmQsIGNvbnRhaW5lcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9p
ZCBib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBi
b3VuZGFyeSwgQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQorc3RhdGljIGlubGluZSB2b2lkIGJv
dW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5k
YXJ5LCBDb250YWluZXJOb2RlJiBjb250YWluZXJPZk5vZGVzVG9CZVJlbW92ZWQpCiB7Ci0gICAg
Zm9yIChOb2RlKiBub2RlVG9CZVJlbW92ZWQgPSBjb250YWluZXIuZmlyc3RDaGlsZCgpOyBub2Rl
VG9CZVJlbW92ZWQ7IG5vZGVUb0JlUmVtb3ZlZCA9IG5vZGVUb0JlUmVtb3ZlZC0+bmV4dFNpYmxp
bmcoKSkgewotICAgICAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSBub2RlVG9CZVJl
bW92ZWQpIHsKLSAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29udGFpbmVy
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoTm9kZSog
biA9IGJvdW5kYXJ5LmNvbnRhaW5lcigpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAg
ICAgICAgICBpZiAobiA9PSBub2RlVG9CZVJlbW92ZWQpIHsKLSAgICAgICAgICAgICAgICBib3Vu
ZGFyeS5zZXRUb1N0YXJ0T2ZOb2RlKGNvbnRhaW5lcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChjb250YWluZXJPZk5v
ZGVzVG9CZVJlbW92ZWQuY29udGFpbnMoJmJvdW5kYXJ5LmNvbnRhaW5lcigpKSkKKyAgICAgICAg
Ym91bmRhcnkuc2V0VG9CZWZvcmVDb250ZW50cyhjb250YWluZXJPZk5vZGVzVG9CZVJlbW92ZWQp
OwogfQogCiB2b2lkIFJhbmdlOjpub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5lck5v
ZGUmIGNvbnRhaW5lcikKIHsKLSAgICBBU1NFUlQoJmNvbnRhaW5lci5kb2N1bWVudCgpID09ICZv
d25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmY29udGFpbmVyLmRvY3VtZW50KCkgPT0gbV9v
d25lckRvY3VtZW50LnB0cigpKTsKICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92
ZWQobV9zdGFydCwgY29udGFpbmVyKTsKICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJl
bW92ZWQobV9lbmQsIGNvbnRhaW5lcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFy
eU5vZGVXaWxsQmVSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIG5v
ZGVUb0JlUmVtb3ZlZCkKIHsKLSAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSAmbm9k
ZVRvQmVSZW1vdmVkKSB7CisgICAgaWYgKGJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkgPT0gJm5vZGVU
b0JlUmVtb3ZlZCkKICAgICAgICAgYm91bmRhcnkuY2hpbGRCZWZvcmVXaWxsQmVSZW1vdmVkKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKE5vZGUqIG4gPSBib3VuZGFyeS5j
b250YWluZXIoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAobiA9PSAm
bm9kZVRvQmVSZW1vdmVkKSB7Ci0gICAgICAgICAgICBib3VuZGFyeS5zZXRUb0JlZm9yZUNoaWxk
KG5vZGVUb0JlUmVtb3ZlZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
CisgICAgZWxzZSBpZiAobm9kZVRvQmVSZW1vdmVkLmNvbnRhaW5zKCZib3VuZGFyeS5jb250YWlu
ZXIoKSkpCisgICAgICAgIGJvdW5kYXJ5LnNldFRvQmVmb3JlTm9kZShub2RlVG9CZVJlbW92ZWQp
OwogfQogCiB2b2lkIFJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZChOb2RlJiBub2RlKQogewotICAg
IEFTU0VSVCgmbm9kZS5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOwotICAgIEFTU0VS
VCgmbm9kZSAhPSAmb3duZXJEb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoJm5vZGUuZG9jdW1lbnQo
KSA9PSBtX293bmVyRG9jdW1lbnQucHRyKCkpOworICAgIEFTU0VSVCgmbm9kZSAhPSBtX293bmVy
RG9jdW1lbnQucHRyKCkpOwogICAgIEFTU0VSVChub2RlLnBhcmVudE5vZGUoKSk7CiAgICAgYm91
bmRhcnlOb2RlV2lsbEJlUmVtb3ZlZChtX3N0YXJ0LCBub2RlKTsKICAgICBib3VuZGFyeU5vZGVX
aWxsQmVSZW1vdmVkKG1fZW5kLCBub2RlKTsKQEAgLTEyMjYsNyArOTA1LDcgQEAgdm9pZCBSYW5n
ZTo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSYgbm9kZSkKIAogYm9vbCBSYW5nZTo6cGFyZW50bGVz
c05vZGVNb3ZlZFRvTmV3RG9jdW1lbnRBZmZlY3RzUmFuZ2UoTm9kZSYgbm9kZSkKIHsKLSAgICBy
ZXR1cm4gbm9kZS5jb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTShtX3N0YXJ0LmNvbnRhaW5lcigp
KTsKKyAgICByZXR1cm4gbm9kZS5jb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTSgmbV9zdGFydC5j
b250YWluZXIoKSk7CiB9CiAKIHZvaWQgUmFuZ2U6OnVwZGF0ZVJhbmdlRm9yUGFyZW50bGVzc05v
ZGVNb3ZlZFRvTmV3RG9jdW1lbnQoTm9kZSYgbm9kZSkKQEAgLTEyMzgsNyArOTE3LDcgQEAgdm9p
ZCBSYW5nZTo6dXBkYXRlUmFuZ2VGb3JQYXJlbnRsZXNzTm9kZU1vdmVkVG9OZXdEb2N1bWVudChO
b2RlJiBub2RlKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0SW5zZXJ0ZWQoUmFu
Z2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9ICZ0ZXh0
KQorICAgIGlmICgmYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJnRleHQpCiAgICAgICAgIHJldHVy
bjsKICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAg
IGlmIChvZmZzZXQgPj0gYm91bmRhcnlPZmZzZXQpCkBAIC0xMjQ4LDE0ICs5MjcsMTQgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dEluc2VydGVkKFJhbmdlQm91bmRhcnlQb2ludCYg
Ym91bmRhcnksIE5vZGUmIHRleHQKIAogdm9pZCBSYW5nZTo6dGV4dEluc2VydGVkKE5vZGUmIHRl
eHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEFTU0VSVCgmdGV4
dC5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmdGV4dC5kb2N1
bWVudCgpID09IG1fb3duZXJEb2N1bWVudC5wdHIoKSk7CiAgICAgYm91bmRhcnlUZXh0SW5zZXJ0
ZWQobV9zdGFydCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIGJvdW5kYXJ5VGV4dEluc2Vy
dGVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBib3VuZGFyeVRleHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUm
IHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlmIChib3Vu
ZGFyeS5jb250YWluZXIoKSAhPSAmdGV4dCkKKyAgICBpZiAoJmJvdW5kYXJ5LmNvbnRhaW5lcigp
ICE9ICZ0ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYm91bmRhcnlPZmZzZXQg
PSBib3VuZGFyeS5vZmZzZXQoKTsKICAgICBpZiAob2Zmc2V0ID49IGJvdW5kYXJ5T2Zmc2V0KQpA
QCAtMTI2OCwyMyArOTQ3LDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRSZW1v
dmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQsCiAKIHZvaWQgUmFu
Z2U6OnRleHRSZW1vdmVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQogewotICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkp
OworICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1bWVudC5wdHIoKSk7
CiAgICAgYm91bmRhcnlUZXh0UmVtb3ZlZChtX3N0YXJ0LCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7
CiAgICAgYm91bmRhcnlUZXh0UmVtb3ZlZChtX2VuZCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwog
fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNNZXJnZWQoUmFuZ2VCb3Vu
ZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zm
c2V0KQogewotICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSBvbGROb2RlLm5vZGUoKSkK
KyAgICBpZiAoJmJvdW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUubm9kZSgpKQogICAgICAg
ICBib3VuZGFyeS5zZXQoKm9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSwgYm91bmRh
cnkub2Zmc2V0KCkgKyBvZmZzZXQsIDApOwotICAgIGVsc2UgaWYgKGJvdW5kYXJ5LmNvbnRhaW5l
cigpID09IG9sZE5vZGUubm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8aW50Pihi
b3VuZGFyeS5vZmZzZXQoKSkgPT0gb2xkTm9kZS5pbmRleCgpKQorICAgIGVsc2UgaWYgKCZib3Vu
ZGFyeS5jb250YWluZXIoKSA9PSBvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIGJvdW5k
YXJ5Lm9mZnNldCgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvbGROb2RlLmluZGV4KCkpKQog
ICAgICAgICBib3VuZGFyeS5zZXQoKm9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSwg
b2Zmc2V0LCAwKTsKIH0KIAogdm9pZCBSYW5nZTo6dGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5k
ZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBBU1NFUlQob2xkTm9kZS5ub2Rl
KCkpOwotICAgIEFTU0VSVCgmb2xkTm9kZS5ub2RlKCktPmRvY3VtZW50KCkgPT0gJm93bmVyRG9j
dW1lbnQoKSk7CisgICAgQVNTRVJUKCZvbGROb2RlLm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBtX293
bmVyRG9jdW1lbnQucHRyKCkpOwogICAgIEFTU0VSVChvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9k
ZSgpKTsKICAgICBBU1NFUlQob2xkTm9kZS5ub2RlKCktPmlzVGV4dE5vZGUoKSk7CiAgICAgQVNT
RVJUKG9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CkBAIC0xMjk2LDcgKzk3NSw3
IEBAIHZvaWQgUmFuZ2U6OnRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1
bnNpZ25lZCBvZmZzZXQpCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxp
dChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBUZXh0JiBvbGROb2RlKQogewogICAgIGF1
dG8qIHBhcmVudCA9IG9sZE5vZGUucGFyZW50Tm9kZSgpOwotICAgIGlmIChib3VuZGFyeS5jb250
YWluZXIoKSA9PSAmb2xkTm9kZSkgeworICAgIGlmICgmYm91bmRhcnkuY29udGFpbmVyKCkgPT0g
Jm9sZE5vZGUpIHsKICAgICAgICAgdW5zaWduZWQgc3BsaXRPZmZzZXQgPSBvbGROb2RlLmxlbmd0
aCgpOwogICAgICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgp
OwogICAgICAgICBpZiAoYm91bmRhcnlPZmZzZXQgPiBzcGxpdE9mZnNldCkgewpAQCAtMTMwOSwx
NiArOTg4LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1NwbGl0KFJh
bmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIFRleHQmIG9sCiAgICAgfQogICAgIGlmICghcGFy
ZW50KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IHBh
cmVudCAmJiBib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09ICZvbGROb2RlKSB7CisgICAgaWYgKCZi
b3VuZGFyeS5jb250YWluZXIoKSA9PSBwYXJlbnQgJiYgYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9
PSAmb2xkTm9kZSkgewogICAgICAgICBhdXRvKiBuZXdDaGlsZCA9IG9sZE5vZGUubmV4dFNpYmxp
bmcoKTsKICAgICAgICAgQVNTRVJUKG5ld0NoaWxkKTsKLSAgICAgICAgYm91bmRhcnkuc2V0VG9B
ZnRlckNoaWxkKCpuZXdDaGlsZCk7CisgICAgICAgIGJvdW5kYXJ5LnNldFRvQWZ0ZXJOb2RlKCpu
ZXdDaGlsZCk7CiAgICAgfQogfQogCiB2b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRleHQmIG9s
ZE5vZGUpCiB7Ci0gICAgQVNTRVJUKCZvbGROb2RlLmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1l
bnQoKSk7CisgICAgQVNTRVJUKCZvbGROb2RlLmRvY3VtZW50KCkgPT0gbV9vd25lckRvY3VtZW50
LnB0cigpKTsKICAgICBBU1NFUlQoIW9sZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5vZGUubmV4
dFNpYmxpbmcoKSk7CiAgICAgQVNTRVJUKCFvbGROb2RlLnBhcmVudE5vZGUoKSB8fCBvbGROb2Rl
Lm5leHRTaWJsaW5nKCktPmlzVGV4dE5vZGUoKSk7CiAgICAgYm91bmRhcnlUZXh0Tm9kZXNTcGxp
dChtX3N0YXJ0LCBvbGROb2RlKTsKQEAgLTE0MTMsNyArMTA5Miw3IEBAIFJlZlB0cjxSYW5nZT4g
Y3JlYXRlTGl2ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiAKIHZv
aWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQogewotICAgIGlmIChyYW5n
ZSAmJiByYW5nZS0+Ym91bmRhcnlQb2ludHNWYWxpZCgpKSB7CisgICAgaWYgKHJhbmdlKSB7CiAg
ICAgICAgIHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnNob3dUcmVlQW5kTWFyaygmcmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCksICJTIiwgJnJhbmdlLT5lbmRDb250YWluZXIoKSwgIkUiKTsKICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJzdGFydCBvZmZzZXQ6ICVkLCBlbmQgb2Zmc2V0OiAlZFxuIiwg
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2UuaAppbmRleCA0ZDFjZDRmMTM2NzQ2Y2JmNDQyZmQ2ODlkNjkxOGMzYzVmZDhlOTA0Li4xZWM1
YWVkNGM1MDAwZjdmNWM5MzQxNzViN2U5MjNjY2JiMDg0NGRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAt
MzMsNjEgKzMzLDYwIEBAIGNsYXNzIERPTVJlY3RMaXN0OwogY2xhc3MgRG9jdW1lbnRGcmFnbWVu
dDsKIGNsYXNzIE5vZGVXaXRoSW5kZXg7CiBjbGFzcyBUZXh0OwotY2xhc3MgVmlzaWJsZVBvc2l0
aW9uOwogCiBzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiAKLS8vIEZJWE1FOiBSZW5hbWUgdG8gTGl2ZVJh
bmdlLCB3aGlsZSBsZWF2aW5nIHRoZSBET00tZXhwb3NlZCBuYW1lIGFzIFJhbmdlLgogY2xhc3Mg
UmFuZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxSYW5nZT4gewogcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWY8UmFuZ2U+IGNyZWF0ZShEb2N1bWVudCYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIH5SYW5nZSgpOwogCi0gICAgRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX293bmVyRG9jdW1lbnQ7IH0KLQotICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyKCkg
Y29uc3QgeyBBU1NFUlQobV9zdGFydC5jb250YWluZXIoKSk7IHJldHVybiAqbV9zdGFydC5jb250
YWluZXIoKTsgfQorICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFydC5jb250YWluZXIoKTsgfQogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydC5vZmZzZXQoKTsgfQotICAgIE5vZGUmIGVuZENvbnRhaW5lcigpIGNvbnN0
IHsgQVNTRVJUKG1fZW5kLmNvbnRhaW5lcigpKTsgcmV0dXJuICptX2VuZC5jb250YWluZXIoKTsg
fQorICAgIE5vZGUmIGVuZENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLmNvbnRhaW5l
cigpOyB9CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmQub2Zm
c2V0KCk7IH0KICAgICBib29sIGNvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQgPT0g
bV9lbmQ7IH0KLQogICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyBy
ZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Ioc3RhcnRDb250YWluZXIoKSwgZW5kQ29udGFp
bmVyKCkpLmdldCgpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0
U3RhcnQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpOwotICAgIFdFQkNP
UkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZChSZWY8Tm9kZT4mJiBjb250YWluZXIs
IHVuc2lnbmVkIG9mZnNldCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lk
PiBzZXRTdGFydChSZWY8Tm9kZT4mJiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRFbmQoUmVmPE5vZGU+JiYsIHVuc2lnbmVkIG9mZnNl
dCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnRCZWZvcmUo
Tm9kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0QWZ0
ZXIoTm9kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZEJl
Zm9yZShOb2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RW5k
QWZ0ZXIoTm9kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29sbGFwc2UoYm9vbCB0b1N0
YXJ0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjxib29sPiBpc1BvaW50SW5SYW5n
ZShOb2RlJiByZWZOb2RlLCB1bnNpZ25lZCBvZmZzZXQpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHNob3J0PiBjb21wYXJlUG9pbnQoTm9kZSYgcmVmTm9kZSwgdW5zaWduZWQgb2Zm
c2V0KSBjb25zdDsKLSAgICBlbnVtIENvbXBhcmVSZXN1bHRzIHsgTk9ERV9CRUZPUkUsIE5PREVf
QUZURVIsIE5PREVfQkVGT1JFX0FORF9BRlRFUiwgTk9ERV9JTlNJREUgfTsKLSAgICBXRUJDT1JF
X0VYUE9SVCBFeGNlcHRpb25PcjxDb21wYXJlUmVzdWx0cz4gY29tcGFyZU5vZGUoTm9kZSYgcmVm
Tm9kZSkgY29uc3Q7Ci0gICAgZW51bSBDb21wYXJlSG93IHsgU1RBUlRfVE9fU1RBUlQsIFNUQVJU
X1RPX0VORCwgRU5EX1RPX0VORCwgRU5EX1RPX1NUQVJUIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8c2hvcnQ+IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93LCBjb25z
dCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlv
bk9yPHNob3J0PiBjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9y
dCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0OwotICAgIHN0YXRp
YyBFeGNlcHRpb25PcjxzaG9ydD4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNvbnRhaW5l
ckEsIHVuc2lnbmVkIG9mZnNldEEsIE5vZGUqIGNvbnRhaW5lckIsIHVuc2lnbmVkIG9mZnNldEIp
OwotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxzaG9ydD4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGNv
bnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlBLCBjb25zdCBSYW5nZUJvdW5kYXJ5UG9p
bnQmIGJvdW5kYXJ5Qik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBib3VuZGFyeVBvaW50c1Zh
bGlkKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4gaW50ZXJz
ZWN0c05vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8dm9pZD4gc2VsZWN0Tm9kZShOb2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8dm9pZD4gc2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmKTsKKworICAgIGVudW0gQ29tcGFy
ZUhvdyA6IHVuc2lnbmVkIHNob3J0IHsgU1RBUlRfVE9fU1RBUlQsIFNUQVJUX1RPX0VORCwgRU5E
X1RPX0VORCwgRU5EX1RPX1NUQVJUIH07CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8
c2hvcnQ+IGNvbXBhcmVCb3VuZGFyeVBvaW50cyh1bnNpZ25lZCBzaG9ydCBjb21wYXJlSG93LCBj
b25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0OworCiAgICAgV0VCQ09SRV9FWFBPUlQgRXhj
ZXB0aW9uT3I8dm9pZD4gZGVsZXRlQ29udGVudHMoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNl
cHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVudD4+IGV4dHJhY3RDb250ZW50cygpOwogICAgIFdF
QkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gY2xvbmVDb250
ZW50cygpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IGluc2VydE5vZGUo
UmVmPE5vZGU+JiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0b1N0cmluZygpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHN1cnJvdW5kQ29udGVudHMo
Tm9kZSYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRleHQoKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IGNsb25lUmFuZ2UoKSBjb25zdDsKKyAgICBzdGF0aWMg
dm9pZCBkZXRhY2goKSB7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxE
b2N1bWVudEZyYWdtZW50Pj4gY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYg
aHRtbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4gaXNQb2ludEluUmFu
Z2UoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9u
T3I8c2hvcnQ+IGNvbXBhcmVQb2ludChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGludGVyc2VjdHNOb2RlKE5vZGUmKSBjb25zdDsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZGV0YWNoKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmPFJh
bmdlPiBjbG9uZVJhbmdlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvU3Ry
aW5nKCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRT
dGFydEFmdGVyKE5vZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRFbmRCZWZvcmUoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+
IHNldEVuZEFmdGVyKE5vZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lk
PiBzZWxlY3ROb2RlKE5vZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lk
PiBzZWxlY3ROb2RlQ29udGVudHMoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlv
bk9yPHZvaWQ+IHN1cnJvdW5kQ29udGVudHMoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0QmVmb3JlKE5vZGUmKTsKKyAgICBSZWY8RE9NUmVjdExp
c3Q+IGdldENsaWVudFJlY3RzKCkgY29uc3Q7CisgICAgUmVmPERPTVJlY3Q+IGdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8UmVm
PERvY3VtZW50RnJhZ21lbnQ+PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5n
JiBmcmFnbWVudCk7CisKKyAgICAvLyBFeHBhbmQgcmFuZ2UgdG8gYSB1bml0ICh3b3JkIG9yIHNl
bnRlbmNlIG9yIGJsb2NrIG9yIGRvY3VtZW50KSBib3VuZGFyeS4KKyAgICAvLyBQbGVhc2UgcmVm
ZXIgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NjMyIGNvbW1l
bnQgIzUgZm9yIGRldGFpbHMuCisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4g
ZXhwYW5kKGNvbnN0IFN0cmluZyYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogZmlyc3RO
b2RlKCkgY29uc3Q7CisgICAgZW51bSBDb21wYXJlUmVzdWx0cyA6IHVpbnQ4X3QgeyBOT0RFX0JF
Rk9SRSwgTk9ERV9BRlRFUiwgTk9ERV9CRUZPUkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lERSB9Owor
ICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPENvbXBhcmVSZXN1bHRzPiBjb21wYXJlTm9k
ZShOb2RlJikgY29uc3Q7CiAKICAgICB2b2lkIG5vZGVDaGlsZHJlbkNoYW5nZWQoQ29udGFpbmVy
Tm9kZSYpOwogICAgIHZvaWQgbm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2Rl
Jik7CkBAIC0xMDAsNDAgKzk5LDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIHRleHROb2Rlc01lcmdl
ZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpOwogICAgIHZvaWQgdGV4
dE5vZGVTcGxpdChUZXh0JiBvbGROb2RlKTsKIAotICAgIC8vIEV4cGFuZCByYW5nZSB0byBhIHVu
aXQgKHdvcmQgb3Igc2VudGVuY2Ugb3IgYmxvY2sgb3IgZG9jdW1lbnQpIGJvdW5kYXJ5LgotICAg
IC8vIFBsZWFzZSByZWZlciB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Mjc2MzIgY29tbWVudCAjNSAKLSAgICAvLyBmb3IgZGV0YWlscy4KLSAgICBXRUJDT1JFX0VY
UE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBleHBhbmQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBSZWY8
RE9NUmVjdExpc3Q+IGdldENsaWVudFJlY3RzKCkgY29uc3Q7Ci0gICAgUmVmPERPTVJlY3Q+IGdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0OwotCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5H
KQogICAgIHZvaWQgZm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5n
dGgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNv
bnN0IFJhbmdlJikgY29uc3Q7Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBWaXNpYmxlUG9zaXRp
b24mKSBjb25zdDsKLQotICAgIGVudW0gQWN0aW9uVHlwZSB7IERlbGV0ZSwgRXh0cmFjdCwgQ2xv
bmUgfTsKKyAgICBlbnVtIEFjdGlvblR5cGUgOiB1aW50OF90IHsgRGVsZXRlLCBFeHRyYWN0LCBD
bG9uZSB9OwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFJhbmdlKERvY3VtZW50Jik7CiAKLSAg
ICB2b2lkIHNldERvY3VtZW50KERvY3VtZW50Jik7Ci0gICAgRXhjZXB0aW9uT3I8Tm9kZSo+IGNo
ZWNrTm9kZVdPZmZzZXQoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CisgICAgdm9pZCB1
cGRhdGVEb2N1bWVudCgpOworICAgIEV4Y2VwdGlvbk9yPE5vZGUqPiBjaGVja05vZGVPZmZzZXRQ
YWlyKE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50Pj4gcHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUpOwogCi0gICAg
Tm9kZSogcGFzdExhc3ROb2RlKCkgY29uc3Q7Ci0KICAgICBSZWY8RG9jdW1lbnQ+IG1fb3duZXJE
b2N1bWVudDsKICAgICBSYW5nZUJvdW5kYXJ5UG9pbnQgbV9zdGFydDsKICAgICBSYW5nZUJvdW5k
YXJ5UG9pbnQgbV9lbmQ7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdlc0VxdWFs
KGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgcmFuZ2Vz
T3ZlcmxhcChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7Ci0KIFdFQkNPUkVfRVhQT1JUIFNp
bXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOwogV0VCQ09SRV9FWFBPUlQg
U2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKIFdFQkNPUkVf
RVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2Uq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFuZ2UuaWRsCmluZGV4IDE1NGU4OWM2NmU1N2EyZWJhODM0MDY2NjFiNmE1M2Mz
M2EyNDkwYmEuLmEwNWMxNDM2YzU4YjgzMDIwZTI2MDk5OTdiMzY2YTYxNGY4MDY3YjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmlkbApAQCAtMjUsOSArMjUsOSBAQAogICAgIFtDYWxsV2l0aD1Eb2N1bWVudF0g
Y29uc3RydWN0b3IoKTsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlIHN0YXJ0Q29udGFp
bmVyOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHN0YXJ0T2Zmc2V0OyAvLyBGSVhNRTog
U2hvdWxkIGJlIHVuc2lnbmVkIGxvbmcuCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVk
IGxvbmcgc3RhcnRPZmZzZXQ7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgZW5kQ29udGFp
bmVyOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGVuZE9mZnNldDsgLy8gRklYTUU6IFNo
b3VsZCBiZSB1bnNpZ25lZCBsb25nLgorICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGVuZE9mZnNldDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjb2xsYXBzZWQ7
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgY29tbW9uQW5jZXN0b3JDb250YWluZXI7CiAK
QEAgLTQ1LDcgKzQ1LDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVEFSVF9UT19FTkQg
PSAxOwogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEVORF9UT19FTkQgPSAyOwogICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IEVORF9UT19TVEFSVCA9IDM7Ci0gICAgW01heVRocm93RXhjZXB0aW9u
LCBJbXBsZW1lbnRlZEFzPWNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzXSBzaG9ydCBj
b21wYXJlQm91bmRhcnlQb2ludHModW5zaWduZWQgc2hvcnQgaG93LCBSYW5nZSBzb3VyY2VSYW5n
ZSk7CisgICAgW01heVRocm93RXhjZXB0aW9uXSBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHMo
dW5zaWduZWQgc2hvcnQgaG93LCBSYW5nZSBzb3VyY2VSYW5nZSk7CiAKICAgICBbQ0VSZWFjdGlv
bnMsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIGRlbGV0ZUNvbnRlbnRzKCk7CiAgICAgW0NFUmVh
Y3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBEb2N1bWVudEZyYWdtZW50IGV4
dHJhY3RDb250ZW50cygpOwpAQCAtNTksNyArNTksNyBAQAogICAgIFtNYXlUaHJvd0V4Y2VwdGlv
bl0gYm9vbGVhbiBpc1BvaW50SW5SYW5nZShOb2RlIG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHNob3J0IGNvbXBhcmVQb2ludChOb2RlIG5vZGUs
IHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKIAotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVh
biBpbnRlcnNlY3RzTm9kZShOb2RlIG5vZGUpOworICAgIGJvb2xlYW4gaW50ZXJzZWN0c05vZGUo
Tm9kZSBub2RlKTsKIAogICAgIHN0cmluZ2lmaWVyOwogCkBAIC03MCwxMCArNzAsMTEgQEAKICAg
ICAvLyBFeHRlbnNpb25zIGZyb20gRE9NUGFyc2luZyBhbmQgU2VyaWFsaXphdGlvbiBzcGVjaWZp
Y2F0aW9uIChodHRwczovL3czYy5naXRodWIuaW8vRE9NLVBhcnNpbmcvI2V4dGVuc2lvbnMtdG8t
dGhlLXJhbmdlLWludGVyZmFjZSkuCiAgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlv
biwgTmV3T2JqZWN0XSBEb2N1bWVudEZyYWdtZW50IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChE
T01TdHJpbmcgZnJhZ21lbnQpOwogCi0gICAgLy8gTm9uIHN0YW5kYXJkLgotICAgIFtNYXlUaHJv
d0V4Y2VwdGlvbl0gdm9pZCBleHBhbmQob3B0aW9uYWwgRE9NU3RyaW5nIHVuaXQgPSAiIik7Cisg
ICAgLy8gTm9uLXN0YW5kYXJkIGV4dGVuc2lvbi4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2
ZW50dWFsbHkgZHJvcCB0aGlzIHNpbmNlIG5vIG90aGVyIGJyb3dzZXIgc3VwcG9ydHMgaXQuCisg
ICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIGV4cGFuZChvcHRpb25hbCBET01TdHJpbmcgdW5p
dCk7CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGxpa2VseSBkcm9wIHRoaXMgc2luY2Ugbm8g
b3RoZXIgYnJvd3NlciBzdXBwb3J0cyBpdC4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGxpa2Vs
eSBkcm9wIHRoaXMgc2luY2Ugd2UgYWRkZWQgaXQgZm9yIEZpcmVmb3ggaW50ZXJvcGVyYWJpbGl0
eSwgYnV0IG5vdyBubyBvdGhlciBicm93c2VyIHN1cHBvcnRzIGl0LgogICAgIFtNYXlUaHJvd0V4
Y2VwdGlvbl0gc2hvcnQgY29tcGFyZU5vZGUoTm9kZSBub2RlKTsKICAgICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBOT0RFX0JFRk9SRSA9IDA7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTk9ERV9B
RlRFUiA9IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBv
aW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5kZXggYjI0
NDA5ODQ3OGI3Nzc3ZjA0Y2RmNjhkNjE5MjliZGM4ODQ1NTE0Zi4uZDAwMzQ0ZDlmNjYwNGI5Y2Vk
MGFlZmViOWU3ZThkM2Q3OTg0M2FiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5
UG9pbnQuaApAQCAtMzIsNDMgKzMyLDM5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
UmFuZ2VCb3VuZGFyeVBvaW50IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBSYW5nZUJvdW5kYXJ5
UG9pbnQoTm9kZSogY29udGFpbmVyKTsKKyAgICBleHBsaWNpdCBSYW5nZUJvdW5kYXJ5UG9pbnQo
Tm9kZSYgY29udGFpbmVyKTsKIAotICAgIE5vZGUqIGNvbnRhaW5lcigpIGNvbnN0OworICAgIE5v
ZGUmIGNvbnRhaW5lcigpIGNvbnN0OwogICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0OwogICAg
IE5vZGUqIGNoaWxkQmVmb3JlKCkgY29uc3Q7CiAKLSAgICB2b2lkIGNsZWFyKCk7Ci0KICAgICB2
b2lkIHNldChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCwgTm9kZSogY2hp
bGRCZWZvcmUpOwogICAgIHZvaWQgc2V0T2Zmc2V0KHVuc2lnbmVkKTsKIAotICAgIHZvaWQgc2V0
VG9CZWZvcmVDaGlsZChOb2RlJik7Ci0gICAgdm9pZCBzZXRUb0FmdGVyQ2hpbGQoTm9kZSYpOwot
ICAgIHZvaWQgc2V0VG9TdGFydE9mTm9kZShSZWY8Tm9kZT4mJik7Ci0gICAgdm9pZCBzZXRUb0Vu
ZE9mTm9kZShSZWY8Tm9kZT4mJik7CisgICAgdm9pZCBzZXRUb0JlZm9yZU5vZGUoTm9kZSYpOwor
ICAgIHZvaWQgc2V0VG9BZnRlck5vZGUoTm9kZSYpOworICAgIHZvaWQgc2V0VG9CZWZvcmVDb250
ZW50cyhSZWY8Tm9kZT4mJik7CisgICAgdm9pZCBzZXRUb0FmdGVyQ29udGVudHMoUmVmPE5vZGU+
JiYpOwogCiAgICAgdm9pZCBjaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQoKTsKICAgICB2b2lkIGlu
dmFsaWRhdGVPZmZzZXQoKSBjb25zdDsKLSAgICB2b2lkIGVuc3VyZU9mZnNldElzVmFsaWQoKSBj
b25zdDsKIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV9jb250YWluZXJOb2RlOworICAg
IFJlZjxOb2RlPiBtX2NvbnRhaW5lcjsKICAgICBtdXRhYmxlIE9wdGlvbmFsPHVuc2lnbmVkPiBt
X29mZnNldEluQ29udGFpbmVyIHsgMCB9OwogICAgIFJlZlB0cjxOb2RlPiBtX2NoaWxkQmVmb3Jl
Qm91bmRhcnk7CiB9OwogCiBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50KGNvbnN0IFJh
bmdlQm91bmRhcnlQb2ludCYpOwogCi1pbmxpbmUgUmFuZ2VCb3VuZGFyeVBvaW50OjpSYW5nZUJv
dW5kYXJ5UG9pbnQoTm9kZSogY29udGFpbmVyKQotICAgIDogbV9jb250YWluZXJOb2RlKGNvbnRh
aW5lcikKK2lubGluZSBSYW5nZUJvdW5kYXJ5UG9pbnQ6OlJhbmdlQm91bmRhcnlQb2ludChOb2Rl
JiBjb250YWluZXIpCisgICAgOiBtX2NvbnRhaW5lcihjb250YWluZXIpCiB7Ci0gICAgQVNTRVJU
KG1fY29udGFpbmVyTm9kZSk7CiB9CiAKLWlubGluZSBOb2RlKiBSYW5nZUJvdW5kYXJ5UG9pbnQ6
OmNvbnRhaW5lcigpIGNvbnN0CitpbmxpbmUgTm9kZSYgUmFuZ2VCb3VuZGFyeVBvaW50Ojpjb250
YWluZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbnRhaW5lck5vZGUuZ2V0KCk7CisgICAg
cmV0dXJuIG1fY29udGFpbmVyOwogfQogCiBpbmxpbmUgTm9kZSogUmFuZ2VCb3VuZGFyeVBvaW50
OjpjaGlsZEJlZm9yZSgpIGNvbnN0CkBAIC03Niw3NyArNzIsNjMgQEAgaW5saW5lIE5vZGUqIFJh
bmdlQm91bmRhcnlQb2ludDo6Y2hpbGRCZWZvcmUoKSBjb25zdAogICAgIHJldHVybiBtX2NoaWxk
QmVmb3JlQm91bmRhcnkuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2lu
dDo6ZW5zdXJlT2Zmc2V0SXNWYWxpZCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb2Zmc2V0SW5Db250
YWluZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2NoaWxkQmVmb3JlQm91bmRh
cnkpOwotICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnktPmNv
bXB1dGVOb2RlSW5kZXgoKSArIDE7Ci19Ci0KIGlubGluZSB1bnNpZ25lZCBSYW5nZUJvdW5kYXJ5
UG9pbnQ6Om9mZnNldCgpIGNvbnN0CiB7Ci0gICAgZW5zdXJlT2Zmc2V0SXNWYWxpZCgpOwotICAg
IHJldHVybiBtX29mZnNldEluQ29udGFpbmVyLnZhbHVlKCk7Ci19Ci0KLWlubGluZSB2b2lkIFJh
bmdlQm91bmRhcnlQb2ludDo6Y2xlYXIoKQotewotICAgIG1fY29udGFpbmVyTm9kZSA9IG51bGxw
dHI7Ci0gICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IDA7Ci0gICAgbV9jaGlsZEJlZm9yZUJvdW5k
YXJ5ID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fb2Zmc2V0SW5Db250YWluZXIpIHsKKyAgICAgICAg
QVNTRVJUKG1fY2hpbGRCZWZvcmVCb3VuZGFyeSk7CisgICAgICAgIG1fb2Zmc2V0SW5Db250YWlu
ZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnktPmNvbXB1dGVOb2RlSW5kZXgoKSArIDE7CisgICAg
fQorICAgIHJldHVybiAqbV9vZmZzZXRJbkNvbnRhaW5lcjsKIH0KIAogaW5saW5lIHZvaWQgUmFu
Z2VCb3VuZGFyeVBvaW50OjpzZXQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZz
ZXQsIE5vZGUqIGNoaWxkQmVmb3JlKQogewogICAgIEFTU0VSVChjaGlsZEJlZm9yZSA9PSAob2Zm
c2V0ID8gY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKSA6IDApKTsKLSAg
ICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CisgICAgbV9jb250YWluZXIg
PSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG9mZnNldDsK
ICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBjaGlsZEJlZm9yZTsKIH0KIAogaW5saW5lIHZv
aWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQogewotICAg
IEFTU0VSVChtX2NvbnRhaW5lck5vZGUpOwotICAgIEFTU0VSVChtX2NvbnRhaW5lck5vZGUtPmlz
Q2hhcmFjdGVyRGF0YU5vZGUoKSk7CisgICAgQVNTRVJUKG1fY29udGFpbmVyLT5pc0NoYXJhY3Rl
ckRhdGFOb2RlKCkpOwogICAgIEFTU0VSVChtX29mZnNldEluQ29udGFpbmVyKTsKICAgICBBU1NF
UlQoIW1fY2hpbGRCZWZvcmVCb3VuZGFyeSk7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG9m
ZnNldDsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0JlZm9yZUNo
aWxkKE5vZGUmIGNoaWxkKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0Jl
Zm9yZU5vZGUoTm9kZSYgY2hpbGQpCiB7CiAgICAgQVNTRVJUKGNoaWxkLnBhcmVudE5vZGUoKSk7
CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gY2hpbGQucHJldmlvdXNTaWJsaW5nKCk7Ci0g
ICAgbV9jb250YWluZXJOb2RlID0gY2hpbGQucGFyZW50Tm9kZSgpOwotICAgIG1fb2Zmc2V0SW5D
b250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBPcHRpb25h
bDx1bnNpZ25lZD4oMCk7CisgICAgbV9jb250YWluZXIgPSAqY2hpbGQucGFyZW50Tm9kZSgpOwor
ICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51
bGxvcHQgOiBtYWtlT3B0aW9uYWwoMFUpOwogfQogCi1pbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5
UG9pbnQ6OnNldFRvQWZ0ZXJDaGlsZChOb2RlJiBjaGlsZCkKK2lubGluZSB2b2lkIFJhbmdlQm91
bmRhcnlQb2ludDo6c2V0VG9BZnRlck5vZGUoTm9kZSYgY2hpbGQpCiB7CiAgICAgQVNTRVJUKGNo
aWxkLnBhcmVudE5vZGUoKSk7CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gJmNoaWxkOwot
ICAgIG1fY29udGFpbmVyTm9kZSA9IGNoaWxkLnBhcmVudE5vZGUoKTsKLSAgICBtX29mZnNldElu
Q29udGFpbmVyID0gbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8gV1RGOjpudWxsb3B0IDogT3B0aW9u
YWw8dW5zaWduZWQ+KDApOworICAgIG1fY29udGFpbmVyID0gKmNoaWxkLnBhcmVudE5vZGUoKTsK
KyAgICBtX29mZnNldEluQ29udGFpbmVyID0gbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8gV1RGOjpu
dWxsb3B0IDogbWFrZU9wdGlvbmFsKDBVKTsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFy
eVBvaW50OjpzZXRUb1N0YXJ0T2ZOb2RlKFJlZjxOb2RlPiYmIGNvbnRhaW5lcikKK2lubGluZSB2
b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9CZWZvcmVDb250ZW50cyhSZWY8Tm9kZT4mJiBj
b250YWluZXIpCiB7Ci0gICAgbV9jb250YWluZXJOb2RlID0gV1RGTW92ZShjb250YWluZXIpOwor
ICAgIG1fY29udGFpbmVyID0gV1RGTW92ZShjb250YWluZXIpOwogICAgIG1fb2Zmc2V0SW5Db250
YWluZXIgPSAwOwogICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CiB9CiAKLWlu
bGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9FbmRPZk5vZGUoUmVmPE5vZGU+JiYg
Y29udGFpbmVyKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0FmdGVyQ29u
dGVudHMoUmVmPE5vZGU+JiYgY29udGFpbmVyKQogewotICAgIG1fY29udGFpbmVyTm9kZSA9IFdU
Rk1vdmUoY29udGFpbmVyKTsKLSAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKm1fY29udGFpbmVy
Tm9kZSkpIHsKLSAgICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IGRvd25jYXN0PENoYXJhY3Rl
ckRhdGE+KCptX2NvbnRhaW5lck5vZGUpLmxlbmd0aCgpOworICAgIG1fY29udGFpbmVyID0gV1RG
TW92ZShjb250YWluZXIpOworICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPihtX2NvbnRhaW5lcikp
IHsKKyAgICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IGRvd25jYXN0PENoYXJhY3RlckRhdGE+
KG1fY29udGFpbmVyLmdldCgpKS5sZW5ndGgoKTsKICAgICAgICAgbV9jaGlsZEJlZm9yZUJvdW5k
YXJ5ID0gbnVsbHB0cjsKICAgICB9IGVsc2UgewotICAgICAgICBtX2NoaWxkQmVmb3JlQm91bmRh
cnkgPSBtX2NvbnRhaW5lck5vZGUtPmxhc3RDaGlsZCgpOwotICAgICAgICBtX29mZnNldEluQ29u
dGFpbmVyID0gbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8gV1RGOjpudWxsb3B0IDogT3B0aW9uYWw8
dW5zaWduZWQ+KDApOworICAgICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBtX2NvbnRhaW5l
ci0+bGFzdENoaWxkKCk7CisgICAgICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVm
b3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBtYWtlT3B0aW9uYWwoMFUpOwogICAgIH0KIH0K
IApAQCAtMTY3LDIxICsxNDksMTYgQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50Ojpp
bnZhbGlkYXRlT2Zmc2V0KCkgY29uc3QKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBS
YW5nZUJvdW5kYXJ5UG9pbnQmIGEsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYikKIHsKLSAg
ICBpZiAoYS5jb250YWluZXIoKSAhPSBiLmNvbnRhaW5lcigpKQorICAgIGlmICgmYS5jb250YWlu
ZXIoKSAhPSAmYi5jb250YWluZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChh
LmNoaWxkQmVmb3JlKCkgfHwgYi5jaGlsZEJlZm9yZSgpKSB7Ci0gICAgICAgIGlmIChhLmNoaWxk
QmVmb3JlKCkgIT0gYi5jaGlsZEJlZm9yZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChhLm9mZnNldCgpICE9IGIub2Zmc2V0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAgIGlmIChh
LmNoaWxkQmVmb3JlKCkgfHwgYi5jaGlsZEJlZm9yZSgpKQorICAgICAgICByZXR1cm4gYS5jaGls
ZEJlZm9yZSgpID09IGIuY2hpbGRCZWZvcmUoKTsKKyAgICByZXR1cm4gYS5vZmZzZXQoKSA9PSBi
Lm9mZnNldCgpOwogfQogCiBpbmxpbmUgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludChj
b25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIHBvaW50KQogewotICAgIHJldHVybiB7ICpwb2ludC5j
b250YWluZXIoKSwgcG9pbnQub2Zmc2V0KCkgfTsKKyAgICByZXR1cm4geyBwb2ludC5jb250YWlu
ZXIoKSwgcG9pbnQub2Zmc2V0KCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggYzFiNzQ2OGUxZGUwNzk3ZWI5ZTYyY2I1OTZk
MzRmM2YyOTM3NmZmMS4uZDk4N2Y0MDQxNTViNWZjNTFkODY3ZGEwZmNjZTk3OTkwNGRmYTE0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC0yMDUsNCArMjA1LDY5IEBAIFJlZlB0
cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Up
CiAgICAgcmV0dXJuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNvbnRhaW5l
ciwgcmFuZ2UuZW5kLmNvbnRhaW5lcik7CiB9CiAKK2Jvb2wgaXNQb2ludEluUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sKKyAgICBy
ZXR1cm4gaXNfbHRlcShkb2N1bWVudE9yZGVyKHJhbmdlLnN0YXJ0LCBwb2ludCkpICYmIGlzX2x0
ZXEoZG9jdW1lbnRPcmRlcihwb2ludCwgcmFuZ2UuZW5kKSk7Cit9CisKK2Jvb2wgaXNQb2ludElu
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBv
aW50PiYgcG9pbnQpCit7CisgICAgcmV0dXJuIHBvaW50ICYmIGlzUG9pbnRJblJhbmdlKHJhbmdl
LCAqcG9pbnQpOworfQorCitQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50KQoreworICAgIGlmIChh
dXRvIG9yZGVyID0gZG9jdW1lbnRPcmRlcihyYW5nZS5zdGFydCwgcG9pbnQpOyAhaXNfbHQob3Jk
ZXIpKQorICAgICAgICByZXR1cm4gb3JkZXI7CisgICAgaWYgKGF1dG8gb3JkZXIgPSBkb2N1bWVu
dE9yZGVyKHJhbmdlLmVuZCwgcG9pbnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgICAgICByZXR1cm4g
b3JkZXI7CisgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6ZXF1aXZhbGVudDsKK30KKworUGFy
dGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQsIGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAoYXV0byBvcmRlciA9IGRvY3VtZW50
T3JkZXIocG9pbnQsIHJhbmdlLnN0YXJ0KTsgIWlzX2d0KG9yZGVyKSkKKyAgICAgICAgcmV0dXJu
IG9yZGVyOworICAgIGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRPcmRlcihwb2ludCwgcmFuZ2Uu
ZW5kKTsgIWlzX2x0KG9yZGVyKSkKKyAgICAgICAgcmV0dXJuIG9yZGVyOworICAgIHJldHVybiBQ
YXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7Cit9CisKK2Jvb2wgY29udGFpbnMoY29uc3QgU2lt
cGxlUmFuZ2UmIG91dGVyUmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBpbm5lclJhbmdlKQorewor
ICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIob3V0ZXJSYW5nZS5zdGFydCwgaW5uZXJS
YW5nZS5zdGFydCkpICYmIGlzX2d0ZXEoZG9jdW1lbnRPcmRlcihvdXRlclJhbmdlLmVuZCwgaW5u
ZXJSYW5nZS5lbmQpKTsKK30KKworYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiBh
LCBjb25zdCBTaW1wbGVSYW5nZSYgYikKK3sKKyAgICByZXR1cm4gaXNfbHRlcShkb2N1bWVudE9y
ZGVyKGEuc3RhcnQsIGIuZW5kKSkgJiYgaXNfbHRlcShkb2N1bWVudE9yZGVyKGIuc3RhcnQsIGEu
ZW5kKSk7Cit9CisKKy8vIEZJWE1FOiBOYW1lIHRoaXMgInVuaW9uUmFuZ2UiIGluc3RlYWQ/IFRo
ZSB3b3JkICJ1bmlvbiIgaXMgYSBub3VuIG1vcmUgdGhhbiBhIHZlcmIuIFdvdWxkIGxpa2UgdG8g
Y2FsbCBpdCBqdXN0IHVuaW9uIGlmIGl0IHdhc24ndCBmb3IgdGhlIGNvbmZsaWN0IHdpdGggdGhl
IEMga2V5d29yZC4KK1NpbXBsZVJhbmdlIHVuaW9uUmFuZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiBh
LCBjb25zdCBTaW1wbGVSYW5nZSYgYikKK3sKKyAgICBhdXRvJiBzdGFydCA9IGlzX2x0ZXEoZG9j
dW1lbnRPcmRlcihhLnN0YXJ0LCBiLnN0YXJ0KSkgPyBhIDogYjsKKyAgICBhdXRvJiBlbmQgPSBp
c19sdGVxKGRvY3VtZW50T3JkZXIoYS5lbmQsIGIuZW5kKSkgPyBiIDogYTsKKyAgICByZXR1cm4g
eyBzdGFydC5zdGFydCwgZW5kLmVuZCB9OworfQorCitib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgYSBtb3JlIGVmZmljaWVudCBhbGdvcml0aG0gdGhhdCBhdm9pZHMgYWx3YXlzIGNvbXB1dGlu
ZyB0aGUgbm9kZSBpbmRleC4KKyAgICAvLyBGSVhNRTogRG9lcyB0aGlzIGNvbnN0X2Nhc3QgcG9p
bnQgdG8gYSBkZXNpZ24gcHJvYmxlbT8KKyAgICBhdXRvIG5vZGVSYW5nZSA9IG1ha2VSYW5nZVNl
bGVjdGluZ05vZGUoY29uc3RfY2FzdDxOb2RlJj4obm9kZSkpOworICAgIHJldHVybiBub2RlUmFu
Z2UgJiYgY29udGFpbnMocmFuZ2UsICpub2RlUmFuZ2UpOworfQorCitib29sIGludGVyc2VjdHMo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQoreworICAgIC8vIEZJ
WE1FOiBDb25zaWRlciBhIG1vcmUgZWZmaWNpZW50IGFsZ29yaXRobSB0aGF0IGF2b2lkcyBhbHdh
eXMgY29tcHV0aW5nIHRoZSBub2RlIGluZGV4LgorICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgY29u
c3RfY2FzdCBwb2ludCB0byBhIGRlc2lnbiBwcm9ibGVtPworICAgIGF1dG8gbm9kZVJhbmdlID0g
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZShjb25zdF9jYXN0PE5vZGUmPihub2RlKSk7CisgICAgaWYg
KCFub2RlUmFuZ2UpCisgICAgICAgIHJldHVybiBub2RlLmNvbnRhaW5zKHJhbmdlLnN0YXJ0LmNv
bnRhaW5lci5wdHIoKSk7CisgICAgcmV0dXJuIGlzX2x0KGRvY3VtZW50T3JkZXIobm9kZVJhbmdl
LT5zdGFydCwgcmFuZ2UuZW5kKSkgJiYgaXNfbHQoZG9jdW1lbnRPcmRlcihyYW5nZS5zdGFydCwg
bm9kZVJhbmdlLT5lbmQpKTsKKworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCmluZGV4
IDBkNWNkMWVhYjJhNzcxZWI2NzI2NWRkNjMwMjQ1MzQxMTI3ZmM1ZGYuLjQ2MjEwZDc4ZjE4NGUx
ZjU4YjViNGViMzM2MjVmODNhMjgxOWM1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCkBA
IC02NSw2ICs2NSwyMCBAQCBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAorV0VCQ09SRV9FWFBPUlQgYm9v
bCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQm
KTsKK2Jvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBPcHRpb25h
bDxCb3VuZGFyeVBvaW50PiYpOworCitXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNvbnN0
IFNpbXBsZVJhbmdlJiBvdXRlclJhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgaW5uZXJSYW5nZSk7
CitXRUJDT1JFX0VYUE9SVCBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25z
dCBTaW1wbGVSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgdW5pb25SYW5nZXMo
Y29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOworCitXRUJDT1JFX0VYUE9S
VCBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOworV0VCQ09S
RV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYp
OworCisvLyBSZXR1cm5zIGVxdWl2YWxlbnQgaWYgcG9pbnQgaXMgaW4gcmFuZ2UuCitXRUJDT1JF
X0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBTaW1wbGVSYW5nZSYs
IGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK1dFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRlcmluZyBk
b2N1bWVudE9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwor
CiBjbGFzcyBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U7CiBJbnRlcnNlY3RpbmdOb2RlUmFuZ2UgaW50
ZXJzZWN0aW5nTm9kZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZy5jcHAKaW5kZXggMjgzYWVhZDY1OGQ0MWVlMmEwYmMzNWYyMzAxZTk1YWY0Y2UxMjNiYy4u
NmIxODRjYTg1N2NhN2VlY2E1MWQ2YmFmZjU1NGI1YTIxNTI1NzdkYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmcuY3BwCkBAIC03OSw0MCArNzksMTggQEAgYm9vbCBpc0F0b21pY05vZGUoY29u
c3QgTm9kZSogbm9kZSkKICAgICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMo
KSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm5vZGUpKTsKIH0KIAotLy8gQ29tcGFyZSB0d28g
cG9zaXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBwb3NzaWJpbGl0eSB0aGF0IG9uZSBv
ciBib3RoCi0vLyBjb3VsZCBiZSBpbnNpZGUgYSBzaGFkb3cgdHJlZS4gT25seSB3b3JrcyBmb3Ig
bm9uLW51bGwgdmFsdWVzLgorLy8gRklYTUU6IENoYW5nZSBjYWxsZXJzIHRvIHVzZSBkb2N1bWVu
dE9yZGVyIGFuZCBkZWxldGUgdGhpcy4KIGludCBjb21wYXJlUG9zaXRpb25zKGNvbnN0IFBvc2l0
aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKIHsKLSAgICBUcmVlU2NvcGUqIGNvbW1vblNjb3Bl
ID0gY29tbW9uVHJlZVNjb3BlKGEuY29udGFpbmVyTm9kZSgpLCBiLmNvbnRhaW5lck5vZGUoKSk7
Ci0KLSAgICBpZiAoIWNvbW1vblNjb3BlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE5vZGUq
IG5vZGVBID0gY29tbW9uU2NvcGUtPmFuY2VzdG9yTm9kZUluVGhpc1Njb3BlKGEuY29udGFpbmVy
Tm9kZSgpKTsKLSAgICBBU1NFUlQobm9kZUEpOwotICAgIGJvb2wgaGFzRGVzY2VuZGVudEEgPSBu
b2RlQSAhPSBhLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpbnQgb2Zmc2V0QSA9IGhhc0Rlc2NlbmRl
bnRBID8gMCA6IGEuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotCi0gICAgTm9kZSog
bm9kZUIgPSBjb21tb25TY29wZS0+YW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUoYi5jb250YWluZXJO
b2RlKCkpOwotICAgIEFTU0VSVChub2RlQik7Ci0gICAgYm9vbCBoYXNEZXNjZW5kZW50QiA9IG5v
ZGVCICE9IGIuY29udGFpbmVyTm9kZSgpOwotICAgIGludCBvZmZzZXRCID0gaGFzRGVzY2VuZGVu
dEIgPyAwIDogYi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0KLSAgICBpbnQgYmlh
cyA9IDA7Ci0gICAgaWYgKG5vZGVBID09IG5vZGVCKSB7Ci0gICAgICAgIGlmIChoYXNEZXNjZW5k
ZW50QSkKLSAgICAgICAgICAgIGJpYXMgPSAtMTsKLSAgICAgICAgZWxzZSBpZiAoaGFzRGVzY2Vu
ZGVudEIpCi0gICAgICAgICAgICBiaWFzID0gMTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbXBhcmlz
b25SZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKG5vZGVBLCBvZmZzZXRBLCBu
b2RlQiwgb2Zmc2V0Qik7Ci0gICAgaWYgKGNvbXBhcmlzb25SZXN1bHQuaGFzRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBiaWFzOwotICAgIGF1dG8gcmVzdWx0ID0gY29tcGFyaXNvblJlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLSAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0IDogYmlh
czsKKyAgICBhdXRvIG9yZGVyaW5nID0gZG9jdW1lbnRPcmRlcihhLCBiKTsKKyAgICBpZiAoaXNf
bHQob3JkZXJpbmcpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKGlzX2d0KG9yZGVyaW5n
KSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7CiB9CiAKKy8vIEZJWE1FOiBDaGFu
Z2UgY2FsbGVycyB0byB1c2UgZG9jdW1lbnRPcmRlciBhbmQgZGVsZXRlIHRoaXMuCiBpbnQgY29t
cGFyZVBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgYikKIHsKICAgICByZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhhLmRlZXBFcXVpdmFsZW50
KCksIGIuZGVlcEVxdWl2YWxlbnQoKSk7CkBAIC0xMTYzLDkgKzExNDEsNyBAQCBzdGF0aWMgYm9v
bCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9u
JiBzZWNvbmQpCiAvLyBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBu
b2RlIGlzIHZpc2libHkgZml0IGluc2lkZSBzZWxlY3RlZFJhbmdlCiBib29sIGlzTm9kZVZpc2li
bHlDb250YWluZWRXaXRoaW4oTm9kZSYgbm9kZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQog
ewotICAgIC8vIElmIHRoZSBub2RlIGlzIGluc2lkZSB0aGUgcmFuZ2UsIHRoZW4gaXQgc3VyZWx5
IGlzIGNvbnRhaW5lZCB3aXRoaW4uCi0gICAgYXV0byBjb21wYXJpc29uUmVzdWx0ID0gY3JlYXRl
TGl2ZVJhbmdlKHJhbmdlKS0+Y29tcGFyZU5vZGUobm9kZSk7Ci0gICAgaWYgKCFjb21wYXJpc29u
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmlzb25SZXN1bHQucmVsZWFzZVJldHVyblZh
bHVlKCkgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKQorICAgIGlmIChjb250YWlucyhyYW5nZSwgbm9k
ZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYXV0byBzdGFydFBvc2l0aW9uID0gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAppbmRleCAxZjBhNzcyMjllY2YzMzBiYzM5MTNmZjdhZDc0MTY5ZGUyMTYwMTlhLi4x
NjA3ZTg3Y2RhYzEzMWE0YzE2MDk3N2E2NDhjZjUyMWQ0NGE3MGViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCkBAIC0zNTUwLDEwICszNTUwLDggQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEVkaXRvcjo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9u
YWwKIHN0YXRpYyBib29sIGlzRnJhbWVJblJhbmdlKEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlKQogewogICAgIGZvciAoYXV0byogb3duZXJFbGVtZW50ID0gZnJhbWUub3du
ZXJFbGVtZW50KCk7IG93bmVyRWxlbWVudDsgb3duZXJFbGVtZW50ID0gb3duZXJFbGVtZW50LT5k
b2N1bWVudCgpLm93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIGlmICgmb3duZXJFbGVtZW50LT5k
b2N1bWVudCgpID09ICZyYW5nZS5zdGFydC5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmludGVyc2VjdHNOb2RlKCpvd25lckVs
ZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuICFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgICAgICB9CisgICAgICAgIGlmICgmb3duZXJF
bGVtZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS5zdGFydC5kb2N1bWVudCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGludGVyc2VjdHMocmFuZ2UsICpvd25lckVsZW1lbnQpOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CkBAIC0zNzAzLDE4ICszNzAxLDE2IEBAIHZvaWQgRWRpdG9yOjpzY2Fu
U2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7Ci0g
ICAgICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmly
c3RSYW5nZSgpKSB7Ci0gICAgICAgICAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJh
Y3RlcnMgaW4gZWFjaCBkaXJlY3Rpb24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBw
aG9uZSBudW1iZXJzLgotICAgICAgICAgICAgY29uc3RleHByIHVuc2lnbmVkIGNoYXJhY3RlcnNU
b0V4dGVuZCA9IDE1OwotICAgICAgICAgICAgYXV0byBzZWxlY3RlZExpdmVSYW5nZSA9IGNyZWF0
ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHJhbmdl
IDogc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoZXh0ZW5kU2VsZWN0aW9uKCpzZWxlY3RlZFJhbmdl
LCBjaGFyYWN0ZXJzVG9FeHRlbmQpKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaHkg
ZG8gd2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgYW5kIHRoZSBjb2RlIGJlbG93IHRoaXMgb25s
eSB3aGVuIGl0IG92ZXJsYXBzIHRoZSBzZWxlY3Rpb24/Ci0gICAgICAgICAgICAgICAgYWRkTWFy
a2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKLQotICAgICAgICAg
ICAgICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUg
bnVtYmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBhY3R1YWwgc2VsZWN0aW9uIHJhbmdlLgot
ICAgICAgICAgICAgICAgIGlmIChyYW5nZXNPdmVybGFwKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSku
cHRyKCksIHNlbGVjdGVkTGl2ZVJhbmdlLnB0cigpKSkKLSAgICAgICAgICAgICAgICAgICAgbV9k
ZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2UpOwotICAgICAgICAgICAg
fQorICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSAqc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZp
cnN0UmFuZ2UoKTsKKyAgICAgICAgLy8gRXh0ZW5kIHRoZSByYW5nZSBhIGZldyBjaGFyYWN0ZXJz
IGluIGVhY2ggZGlyZWN0aW9uIHRvIGRldGVjdCBpbmNvbXBsZXRlbHkgc2VsZWN0ZWQgcGhvbmUg
bnVtYmVycy4KKyAgICAgICAgY29uc3RleHByIHVuc2lnbmVkIGNoYXJhY3RlcnNUb0V4dGVuZCA9
IDE1OworICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogc2NhbkZvclRlbGVwaG9uZU51bWJlcnMo
ZXh0ZW5kU2VsZWN0aW9uKHNlbGVjdGVkUmFuZ2UsIGNoYXJhY3RlcnNUb0V4dGVuZCkpKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIGRvIHRoaXMgdW5jb25kaXRpb25hbGx5IGlu
c3RlYWQgb2Ygd2hlbiBvbmx5IHdoZW4gaXQgb3ZlcmxhcHMgdGhlIHNlbGVjdGlvbj8KKyAgICAg
ICAgICAgIGFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcik7
CisKKyAgICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0
ZWxlcGhvbmUgbnVtYmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBzZWxlY3Rpb24uCisgICAg
ICAgICAgICBpZiAoaW50ZXJzZWN0cyhyYW5nZSwgc2VsZWN0ZWRSYW5nZSkpCisgICAgICAgICAg
ICAgICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2UpOwogICAg
ICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApp
bmRleCAyNDZmYjI2YjdlODc0N2YzMGQ4OWJlNjk3Yjk5MDZkNzRlNmM5OWQxLi5iMDQ5NzU5NmE3
NWJlYzExOWI2ODcyNDQ5YzRmNTc0N2M1ZjAzYzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yQ29tbWFuZC5jcHAKQEAgLTIyOCwxMyArMjI4LDYgQEAgc3RhdGljIHVuc2lnbmVkIHZl
cnRpY2FsU2Nyb2xsRGlzdGFuY2UoRnJhbWUmIGZyYW1lKQogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oU2Nyb2xsYmFyOjpwYWdlU3RlcChoZWlnaHQpKTsKIH0KIAotc3RhdGljIFNp
bXBsZVJhbmdlIHVuaW9uUmFuZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBTaW1wbGVS
YW5nZSYgYikKLXsKLSAgICBhdXRvJiBzdGFydCA9IGNyZWF0ZUxpdmVSYW5nZShhKS0+Y29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKGIp
KS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYSA6IGI7Ci0gICAgYXV0byYgZW5kID0gY3Jl
YXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQs
IGNyZWF0ZUxpdmVSYW5nZShiKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGIgOiBhOwot
ICAgIHJldHVybiB7IHN0YXJ0LnN0YXJ0LCBlbmQuZW5kIH07Ci19Ci0KIC8vIEV4ZWN1dGUgY29t
bWFuZCBmdW5jdGlvbnMKIAogc3RhdGljIGJvb2wgZXhlY3V0ZUJhY2tDb2xvcihGcmFtZSYgZnJh
bWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCkBAIC0zNTMsMTQgKzM0NiwxNiBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9FbmRP
ZlBhcmFncmFwaChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdQogCiBzdGF0
aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JD
b21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGF1dG8gbWFyayA9IGZyYW1lLmVk
aXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8mIGVkaXRvciA9IGZy
YW1lLmVkaXRvcigpOwogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwot
ICAgIGlmIChtYXJrICYmIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgewotICAgICAg
ICBpZiAoIXNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uUmFuZ2VzKCptYXJrLCAqZnJh
bWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQorICAgIGF1dG8gbWFya1JhbmdlID0gZWRpdG9yLm1h
cmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxl
Y3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAobWFya1Jhbmdl
ICYmIHNlbGVjdGlvblJhbmdlKSB7CisgICAgICAgIGlmICghc2VsZWN0aW9uLnNldFNlbGVjdGVk
UmFuZ2UodW5pb25SYW5nZXMoKm1hcmtSYW5nZSwgKnNlbGVjdGlvblJhbmdlKSwgRE9XTlNUUkVB
TSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFtZS5lZGl0b3IoKS5wZXJmb3JtRGVsZXRlKCk7
Ci0gICAgZnJhbWUuZWRpdG9yKCkuc2V0TWFyayhzZWxlY3Rpb24uc2VsZWN0aW9uKCkpOworICAg
IGVkaXRvci5wZXJmb3JtRGVsZXRlKCk7CisgICAgZWRpdG9yLnNldE1hcmsoc2VsZWN0aW9uLnNl
bGVjdGlvbigpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA1MCwxMyArMTA0NSwxNSBA
QCBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0U2VudGVuY2UoRnJhbWUmIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbgogCiBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9N
YXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJp
bmcmKQogewotICAgIGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6
ZWRSYW5nZSgpOwotICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRS
YW5nZSgpOwotICAgIGlmICghbWFyayB8fCAhc2VsZWN0aW9uKSB7CisgICAgYXV0byYgZWRpdG9y
ID0gZnJhbWUuZWRpdG9yKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9u
KCk7CisgICAgYXV0byBtYXJrUmFuZ2UgPSBlZGl0b3IubWFyaygpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghbWFya1JhbmdlIHx8ICFzZWxlY3Rpb25SYW5nZSkg
ewogICAgICAgICBQQUw6OnN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uUmFuZ2VzKCpt
YXJrLCAqc2VsZWN0aW9uKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3Nl
VHlwaW5nOjpZZXMpOworICAgIHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uUmFuZ2Vz
KCptYXJrUmFuZ2UsICpzZWxlY3Rpb25SYW5nZSksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIGlnbm9y
ZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gc2V0U2VsZWN0ZWRSYW5nZSBoZXJlPwogICAgIHJldHVy
biB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRl
eCBlMDEwOGIyM2E2NWZmMDg2NWUyMzgwZjVlYzFjYWFkNTg2M2E1NzY4Li5mZDA2ZjY0ZmMwNTUz
OWJhNDlhYjVjNzUyNWU0YWQ3MjVkYjA5OTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcApAQCAtNTU0LDE4ICs1NTQsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVk
LCBib28KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zZWxlY3Rpb24uc2V0V2l0aG91dFZh
bGlkYXRpb24obV9zZWxlY3Rpb24uZW5kKCksIG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIH0g
ZWxzZSBpZiAoaXNSYW5nZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9zZWxlY3Rp
b24uZmlyc3RSYW5nZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbXBhcmVOb2RlUmVzdWx0ID0g
Y3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKG5vZGUpOwotICAgICAgICAgICAg
aWYgKCFjb21wYXJlTm9kZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgICAg
IGF1dG8gY29tcGFyZVJlc3VsdCA9IGNvbXBhcmVOb2RlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpOwotICAgICAgICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0JF
Rk9SRV9BTkRfQUZURVIgfHwgY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdGhpbmcgaGVyZSwgd2hlbiB0aGlz
IG5vZGUncyByZW5kZXJlciB3YXMgZGVzdHJveWVkLCB0aGUgcmVjdCB0aGF0IGl0Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVj
dGlvbiBnYXBzIHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAg
IC8vIHRoZSByZW1vdmFsIHdvdWxkbid0IGJlIGludmFsaWRhdGVkLgotICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogRG9uJ3QgZG8gc28gbXVjaCB1bm5lY2Vzc2FyeSBpbnZhbGlkYXRpb24u
Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFyUmVuZGVyVHJlZVNlbGVjdGlvbiA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICBpZiAoYXV0byByYW5nZSA9
IG1fc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsgcmFuZ2UgJiYgaW50ZXJzZWN0cygqcmFuZ2UsIG5v
ZGUpKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBkaWQgbm90aGluZyBoZXJlLCB3aGVuIHRoaXMg
bm9kZSdzIHJlbmRlcmVyIHdhcyBkZXN0cm95ZWQsIHRoZSByZWN0IHRoYXQgaXQKKyAgICAgICAg
ICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVjdGlvbiBnYXBz
IHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mCisgICAgICAgICAgICAvLyB0aGUgcmVtb3ZhbCB3
b3VsZG4ndCBiZSBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBkbyBz
byBtdWNoIHVubmVjZXNzYXJ5IGludmFsaWRhdGlvbi4KKyAgICAgICAgICAgIGNsZWFyUmVuZGVy
VHJlZVNlbGVjdGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwMzQsNyArMjAy
OCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRUFmZmluCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCZyYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVu
dCgpICE9ICZyYW5nZS0+ZW5kLmNvbnRhaW5lci0+ZG9jdW1lbnQoKSkKKyAgICBpZiAoJnJhbmdl
LT5zdGFydC5kb2N1bWVudCgpICE9ICZyYW5nZS0+ZW5kLmRvY3VtZW50KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKCpyYW5nZSwg
YWZmaW5pdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQuY3BwCmluZGV4IDVlZDBkZTlhMzEwYjMxYmU2M2UwYTNkNDMzODk4
YzE5NTI3Mjg1NmUuLjViN2JlNzg4YzY4NGUxMjIyOWJjNzc3ZTk5NmJmOTFhZDllNWRiMmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVw
bGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHRleHQpCi0g
ICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChyYW5nZVRvQmVSZXBsYWNlZC5zdGFydC5jb250YWlu
ZXItPmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQorICAgIDogQ29t
cG9zaXRlRWRpdENvbW1hbmQocmFuZ2VUb0JlUmVwbGFjZWQuc3RhcnQuZG9jdW1lbnQoKSwgRWRp
dEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCiAgICAgLCBtX3JhbmdlVG9CZVJlcGxhY2VkKHJh
bmdlVG9CZVJlcGxhY2VkKQogICAgICwgbV90ZXh0KHRleHQpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRleCA4Njcx
MzIwZGM0M2M2NWFlM2YwMDUwNDM3ZjQzOTFmMTZmODljZjU2Li5hODQ4NjYzNjUzYTBmN2ZmMjk3
MzczNmIxMTk3MmM4YzY0YzhjYWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogCiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJhbmdlVG9CZUNv
cnJlY3RlZC5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJl
cGxhY2VtZW50KQorICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQocmFuZ2VUb0JlQ29ycmVjdGVk
LnN0YXJ0LmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQogICAgICwg
bV9yYW5nZVRvQmVDb3JyZWN0ZWQocmFuZ2VUb0JlQ29ycmVjdGVkKQogICAgICwgbV9zZWxlY3Rp
b25Ub0JlQ29ycmVjdGVkKG1fcmFuZ2VUb0JlQ29ycmVjdGVkKQogICAgICwgbV9jb3JyZWN0aW9u
KGNvcnJlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5jcHAKaW5kZXggZTIzODJiZWIwMTc5ODU0YzJhNTIzOGIzZDM3MGI5NGE1ZTUwNTdkNS4uMzVm
ZTlkNmE4ZWRkYzk4YWRjNDNlNTU0MDA4NjFiOTRlNDNlNGZjNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMzM2LDcgKzMzNiw3IEBAIGF1
dG8gVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0
aWNhbFBocmFzZShib29sIGNoZWNrCiAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hcikK
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6
R3JhbW1hcik7CiAgICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0
aW9uOwotICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3JhcGhSYW5nZS5z
dGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgICAgICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gcGFyYWdyYXBoUmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpKQog
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgICAgICAgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCptX2Ns
aWVudC50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMsIHJlc3Vs
dHMsIGN1cnJlbnRTZWxlY3Rpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQppbmRleCA4NzYxMjBiYjA5YjEyZTA5ZTRk
ZWNhNThlNTU0ZDMwMjcwMWVmNDM1Li41NTgyNGZhMDgzNmUwMzNjNzkyNjYxNmE0Nzk3MTEyMGUz
NzQzYzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5
TG9va3VwTGVnYWN5Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25h
cnlMb29rdXBMZWdhY3kubW0KQEAgLTY4LDExICs2OCw4IEBAIHN0YXRpYyBib29sIHNlbGVjdGlv
bkNvbnRhaW5zUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3Qg
VmlzCiAgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb250YWlucyhwb3NpdGlv
bik7CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKKyAg
ICByZXR1cm4gc2VsZWN0ZWRSYW5nZSAmJiBpc1BvaW50SW5SYW5nZSgqc2VsZWN0ZWRSYW5nZSwg
bWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pKTsKIH0KIAogT3B0aW9uYWw8c3RkOjp0dXBsZTxT
aW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hcmt1cC5jcHAKaW5kZXggMWY3MTk0YTczMjhlOTQ3YWViYjYyYWMxYzhkNThmZTkyYTE1MGE3
ZS4uNmI4ZTM5OWE1ZjhhZWRmMWViYjQ3YmJiNmY2ZDUyNjlkYmE4NWQ4ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcApAQCAtMTEyMCw3ICsxMTIwLDcgQEAgc3RhdGljIGJvb2wgY29udGV4
dFByZXNlcnZlc05ld2xpbmUoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQpCiAKIFJlZjxEb2N1
bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiBj
b250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgYXV0byYgZG9jdW1lbnQgPSBjb250
ZXh0LnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IGNv
bnRleHQuc3RhcnQuZG9jdW1lbnQoKTsKICAgICBhdXRvIGZyYWdtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgIAogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hp
dmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2
ZS5jcHAKaW5kZXggYTViZTA3MWUzNjg2MDc3ZWUzNmQyMWUzNWE1ODM5ODA0ZDk4N2YyMi4uNjA5
ZWQxMTE0ZmQxOTk2Y2U4OTczYjc0Yzc5YmM3ZmUwNTI2ZWQ3MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKQEAgLTQ1
NSw3ICs0NTUsNyBAQCBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJjaGl2ZTo6
Y3JlYXRlKEZyYW1lJiBmcmFtZSkKIAogUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdl
YkFyY2hpdmU6OmNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgYXV0byYg
ZG9jdW1lbnQgPSByYW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCk7CisgICAgYXV0byYg
ZG9jdW1lbnQgPSByYW5nZS5zdGFydC5kb2N1bWVudCgpOwogICAgIGF1dG8qIGZyYW1lID0gZG9j
dW1lbnQuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCA5NjQ0OWQzMjdhZWI5YTkxY2Zl
ZDc5MjljYTZjMzY2NDEyMDIwNWJmLi5iN2IxMmFlNjE3OWU4NTBlNmQ4YjZkOTliMDMwNWJkNTYy
MzNiODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0yODQsMTUgKzI4
NCwxMyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6bW9kaWZ5KGNvbnN0IFN0cmluZyYgYWx0ZXJTdHJp
bmcsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaQogCiBFeGNlcHRpb25Pcjx2b2lkPiBET01T
ZWxlY3Rpb246OmV4dGVuZChOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgYXV0
byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKHRo
aXMtPmZyYW1lKCkpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
aWYgKG9mZnNldCA+IChub2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSA/IGNhcmV0TWF4T2Zmc2V0
KG5vZGUpIDogbm9kZS5jb3VudENoaWxkTm9kZXMoKSkpCisgICAgaWYgKG9mZnNldCA+IG5vZGUu
bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9Owog
ICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKCZub2RlKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
LQotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CiAgICAgZnJhbWUtPnNlbGVjdGlv
bigpLnNldEV4dGVudChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJm5vZGUsIG9mZnNldCks
IERPV05TVFJFQU0pOwogICAgIHJldHVybiB7IH07CiB9CkBAIC0zMDEsMjIgKzI5OSwxMCBAQCBF
eGNlcHRpb25PcjxSZWY8UmFuZ2U+PiBET01TZWxlY3Rpb246OmdldFJhbmdlQXQodW5zaWduZWQg
aW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IHJhbmdlQ291bnQoKSkKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07Ci0KLSAgICAvLyBJZiB5b3UncmUgaGl0dGlu
ZyB0aGlzLCB5b3UndmUgYWRkZWQgYnJva2VuIG11bHRpLXJhbmdlIHNlbGVjdGlvbiBzdXBwb3J0
LgotICAgIEFTU0VSVChyYW5nZUNvdW50KCkgPT0gMSk7Ci0KLSAgICBhdXRvKiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCk7Ci0gICAgaWYgKGF1dG8qIHNoYWRvd0FuY2VzdG9yID0gc2VsZWN0aW9uU2hh
ZG93QW5jZXN0b3IoKmZyYW1lKSkgewotICAgICAgICBhdXRvKiBjb250YWluZXIgPSBzaGFkb3dB
bmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOwotICAgICAgICB1bnNpZ25l
ZCBvZmZzZXQgPSBzaGFkb3dBbmNlc3Rvci0+Y29tcHV0ZU5vZGVJbmRleCgpOwotICAgICAgICBy
ZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1ha2VTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50IHsgKmNv
bnRhaW5lciwgb2Zmc2V0IH0pKTsKLSAgICB9Ci0KLSAgICBhdXRvIGZpcnN0UmFuZ2UgPSBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwotICAgIEFTU0VSVChmaXJz
dFJhbmdlKTsKLSAgICBpZiAoIWZpcnN0UmFuZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbmRleFNpemVFcnJvciB9OwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKmZpcnN0UmFu
Z2UpOworICAgIGF1dG8mIGZyYW1lID0gKnRoaXMtPmZyYW1lKCk7CisgICAgaWYgKGF1dG8gc2hh
ZG93QW5jZXN0b3IgPSBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcihmcmFtZSkpCisgICAgICAgIHJl
dHVybiBjcmVhdGVMaXZlUmFuZ2UobWFrZVNpbXBsZVJhbmdlKCptYWtlQm91bmRhcnlQb2ludEJl
Zm9yZU5vZGUoKnNoYWRvd0FuY2VzdG9yKSkpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2Uo
KmZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSk7CiB9CiAKIHZvaWQg
RE9NU2VsZWN0aW9uOjpyZW1vdmVBbGxSYW5nZXMoKQpAQCAtMzI3LDUwICszMTMsMjIgQEAgdm9p
ZCBET01TZWxlY3Rpb246OnJlbW92ZUFsbFJhbmdlcygpCiAgICAgZnJhbWUtPnNlbGVjdGlvbigp
LmNsZWFyKCk7CiB9CiAKLXZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgcmFuZ2Up
Cit2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIGxpdmVSYW5nZSkKIHsKLSAgICBh
dXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIo
dGhpcy0+ZnJhbWUoKSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKLQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UobGl2ZVJhbmdlKTsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0
aW9uKCk7Ci0gICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFu
Z2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgewotICAgICAgICBz
ZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOworCisgICAgaWYg
KGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpKSB7CisgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5j
b250YWluaW5nU2hhZG93Um9vdCgpICYmIGludGVyc2VjdHMoKnNlbGVjdGVkUmFuZ2UsIHJhbmdl
KSkKKyAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24odW5pb25SYW5nZXMoKnNlbGVj
dGVkUmFuZ2UsIHJhbmdlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIG5v
cm1hbGl6ZWRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKTsKLSAgICBhdXRv
IHJlc3VsdCA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RB
UlQsICpub3JtYWxpemVkUmFuZ2UpOwotICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYm
IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewotICAgICAgICAvLyBXZSBkb24n
dCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBp
ZiB0aGUgdHdvIHJhbmdlcyBkb24ndCBpbnRlcnNlY3QuCi0gICAgICAgIHJlc3VsdCA9IHJhbmdl
LmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqbm9ybWFsaXplZFJh
bmdlKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpID4gLTEpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHJhbmdlLmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKm5vcm1hbGl6ZWRSYW5nZSk7Ci0g
ICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgcmFuZ2VzIGludGVy
c2VjdC4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKG1ha2VEZXByZWNhdGVkTGVn
YWN5UG9zaXRpb24oJnJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLnN0YXJ0T2Zmc2V0KCkp
LCBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZub3JtYWxpemVkUmFuZ2UtPmVuZENvbnRh
aW5lcigpLCBub3JtYWxpemVkUmFuZ2UtPmVuZE9mZnNldCgpKSwgRE9XTlNUUkVBTSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRoZSBuZXcgcmFuZ2UgY29udGFp
bnMgdGhlIG9yaWdpbmFsIHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxl
Y3Rpb24obWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMg
c2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgdHdvIHJhbmdlcyBkb24ndCBp
bnRlcnNlY3QuCi0gICAgICAgIHJlc3VsdCA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6RU5EX1RPX1NUQVJULCAqbm9ybWFsaXplZFJhbmdlKTsKLSAgICAgICAgaWYgKCFyZXN1
bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMSkgewot
ICAgICAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpF
TkRfVE9fRU5ELCAqbm9ybWFsaXplZFJhbmdlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0Lmhh
c0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewotICAg
ICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBjb250YWlucyB0aGUgbmV3IHJhbmdl
LgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdl
KCpub3JtYWxpemVkUmFuZ2UpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVGhlIHJhbmdlcyBpbnRlcnNlY3QuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1v
dmVUbyhtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZub3JtYWxpemVkUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCksIG5vcm1hbGl6ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSksIG1ha2VEZXByZWNh
dGVkTGVnYWN5UG9zaXRpb24oJnJhbmdlLmVuZENvbnRhaW5lcigpLCByYW5nZS5lbmRPZmZzZXQo
KSksIERPV05TVFJFQU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIHNl
bGVjdGlvbi5zZXRTZWxlY3Rpb24ocmFuZ2UpOwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6ZGVs
ZXRlRnJvbURvY3VtZW50KCkKQEAgLTM5Miw0NSArMzUwLDE5IEBAIHZvaWQgRE9NU2VsZWN0aW9u
OjpkZWxldGVGcm9tRG9jdW1lbnQoKQogCiBib29sIERPTVNlbGVjdGlvbjo6Y29udGFpbnNOb2Rl
KE5vZGUmIG5vZGUsIGJvb2wgYWxsb3dQYXJ0aWFsKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBU
aGlzIGJlaGF2aW9yIGRvZXMgbm90IG1hdGNoIHdoYXQgdGhlIHNlbGVjdGlvbiBBUEkgc3RhbmRh
cmQgc3BlY2lmaWVzLgorICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSkKKyAgICAgICAgYWxsb3dQ
YXJ0aWFsID0gdHJ1ZTsKKwogICAgIGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBzZWxlY3Rpb24g
PSBmcmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICE9ICZub2Rl
LmRvY3VtZW50KCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBSZWY8Tm9kZT4gcHJvdGVjdGVkTm9kZShub2RlKTsKLSAgICBhdXRvIHNlbGVjdGVk
UmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBh
dXRvIHNlbGVjdGVkUmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5zdGFydC5j
b250YWluZXItPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGUoKTsKLSAg
ICBpZiAoIXBhcmVudE5vZGUgfHwgIXBhcmVudE5vZGUtPmlzQ29ubmVjdGVkKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBub2RlSW5kZXggPSBub2RlLmNvbXB1dGVOb2Rl
SW5kZXgoKTsKLQotICAgIGF1dG8gc3RhcnRzUmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5kZXgsICZzZWxlY3RlZFJhbmdlLT5zdGFydENvbnRh
aW5lcigpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBpZiAoc3RhcnRzUmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGVu
ZHNSZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBhcmVudE5vZGUsIG5vZGVJ
bmRleCArIDEsICZzZWxlY3RlZFJhbmdlLT5lbmRDb250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+
ZW5kT2Zmc2V0KCkpOwotICAgIEFTU0VSVCghZW5kc1Jlc3VsdC5oYXNFeGNlcHRpb24oKSk7Ci0g
ICAgYm9vbCBpc05vZGVGdWxseVNlbGVjdGVkID0gIXN0YXJ0c1Jlc3VsdC5oYXNFeGNlcHRpb24o
KSAmJiBzdGFydHNSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMAotICAgICAgICAmJiAh
ZW5kc1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBlbmRzUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpIDw9IDA7Ci0gICAgaWYgKGlzTm9kZUZ1bGx5U2VsZWN0ZWQpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgYXV0byBzdGFydEVuZFJlc3VsdCA9IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQ
b2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4LCAmc2VsZWN0ZWRSYW5nZS0+ZW5kQ29udGFpbmVy
KCksIHNlbGVjdGVkUmFuZ2UtPmVuZE9mZnNldCgpKTsKLSAgICBBU1NFUlQoIXN0YXJ0RW5kUmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKTsKLSAgICBhdXRvIGVuZFN0YXJ0UmVzdWx0ID0gUmFuZ2U6OmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCAmc2VsZWN0ZWRS
YW5nZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSk7Ci0g
ICAgQVNTRVJUKCFlbmRTdGFydFJlc3VsdC5oYXNFeGNlcHRpb24oKSk7Ci0gICAgYm9vbCBpc05v
ZGVGdWxseVVuc2VsZWN0ZWQgPSAoIXN0YXJ0RW5kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHN0
YXJ0RW5kUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgfHwgKCFlbmRT
dGFydFJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBlbmRTdGFydFJlc3VsdC5yZWxlYXNlUmV0dXJu
VmFsdWUoKSA8IDApOwotICAgIGlmIChpc05vZGVGdWxseVVuc2VsZWN0ZWQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiBhbGxvd1BhcnRpYWwgfHwgbm9kZS5pc1RleHROb2Rl
KCk7CisgICAgcmV0dXJuIGFsbG93UGFydGlhbCA/IGludGVyc2VjdHMoKnNlbGVjdGVkUmFuZ2Us
IG5vZGUpIDogY29udGFpbnMoKnNlbGVjdGVkUmFuZ2UsIG5vZGUpOwogfQogCiB2b2lkIERPTVNl
bGVjdGlvbjo6c2VsZWN0QWxsQ2hpbGRyZW4oTm9kZSYgbm9kZSkKQEAgLTQ4MywxMSArNDE1LDcg
QEAgdW5zaWduZWQgRE9NU2VsZWN0aW9uOjpzaGFkb3dBZGp1c3RlZE9mZnNldChjb25zdCBQb3Np
dGlvbiYgcG9zaXRpb24pIGNvbnN0CiBib29sIERPTVNlbGVjdGlvbjo6aXNWYWxpZEZvclBvc2l0
aW9uKE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgp
OwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAmbm9kZS0+ZG9jdW1lbnQoKSA9PSBm
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gZnJhbWUgJiYgKCFub2RlIHx8ICZub2RlLT5k
b2N1bWVudCgpID09IGZyYW1lLT5kb2N1bWVudCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBmOTJhYjNiZTY0
MDhiZWIxNjY3NDNlNTgzZjNjY2I4MmQ0YTllZDczLi4zY2MyY2ViYWM1YTgwMWYzOWM4N2FhMzBh
ZjkwMjllZmFlZmMyOWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApA
QCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1l
bnRGcmFnbWVudEZyb21EcmFnRGF0YShjb25zdCBEcmFnRGF0YSYgZHJhCiAgICAgICAgICAgICBT
dHJpbmcgdGl0bGU7CiAgICAgICAgICAgICBTdHJpbmcgdXJsID0gZHJhZ0RhdGEuYXNVUkwoRHJh
Z0RhdGE6OkRvTm90Q29udmVydEZpbGVuYW1lcywgJnRpdGxlKTsKICAgICAgICAgICAgIGlmICgh
dXJsLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gY29udGV4
dC5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCk7CisgICAgICAgICAgICAgICAgYXV0byYgZG9j
dW1lbnQgPSBjb250ZXh0LnN0YXJ0LmRvY3VtZW50KCk7CiAgICAgICAgICAgICAgICAgYXV0byBh
bmNob3IgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICAgICAgICAg
ICAgICBhbmNob3ItPnNldEhyZWYodXJsKTsKICAgICAgICAgICAgICAgICBpZiAodGl0bGUuaXNF
bXB0eSgpKSB7CkBAIC03NzQsMTcgKzc3NCwxMyBAQCBFbGVtZW50KiBEcmFnQ29udHJvbGxlcjo6
ZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSogc291cmNlRnJhbWUsIEVsZW1lbnQqIHN0YQog
ICAgIHN0YXRlLnR5cGUgPSBzb3VyY2VGcmFtZS0+c2VsZWN0aW9uKCkuY29udGFpbnMoZHJhZ09y
aWdpbikgPyBEcmFnU291cmNlQWN0aW9uOjpTZWxlY3Rpb24gOiBPcHRpb25TZXQ8RHJhZ1NvdXJj
ZUFjdGlvbj4oeyB9KTsKICAgICBpZiAoIXN0YXJ0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIGlmIChhdXRvIGF0
dGFjaG1lbnQgPSBlbmNsb3NpbmdBdHRhY2htZW50RWxlbWVudCgqc3RhcnRFbGVtZW50KSkgewot
ICAgICAgICBhdXRvIHNlbGVjdGlvbiA9IHNvdXJjZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKKyAgICAgICAgYXV0byYgc2VsZWN0aW9uID0gc291cmNlRnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgICAgICBib29sIGlzU2luZ2xlQXR0YWNobWVudFNlbGVjdGlvbiA9
IHNlbGVjdGlvbi5zdGFydCgpID09IFBvc2l0aW9uKGF0dGFjaG1lbnQuZ2V0KCksIFBvc2l0aW9u
OjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKSAmJiBzZWxlY3Rpb24uZW5kKCkgPT0gUG9zaXRpb24o
YXR0YWNobWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7Ci0gICAg
ICAgIGJvb2wgaXNBdHRhY2htZW50RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiA9IGZhbHNlOwot
ICAgICAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5n
ZSgqc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVOb2RlKCphdHRhY2htZW50KTsKLSAgICAgICAgICAg
IGlzQXR0YWNobWVudEVsZW1lbnRJbkN1cnJlbnRTZWxlY3Rpb24gPSAhY29tcGFyZVJlc3VsdC5o
YXNFeGNlcHRpb24oKSAmJiBjb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IFJh
bmdlOjpOT0RFX0lOU0lERTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNBdHRhY2htZW50
RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiB8fCBpc1NpbmdsZUF0dGFjaG1lbnRTZWxlY3Rpb24p
IHsKKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsK
KyAgICAgICAgaWYgKGlzU2luZ2xlQXR0YWNobWVudFNlbGVjdGlvbiB8fCAhc2VsZWN0ZWRSYW5n
ZSB8fCAhY29udGFpbnMoKnNlbGVjdGVkUmFuZ2UsICphdHRhY2htZW50KSkgewogICAgICAgICAg
ICAgc3RhdGUudHlwZSA9IERyYWdTb3VyY2VBY3Rpb246OkF0dGFjaG1lbnQ7CiAgICAgICAgICAg
ICByZXR1cm4gYXR0YWNobWVudC5nZXQoKTsKICAgICAgICAgfQpAQCAtMTQ3MSw4ICsxNDY3LDcg
QEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRD
YXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4KIAogICAgIFZlY3RvcjxSZWY8SFRNTEltYWdlRWxl
bWVudD4+IHBsYWNlaG9sZGVyczsKICAgICBmb3IgKGF1dG8mIHBsYWNlaG9sZGVyIDogZGVzY2Vu
ZGFudHNPZlR5cGU8SFRNTEltYWdlRWxlbWVudD4oZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKmNv
bnRhaW5lcikpKSB7Ci0gICAgICAgIGF1dG8gaW50ZXJzZWN0c05vZGUgPSBjcmVhdGVMaXZlUmFu
Z2UoKmluc2VydGVkQ29udGVudFJhbmdlKS0+aW50ZXJzZWN0c05vZGUocGxhY2Vob2xkZXIpOwot
ICAgICAgICBpZiAoIWludGVyc2VjdHNOb2RlLmhhc0V4Y2VwdGlvbigpICYmIGludGVyc2VjdHNO
b2RlLnJldHVyblZhbHVlKCkpCisgICAgICAgIGlmIChpbnRlcnNlY3RzKCppbnNlcnRlZENvbnRl
bnRSYW5nZSwgcGxhY2Vob2xkZXIpKQogICAgICAgICAgICAgcGxhY2Vob2xkZXJzLmFwcGVuZChw
bGFjZWhvbGRlcik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5k
ZXggYTgyYmM4MjFjZWJhMzJlYmM4NGQxNWUyMDMwNjNlODNmZDNlNTVmMS4uMDllYjA2ZGY0YTMw
MzZmYTU1ODdkMzhhZmY5MTljOGJlNjExM2VkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcApAQCAtMjc0Niw4ICsyNzQ2LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNo
TW91c2VFdmVudChjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIHRhcmdldE4KICAg
ICAvLyB3aWxsIHNldCBhIHNlbGVjdGlvbiBpbnNpZGUgaXQsIHdoaWNoIHdpbGwgYWxzbyBzZXQg
dGhlIGZvY3VzZWQgZWxlbWVudC4KICAgICBpZiAoZWxlbWVudCAmJiBtX2ZyYW1lLnNlbGVjdGlv
bigpLmlzUmFuZ2UoKSkgewogICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tcGFyZU5vZGUoKmVsZW1lbnQp
OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lERSAmJiBlbGVtZW50LT5pc0Rlc2Nl
bmRhbnRPZihtX2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkpKQorICAgICAgICAg
ICAgaWYgKGNvbnRhaW5zKCpyYW5nZSwgKmVsZW1lbnQpICYmIGVsZW1lbnQtPmlzRGVzY2VuZGFu
dE9mKG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA0
OTcyOWQwOTY5NzgwMTFlOGU3NTBhYTM4NDhiNmJjMzQwMGUzMDYxLi5hNzc4MTBiMDIwYmY1YThk
ODUyMmNhYzhiMjViMzY5MjU4ODMyNTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTczMCwxOSAr
NzMwLDE5IEBAIGF1dG8gUGFnZTo6ZmluZFRleHRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBsCiAKICAgICBpZiAoZnJhbWVXaXRoU2Vs
ZWN0aW9uKSB7CiAgICAgICAgIHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbiA9IE5vTWF0Y2hBZnRl
clVzZXJTZWxlY3Rpb247Ci0gICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lV2l0aFNl
bGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgICAgICBh
dXRvIHNlbGVjdGVkUmFuZ2UgPSAqZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKEJhY2t3
YXJkcykpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHQucmFuZ2VzLnNpemUo
KTsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9
IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpFTkRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHQucmFuZ2VzW2kgLSAxXSkp
OwotICAgICAgICAgICAgICAgIGlmICghY29tcGFyaXNvblJlc3VsdC5oYXNFeGNlcHRpb24oKSAm
JiBjb21wYXJpc29uUmVzdWx0LnJldHVyblZhbHVlKCkgPiAwKSB7CisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFNlZW1zIGxpa2UgdGhpcyBzaG91bGQgYmUgaXNfZ3RlcSB0byBjb3JyZWN0bHkg
aGFuZGxlIHRoZSBzYW1lIHN0cmluZyBmb3VuZCB0d2ljZSBpbiBhIHJvdy4KKyAgICAgICAgICAg
ICAgICBpZiAoaXNfZ3QoZG9jdW1lbnRPcmRlcihzZWxlY3RlZFJhbmdlLnN0YXJ0LCByZXN1bHQu
cmFuZ2VzW2kgLSAxXS5lbmQpKSkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5kZXhG
b3JTZWxlY3Rpb24gPSBpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSByZXN1bHQucmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9IGNyZWF0ZUxp
dmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFS
VF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHQucmFuZ2VzW2ldKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjb21wYXJpc29uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmlzb25S
ZXN1bHQucmV0dXJuVmFsdWUoKSA8IDApIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2Vl
bXMgbGlrZSB0aGlzIHNob3VsZCBiZSBpc19sdGVxIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIHNh
bWUgc3RyaW5nIGZvdW5kIHR3aWNlIGluIGEgcm93LgorICAgICAgICAgICAgICAgIGlmIChpc19s
dChkb2N1bWVudE9yZGVyKHNlbGVjdGVkUmFuZ2UuZW5kLCByZXN1bHQucmFuZ2VzW2ldLnN0YXJ0
KSkpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uID0gaTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzYzLDEx
ICs3NjMsMTEgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFBhZ2U6OnJhbmdlT2ZTdHJpbmcoY29u
c3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IE9wdGlvbmFsPFMKICAgICBpZiAodGFyZ2V0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChyZWZlcmVuY2VS
YW5nZSAmJiByZWZlcmVuY2VSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLnBhZ2Uo
KSAhPSB0aGlzKQorICAgIGlmIChyZWZlcmVuY2VSYW5nZSAmJiByZWZlcmVuY2VSYW5nZS0+c3Rh
cnQuZG9jdW1lbnQoKS5wYWdlKCkgIT0gdGhpcykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIENhbldyYXAgY2FuV3JhcCA9IG9wdGlvbnMuY29udGFpbnMoV3JhcEFyb3VuZCkg
PyBDYW5XcmFwOjpZZXMgOiBDYW5XcmFwOjpObzsKLSAgICBGcmFtZSogZnJhbWUgPSByZWZlcmVu
Y2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJh
bWUoKSA6ICZtYWluRnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VSYW5nZSA/
IHJlZmVyZW5jZVJhbmdlLT5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbWFpbkZyYW1lKCk7
CiAgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBmcmFtZTsKICAgICBkbyB7CiAgICAgICAgIGlmIChh
dXRvIHJlc3VsdFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBm
cmFtZSA9PSBzdGFydEZyYW1lID8gcmVmZXJlbmNlUmFuZ2UgOiBXVEY6Om51bGxvcHQsIG9wdGlv
bnMgLSBXcmFwQXJvdW5kKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1Nl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmluZGV4IDJlZmM0MWUzZDQyNzMyNjU5MjdhZGU1Yjhi
YmE5NmE3NzEyMzY5ODUuLmYxNmViYzU4NmM3YTdjMDQxOGY0N2VmOTRjNjU1NjMyNzhiOTk1YjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlci5tbQpAQCAtNjMwLDcgKzYzMCw3IEBAIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OkhpZ2hsaWdodCogU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZmluZFRlbGVwaG9uZU51CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBtX3Bv
dGVudGlhbEhpZ2hsaWdodHMpIHsKLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgpID09IEhp
Z2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSAmJiBjcmVhdGVMaXZlUmFuZ2UoaGlnaGxpZ2h0
LT5yYW5nZSgpKS0+Y29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkpKQor
ICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1i
ZXJUeXBlICYmIGNvbnRhaW5zKGhpZ2hsaWdodC0+cmFuZ2UoKSwgKnNlbGVjdGlvblJhbmdlKSkK
ICAgICAgICAgICAgIHJldHVybiBoaWdobGlnaHQuZ2V0KCk7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGI2ZWExNTUzMDc5NzdkOWU1N2Qy
NGE4MDdlMGYyNjcyOGU5Y2VkYjIuLjk2YmRmNTRlNWMzYTIzMzUxZGFhOWE2MTIxYjE5MDc5ZTcz
YzQ5ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0x
OTc1LDcgKzE5NzUsNyBAQCBzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gYm9yZGVyQW5kVGV4dFJl
Y3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgQ29vcmRpbmF0ZQogewogICAgIFZlY3RvcjxG
bG9hdFJlY3Q+IHJlY3RzOwogCi0gICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgp
LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJhbmdlLnN0YXJ0
LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAg
ICBib29sIHVzZVZpc2libGVCb3VuZHMgPSBiZWhhdmlvci5jb250YWlucyhSZW5kZXJPYmplY3Q6
OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VWaXNpYmxlQm91bmRzKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGIwNDM2ZjJjZTczZjg5MmIzOWJjZmIxNTAyMTkyNTE1
ODU3ZGVjYjkuLjMxOWY3ZTIxMGE2ODgzZmI2OGJhMDRjN2QzYTkwMzMzYTc1YWE5N2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTIxNjEsMjcgKzIxNjEsNDUgQEAgdW5z
aWduZWQgSW50ZXJuYWxzOjpsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCYgc2NvcGUsIGNvbnN0IFJh
bmdlJiByYW5nZSkKICAgICByZXR1cm4gY2xhbXBUbzx1bnNpZ25lZD4oY2hhcmFjdGVyUmFuZ2Uo
bWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoc2NvcGUpLCBtYWtlU2ltcGxlUmFu
Z2UocmFuZ2UpKS5sZW5ndGgpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dChj
b25zdCBSYW5nZSYgcmFuZ2UpCitTdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dChjb25zdCBS
YW5nZSYgbGl2ZVJhbmdlKQogewotICAgIHJldHVybiByYW5nZS50ZXh0KCk7CisgICAgYXV0byBy
YW5nZSA9IG1ha2VTaW1wbGVSYW5nZShsaXZlUmFuZ2UpOworICAgIHJhbmdlLnN0YXJ0LmRvY3Vt
ZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIHBsYWluVGV4dChyYW5nZSk7CiB9CiAK
LVN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0b3Io
Y29uc3QgUmFuZ2UmIHJhbmdlKQorLy8gRklYTUU6IEZpbmQgYSBnb29kIHBsYWNlIGZvciB0aGlz
IGdlbmVyYWwgcHVycG9zZSBhbGdvcml0aG0uCitzdGF0aWMgU3RyaW5nIGpvaW4oVmVjdG9yPFN0
cmluZz4mJiBzdHJpbmdzKQogewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgZm9yIChTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKG1ha2VTaW1wbGVSYW5n
ZShyYW5nZSkpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRlcmF0b3Iu
YWR2YW5jZSgpKQotICAgICAgICByZXN1bHQuaW5zZXJ0KGJhY2t3YXJkc0l0ZXJhdG9yLnRleHQo
KS50b1N0cmluZygpLCAwKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIg
cmVzdWx0OworICAgIGZvciAoYXV0byYgc3RyaW5nIDogc3RyaW5ncykKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsK
K30KKworU3RyaW5nIEludGVybmFsczo6cmFuZ2VBc1RleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVy
YXRvcihjb25zdCBSYW5nZSYgbGl2ZVJhbmdlKQoreworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UobGl2ZVJhbmdlKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxh
eW91dCgpOworICAgIFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7CisgICAgZm9yIChTaW1wbGlmaWVk
QmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKHJhbmdlKTsgIWJhY2t3YXJk
c0l0ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKKyAgICAgICAg
c3RyaW5ncy5hcHBlbmQoYmFja3dhcmRzSXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCkpOworICAg
IHN0cmluZ3MucmV2ZXJzZSgpOworICAgIHJldHVybiBqb2luKFdURk1vdmUoc3RyaW5ncykpOwog
fQogCi1SZWY8UmFuZ2U+IEludGVybmFsczo6c3VicmFuZ2UoUmFuZ2UmIHJhbmdlLCB1bnNpZ25l
ZCByYW5nZUxvY2F0aW9uLCB1bnNpZ25lZCByYW5nZUxlbmd0aCkKK1JlZjxSYW5nZT4gSW50ZXJu
YWxzOjpzdWJyYW5nZShSYW5nZSYgbGl2ZVJhbmdlLCB1bnNpZ25lZCByYW5nZUxvY2F0aW9uLCB1
bnNpZ25lZCByYW5nZUxlbmd0aCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29s
dmVDaGFyYWN0ZXJSYW5nZShtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpLCB7IHJhbmdlTG9jYXRpb24s
IHJhbmdlTGVuZ3RoIH0pKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGxpdmVS
YW5nZSk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShyYW5nZSwgeyByYW5n
ZUxvY2F0aW9uLCByYW5nZUxlbmd0aCB9KSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gSW50ZXJuYWxz
OjpyYW5nZU9mU3RyaW5nTmVhckxvY2F0aW9uKGNvbnN0IFJhbmdlJiByYW5nZSwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCB1bnNpZ25lZCB0YXJnZXRPZmZzZXQpCitSZWZQdHI8UmFuZ2U+IEludGVybmFs
czo6cmFuZ2VPZlN0cmluZ05lYXJMb2NhdGlvbihjb25zdCBSYW5nZSYgbGl2ZVJhbmdlLCBjb25z
dCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIHRhcmdldE9mZnNldCkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlTGl2ZVJhbmdlKGZpbmRDbG9zZXN0UGxhaW5UZXh0KG1ha2VTaW1wbGVSYW5nZShyYW5nZSks
IHRleHQsIHsgfSwgdGFyZ2V0T2Zmc2V0KSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVS
YW5nZShsaXZlUmFuZ2UpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShmaW5kQ2xvc2VzdFBsYWluVGV4dChyYW5n
ZSwgdGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpKTsKIH0KIAogI2lmICFQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlLmNwcAppbmRleCAwNjc4Y2Q0M2Qz
NjFjNDg3ZDZkOGZlYmNmNGNlNmRhODY2N2VjNzg3Li45YzcxZTRmZTM3NTI0M2FkYTE3YjcyOWM3
MjY0NDUxM2ZhNWM2MDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5n
ZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RPTUV4Y2VwdGlvbi5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRXhl
Y1N0YXRlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbmNsdWRlICJX
ZWJLaXRET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERPTU5v
ZGVQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgpAQCAtMzU1LDkgKzM1
Niw3IEBAIGdzaG9ydCB3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfYm91bmRhcnlfcG9pbnRzKFdl
YktpdERPTVJhbmdlKiBzZWxmLCBndXNob3J0IGhvCiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgMCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19SQU5HRShzb3VyY2VSYW5nZSksIDApOwogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpSYW5nZSogY29udmVydGVkU291cmNl
UmFuZ2UgPSBXZWJLaXQ6OmNvcmUoc291cmNlUmFuZ2UpOwotICAgIGF1dG8gcmVzdWx0ID0gaXRl
bS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MoaG93LCAqY29udmVydGVkU291cmNl
UmFuZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gV2ViS2l0Ojpjb3JlKHNlbGYpLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoaG93LCAqV2ViS2l0Ojpjb3JlKHNvdXJjZVJhbmdlKSk7CiAgICAgaWYgKHJl
c3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICBhdXRvIGRlc2NyaXB0aW9uID0gV2ViQ29y
ZTo6RE9NRXhjZXB0aW9uOjpkZXNjcmlwdGlvbihyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNv
ZGUoKSk7CiAgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24ubGVnYWN5Q29kZSwgZGVzY3JpcHRpb24u
bmFtZSk7CkBAIC01MDgsMTUgKzUwNyw3IEBAIGdib29sZWFuIHdlYmtpdF9kb21fcmFuZ2VfaW50
ZXJzZWN0c19ub2RlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByCiAgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgRkFMU0UpOwog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSwgRkFM
U0UpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCBGQUxTRSk7
Ci0gICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6Tm9kZSogY29udmVydGVkUmVmTm9kZSA9IFdlYktpdDo6Y29yZShyZWZOb2RlKTsKLSAg
ICBhdXRvIHJlc3VsdCA9IGl0ZW0tPmludGVyc2VjdHNOb2RlKCpjb252ZXJ0ZWRSZWZOb2RlKTsK
LSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRp
b24gPSBXZWJDb3JlOjpET01FeGNlcHRpb246OmRlc2NyaXB0aW9uKHJlc3VsdC5yZWxlYXNlRXhj
ZXB0aW9uKCkuY29kZSgpKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5sZWdhY3lDb2RlLCBk
ZXNjcmlwdGlvbi5uYW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworICAgIHJldHVybiBXZWJLaXQ6OmNvcmUo
c2VsZiktPmludGVyc2VjdHNOb2RlKCpXZWJLaXQ6OmNvcmUocmVmTm9kZSkpOwogfQogCiBnc2hv
cnQgd2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX3BvaW50KFdlYktpdERPTVJhbmdlKiBzZWxmLCBX
ZWJLaXRET01Ob2RlKiByZWZOb2RlLCBnbG9uZyBvZmZzZXQsIEdFcnJvcioqIGVycm9yKQpAQCAt
NjMyLDkgKzYyMyw5IEBAIGdjaGFyKiB3ZWJraXRfZG9tX3JhbmdlX2dldF90ZXh0KFdlYktpdERP
TVJhbmdlKiBzZWxmKQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAw
KTsKLSAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50ZXh0KCkpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqV2ViS2l0Ojpj
b3JlKHNlbGYpKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwor
ICAgIHJldHVybiBjb252ZXJ0VG9VVEY4U3RyaW5nKHBsYWluVGV4dChyYW5nZSkpOwogfQogCiBH
X0dOVUNfRU5EX0lHTk9SRV9ERVBSRUNBVElPTlM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQpp
bmRleCBjZjI2OWExY2RkMzAyYTQzYjk3YWIyYjYwMDBjMGFkMzAyODBlODIyLi4zY2FkMmM1ZTgx
MGJmNGJiNjUzYTRkNDk1NmMwNzFkNWU4MmVhODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2Uu
bW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIldLQnVuZGxlQVBJQ2FzdC5oIgogI2ltcG9y
dCAiV0tET01JbnRlcm5hbHMuaCIKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Zpc2libGVVbml0
cy5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKQEAgLTQ5LDEyICs1MCw3
IEBAIC0gKGlkKV9pbml0V2l0aEltcGw6KFdlYkNvcmU6OlJhbmdlKilpbXBsCiAKIC0gKGlkKWlu
aXRXaXRoRG9jdW1lbnQ6KFdLRE9NRG9jdW1lbnQgKilkb2N1bWVudAogewotICAgIGF1dG8gcmFu
Z2UgPSBXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKCpXZWJLaXQ6OnRvV2ViQ29yZURvY3VtZW50KGRv
Y3VtZW50KSk7Ci0gICAgc2VsZiA9IFtzZWxmIF9pbml0V2l0aEltcGw6cmFuZ2UucHRyKCldOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwor
ICAgIHJldHVybiBbc2VsZiBfaW5pdFdpdGhJbXBsOldlYkNvcmU6OlJhbmdlOjpjcmVhdGUoKldl
YktpdDo6dG9XZWJDb3JlRG9jdW1lbnQoZG9jdW1lbnQpKS5wdHIoKV07CiB9CiAKIC0gKHZvaWQp
ZGVhbGxvYwpAQCAtMTE4LDcgKzExNCw5IEBAIC0gKE5TSW50ZWdlcillbmRPZmZzZXQKIAogLSAo
TlNTdHJpbmcgKil0ZXh0CiB7Ci0gICAgcmV0dXJuIF9pbXBsLT50ZXh0KCk7CisgICAgYXV0byBy
YW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqX2ltcGwpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50
KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIHBsYWluVGV4dChyYW5nZSk7CiB9CiAKIC0g
KEJPT0wpaXNDb2xsYXBzZWQKQEAgLTEyOCw4ICsxMjYsOSBAQCAtIChCT09MKWlzQ29sbGFwc2Vk
CiAKIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKIHsKLSAgICBfaW1wbC0+b3duZXJEb2N1bWVudCgp
LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiBjcmVh
dGVOU0FycmF5KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMobWFrZVNp
bXBsZVJhbmdlKCpfaW1wbCkpKS5hdXRvcmVsZWFzZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2UoKl9pbXBsKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKS5hdXRvcmVs
ZWFzZSgpOwogfQogCiAtIChXS0RPTVJhbmdlICopcmFuZ2VCeUV4cGFuZGluZ1RvV29yZEJvdW5k
YXJ5QnlDaGFyYWN0ZXJzOihOU1VJbnRlZ2VyKWNoYXJhY3RlcnMgaW5EaXJlY3Rpb246KFdLRE9N
UmFuZ2VEaXJlY3Rpb24pZGlyZWN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlLmNwcAppbmRleCA2M2YzYzc4NmU2ZmIyMTVjOWEyZjRlMjU5ZmFjOWU2MTFi
NmRiOGIyLi41YTI2ZTUzM2ZjMTVmZWZmMjVlZDgwYzcyN2QxM2UwYTc0ZWNkYmFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKQEAgLTQ0LDYgKzQ0
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5k
ZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlU2VsZWN0aW9u
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KQEAgLTk3LDIzICs5OCwzMiBAQCBSYW5nZSYgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZTo6Y29yZVJhbmdlKCkgY29uc3QKIAogUmVmPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6ZG9jdW1lbnQoKQogewotICAgIHJldHVybiBJbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKG1fcmFuZ2UtPm93bmVyRG9jdW1lbnQoKSk7
CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUobV9yYW5n
ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpKTsKIH0KIAogV2ViQ29yZTo6SW50UmVjdCBJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpib3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVz
KCkgY29uc3QKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBtX3JhbmdlLT5vd25lckRvY3VtZW50KCku
ZnJhbWUoKTsKLSAgICByZXR1cm4gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNs
b3NpbmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVjdDo6YWJz
b2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpKSkpKTsKKyAg
ICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpOworICAgIGF1dG8gZnJhbWUg
PSByYW5nZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICgh
dmlldykKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1dp
bmRvdyhlbmNsb3NpbmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9i
amVjdDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMocmFuZ2UpKSkpOwogfQogCiBSZWZQdHI8
V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNo
b3RPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQgPSBtX3Jh
bmdlLT5vd25lckRvY3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gb3duZXJEb2N1bWVudC5m
cmFtZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobV9yYW5nZSk7CisKKyAg
ICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZihyYW5nZS5zdGFydC5kb2N1bWVudCgpKTsKKworICAg
IGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKGRvY3VtZW50LT5mcmFtZSgpKTsKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBhdXRvIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CiAg
ICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMjEsMTMg
KzEzMSwxMSBAQCBSZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJl
bmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9wdGlvbgogICAgIExvY2FsRGVmYXVsdFN5c3Rl
bUFwcGVhcmFuY2UgbG9jYWxBcHBlYXJhbmNlKGZyYW1lVmlldy0+dXNlRGFya0FwcGVhcmFuY2Uo
KSk7CiAjZW5kaWYKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7Ci0KICAgICBW
aXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5n
ZShtX3JhbmdlKSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihyYW5nZSk7
CiAKICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IChvcHRpb25zICYgU25hcHNob3RPcHRpb25zRXhj
bHVkZURldmljZVNjYWxlRmFjdG9yKSA/IDEgOiBmcmFtZS0+cGFnZSgpLT5kZXZpY2VTY2FsZUZh
Y3RvcigpOwotICAgIEludFJlY3QgcGFpbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh1bmlvblJl
Y3RJZ25vcmluZ1plcm9SZWN0cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9yZGVyQW5kVGV4dFJl
Y3RzKG1ha2VTaW1wbGVSYW5nZShtX3JhbmdlKSkpKTsKKyAgICBJbnRSZWN0IHBhaW50UmVjdCA9
IGVuY2xvc2luZ0ludFJlY3QodW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0
OjphYnNvbHV0ZUJvcmRlckFuZFRleHRSZWN0cyhyYW5nZSkpKTsKICAgICBJbnRTaXplIGJhY2tp
bmdTdG9yZVNpemUgPSBwYWludFJlY3Quc2l6ZSgpOwogICAgIGJhY2tpbmdTdG9yZVNpemUuc2Nh
bGUoc2NhbGVGYWN0b3IpOwogCkBAIC0xNTUsNyArMTYzLDcgQEAgUmVmUHRyPFdlYkltYWdlPiBJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpyZW5kZXJlZEltYWdlKFNuYXBzaG90T3B0aW9ucyBv
cHRpb24KICAgICAgICAgcGFpbnRCZWhhdmlvci5hZGQoUGFpbnRCZWhhdmlvcjo6Rm9yY2VXaGl0
ZVRleHQpOwogCiAgICAgZnJhbWVWaWV3LT5zZXRQYWludEJlaGF2aW9yKHBhaW50QmVoYXZpb3Ip
OwotICAgIG93bmVyRG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CisgICAgZG9jdW1lbnQtPnVwZGF0
ZUxheW91dCgpOwogCiAgICAgZnJhbWVWaWV3LT5wYWludCgqZ3JhcGhpY3NDb250ZXh0LCBwYWlu
dFJlY3QpOwogICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihvbGRQYWludEJlaGF2aW9y
KTsKQEAgLTE2Nyw3ICsxNzUsOSBAQCBSZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9wdGlvbgogCiBTdHJpbmcg
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6dGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
cmFuZ2UtPnRleHQoKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2Up
OworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJu
IHBsYWluVGV4dChyYW5nZSk7CiB9CiAKIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
PiBjcmVhdGVIYW5kbGUoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5n
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9s
bGVyLmNwcAppbmRleCAyYTU3ZmQyMDllNjM1NzBiNzM4OTIzZjBiNTlmYjNjY2RiMmY0ZDQ0Li5i
OGMwN2I4YzI1NDA2MmRhZmJmZDNjYzY4NDIyNzFmYWRmNzYxMzI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC0zMDUs
NyArMzA1LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Y2godWlu
dDMyX3QgbWF0Y2hJbmRleCkKIHsKICAgICBpZiAobWF0Y2hJbmRleCA+PSBtX2ZpbmRNYXRjaGVz
LnNpemUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1hdGNo
ZXNbbWF0Y2hJbmRleF0uc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAg
RnJhbWUqIGZyYW1lID0gbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XS5zdGFydC5kb2N1bWVudCgp
LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMzYsNyAr
MzM2LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6c2VsZWN0RmluZE1hdGNoKHVpbnQzMl90IG1h
dGNoSW5kZXgpCiB7CiAgICAgaWYgKG1hdGNoSW5kZXggPj0gbV9maW5kTWF0Y2hlcy5zaXplKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21hdGNo
SW5kZXhdLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIEZyYW1lKiBm
cmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0uc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgp
OwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICBmcmFtZS0+c2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcAppbmRl
eCBmOTY0MTFhMTE2MDc2ODViMGZiZjQ5ZjEwOWRkYzU4MThjMTUyYjI3Li5iZjdhYzY2OTkxZGYz
NmY0ZGFhYTAyOTY0YjA1NDVmZjFhOTU5OTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcApAQCAtMTA5LDcgKzEwOSw3
IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVk
aXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgICAgIGF1dG8gc3Vycm91bmRpbmdTdGFydCA9
IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQoc2VsZWN0aW9uU3RhcnQpOwogICAgICAgICBhdXRvIHN1
cnJvdW5kaW5nUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3Vycm91bmRpbmdTdGFydCwgZW5kT2ZF
ZGl0YWJsZUNvbnRlbnQoc2VsZWN0aW9uU3RhcnQpKTsKICAgICAgICAgYXV0byBjb21wb3NpdGlv
blJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwotICAgICAgICBpZiAo
c3Vycm91bmRpbmdSYW5nZSAmJiBjb21wb3NpdGlvblJhbmdlICYmIGNyZWF0ZUxpdmVSYW5nZShz
dXJyb3VuZGluZ1JhbmdlKS0+Y29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJh
bmdlKS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKHN1cnJvdW5kaW5nUmFuZ2UgJiYgY29tcG9zaXRp
b25SYW5nZSAmJiBjb250YWlucygqc3Vycm91bmRpbmdSYW5nZSwgKmNvbXBvc2l0aW9uUmFuZ2Up
KSB7CiAgICAgICAgICAgICBhdXRvIGJlZm9yZVRleHQgPSBwbGFpblRleHQoeyBzdXJyb3VuZGlu
Z1JhbmdlLT5zdGFydCwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQgfSk7CiAgICAgICAgICAgICBw
b3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHQgPSBiZWZvcmVUZXh0ICsgcGxhaW5UZXh0
KHsgY29tcG9zaXRpb25SYW5nZS0+ZW5kLCBzdXJyb3VuZGluZ1JhbmdlLT5lbmQgfSk7CiAgICAg
ICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRDdXJzb3JQb3NpdGlvbiA9
IGJlZm9yZVRleHQubGVuZ3RoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGU5ZDY3ZjAxNzU3ZGVjNTkyMzE3M2UzYzNh
NWE3N2E0Y2MwOGNkN2IuLjEwZTlkMTg5NWZiZGM5YzM1MmMxYTZhMjYxOTUwOTg1ODViNDBiM2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tCkBAIC00MTg0LDcgKzQxODQsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVu
dEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogCiAg
ICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwog
ICAgIGF1dG8gcmFuZ2VPZkludGVyZXN0ID0gKm1ha2VTaW1wbGVSYW5nZShyYW5nZU9mSW50ZXJl
c3RTdGFydCwgcmFuZ2VPZkludGVyZXN0RW5kKTsKLSAgICBpZiAoc2VsZWN0aW9uUmFuZ2UgJiYg
cmFuZ2VzT3ZlcmxhcChjcmVhdGVMaXZlUmFuZ2UocmFuZ2VPZkludGVyZXN0KS5wdHIoKSwgY3Jl
YXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpKSB7CisgICAgaWYgKHNlbGVjdGlv
blJhbmdlICYmIGludGVyc2VjdHMocmFuZ2VPZkludGVyZXN0LCAqc2VsZWN0aW9uUmFuZ2UpKSB7
CiAgICAgICAgIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHN0ZDo6bWF4KHJh
bmdlT2ZJbnRlcmVzdFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7CiAgICAgICAgIGVuZE9mUmFuZ2VP
ZkludGVyZXN0SW5TZWxlY3Rpb24gPSBzdGQ6Om1pbihyYW5nZU9mSW50ZXJlc3RFbmQsIHNlbGVj
dGlvbkVuZCk7CiAgICAgfSBlbHNlIHsKQEAgLTQyNDksNyArNDI0OSw3IEBAIHZvaWQgV2ViUGFn
ZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJl
cXVlc3QgcmVxdWVzCiAgICAgY29udGV4dC5jb250ZXh0QmVmb3JlID0gbWFrZVN0cmluZyhjb250
ZXh0QmVmb3JlU3RhcnQsIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7CiAgICAg
Y29udGV4dC5zZWxlY3RlZFRleHQgPSBtYWtlU3RyaW5nKHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJ
blNlbGVjdGlvbiwgZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7CiAgICAgY29udGV4
dC5jb250ZXh0QWZ0ZXIgPSBtYWtlU3RyaW5nKGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rp
b24sIGNvbnRleHRBZnRlckVuZCk7Ci0gICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgcmFuZ2Vz
T3ZlcmxhcChjcmVhdGVMaXZlUmFuZ2UocmFuZ2VPZkludGVyZXN0KS5wdHIoKSwgY3JlYXRlTGl2
ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdlKS5wdHIoKSkpIHsKKyAgICBpZiAoY29tcG9zaXRpb25S
YW5nZSAmJiBpbnRlcnNlY3RzKHJhbmdlT2ZJbnRlcmVzdCwgKmNvbXBvc2l0aW9uUmFuZ2UpKSB7
CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvblN0YXJ0KGNyZWF0ZUxlZ2FjeUVk
aXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5zdGFydCkpOwogICAgICAgICBWaXNpYmxl
UG9zaXRpb24gY29tcG9zaXRpb25FbmQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBv
c2l0aW9uUmFuZ2UtPmVuZCkpOwogICAgICAgICBjb250ZXh0Lm1hcmtlZFRleHQgPSBtYWtlU3Ry
aW5nKGNvbXBvc2l0aW9uU3RhcnQsIGNvbXBvc2l0aW9uRW5kKTsKQEAgLTQyNjUsNyArNDI2NSw3
IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRF
ZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgIHdoaWxlICghaXRlcmF0b3IuYXRF
bmQoKSkgewogICAgICAgICAgICAgaWYgKCFpdGVyYXRvci50ZXh0KCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgYXV0byBhYnNvbHV0ZUJvdW5kaW5nQm94ID0gdW5pb25SZWN0KFJlbmRl
ck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMoaXRlcmF0b3IucmFuZ2UoKSwgUmVuZGVyT2JqZWN0
OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6SWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucykpOwotICAg
ICAgICAgICAgICAgIHJlY3RzLmFwcGVuZCh7IGl0ZXJhdG9yLnJhbmdlKCkuc3RhcnQuY29udGFp
bmVyLT5kb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGFic29sdXRlQm91bmRp
bmdCb3gpLCB7IG9mZnNldFNvRmFyKyssIHN0cmlkZSB9IH0pOworICAgICAgICAgICAgICAgIHJl
Y3RzLmFwcGVuZCh7IGl0ZXJhdG9yLnJhbmdlKCkuc3RhcnQuZG9jdW1lbnQoKS52aWV3KCktPmNv
bnRlbnRzVG9Sb290VmlldyhhYnNvbHV0ZUJvdW5kaW5nQm94KSwgeyBvZmZzZXRTb0ZhcisrLCBz
dHJpZGUgfSB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2Uo
c3RyaWRlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCBmZjc0MGY1ZmVjZDM3MzI1NDI1MDkzNmVlOGQx
YWE4MzBlZWZkNTEwLi5jOWU2ZTM3NTgzYjdhZWZkZjdkNmYxMDdmNDk0YjZlZGI0NTBlODA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQpAQCAtODc3LDcgKzg3Nyw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFj
dGlvbkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpCiAgICAgICAg
IGlmICghYWN0aW9uQ29udGV4dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1
dG8gdmlldyA9IGFjdGlvbkNvbnRleHQtPnJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQo
KS52aWV3KCk7CisgICAgICAgIGF1dG8gdmlldyA9IGFjdGlvbkNvbnRleHQtPnJhbmdlLnN0YXJ0
LmRvY3VtZW50KCkudmlldygpOwogICAgICAgICBpZiAoIXZpZXcpCiAgICAgICAgICAgICBjb250
aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KaW5kZXggZGU1ZWE4ZDZiYzkwM2Rk
ZWVhYWY2MTA0NGY0NDg0ODE5ZDZiZWVhMS4uNWI4Y2I2YzM4YzdhNWIxNjY3NGJmMTRhYzAxMjBj
MzVmZGYzYWRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCkBAIC01NzAsMTAgKzU3
MCw5IEBAIC0gKENHUmVjdClib3VuZGluZ0JveAogLSAoTlNSZWN0KWJvdW5kaW5nQm94CiAjZW5k
aWYKIHsKLSAgICAvLyBGSVhNRTogVGhlIGNhbGwgdG8gdXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzIHNob3VsZCBiZSBtb3ZlZCBpbnRvIFdlYkNvcmU6OlJhbmdlLgotICAgIGF1
dG8mIHJhbmdlID0gKmNvcmUoc2VsZik7Ci0gICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiB1bmlvblJlY3Qo
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKSk7
CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqY29yZShzZWxmKSk7CisgICAgcmFu
Z2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKKyAgICByZXR1cm4gdW5pb25SZWN0KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMo
cmFuZ2UpKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTU4Myw3ICs1ODIsNyBAQCAtIChD
R0ltYWdlUmVmKXJlbmRlcmVkSW1hZ2VGb3JjaW5nQmxhY2tUZXh0OihCT09MKWZvcmNlQmxhY2tU
ZXh0CiAjZW5kaWYKIHsKICAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpjb3JlKHNl
bGYpKTsKLSAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cihyYW5nZS5zdGFydC5jb250YWluZXIt
PmRvY3VtZW50KCkuZnJhbWUoKSk7CisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIocmFuZ2Uu
c3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1
cm4gbmlsOwogCkBAIC02MDIsNyArNjAxLDcgQEAgLSAoQ0dJbWFnZVJlZilyZW5kZXJlZEltYWdl
Rm9yY2luZ0JsYWNrVGV4dDooQk9PTClmb3JjZUJsYWNrVGV4dAogLSAoTlNBcnJheSAqKXRleHRS
ZWN0cwogewogICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKmNvcmUoc2VsZikpOwot
ICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIHJldHVybiBjcmVhdGVOU0FycmF5
KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKS5hdXRvcmVsZWFzZSgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0KaW5kZXggNWVlMGJjZGZk
OTk3NDM3MmEzZWJjNGFkMmE4N2FmODNiZGY1M2Y1MS4uMjg3NjYwZmVjYWU5ODZkZjliMzlkOGQ1
N2UwM2ViYmNkMGY5NDE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTVJhbmdlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5t
bQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9KU0V4ZWNTdGF0ZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgor
I2ltcG9ydCA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGhyZWFk
Q2hlY2suaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KICNpbXBvcnQg
PFdlYkNvcmUvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oPgpAQCAtOTIsNyArOTMsOSBAQCAtIChE
T01Ob2RlICopY29tbW9uQW5jZXN0b3JDb250YWluZXIKIC0gKE5TU3RyaW5nICopdGV4dAogewog
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4gSU1Q
TC0+dGV4dCgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKklNUEwpOworICAg
IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIHBsYWlu
VGV4dChyYW5nZSk7CiB9CiAKIC0gKHZvaWQpc2V0U3RhcnQ6KERPTU5vZGUgKilyZWZOb2RlIG9m
ZnNldDooaW50KW9mZnNldApAQCAtMTcwLDcgKzE3Myw3IEBAIC0gKHNob3J0KWNvbXBhcmVCb3Vu
ZGFyeVBvaW50czoodW5zaWduZWQgc2hvcnQpaG93IHNvdXJjZVJhbmdlOihET01SYW5nZSAqKXNv
dXJjCiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGlmICgh
c291cmNlUmFuZ2UpCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9uKCk7Ci0gICAgcmV0
dXJuIHJhaXNlT25ET01FcnJvcihJTVBMLT5jb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5n
cyhob3csICpjb3JlKHNvdXJjZVJhbmdlKSkpOworICAgIHJldHVybiByYWlzZU9uRE9NRXJyb3Io
SU1QTC0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKGhvdywgKmNvcmUoc291cmNlUmFuZ2UpKSk7CiB9
CiAKIC0gKHZvaWQpZGVsZXRlQ29udGVudHMKQEAgLTI0NCw3ICsyNDcsNyBAQCAtIChCT09MKWlu
dGVyc2VjdHNOb2RlOihET01Ob2RlICopcmVmTm9kZQogICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBpZiAoIXJlZk5vZGUpCiAgICAgICAgIHJhaXNlVHlwZUVy
cm9yRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHJhaXNlT25ET01FcnJvcihJTVBMLT5pbnRlcnNl
Y3RzTm9kZSgqY29yZShyZWZOb2RlKSkpOworICAgIHJldHVybiBJTVBMLT5pbnRlcnNlY3RzTm9k
ZSgqY29yZShyZWZOb2RlKSk7CiB9CiAKIC0gKHNob3J0KWNvbXBhcmVQb2ludDooRE9NTm9kZSAq
KXJlZk5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQppbmRleCBhZTVjNDliZjE0NzU4ZjMxNDA5NDIw
ZDlmNmQ1NWEyZTYzNjI2MWM5Li41ODcxZDAwOGFhY2Y3YTIyY2I4Y2Q2ZGNmYmFmNGY0YjQ3NDdj
MzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRl
bnNpb25zLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVu
c2lvbnMubW0KQEAgLTUxLDcgKzUxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTFRleHRBcmVh
RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9J
bmxpbmVCb3guaD4KLSNpbXBvcnQgPFdlYkNvcmUvTm9kZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9O
b2RlVHJhdmVyc2FsLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlckJsb2NrLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckJsb2NrRmxvdy5oPgpA
QCAtMTI0LDkgKzEyNCwyMSBAQCAtICh2b2lkKWV4dGVuZDooVUludDMyKWFtb3VudCBpbkRpcmVj
dGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiAgICAgICAgIHJhbmdl
LnNldEVuZCgqZW5kLmNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgp
KTsKIH0KIAorLy8gRklYTUU6IENvdWxkIHVzZSBTaW1wbGVSYW5nZTo6aW50ZXJzZWN0aW5nTm9k
ZXMgaW5zdGVhZCwgaWYgd2UgZGlkIG5vdCB3YW50IHRvIHByZXNlcnZlIHRoZSBoaXN0b3JpY2Fs
IGJlaGF2aW9yIG9mIHJldHVybmluZyBhIG5vZGUgd2l0aCBubyBjaGlsZHJlbiB3aGVuIHRoZSBy
YW5nZSBzdGFydHMgaW5zaWRlIGl0Lgorc3RhdGljIFdlYkNvcmU6Ok5vZGUqIGZpcnN0Tm9kZUFm
dGVyKGNvbnN0IFdlYkNvcmU6OkJvdW5kYXJ5UG9pbnQmIHBvaW50KQoreworICAgIGlmIChwb2lu
dC5jb250YWluZXItPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHBvaW50
LmNvbnRhaW5lci5wdHIoKTsKKyAgICBpZiAoYXV0byBjaGlsZCA9IHBvaW50LmNvbnRhaW5lci0+
dHJhdmVyc2VUb0NoaWxkQXQocG9pbnQub2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGNoaWxkOwor
ICAgIGlmICghcG9pbnQub2Zmc2V0KQorICAgICAgICByZXR1cm4gcG9pbnQuY29udGFpbmVyLnB0
cigpOworICAgIHJldHVybiBXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGls
ZHJlbihwb2ludC5jb250YWluZXIpOworfQorCiAtIChET01Ob2RlICopZmlyc3ROb2RlCiB7Ci0g
ICAgcmV0dXJuIGtpdChjb3JlKHNlbGYpLT5maXJzdE5vZGUoKSk7CisgICAgcmV0dXJuIGtpdChm
aXJzdE5vZGVBZnRlcihtYWtlU2ltcGxlUmFuZ2UoKmNvcmUoc2VsZikpLnN0YXJ0KSk7CiB9CiAK
IEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVy
YXRpb25zLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMu
bW0KaW5kZXggY2FkMzU5MWJlNjMzMjNlZTY3YWE2YWY4ZDEzZTQ1ZmQ3MTYwZGFhOC4uNzM4YjRm
OGYyNDg0ODRmZDI3N2NiNzI4YzI4MDI4ZDdiOWMwMDg1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KQEAgLTE5MSw4ICsxOTEsOCBAQCAt
IChXZWJBcmNoaXZlICopd2ViQXJjaGl2ZQogCiAtIChOU1N0cmluZyAqKW1hcmt1cFN0cmluZwog
ewotICAgIGF1dG8mIHJhbmdlID0gKmNvcmUoc2VsZik7Ci0gICAgcmV0dXJuIFN0cmluZyB7IGRv
Y3VtZW50VHlwZVN0cmluZyhyYW5nZS5vd25lckRvY3VtZW50KCkpICsgc2VyaWFsaXplUHJlc2Vy
dmluZ1Zpc3VhbEFwcGVhcmFuY2UobWFrZVNpbXBsZVJhbmdlKHJhbmdlKSwgbnVsbHB0ciwgQW5u
b3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVzKSB9OworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxl
UmFuZ2UoKmNvcmUoc2VsZikpOworICAgIHJldHVybiBTdHJpbmcgeyBkb2N1bWVudFR5cGVTdHJp
bmcocmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKSkgKyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBw
ZWFyYW5jZShyYW5nZSwgbnVsbHB0ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVzKSB9Owog
fQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlBERlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlBERlZpZXcu
bW0KaW5kZXggMWJjNjdkMzY4NDI2Y2M4OTFiM2U1MDc5ZTJiNmRmMzJhMTA2ODk5OC4uZmI3NDIw
OGY5OThjM2NhYjRmNWFmN2VjM2M3YTQ2YzIyOTkyMjFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbQpAQCAtNjM2LDIxICs2MzYsMTggQEAgLSAo
Qk9PTCltYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkCiAgICAgcmV0dXJuIE5POwogfQog
Ci1zdGF0aWMgQk9PTCBpc0ZyYW1lSW5SYW5nZShXZWJGcmFtZSAqZnJhbWUsIERPTVJhbmdlICpy
YW5nZSkKK3N0YXRpYyBib29sIGlzRnJhbWVJblJhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwg
Y29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIEJPT0wgaW5SYW5nZSA9
IE5POwotICAgIGZvciAoYXV0byogb3duZXJFbGVtZW50ID0gY29yZShmcmFtZSktPm93bmVyRWxl
bWVudCgpOyBvd25lckVsZW1lbnQ7IG93bmVyRWxlbWVudCA9IG93bmVyRWxlbWVudC0+ZG9jdW1l
bnQoKS5mcmFtZSgpLT5vd25lckVsZW1lbnQoKSkgewotICAgICAgICBpZiAoJm93bmVyRWxlbWVu
dC0+ZG9jdW1lbnQoKSA9PSAmY29yZShyYW5nZSktPm93bmVyRG9jdW1lbnQoKSkgewotICAgICAg
ICAgICAgaW5SYW5nZSA9IFtyYW5nZSBpbnRlcnNlY3RzTm9kZTpraXQob3duZXJFbGVtZW50KV07
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIGZvciAoYXV0byogb3duZXJFbGVt
ZW50ID0gZnJhbWUub3duZXJFbGVtZW50KCk7IG93bmVyRWxlbWVudDsgb3duZXJFbGVtZW50ID0g
b3duZXJFbGVtZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKSB7CisgICAgICAgIGlmICgm
b3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS5zdGFydC5kb2N1bWVudCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGludGVyc2VjdHMocmFuZ2UsICpvd25lckVsZW1lbnQpOwogICAgIH0K
LSAgICByZXR1cm4gaW5SYW5nZTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC0gKE5TVUludGVn
ZXIpY291bnRNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgaW5ET01SYW5nZTooRE9N
UmFuZ2UgKilyYW5nZSBvcHRpb25zOihXZWJGaW5kT3B0aW9ucylvcHRpb25zIGxpbWl0OihOU1VJ
bnRlZ2VyKWxpbWl0IG1hcmtNYXRjaGVzOihCT09MKW1hcmtNYXRjaGVzCiB7Ci0gICAgaWYgKHJh
bmdlICYmICFpc0ZyYW1lSW5SYW5nZShbZGF0YVNvdXJjZSB3ZWJGcmFtZV0sIHJhbmdlKSkKKyAg
ICBpZiAocmFuZ2UgJiYgIWlzRnJhbWVJblJhbmdlKCpjb3JlKFtkYXRhU291cmNlIHdlYkZyYW1l
XSksIG1ha2VTaW1wbGVSYW5nZSgqY29yZShyYW5nZSkpKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBQREZTZWxlY3Rpb24gKnByZXZpb3VzTWF0Y2ggPSBuaWw7CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2RmMDhiYTVhMDQ0YmI0MTk2YmJk
MGU1NTBiZDM2ODU0NGY5OTNiMi4uNWM0NGZhNzRjNmRkNGYxMzU0N2FhODBiZWQ1ZjUxMzVjZGRi
N2UyNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDIwLTA4LTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgYWxtb3N0IGFsbCB0aGUgcmVtYWluaW5nIHVzZXMgb2YgbGl2
ZSByYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNTc1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6IEFkZGVkIGEgdGVzdCBjYXNlIGZvciBhIG5vbi11c2Vy
LWFnZW50IHNoYWRvdyB0cmVlLgorCiAyMDIwLTA4LTI2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVk
YXJkQGFwcGxlLmNvbT4KIAogICAgICAgIFt3ZWJraXRjb3JlcHldIFN0YW5kYXJkIFBvcGVuIG1v
Y2tpbmcgQVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvVGVzdFdlYktpdEFQSS54Y3NjaGVtZSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2oveGNzaGFyZWRkYXRh
L3hjc2NoZW1lcy9UZXN0V2ViS2l0QVBJLnhjc2NoZW1lCmluZGV4IDVmNWVjMmU0YWVjMzllZGMz
OWZjN2Y4NWM3ZDk2N2U1YzQ5NDY5NGUuLjBkMjRlZTM2OTNlNWYxMmFhYzQ0ZGU2MTQzMjlmNGU5
OTk2ZTRkODIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9UZXN0V2ViS2l0QVBJLnhjc2NoZW1lCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2oveGNzaGFyZWRk
YXRhL3hjc2NoZW1lcy9UZXN0V2ViS2l0QVBJLnhjc2NoZW1lCkBAIC01MCw2ICs1MCwxMiBAQAog
ICAgICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6VGVzdFdlYktpdEFQ
SS54Y29kZXByb2oiPgogICAgICAgICAgPC9CdWlsZGFibGVSZWZlcmVuY2U+CiAgICAgICA8L0J1
aWxkYWJsZVByb2R1Y3RSdW5uYWJsZT4KKyAgICAgIDxDb21tYW5kTGluZUFyZ3VtZW50cz4KKyAg
ICAgICAgIDxDb21tYW5kTGluZUFyZ3VtZW50CisgICAgICAgICAgICBhcmd1bWVudCA9ICItLWd0
ZXN0X2ZpbHRlcj0qRG9jdW1lbnRPcmRlcioiCisgICAgICAgICAgICBpc0VuYWJsZWQgPSAiWUVT
Ij4KKyAgICAgICAgIDwvQ29tbWFuZExpbmVBcmd1bWVudD4KKyAgICAgIDwvQ29tbWFuZExpbmVB
cmd1bWVudHM+CiAgICA8L0xhdW5jaEFjdGlvbj4KICAgIDxQcm9maWxlQWN0aW9uCiAgICAgICBi
dWlsZENvbmZpZ3VyYXRpb24gPSAiUmVsZWFzZSIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNwcAppbmRleCAwN2U2N2Q0Y2QwY2FkNWI2
NmI5Yjk2N2ZjNjk1NDk1MDAyYjc0MzYxLi45OWM2MDBjMmU4MzQxODI1NjYyMGZlMmM0MDExYWI1
ZGIwNzBiNWVjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
RG9jdW1lbnRPcmRlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0RvY3VtZW50T3JkZXIuY3BwCkBAIC0yNSwxMyArMjUsMTQgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogCi0jaW5jbHVkZSA8V2ViQ29yZS9Cb3VuZGFyeVBvaW50Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEJvZHlFbGVtZW50Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MRGl2RWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TEh0bWxFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGV4dEFyZWFFbGVtZW50Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3NpdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhZG93
Um9vdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oPgogCiAjZGVmaW5lIEVYUEVDVF9CT1RIKGEs
IGIsIGZvcndhcmQsIHJldmVyc2VkKSBkbyB7IEVYUEVDVF9TVFJFUShzdHJpbmcoZG9jdW1lbnRP
cmRlcihhLCBiKSksIGZvcndhcmQpOyBFWFBFQ1RfU1RSRVEoc3RyaW5nKGRvY3VtZW50T3JkZXIo
YiwgYSkpLCByZXZlcnNlZCk7IH0gd2hpbGUgKDApCkBAIC0zOSw2ICs0MCwxNCBAQAogI2RlZmlu
ZSBFWFBFQ1RfTEVTUyhhLCBiKSBFWFBFQ1RfQk9USChhLCBiLCAibGVzcyIsICJncmVhdGVyIikK
ICNkZWZpbmUgRVhQRUNUX1VOT1JERVJFRChhLCBiKSBFWFBFQ1RfQk9USChhLCBiLCAidW5vcmRl
cmVkIiwgInVub3JkZXJlZCIpCiAKKyNkZWZpbmUgRVhQRUNUX0NPTlRBSU5TX1NFTEYoYSkgRVhQ
RUNUX1RSVUUoY29udGFpbnMoYSwgYSkpCisjZGVmaW5lIEVYUEVDVF9ORVNURUQoYSwgYikgZG8g
eyBFWFBFQ1RfVFJVRShjb250YWlucyhhLCBiKSk7IEVYUEVDVF9GQUxTRShjb250YWlucyhiLCBh
KSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIEVYUEVDVF9OT1RfQ09OVEFJTkVEKGEsIGIpIGRvIHsg
RVhQRUNUX0ZBTFNFKGNvbnRhaW5zKGEsIGIpKTsgRVhQRUNUX0ZBTFNFKGNvbnRhaW5zKGIsIGEp
KTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFWFBFQ1RfSU5URVJTRUNUU19TRUxGKGEpIEVYUEVD
VF9UUlVFKGludGVyc2VjdHMoYSwgYSkpCisjZGVmaW5lIEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhf
V0FZUyhhLCBiKSBkbyB7IEVYUEVDVF9UUlVFKGludGVyc2VjdHMoYSwgYikpOyBFWFBFQ1RfVFJV
RShpbnRlcnNlY3RzKGIsIGEpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRVhQRUNUX05PVF9JTlRF
UlNFQ1RJTkdfQk9USF9XQVlTKGEsIGIpIGRvIHsgRVhQRUNUX0ZBTFNFKGludGVyc2VjdHMoYSwg
YikpOyBFWFBFQ1RfRkFMU0UoaW50ZXJzZWN0cyhiLCBhKSk7IH0gd2hpbGUgKDApCisKIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0xNDEs
NiArMTUwLDEwIEBAIFRFU1QoRG9jdW1lbnRPcmRlciwgTm9kZSkKIAogICAgIGF1dG8mIGggPSAq
Zy0+aW5uZXJUZXh0RWxlbWVudCgpOwogICAgIEVYUEVDVF9MRVNTKGJvZHksIGgpOworCisgICAg
YXV0byYgaSA9IGEtPmF0dGFjaFNoYWRvdyh7IFNoYWRvd1Jvb3RNb2RlOjpDbG9zZWQgfSkucmVs
ZWFzZVJldHVyblZhbHVlKCk7CisgICAgRVhQRUNUX0xFU1MoYm9keSwgaSk7CisgICAgRVhQRUNU
X0xFU1MoaSwgZCk7CiB9CiAKIFRFU1QoRG9jdW1lbnRPcmRlciwgQm91bmRhcnlQb2ludE9mZnNl
dFplcm8pCkBAIC0xOTcsNiArMjEwLDcgQEAgVEVTVChEb2N1bWVudE9yZGVyLCBCb3VuZGFyeVBv
aW50T2Zmc2V0cykKIAogICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50
LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpKTsKICAgICBFWFBFQ1RfTEVTUyht
YWtlQm91bmRhcnlQb2ludChib2R5LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEp
KTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSwgbWFrZUJvdW5k
YXJ5UG9pbnQoZG9jdW1lbnQsIDEpKTsKIAogICAgIGF1dG8gYSA9IEhUTUxEaXZFbGVtZW50Ojpj
cmVhdGUoZG9jdW1lbnQpOwogICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CkBAIC00NTIsNCArNDY2
LDI0NCBAQCBURVNUKERvY3VtZW50T3JkZXIsIFBvc2l0aW9ucykKICAgICBURVNUX0FMTF9QT1NJ
VElPTl9UWVBFU19CKG1ha2VQb3NpdGlvbkFmdGVyKGRvY3VtZW50KSwgaCwgMCwgZ3JlYXRlcik7
CiB9CiAKK1RFU1QoRG9jdW1lbnRPcmRlciwgSXNQb2ludEluUmFuZ2UpCit7CisgICAgYXV0byBk
b2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CisgICAgYXV0byYgZG9jdW1lbnRFbGVtZW50ID0g
KmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBhdXRvJiBib2R5ID0gKmRvY3VtZW50
LT5ib2R5KCk7CisKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwg
MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoaXNQb2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNv
bnRlbnRzKGRvY3VtZW50KSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDIpKSk7CisgICAg
RVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KGRvY3VtZW50KSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpKTsKKyAgICBFWFBFQ1RfVFJV
RShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQp
LCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSkpOworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJ
blJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3Vu
ZGFyeVBvaW50KGJvZHksIDIpKSk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJblJhbmdlKG1h
a2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFy
eVBvaW50KGRvY3VtZW50RWxlbWVudCwgMCkpLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSkp
OworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91
bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDApKSwgbWFr
ZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpKTsKKworICAgIGF1dG8gYSA9IEhUTUxEaXZFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50SW5SYW5nZShtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQb2ludChh
LCAwKSkpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VCb3VuZGFyeVBvaW50KGEsIDApKSk7CisKKyAgICBi
b2R5LmFwcGVuZENoaWxkKGEpOworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGEs
IDApKSk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVNpbXBsZVJhbmdlKG1h
a2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpLCBt
YWtlQm91bmRhcnlQb2ludChhLCAwKSkpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50SW5SYW5n
ZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91
bmRhcnlQb2ludChib2R5LCAwKSksIG1ha2VCb3VuZGFyeVBvaW50KGEsIDApKSk7CisgICAgRVhQ
RUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50
KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMSkpLCBtYWtlQm91bmRhcnlQ
b2ludChhLCAwKSkpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxl
UmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMSksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3Vt
ZW50LCAxKSksIG1ha2VCb3VuZGFyeVBvaW50KGEsIDApKSk7CisgICAgRVhQRUNUX1RSVUUoaXNQ
b2ludEluUmFuZ2UobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDApLCBt
YWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpLCBtYWtlQm91bmRhcnlQb2ludChhLCAwKSkp
OworCisgICAgYXV0byBiID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAg
Ym9keS5hcHBlbmRDaGlsZChiKTsKKworICAgIGF1dG8gYyA9IEhUTUxEaXZFbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQpOworICAgIGItPmFwcGVuZENoaWxkKGMpOworCisgICAgYXV0byBkID0gSFRN
TERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYS0+YXBwZW5kQ2hpbGQoZCk7CisK
KyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRv
IGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBlLT5hcHBlbmRDaGls
ZChmKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQb2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGJvZHkpLCBtYWtlQm91bmRhcnlQb2ludChmLCAwKSkpOworCisgICAgYXV0
byBnID0gSFRNTFRleHRBcmVhRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvJiBo
ID0gKmctPmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBjLT5hcHBlbmRDaGlsZChnKTsKKyAgICBF
WFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
Ym9keSksIG1ha2VCb3VuZGFyeVBvaW50KGgsIDApKSk7Cit9CisKK1RFU1QoRG9jdW1lbnRPcmRl
ciwgUmFuZ2VDb250YWluc1JhbmdlKQoreworICAgIGF1dG8gZG9jdW1lbnQgPSBjcmVhdGVEb2N1
bWVudCgpOworICAgIGF1dG8mIGRvY3VtZW50RWxlbWVudCA9ICpkb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCk7CisgICAgYXV0byYgYm9keSA9ICpkb2N1bWVudC0+Ym9keSgpOworCisgICAgRVhQ
RUNUX0NPTlRBSU5TX1NFTEYobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50
KSk7CisgICAgRVhQRUNUX0NPTlRBSU5TX1NFTEYobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGRvY3VtZW50RWxlbWVudCkpOworICAgIEVYUEVDVF9DT05UQUlOU19TRUxGKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSk7CisKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpKTsKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhib2R5KSk7CisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoZG9jdW1lbnRFbGVtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KGJvZHkpKTsKKworICAgIEVYUEVDVF9ORVNURUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxl
bWVudCkpOworCisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoZG9jdW1lbnRFbGVtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkp
KTsKKworICAgIEVYUEVDVF9ORVNURUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRv
Y3VtZW50KSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSkp
OworICAgIEVYUEVDVF9ORVNURUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3Vt
ZW50KSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSkpOwor
ICAgIEVYUEVDVF9OT1RfQ09OVEFJTkVEKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhk
b2N1bWVudCksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikp
KTsKKworICAgIEVYUEVDVF9ORVNURUQobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50
KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDIpKSwgbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSk7CisgICAgRVhQRUNUX05PVF9DT05UQUlO
RUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVNpbXBsZVJh
bmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9j
dW1lbnQsIDIpKSk7CisKKyAgICBFWFBFQ1RfTk9UX0NPTlRBSU5FRChtYWtlU2ltcGxlUmFuZ2Uo
bWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVu
dEVsZW1lbnQsIDApKSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsKKyAg
ICBFWFBFQ1RfTkVTVEVEKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVu
dCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDApKSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VC
b3VuZGFyeVBvaW50KGJvZHksIDApKSk7CisKKyAgICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBFWFBFQ1RfTk9UX0NPTlRBSU5FRChtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoYSkpOworCisgICAgYm9keS5hcHBlbmRDaGlsZChhKTsKKworICAgIGF1dG8gYiA9IEhUTUxE
aXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYik7CisK
KyAgICBhdXRvIGMgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBiLT5h
cHBlbmRDaGlsZChjKTsKKworICAgIGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQpOworICAgIGEtPmFwcGVuZENoaWxkKGQpOworCisgICAgYXV0byBlID0gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byBmID0gSFRNTERpdkVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCk7CisgICAgZS0+YXBwZW5kQ2hpbGQoZik7CisgICAgRVhQRUNUX05PVF9D
T05UQUlORUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoZikpOworCisgICAgYXV0byBnID0gSFRNTFRleHRBcmVhRWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvJiBoID0gKmctPmlubmVyVGV4dEVsZW1l
bnQoKTsKKyAgICBjLT5hcHBlbmRDaGlsZChnKTsKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGgpKTsKK30KKworVEVTVChEb2N1bWVudE9yZGVyLCBSYW5nZUludGVyc2VjdHNSYW5nZSkK
K3sKKyAgICBhdXRvIGRvY3VtZW50ID0gY3JlYXRlRG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1
bWVudEVsZW1lbnQgPSAqZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIGF1dG8mIGJv
ZHkgPSAqZG9jdW1lbnQtPmJvZHkoKTsKKworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX1NFTEYobWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSk7CisgICAgRVhQRUNUX0lOVEVS
U0VDVFNfU0VMRihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50
KSk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfU0VMRihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoYm9keSkpOworCisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhkb2N1bWVudEVsZW1lbnQpKTsKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dB
WVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dB
WVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCksIG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSk7CisKKyAgICBFWFBFQ1RfSU5URVJTRUNU
U19CT1RIX1dBWVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCkpOworCisgICAgRVhQ
RUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhk
b2N1bWVudEVsZW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSkpOwor
CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhkb2N1bWVudCksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1
bWVudCwgMCkpKTsKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dBWVMobWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFy
eVBvaW50KGRvY3VtZW50LCAxKSkpOworICAgIEVYUEVDVF9OT1RfSU5URVJTRUNUSU5HX0JPVEhf
V0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxl
UmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDIpKSk7CisKKyAgICBFWFBFQ1RfSU5U
RVJTRUNUU19CT1RIX1dBWVMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3Vt
ZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDIpKSwgbWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9X
QVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VTaW1wbGVS
YW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSksIG1ha2VCb3VuZGFyeVBvaW50KGRv
Y3VtZW50LCAyKSkpOworCisgICAgRVhQRUNUX05PVF9JTlRFUlNFQ1RJTkdfQk9USF9XQVlTKG1h
a2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFy
eVBvaW50KGRvY3VtZW50RWxlbWVudCwgMCkpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoYm9keSkpOworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlU2ltcGxlUmFu
Z2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5
LCAwKSksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSkpOworCisg
ICAgYXV0byBhID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgRVhQRUNU
X05PVF9JTlRFUlNFQ1RJTkdfQk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhhKSk7CisKKyAgICBi
b2R5LmFwcGVuZENoaWxkKGEpOworCisgICAgYXV0byBiID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChiKTsKKworICAgIGF1dG8gYyA9IEhU
TUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGItPmFwcGVuZENoaWxkKGMpOwor
CisgICAgYXV0byBkID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYS0+
YXBwZW5kQ2hpbGQoZCk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
KyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfTk9UX0lOVEVSU0VDVElOR19CT1RI
X1dBWVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoZikpOworCisgICAgYXV0byBnID0gSFRNTFRleHRBcmVhRWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvJiBoID0gKmctPmlubmVyVGV4dEVsZW1lbnQo
KTsKKyAgICBjLT5hcHBlbmRDaGlsZChnKTsKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dB
WVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoaCkpOworfQorCitURVNUKERvY3VtZW50T3JkZXIsIFJhbmdlQ29udGFp
bnNOb2RlKQoreworICAgIGF1dG8gZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOworICAgIGF1
dG8mIGRvY3VtZW50RWxlbWVudCA9ICpkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAg
YXV0byYgYm9keSA9ICpkb2N1bWVudC0+Ym9keSgpOworCisgICAgRVhQRUNUX1RSVUUoY29udGFp
bnMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgZG9jdW1lbnRFbGVt
ZW50KSk7CisgICAgRVhQRUNUX1RSVUUoY29udGFpbnMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNv
bnRlbnRzKGRvY3VtZW50KSwgYm9keSkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5zKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpLCBib2R5KSk7CisKKyAg
ICBFWFBFQ1RfRkFMU0UoY29udGFpbnMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRv
Y3VtZW50KSwgZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGFpbnMobWFrZVNpbXBs
ZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQo
ZG9jdW1lbnQsIDIpKSwgZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGFpbnMobWFr
ZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5
UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAwKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29u
dGFpbnMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFr
ZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpLCBib2R5KSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRh
aW5zKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VC
b3VuZGFyeVBvaW50KGJvZHksIDEpKSwgYm9keSkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5z
KG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3Vu
ZGFyeVBvaW50KGRvY3VtZW50RWxlbWVudCwgMSkpLCBib2R5KSk7CisKKyAgICBhdXRvIGEgPSBI
VE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGFp
bnMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgYSkpOworCisgICAg
Ym9keS5hcHBlbmRDaGlsZChhKTsKKworICAgIGF1dG8gYiA9IEhUTUxEaXZFbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYik7CisKKyAgICBhdXRvIGMgPSBI
VE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBiLT5hcHBlbmRDaGlsZChjKTsK
KworICAgIGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGEt
PmFwcGVuZENoaWxkKGQpOworCisgICAgYXV0byBlID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShk
b2N1bWVudCk7CisgICAgYXV0byBmID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7
CisgICAgZS0+YXBwZW5kQ2hpbGQoZik7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRhaW5zKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgZikpOworCisgICAgYXV0byBnID0gSFRN
TFRleHRBcmVhRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvJiBoID0gKmctPmlu
bmVyVGV4dEVsZW1lbnQoKTsKKyAgICBjLT5hcHBlbmRDaGlsZChnKTsKKyAgICBFWFBFQ1RfVFJV
RShjb250YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIGgpKTsKK30K
KworVEVTVChEb2N1bWVudE9yZGVyLCBSYW5nZUludGVyc2VjdHNOb2RlKQoreworICAgIGF1dG8g
ZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOworICAgIGF1dG8mIGRvY3VtZW50RWxlbWVudCA9
ICpkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgYXV0byYgYm9keSA9ICpkb2N1bWVu
dC0+Ym9keSgpOworCisgICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBkb2N1bWVudEVsZW1lbnQpKTsKKyAgICBFWFBFQ1Rf
VFJVRShpbnRlcnNlY3RzKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCks
IGJvZHkpKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpLCBib2R5KSk7CisKKyAgICBFWFBFQ1RfVFJVRShp
bnRlcnNlY3RzKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGRvY3Vt
ZW50KSk7CisgICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJv
dW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikp
LCBkb2N1bWVudCkpOworICAgIEVYUEVDVF9GQUxTRShpbnRlcnNlY3RzKG1ha2VTaW1wbGVSYW5n
ZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3Vt
ZW50RWxlbWVudCwgMCkpLCBib2R5KSk7CisgICAgRVhQRUNUX0ZBTFNFKGludGVyc2VjdHMobWFr
ZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50RWxlbWVudCwgMSksIG1ha2VC
b3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRl
cnNlY3RzKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1h
a2VCb3VuZGFyeVBvaW50KGJvZHksIDApKSwgYm9keSkpOworICAgIEVYUEVDVF9UUlVFKGludGVy
c2VjdHMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFr
ZUJvdW5kYXJ5UG9pbnQoYm9keSwgMSkpLCBib2R5KSk7CisgICAgRVhQRUNUX1RSVUUoaW50ZXJz
ZWN0cyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtl
Qm91bmRhcnlQb2ludChkb2N1bWVudEVsZW1lbnQsIDEpKSwgYm9keSkpOworCisgICAgYXV0byBh
ID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgRVhQRUNUX0ZBTFNFKGlu
dGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgYSkpOwor
CisgICAgYm9keS5hcHBlbmRDaGlsZChhKTsKKworICAgIGF1dG8gYiA9IEhUTUxEaXZFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYik7CisKKyAgICBhdXRv
IGMgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBiLT5hcHBlbmRDaGls
ZChjKTsKKworICAgIGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwor
ICAgIGEtPmFwcGVuZENoaWxkKGQpOworCisgICAgYXV0byBlID0gSFRNTERpdkVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byBmID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1
bWVudCk7CisgICAgZS0+YXBwZW5kQ2hpbGQoZik7CisgICAgRVhQRUNUX0ZBTFNFKGludGVyc2Vj
dHMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBlKSk7CisgICAgRVhQRUNU
X1RSVUUoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZiksIGUpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoYm9keSksIGYpKTsKKworICAgIGF1dG8gZyA9IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCk7CisgICAgYXV0byYgaCA9ICpnLT5pbm5lclRleHRFbGVtZW50KCk7CisgICAg
Yy0+YXBwZW5kQ2hpbGQoZyk7CisgICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIGgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407443</attachid>
            <date>2020-08-27 19:04:15 -0700</date>
            <delta_ts>2020-08-28 10:16:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215755-20200827190414.patch</filename>
            <type>text/plain</type>
            <size>162073</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWE0MjE2YzQzNjhiZTEw
OGU4NjEyYTg3YzlmZjMwZWI5YjA2OGU3YS4uZDIwNTNmYTQ3OTg5NjVlMGY1NWRmMGJhMzllYzA3
ZWNjMzQ2M2I0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NCBAQAorMjAyMC0wOC0yNyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwg
dGhlIHJlbWFpbmluZyB1c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcik6IFVzZSBkb2N1
bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1Jh
bmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNsb3Nlc3RUb1Jhbmdl
KTogVXNlIGNoYXJhY3RlckNvdW50LiBBbHNvIHJlbW92ZWQgdW5ubmVjZXNzYXJ5IGFzc2VydGlv
bnMKKyAgICAgICAgYW5kIHNwZWNpYWwgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbiBjb25z
dCk6IFVzZSBkb2N1bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOiBVc2UgaW50
ZXJzZWN0cy4KKyAgICAgICAgQWxzbyB1c2UgZmlyc3RSYW5nZSBpbnN0ZWFkIG9mIHRvTm9ybWFs
aXplZFJhbmdlLgorCisgICAgICAgICogZG9tL0VsZW1lbnQuaDogRXhwb3J0IGF0dGFjaFNoYWRv
dyBzbyBpdCBjYW4gYmUgdXNlZCBpbiB1bml0IHRlc3RzLgorCisgICAgICAgICogZG9tL05vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTaWJsaW5nU3Vic2VxdWVudCk6IEFkZGVkIGEgY291
cGxlIGFzc2VydGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpkb2N1bWVudE9yZGVyKTogQWRkIGxv
Z2ljIHNvIHRoYXQgc2hhZG93IHRyZWVzIGFyZSBvcmRlcmVkIGJlZm9yZSB0aGUKKyAgICAgICAg
b3RoZXIgY2hpbGRyZW4gb2YgdGhlaXIgaG9zdHMuCisKKyAgICAgICAgKiBkb20vTm9kZS5oOiBB
ZGRlZCBpc19uZXEsIGlzX2x0ZXEsIGFuZCBpc19ndGVxIGZvciB1c2Ugd2l0aCBQYXJ0aWFsT3Jk
ZXJpbmcsCisgICAgICAgIG1hdGNoaW5nIHRoZSBuYW1lcyBhbmQgYmVoYXZpb3IgZnJvbSBDKysy
MC4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6IFJlbW92ZWQgdW51c2VkIENvb3JkaW5hdGVT
cGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpSYW5nZSk6IFVwZGF0ZWQgc2luY2UgUmFu
Z2VCb3VuZGFyeVBvaW50IG5vdyB1c2VzIHJlZmVyZW5jZXMuCisgICAgICAgIChXZWJDb3JlOjpS
YW5nZTo6dXBkYXRlRG9jdW1lbnQpOiBSZW5hbWVkIGZyb20gc2V0RG9jdW1lbnQgYW5kIGNoYW5n
ZWQgc28gdGhhdAorICAgICAgICBpdCBtYWludGFpbnMgdGhlIGludmFyaWFudHMgd2l0aG91dCBy
ZXF1aXJpbmcgdGhlIGNhbGxlciBwYXNzIGFueSBhcmd1bWVudHMuCisgICAgICAgIEFsc28gdXBk
YXRlZCBmb3IgUmFuZ2VCb3VuZGFyeVBvaW50IGFubWUgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjpzZXRTdGFydCk6IFVwZGF0ZWQgZm9yIGNoZWNrTm9kZU9mZnNldFBh
aXIgbmFtZSBjaGFuZ2UuCisgICAgICAgIFJlbW92ZWQgdG9vLWNvbXBsZXggY29kZSBmb3IgbW92
aW5nIGJldHdlZW4gZG9jdW1lbnRzLiBVc2UgZG9jdW1lbnRPcmRlcgorICAgICAgICBpbnN0ZWFk
IG9mIGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5lciB0byBjaGVjayBmb3Igc3RhcnQvZW5k
IHRoYXQgaGF2ZQorICAgICAgICBpbmNvcnJlY3Qgb3JkZXIgb3Igbm8gY29tbW9uIGFuY2VzdG9y
LiBVc2UgdXBkYXRlRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6aXNQb2ludEluUmFuZ2UpOiBVc2UgaXNQ
b2ludEluUmFuZ2UgdGhhdCB0YWtlcyBhIFNpbXBsZVJhbmdlLgorICAgICAgICBBbHNvIHVwZGF0
ZWQgZm9yIGNoZWNrTm9kZU9mZnNldFBhaXIgbmFtZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Y29tcGFyZVBvaW50IGNvbnN0KTogVXNlIGRvY3VtZW50T3JkZXIuIERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVOb2RlIGNvbnN0KTogVXNlIGRvY3VtZW50
T3JkZXIuCisgICAgICAgIChXZWJDb3JlOjp0b3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyBjb25zdCk6IERlbGV0ZWQgbW9yZSBvdmVy
bG9hZHMuCisgICAgICAgIEtlcHQgb25seSB0aGUgb25lIG5lZWRlZCBmb3IgYmluZGluZ3MsIGFu
ZCByZW5hbWVkIGl0IGZyb20KKyAgICAgICAgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGlu
Z3MuIEFsc28gZml4ZWQgdGhlIGltcGxlbWVudGF0aW4gdG8gYmUgc2ltcGxlciwKKyAgICAgICAg
dXNlIGRvY3VtZW50T3JkZXIsIGFuZCBtYXRjaCB0aGUgRE9NIHNwZWNpZmljYXRpb24gbW9yZSBj
bG9zZWx5ICh3aXRob3V0IGEKKyAgICAgICAgYmVoYXZpb3IgY2hhbmdlKS4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpib3VuZGFyeVBvaW50c1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjppbnRlcnNlY3RzTm9kZSBjb25zdCk6IFVzZSBpbnRlcnNlY3Rz
IGZyb20gU2ltcGxlUmFuZ2UuCisgICAgICAgIEFsc28gZG9uJ3QgcmFpc2UgZXhjZXB0aW9ucy4K
KyAgICAgICAgKFdlYkNvcmU6Omxlbmd0aE9mQ29udGVudHNJbk5vZGUpOiBEZWxldGVkLiBUaGlz
IGdpdmVzIHRoZSBzYW1lIHJlc3VsdCBhcworICAgICAgICBOb2RlOjpsZW5ndGgsIGJ1dCBsZXNz
IGVmZmljaWVudGx5LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnByb2Nlc3NDb250ZW50cyk6
IFVwZGF0ZWQgc2luY2UgUmFuZ2VCb3VuZGFyeVBvaW50IG5vdworICAgICAgICB1c2VzIHJlZmVy
ZW5jZXMuCisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cyk6
IFJlbW92ZWQgb2Jzb2xldGUgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0b1N0
cmluZyBjb25zdCk6IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyBhbmQKKyAgICAgICAgY2hhcmFjdGVy
RGF0YU9mZnNldFJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRleHQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmRldGFjaCk6IE1vdmVkIHRvIHRoZSBo
ZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y2hlY2tOb2RlT2Zmc2V0UGFpciBjb25z
dCk6IFJuZWFtZWQgZnJvbSBjaGVja05vZGVXT2Zmc2V0LgorICAgICAgICAoV2ViQ29yZTo6UmFu
Z2U6OmNsb25lUmFuZ2UpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnNldFN0YXJ0QWZ0ZXIpOiBUd2Vha2VkIGNvZGluZyBzdHlsZS4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpzZXRFbmRCZWZvcmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjpzZXRFbmRBZnRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVj
dE5vZGUpOiBEaXR0by4gQWxzbyByZW1vdmVkIHVubmVjZXNzYXJ5IGNvZGUgdG8KKyAgICAgICAg
Y2FsbCBzZXREb2N1bWVudCwgc2luY2Ugc2V0U3RhcnQgdGFrZXMgY2FyZSBvZiB0aGF0LgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OnNldFN0YXJ0QmVmb3JlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6Zmlyc3ROb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpwYXN0TGFzdE5vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFyZVJh
bmdlc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlc092ZXJsYXApOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKTog
VHdlYWtlZCBjb2Rpbmcgc3R5bGUgYW5kIHVwZGF0ZWQKKyAgICAgICAgc2luY2UgUmFuZ2VCb3Vu
ZGFyeVBvaW50IHVzZXMgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6bm9k
ZUNoaWxkcmVuQ2hhbmdlZCk6IFVzZSBtX293bmVyRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3Jl
Ojpib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQpOiBSZW1vdmVkIHVubmVlZGVkIGNv
ZGUKKyAgICAgICAgdG8gaGFuZGxlIGNhc2Ugd2hlcmUgb25lIG9mIHRoZSBjaGlsZHJlbiBpcyB0
aGUgY2hpbGRCZWZvcmUgYnV0IHRoZQorICAgICAgICBub2RlIGlzIG5vdCBpbnNpZGUgdGhlIGNv
bnRhaW5lciAtLSB0aGF0IGNhc2UgZG9lc24ndCBleGlzdC4gVXNlCisgICAgICAgIE5vZGU6OmNv
bnRhaW5zLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVDaGlsZHJlbldpbGxCZVJlbW92
ZWQpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2Rl
V2lsbEJlUmVtb3ZlZCk6IFNpbXBsaWZ5IGxvZ2ljIHVzaW5nCisgICAgICAgIFJhbmdlOjpjb250
YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZCk6IFVzZSBt
X293bmVyRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cGFyZW50bGVzc05vZGVN
b3ZlZFRvTmV3RG9jdW1lbnRBZmZlY3RzUmFuZ2UpOgorICAgICAgICBVcGRhdGVkIHNpbmNlIFJh
bmdlQm91bmRhcnlQb2ludCB1c2VzIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6Ym91
bmRhcnlUZXh0SW5zZXJ0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4
dFJlbW92ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dE5vZGVzTWVy
Z2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyeVRleHROb2Rlc1NwbGl0KTog
RGl0dG8uCisgICAgICAgIChzaG93VHJlZSk6IFJlbW92ZWQgY2FsbCB0byBib3VuZGFyeVBvaW50
c1ZhbGlkLiBUaGF0J3MgY2hlY2tpbmcgc29tZXRoaW5nCisgICAgICAgIHRoZSBjbGFzcyBhbHJl
YWR5IHRyZWF0cyBhcyBhbiBpbnZhcmlhbnQsIHNvIGl0J3Mgb2Jzb2xldGUgY29kZSBsZWZ0IGZy
b20KKyAgICAgICAgbG9uZyBhZ28gd2hlbiB3ZSBkaWRuJ3QgaGF2ZSB0aGF0IGltcGxlbWVudGVk
IGNvcnJlY3RseS4KKworICAgICAgICAqIGRvbS9SYW5nZS5oOiBSZW9yZ2FuaXplZCB0aGUgaGVh
ZGVyIHRvIG1hdGNoIHRoZSBJREwgZmlsZS4KKyAgICAgICAgUmVtb3ZlZCBvd25lckRvY3VtZW50
LCBjb21wYXJlQm91bmRhcnlQb2ludHMgb3ZlcmxvYWRzIG90aGVyIHRoYW4gdGhlIG9uZQorICAg
ICAgICB1c2VkIGZyb20gYmluZGluZ3MsIGZpcnN0Tm9kZSwgcGFzdExhc3ROb2RlLCB0ZXh0LCBj
b250YWlucywgYXJlUmFuZ2VzRXF1YWwsCisgICAgICAgIGFuZCByYW5nZXNPdmVybGFwLiBBbHNv
IHVwZGF0ZWQgc2luY2UgUmFuZ2VCb3VuZGFyeVBvaW50Ojpjb250YWluZXIgaXMgbm93CisgICAg
ICAgIGEgcmVmZXJlbmNlLiBNb3ZlZCBkZXRhY2ggZnVuY3Rpb24gaGVyZSB0byB0aGUgaGVhZGVy
IGFzIGFuIGVtcHR5IGlubGluZS4KKworICAgICAgICAqIGRvbS9SYW5nZS5pZGw6IENoYW5nZWQg
c3RhcnQvZW5kT2Zmc2V0IHRvIHVuc2lnbmVkLiBTdG9wcGVkIHVzaW5nIHRoZQorICAgICAgICBu
YW1lIGNvbXBhcmVCb3VuZGFyeVBvaW50ZXJzRm9yQmluZGluZ3MuIFVwZGF0ZWQgaW50ZXJzZWN0
c05vZGUgdG8gbm90CisgICAgICAgIHRocm93IGV4Y2VwdGlvbnMgYXMgY2FsbGVkIGZvciBpbiB0
aGUgRE9NIHNwZWNpZmljYXRpb24uIFR3ZWFrZWQgY29tbWVudHMuCisKKyAgICAgICAgKiBkb20v
UmFuZ2VCb3VuZGFyeVBvaW50Lmg6IENoYW5nZWQgY29uc3RydWN0b3IgYXJndW1lbnQgdG8gYSBy
ZWZlcmVuY2UuCisgICAgICAgIFJlbmFtZWQgc2V0VG9CZWZvcmVDaGlsZCwgc2V0VG9BZnRlckNo
aWxkLCBzZXRUb1N0YXJ0T2ZOb2RlLCBhbmQgc2V0VG9FbmRPZk5vZGUKKyAgICAgICAgdG8gc2V0
VG9CZWZvcmVOb2RlLCBzZXRUb0FmdGVyTm9kZSwgc2V0VG9CZWZvcmVDb250ZW50cywgc2V0VG9B
ZnRlckNvbnRlbnRzLgorICAgICAgICBNZXJnZWQgZW5zdXJlT2Zmc2V0SXNWYWxpZCBpbnRvIHRo
ZSBvZmZzZXQgZnVuY3Rpb24uIENoYW5nZWQgbV9jb250YWluZXJOb2RlCisgICAgICAgIGludG8g
YSBSZWY8PiBhbmQgcmVuYW1lZCBpdCBtX2NvbnRhaW5lci4gUmVtb3ZlZCBjbGVhci4KKworICAg
ICAgICAqIGRvbS9TaW1wbGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1BvaW50SW5S
YW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRPcmRlcik6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omlu
dGVyc2VjdHMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVuaW9uUmFuZ2VzKTogQWRkZWQu
CisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorCisgICAg
ICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVQb3Np
dGlvbnMpOiBVc2UgZG9jdW1lbnRPcmRlci4KKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2li
bHlDb250YWluZWRXaXRoaW4pOiBVc2UgY29udGFpbnMuCisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNGcmFtZUluUmFuZ2UpOiBVc2UgaW50ZXJzZWN0
cy4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51
bWJlcnMpOiBVc2UgaW50ZXJzZWN0cy4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bmlvblJhbmdlcyk6IE1vdmVkIHRvIFNpbXBsZVJh
bmdlLmNwcCwgd2hlcmUgaXQncyBub3cKKyAgICAgICAgaW1wbGVtZW50ZWQgdXNpbmcgZG9jdW1l
bnRPcmRlci4KKworICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24pOiBV
c2UgaW50ZXJzZWN0cy4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBM
ZWdhY3kubW06CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3Rpb25Db250YWluc1Bvc2l0aW9uKTog
VXNlIGlzUG9pbnRJblJhbmdlLgorCisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpleHRlbmQpOiBVc2UgbWFrZVJlZlB0ciBh
bmQgTm9kZTo6bGVuZ3RoCisgICAgICAgIHRvIHN0cmVhbWxpbmUgdGhlIGltcGxlbWVudGF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpnZXRSYW5nZUF0KTogVXNlIG1ha2VC
b3VuZGFyeVBvaW50QmVmb3JlTm9kZQorICAgICAgICBhbmQgcmVtb3ZlIHVubmVlZGVkIG51bGwg
Y2hlY2sgdGhhdCdzIGFscmVhZHkgY292ZXJlZCBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6YWRkUmFuZ2UpOiBVc2UgaW50ZXJzZWN0cyBhbmQgdW5pb25SYW5nZXMuCisg
ICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbnRhaW5zTm9kZSBjb25zdCk6IFVzZSBp
bnRlcnNlY3RzIGFuZCBjb250YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6
aXNWYWxpZEZvclBvc2l0aW9uIGNvbnN0KTogVXNlIGJvb2xlYW4gbG9naWMuCisKKyAgICAgICAg
KiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9s
bGVyOjpkcmFnZ2FibGVFbGVtZW50IGNvbnN0KTogVXNlIGNvbnRhaW5zLgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0NvbnRyb2xsZXI6Omluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVyc0F0Q2Fy
ZXQpOiBVc2UgaW50ZXJzZWN0cy4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNl
IGNvbnRhaW5zLgorCisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OmZpbmRUZXh0TWF0Y2hlcyk6IFVzZSBkb2N1bWVudE9yZGVyLgorCisgICAgICAgICog
cGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmZpbmRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRD
b250YWluaW5nU2VsZWN0aW9uSGlnaGxpZ2h0KToKKyAgICAgICAgVXNlIGNvbnRhaW5zLgorCisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpyYW5nZUFzVGV4dCk6IFVzZSBwbGFpblRleHQuCisgICAgICAgIChXZWJDb3JlOjpqb2lu
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdC
YWNrd2FyZHNUZXh0SXRlcmF0b3IpOiBVc2UgYSB2ZWN0b3IKKyAgICAgICAgdGhhdCB3ZSByZXZl
cnNlIGFuZCBqb2luIHJhdGhlciB0aGFuIGluc2VydGluZyBhdCB0aGUgc3RhcnQgb2YgYSBzdHJp
bmcuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnN1YnJhbmdlKTogQWRkZWQgYSBjYWxs
IHRvIHVwZGF0ZUxheW91dCBzaW5jZSB0ZXh0IGl0ZXJhdG9yCisgICAgICAgIGZ1bmN0aW9ucyBk
ZXBlbmQgb24gdGhlIHN0YXRlIG9mIHRoZSByZW5kZXIgdHJlZS4gUmVhbGl6ZWQgdGhpcyB3YXMg
dGhlb3JldGljYWxseQorICAgICAgICBuZWVkZWQgYmVjYXVzZSBvZiBJbnRlcm5hbHM6OnJhbmdl
QXNUZXh0LgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyYW5nZU9mU3RyaW5nTmVhckxv
Y2F0aW9uKTogRGl0dG8uCisKIDIwMjAtMDgtMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBBdWRpb1BhcmFtIGRvZXMgbm90IG5lZWQgdG8gc3RvcmUgaXRzIHZh
bHVlcyBhcyBkb3VibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNmY5ODQzNzA5YzFjNDdhNzcyOGJjZDRmYmQ4YjMw
ODQyMDhkMmFhZC4uZTRkYWZkZGRhYzYyZjhhYzk1YWQ0ZjM0ZjU1YjBjZmM5YTU2Mzk0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAyMC0wOC0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwgdGhlIHJlbWFpbmluZyB1c2Vz
IG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
UmFuZ2UuY3BwOgorICAgICAgICAod2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX2JvdW5kYXJ5X3Bv
aW50cyk6IFVwZGF0ZSBmb3IgcmVuYW1lIG9mCisgICAgICAgIGNvbXBhcmVCb3VuZGFyeVBvaW50
c0ZvckJpbmRpbmdzLgorICAgICAgICAod2Via2l0X2RvbV9yYW5nZV9pbnRlcnNlY3RzX25vZGUp
OiBSZW1vdmVkIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICAgKHdlYmtpdF9kb21fcmFuZ2Vf
Z2V0X3RleHQpOiBVc2UgcGxhaW5UZXh0LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW06CisgICAgICAgICgtW1dLRE9NUmFuZ2UgaW5p
dFdpdGhEb2N1bWVudDpdKTogVGlnaHRlbmVkIHVwIGludG8gYSBvbmUtbGluZXIuCisgICAgICAg
ICgtW1dLRE9NUmFuZ2UgdGV4dF0pOiBVc2UgcGxhaW5UZXh0LgorICAgICAgICAoLVtXS0RPTVJh
bmdlIHRleHRSZWN0c10pOiBTdG9wcGVkIHVzaW5nIFJhbmdlOjpvd25lckRvY3VtZW50LgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6
OmRvY3VtZW50KTogU3RvcHBlZCB1c2luZworICAgICAgICBSYW5nZTo6b3duZXJEb2N1bWVudC4K
KyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Ym91bmRpbmdSZWN0
SW5XaW5kb3dDb29yZGluYXRlcyBjb25zdCk6CisgICAgICAgIERpdHRvLgorICAgICAgICAoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpyZW5kZXJlZEltYWdlKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnRleHQgY29uc3QpOiBV
c2UgcGxhaW5UZXh0LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFn
ZUdMaWIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0
YXRlIGNvbnN0KTogVXNlIGNvbnRhaW5zLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RG9j
dW1lbnRFZGl0aW5nQ29udGV4dCk6IFVzZSBpbnRlcnNlY3RzLgorCiAyMDIwLTA4LTI3ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2NDcx
MCk6IEluaXRpYWxpemluZyB0aGUgQVZQbGF5ZXIgT2JqLUMgY2xhc3MgYXQgcHJvY2VzcyBzdGFy
dCB1cCBjYXVzZXMgYSByZWdyZXNzaW9uIGluIHBvd2VyLXVzZSB0ZXN0cwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCmluZGV4IDZjY2YxZTMzNWUxMGQzZjFmMjQwNjVjMTE5NWNhODRiZjM3YjAz
OTYuLjEyN2E1N2VjODM5NjBmMGIyMWFlZjNiYTBiODRkYWEwNWMwNmYxYjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOC0yNyAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwgdGhlIHJl
bWFpbmluZyB1c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIERPTS9ET01SYW5nZS5tbToKKyAgICAgICAgKC1bRE9NUmFu
Z2UgdGV4dF0pOiBVc2UgcGxhaW5UZXh0LgorICAgICAgICAoLVtET01SYW5nZSBjb21wYXJlQm91
bmRhcnlQb2ludHM6c291cmNlUmFuZ2U6XSk6IFVwZGF0ZSBmb3IgcmVuYW1lIG9mCisgICAgICAg
IGNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzLgorICAgICAgICAoLVtET01SYW5nZSBp
bnRlcnNlY3RzTm9kZTpdKTogUmVtb3ZlZCByYWlzZU9uRE9NRXJyb3IuCisKKyAgICAgICAgKiBE
T00vRE9NVUlLaXRFeHRlbnNpb25zLm1tOgorICAgICAgICAoZmlyc3ROb2RlQWZ0ZXIpOiBNb3Zl
ZCBSYW5nZTo6Zmlyc3ROb2RlIGhlcmUgc2luY2UgaXQncyB0aGUgb25seSByZW1haW5pbmcgY2Fs
bGVyOworICAgICAgICBtaWdodCBuZWVkIHRvIGtlZXAgbGVnYWN5IGJlaGF2aW9yIGRlcGVuZGlu
ZyBvbiBob3cgdGhpcyBpcyB1c2VkIGJ5IFVJS2l0LgorICAgICAgICAoLVtET01SYW5nZSBmaXJz
dE5vZGVdKTogQ2FsbCBmaXJzdE5vZGVBZnRlci4KKworICAgICAgICAqIERPTS9XZWJET01PcGVy
YXRpb25zLm1tOgorICAgICAgICAoLVtET01SYW5nZSBtYXJrdXBTdHJpbmddKTogU3RvcCB1c2lu
ZyBSYW5nZTo6b3duZXJEb2N1bWVudC4KKwogMjAyMC0wOC0yNyAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFRyYW5zZm9ybVN0cmVh
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5k
ZXggNjM4YmFmMGJjNzk4NGQ5Nzk5YjI4MmNiYmFlOGNhMTc2MTM2ZmNjZi4uMWUxMDU5ZGUxZTIw
MTVjNTM0MGQyMzE1YmJhNTYwNDliMzAxMDdkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0yMDM2LDYgKzIwMzYsOCBAQCBzdGF0aWMg
Ym9vbCBpc1JlcGxhY2VkTm9kZU9yQlIoTm9kZSogbm9kZSkKIAogc3RhdGljIGJvb2wgY2hhcmFj
dGVyT2Zmc2V0c0luT3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQx
LCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldDIpCiB7CisgICAgLy8gRklY
TUU6IFNob3VsZCBqdXN0IGJlIGFibGUgdG8gY2FsbCBkb2N1bWVudE9yZGVyIHdpdGhvdXQgYWNj
ZXNzaWJpbGl0eS1zcGVjaWZpYyBsb2dpYy4gTm90IGNsZWFyIHdoeSB3ZSBuZWVkIENoYXJhY3Rl
ck9mZnNldCBpbnN0ZWFkIG9mIFBvc2l0aW9uIG9yIEJvdW5kYXJ5UG9pbnQuCisKICAgICBpZiAo
Y2hhcmFjdGVyT2Zmc2V0MS5pc051bGwoKSB8fCBjaGFyYWN0ZXJPZmZzZXQyLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0yMDQ4LDE2ICsyMDUwLDEyIEBAIHN0YXRp
YyBib29sIGNoYXJhY3Rlck9mZnNldHNJbk9yZGVyKGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hh
cmFjdGVyT2Zmc2V0MSwgY29uCiAgICAgICAgIG5vZGUxID0gbm9kZTEtPnRyYXZlcnNlVG9DaGls
ZEF0KGNoYXJhY3Rlck9mZnNldDEub2Zmc2V0KTsKICAgICBpZiAoIW5vZGUyLT5pc0NoYXJhY3Rl
ckRhdGFOb2RlKCkgJiYgIWlzUmVwbGFjZWROb2RlT3JCUihub2RlMikgJiYgbm9kZTItPmhhc0No
aWxkTm9kZXMoKSkKICAgICAgICAgbm9kZTIgPSBub2RlMi0+dHJhdmVyc2VUb0NoaWxkQXQoY2hh
cmFjdGVyT2Zmc2V0Mi5vZmZzZXQpOwotICAgIAogICAgIGlmICghbm9kZTEgfHwgIW5vZGUyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgYXV0byByYW5nZTEgPSBBWE9iamVjdENh
Y2hlOjpyYW5nZUZvck5vZGVDb250ZW50cygqbm9kZTEpOwogICAgIGF1dG8gcmFuZ2UyID0gQVhP
YmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoKm5vZGUyKTsKLSAgICBhdXRvIHJlc3Vs
dCA9IGNyZWF0ZUxpdmVSYW5nZShyYW5nZTEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UyKSk7Ci0gICAgaWYgKHJlc3Vs
dC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwOworICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50
T3JkZXIocmFuZ2UxLnN0YXJ0LCByYW5nZTIuc3RhcnQpKTsKIH0KIAogc3RhdGljIE5vZGUqIHJl
c2V0Tm9kZUFuZE9mZnNldEZvclJlcGxhY2VkTm9kZShOb2RlJiByZXBsYWNlZE5vZGUsIGludCYg
b2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBhMDQ3ODMyOGY5MjNjNTQ1
MjI3N2IyYmY0YTQ0MzFiZDcyNzVmNzkzLi4yMDljOWI4Yzk5OGM1NmRmYzRjM2E0NTUzNWI0MDc1
YTY2OGUzMWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTI5NywyNiArMjk3LDE3IEBAIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiBzCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gbWlzc3BlbGxpbmdzOwog
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgVGV4
dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIG1pc3NwZWxsaW5ncywgZnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKIAotICAgIC8vIFRoZSByZXR1cm5lZCBtaXNzcGVsbGluZ3MgYXJlIGFz
c3VtZWQgdG8gYmUgb3JkZXJlZCBpbiB0aGUgZG9jdW1lbnQKLSAgICAvLyBsb2dpY2FsIG9yZGVy
LCB3aGljaCBzaG91bGQgYmUgbWF0Y2hlZCBieSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
LgotICAgIC8vIFNvIGl0ZXJhdGUgZm9yd2FyZCBvciBiYWNrd2FyZHMgZGVwZW5kaW5nIG9uIHRo
ZSBkZXNpcmVkIHNlYXJjaAotICAgIC8vIGRpcmVjdGlvbiB0byBmaW5kIHRoZSBjbG9zZXN0IG1p
c3NwZWxsaW5nIGluIHRoYXQgZGlyZWN0aW9uLgorICAgIC8vIEZpbmQgdGhlIGZpcnN0IG1pc3Nw
ZWxsaW5nIHBhc3QgdGhlIHN0YXJ0LgogICAgIGlmIChkaXJlY3Rpb24gPT0gQWNjZXNzaWJpbGl0
eVNlYXJjaERpcmVjdGlvbjo6TmV4dCkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1pc3Nw
ZWxsaW5nIDogbWlzc3BlbGxpbmdzKSB7CisgICAgICAgIGZvciAoYXV0byYgbWlzc3BlbGxpbmcg
OiBtaXNzcGVsbGluZ3MpIHsKICAgICAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGVk
aXRvci5yYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChtaXNzcGVsbGluZyk7Ci0gICAgICAgICAg
ICBpZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgIGlmIChjcmVhdGVMaXZlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJl
Qm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkp
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKKyAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ1Jh
bmdlICYmIGlzX2d0KGRvY3VtZW50T3JkZXIobWlzc3BlbGxpbmdSYW5nZS0+ZW5kLCBzdGFydC5l
bmQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0
aW9uOjpQcmV2aW91cykgewotICAgICAgICBmb3IgKGF1dG8gcml0ID0gbWlzc3BlbGxpbmdzLnJi
ZWdpbigpOyByaXQgIT0gbWlzc3BlbGxpbmdzLnJlbmQoKTsgKytyaXQpIHsKLSAgICAgICAgICAg
IGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGVkaXRvci5yYW5nZUZvclRleHRDaGVja2luZ1Jlc3Vs
dCgqcml0KTsKLSAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGNyZWF0ZUxpdmVSYW5nZSgqbWlzc3Bl
bGxpbmdSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQs
IGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKKyAgICB9
IGVsc2UgeworICAgICAgICBmb3IgKGF1dG8mIG1pc3NwZWxsaW5nIDogbWFrZVJldmVyc2VkUmFu
Z2UobWlzc3BlbGxpbmdzKSkgeworICAgICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0g
ZWRpdG9yLnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KG1pc3NwZWxsaW5nKTsKKyAgICAgICAg
ICAgIGlmIChtaXNzcGVsbGluZ1JhbmdlICYmIGlzX2x0KGRvY3VtZW50T3JkZXIobWlzc3BlbGxp
bmdSYW5nZS0+c3RhcnQsIHN0YXJ0LnN0YXJ0KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICpt
aXNzcGVsbGluZ1JhbmdlOwogICAgICAgICB9CiAgICAgfQpAQCAtNTY1LDI4ICs1NTYsMTMgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpmaW5kTWF0Y2hpbmdPYmplY3RzKEFjY2Vzc2liaWxp
dHlTZWFyY2hDcml0ZXJpYSogY3JpdGUKIC8vIHJhbmdlIGlzIGV4cGVjdGVkIHRvIEFDVFVBTExZ
IGJlIGJlZm9yZS4gVGhlc2UgYXJlIG5vdCBjaGVja2VkIGZvciBwZXJmb3JtYW5jZSByZWFzb25z
Lgogc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUNsb3Nlc3RUb1JhbmdlKGNvbnN0
IFNpbXBsZVJhbmdlJiByZWZlcmVuY2VSYW5nZSwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiYgYWZ0
ZXJSYW5nZSwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiYgYmVmb3JlUmFuZ2UpCiB7Ci0gICAgLy8g
VGhlIHRyZWVTY29wZSBmb3Igc2hhZG93IG5vZGVzIG1heSBub3QgYmUgdGhlIHNhbWUgc2NvcGUg
YXMgYW5vdGhlciBlbGVtZW50IGluIGEgZG9jdW1lbnQuCi0gICAgLy8gQ29tcGFyaXNvbnMgbWF5
IGZhaWwgaW4gdGhhdCBjYXNlLCB3aGljaCBhcmUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHNob3Vs
ZCBub3QgYXNzZXJ0LgotCi0gICAgaWYgKGFmdGVyUmFuZ2UgJiYgKGFmdGVyUmFuZ2UtPnN0YXJ0
LmNvbnRhaW5lci0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24ocmVmZXJlbmNlUmFuZ2UuZW5kLmNv
bnRhaW5lcikgJiBOb2RlOjpET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQpKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIEFTU0VSVCghYWZ0ZXJSYW5nZSB8fCBjcmVhdGVM
aXZlUmFuZ2UoYWZ0ZXJSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRf
VE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShyZWZlcmVuY2VSYW5nZSkpLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpID49IDApOwotCi0gICAgaWYgKGJlZm9yZVJhbmdlICYmIChiZWZvcmVSYW5nZS0+ZW5k
LmNvbnRhaW5lci0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24ocmVmZXJlbmNlUmFuZ2Uuc3RhcnQu
Y29udGFpbmVyKSAmIE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCkpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgQVNTRVJUKCFiZWZvcmVSYW5nZSB8fCBjcmVh
dGVMaXZlUmFuZ2UoYmVmb3JlUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNU
QVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpKS5yZWxlYXNlUmV0
dXJuVmFsdWUoKSA8PSAwKTsKLQotICAgIGlmICghYWZ0ZXJSYW5nZSAmJiAhYmVmb3JlUmFuZ2Up
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKCFiZWZvcmVSYW5nZSkKICAg
ICAgICAgcmV0dXJuIFdURk1vdmUoYWZ0ZXJSYW5nZSk7CiAgICAgaWYgKCFhZnRlclJhbmdlKQog
ICAgICAgICByZXR1cm4gV1RGTW92ZShiZWZvcmVSYW5nZSk7Ci0KLSAgICBhdXRvIHBvc2l0aW9u
c1RvQWZ0ZXJSYW5nZSA9IFBvc2l0aW9uOjpwb3NpdGlvbkNvdW50QmV0d2VlblBvc2l0aW9ucyhj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oYWZ0ZXJSYW5nZS0+c3RhcnQpLCBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24ocmVmZXJlbmNlUmFuZ2UuZW5kKSk7Ci0gICAgYXV0byBwb3NpdGlv
bnNUb0JlZm9yZVJhbmdlID0gUG9zaXRpb246OnBvc2l0aW9uQ291bnRCZXR3ZWVuUG9zaXRpb25z
KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihiZWZvcmVSYW5nZS0+ZW5kKSwgY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHJlZmVyZW5jZVJhbmdlLnN0YXJ0KSk7Ci0KLSAgICByZXR1cm4g
V1RGTW92ZShwb3NpdGlvbnNUb0FmdGVyUmFuZ2UgPCBwb3NpdGlvbnNUb0JlZm9yZVJhbmdlID8g
YWZ0ZXJSYW5nZSA6IGJlZm9yZVJhbmdlKTsKKyAgICBhdXRvIGRpc3RhbmNlQmVmb3JlID0gY2hh
cmFjdGVyQ291bnQoeyBiZWZvcmVSYW5nZS0+ZW5kLCByZWZlcmVuY2VSYW5nZS5zdGFydCB9KTsK
KyAgICBhdXRvIGRpc3RhbmNlQWZ0ZXIgPSBjaGFyYWN0ZXJDb3VudCh7IGFmdGVyUmFuZ2UtPnN0
YXJ0LCByZWZlcmVuY2VSYW5nZS5lbmQgfSk7CisgICAgcmV0dXJuIFdURk1vdmUoZGlzdGFuY2VC
ZWZvcmUgPD0gZGlzdGFuY2VBZnRlciA/IGJlZm9yZVJhbmdlIDogYWZ0ZXJSYW5nZSk7CiB9CiAK
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5n
Q2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihjb25zdCBTaW1wbGVSYW5nZSYgcmVmZXJlbmNlUmFu
Z2UsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24gc2VhcmNoRGlyZWN0aW9uLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgc2VhcmNoU3RyaW5ncykgY29uc3QKQEAgLTYwMywyMyArNTc5LDE2IEBA
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5n
Q2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvCiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNsb3Nl
c3RTdHJpbmdSYW5nZTsKICAgICBmb3IgKGF1dG8mIHNlYXJjaFN0cmluZyA6IHNlYXJjaFN0cmlu
Z3MpIHsKICAgICAgICAgaWYgKGF1dG8gZm91bmRTdHJpbmdSYW5nZSA9IGZyYW1lLT5lZGl0b3Io
KS5yYW5nZU9mU3RyaW5nKHNlYXJjaFN0cmluZywgcmVmZXJlbmNlUmFuZ2UsIGZpbmRPcHRpb25z
KSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZFN0cmluZ0lzQ2xvc2VyOwogICAgICAgICAgICAg
aWYgKCFjbG9zZXN0U3RyaW5nUmFuZ2UpCi0gICAgICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1Jh
bmdlID0gKmZvdW5kU3RyaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAgZm91bmRTdHJpbmdJc0Ns
b3NlciA9IHRydWU7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJZiBz
ZWFyY2hpbmcgYmFja3dhcmQsIHVzZSB0aGUgdHJhaWxpbmcgcmFuZ2UgZWRnZXMgdG8gY29ycmVj
dGx5IGRldGVybWluZSB3aGljaAotICAgICAgICAgICAgICAgIC8vIHJhbmdlIGlzIGNsb3Nlc3Qu
IFNpbWlsYXJseSwgaWYgc2VhcmNoaW5nIGZvcndhcmQsIHVzZSB0aGUgbGVhZGluZyByYW5nZSBl
ZGdlcy4KLSAgICAgICAgICAgICAgICBhdXRvJiBjbG9zZXN0U3RyaW5nUG9zaXRpb24gPSBpc0Jh
Y2t3YXJkU2VhcmNoID8gY2xvc2VzdFN0cmluZ1JhbmdlLT5lbmQgOiBjbG9zZXN0U3RyaW5nUmFu
Z2UtPnN0YXJ0OwotICAgICAgICAgICAgICAgIGF1dG8mIGZvdW5kU3RyaW5nUG9zaXRpb24gPSBp
c0JhY2t3YXJkU2VhcmNoID8gZm91bmRTdHJpbmdSYW5nZS0+ZW5kIDogZm91bmRTdHJpbmdSYW5n
ZS0+c3RhcnQ7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXV0byBjbG9zZXN0
UG9zaXRpb25PZmZzZXQgPSBjbG9zZXN0U3RyaW5nUG9zaXRpb24ub2Zmc2V0OwotICAgICAgICAg
ICAgICAgIGF1dG8gc2VhcmNoUG9zaXRpb25PZmZzZXQgPSBmb3VuZFN0cmluZ1Bvc2l0aW9uLm9m
ZnNldDsKLSAgICAgICAgICAgICAgICBhdXRvIGNsb3Nlc3RDb250YWluZXJOb2RlID0gY2xvc2Vz
dFN0cmluZ1Bvc2l0aW9uLmNvbnRhaW5lci5wdHIoKTsKLSAgICAgICAgICAgICAgICBhdXRvIHNl
YXJjaENvbnRhaW5lck5vZGUgPSBmb3VuZFN0cmluZ1Bvc2l0aW9uLmNvbnRhaW5lci5wdHIoKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFJhbmdlOjpj
b21wYXJlQm91bmRhcnlQb2ludHMoY2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nlc3RQb3NpdGlv
bk9mZnNldCwgc2VhcmNoQ29udGFpbmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZzZXQpLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICgoIWlzQmFja3dhcmRTZWFyY2gg
JiYgcmVzdWx0ID4gMCkgfHwgKGlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0IDwgMCkpCi0gICAg
ICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9ICpmb3VuZFN0cmluZ1JhbmdlOwor
ICAgICAgICAgICAgICAgIGZvdW5kU3RyaW5nSXNDbG9zZXIgPSBpc0JhY2t3YXJkU2VhcmNoCisg
ICAgICAgICAgICAgICAgICAgID8gaXNfZ3QoZG9jdW1lbnRPcmRlcihmb3VuZFN0cmluZ1Jhbmdl
LT5lbmQsIGNsb3Nlc3RTdHJpbmdSYW5nZS0+ZW5kKSkKKyAgICAgICAgICAgICAgICAgICAgOiBp
c19sdChkb2N1bWVudE9yZGVyKGZvdW5kU3RyaW5nUmFuZ2UtPnN0YXJ0LCBjbG9zZXN0U3RyaW5n
UmFuZ2UtPnN0YXJ0KSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZm91bmRTdHJp
bmdJc0Nsb3NlcikKKyAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAqZm91bmRT
dHJpbmdSYW5nZTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gY2xvc2VzdFN0cmluZ1Jh
bmdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggNzliOGNhNGExMGE0MzVkYjMxOGY5MDZmNDA3
MWNkNWIwNDQxNjY5OC4uMmFjMTM0MmRhYzM0NDQ0N2VkNTEzMjE4OWUwOGVmMzU5NTIzZmU5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC05MTUsNyArOTE1LDcgQEAgSW50UG9pbnQgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6bGlua0NsaWNrUG9pbnQoKQogICAgIGlmIChhdXRvIHJhbmdl
ID0gZWxlbWVudFJhbmdlKCkpIHsKICAgICAgICAgYXV0byBzdGFydCA9IFZpc2libGVQb3NpdGlv
biB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpIH07CiAgICAgICAg
IGF1dG8gZW5kID0gbmV4dFZpc2libGVQb3NpdGlvbihzdGFydCk7Ci0gICAgICAgIGlmICghZW5k
LmlzTnVsbCgpICYmIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbnRhaW5zKGVuZCkpCisgICAg
ICAgIGlmIChpc1BvaW50SW5SYW5nZSgqcmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGVuZCkpKQog
ICAgICAgICAgICAgcmV0dXJuIHsgYm91bmRzRm9yUmFuZ2UoKm1ha2VTaW1wbGVSYW5nZShzdGFy
dCwgZW5kKSkuY2VudGVyKCkgfTsKICAgICB9CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmNsaWNrUG9pbnQoKTsKQEAgLTE1NjEsMTcgKzE1NjEsOSBAQCBQbGFpblRleHRSYW5nZSBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2Uo
KSBjb25zdAogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7
CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsK
LSAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCi0gICAgICAgIHJldHVybiBQbGFpblRl
eHRSYW5nZSgpOwotCi0gICAgLy8gRklYTUU6IFRoZSByZWFzb24gdGhpcyBkb2VzIHRoZSBjb3Jy
ZWN0IHRoaW5nIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBpbiB0aGUKLSAgICAvLyBzaGFkb3cgdHJl
ZSBvZiBhbiBpbnB1dCBlbGVtZW50IGlzIHRoYXQgd2UgZ2V0IGFuIGV4Y2VwdGlvbiBiZWxvdywg
YW5kIHdlCi0gICAgLy8gY2hvb3NlIHRvIGludGVycHJldCBhbGwgZXhjZXB0aW9ucyBhcyAiZG9l
cyBub3QgaW50ZXJzZWN0Ii4gU2VlbXMgbGlrZWx5Ci0gICAgLy8gdGhhdCBkb2VzIG5vdCBoYW5k
bGUgYWxsIGNhc2VzIGNvcnJlY3RseS4KLSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjcmVh
dGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm5vZGUpOwotICAg
IGlmICghaW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiAhaW50ZXJzZWN0c1Jlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKKyAgICBhdXRvIHZpc2libGVTZWxlY3Rpb24gPSBzZWxl
Y3Rpb24oKTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi5maXJz
dFJhbmdlKCk7CisgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSB8fCAhaW50ZXJzZWN0cygqc2VsZWN0
aW9uUmFuZ2UsICpub2RlKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKICAg
ICBpbnQgc3RhcnQgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLnN0
YXJ0KCkpOwpAQCAtMTY1NiwxMCArMTY0OCwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZQog
ICAgICAgICBhdXRvJiBub2RlID0gKnRoaXMtPm5vZGUoKTsKICAgICAgICAgYXV0byBlbGVtZW50
UmFuZ2UgPSB0aGlzLT5lbGVtZW50UmFuZ2UoKTsKICAgICAgICAgYXV0byBzdGFydCA9IHZpc2li
bGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcihub2RlLCByYW5nZS5zdGFy
dCk7Ci0gICAgICAgIGlmICghY3JlYXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSktPmNvbnRhaW5z
KHN0YXJ0KSkKKyAgICAgICAgaWYgKCFpc1BvaW50SW5SYW5nZSgqZWxlbWVudFJhbmdlLCBtYWtl
Qm91bmRhcnlQb2ludChzdGFydCkpKQogICAgICAgICAgICAgc3RhcnQgPSBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFydCk7CiAgICAgICAgIGF1dG8gZW5kID0g
dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKG5vZGUsIHJhbmdl
LnN0YXJ0ICsgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2UoZWxl
bWVudFJhbmdlKS0+Y29udGFpbnMoZW5kKSkKKyAgICAgICAgaWYgKCFpc1BvaW50SW5SYW5nZSgq
ZWxlbWVudFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChlbmQpKSkKICAgICAgICAgICAgIGVuZCA9
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAgICAg
ICAgbV9yZW5kZXJlci0+ZnJhbWUoKS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNl
bGVjdGlvbihzdGFydCwgZW5kKSwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25P
cHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKICAgICB9CkBAIC0yMjE2LDcgKzIyMDgsNyBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFu
Z2UoY29uc3QgVmlzaWJsZVBvcwogCiAgICAgICAgIGF1dG8gc3RhcnQgPSByYW5nZS5zdGFydDsK
ICAgICAgICAgaWYgKGF1dG8gZWxlbWVudFJhbmdlID0gdGhpcy0+ZWxlbWVudFJhbmdlKCkpIHsK
LSAgICAgICAgICAgIGlmICghY3JlYXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSktPmNvbnRhaW5z
KHN0YXJ0KSkKKyAgICAgICAgICAgIGlmICghaXNQb2ludEluUmFuZ2UoKmVsZW1lbnRSYW5nZSwg
bWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpKSkKICAgICAgICAgICAgICAgICBzdGFydCA9IGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlVXRpbC5jcHAKaW5kZXggOGQ2MjFiZTc4MWU5OTBjMWRjNDA2MGZlZGZiMzkyYjcx
NjU3NTRhOS4uOGY0M2YzODVjMzNhMjQzNzU5ZjEyY2Y3NGQ2MjkxZmVkZTkzZTMwZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0
aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcApAQCAtMTU1LDI1ICsxNTUsOCBAQCBib29sIHNlbGVjdGlvbkJlbG9uZ3NU
b09iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9u
JgogICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWxlY3Rpb24u
aXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSB3YW50IHRvIGNoZWNrIHRoYXQgYm90aCB0aGUgc2VsZWN0
aW9uIGludGVyc2VjdHMgdGhlIG5vZGUKLSAgICAvLyBBTkQgdGhhdCB0aGUgc2VsZWN0aW9uIGlz
IG5vdCBqdXN0ICJ0b3VjaGluZyIgb25lIG9mIHRoZQotICAgIC8vIGJvdW5kYXJpZXMgZm9yIHRo
ZSBzZWxlY3RlZCBub2RlLiBXZSB3YW50IHRvIGNoZWNrIHdoZXRoZXIgdGhlCi0gICAgLy8gbm9k
ZSBpcyBhY3R1YWxseSBpbnNpZGUgdGhlIHJlZ2lvbiwgYXQgbGVhc3QgcGFydGlhbGx5LgotICAg
IGF1dG8mIG5vZGUgPSAqY29yZU9iamVjdC0+bm9kZSgpOwotICAgIGF1dG8qIGxhc3REZXNjZW5k
YW50ID0gbm9kZS5sYXN0RGVzY2VuZGFudCgpOwotICAgIHVuc2lnbmVkIGxhc3RPZmZzZXQgPSBs
YXN0RGVzY2VuZGFudC0+bGVuZ3RoKCk7Ci0gICAgYXV0byBpbnRlcnNlY3RzUmVzdWx0ID0gY3Jl
YXRlTGl2ZVJhbmdlKCpyYW5nZSktPmludGVyc2VjdHNOb2RlKG5vZGUpOwotICAgIHJldHVybiAh
aW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKQotICAgICAgICAmJiBpbnRlcnNlY3RzUmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpCi0gICAgICAgICYmIChyYW5nZS0+ZW5kLmNvbnRhaW5l
ci5wdHIoKSAhPSAmbm9kZSB8fCByYW5nZS0+ZW5kLm9mZnNldCkKLSAgICAgICAgJiYgKHJhbmdl
LT5zdGFydC5jb250YWluZXIucHRyKCkgIT0gbGFzdERlc2NlbmRhbnQgfHwgcmFuZ2UtPnN0YXJ0
Lm9mZnNldCAhPSBsYXN0T2Zmc2V0KTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmZpcnN0
UmFuZ2UoKTsKKyAgICByZXR1cm4gcmFuZ2UgJiYgaW50ZXJzZWN0cygqcmFuZ2UsICpjb3JlT2Jq
ZWN0LT5ub2RlKCkpOwogfQogCiBBWENvcmVPYmplY3QqIG9iamVjdEZvY3VzZWRBbmRDYXJldE9m
ZnNldFVuaWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5jZU9iamVjdCwgaW50JiBvZmZzZXQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IGYwYzhhMzRlZjMzZWJjMDZkZDU3Mjk2MjA4NTBmYTEx
OTVjYjc1MDIuLjVhYmMyNGViYjk4MWU1NjRmMDdhZGViOGU1ZmMxMTU4MTMxYzUzNTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCkBAIC05MDUsNyArOTA1LDcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0
dXJucyB0aGUgb3duaW5nIGVsZW1lbnQgaW4gdGhlIHBhcmVudCBkb2N1bWVudC4KICAgICAvLyBS
ZXR1cm5zIG51bGxwdHIgaWYgdGhpcyBpcyB0aGUgdG9wIGxldmVsIGRvY3VtZW50LgotICAgIEhU
TUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQoKSBjb25zdDsKIAogICAg
IC8vIFVzZWQgYnkgRE9NIGJpbmRpbmdzOyBubyBkaXJlY3Rpb24ga25vd24uCiAgICAgY29uc3Qg
U3RyaW5nJiB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGl0bGUuc3RyaW5nOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IDBmN2Y5
OTBlM2VkOWE3NWM2MzExMjQwYWVkNTU3YTgxNzA1MWNlZTQuLjhhZTFkOGQ1NWI4ZmU3MGVlZTM5
NTdkM2RkZWQ3NTM4Y2QxM2JmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuY3BwCkBAIC02NDksNyArNjQ5LDcgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5n
ZShjb25zdAogCiB2b2lkIGFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IERvY3VtZW50TWFya2VyOjpEYXRhJiBk
YXRhKQogewotICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5tYXJrZXJzKCku
YWRkTWFya2VyKHJhbmdlLCB0eXBlLCBkYXRhKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgp
Lm1hcmtlcnMoKS5hZGRNYXJrZXIocmFuZ2UsIHR5cGUsIGRhdGEpOwogfQogCiB2b2lkIGFkZE1h
cmtlcihUZXh0JiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmIGRh
dGEpCkBAIC02NTksNyArNjU5LDcgQEAgdm9pZCBhZGRNYXJrZXIoVGV4dCYgbm9kZSwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXIKIAogdm9pZCBy
ZW1vdmVNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJr
ZXIgcG9saWN5KQogewotICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5tYXJr
ZXJzKCkucmVtb3ZlTWFya2VycyhyYW5nZSwgdHlwZXMsIHBvbGljeSk7CisgICAgcmFuZ2Uuc3Rh
cnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhyYW5nZSwgdHlwZXMsIHBvbGlj
eSk7CiB9CiAKIFNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShOb2RlJiBub2RlLCBjb25zdCBE
b2N1bWVudE1hcmtlciYgbWFya2VyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggZTc3YWQ3MjlkMzIw
M2IxMDM5NGQwYmViMDUyZmY1ZDU2YmEyZWRlNS4uODRmZmE3NzNlYmJiMzFmMTdjYTNlOWE5OWIw
ZjJjNjkxMTI3ZGE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0yOTcsNyArMjk3LDcgQEAgcHVi
bGljOgogICAgICAgICBTaGFkb3dSb290TW9kZSBtb2RlOwogICAgICAgICBib29sIGRlbGVnYXRl
c0ZvY3VzIHsgZmFsc2UgfTsKICAgICB9OwotICAgIEV4Y2VwdGlvbk9yPFNoYWRvd1Jvb3QmPiBh
dHRhY2hTaGFkb3coY29uc3QgU2hhZG93Um9vdEluaXQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBF
eGNlcHRpb25PcjxTaGFkb3dSb290Jj4gYXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0
Jik7CiAKICAgICBSZWZQdHI8U2hhZG93Um9vdD4gdXNlckFnZW50U2hhZG93Um9vdCgpIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIFNoYWRvd1Jvb3QmIGVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jv
b3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBhNjBjMzY1NzNlOTMyN2E5OTM0ZTQ2MzgwNTg4ZWQ0
ODJhMDhjMjMyLi5kZGYzZGE5OWYzYzMwYWI2YTI2OWRiMDRmYjU3M2Q4YWIwN2EwNWYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCkBAIC0yNjMyLDYgKzI2MzIsNyBAQCBzdGF0aWMgc2l6ZV90IGRlcHRoKGNv
bnN0IE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIGRlcHRoOwogfQogCisvLyBGSVhNRTogRE9NIHNw
ZWNpZmljYXRpb24gY2FsbHMgdGhpcyAic2hhZG93LWluY2x1c2l2ZSIgYnV0IHRoYXQncyBub3Qg
cmVmbGVjdGVkIGluIHRoaXMgZnVuY3Rpb24ncyBuYW1lLgogc3RydWN0IEFuY2VzdG9yQW5kQ2hp
bGRyZW4gewogICAgIGNvbnN0IE5vZGUqIGNvbW1vbkFuY2VzdG9yOwogICAgIGNvbnN0IE5vZGUq
IGRpc3RpbmN0QW5jZXN0b3JBOwpAQCAtMjY2NCw2ICsyNjY1LDcgQEAgc3RhdGljIEFuY2VzdG9y
QW5kQ2hpbGRyZW4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3JBbmRDaGlsZHJlbihjb25zdCBOb2Rl
JiBhLCBjb24KICAgICByZXR1cm4geyB4LCBkaXN0aW5jdEFuY2VzdG9yQSwgZGlzdGluY3RBbmNl
c3RvckIgfTsKIH0KIAorLy8gRklYTUU6IERPTSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoaXMgInNo
YWRvdy1pbmNsdXNpdmUiIGJ1dCB0aGF0J3Mgbm90IHJlZmxlY3RlZCBpbiB0aGlzIGZ1bmN0aW9u
J3MgbmFtZS4KIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihOb2RlJiBhLCBO
b2RlJiBiKQogewogICAgIHJldHVybiBjb25zdF9jYXN0PE5vZGUqPihjb21tb25JbmNsdXNpdmVB
bmNlc3RvckFuZENoaWxkcmVuKGEsIGIpLmNvbW1vbkFuY2VzdG9yKTsKQEAgLTI2NzEsNiArMjY3
Myw4IEBAIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihOb2RlJiBhLCBOb2Rl
JiBiKQogCiBzdGF0aWMgYm9vbCBpc1NpYmxpbmdTdWJzZXF1ZW50KGNvbnN0IE5vZGUmIHNpYmxp
bmdBLCBjb25zdCBOb2RlJiBzaWJsaW5nQikKIHsKKyAgICBBU1NFUlQoc2libGluZ0EucGFyZW50
Tm9kZSgpKTsKKyAgICBBU1NFUlQoc2libGluZ0EucGFyZW50Tm9kZSgpID09IHNpYmxpbmdCLnBh
cmVudE5vZGUoKSk7CiAgICAgQVNTRVJUKCZzaWJsaW5nQSAhPSAmc2libGluZ0IpOwogICAgIGZv
ciAoYXV0byBzaWJsaW5nID0gJnNpYmxpbmdBOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+
bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoc2libGluZyA9PSAmc2libGluZ0IpCkBAIC0y
NjkwLDYgKzI2OTQsMTYgQEAgUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgTm9k
ZSYgYSwgY29uc3QgTm9kZSYgYikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6bGVz
czsKICAgICBpZiAoIXJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQikKICAgICAgICAgcmV0dXJuIFBh
cnRpYWxPcmRlcmluZzo6Z3JlYXRlcjsKKyAgICBib29sIGlzU2hhZG93Um9vdEEgPSByZXN1bHQu
ZGlzdGluY3RBbmNlc3RvckEtPmlzU2hhZG93Um9vdCgpOworICAgIGJvb2wgaXNTaGFkb3dSb290
QiA9IHJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQi0+aXNTaGFkb3dSb290KCk7CisgICAgaWYgKGlz
U2hhZG93Um9vdEEgfHwgaXNTaGFkb3dSb290QikgeworICAgICAgICBpZiAoIWlzU2hhZG93Um9v
dEEpCisgICAgICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpsZXNzOworICAgICAgICBp
ZiAoIWlzU2hhZG93Um9vdEIpCisgICAgICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpn
cmVhdGVyOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFBh
cnRpYWxPcmRlcmluZzo6dW5vcmRlcmVkOworICAgIH0KICAgICByZXR1cm4gaXNTaWJsaW5nU3Vi
c2VxdWVudCgqcmVzdWx0LmRpc3RpbmN0QW5jZXN0b3JBLCAqcmVzdWx0LmRpc3RpbmN0QW5jZXN0
b3JCKSA/IFBhcnRpYWxPcmRlcmluZzo6bGVzcyA6IFBhcnRpYWxPcmRlcmluZzo6Z3JlYXRlcjsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgKaW5kZXggYjAyNWM0Y2ExYTZmYWVhZDkzMzc3YmIyN2RmN2RjZjJkMjQw
NDkxYi4uNTRmOWRmMTgwYTRmNmJmYjRhZjY3ZTU1MzUyOTkyNzYzMWEzZDdlNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oCkBAIC02OTMsNiArNjkzLDEyIEBAIHByaXZhdGU6CiAgICAgY29uc3RleHByIFBhcnRpYWxP
cmRlcmluZyhUeXBlIHR5cGUpIDogbV90eXBlIHsgdHlwZSB9IHsgfQogICAgIFR5cGUgbV90eXBl
OwogfTsKK2NvbnN0ZXhwciBib29sIGlzX2VxKFBhcnRpYWxPcmRlcmluZyk7Citjb25zdGV4cHIg
Ym9vbCBpc19sdChQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHByIGJvb2wgaXNfZ3QoUGFydGlh
bE9yZGVyaW5nKTsKK2NvbnN0ZXhwciBib29sIGlzX25lcShQYXJ0aWFsT3JkZXJpbmcpOworY29u
c3RleHByIGJvb2wgaXNfbHRlcShQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHByIGJvb2wgaXNf
Z3RlcShQYXJ0aWFsT3JkZXJpbmcpOwogCiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcg
ZG9jdW1lbnRPcmRlcihjb25zdCBOb2RlJiwgY29uc3QgTm9kZSYpOwogCkBAIC04MjksNiArODM1
LDIxIEBAIGNvbnN0ZXhwciBib29sIGlzX2d0KFBhcnRpYWxPcmRlcmluZyBvcmRlcmluZykKICAg
ICByZXR1cm4gb3JkZXJpbmcubV90eXBlID09IFBhcnRpYWxPcmRlcmluZzo6VHlwZTo6R3JlYXRl
cjsKIH0KIAorY29uc3RleHByIGJvb2wgaXNfbmVxKFBhcnRpYWxPcmRlcmluZyBvcmRlcmluZykK
K3sKKyAgICByZXR1cm4gaXNfbHQob3JkZXJpbmcpIHx8IGlzX2d0KG9yZGVyaW5nKTsKK30KKwor
Y29uc3RleHByIGJvb2wgaXNfbHRlcShQYXJ0aWFsT3JkZXJpbmcgb3JkZXJpbmcpCit7CisgICAg
cmV0dXJuIGlzX2x0KG9yZGVyaW5nKSB8fCBpc19lcShvcmRlcmluZyk7Cit9CisKK2NvbnN0ZXhw
ciBib29sIGlzX2d0ZXEoUGFydGlhbE9yZGVyaW5nIG9yZGVyaW5nKQoreworICAgIHJldHVybiBp
c19ndChvcmRlcmluZykgfHwgaXNfZXEob3JkZXJpbmcpOworfQorCiBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgTm9kZSYpOwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA4ZjZmZDNiYzhhYmE1YWZhNDU4Yzkz
NmYyZWUzY2M3NDA4NGRiYzJjLi4zNjIyMjc5Y2NhMDNmMTEyYmFjMTc1MDQxODc0NjlmNWJlMThj
NDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTY2LDcgKzY2LDYgQEAgdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIERFRklORV9ERUJVR19PTkxZX0dMT0JBTChXVEY6OlJlZkNvdW50ZWRMZWFr
Q291bnRlciwgcmFuZ2VDb3VudGVyLCAoIlJhbmdlIikpOwogCiBlbnVtIENvbnRlbnRzUHJvY2Vz
c0RpcmVjdGlvbiB7IFByb2Nlc3NDb250ZW50c0ZvcndhcmQsIFByb2Nlc3NDb250ZW50c0JhY2t3
YXJkIH07Ci1lbnVtIGNsYXNzIENvb3JkaW5hdGVTcGFjZSB7IEFic29sdXRlLCBDbGllbnQgfTsK
IAogc3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NOb2RlcyhSYW5nZTo6QWN0aW9uVHlw
ZSwgVmVjdG9yPFJlZjxOb2RlPj4mLCBOb2RlKiBvbGRDb250YWluZXIsIFJlZlB0cjxOb2RlPiBu
ZXdDb250YWluZXIpOwogc3RhdGljIEV4Y2VwdGlvbk9yPFJlZlB0cjxOb2RlPj4gcHJvY2Vzc0Nv
bnRlbnRzQmV0d2Vlbk9mZnNldHMoUmFuZ2U6OkFjdGlvblR5cGUsIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiwgUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCk7CkBAIC03NCw4ICs3Myw4IEBAIHN0YXRpYyBFeGNlcHRpb25PcjxS
ZWZQdHI8Tm9kZT4+IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKFJhbmdlOjpBY3Rp
b25UCiAKIGlubGluZSBSYW5nZTo6UmFuZ2UoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQpCiAgICAg
OiBtX293bmVyRG9jdW1lbnQob3duZXJEb2N1bWVudCkKLSAgICAsIG1fc3RhcnQoJm93bmVyRG9j
dW1lbnQpCi0gICAgLCBtX2VuZCgmb3duZXJEb2N1bWVudCkKKyAgICAsIG1fc3RhcnQob3duZXJE
b2N1bWVudCkKKyAgICAsIG1fZW5kKG93bmVyRG9jdW1lbnQpCiB7CiAjaWZuZGVmIE5ERUJVRwog
ICAgIHJhbmdlQ291bnRlci5pbmNyZW1lbnQoKTsKQEAgLTk4LDY1ICs5NywzOSBAQCBSYW5nZTo6
flJhbmdlKCkKICNlbmRpZgogfQogCi12b2lkIFJhbmdlOjpzZXREb2N1bWVudChEb2N1bWVudCYg
ZG9jdW1lbnQpCit2b2lkIFJhbmdlOjp1cGRhdGVEb2N1bWVudCgpCiB7Ci0gICAgQVNTRVJUKG1f
b3duZXJEb2N1bWVudC5wdHIoKSAhPSAmZG9jdW1lbnQpOworICAgIGF1dG8mIGRvY3VtZW50ID0g
c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpOworICAgIGlmIChtX293bmVyRG9jdW1lbnQucHRy
KCkgPT0gJmRvY3VtZW50KQorICAgICAgICByZXR1cm47CiAgICAgbV9vd25lckRvY3VtZW50LT5k
ZXRhY2hSYW5nZSgqdGhpcyk7CiAgICAgbV9vd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7Ci0gICAg
bV9zdGFydC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKLSAgICBtX2VuZC5zZXRUb1N0YXJ0
T2ZOb2RlKGRvY3VtZW50KTsKICAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlz
KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5l
cihjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIHN0YXJ0LCBjb25zdCBSYW5nZUJvdW5kYXJ5UG9p
bnQmIGVuZCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRTdGFydChSZWY8Tm9kZT4mJiBj
b250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICBOb2RlKiBlbmRSb290Q29udGFpbmVy
ID0gZW5kLmNvbnRhaW5lcigpOwotICAgIHdoaWxlIChlbmRSb290Q29udGFpbmVyLT5wYXJlbnRO
b2RlKCkpCi0gICAgICAgIGVuZFJvb3RDb250YWluZXIgPSBlbmRSb290Q29udGFpbmVyLT5wYXJl
bnROb2RlKCk7Ci0gICAgTm9kZSogc3RhcnRSb290Q29udGFpbmVyID0gc3RhcnQuY29udGFpbmVy
KCk7Ci0gICAgd2hpbGUgKHN0YXJ0Um9vdENvbnRhaW5lci0+cGFyZW50Tm9kZSgpKQotICAgICAg
ICBzdGFydFJvb3RDb250YWluZXIgPSBzdGFydFJvb3RDb250YWluZXItPnBhcmVudE5vZGUoKTsK
LQotICAgIHJldHVybiBzdGFydFJvb3RDb250YWluZXIgIT0gZW5kUm9vdENvbnRhaW5lciB8fCBS
YW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHN0YXJ0LCBlbmQpLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpID4gMDsKLX0KLQotRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldFN0YXJ0KFJlZjxOb2Rl
PiYmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKLXsKLSAgICBib29sIGRpZE1vdmVEb2N1bWVu
dCA9IGZhbHNlOwotICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVu
dCgpKSB7Ci0gICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUtPmRvY3VtZW50KCkpOwotICAgICAg
ICBkaWRNb3ZlRG9jdW1lbnQgPSB0cnVlOwotICAgIH0KLQotICAgIGF1dG8gY2hpbGROb2RlID0g
Y2hlY2tOb2RlV09mZnNldChyZWZOb2RlLCBvZmZzZXQpOworICAgIGF1dG8gY2hpbGROb2RlID0g
Y2hlY2tOb2RlT2Zmc2V0UGFpcihjb250YWluZXIsIG9mZnNldCk7CiAgICAgaWYgKGNoaWxkTm9k
ZS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS5yZWxlYXNlRXhjZXB0
aW9uKCk7CiAKLSAgICBtX3N0YXJ0LnNldChXVEZNb3ZlKHJlZk5vZGUpLCBvZmZzZXQsIGNoaWxk
Tm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci0KLSAgICBpZiAoZGlkTW92ZURvY3VtZW50IHx8
IGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5lcihtX3N0YXJ0LCBtX2VuZCkpCi0gICAgICAg
IGNvbGxhcHNlKHRydWUpOwotCisgICAgbV9zdGFydC5zZXQoV1RGTW92ZShjb250YWluZXIpLCBv
ZmZzZXQsIGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgaWYgKCFpc19sdGVx
KGRvY3VtZW50T3JkZXIobWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCksIG1ha2VCb3VuZGFyeVBv
aW50KG1fZW5kKSkpKQorICAgICAgICBtX2VuZCA9IG1fc3RhcnQ7CisgICAgdXBkYXRlRG9jdW1l
bnQoKTsKICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0
RW5kKFJlZjxOb2RlPiYmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK0V4Y2VwdGlvbk9yPHZv
aWQ+IFJhbmdlOjpzZXRFbmQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQp
CiB7Ci0gICAgYm9vbCBkaWRNb3ZlRG9jdW1lbnQgPSBmYWxzZTsKLSAgICBpZiAoJnJlZk5vZGUt
PmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgewotICAgICAgICBzZXREb2N1bWVudChy
ZWZOb2RlLT5kb2N1bWVudCgpKTsKLSAgICAgICAgZGlkTW92ZURvY3VtZW50ID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBhdXRvIGNoaWxkTm9kZSA9IGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zm
c2V0KTsKKyAgICBhdXRvIGNoaWxkTm9kZSA9IGNoZWNrTm9kZU9mZnNldFBhaXIoY29udGFpbmVy
LCBvZmZzZXQpOwogICAgIGlmIChjaGlsZE5vZGUuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBjaGlsZE5vZGUucmVsZWFzZUV4Y2VwdGlvbigpOwogCi0gICAgbV9lbmQuc2V0KFdURk1v
dmUocmVmTm9kZSksIG9mZnNldCwgY2hpbGROb2RlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLQot
ICAgIGlmIChkaWRNb3ZlRG9jdW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVy
KG1fc3RhcnQsIG1fZW5kKSkKLSAgICAgICAgY29sbGFwc2UoZmFsc2UpOwotCisgICAgbV9lbmQu
c2V0KFdURk1vdmUoY29udGFpbmVyKSwgb2Zmc2V0LCBjaGlsZE5vZGUucmVsZWFzZVJldHVyblZh
bHVlKCkpOworICAgIGlmICghaXNfbHRlcShkb2N1bWVudE9yZGVyKG1ha2VCb3VuZGFyeVBvaW50
KG1fc3RhcnQpLCBtYWtlQm91bmRhcnlQb2ludChtX2VuZCkpKSkKKyAgICAgICAgbV9zdGFydCA9
IG1fZW5kOworICAgIHVwZGF0ZURvY3VtZW50KCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAt
MTY4LDIzNyArMTQxLDEwMyBAQCB2b2lkIFJhbmdlOjpjb2xsYXBzZShib29sIHRvU3RhcnQpCiAg
ICAgICAgIG1fc3RhcnQgPSBtX2VuZDsKIH0KIAotRXhjZXB0aW9uT3I8Ym9vbD4gUmFuZ2U6Omlz
UG9pbnRJblJhbmdlKE5vZGUmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK0V4Y2VwdGlvbk9y
PGJvb2w+IFJhbmdlOjppc1BvaW50SW5SYW5nZShOb2RlJiBjb250YWluZXIsIHVuc2lnbmVkIG9m
ZnNldCkKIHsKLSAgICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGNoZWNrTm9kZVJlc3VsdCA9IGNo
ZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0KTsKLSAgICBpZiAoY2hlY2tOb2RlUmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIC8vIERPTTQgc3BlYyByZXF1aXJlcyB1cyB0byBj
aGVjayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZlIHRoZSBzYW1lIHJv
b3QgZmlyc3QKLSAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZlcnNlIG9yZGVyIHRv
IGF2b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0gICAgICAgIGlmICgh
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmVmTm9kZSwgc3RhcnRDb250YWluZXIoKSkpCisgICAg
aWYgKGF1dG8gY2hlY2tSZXN1bHQgPSBjaGVja05vZGVPZmZzZXRQYWlyKGNvbnRhaW5lciwgb2Zm
c2V0KTsgY2hlY2tSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgLy8gRE9NIHNwZWNp
ZmljYXRpb24gcmVxdWlyZXMgdGhpcyBjaGVjayBiZSBkb25lIGZpcnN0IGJ1dCBzaW5jZSB0aGVy
ZSBhcmUgbm8gc2lkZSBlZmZlY3RzLAorICAgICAgICAvLyB3ZSBjYW4gZG8gaXQgaW4gcmV2ZXJz
ZSBvcmRlciB0byBhdm9pZCBhbiBleHRyYSByb290IG5vZGUgY2hlY2sgaW4gdGhlIGNvbW1vbiBj
YXNlLgorICAgICAgICBpZiAoJmNvbnRhaW5lci5yb290Tm9kZSgpICE9ICZzdGFydENvbnRhaW5l
cigpLnJvb3ROb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVy
biBjaGVja05vZGVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gY2hl
Y2tSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KLQotICAgIGF1dG8gc3RhcnRDb21w
YXJlUmVzdWx0ID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZzdGFy
dENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpKTsKLSAgICBpZiAoISghc3RhcnRDb21wYXJl
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHN0YXJ0Q29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJu
VmFsdWUoKSA+PSAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gZW5kQ29tcGFy
ZVJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29u
dGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsKLSAgICByZXR1cm4gIWVuZENvbXBhcmVSZXN1bHQu
aGFzRXhjZXB0aW9uKCkgJiYgZW5kQ29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8
PSAwOworICAgIHJldHVybiBXZWJDb3JlOjppc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2Uo
KnRoaXMpLCB7IGNvbnRhaW5lciwgb2Zmc2V0IH0pOwogfQogCi1FeGNlcHRpb25PcjxzaG9ydD4g
UmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0
CitFeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiBjb250YWluZXIs
IHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsKLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemls
bGEub3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNvbXBhcmVQb2ludAotICAgIC8vIFRoaXMgbWV0aG9k
IHJldHVybnMgLTEsIDAgb3IgMSBkZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRlc2NyaWJlZCBi
eSB0aGUgCi0gICAgLy8gcmVmTm9kZSBub2RlIGFuZCBhbiBvZmZzZXQgd2l0aGluIHRoZSBub2Rl
IGlzIGJlZm9yZSwgc2FtZSBhcywgb3IgYWZ0ZXIgdGhlIHJhbmdlIHJlc3BlY3RpdmVseS4KLSAg
ICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgV3JvbmdEb2N1bWVudEVycm9yIH07Ci0KLSAgICBhdXRvIGNoZWNr
Tm9kZVJlc3VsdCA9IGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0KTsKLSAgICBpZiAo
Y2hlY2tOb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIC8vIERPTTQgc3BlYyBy
ZXF1aXJlcyB1cyB0byBjaGVjayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBo
YXZlIHRoZSBzYW1lIHJvb3QgZmlyc3QKLSAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSBy
ZXZlcnNlIG9yZGVyIHRvIGF2b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2Uu
Ci0gICAgICAgIGlmICghcmVmTm9kZS5pc0Nvbm5lY3RlZCgpICYmICFjb21tb25JbmNsdXNpdmVB
bmNlc3RvcihyZWZOb2RlLCBzdGFydENvbnRhaW5lcigpKSkKKyAgICBpZiAoYXV0byBjaGVja1Jl
c3VsdCA9IGNoZWNrTm9kZU9mZnNldFBhaXIoY29udGFpbmVyLCBvZmZzZXQpOyBjaGVja1Jlc3Vs
dC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICAvLyBET00gc3BlY2lmaWNhdGlvbiByZXF1aXJl
cyB0aGlzIGNoZWNrIGJlIGRvbmUgZmlyc3QgYnV0IHNpbmNlIHRoZXJlIGFyZSBubyBzaWRlIGVm
ZmVjdHMsCisgICAgICAgIC8vIHdlIGNhbiBkbyBpdCBpbiByZXZlcnNlIG9yZGVyIHRvIGF2b2lk
IGFuIGV4dHJhIHJvb3Qgbm9kZSBjaGVjayBpbiB0aGUgY29tbW9uIGNhc2UuCisgICAgICAgIGlm
ICgmY29udGFpbmVyLnJvb3ROb2RlKCkgIT0gJnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSkK
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKLSAg
ICAgICAgcmV0dXJuIGNoZWNrTm9kZVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgICAg
IHJldHVybiBjaGVja1Jlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgfQotCi0gICAgLy8g
Y29tcGFyZSB0byBzdGFydCwgYW5kIHBvaW50IGNvbWVzIGJlZm9yZQotICAgIGF1dG8gc3RhcnRD
b21wYXJlUmVzdWx0ID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZz
dGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpKTsKLSAgICBpZiAoc3RhcnRDb21wYXJl
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gc3RhcnRDb21wYXJlUmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBpZiAoc3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpIDwgMCkKKyAgICBhdXRvIG9yZGVyaW5nID0gZG9jdW1lbnRPcmRlcih7IGNv
bnRhaW5lciwgb2Zmc2V0IH0sIG1ha2VTaW1wbGVSYW5nZSgqdGhpcykpOworICAgIGlmIChpc19s
dChvcmRlcmluZykpCiAgICAgICAgIHJldHVybiAtMTsKLQotICAgIC8vIGNvbXBhcmUgdG8gZW5k
LCBhbmQgcG9pbnQgY29tZXMgYWZ0ZXIKLSAgICBhdXRvIGVuZENvbXBhcmVSZXN1bHQgPSBjb21w
YXJlQm91bmRhcnlQb2ludHMoJnJlZk5vZGUsIG9mZnNldCwgJmVuZENvbnRhaW5lcigpLCBtX2Vu
ZC5vZmZzZXQoKSk7Ci0gICAgaWYgKGVuZENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBlbmRDb21wYXJlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBp
ZiAoZW5kQ29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+IDApCisgICAgaWYgKGlz
X2VxKG9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGlzX2d0KG9yZGVyaW5n
KSkKICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAvLyBwb2ludCBpcyBpbiB0aGUgbWlkZGxlIG9m
IHRoaXMgcmFuZ2UsIG9yIG9uIHRoZSBib3VuZGFyeSBwb2ludHMKLSAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgV3JvbmdEb2N1bWVudEVycm9yIH07CiB9CiAKLUV4Y2VwdGlv
bk9yPFJhbmdlOjpDb21wYXJlUmVzdWx0cz4gUmFuZ2U6OmNvbXBhcmVOb2RlKE5vZGUmIHJlZk5v
ZGUpIGNvbnN0CitFeGNlcHRpb25PcjxSYW5nZTo6Q29tcGFyZVJlc3VsdHM+IFJhbmdlOjpjb21w
YXJlTm9kZShOb2RlJiBub2RlKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBUaGlzIGRlcHJlY2F0
ZWQgZnVuY3Rpb24gc2hvdWxkIGJlIHJlbW92ZWQuCisgICAgLy8gV2Ugb3JpZ2luYWxseSBhZGRl
ZCBpdCBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIEZpcmVmb3guCisgICAgLy8gUmVjZW50IHZl
cnNpb25zIG9mIEZpcmVmb3ggaGF2ZSByZW1vdmVkIGl0LgorCiAgICAgLy8gaHR0cDovL2RldmVs
b3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL0RPTTpyYW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRo
aXMgbWV0aG9kIHJldHVybnMgMCwgMSwgMiwgb3IgMyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBi
ZWZvcmUsIGFmdGVyLAotICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5z
aWRlIHRoZSByYW5nZSwgcmVzcGVjdGl2ZWx5Ci0KLSAgICBpZiAoIXJlZk5vZGUuaXNDb25uZWN0
ZWQoKSkgewotICAgICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZv
ciB0aGlzIGNhc2U7IGl0IHJldHVybnMgMC4KLSAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOwot
ICAgIH0KKyAgICAvLyBiZWZvcmUgYW5kIGFmdGVyKHN1cnJvdW5kcyksIG9yIGluc2lkZSB0aGUg
cmFuZ2UsIHJlc3BlY3RpdmVseS4KIAotICAgIGlmICgmcmVmTm9kZS5kb2N1bWVudCgpICE9ICZv
d25lckRvY3VtZW50KCkpIHsKLSAgICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4
Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBpdCByZXR1cm5zIDAuCisgICAgaWYgKCFub2RlLmlzQ29u
bmVjdGVkKCkgfHwgJm5vZGUuZG9jdW1lbnQoKSAhPSBtX293bmVyRG9jdW1lbnQucHRyKCkpIHsK
KyAgICAgICAgLy8gTWF0Y2ggaGlzdG9yaWNhbCBGaXJlZm94IGJlaGF2aW9yLgogICAgICAgICBy
ZXR1cm4gTk9ERV9CRUZPUkU7CiAgICAgfQogCi0gICAgYXV0byogcGFyZW50Tm9kZSA9IHJlZk5v
ZGUucGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50Tm9kZSkgewotICAgICAgICAvLyBJZiB0
aGUgbm9kZSBpcyB0aGUgdG9wIG9mIHRoZSB0cmVlIHdlIHNob3VsZCByZXR1cm4gTk9ERV9CRUZP
UkVfQU5EX0FGVEVSLAotICAgICAgICAvLyBidXQgd2UgdGhyb3cgdG8gbWF0Y2ggZmlyZWZveCBi
ZWhhdmlvci4KKyAgICBhdXRvIG5vZGVSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUobm9k
ZSk7CisgICAgaWYgKCFub2RlUmFuZ2UpIHsKKyAgICAgICAgLy8gTWF0Y2ggaGlzdG9yaWNhbCBG
aXJlZm94IGJlaGF2aW9yLgogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJv
ciB9OwogICAgIH0KLSAgICBhdXRvIG5vZGVJbmRleCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRl
eCgpOwotCi0gICAgYXV0byBub2RlU3RhcnRDb21wYXJlUmVzdWx0ID0gY29tcGFyZVBvaW50KCpw
YXJlbnROb2RlLCBub2RlSW5kZXgpOwotICAgIGlmIChub2RlU3RhcnRDb21wYXJlUmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gbm9kZVN0YXJ0Q29tcGFyZVJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCk7Ci0gICAgYXV0byBub2RlRW5kQ29tcGFyZVJlc3VsdCA9IGNvbXBhcmVQ
b2ludCgqcGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSk7Ci0gICAgaWYgKG5vZGVFbmRDb21wYXJl
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gbm9kZUVuZENvbXBhcmVSZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotCi0gICAgYm9vbCBub2RlU3RhcnRzQmVmb3JlUmFuZ2Ug
PSBub2RlU3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMDsKLSAgICBi
b29sIG5vZGVFbmRzQWZ0ZXJSYW5nZSA9IG5vZGVFbmRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpID4gMDsKLQotICAgIHJldHVybiBub2RlU3RhcnRzQmVmb3JlUmFuZ2UKLSAgICAg
ICAgPyAobm9kZUVuZHNBZnRlclJhbmdlID8gTk9ERV9CRUZPUkVfQU5EX0FGVEVSIDogTk9ERV9C
RUZPUkUpCi0gICAgICAgIDogKG5vZGVFbmRzQWZ0ZXJSYW5nZSA/IE5PREVfQUZURVIgOiBOT0RF
X0lOU0lERSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTm9kZSogdG9wKE5vZGUmIG5vZGUpCi17Ci0g
ICAgYXV0byogdG9wID0gJm5vZGU7Ci0gICAgd2hpbGUgKGF1dG8qIHBhcmVudCA9IHRvcC0+cGFy
ZW50Tm9kZSgpKQotICAgICAgICB0b3AgPSBwYXJlbnQ7Ci0gICAgcmV0dXJuIHRvcDsKLX0KLQot
RXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoQ29tcGFyZUhv
dyBob3csIGNvbnN0IFJhbmdlJiBzb3VyY2VSYW5nZSkgY29uc3QKLXsKLSAgICBhdXRvKiB0aGlz
Q29udGFpbmVyID0gY29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICBhdXRvKiBzb3VyY2VD
b250YWluZXIgPSBzb3VyY2VSYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwotICAgIGlm
ICghdGhpc0NvbnRhaW5lciB8fCAhc291cmNlQ29udGFpbmVyIHx8ICZ0aGlzQ29udGFpbmVyLT5k
b2N1bWVudCgpICE9ICZzb3VyY2VDb250YWluZXItPmRvY3VtZW50KCkgfHwgdG9wKCp0aGlzQ29u
dGFpbmVyKSAhPSB0b3AoKnNvdXJjZUNvbnRhaW5lcikpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKLQotICAgIHN3aXRjaCAoaG93KSB7Ci0gICAgY2Fz
ZSBTVEFSVF9UT19TVEFSVDoKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyht
X3N0YXJ0LCBzb3VyY2VSYW5nZS5tX3N0YXJ0KTsKLSAgICBjYXNlIFNUQVJUX1RPX0VORDoKLSAg
ICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2VuZCwgc291cmNlUmFuZ2UubV9z
dGFydCk7Ci0gICAgY2FzZSBFTkRfVE9fRU5EOgotICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS5tX2VuZCk7Ci0gICAgY2FzZSBFTkRfVE9fU1RB
UlQ6Ci0gICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFydCwgc291cmNl
UmFuZ2UubV9lbmQpOwotICAgIH0KIAotICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OworICAgIGF1dG8gc3RhcnRPcmRlcmluZyA9IGRvY3VtZW50T3JkZXIobm9kZVJhbmdlLT5z
dGFydCwgbWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCkpOworICAgIGF1dG8gZW5kT3JkZXJpbmcg
PSBkb2N1bWVudE9yZGVyKG5vZGVSYW5nZS0+ZW5kLCBtYWtlQm91bmRhcnlQb2ludChtX2VuZCkp
OworICAgIGlmIChpc19ndGVxKHN0YXJ0T3JkZXJpbmcpICYmIGlzX2x0ZXEoZW5kT3JkZXJpbmcp
KQorICAgICAgICByZXR1cm4gTk9ERV9JTlNJREU7CisgICAgaWYgKGlzX2x0ZXEoc3RhcnRPcmRl
cmluZykgJiYgaXNfZ3RlcShlbmRPcmRlcmluZykpCisgICAgICAgIHJldHVybiBOT0RFX0JFRk9S
RV9BTkRfQUZURVI7CisgICAgaWYgKGlzX2x0ZXEoc3RhcnRPcmRlcmluZykpCisgICAgICAgIHJl
dHVybiBOT0RFX0JFRk9SRTsKKyAgICBpZiAoaXNfZ3RlcShlbmRPcmRlcmluZykpCisgICAgICAg
IHJldHVybiBOT0RFX0FGVEVSOworICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50
RXJyb3IgfTsKIH0KIAotRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQ
b2ludHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9ydCBob3csIGNvbnN0IFJhbmdlJiBzb3VyY2VS
YW5nZSkgY29uc3QKK0V4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKHVuc2lnbmVkIHNob3J0IGhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlKSBjb25zdAog
eworICAgIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCogdGhpc1BvaW50OworICAgIGNvbnN0IFJh
bmdlQm91bmRhcnlQb2ludCogb3RoZXJQb2ludDsKICAgICBzd2l0Y2ggKGhvdykgewogICAgIGNh
c2UgU1RBUlRfVE9fU1RBUlQ6CisgICAgICAgIHRoaXNQb2ludCA9ICZtX3N0YXJ0OworICAgICAg
ICBvdGhlclBvaW50ID0gJnNvdXJjZVJhbmdlLm1fc3RhcnQ7CisgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgU1RBUlRfVE9fRU5EOgorICAgICAgICB0aGlzUG9pbnQgPSAmbV9lbmQ7CisgICAgICAg
IG90aGVyUG9pbnQgPSAmc291cmNlUmFuZ2UubV9zdGFydDsKKyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBFTkRfVE9fRU5EOgorICAgICAgICB0aGlzUG9pbnQgPSAmbV9lbmQ7CisgICAgICAgIG90
aGVyUG9pbnQgPSAmc291cmNlUmFuZ2UubV9lbmQ7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RU5EX1RPX1NUQVJUOgotICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHN0YXRp
Y19jYXN0PENvbXBhcmVIb3c+KGhvdyksIHNvdXJjZVJhbmdlKTsKKyAgICAgICAgdGhpc1BvaW50
ID0gJm1fc3RhcnQ7CisgICAgICAgIG90aGVyUG9pbnQgPSAmc291cmNlUmFuZ2UubV9lbmQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
b3RTdXBwb3J0ZWRFcnJvciB9OwogICAgIH0KLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3Vw
cG9ydGVkRXJyb3IgfTsKLX0KLQotRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91
bmRhcnlQb2ludHMoTm9kZSogY29udGFpbmVyQSwgdW5zaWduZWQgb2Zmc2V0QSwgTm9kZSogY29u
dGFpbmVyQiwgdW5zaWduZWQgb2Zmc2V0QikKLXsKLSAgICBBU1NFUlQoY29udGFpbmVyQSk7Ci0g
ICAgQVNTRVJUKGNvbnRhaW5lckIpOwotCi0gICAgaWYgKCFjb250YWluZXJBKQorICAgIGF1dG8g
b3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKG1ha2VCb3VuZGFyeVBvaW50KCp0aGlzUG9pbnQpLCBt
YWtlQm91bmRhcnlQb2ludCgqb3RoZXJQb2ludCkpOworICAgIGlmIChpc19sdChvcmRlcmluZykp
CiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIWNvbnRhaW5lckIpCisgICAgaWYgKGlzX2Vx
KG9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGlzX2d0KG9yZGVyaW5nKSkK
ICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAvLyBzZWUgRE9NMiB0cmF2ZXJzYWwgJiByYW5nZSBz
ZWN0aW9uIDIuNQotCi0gICAgLy8gY2FzZSAxOiBib3RoIHBvaW50cyBoYXZlIHRoZSBzYW1lIGNv
bnRhaW5lcgotICAgIGlmIChjb250YWluZXJBID09IGNvbnRhaW5lckIpIHsKLSAgICAgICAgaWYg
KG9mZnNldEEgPT0gb2Zmc2V0QikKLSAgICAgICAgICAgIHJldHVybiAwOyAvLyBBIGlzIGVxdWFs
IHRvIEIKLSAgICAgICAgaWYgKG9mZnNldEEgPCBvZmZzZXRCKQotICAgICAgICAgICAgcmV0dXJu
IC0xOyAvLyBBIGlzIGJlZm9yZSBCCi0gICAgICAgIHJldHVybiAxOyAvLyBBIGlzIGFmdGVyIEIK
LSAgICB9Ci0KLSAgICAvLyBjYXNlIDI6IG5vZGUgQyAoY29udGFpbmVyIEIgb3IgYW4gYW5jZXN0
b3IpIGlzIGEgY2hpbGQgbm9kZSBvZiBBCi0gICAgTm9kZSogYyA9IGNvbnRhaW5lckI7Ci0gICAg
d2hpbGUgKGMgJiYgYy0+cGFyZW50Tm9kZSgpICE9IGNvbnRhaW5lckEpCi0gICAgICAgIGMgPSBj
LT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKGMpIHsKLSAgICAgICAgdW5zaWduZWQgb2Zmc2V0QyA9
IDA7Ci0gICAgICAgIE5vZGUqIG4gPSBjb250YWluZXJBLT5maXJzdENoaWxkKCk7Ci0gICAgICAg
IHdoaWxlIChuICE9IGMgJiYgb2Zmc2V0QyA8IG9mZnNldEEpIHsKLSAgICAgICAgICAgIG9mZnNl
dEMrKzsKLSAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChvZmZzZXRBIDw9IG9mZnNldEMpCi0gICAgICAgICAgICByZXR1cm4gLTE7IC8vIEEg
aXMgYmVmb3JlIEIKLSAgICAgICAgcmV0dXJuIDE7IC8vIEEgaXMgYWZ0ZXIgQgotICAgIH0KLQot
ICAgIC8vIGNhc2UgMzogbm9kZSBDIChjb250YWluZXIgQSBvciBhbiBhbmNlc3RvcikgaXMgYSBj
aGlsZCBub2RlIG9mIEIKLSAgICBjID0gY29udGFpbmVyQTsKLSAgICB3aGlsZSAoYyAmJiBjLT5w
YXJlbnROb2RlKCkgIT0gY29udGFpbmVyQikKLSAgICAgICAgYyA9IGMtPnBhcmVudE5vZGUoKTsK
LSAgICBpZiAoYykgewotICAgICAgICB1bnNpZ25lZCBvZmZzZXRDID0gMDsKLSAgICAgICAgTm9k
ZSogbiA9IGNvbnRhaW5lckItPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgd2hpbGUgKG4gIT0gYyAm
JiBvZmZzZXRDIDwgb2Zmc2V0QikgewotICAgICAgICAgICAgb2Zmc2V0QysrOwotICAgICAgICAg
ICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldEMg
PCBvZmZzZXRCKQotICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBBIGlzIGJlZm9yZSBCCi0gICAg
ICAgIHJldHVybiAxOyAvLyBBIGlzIGFmdGVyIEIKLSAgICB9Ci0KLSAgICAvLyBjYXNlIDQ6IGNv
bnRhaW5lcnMgQSAmIEIgYXJlIHNpYmxpbmdzLCBvciBjaGlsZHJlbiBvZiBzaWJsaW5ncwotICAg
IC8vICMjIyB3ZSBuZWVkIHRvIGRvIGEgdHJhdmVyc2FsIGhlcmUgaW5zdGVhZAotICAgIGF1dG8g
Y29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqY29udGFpbmVyQSwgKmNv
bnRhaW5lckIpOwotICAgIGlmICghY29tbW9uQW5jZXN0b3IpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKLSAgICBOb2RlKiBjaGlsZEEgPSBjb250YWlu
ZXJBOwotICAgIHdoaWxlIChjaGlsZEEgJiYgY2hpbGRBLT5wYXJlbnROb2RlKCkgIT0gY29tbW9u
QW5jZXN0b3IpCi0gICAgICAgIGNoaWxkQSA9IGNoaWxkQS0+cGFyZW50Tm9kZSgpOwotICAgIGlm
ICghY2hpbGRBKQotICAgICAgICBjaGlsZEEgPSBjb21tb25BbmNlc3Rvci5nZXQoKTsKLSAgICBO
b2RlKiBjaGlsZEIgPSBjb250YWluZXJCOwotICAgIHdoaWxlIChjaGlsZEIgJiYgY2hpbGRCLT5w
YXJlbnROb2RlKCkgIT0gY29tbW9uQW5jZXN0b3IpCi0gICAgICAgIGNoaWxkQiA9IGNoaWxkQi0+
cGFyZW50Tm9kZSgpOwotICAgIGlmICghY2hpbGRCKQotICAgICAgICBjaGlsZEIgPSBjb21tb25B
bmNlc3Rvci5nZXQoKTsKLQotICAgIGlmIChjaGlsZEEgPT0gY2hpbGRCKQotICAgICAgICByZXR1
cm4gMDsgLy8gQSBpcyBlcXVhbCB0byBCCi0KLSAgICBOb2RlKiBuID0gY29tbW9uQW5jZXN0b3It
PmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAobikgewotICAgICAgICBpZiAobiA9PSBjaGlsZEEp
Ci0gICAgICAgICAgICByZXR1cm4gLTE7IC8vIEEgaXMgYmVmb3JlIEIKLSAgICAgICAgaWYgKG4g
PT0gY2hpbGRCKQotICAgICAgICAgICAgcmV0dXJuIDE7IC8vIEEgaXMgYWZ0ZXIgQgotICAgICAg
ICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyBTaG91bGQgbmV2ZXIgcmVh
Y2ggdGhpcyBwb2ludC4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoY29u
c3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeUEsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2lu
dCYgYm91bmRhcnlCKQotewotICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMoYm91bmRh
cnlBLmNvbnRhaW5lcigpLCBib3VuZGFyeUEub2Zmc2V0KCksIGJvdW5kYXJ5Qi5jb250YWluZXIo
KSwgYm91bmRhcnlCLm9mZnNldCgpKTsKLX0KLQotYm9vbCBSYW5nZTo6Ym91bmRhcnlQb2ludHNW
YWxpZCgpIGNvbnN0Ci17Ci0gICAgYXV0byByZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMo
bV9zdGFydCwgbV9lbmQpOwotICAgIHJldHVybiAhcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJl
c3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwOworICAgIHJldHVybiBFeGNlcHRpb24geyBX
cm9uZ0RvY3VtZW50RXJyb3IgfTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OmRlbGV0
ZUNvbnRlbnRzKCkKQEAgLTQwOSwyNiArMjQ4LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6
OmRlbGV0ZUNvbnRlbnRzKCkKICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRpb25Pcjxib29s
PiBSYW5nZTo6aW50ZXJzZWN0c05vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3QKK2Jvb2wgUmFuZ2U6
OmludGVyc2VjdHNOb2RlKE5vZGUmIG5vZGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZWZOb2RlLmlz
Q29ubmVjdGVkKCkgfHwgJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvKiBwYXJlbnROb2RlID0gcmVmTm9kZS5w
YXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnROb2RlKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwot
Ci0gICAgLy8gSWYgKHBhcmVudE5vZGUsIG5vZGVJbmRleCkgaXMgYmVmb3JlIGVuZCBhbmQgKHBh
cmVudE5vZGUsIG5vZGVJbmRleCArIDEpIGlzIGFmdGVyIHN0YXJ0LCByZXR1cm4gdHJ1ZS4KLSAg
ICAvLyBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4KLSAgICBhdXRvIGNvbXBhcmVFbmRSZXN1bHQg
PSBjb21wYXJlQm91bmRhcnlQb2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4LCBtX2VuZC5jb250
YWluZXIoKSwgbV9lbmQub2Zmc2V0KCkpOwotICAgIGlmIChjb21wYXJlRW5kUmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gY29tcGFyZUVuZFJlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCk7Ci0gICAgYXV0byBjb21wYXJlU3RhcnRSZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2lu
dHMocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgbV9zdGFydC5jb250YWluZXIoKSwgbV9zdGFy
dC5vZmZzZXQoKSk7Ci0gICAgaWYgKGNvbXBhcmVTdGFydFJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIGNvbXBhcmVTdGFydFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0g
ICAgcmV0dXJuIGNvbXBhcmVFbmRSZXN1bHQucmV0dXJuVmFsdWUoKSA9PSAtMSAmJiBjb21wYXJl
U3RhcnRSZXN1bHQucmV0dXJuVmFsdWUoKSA9PSAxOworICAgIHJldHVybiBpbnRlcnNlY3RzKG1h
a2VTaW1wbGVSYW5nZSgqdGhpcyksIG5vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIE5vZGUqIGhp
Z2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdChOb2RlKiBub2RlLCBOb2RlKiBjb21tb25Sb290
KQpAQCAtNDY0LDMyICsyODYsMTEgQEAgc3RhdGljIGlubGluZSBOb2RlKiBjaGlsZE9mQ29tbW9u
Um9vdEJlZm9yZU9mZnNldChOb2RlKiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnMKICAgICByZXR1
cm4gY29udGFpbmVyOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxlbmd0aE9mQ29udGVu
dHNJbk5vZGUoTm9kZSYgbm9kZSkKLXsKLSAgICAvLyBUaGlzIHN3aXRjaCBzdGF0ZW1lbnQgbXVz
dCBiZSBjb25zaXN0ZW50IHdpdGggdGhhdCBvZiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRzQmV0d2Vl
bk9mZnNldHMuCi0gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKCkpIHsKLSAgICBjYXNlIE5vZGU6
OkRPQ1VNRU5UX1RZUEVfTk9ERToKLSAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgotICAg
ICAgICByZXR1cm4gMDsKLSAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKLSAgICBjYXNlIE5vZGU6
OkNEQVRBX1NFQ1RJT05fTk9ERToKLSAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKLSAgICBj
YXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpLmxlbmd0aCgpOwotICAgIGNhc2UgTm9kZTo6RUxF
TUVOVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKLSAgICBjYXNlIE5vZGU6
OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxDb250YWlu
ZXJOb2RlPihub2RlKS5jb3VudENoaWxkTm9kZXMoKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50Pj4gUmFuZ2U6OnByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlIGFjdGlvbikKIHsK
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQ7CiAgICAgaWYgKGFjdGlvbiA9
PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBDbG9uZSkKLSAgICAgICAgZnJhZ21lbnQgPSBEb2N1bWVu
dEZyYWdtZW50OjpjcmVhdGUob3duZXJEb2N1bWVudCgpKTsKKyAgICAgICAgZnJhZ21lbnQgPSBE
b2N1bWVudEZyYWdtZW50OjpjcmVhdGUobV9vd25lckRvY3VtZW50KTsKIAogICAgIGlmIChjb2xs
YXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwpAQCAtNTA5LDggKzMxMCw4IEBAIEV4
Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6OnByb2Nlc3NDb250ZW50
cyhBY3Rpb25UeXBlIGFjdGlvbikKICAgICBSYW5nZUJvdW5kYXJ5UG9pbnQgb3JpZ2luYWxFbmQo
bV9lbmQpOwogCiAgICAgLy8gd2hhdCBpcyB0aGUgaGlnaGVzdCBub2RlIHRoYXQgcGFydGlhbGx5
IHNlbGVjdHMgdGhlIHN0YXJ0IC8gZW5kIG9mIHRoZSByYW5nZT8KLSAgICBSZWZQdHI8Tm9kZT4g
cGFydGlhbFN0YXJ0ID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21tb25Sb290KG9yaWdpbmFsU3Rh
cnQuY29udGFpbmVyKCksIGNvbW1vblJvb3QuZ2V0KCkpOwotICAgIFJlZlB0cjxOb2RlPiBwYXJ0
aWFsRW5kID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21tb25Sb290KG9yaWdpbmFsRW5kLmNvbnRh
aW5lcigpLCBjb21tb25Sb290LmdldCgpKTsKKyAgICBSZWZQdHI8Tm9kZT4gcGFydGlhbFN0YXJ0
ID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21tb25Sb290KCZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5l
cigpLCBjb21tb25Sb290LmdldCgpKTsKKyAgICBSZWZQdHI8Tm9kZT4gcGFydGlhbEVuZCA9IGhp
Z2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdCgmb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIGNv
bW1vblJvb3QuZ2V0KCkpOwogCiAgICAgLy8gU3RhcnQgYW5kIGVuZCBjb250YWluZXJzIGFyZSBk
aWZmZXJlbnQuCiAgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXMgaGVyZToKQEAg
LTUzMywyOCArMzM0LDI4IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4g
UmFuZ2U6OnByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlIGFjdGlvbikKICAgICAvLyBhZnRlciBh
bnkgRE9NIG11dGF0aW9uIGV2ZW50LCBhdCB2YXJpb3VzIHN0YWdlcyBiZWxvdy4gU2VlIHdlYmtp
dCBidWcgNjAzNTAuCiAKICAgICBSZWZQdHI8Tm9kZT4gbGVmdENvbnRlbnRzOwotICAgIGlmIChv
cmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpICE9IGNvbW1vblJvb3QgJiYgY29tbW9uUm9vdC0+Y29u
dGFpbnMob3JpZ2luYWxTdGFydC5jb250YWluZXIoKSkpIHsKLSAgICAgICAgYXV0byBmaXJzdFJl
c3VsdCA9IHByb2Nlc3NDb250ZW50c0JldHdlZW5PZmZzZXRzKGFjdGlvbiwgbnVsbHB0ciwgb3Jp
Z2luYWxTdGFydC5jb250YWluZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgbGVuZ3RoT2ZD
b250ZW50c0luTm9kZSgqb3JpZ2luYWxTdGFydC5jb250YWluZXIoKSkpOwotICAgICAgICBhdXRv
IHNlY29uZFJlc3VsdCA9IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKGFjdGlvbiwg
b3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgUHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCwgV1RGTW92
ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0KCkpOworICAgIGlmICgmb3JpZ2luYWxTdGFy
dC5jb250YWluZXIoKSAhPSBjb21tb25Sb290ICYmIGNvbW1vblJvb3QtPmNvbnRhaW5zKCZvcmln
aW5hbFN0YXJ0LmNvbnRhaW5lcigpKSkgeworICAgICAgICBhdXRvIGZpcnN0UmVzdWx0ID0gcHJv
Y2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMoYWN0aW9uLCBudWxscHRyLCAmb3JpZ2luYWxTdGFy
dC5jb250YWluZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgb3JpZ2luYWxTdGFydC5jb250
YWluZXIoKS5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8gc2Vjb25kUmVzdWx0ID0gcHJvY2Vzc0Fu
Y2VzdG9yc0FuZFRoZWlyU2libGluZ3MoYWN0aW9uLCAmb3JpZ2luYWxTdGFydC5jb250YWluZXIo
KSwgUHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJv
b3QuZ2V0KCkpOwogICAgICAgICAvLyBGSVhNRTogQSBiaXQgcGVjdWxpYXIgdGhhdCB3ZSBzaWxl
bnRseSBpZ25vcmUgdGhlIGV4Y2VwdGlvbiBoZXJlLCBidXQgd2UgZG8gaGF2ZSBhdCBsZWFzdCBz
b21lIHJlZ3Jlc3Npb24gdGVzdHMgdGhhdCByZWx5IG9uIHRoaXMgYmVoYXZpb3IuCiAgICAgICAg
IGlmICghc2Vjb25kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAgbGVmdENvbnRl
bnRzID0gc2Vjb25kUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgIH0KIAogICAgIFJl
ZlB0cjxOb2RlPiByaWdodENvbnRlbnRzOwotICAgIGlmICgmZW5kQ29udGFpbmVyKCkgIT0gY29t
bW9uUm9vdCAmJiBjb21tb25Sb290LT5jb250YWlucyhvcmlnaW5hbEVuZC5jb250YWluZXIoKSkp
IHsKLSAgICAgICAgYXV0byBmaXJzdFJlc3VsdCA9IHByb2Nlc3NDb250ZW50c0JldHdlZW5PZmZz
ZXRzKGFjdGlvbiwgbnVsbHB0ciwgb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIDAsIG9yaWdpbmFs
RW5kLm9mZnNldCgpKTsKLSAgICAgICAgYXV0byBzZWNvbmRSZXN1bHQgPSBwcm9jZXNzQW5jZXN0
b3JzQW5kVGhlaXJTaWJsaW5ncyhhY3Rpb24sIG9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBQcm9j
ZXNzQ29udGVudHNCYWNrd2FyZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0
KCkpOworICAgIGlmICgmZW5kQ29udGFpbmVyKCkgIT0gY29tbW9uUm9vdCAmJiBjb21tb25Sb290
LT5jb250YWlucygmb3JpZ2luYWxFbmQuY29udGFpbmVyKCkpKSB7CisgICAgICAgIGF1dG8gZmly
c3RSZXN1bHQgPSBwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cyhhY3Rpb24sIG51bGxwdHIs
ICZvcmlnaW5hbEVuZC5jb250YWluZXIoKSwgMCwgb3JpZ2luYWxFbmQub2Zmc2V0KCkpOworICAg
ICAgICBhdXRvIHNlY29uZFJlc3VsdCA9IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdz
KGFjdGlvbiwgJm9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBQcm9jZXNzQ29udGVudHNCYWNrd2Fy
ZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0KCkpOwogICAgICAgICAvLyBG
SVhNRTogQSBiaXQgcGVjdWxpYXIgdGhhdCB3ZSBzaWxlbnRseSBpZ25vcmUgdGhlIGV4Y2VwdGlv
biBoZXJlLCBidXQgd2UgZG8gaGF2ZSBhdCBsZWFzdCBzb21lIHJlZ3Jlc3Npb24gdGVzdHMgdGhh
dCByZWx5IG9uIHRoaXMgYmVoYXZpb3IuCiAgICAgICAgIGlmICghc2Vjb25kUmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKQogICAgICAgICAgICAgcmlnaHRDb250ZW50cyA9IHNlY29uZFJlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKTsKICAgICB9CiAKICAgICAvLyBkZWxldGUgYWxsIGNoaWxkcmVuIG9m
IGNvbW1vblJvb3QgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBjb250YWluZXIKLSAgICBSZWZQ
dHI8Tm9kZT4gcHJvY2Vzc1N0YXJ0ID0gY2hpbGRPZkNvbW1vblJvb3RCZWZvcmVPZmZzZXQob3Jp
Z2luYWxTdGFydC5jb250YWluZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgY29tbW9uUm9v
dC5nZXQoKSk7Ci0gICAgaWYgKHByb2Nlc3NTdGFydCAmJiBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5l
cigpICE9IGNvbW1vblJvb3QpIC8vIHByb2Nlc3NTdGFydCBjb250YWlucyBub2RlcyBiZWZvcmUg
bV9zdGFydC4KKyAgICBSZWZQdHI8Tm9kZT4gcHJvY2Vzc1N0YXJ0ID0gY2hpbGRPZkNvbW1vblJv
b3RCZWZvcmVPZmZzZXQoJm9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCksIG9yaWdpbmFsU3RhcnQu
b2Zmc2V0KCksIGNvbW1vblJvb3QuZ2V0KCkpOworICAgIGlmIChwcm9jZXNzU3RhcnQgJiYgJm9y
aWdpbmFsU3RhcnQuY29udGFpbmVyKCkgIT0gY29tbW9uUm9vdCkgLy8gcHJvY2Vzc1N0YXJ0IGNv
bnRhaW5zIG5vZGVzIGJlZm9yZSBtX3N0YXJ0LgogICAgICAgICBwcm9jZXNzU3RhcnQgPSBwcm9j
ZXNzU3RhcnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgUmVmUHRyPE5vZGU+IHByb2Nlc3NFbmQgPSBj
aGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldChvcmlnaW5hbEVuZC5jb250YWluZXIoKSwgb3Jp
Z2luYWxFbmQub2Zmc2V0KCksIGNvbW1vblJvb3QuZ2V0KCkpOworICAgIFJlZlB0cjxOb2RlPiBw
cm9jZXNzRW5kID0gY2hpbGRPZkNvbW1vblJvb3RCZWZvcmVPZmZzZXQoJm9yaWdpbmFsRW5kLmNv
bnRhaW5lcigpLCBvcmlnaW5hbEVuZC5vZmZzZXQoKSwgY29tbW9uUm9vdC5nZXQoKSk7CiAKICAg
ICAvLyBDb2xsYXBzZSB0aGUgcmFuZ2UsIG1ha2luZyBzdXJlIHRoYXQgdGhlIHJlc3VsdCBpcyBu
b3Qgd2l0aGluIGEgbm9kZSB0aGF0IHdhcyBwYXJ0aWFsbHkgc2VsZWN0ZWQuCiAgICAgaWYgKGFj
dGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBEZWxldGUpIHsKQEAgLTYxOSw3ICs0MjAsNiBA
QCBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmUHRyPE5vZGU+PiBwcm9jZXNzQ29udGVudHNCZXR3ZWVu
T2Zmc2V0cyhSYW5nZTo6QWN0aW9uVHlwZQogCiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdDsKIAot
ICAgIC8vIFRoaXMgc3dpdGNoIHN0YXRlbWVudCBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGF0
IG9mIGxlbmd0aE9mQ29udGVudHNJbk5vZGUuCiAgICAgc3dpdGNoIChjb250YWluZXItPm5vZGVU
eXBlKCkpIHsKICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKICAgICBjYXNlIE5vZGU6OkNEQVRB
X1NFQ1RJT05fTk9ERToKQEAgLTg2OCwzMCArNjY4LDE3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJh
bmdlOjppbnNlcnROb2RlKFJlZjxOb2RlPiYmIG5vZGUpCiAKIFN0cmluZyBSYW5nZTo6dG9TdHJp
bmcoKSBjb25zdAogeworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpOwog
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgIE5vZGUqIHBhc3RMYXN0ID0gcGFzdExh
c3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFz
dExhc3Q7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBhdXRv
IHR5cGUgPSBub2RlLT5ub2RlVHlwZSgpOwotICAgICAgICBpZiAodHlwZSA9PSBOb2RlOjpURVhU
X05PREUgfHwgdHlwZSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0ID0gbm9kZSA9PSAmc3RhcnRDb250YWluZXIoKSA/IG1fc3RhcnQub2Zm
c2V0KCkgOiAwVTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IG5vZGUgPT0gJmVuZENvbnRh
aW5lcigpID8gc3RkOjptYXgoc3RhcnQsIG1fZW5kLm9mZnNldCgpKSA6IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3Vic3Ry
aW5nKGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCpub2RlKS5kYXRhKCksIHN0YXJ0LCBlbmQgLSBz
dGFydCk7CisgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7
CisgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkgeworICAgICAgICAgICAgYXV0byBvZmZzZXRS
YW5nZSA9IGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShyYW5nZSwgbm9kZSk7CisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZFN1YnN0cmluZyhkb3duY2FzdDxUZXh0Pihub2RlKS5kYXRhKCksIG9m
ZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5lbmQgLSBvZmZzZXRSYW5nZS5zdGFydCk7CiAg
ICAgICAgIH0KICAgICB9Ci0KICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1T
dHJpbmcgUmFuZ2U6OnRleHQoKSBjb25zdAotewotICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIGxh
eW91dCwgc2luY2UgcGxhaW5UZXh0IHVzZXMgbGluZSBib3hlcyBpbiB0aGUgcmVuZGVyIHRyZWUu
Ci0gICAgLy8gRklYTUU6IEFzIHdpdGggaW5uZXJUZXh0LCB3ZSdkIGxpa2UgdGhpcyB0byB3b3Jr
IGV2ZW4gaWYgdGhlcmUgYXJlIG5vIHJlbmRlciBvYmplY3RzLgotICAgIHN0YXJ0Q29udGFpbmVy
KCkuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKLQotICAgIHJldHVybiBwbGFpblRleHQobWFr
ZVNpbXBsZVJhbmdlKCp0aGlzKSk7Ci19Ci0KIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9ET00t
UGFyc2luZy8jd2lkbC1SYW5nZS1jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQtRG9jdW1lbnRGcmFn
bWVudC1ET01TdHJpbmctZnJhZ21lbnQKIEV4Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50
Pj4gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCkK
IHsKQEAgLTkwOCwxMiArNjk1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+
PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYKICAgICByZXR1
cm4gV2ViQ29yZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCplbGVtZW50LCBtYXJrdXAsIEFs
bG93U2NyaXB0aW5nQ29udGVudEFuZERvTm90TWFya0FscmVhZHlTdGFydGVkKTsKIH0KIAotdm9p
ZCBSYW5nZTo6ZGV0YWNoKCkKLXsKLSAgICAvLyBUaGlzIGlzIG5vdyBhIG5vLW9wIGFzIHBlciB0
aGUgRE9NIHNwZWNpZmljYXRpb24uCi19Ci0KLUV4Y2VwdGlvbk9yPE5vZGUqPiBSYW5nZTo6Y2hl
Y2tOb2RlV09mZnNldChOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CitFeGNlcHRp
b25PcjxOb2RlKj4gUmFuZ2U6OmNoZWNrTm9kZU9mZnNldFBhaXIoTm9kZSYgbm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0KSBjb25zdAogewogICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgpAQCAtOTQzLDU5ICs3MjUsNTUgQEAg
RXhjZXB0aW9uT3I8Tm9kZSo+IFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUmIG5vZGUsIHVu
c2lnbmVkIG9mZnNldCkgY29uc3QKIAogUmVmPFJhbmdlPiBSYW5nZTo6Y2xvbmVSYW5nZSgpIGNv
bnN0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBjcmVhdGUob3duZXJEb2N1bWVudCgpKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGNyZWF0ZShtX293bmVyRG9jdW1lbnQpOwogICAgIHJlc3VsdC0+c2V0U3Rh
cnQoc3RhcnRDb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSk7CiAgICAgcmVzdWx0LT5zZXRF
bmQoZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlJiByZWZOb2Rl
KQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoTm9kZSYgbm9kZSkKIHsK
LSAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKQorICAgIGF1dG8gcGFyZW50ID0gbm9kZS5w
YXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwotICAgIHJldHVybiBzZXRTdGFydCgqcmVmTm9kZS5w
YXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSk7CisgICAgcmV0dXJu
IHNldFN0YXJ0KCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSk7CiB9CiAKLUV4
Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmRCZWZvcmUoTm9kZSYgcmVmTm9kZSkKK0V4Y2Vw
dGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmRCZWZvcmUoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAo
IXJlZk5vZGUucGFyZW50Tm9kZSgpKQorICAgIGF1dG8gcGFyZW50ID0gbm9kZS5wYXJlbnROb2Rl
KCk7CisgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
Tm9kZVR5cGVFcnJvciB9OwotICAgIHJldHVybiBzZXRFbmQoKnJlZk5vZGUucGFyZW50Tm9kZSgp
LCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSk7CisgICAgcmV0dXJuIHNldEVuZCgqcGFyZW50
LCBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdl
OjpzZXRFbmRBZnRlcihOb2RlJiByZWZOb2RlKQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNl
dEVuZEFmdGVyKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkK
KyAgICBhdXRvIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpOworICAgIGlmICghcGFyZW50KQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKLSAgICBy
ZXR1cm4gc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUlu
ZGV4KCkgKyAxKTsKKyAgICByZXR1cm4gc2V0RW5kKCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJ
bmRleCgpICsgMSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZWxlY3ROb2RlKE5v
ZGUmIHJlZk5vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2VsZWN0Tm9kZShOb2RlJiBu
b2RlKQogewotICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQg
PSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07Ci0KLSAgICBpZiAoJm93bmVyRG9jdW1l
bnQoKSAhPSAmcmVmTm9kZS5kb2N1bWVudCgpKQotICAgICAgICBzZXREb2N1bWVudChyZWZOb2Rl
LmRvY3VtZW50KCkpOwotCi0gICAgdW5zaWduZWQgaW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2Rl
SW5kZXgoKTsKLSAgICBhdXRvIHJlc3VsdCA9IHNldFN0YXJ0KCpyZWZOb2RlLnBhcmVudE5vZGUo
KSwgaW5kZXgpOworICAgIHVuc2lnbmVkIGluZGV4ID0gbm9kZS5jb21wdXRlTm9kZUluZGV4KCk7
CisgICAgYXV0byByZXN1bHQgPSBzZXRTdGFydCgqcGFyZW50LCBpbmRleCk7CiAgICAgaWYgKHJl
c3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCk7Ci0gICAgcmV0dXJuIHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIGluZGV4ICsg
MSk7CisgICAgcmV0dXJuIHNldEVuZCgqcGFyZW50LCBpbmRleCArIDEpOwogfQogCi1FeGNlcHRp
b25Pcjx2b2lkPiBSYW5nZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmIHJlZk5vZGUpCitFeGNl
cHRpb25Pcjx2b2lkPiBSYW5nZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7Ci0g
ICAgaWYgKHJlZk5vZGUuaXNEb2N1bWVudFR5cGVOb2RlKCkpCisgICAgaWYgKG5vZGUuaXNEb2N1
bWVudFR5cGVOb2RlKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5
cGVFcnJvciB9OwogCi0gICAgaWYgKCZvd25lckRvY3VtZW50KCkgIT0gJnJlZk5vZGUuZG9jdW1l
bnQoKSkKLSAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9kZS5kb2N1bWVudCgpKTsKLQotICAgIG1f
c3RhcnQuc2V0VG9TdGFydE9mTm9kZShyZWZOb2RlKTsKLSAgICBtX2VuZC5zZXRUb0VuZE9mTm9k
ZShyZWZOb2RlKTsKLQorICAgIG1fc3RhcnQuc2V0VG9CZWZvcmVDb250ZW50cyhub2RlKTsKKyAg
ICBtX2VuZC5zZXRUb0FmdGVyQ29udGVudHMobm9kZSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApA
QCAtMTA1MiwzMSArODMwLDEyIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzdXJyb3VuZENv
bnRlbnRzKE5vZGUmIG5ld1BhcmVudCkKICAgICByZXR1cm4gc2VsZWN0Tm9kZShuZXdQYXJlbnQp
OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnRCZWZvcmUoTm9kZSYgcmVm
Tm9kZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlJiBub2Rl
KQogewotICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQgPSBu
b2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07Ci0gICAgcmV0dXJuIHNldFN0YXJ0KCpyZWZO
b2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCkpOwotfQotCi1Ob2Rl
KiBSYW5nZTo6Zmlyc3ROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoc3RhcnRDb250YWluZXIoKS5p
c0NoYXJhY3RlckRhdGFOb2RlKCkpCi0gICAgICAgIHJldHVybiAmc3RhcnRDb250YWluZXIoKTsK
LSAgICBpZiAoTm9kZSogY2hpbGQgPSBzdGFydENvbnRhaW5lcigpLnRyYXZlcnNlVG9DaGlsZEF0
KG1fc3RhcnQub2Zmc2V0KCkpKQotICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgaWYgKCFtX3N0
YXJ0Lm9mZnNldCgpKQotICAgICAgICByZXR1cm4gJnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgcmV0
dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHN0YXJ0Q29udGFpbmVyKCkp
OwotfQotCi1Ob2RlKiBSYW5nZTo6cGFzdExhc3ROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoZW5k
Q29udGFpbmVyKCkuaXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gTm9kZVRy
YXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oZW5kQ29udGFpbmVyKCkpOwotICAgIGlmIChO
b2RlKiBjaGlsZCA9IGVuZENvbnRhaW5lcigpLnRyYXZlcnNlVG9DaGlsZEF0KG1fZW5kLm9mZnNl
dCgpKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpu
ZXh0U2tpcHBpbmdDaGlsZHJlbihlbmRDb250YWluZXIoKSk7CisgICAgcmV0dXJuIHNldFN0YXJ0
KCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpKTsKIH0KIAogI2lmIEVOQUJMRShUUkVF
X0RFQlVHR0lORykKQEAgLTExMDEsMTI0ICs4NjAsNDQgQEAgdm9pZCBSYW5nZTo6Zm9ybWF0Rm9y
RGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB9CiAjZW5kaWYK
IAotYm9vbCBSYW5nZTo6Y29udGFpbnMoY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAotewotICAg
IGlmIChjb21tb25BbmNlc3RvckNvbnRhaW5lcigpLT5kb2N1bWVudCgpICE9IG90aGVyLmNvbW1v
bkFuY2VzdG9yQ29udGFpbmVyKCktPmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8gc3RhcnRUb1N0YXJ0ID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpT
VEFSVF9UT19TVEFSVCwgb3RoZXIpOwotICAgIGlmIChzdGFydFRvU3RhcnQuaGFzRXhjZXB0aW9u
KCkgfHwgc3RhcnRUb1N0YXJ0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byBlbmRUb0VuZCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6RU5EX1RPX0VORCwgb3RoZXIpOwotICAgIHJldHVybiAhZW5kVG9FbmQuaGFzRXhjZXB0
aW9uKCkgJiYgZW5kVG9FbmQucmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMDsKLX0KLQotYm9vbCBS
YW5nZTo6Y29udGFpbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKLXsK
LSAgICBhdXRvIHBvc2l0aW9uUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24pOwotICAg
IGlmICghcG9zaXRpb25SYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBj
b250YWlucyhjcmVhdGVMaXZlUmFuZ2UoKnBvc2l0aW9uUmFuZ2UpKTsKLX0KLQotYm9vbCBhcmVS
YW5nZXNFcXVhbChjb25zdCBSYW5nZSogYSwgY29uc3QgUmFuZ2UqIGIpCi17Ci0gICAgaWYgKGEg
PT0gYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFhIHx8ICFiKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICZhLT5zdGFydENvbnRhaW5lcigpID09ICZiLT5zdGFy
dENvbnRhaW5lcigpICYmIGEtPnN0YXJ0T2Zmc2V0KCkgPT0gYi0+c3RhcnRPZmZzZXQoKSAmJiAm
YS0+ZW5kQ29udGFpbmVyKCkgPT0gJmItPmVuZENvbnRhaW5lcigpICYmIGEtPmVuZE9mZnNldCgp
ID09IGItPmVuZE9mZnNldCgpOwotfQotCi1ib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2Uq
IGEsIGNvbnN0IFJhbmdlKiBiKQotewotICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGEgPT0gYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAoIWNvbm5lY3RlZEluU2FtZVRyZWVTY29wZShhLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigp
LCBiLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgc2hvcnQgc3RhcnRUb1N0YXJ0ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpTVEFSVF9UT19TVEFSVCwgKmIpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgIHNob3J0IGVu
ZFRvRW5kID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqYiku
cmVsZWFzZVJldHVyblZhbHVlKCk7Ci0KLSAgICAvLyBGaXJzdCByYW5nZSBjb250YWlucyB0aGUg
c2Vjb25kIHJhbmdlLgotICAgIGlmIChzdGFydFRvU3RhcnQgPD0gMCAmJiBlbmRUb0VuZCA+PSAw
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEVuZCBvZiBmaXJzdCByYW5nZSBpcyBp
bnNpZGUgc2Vjb25kIHJhbmdlLgotICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OlNUQVJUX1RPX0VORCwgKmIpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID49IDAgJiYgZW5kVG9F
bmQgPD0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBTdGFydCBvZiBmaXJzdCBy
YW5nZSBpcyBpbnNpZGUgc2Vjb25kIHJhbmdlLgotICAgIGlmIChzdGFydFRvU3RhcnQgPj0gMCAm
JiBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKmIpLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpIDw9IDApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlOb2RlQ2hpbGRyZW5DaGFu
Z2VkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIENvbnRhaW5lck5vZGUmIGNvbnRhaW5l
cikKIHsKLSAgICBpZiAoIWJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJmNvbnRhaW5lcikKLSAgICAgICAgcmV0
dXJuOwotICAgIGJvdW5kYXJ5LmludmFsaWRhdGVPZmZzZXQoKTsKKyAgICBpZiAoYm91bmRhcnku
Y2hpbGRCZWZvcmUoKSAmJiAmYm91bmRhcnkuY29udGFpbmVyKCkgPT0gJmNvbnRhaW5lcikKKyAg
ICAgICAgYm91bmRhcnkuaW52YWxpZGF0ZU9mZnNldCgpOwogfQogCiB2b2lkIFJhbmdlOjpub2Rl
Q2hpbGRyZW5DaGFuZ2VkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKLSAgICBBU1NFUlQo
JmNvbnRhaW5lci5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgm
Y29udGFpbmVyLmRvY3VtZW50KCkgPT0gbV9vd25lckRvY3VtZW50LnB0cigpKTsKICAgICBib3Vu
ZGFyeU5vZGVDaGlsZHJlbkNoYW5nZWQobV9zdGFydCwgY29udGFpbmVyKTsKICAgICBib3VuZGFy
eU5vZGVDaGlsZHJlbkNoYW5nZWQobV9lbmQsIGNvbnRhaW5lcik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCBib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoUmFuZ2VCb3VuZGFyeVBv
aW50JiBib3VuZGFyeSwgQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQorc3RhdGljIGlubGluZSB2
b2lkIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQm
IGJvdW5kYXJ5LCBDb250YWluZXJOb2RlJiBjb250YWluZXJPZk5vZGVzVG9CZVJlbW92ZWQpCiB7
Ci0gICAgZm9yIChOb2RlKiBub2RlVG9CZVJlbW92ZWQgPSBjb250YWluZXIuZmlyc3RDaGlsZCgp
OyBub2RlVG9CZVJlbW92ZWQ7IG5vZGVUb0JlUmVtb3ZlZCA9IG5vZGVUb0JlUmVtb3ZlZC0+bmV4
dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSBub2Rl
VG9CZVJlbW92ZWQpIHsKLSAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29u
dGFpbmVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAo
Tm9kZSogbiA9IGJvdW5kYXJ5LmNvbnRhaW5lcigpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7
Ci0gICAgICAgICAgICBpZiAobiA9PSBub2RlVG9CZVJlbW92ZWQpIHsKLSAgICAgICAgICAgICAg
ICBib3VuZGFyeS5zZXRUb1N0YXJ0T2ZOb2RlKGNvbnRhaW5lcik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChjb250YWlu
ZXJPZk5vZGVzVG9CZVJlbW92ZWQuY29udGFpbnMoJmJvdW5kYXJ5LmNvbnRhaW5lcigpKSkKKyAg
ICAgICAgYm91bmRhcnkuc2V0VG9CZWZvcmVDb250ZW50cyhjb250YWluZXJPZk5vZGVzVG9CZVJl
bW92ZWQpOwogfQogCiB2b2lkIFJhbmdlOjpub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRh
aW5lck5vZGUmIGNvbnRhaW5lcikKIHsKLSAgICBBU1NFUlQoJmNvbnRhaW5lci5kb2N1bWVudCgp
ID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmY29udGFpbmVyLmRvY3VtZW50KCkg
PT0gbV9vd25lckRvY3VtZW50LnB0cigpKTsKICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxC
ZVJlbW92ZWQobV9zdGFydCwgY29udGFpbmVyKTsKICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbldp
bGxCZVJlbW92ZWQobV9lbmQsIGNvbnRhaW5lcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBi
b3VuZGFyeU5vZGVXaWxsQmVSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5v
ZGUmIG5vZGVUb0JlUmVtb3ZlZCkKIHsKLSAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9
PSAmbm9kZVRvQmVSZW1vdmVkKSB7CisgICAgaWYgKGJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkgPT0g
Jm5vZGVUb0JlUmVtb3ZlZCkKICAgICAgICAgYm91bmRhcnkuY2hpbGRCZWZvcmVXaWxsQmVSZW1v
dmVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKE5vZGUqIG4gPSBib3Vu
ZGFyeS5jb250YWluZXIoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAo
biA9PSAmbm9kZVRvQmVSZW1vdmVkKSB7Ci0gICAgICAgICAgICBib3VuZGFyeS5zZXRUb0JlZm9y
ZUNoaWxkKG5vZGVUb0JlUmVtb3ZlZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9CisgICAgZWxzZSBpZiAobm9kZVRvQmVSZW1vdmVkLmNvbnRhaW5zKCZib3VuZGFyeS5j
b250YWluZXIoKSkpCisgICAgICAgIGJvdW5kYXJ5LnNldFRvQmVmb3JlTm9kZShub2RlVG9CZVJl
bW92ZWQpOwogfQogCiB2b2lkIFJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZChOb2RlJiBub2RlKQog
ewotICAgIEFTU0VSVCgmbm9kZS5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOwotICAg
IEFTU0VSVCgmbm9kZSAhPSAmb3duZXJEb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoJm5vZGUuZG9j
dW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQucHRyKCkpOworICAgIEFTU0VSVCgmbm9kZSAhPSBt
X293bmVyRG9jdW1lbnQucHRyKCkpOwogICAgIEFTU0VSVChub2RlLnBhcmVudE5vZGUoKSk7CiAg
ICAgYm91bmRhcnlOb2RlV2lsbEJlUmVtb3ZlZChtX3N0YXJ0LCBub2RlKTsKICAgICBib3VuZGFy
eU5vZGVXaWxsQmVSZW1vdmVkKG1fZW5kLCBub2RlKTsKQEAgLTEyMjYsNyArOTA1LDcgQEAgdm9p
ZCBSYW5nZTo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSYgbm9kZSkKIAogYm9vbCBSYW5nZTo6cGFy
ZW50bGVzc05vZGVNb3ZlZFRvTmV3RG9jdW1lbnRBZmZlY3RzUmFuZ2UoTm9kZSYgbm9kZSkKIHsK
LSAgICByZXR1cm4gbm9kZS5jb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTShtX3N0YXJ0LmNvbnRh
aW5lcigpKTsKKyAgICByZXR1cm4gbm9kZS5jb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTSgmbV9z
dGFydC5jb250YWluZXIoKSk7CiB9CiAKIHZvaWQgUmFuZ2U6OnVwZGF0ZVJhbmdlRm9yUGFyZW50
bGVzc05vZGVNb3ZlZFRvTmV3RG9jdW1lbnQoTm9kZSYgbm9kZSkKQEAgLTEyMzgsNyArOTE3LDcg
QEAgdm9pZCBSYW5nZTo6dXBkYXRlUmFuZ2VGb3JQYXJlbnRsZXNzTm9kZU1vdmVkVG9OZXdEb2N1
bWVudChOb2RlJiBub2RlKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0SW5zZXJ0
ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9
ICZ0ZXh0KQorICAgIGlmICgmYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJnRleHQpCiAgICAgICAg
IHJldHVybjsKICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgp
OwogICAgIGlmIChvZmZzZXQgPj0gYm91bmRhcnlPZmZzZXQpCkBAIC0xMjQ4LDE0ICs5MjcsMTQg
QEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dEluc2VydGVkKFJhbmdlQm91bmRhcnlQ
b2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQKIAogdm9pZCBSYW5nZTo6dGV4dEluc2VydGVkKE5v
ZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEFTU0VS
VCgmdGV4dC5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmdGV4
dC5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1bWVudC5wdHIoKSk7CiAgICAgYm91bmRhcnlUZXh0
SW5zZXJ0ZWQobV9zdGFydCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIGJvdW5kYXJ5VGV4
dEluc2VydGVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgdm9pZCBib3VuZGFyeVRleHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnks
IE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlm
IChib3VuZGFyeS5jb250YWluZXIoKSAhPSAmdGV4dCkKKyAgICBpZiAoJmJvdW5kYXJ5LmNvbnRh
aW5lcigpICE9ICZ0ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYm91bmRhcnlP
ZmZzZXQgPSBib3VuZGFyeS5vZmZzZXQoKTsKICAgICBpZiAob2Zmc2V0ID49IGJvdW5kYXJ5T2Zm
c2V0KQpAQCAtMTI2OCwyMyArOTQ3LDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRl
eHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQsCiAKIHZv
aWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogewotICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09ICZvd25lckRvY3Vt
ZW50KCkpOworICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1bWVudC5w
dHIoKSk7CiAgICAgYm91bmRhcnlUZXh0UmVtb3ZlZChtX3N0YXJ0LCB0ZXh0LCBvZmZzZXQsIGxl
bmd0aCk7CiAgICAgYm91bmRhcnlUZXh0UmVtb3ZlZChtX2VuZCwgdGV4dCwgb2Zmc2V0LCBsZW5n
dGgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNNZXJnZWQoUmFu
Z2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0KQogewotICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSBvbGROb2RlLm5v
ZGUoKSkKKyAgICBpZiAoJmJvdW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUubm9kZSgpKQog
ICAgICAgICBib3VuZGFyeS5zZXQoKm9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSwg
Ym91bmRhcnkub2Zmc2V0KCkgKyBvZmZzZXQsIDApOwotICAgIGVsc2UgaWYgKGJvdW5kYXJ5LmNv
bnRhaW5lcigpID09IG9sZE5vZGUubm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8
aW50Pihib3VuZGFyeS5vZmZzZXQoKSkgPT0gb2xkTm9kZS5pbmRleCgpKQorICAgIGVsc2UgaWYg
KCZib3VuZGFyeS5jb250YWluZXIoKSA9PSBvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpICYm
IGJvdW5kYXJ5Lm9mZnNldCgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvbGROb2RlLmluZGV4
KCkpKQogICAgICAgICBib3VuZGFyeS5zZXQoKm9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxp
bmcoKSwgb2Zmc2V0LCAwKTsKIH0KIAogdm9pZCBSYW5nZTo6dGV4dE5vZGVzTWVyZ2VkKE5vZGVX
aXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBBU1NFUlQob2xkTm9k
ZS5ub2RlKCkpOwotICAgIEFTU0VSVCgmb2xkTm9kZS5ub2RlKCktPmRvY3VtZW50KCkgPT0gJm93
bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZvbGROb2RlLm5vZGUoKS0+ZG9jdW1lbnQoKSA9
PSBtX293bmVyRG9jdW1lbnQucHRyKCkpOwogICAgIEFTU0VSVChvbGROb2RlLm5vZGUoKS0+cGFy
ZW50Tm9kZSgpKTsKICAgICBBU1NFUlQob2xkTm9kZS5ub2RlKCktPmlzVGV4dE5vZGUoKSk7CiAg
ICAgQVNTRVJUKG9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CkBAIC0xMjk2LDcg
Kzk3NSw3IEBAIHZvaWQgUmFuZ2U6OnRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGRO
b2RlLCB1bnNpZ25lZCBvZmZzZXQpCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9k
ZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBUZXh0JiBvbGROb2RlKQogewog
ICAgIGF1dG8qIHBhcmVudCA9IG9sZE5vZGUucGFyZW50Tm9kZSgpOwotICAgIGlmIChib3VuZGFy
eS5jb250YWluZXIoKSA9PSAmb2xkTm9kZSkgeworICAgIGlmICgmYm91bmRhcnkuY29udGFpbmVy
KCkgPT0gJm9sZE5vZGUpIHsKICAgICAgICAgdW5zaWduZWQgc3BsaXRPZmZzZXQgPSBvbGROb2Rl
Lmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9m
ZnNldCgpOwogICAgICAgICBpZiAoYm91bmRhcnlPZmZzZXQgPiBzcGxpdE9mZnNldCkgewpAQCAt
MTMwOSwxNiArOTg4LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1Nw
bGl0KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIFRleHQmIG9sCiAgICAgfQogICAgIGlm
ICghcGFyZW50KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigp
ID09IHBhcmVudCAmJiBib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09ICZvbGROb2RlKSB7CisgICAg
aWYgKCZib3VuZGFyeS5jb250YWluZXIoKSA9PSBwYXJlbnQgJiYgYm91bmRhcnkuY2hpbGRCZWZv
cmUoKSA9PSAmb2xkTm9kZSkgewogICAgICAgICBhdXRvKiBuZXdDaGlsZCA9IG9sZE5vZGUubmV4
dFNpYmxpbmcoKTsKICAgICAgICAgQVNTRVJUKG5ld0NoaWxkKTsKLSAgICAgICAgYm91bmRhcnku
c2V0VG9BZnRlckNoaWxkKCpuZXdDaGlsZCk7CisgICAgICAgIGJvdW5kYXJ5LnNldFRvQWZ0ZXJO
b2RlKCpuZXdDaGlsZCk7CiAgICAgfQogfQogCiB2b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRl
eHQmIG9sZE5vZGUpCiB7Ci0gICAgQVNTRVJUKCZvbGROb2RlLmRvY3VtZW50KCkgPT0gJm93bmVy
RG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZvbGROb2RlLmRvY3VtZW50KCkgPT0gbV9vd25lckRv
Y3VtZW50LnB0cigpKTsKICAgICBBU1NFUlQoIW9sZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5v
ZGUubmV4dFNpYmxpbmcoKSk7CiAgICAgQVNTRVJUKCFvbGROb2RlLnBhcmVudE5vZGUoKSB8fCBv
bGROb2RlLm5leHRTaWJsaW5nKCktPmlzVGV4dE5vZGUoKSk7CiAgICAgYm91bmRhcnlUZXh0Tm9k
ZXNTcGxpdChtX3N0YXJ0LCBvbGROb2RlKTsKQEAgLTE0MTMsNyArMTA5Miw3IEBAIFJlZlB0cjxS
YW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2Up
CiAKIHZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQogewotICAgIGlm
IChyYW5nZSAmJiByYW5nZS0+Ym91bmRhcnlQb2ludHNWYWxpZCgpKSB7CisgICAgaWYgKHJhbmdl
KSB7CiAgICAgICAgIHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnNob3dUcmVlQW5kTWFyaygmcmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCksICJTIiwgJnJhbmdlLT5lbmRDb250YWluZXIoKSwgIkUiKTsK
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzdGFydCBvZmZzZXQ6ICVkLCBlbmQgb2Zmc2V0OiAl
ZFxuIiwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuaAppbmRleCA0ZDFjZDRmMTM2NzQ2Y2JmNDQyZmQ2ODlkNjkxOGMzYzVmZDhlOTA0
Li4xZWM1YWVkNGM1MDAwZjdmNWM5MzQxNzViN2U5MjNjY2JiMDg0NGRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
aApAQCAtMzMsNjEgKzMzLDYwIEBAIGNsYXNzIERPTVJlY3RMaXN0OwogY2xhc3MgRG9jdW1lbnRG
cmFnbWVudDsKIGNsYXNzIE5vZGVXaXRoSW5kZXg7CiBjbGFzcyBUZXh0OwotY2xhc3MgVmlzaWJs
ZVBvc2l0aW9uOwogCiBzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiAKLS8vIEZJWE1FOiBSZW5hbWUgdG8g
TGl2ZVJhbmdlLCB3aGlsZSBsZWF2aW5nIHRoZSBET00tZXhwb3NlZCBuYW1lIGFzIFJhbmdlLgog
Y2xhc3MgUmFuZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxSYW5nZT4gewogcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8UmFuZ2U+IGNyZWF0ZShEb2N1bWVudCYpOwogICAgIFdF
QkNPUkVfRVhQT1JUIH5SYW5nZSgpOwogCi0gICAgRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX293bmVyRG9jdW1lbnQ7IH0KLQotICAgIE5vZGUmIHN0YXJ0Q29udGFp
bmVyKCkgY29uc3QgeyBBU1NFUlQobV9zdGFydC5jb250YWluZXIoKSk7IHJldHVybiAqbV9zdGFy
dC5jb250YWluZXIoKTsgfQorICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydC5jb250YWluZXIoKTsgfQogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydC5vZmZzZXQoKTsgfQotICAgIE5vZGUmIGVuZENvbnRhaW5lcigp
IGNvbnN0IHsgQVNTRVJUKG1fZW5kLmNvbnRhaW5lcigpKTsgcmV0dXJuICptX2VuZC5jb250YWlu
ZXIoKTsgfQorICAgIE5vZGUmIGVuZENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLmNv
bnRhaW5lcigpOyB9CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9l
bmQub2Zmc2V0KCk7IH0KICAgICBib29sIGNvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnQgPT0gbV9lbmQ7IH0KLQogICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29u
c3QgeyByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Ioc3RhcnRDb250YWluZXIoKSwgZW5k
Q29udGFpbmVyKCkpLmdldCgpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0U3RhcnQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpOwotICAg
IFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZChSZWY8Tm9kZT4mJiBjb250
YWluZXIsIHVuc2lnbmVkIG9mZnNldCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25P
cjx2b2lkPiBzZXRTdGFydChSZWY8Tm9kZT4mJiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRFbmQoUmVmPE5vZGU+JiYsIHVuc2lnbmVk
IG9mZnNldCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnRC
ZWZvcmUoTm9kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0
YXJ0QWZ0ZXIoTm9kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNl
dEVuZEJlZm9yZShOb2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4g
c2V0RW5kQWZ0ZXIoTm9kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29sbGFwc2UoYm9v
bCB0b1N0YXJ0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjxib29sPiBpc1BvaW50
SW5SYW5nZShOb2RlJiByZWZOb2RlLCB1bnNpZ25lZCBvZmZzZXQpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIEV4Y2VwdGlvbk9yPHNob3J0PiBjb21wYXJlUG9pbnQoTm9kZSYgcmVmTm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0KSBjb25zdDsKLSAgICBlbnVtIENvbXBhcmVSZXN1bHRzIHsgTk9ERV9CRUZPUkUs
IE5PREVfQUZURVIsIE5PREVfQkVGT1JFX0FORF9BRlRFUiwgTk9ERV9JTlNJREUgfTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxDb21wYXJlUmVzdWx0cz4gY29tcGFyZU5vZGUoTm9k
ZSYgcmVmTm9kZSkgY29uc3Q7Ci0gICAgZW51bSBDb21wYXJlSG93IHsgU1RBUlRfVE9fU1RBUlQs
IFNUQVJUX1RPX0VORCwgRU5EX1RPX0VORCwgRU5EX1RPX1NUQVJUIH07Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRXhjZXB0aW9uT3I8c2hvcnQ+IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93
LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHNob3J0PiBjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNpZ25l
ZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0OwotICAg
IHN0YXRpYyBFeGNlcHRpb25PcjxzaG9ydD4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNv
bnRhaW5lckEsIHVuc2lnbmVkIG9mZnNldEEsIE5vZGUqIGNvbnRhaW5lckIsIHVuc2lnbmVkIG9m
ZnNldEIpOwotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxzaG9ydD4gY29tcGFyZUJvdW5kYXJ5UG9p
bnRzKGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlBLCBjb25zdCBSYW5nZUJvdW5k
YXJ5UG9pbnQmIGJvdW5kYXJ5Qik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBib3VuZGFyeVBv
aW50c1ZhbGlkKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4g
aW50ZXJzZWN0c05vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8dm9pZD4gc2VsZWN0Tm9kZShOb2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8dm9pZD4gc2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmKTsKKworICAgIGVudW0g
Q29tcGFyZUhvdyA6IHVuc2lnbmVkIHNob3J0IHsgU1RBUlRfVE9fU1RBUlQsIFNUQVJUX1RPX0VO
RCwgRU5EX1RPX0VORCwgRU5EX1RPX1NUQVJUIH07CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8c2hvcnQ+IGNvbXBhcmVCb3VuZGFyeVBvaW50cyh1bnNpZ25lZCBzaG9ydCBjb21wYXJl
SG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0OworCiAgICAgV0VCQ09SRV9FWFBP
UlQgRXhjZXB0aW9uT3I8dm9pZD4gZGVsZXRlQ29udGVudHMoKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVudD4+IGV4dHJhY3RDb250ZW50cygpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gY2xv
bmVDb250ZW50cygpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IGluc2Vy
dE5vZGUoUmVmPE5vZGU+JiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0b1N0cmluZygp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHN1cnJvdW5kQ29u
dGVudHMoTm9kZSYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRleHQoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IGNsb25lUmFuZ2UoKSBjb25zdDsKKyAgICBz
dGF0aWMgdm9pZCBkZXRhY2goKSB7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9y
PFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0
cmluZyYgaHRtbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4gaXNQb2lu
dEluUmFuZ2UoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhj
ZXB0aW9uT3I8c2hvcnQ+IGNvbXBhcmVQb2ludChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0KSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGludGVyc2VjdHNOb2RlKE5vZGUmKSBjb25zdDsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGV0YWNoKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
UmVmPFJhbmdlPiBjbG9uZVJhbmdlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lk
PiBzZXRTdGFydEFmdGVyKE5vZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2
b2lkPiBzZXRFbmRCZWZvcmUoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9y
PHZvaWQ+IHNldEVuZEFmdGVyKE5vZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25P
cjx2b2lkPiBzZWxlY3ROb2RlKE5vZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25P
cjx2b2lkPiBzZWxlY3ROb2RlQ29udGVudHMoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHZvaWQ+IHN1cnJvdW5kQ29udGVudHMoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0QmVmb3JlKE5vZGUmKTsKKyAgICBSZWY8RE9N
UmVjdExpc3Q+IGdldENsaWVudFJlY3RzKCkgY29uc3Q7CisgICAgUmVmPERPTVJlY3Q+IGdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9u
T3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3Qg
U3RyaW5nJiBmcmFnbWVudCk7CisKKyAgICAvLyBFeHBhbmQgcmFuZ2UgdG8gYSB1bml0ICh3b3Jk
IG9yIHNlbnRlbmNlIG9yIGJsb2NrIG9yIGRvY3VtZW50KSBib3VuZGFyeS4KKyAgICAvLyBQbGVh
c2UgcmVmZXIgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NjMy
IGNvbW1lbnQgIzUgZm9yIGRldGFpbHMuCisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8
dm9pZD4gZXhwYW5kKGNvbnN0IFN0cmluZyYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgTm9kZSog
Zmlyc3ROb2RlKCkgY29uc3Q7CisgICAgZW51bSBDb21wYXJlUmVzdWx0cyA6IHVpbnQ4X3QgeyBO
T0RFX0JFRk9SRSwgTk9ERV9BRlRFUiwgTk9ERV9CRUZPUkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lE
RSB9OworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPENvbXBhcmVSZXN1bHRzPiBjb21w
YXJlTm9kZShOb2RlJikgY29uc3Q7CiAKICAgICB2b2lkIG5vZGVDaGlsZHJlbkNoYW5nZWQoQ29u
dGFpbmVyTm9kZSYpOwogICAgIHZvaWQgbm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWlu
ZXJOb2RlJik7CkBAIC0xMDAsNDAgKzk5LDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIHRleHROb2Rl
c01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpOwogICAgIHZv
aWQgdGV4dE5vZGVTcGxpdChUZXh0JiBvbGROb2RlKTsKIAotICAgIC8vIEV4cGFuZCByYW5nZSB0
byBhIHVuaXQgKHdvcmQgb3Igc2VudGVuY2Ugb3IgYmxvY2sgb3IgZG9jdW1lbnQpIGJvdW5kYXJ5
LgotICAgIC8vIFBsZWFzZSByZWZlciB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mjc2MzIgY29tbWVudCAjNSAKLSAgICAvLyBmb3IgZGV0YWlscy4KLSAgICBXRUJD
T1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBleHBhbmQoY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICBSZWY8RE9NUmVjdExpc3Q+IGdldENsaWVudFJlY3RzKCkgY29uc3Q7Ci0gICAgUmVmPERPTVJl
Y3Q+IGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0OwotCiAjaWYgRU5BQkxFKFRSRUVfREVC
VUdHSU5HKQogICAgIHZvaWQgZm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBsZW5ndGgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRh
aW5zKGNvbnN0IFJhbmdlJikgY29uc3Q7Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBWaXNpYmxl
UG9zaXRpb24mKSBjb25zdDsKLQotICAgIGVudW0gQWN0aW9uVHlwZSB7IERlbGV0ZSwgRXh0cmFj
dCwgQ2xvbmUgfTsKKyAgICBlbnVtIEFjdGlvblR5cGUgOiB1aW50OF90IHsgRGVsZXRlLCBFeHRy
YWN0LCBDbG9uZSB9OwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFJhbmdlKERvY3VtZW50Jik7
CiAKLSAgICB2b2lkIHNldERvY3VtZW50KERvY3VtZW50Jik7Ci0gICAgRXhjZXB0aW9uT3I8Tm9k
ZSo+IGNoZWNrTm9kZVdPZmZzZXQoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CisgICAg
dm9pZCB1cGRhdGVEb2N1bWVudCgpOworICAgIEV4Y2VwdGlvbk9yPE5vZGUqPiBjaGVja05vZGVP
ZmZzZXRQYWlyKE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9y
PFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gcHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUpOwog
Ci0gICAgTm9kZSogcGFzdExhc3ROb2RlKCkgY29uc3Q7Ci0KICAgICBSZWY8RG9jdW1lbnQ+IG1f
b3duZXJEb2N1bWVudDsKICAgICBSYW5nZUJvdW5kYXJ5UG9pbnQgbV9zdGFydDsKICAgICBSYW5n
ZUJvdW5kYXJ5UG9pbnQgbV9lbmQ7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdl
c0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wg
cmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7Ci0KIFdFQkNPUkVfRVhQ
T1JUIFNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOwogV0VCQ09SRV9F
WFBPUlQgU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKIFdF
QkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3Qg
UmFuZ2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCmluZGV4IDE1NGU4OWM2NmU1N2EyZWJhODM0MDY2NjFi
NmE1M2MzM2EyNDkwYmEuLmEwNWMxNDM2YzU4YjgzMDIwZTI2MDk5OTdiMzY2YTYxNGY4MDY3Yjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmlkbApAQCAtMjUsOSArMjUsOSBAQAogICAgIFtDYWxsV2l0aD1Eb2N1
bWVudF0gY29uc3RydWN0b3IoKTsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlIHN0YXJ0
Q29udGFpbmVyOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHN0YXJ0T2Zmc2V0OyAvLyBG
SVhNRTogU2hvdWxkIGJlIHVuc2lnbmVkIGxvbmcuCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIGxvbmcgc3RhcnRPZmZzZXQ7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgZW5k
Q29udGFpbmVyOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGVuZE9mZnNldDsgLy8gRklY
TUU6IFNob3VsZCBiZSB1bnNpZ25lZCBsb25nLgorICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNp
Z25lZCBsb25nIGVuZE9mZnNldDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjb2xs
YXBzZWQ7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgY29tbW9uQW5jZXN0b3JDb250YWlu
ZXI7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVEFSVF9U
T19FTkQgPSAxOwogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEVORF9UT19FTkQgPSAyOwogICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IEVORF9UT19TVEFSVCA9IDM7Ci0gICAgW01heVRocm93RXhj
ZXB0aW9uLCBJbXBsZW1lbnRlZEFzPWNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzXSBz
aG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHModW5zaWduZWQgc2hvcnQgaG93LCBSYW5nZSBzb3Vy
Y2VSYW5nZSk7CisgICAgW01heVRocm93RXhjZXB0aW9uXSBzaG9ydCBjb21wYXJlQm91bmRhcnlQ
b2ludHModW5zaWduZWQgc2hvcnQgaG93LCBSYW5nZSBzb3VyY2VSYW5nZSk7CiAKICAgICBbQ0VS
ZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIGRlbGV0ZUNvbnRlbnRzKCk7CiAgICAg
W0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBEb2N1bWVudEZyYWdt
ZW50IGV4dHJhY3RDb250ZW50cygpOwpAQCAtNTksNyArNTksNyBAQAogICAgIFtNYXlUaHJvd0V4
Y2VwdGlvbl0gYm9vbGVhbiBpc1BvaW50SW5SYW5nZShOb2RlIG5vZGUsIHVuc2lnbmVkIGxvbmcg
b2Zmc2V0KTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHNob3J0IGNvbXBhcmVQb2ludChOb2Rl
IG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKIAotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0g
Ym9vbGVhbiBpbnRlcnNlY3RzTm9kZShOb2RlIG5vZGUpOworICAgIGJvb2xlYW4gaW50ZXJzZWN0
c05vZGUoTm9kZSBub2RlKTsKIAogICAgIHN0cmluZ2lmaWVyOwogCkBAIC03MCwxMCArNzAsMTEg
QEAKICAgICAvLyBFeHRlbnNpb25zIGZyb20gRE9NUGFyc2luZyBhbmQgU2VyaWFsaXphdGlvbiBz
cGVjaWZpY2F0aW9uIChodHRwczovL3czYy5naXRodWIuaW8vRE9NLVBhcnNpbmcvI2V4dGVuc2lv
bnMtdG8tdGhlLXJhbmdlLWludGVyZmFjZSkuCiAgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4
Y2VwdGlvbiwgTmV3T2JqZWN0XSBEb2N1bWVudEZyYWdtZW50IGNyZWF0ZUNvbnRleHR1YWxGcmFn
bWVudChET01TdHJpbmcgZnJhZ21lbnQpOwogCi0gICAgLy8gTm9uIHN0YW5kYXJkLgotICAgIFtN
YXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBleHBhbmQob3B0aW9uYWwgRE9NU3RyaW5nIHVuaXQgPSAi
Iik7CisgICAgLy8gTm9uLXN0YW5kYXJkIGV4dGVuc2lvbi4KKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGV2ZW50dWFsbHkgZHJvcCB0aGlzIHNpbmNlIG5vIG90aGVyIGJyb3dzZXIgc3VwcG9ydHMg
aXQuCisgICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIGV4cGFuZChvcHRpb25hbCBET01TdHJp
bmcgdW5pdCk7CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGxpa2VseSBkcm9wIHRoaXMgc2lu
Y2Ugbm8gb3RoZXIgYnJvd3NlciBzdXBwb3J0cyBpdC4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGxpa2VseSBkcm9wIHRoaXMgc2luY2Ugd2UgYWRkZWQgaXQgZm9yIEZpcmVmb3ggaW50ZXJvcGVy
YWJpbGl0eSwgYnV0IG5vdyBubyBvdGhlciBicm93c2VyIHN1cHBvcnRzIGl0LgogICAgIFtNYXlU
aHJvd0V4Y2VwdGlvbl0gc2hvcnQgY29tcGFyZU5vZGUoTm9kZSBub2RlKTsKICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBOT0RFX0JFRk9SRSA9IDA7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
Tk9ERV9BRlRFUiA9IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3Vu
ZGFyeVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5k
ZXggYjI0NDA5ODQ3OGI3Nzc3ZjA0Y2RmNjhkNjE5MjliZGM4ODQ1NTE0Zi4uZDAwMzQ0ZDlmNjYw
NGI5Y2VkMGFlZmViOWU3ZThkM2Q3OTg0M2FiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJv
dW5kYXJ5UG9pbnQuaApAQCAtMzIsNDMgKzMyLDM5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgUmFuZ2VCb3VuZGFyeVBvaW50IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBSYW5nZUJv
dW5kYXJ5UG9pbnQoTm9kZSogY29udGFpbmVyKTsKKyAgICBleHBsaWNpdCBSYW5nZUJvdW5kYXJ5
UG9pbnQoTm9kZSYgY29udGFpbmVyKTsKIAotICAgIE5vZGUqIGNvbnRhaW5lcigpIGNvbnN0Owor
ICAgIE5vZGUmIGNvbnRhaW5lcigpIGNvbnN0OwogICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0
OwogICAgIE5vZGUqIGNoaWxkQmVmb3JlKCkgY29uc3Q7CiAKLSAgICB2b2lkIGNsZWFyKCk7Ci0K
ICAgICB2b2lkIHNldChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCwgTm9k
ZSogY2hpbGRCZWZvcmUpOwogICAgIHZvaWQgc2V0T2Zmc2V0KHVuc2lnbmVkKTsKIAotICAgIHZv
aWQgc2V0VG9CZWZvcmVDaGlsZChOb2RlJik7Ci0gICAgdm9pZCBzZXRUb0FmdGVyQ2hpbGQoTm9k
ZSYpOwotICAgIHZvaWQgc2V0VG9TdGFydE9mTm9kZShSZWY8Tm9kZT4mJik7Ci0gICAgdm9pZCBz
ZXRUb0VuZE9mTm9kZShSZWY8Tm9kZT4mJik7CisgICAgdm9pZCBzZXRUb0JlZm9yZU5vZGUoTm9k
ZSYpOworICAgIHZvaWQgc2V0VG9BZnRlck5vZGUoTm9kZSYpOworICAgIHZvaWQgc2V0VG9CZWZv
cmVDb250ZW50cyhSZWY8Tm9kZT4mJik7CisgICAgdm9pZCBzZXRUb0FmdGVyQ29udGVudHMoUmVm
PE5vZGU+JiYpOwogCiAgICAgdm9pZCBjaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQoKTsKICAgICB2
b2lkIGludmFsaWRhdGVPZmZzZXQoKSBjb25zdDsKLSAgICB2b2lkIGVuc3VyZU9mZnNldElzVmFs
aWQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV9jb250YWluZXJOb2Rl
OworICAgIFJlZjxOb2RlPiBtX2NvbnRhaW5lcjsKICAgICBtdXRhYmxlIE9wdGlvbmFsPHVuc2ln
bmVkPiBtX29mZnNldEluQ29udGFpbmVyIHsgMCB9OwogICAgIFJlZlB0cjxOb2RlPiBtX2NoaWxk
QmVmb3JlQm91bmRhcnk7CiB9OwogCiBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50KGNv
bnN0IFJhbmdlQm91bmRhcnlQb2ludCYpOwogCi1pbmxpbmUgUmFuZ2VCb3VuZGFyeVBvaW50OjpS
YW5nZUJvdW5kYXJ5UG9pbnQoTm9kZSogY29udGFpbmVyKQotICAgIDogbV9jb250YWluZXJOb2Rl
KGNvbnRhaW5lcikKK2lubGluZSBSYW5nZUJvdW5kYXJ5UG9pbnQ6OlJhbmdlQm91bmRhcnlQb2lu
dChOb2RlJiBjb250YWluZXIpCisgICAgOiBtX2NvbnRhaW5lcihjb250YWluZXIpCiB7Ci0gICAg
QVNTRVJUKG1fY29udGFpbmVyTm9kZSk7CiB9CiAKLWlubGluZSBOb2RlKiBSYW5nZUJvdW5kYXJ5
UG9pbnQ6OmNvbnRhaW5lcigpIGNvbnN0CitpbmxpbmUgTm9kZSYgUmFuZ2VCb3VuZGFyeVBvaW50
Ojpjb250YWluZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbnRhaW5lck5vZGUuZ2V0KCk7
CisgICAgcmV0dXJuIG1fY29udGFpbmVyOwogfQogCiBpbmxpbmUgTm9kZSogUmFuZ2VCb3VuZGFy
eVBvaW50OjpjaGlsZEJlZm9yZSgpIGNvbnN0CkBAIC03Niw3NyArNzIsNjMgQEAgaW5saW5lIE5v
ZGUqIFJhbmdlQm91bmRhcnlQb2ludDo6Y2hpbGRCZWZvcmUoKSBjb25zdAogICAgIHJldHVybiBt
X2NoaWxkQmVmb3JlQm91bmRhcnkuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRh
cnlQb2ludDo6ZW5zdXJlT2Zmc2V0SXNWYWxpZCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb2Zmc2V0
SW5Db250YWluZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2NoaWxkQmVmb3Jl
Qm91bmRhcnkpOwotICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRh
cnktPmNvbXB1dGVOb2RlSW5kZXgoKSArIDE7Ci19Ci0KIGlubGluZSB1bnNpZ25lZCBSYW5nZUJv
dW5kYXJ5UG9pbnQ6Om9mZnNldCgpIGNvbnN0CiB7Ci0gICAgZW5zdXJlT2Zmc2V0SXNWYWxpZCgp
OwotICAgIHJldHVybiBtX29mZnNldEluQ29udGFpbmVyLnZhbHVlKCk7Ci19Ci0KLWlubGluZSB2
b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6Y2xlYXIoKQotewotICAgIG1fY29udGFpbmVyTm9kZSA9
IG51bGxwdHI7Ci0gICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IDA7Ci0gICAgbV9jaGlsZEJlZm9y
ZUJvdW5kYXJ5ID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fb2Zmc2V0SW5Db250YWluZXIpIHsKKyAg
ICAgICAgQVNTRVJUKG1fY2hpbGRCZWZvcmVCb3VuZGFyeSk7CisgICAgICAgIG1fb2Zmc2V0SW5D
b250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnktPmNvbXB1dGVOb2RlSW5kZXgoKSArIDE7
CisgICAgfQorICAgIHJldHVybiAqbV9vZmZzZXRJbkNvbnRhaW5lcjsKIH0KIAogaW5saW5lIHZv
aWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25l
ZCBvZmZzZXQsIE5vZGUqIGNoaWxkQmVmb3JlKQogewogICAgIEFTU0VSVChjaGlsZEJlZm9yZSA9
PSAob2Zmc2V0ID8gY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKSA6IDAp
KTsKLSAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CisgICAgbV9jb250
YWluZXIgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG9m
ZnNldDsKICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBjaGlsZEJlZm9yZTsKIH0KIAogaW5s
aW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQog
ewotICAgIEFTU0VSVChtX2NvbnRhaW5lck5vZGUpOwotICAgIEFTU0VSVChtX2NvbnRhaW5lck5v
ZGUtPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSk7CisgICAgQVNTRVJUKG1fY29udGFpbmVyLT5pc0No
YXJhY3RlckRhdGFOb2RlKCkpOwogICAgIEFTU0VSVChtX29mZnNldEluQ29udGFpbmVyKTsKICAg
ICBBU1NFUlQoIW1fY2hpbGRCZWZvcmVCb3VuZGFyeSk7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5l
ciA9IG9mZnNldDsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0Jl
Zm9yZUNoaWxkKE5vZGUmIGNoaWxkKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50Ojpz
ZXRUb0JlZm9yZU5vZGUoTm9kZSYgY2hpbGQpCiB7CiAgICAgQVNTRVJUKGNoaWxkLnBhcmVudE5v
ZGUoKSk7CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gY2hpbGQucHJldmlvdXNTaWJsaW5n
KCk7Ci0gICAgbV9jb250YWluZXJOb2RlID0gY2hpbGQucGFyZW50Tm9kZSgpOwotICAgIG1fb2Zm
c2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBP
cHRpb25hbDx1bnNpZ25lZD4oMCk7CisgICAgbV9jb250YWluZXIgPSAqY2hpbGQucGFyZW50Tm9k
ZSgpOworICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBX
VEY6Om51bGxvcHQgOiBtYWtlT3B0aW9uYWwoMFUpOwogfQogCi1pbmxpbmUgdm9pZCBSYW5nZUJv
dW5kYXJ5UG9pbnQ6OnNldFRvQWZ0ZXJDaGlsZChOb2RlJiBjaGlsZCkKK2lubGluZSB2b2lkIFJh
bmdlQm91bmRhcnlQb2ludDo6c2V0VG9BZnRlck5vZGUoTm9kZSYgY2hpbGQpCiB7CiAgICAgQVNT
RVJUKGNoaWxkLnBhcmVudE5vZGUoKSk7CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gJmNo
aWxkOwotICAgIG1fY29udGFpbmVyTm9kZSA9IGNoaWxkLnBhcmVudE5vZGUoKTsKLSAgICBtX29m
ZnNldEluQ29udGFpbmVyID0gbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8gV1RGOjpudWxsb3B0IDog
T3B0aW9uYWw8dW5zaWduZWQ+KDApOworICAgIG1fY29udGFpbmVyID0gKmNoaWxkLnBhcmVudE5v
ZGUoKTsKKyAgICBtX29mZnNldEluQ29udGFpbmVyID0gbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8g
V1RGOjpudWxsb3B0IDogbWFrZU9wdGlvbmFsKDBVKTsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VC
b3VuZGFyeVBvaW50OjpzZXRUb1N0YXJ0T2ZOb2RlKFJlZjxOb2RlPiYmIGNvbnRhaW5lcikKK2lu
bGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9CZWZvcmVDb250ZW50cyhSZWY8Tm9k
ZT4mJiBjb250YWluZXIpCiB7Ci0gICAgbV9jb250YWluZXJOb2RlID0gV1RGTW92ZShjb250YWlu
ZXIpOworICAgIG1fY29udGFpbmVyID0gV1RGTW92ZShjb250YWluZXIpOwogICAgIG1fb2Zmc2V0
SW5Db250YWluZXIgPSAwOwogICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CiB9
CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9FbmRPZk5vZGUoUmVmPE5v
ZGU+JiYgY29udGFpbmVyKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0Fm
dGVyQ29udGVudHMoUmVmPE5vZGU+JiYgY29udGFpbmVyKQogewotICAgIG1fY29udGFpbmVyTm9k
ZSA9IFdURk1vdmUoY29udGFpbmVyKTsKLSAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKm1fY29u
dGFpbmVyTm9kZSkpIHsKLSAgICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IGRvd25jYXN0PENo
YXJhY3RlckRhdGE+KCptX2NvbnRhaW5lck5vZGUpLmxlbmd0aCgpOworICAgIG1fY29udGFpbmVy
ID0gV1RGTW92ZShjb250YWluZXIpOworICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPihtX2NvbnRh
aW5lcikpIHsKKyAgICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IGRvd25jYXN0PENoYXJhY3Rl
ckRhdGE+KG1fY29udGFpbmVyLmdldCgpKS5sZW5ndGgoKTsKICAgICAgICAgbV9jaGlsZEJlZm9y
ZUJvdW5kYXJ5ID0gbnVsbHB0cjsKICAgICB9IGVsc2UgewotICAgICAgICBtX2NoaWxkQmVmb3Jl
Qm91bmRhcnkgPSBtX2NvbnRhaW5lck5vZGUtPmxhc3RDaGlsZCgpOwotICAgICAgICBtX29mZnNl
dEluQ29udGFpbmVyID0gbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8gV1RGOjpudWxsb3B0IDogT3B0
aW9uYWw8dW5zaWduZWQ+KDApOworICAgICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBtX2Nv
bnRhaW5lci0+bGFzdENoaWxkKCk7CisgICAgICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2No
aWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBtYWtlT3B0aW9uYWwoMFUpOwogICAg
IH0KIH0KIApAQCAtMTY3LDIxICsxNDksMTYgQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBv
aW50OjppbnZhbGlkYXRlT2Zmc2V0KCkgY29uc3QKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIGEsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYikK
IHsKLSAgICBpZiAoYS5jb250YWluZXIoKSAhPSBiLmNvbnRhaW5lcigpKQorICAgIGlmICgmYS5j
b250YWluZXIoKSAhPSAmYi5jb250YWluZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChhLmNoaWxkQmVmb3JlKCkgfHwgYi5jaGlsZEJlZm9yZSgpKSB7Ci0gICAgICAgIGlmIChh
LmNoaWxkQmVmb3JlKCkgIT0gYi5jaGlsZEJlZm9yZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChhLm9mZnNldCgpICE9IGIub2Zmc2V0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAg
IGlmIChhLmNoaWxkQmVmb3JlKCkgfHwgYi5jaGlsZEJlZm9yZSgpKQorICAgICAgICByZXR1cm4g
YS5jaGlsZEJlZm9yZSgpID09IGIuY2hpbGRCZWZvcmUoKTsKKyAgICByZXR1cm4gYS5vZmZzZXQo
KSA9PSBiLm9mZnNldCgpOwogfQogCiBpbmxpbmUgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQ
b2ludChjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIHBvaW50KQogewotICAgIHJldHVybiB7ICpw
b2ludC5jb250YWluZXIoKSwgcG9pbnQub2Zmc2V0KCkgfTsKKyAgICByZXR1cm4geyBwb2ludC5j
b250YWluZXIoKSwgcG9pbnQub2Zmc2V0KCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggYzFiNzQ2OGUxZGUwNzk3ZWI5ZTYy
Y2I1OTZkMzRmM2YyOTM3NmZmMS4uZDk4N2Y0MDQxNTViNWZjNTFkODY3ZGEwZmNjZTk3OTkwNGRm
YTE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC0yMDUsNCArMjA1LDY5IEBA
IFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpCiAgICAgcmV0dXJuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNv
bnRhaW5lciwgcmFuZ2UuZW5kLmNvbnRhaW5lcik7CiB9CiAKK2Jvb2wgaXNQb2ludEluUmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sK
KyAgICByZXR1cm4gaXNfbHRlcShkb2N1bWVudE9yZGVyKHJhbmdlLnN0YXJ0LCBwb2ludCkpICYm
IGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihwb2ludCwgcmFuZ2UuZW5kKSk7Cit9CisKK2Jvb2wgaXNQ
b2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBPcHRpb25hbDxCb3Vu
ZGFyeVBvaW50PiYgcG9pbnQpCit7CisgICAgcmV0dXJuIHBvaW50ICYmIGlzUG9pbnRJblJhbmdl
KHJhbmdlLCAqcG9pbnQpOworfQorCitQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50KQoreworICAg
IGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRPcmRlcihyYW5nZS5zdGFydCwgcG9pbnQpOyAhaXNf
bHQob3JkZXIpKQorICAgICAgICByZXR1cm4gb3JkZXI7CisgICAgaWYgKGF1dG8gb3JkZXIgPSBk
b2N1bWVudE9yZGVyKHJhbmdlLmVuZCwgcG9pbnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgICAgICBy
ZXR1cm4gb3JkZXI7CisgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6ZXF1aXZhbGVudDsKK30K
KworUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYgcG9p
bnQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAoYXV0byBvcmRlciA9IGRv
Y3VtZW50T3JkZXIocG9pbnQsIHJhbmdlLnN0YXJ0KTsgIWlzX2d0KG9yZGVyKSkKKyAgICAgICAg
cmV0dXJuIG9yZGVyOworICAgIGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRPcmRlcihwb2ludCwg
cmFuZ2UuZW5kKTsgIWlzX2x0KG9yZGVyKSkKKyAgICAgICAgcmV0dXJuIG9yZGVyOworICAgIHJl
dHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7Cit9CisKK2Jvb2wgY29udGFpbnMoY29u
c3QgU2ltcGxlUmFuZ2UmIG91dGVyUmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBpbm5lclJhbmdl
KQoreworICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIob3V0ZXJSYW5nZS5zdGFydCwg
aW5uZXJSYW5nZS5zdGFydCkpICYmIGlzX2d0ZXEoZG9jdW1lbnRPcmRlcihvdXRlclJhbmdlLmVu
ZCwgaW5uZXJSYW5nZS5lbmQpKTsKK30KKworYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJh
bmdlJiBhLCBjb25zdCBTaW1wbGVSYW5nZSYgYikKK3sKKyAgICByZXR1cm4gaXNfbHRlcShkb2N1
bWVudE9yZGVyKGEuc3RhcnQsIGIuZW5kKSkgJiYgaXNfbHRlcShkb2N1bWVudE9yZGVyKGIuc3Rh
cnQsIGEuZW5kKSk7Cit9CisKKy8vIEZJWE1FOiBOYW1lIHRoaXMgInVuaW9uUmFuZ2UiIGluc3Rl
YWQ/IFRoZSB3b3JkICJ1bmlvbiIgaXMgYSBub3VuIG1vcmUgdGhhbiBhIHZlcmIuIFdvdWxkIGxp
a2UgdG8gY2FsbCBpdCBqdXN0IHVuaW9uIGlmIGl0IHdhc24ndCBmb3IgdGhlIGNvbmZsaWN0IHdp
dGggdGhlIEMga2V5d29yZC4KK1NpbXBsZVJhbmdlIHVuaW9uUmFuZ2VzKGNvbnN0IFNpbXBsZVJh
bmdlJiBhLCBjb25zdCBTaW1wbGVSYW5nZSYgYikKK3sKKyAgICBhdXRvJiBzdGFydCA9IGlzX2x0
ZXEoZG9jdW1lbnRPcmRlcihhLnN0YXJ0LCBiLnN0YXJ0KSkgPyBhIDogYjsKKyAgICBhdXRvJiBl
bmQgPSBpc19sdGVxKGRvY3VtZW50T3JkZXIoYS5lbmQsIGIuZW5kKSkgPyBiIDogYTsKKyAgICBy
ZXR1cm4geyBzdGFydC5zdGFydCwgZW5kLmVuZCB9OworfQorCitib29sIGNvbnRhaW5zKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICAvLyBGSVhNRTog
Q29uc2lkZXIgYSBtb3JlIGVmZmljaWVudCBhbGdvcml0aG0gdGhhdCBhdm9pZHMgYWx3YXlzIGNv
bXB1dGluZyB0aGUgbm9kZSBpbmRleC4KKyAgICAvLyBGSVhNRTogRG9lcyB0aGlzIGNvbnN0X2Nh
c3QgcG9pbnQgdG8gYSBkZXNpZ24gcHJvYmxlbT8KKyAgICBhdXRvIG5vZGVSYW5nZSA9IG1ha2VS
YW5nZVNlbGVjdGluZ05vZGUoY29uc3RfY2FzdDxOb2RlJj4obm9kZSkpOworICAgIHJldHVybiBu
b2RlUmFuZ2UgJiYgY29udGFpbnMocmFuZ2UsICpub2RlUmFuZ2UpOworfQorCitib29sIGludGVy
c2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQoreworICAg
IC8vIEZJWE1FOiBDb25zaWRlciBhIG1vcmUgZWZmaWNpZW50IGFsZ29yaXRobSB0aGF0IGF2b2lk
cyBhbHdheXMgY29tcHV0aW5nIHRoZSBub2RlIGluZGV4LgorICAgIC8vIEZJWE1FOiBEb2VzIHRo
aXMgY29uc3RfY2FzdCBwb2ludCB0byBhIGRlc2lnbiBwcm9ibGVtPworICAgIGF1dG8gbm9kZVJh
bmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShjb25zdF9jYXN0PE5vZGUmPihub2RlKSk7Cisg
ICAgaWYgKCFub2RlUmFuZ2UpCisgICAgICAgIHJldHVybiBub2RlLmNvbnRhaW5zKHJhbmdlLnN0
YXJ0LmNvbnRhaW5lci5wdHIoKSk7CisgICAgcmV0dXJuIGlzX2x0KGRvY3VtZW50T3JkZXIobm9k
ZVJhbmdlLT5zdGFydCwgcmFuZ2UuZW5kKSkgJiYgaXNfbHQoZG9jdW1lbnRPcmRlcihyYW5nZS5z
dGFydCwgbm9kZVJhbmdlLT5lbmQpKTsKKworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5o
CmluZGV4IDBkNWNkMWVhYjJhNzcxZWI2NzI2NWRkNjMwMjQ1MzQxMTI3ZmM1ZGYuLjQ2MjEwZDc4
ZjE4NGUxZjU4YjViNGViMzM2MjVmODNhMjgxOWM1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5oCkBAIC02NSw2ICs2NSwyMCBAQCBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAorV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5
UG9pbnQmKTsKK2Jvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBP
cHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOworCitXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5z
KGNvbnN0IFNpbXBsZVJhbmdlJiBvdXRlclJhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgaW5uZXJS
YW5nZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2Um
LCBjb25zdCBTaW1wbGVSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgdW5pb25S
YW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOworCitXRUJDT1JF
X0VYUE9SVCBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOwor
V0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3Qg
Tm9kZSYpOworCisvLyBSZXR1cm5zIGVxdWl2YWxlbnQgaWYgcG9pbnQgaXMgaW4gcmFuZ2UuCitX
RUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBTaW1wbGVS
YW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK1dFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRl
cmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBTaW1wbGVSYW5n
ZSYpOworCiBjbGFzcyBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U7CiBJbnRlcnNlY3RpbmdOb2RlUmFu
Z2UgaW50ZXJzZWN0aW5nTm9kZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZy5jcHAKaW5kZXggMjgzYWVhZDY1OGQ0MWVlMmEwYmMzNWYyMzAxZTk1YWY0Y2Ux
MjNiYy4uNmIxODRjYTg1N2NhN2VlY2E1MWQ2YmFmZjU1NGI1YTIxNTI1NzdkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC03OSw0MCArNzksMTggQEAgYm9vbCBpc0F0b21pY05v
ZGUoY29uc3QgTm9kZSogbm9kZSkKICAgICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxk
Tm9kZXMoKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm5vZGUpKTsKIH0KIAotLy8gQ29tcGFy
ZSB0d28gcG9zaXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBwb3NzaWJpbGl0eSB0aGF0
IG9uZSBvciBib3RoCi0vLyBjb3VsZCBiZSBpbnNpZGUgYSBzaGFkb3cgdHJlZS4gT25seSB3b3Jr
cyBmb3Igbm9uLW51bGwgdmFsdWVzLgorLy8gRklYTUU6IENoYW5nZSBjYWxsZXJzIHRvIHVzZSBk
b2N1bWVudE9yZGVyIGFuZCBkZWxldGUgdGhpcy4KIGludCBjb21wYXJlUG9zaXRpb25zKGNvbnN0
IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKIHsKLSAgICBUcmVlU2NvcGUqIGNvbW1v
blNjb3BlID0gY29tbW9uVHJlZVNjb3BlKGEuY29udGFpbmVyTm9kZSgpLCBiLmNvbnRhaW5lck5v
ZGUoKSk7Ci0KLSAgICBpZiAoIWNvbW1vblNjb3BlKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IE5vZGUqIG5vZGVBID0gY29tbW9uU2NvcGUtPmFuY2VzdG9yTm9kZUluVGhpc1Njb3BlKGEuY29u
dGFpbmVyTm9kZSgpKTsKLSAgICBBU1NFUlQobm9kZUEpOwotICAgIGJvb2wgaGFzRGVzY2VuZGVu
dEEgPSBub2RlQSAhPSBhLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpbnQgb2Zmc2V0QSA9IGhhc0Rl
c2NlbmRlbnRBID8gMCA6IGEuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotCi0gICAg
Tm9kZSogbm9kZUIgPSBjb21tb25TY29wZS0+YW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUoYi5jb250
YWluZXJOb2RlKCkpOwotICAgIEFTU0VSVChub2RlQik7Ci0gICAgYm9vbCBoYXNEZXNjZW5kZW50
QiA9IG5vZGVCICE9IGIuY29udGFpbmVyTm9kZSgpOwotICAgIGludCBvZmZzZXRCID0gaGFzRGVz
Y2VuZGVudEIgPyAwIDogYi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0KLSAgICBp
bnQgYmlhcyA9IDA7Ci0gICAgaWYgKG5vZGVBID09IG5vZGVCKSB7Ci0gICAgICAgIGlmIChoYXNE
ZXNjZW5kZW50QSkKLSAgICAgICAgICAgIGJpYXMgPSAtMTsKLSAgICAgICAgZWxzZSBpZiAoaGFz
RGVzY2VuZGVudEIpCi0gICAgICAgICAgICBiaWFzID0gMTsKLSAgICB9Ci0KLSAgICBhdXRvIGNv
bXBhcmlzb25SZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKG5vZGVBLCBvZmZz
ZXRBLCBub2RlQiwgb2Zmc2V0Qik7Ci0gICAgaWYgKGNvbXBhcmlzb25SZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBiaWFzOwotICAgIGF1dG8gcmVzdWx0ID0gY29tcGFyaXNv
blJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLSAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0
IDogYmlhczsKKyAgICBhdXRvIG9yZGVyaW5nID0gZG9jdW1lbnRPcmRlcihhLCBiKTsKKyAgICBp
ZiAoaXNfbHQob3JkZXJpbmcpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKGlzX2d0KG9y
ZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7CiB9CiAKKy8vIEZJWE1F
OiBDaGFuZ2UgY2FsbGVycyB0byB1c2UgZG9jdW1lbnRPcmRlciBhbmQgZGVsZXRlIHRoaXMuCiBp
bnQgY29tcGFyZVBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhhLmRlZXBFcXVp
dmFsZW50KCksIGIuZGVlcEVxdWl2YWxlbnQoKSk7CkBAIC0xMTYzLDkgKzExNDEsNyBAQCBzdGF0
aWMgYm9vbCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBv
c2l0aW9uJiBzZWNvbmQpCiAvLyBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRo
ZXIgYSBub2RlIGlzIHZpc2libHkgZml0IGluc2lkZSBzZWxlY3RlZFJhbmdlCiBib29sIGlzTm9k
ZVZpc2libHlDb250YWluZWRXaXRoaW4oTm9kZSYgbm9kZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKQogewotICAgIC8vIElmIHRoZSBub2RlIGlzIGluc2lkZSB0aGUgcmFuZ2UsIHRoZW4gaXQg
c3VyZWx5IGlzIGNvbnRhaW5lZCB3aXRoaW4uCi0gICAgYXV0byBjb21wYXJpc29uUmVzdWx0ID0g
Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+Y29tcGFyZU5vZGUobm9kZSk7Ci0gICAgaWYgKCFjb21w
YXJpc29uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmlzb25SZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCkgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKQorICAgIGlmIChjb250YWlucyhyYW5n
ZSwgbm9kZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYXV0byBzdGFydFBvc2l0aW9u
ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAppbmRleCAxZjBhNzcyMjllY2YzMzBiYzM5MTNmZjdhZDc0MTY5ZGUyMTYw
MTlhLi4xNjA3ZTg3Y2RhYzEzMWE0YzE2MDk3N2E2NDhjZjUyMWQ0NGE3MGViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0zNTUwLDEwICszNTUwLDggQEAgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IEVkaXRvcjo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3Qg
T3B0aW9uYWwKIHN0YXRpYyBib29sIGlzRnJhbWVJblJhbmdlKEZyYW1lJiBmcmFtZSwgY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIGZvciAoYXV0byogb3duZXJFbGVtZW50ID0gZnJh
bWUub3duZXJFbGVtZW50KCk7IG93bmVyRWxlbWVudDsgb3duZXJFbGVtZW50ID0gb3duZXJFbGVt
ZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIGlmICgmb3duZXJFbGVt
ZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS5zdGFydC5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmludGVyc2VjdHNOb2RlKCpv
d25lckVsZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuICFyZXN1bHQuaGFzRXhjZXB0aW9uKCkg
JiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgICAgICB9CisgICAgICAgIGlmICgm
b3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS5zdGFydC5kb2N1bWVudCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGludGVyc2VjdHMocmFuZ2UsICpvd25lckVsZW1lbnQpOwogICAgIH0K
ICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0zNzAzLDE4ICszNzAxLDE2IEBAIHZvaWQgRWRpdG9y
OjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAKICAgICBhdXRvJiBzZWxlY3Rp
b24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgp
KSB7Ci0gICAgICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpKSB7Ci0gICAgICAgICAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3
IGNoYXJhY3RlcnMgaW4gZWFjaCBkaXJlY3Rpb24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxl
Y3RlZCBwaG9uZSBudW1iZXJzLgotICAgICAgICAgICAgY29uc3RleHByIHVuc2lnbmVkIGNoYXJh
Y3RlcnNUb0V4dGVuZCA9IDE1OwotICAgICAgICAgICAgYXV0byBzZWxlY3RlZExpdmVSYW5nZSA9
IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IHJhbmdlIDogc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoZXh0ZW5kU2VsZWN0aW9uKCpzZWxlY3Rl
ZFJhbmdlLCBjaGFyYWN0ZXJzVG9FeHRlbmQpKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBXaHkgZG8gd2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgYW5kIHRoZSBjb2RlIGJlbG93IHRo
aXMgb25seSB3aGVuIGl0IG92ZXJsYXBzIHRoZSBzZWxlY3Rpb24/Ci0gICAgICAgICAgICAgICAg
YWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKLQotICAg
ICAgICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxl
cGhvbmUgbnVtYmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBhY3R1YWwgc2VsZWN0aW9uIHJh
bmdlLgotICAgICAgICAgICAgICAgIGlmIChyYW5nZXNPdmVybGFwKGNyZWF0ZUxpdmVSYW5nZShy
YW5nZSkucHRyKCksIHNlbGVjdGVkTGl2ZVJhbmdlLnB0cigpKSkKLSAgICAgICAgICAgICAgICAg
ICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2UpOwotICAgICAg
ICAgICAgfQorICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSAqc2VsZWN0aW9uLnNlbGVjdGlv
bigpLmZpcnN0UmFuZ2UoKTsKKyAgICAgICAgLy8gRXh0ZW5kIHRoZSByYW5nZSBhIGZldyBjaGFy
YWN0ZXJzIGluIGVhY2ggZGlyZWN0aW9uIHRvIGRldGVjdCBpbmNvbXBsZXRlbHkgc2VsZWN0ZWQg
cGhvbmUgbnVtYmVycy4KKyAgICAgICAgY29uc3RleHByIHVuc2lnbmVkIGNoYXJhY3RlcnNUb0V4
dGVuZCA9IDE1OworICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogc2NhbkZvclRlbGVwaG9uZU51
bWJlcnMoZXh0ZW5kU2VsZWN0aW9uKHNlbGVjdGVkUmFuZ2UsIGNoYXJhY3RlcnNUb0V4dGVuZCkp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIGRvIHRoaXMgdW5jb25kaXRpb25h
bGx5IGluc3RlYWQgb2Ygd2hlbiBvbmx5IHdoZW4gaXQgb3ZlcmxhcHMgdGhlIHNlbGVjdGlvbj8K
KyAgICAgICAgICAgIGFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51
bWJlcik7CisKKyAgICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRl
Y3RlZCB0ZWxlcGhvbmUgbnVtYmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBzZWxlY3Rpb24u
CisgICAgICAgICAgICBpZiAoaW50ZXJzZWN0cyhyYW5nZSwgc2VsZWN0ZWRSYW5nZSkpCisgICAg
ICAgICAgICAgICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2Up
OwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcAppbmRleCAyNDZmYjI2YjdlODc0N2YzMGQ4OWJlNjk3Yjk5MDZkNzRlNmM5OWQxLi5iMDQ5
NzU5NmE3NWJlYzExOWI2ODcyNDQ5YzRmNTc0N2M1ZjAzYzYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTIyOCwxMyArMjI4LDYgQEAgc3RhdGljIHVuc2ln
bmVkIHZlcnRpY2FsU2Nyb2xsRGlzdGFuY2UoRnJhbWUmIGZyYW1lKQogICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oU2Nyb2xsYmFyOjpwYWdlU3RlcChoZWlnaHQpKTsKIH0KIAotc3Rh
dGljIFNpbXBsZVJhbmdlIHVuaW9uUmFuZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBT
aW1wbGVSYW5nZSYgYikKLXsKLSAgICBhdXRvJiBzdGFydCA9IGNyZWF0ZUxpdmVSYW5nZShhKS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJh
bmdlKGIpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYSA6IGI7Ci0gICAgYXV0byYgZW5k
ID0gY3JlYXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9U
T19FTkQsIGNyZWF0ZUxpdmVSYW5nZShiKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGIg
OiBhOwotICAgIHJldHVybiB7IHN0YXJ0LnN0YXJ0LCBlbmQuZW5kIH07Ci19Ci0KIC8vIEV4ZWN1
dGUgY29tbWFuZCBmdW5jdGlvbnMKIAogc3RhdGljIGJvb2wgZXhlY3V0ZUJhY2tDb2xvcihGcmFt
ZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCkBAIC0zNTMsMTQgKzM0NiwxNiBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRl
VG9FbmRPZlBhcmFncmFwaChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdQog
CiBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBF
ZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGF1dG8gbWFyayA9IGZy
YW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8mIGVkaXRv
ciA9IGZyYW1lLmVkaXRvcigpOwogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlv
bigpOwotICAgIGlmIChtYXJrICYmIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgewot
ICAgICAgICBpZiAoIXNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uUmFuZ2VzKCptYXJr
LCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQorICAgIGF1dG8gbWFya1JhbmdlID0gZWRp
dG9yLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2Ug
PSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAobWFy
a1JhbmdlICYmIHNlbGVjdGlvblJhbmdlKSB7CisgICAgICAgIGlmICghc2VsZWN0aW9uLnNldFNl
bGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmtSYW5nZSwgKnNlbGVjdGlvblJhbmdlKSwgRE9X
TlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFtZS5lZGl0b3IoKS5wZXJmb3JtRGVs
ZXRlKCk7Ci0gICAgZnJhbWUuZWRpdG9yKCkuc2V0TWFyayhzZWxlY3Rpb24uc2VsZWN0aW9uKCkp
OworICAgIGVkaXRvci5wZXJmb3JtRGVsZXRlKCk7CisgICAgZWRpdG9yLnNldE1hcmsoc2VsZWN0
aW9uLnNlbGVjdGlvbigpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA1MCwxMyArMTA0
NSwxNSBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0U2VudGVuY2UoRnJhbWUmIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbgogCiBzdGF0aWMgYm9vbCBleGVjdXRlU2Vs
ZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25z
dCBTdHJpbmcmKQogewotICAgIGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUuZWRpdG9yKCkuc2Vs
ZWN0ZWRSYW5nZSgpOwotICAgIGlmICghbWFyayB8fCAhc2VsZWN0aW9uKSB7CisgICAgYXV0byYg
ZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2Vs
ZWN0aW9uKCk7CisgICAgYXV0byBtYXJrUmFuZ2UgPSBlZGl0b3IubWFyaygpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghbWFya1JhbmdlIHx8ICFzZWxlY3Rpb25S
YW5nZSkgewogICAgICAgICBQQUw6OnN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uUmFu
Z2VzKCptYXJrLCAqc2VsZWN0aW9uKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMpOworICAgIHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9u
UmFuZ2VzKCptYXJrUmFuZ2UsICpzZWxlY3Rpb25SYW5nZSksIERPV05TVFJFQU0sIEZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICAvLyBGSVhNRTogV2h5IGRvIHdl
IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gc2V0U2VsZWN0ZWRSYW5nZSBoZXJlPwogICAg
IHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAppbmRleCBlMDEwOGIyM2E2NWZmMDg2NWUyMzgwZjVlYzFjYWFkNTg2M2E1NzY4Li5mZDA2ZjY0
ZmMwNTUzOWJhNDlhYjVjNzUyNWU0YWQ3MjVkYjA5OTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNTU0LDE4ICs1NTQsMTIgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VS
ZW1vdmVkLCBib28KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zZWxlY3Rpb24uc2V0V2l0
aG91dFZhbGlkYXRpb24obV9zZWxlY3Rpb24uZW5kKCksIG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwog
ICAgIH0gZWxzZSBpZiAoaXNSYW5nZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9z
ZWxlY3Rpb24uZmlyc3RSYW5nZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbXBhcmVOb2RlUmVz
dWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKG5vZGUpOwotICAgICAg
ICAgICAgaWYgKCFjb21wYXJlTm9kZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICAg
ICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNvbXBhcmVOb2RlUmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpO
T0RFX0JFRk9SRV9BTkRfQUZURVIgfHwgY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9JTlNJ
REUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdGhpbmcgaGVyZSwgd2hl
biB0aGlzIG5vZGUncyByZW5kZXJlciB3YXMgZGVzdHJveWVkLCB0aGUgcmVjdCB0aGF0IGl0Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQs
IHNlbGVjdGlvbiBnYXBzIHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mCi0gICAgICAgICAgICAg
ICAgICAgIC8vIHRoZSByZW1vdmFsIHdvdWxkbid0IGJlIGludmFsaWRhdGVkLgotICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogRG9uJ3QgZG8gc28gbXVjaCB1bm5lY2Vzc2FyeSBpbnZhbGlk
YXRpb24uCi0gICAgICAgICAgICAgICAgICAgIGNsZWFyUmVuZGVyVHJlZVNlbGVjdGlvbiA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBy
YW5nZSA9IG1fc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsgcmFuZ2UgJiYgaW50ZXJzZWN0cygqcmFu
Z2UsIG5vZGUpKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBkaWQgbm90aGluZyBoZXJlLCB3aGVu
IHRoaXMgbm9kZSdzIHJlbmRlcmVyIHdhcyBkZXN0cm95ZWQsIHRoZSByZWN0IHRoYXQgaXQKKyAg
ICAgICAgICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVjdGlv
biBnYXBzIHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mCisgICAgICAgICAgICAvLyB0aGUgcmVt
b3ZhbCB3b3VsZG4ndCBiZSBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBEb24n
dCBkbyBzbyBtdWNoIHVubmVjZXNzYXJ5IGludmFsaWRhdGlvbi4KKyAgICAgICAgICAgIGNsZWFy
UmVuZGVyVHJlZVNlbGVjdGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwMzQs
NyArMjAyOCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRUFmZmluCiAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCZyYW5nZS0+c3RhcnQuY29udGFpbmVyLT5k
b2N1bWVudCgpICE9ICZyYW5nZS0+ZW5kLmNvbnRhaW5lci0+ZG9jdW1lbnQoKSkKKyAgICBpZiAo
JnJhbmdlLT5zdGFydC5kb2N1bWVudCgpICE9ICZyYW5nZS0+ZW5kLmRvY3VtZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKCpy
YW5nZSwgYWZmaW5pdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCmluZGV4IDVlZDBkZTlhMzEwYjMxYmU2M2UwYTNk
NDMzODk4YzE5NTI3Mjg1NmUuLjViN2JlNzg4YzY4NGUxMjIyOWJjNzc3ZTk5NmJmOTFhZDllNWRi
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRl
eHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdp
dGhUZXh0Q29tbWFuZC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1h
bmQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHRl
eHQpCi0gICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChyYW5nZVRvQmVSZXBsYWNlZC5zdGFydC5j
b250YWluZXItPmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQorICAg
IDogQ29tcG9zaXRlRWRpdENvbW1hbmQocmFuZ2VUb0JlUmVwbGFjZWQuc3RhcnQuZG9jdW1lbnQo
KSwgRWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCiAgICAgLCBtX3JhbmdlVG9CZVJlcGxh
Y2VkKHJhbmdlVG9CZVJlcGxhY2VkKQogICAgICwgbV90ZXh0KHRleHQpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRl
eCA4NjcxMzIwZGM0M2M2NWFlM2YwMDUwNDM3ZjQzOTFmMTZmODljZjU2Li5hODQ4NjYzNjUzYTBm
N2ZmMjk3MzczNmIxMTk3MmM4YzY0YzhjYWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTg0LDcgKzg0LDcgQEAg
cHJpdmF0ZToKICNlbmRpZgogCiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpTcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNv
bnN0IFN0cmluZyYgY29ycmVjdGlvbikKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJhbmdl
VG9CZUNvcnJlY3RlZC5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCksIEVkaXRBY3Rpb246Oklu
c2VydFJlcGxhY2VtZW50KQorICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQocmFuZ2VUb0JlQ29y
cmVjdGVkLnN0YXJ0LmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQog
ICAgICwgbV9yYW5nZVRvQmVDb3JyZWN0ZWQocmFuZ2VUb0JlQ29ycmVjdGVkKQogICAgICwgbV9z
ZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKG1fcmFuZ2VUb0JlQ29ycmVjdGVkKQogICAgICwgbV9jb3Jy
ZWN0aW9uKGNvcnJlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5jcHAKaW5kZXggOTAzYmM3Y2JlM2ZhNmVhZjY0YWM2Njc4ZDIyY2E5NDJkYzk4ZTAz
Yi4uNTI2ZGVlZGY2ODA3ZDM2YWU3ODllY2U0MmEwODEwODBhNWZmZjMyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMzM3LDcgKzMzNyw3
IEBAIGF1dG8gVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5n
cmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrCiAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3Jh
bW1hcikKICAgICAgICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5n
VHlwZTo6R3JhbW1hcik7CiAgICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50
U2VsZWN0aW9uOwotICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3JhcGhS
YW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgICAgICAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gcGFyYWdyYXBoUmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFt
ZSgpKQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgICAgICAgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KCptX2NsaWVudC50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMs
IHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQppbmRleCA4NzYxMjBiYjA5YjEy
ZTA5ZTRkZWNhNThlNTU0ZDMwMjcwMWVmNDM1Li41NTgyNGZhMDgzNmUwMzNjNzkyNjYxNmE0Nzk3
MTEyMGUzNzQzYzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Rp
Y3Rpb25hcnlMb29rdXBMZWdhY3kubW0KQEAgLTY4LDExICs2OCw4IEBAIHN0YXRpYyBib29sIHNl
bGVjdGlvbkNvbnRhaW5zUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwg
Y29uc3QgVmlzCiAgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb250YWlucyhw
b3NpdGlvbik7CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2Uo
KTsKKyAgICByZXR1cm4gc2VsZWN0ZWRSYW5nZSAmJiBpc1BvaW50SW5SYW5nZSgqc2VsZWN0ZWRS
YW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pKTsKIH0KIAogT3B0aW9uYWw8c3RkOjp0
dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggMWY3MTk0YTczMjhlOTQ3YWViYjYyYWMxYzhkNThmZTky
YTE1MGE3ZS4uNmI4ZTM5OWE1ZjhhZWRmMWViYjQ3YmJiNmY2ZDUyNjlkYmE4NWQ4ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMTEyMCw3ICsxMTIwLDcgQEAgc3RhdGljIGJvb2wg
Y29udGV4dFByZXNlcnZlc05ld2xpbmUoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQpCiAKIFJl
ZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnN0IFNpbXBsZVJh
bmdlJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgYXV0byYgZG9jdW1lbnQg
PSBjb250ZXh0LnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVu
dCA9IGNvbnRleHQuc3RhcnQuZG9jdW1lbnQoKTsKICAgICBhdXRvIGZyYWdtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgIAogICAgIGlmICh0ZXh0LmlzRW1wdHko
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdl
YkFyY2hpdmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2Vi
QXJjaGl2ZS5jcHAKaW5kZXggYTViZTA3MWUzNjg2MDc3ZWUzNmQyMWUzNWE1ODM5ODA0ZDk4N2Yy
Mi4uNjA5ZWQxMTE0ZmQxOTk2Y2U4OTczYjc0Yzc5YmM3ZmUwNTI2ZWQ3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAK
QEAgLTQ1NSw3ICs0NTUsNyBAQCBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJj
aGl2ZTo6Y3JlYXRlKEZyYW1lJiBmcmFtZSkKIAogUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExl
Z2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAg
YXV0byYgZG9jdW1lbnQgPSByYW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCk7CisgICAg
YXV0byYgZG9jdW1lbnQgPSByYW5nZS5zdGFydC5kb2N1bWVudCgpOwogICAgIGF1dG8qIGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCA5NjQ0OWQzMjdhZWI5
YTkxY2ZlZDc5MjljYTZjMzY2NDEyMDIwNWJmLi5iN2IxMmFlNjE3OWU4NTBlNmQ4YjZkOTliMDMw
NWJkNTYyMzNiODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0yODQs
MTUgKzI4NCwxMyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6bW9kaWZ5KGNvbnN0IFN0cmluZyYgYWx0
ZXJTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaQogCiBFeGNlcHRpb25Pcjx2b2lk
PiBET01TZWxlY3Rpb246OmV4dGVuZChOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0g
ICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVm
UHRyKHRoaXMtPmZyYW1lKCkpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgaWYgKG9mZnNldCA+IChub2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSA/IGNhcmV0TWF4
T2Zmc2V0KG5vZGUpIDogbm9kZS5jb3VudENoaWxkTm9kZXMoKSkpCisgICAgaWYgKG9mZnNldCA+
IG5vZGUubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJv
ciB9OwogICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKCZub2RlKSkKICAgICAgICAgcmV0dXJu
IHsgfTsKLQotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CiAgICAgZnJhbWUtPnNl
bGVjdGlvbigpLnNldEV4dGVudChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJm5vZGUsIG9m
ZnNldCksIERPV05TVFJFQU0pOwogICAgIHJldHVybiB7IH07CiB9CkBAIC0zMDEsMjIgKzI5OSwx
MCBAQCBFeGNlcHRpb25PcjxSZWY8UmFuZ2U+PiBET01TZWxlY3Rpb246OmdldFJhbmdlQXQodW5z
aWduZWQgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IHJhbmdlQ291bnQoKSkKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07Ci0KLSAgICAvLyBJZiB5b3UncmUg
aGl0dGluZyB0aGlzLCB5b3UndmUgYWRkZWQgYnJva2VuIG11bHRpLXJhbmdlIHNlbGVjdGlvbiBz
dXBwb3J0LgotICAgIEFTU0VSVChyYW5nZUNvdW50KCkgPT0gMSk7Ci0KLSAgICBhdXRvKiBmcmFt
ZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKGF1dG8qIHNoYWRvd0FuY2VzdG9yID0gc2VsZWN0
aW9uU2hhZG93QW5jZXN0b3IoKmZyYW1lKSkgewotICAgICAgICBhdXRvKiBjb250YWluZXIgPSBz
aGFkb3dBbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOwotICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSBzaGFkb3dBbmNlc3Rvci0+Y29tcHV0ZU5vZGVJbmRleCgpOwotICAg
ICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1ha2VTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50
IHsgKmNvbnRhaW5lciwgb2Zmc2V0IH0pKTsKLSAgICB9Ci0KLSAgICBhdXRvIGZpcnN0UmFuZ2Ug
PSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwotICAgIEFTU0VS
VChmaXJzdFJhbmdlKTsKLSAgICBpZiAoIWZpcnN0UmFuZ2UpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKmZp
cnN0UmFuZ2UpOworICAgIGF1dG8mIGZyYW1lID0gKnRoaXMtPmZyYW1lKCk7CisgICAgaWYgKGF1
dG8gc2hhZG93QW5jZXN0b3IgPSBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcihmcmFtZSkpCisgICAg
ICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UobWFrZVNpbXBsZVJhbmdlKCptYWtlQm91bmRhcnlQ
b2ludEJlZm9yZU5vZGUoKnNoYWRvd0FuY2VzdG9yKSkpOworICAgIHJldHVybiBjcmVhdGVMaXZl
UmFuZ2UoKmZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSk7CiB9CiAK
IHZvaWQgRE9NU2VsZWN0aW9uOjpyZW1vdmVBbGxSYW5nZXMoKQpAQCAtMzI3LDUwICszMTMsMjIg
QEAgdm9pZCBET01TZWxlY3Rpb246OnJlbW92ZUFsbFJhbmdlcygpCiAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLmNsZWFyKCk7CiB9CiAKLXZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYg
cmFuZ2UpCit2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIGxpdmVSYW5nZSkKIHsK
LSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAgYXV0byBmcmFtZSA9IG1ha2VS
ZWZQdHIodGhpcy0+ZnJhbWUoKSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKLQorICAgIGF1dG8gcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UobGl2ZVJhbmdlKTsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+
c2VsZWN0aW9uKCk7Ci0gICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVj
dGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgewotICAg
ICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOworCisg
ICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKSB7CisgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFp
bmVyLT5jb250YWluaW5nU2hhZG93Um9vdCgpICYmIGludGVyc2VjdHMoKnNlbGVjdGVkUmFuZ2Us
IHJhbmdlKSkKKyAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24odW5pb25SYW5nZXMo
KnNlbGVjdGVkUmFuZ2UsIHJhbmdlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvIG5vcm1hbGl6ZWRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKTsKLSAg
ICBhdXRvIHJlc3VsdCA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRf
VE9fU1RBUlQsICpub3JtYWxpemVkUmFuZ2UpOwotICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlv
bigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewotICAgICAgICAvLyBX
ZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0
aGluZyBpZiB0aGUgdHdvIHJhbmdlcyBkb24ndCBpbnRlcnNlY3QuCi0gICAgICAgIHJlc3VsdCA9
IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqbm9ybWFs
aXplZFJhbmdlKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gLTEpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHJhbmdl
LmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKm5vcm1hbGl6ZWRSYW5n
ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVs
ZWFzZVJldHVyblZhbHVlKCkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgcmFuZ2Vz
IGludGVyc2VjdC4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKG1ha2VEZXByZWNh
dGVkTGVnYWN5UG9zaXRpb24oJnJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLnN0YXJ0T2Zm
c2V0KCkpLCBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZub3JtYWxpemVkUmFuZ2UtPmVu
ZENvbnRhaW5lcigpLCBub3JtYWxpemVkUmFuZ2UtPmVuZE9mZnNldCgpKSwgRE9XTlNUUkVBTSk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRoZSBuZXcgcmFuZ2Ug
Y29udGFpbnMgdGhlIG9yaWdpbmFsIHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRp
Z3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgdHdvIHJhbmdlcyBk
b24ndCBpbnRlcnNlY3QuCi0gICAgICAgIHJlc3VsdCA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqbm9ybWFsaXplZFJhbmdlKTsKLSAgICAgICAgaWYg
KCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwg
MSkgewotICAgICAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpFTkRfVE9fRU5ELCAqbm9ybWFsaXplZFJhbmdlKTsKLSAgICAgICAgICAgIGlmICghcmVz
dWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkg
ewotICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBjb250YWlucyB0aGUgbmV3
IHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obWFrZVNpbXBs
ZVJhbmdlKCpub3JtYWxpemVkUmFuZ2UpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVGhlIHJhbmdlcyBpbnRlcnNlY3QuCi0gICAgICAgICAgICAgICAgc2VsZWN0
aW9uLm1vdmVUbyhtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZub3JtYWxpemVkUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCksIG5vcm1hbGl6ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSksIG1ha2VE
ZXByZWNhdGVkTGVnYWN5UG9zaXRpb24oJnJhbmdlLmVuZENvbnRhaW5lcigpLCByYW5nZS5lbmRP
ZmZzZXQoKSksIERPV05TVFJFQU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQor
ICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24ocmFuZ2UpOwogfQogCiB2b2lkIERPTVNlbGVjdGlv
bjo6ZGVsZXRlRnJvbURvY3VtZW50KCkKQEAgLTM5Miw0NSArMzUwLDE5IEBAIHZvaWQgRE9NU2Vs
ZWN0aW9uOjpkZWxldGVGcm9tRG9jdW1lbnQoKQogCiBib29sIERPTVNlbGVjdGlvbjo6Y29udGFp
bnNOb2RlKE5vZGUmIG5vZGUsIGJvb2wgYWxsb3dQYXJ0aWFsKSBjb25zdAogeworICAgIC8vIEZJ
WE1FOiBUaGlzIGJlaGF2aW9yIGRvZXMgbm90IG1hdGNoIHdoYXQgdGhlIHNlbGVjdGlvbiBBUEkg
c3RhbmRhcmQgc3BlY2lmaWVzLgorICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSkKKyAgICAgICAg
YWxsb3dQYXJ0aWFsID0gdHJ1ZTsKKwogICAgIGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBzZWxl
Y3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICE9
ICZub2RlLmRvY3VtZW50KCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBSZWY8Tm9kZT4gcHJvdGVjdGVkTm9kZShub2RlKTsKLSAgICBhdXRvIHNl
bGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
KyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
Zmlyc3RSYW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5z
dGFydC5jb250YWluZXItPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGUo
KTsKLSAgICBpZiAoIXBhcmVudE5vZGUgfHwgIXBhcmVudE5vZGUtPmlzQ29ubmVjdGVkKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBub2RlSW5kZXggPSBub2RlLmNvbXB1
dGVOb2RlSW5kZXgoKTsKLQotICAgIGF1dG8gc3RhcnRzUmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5kZXgsICZzZWxlY3RlZFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBpZiAoc3Rh
cnRzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvIGVuZHNSZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBhcmVudE5vZGUs
IG5vZGVJbmRleCArIDEsICZzZWxlY3RlZFJhbmdlLT5lbmRDb250YWluZXIoKSwgc2VsZWN0ZWRS
YW5nZS0+ZW5kT2Zmc2V0KCkpOwotICAgIEFTU0VSVCghZW5kc1Jlc3VsdC5oYXNFeGNlcHRpb24o
KSk7Ci0gICAgYm9vbCBpc05vZGVGdWxseVNlbGVjdGVkID0gIXN0YXJ0c1Jlc3VsdC5oYXNFeGNl
cHRpb24oKSAmJiBzdGFydHNSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMAotICAgICAg
ICAmJiAhZW5kc1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBlbmRzUmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpIDw9IDA7Ci0gICAgaWYgKGlzTm9kZUZ1bGx5U2VsZWN0ZWQpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgYXV0byBzdGFydEVuZFJlc3VsdCA9IFJhbmdlOjpjb21wYXJlQm91
bmRhcnlQb2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4LCAmc2VsZWN0ZWRSYW5nZS0+ZW5kQ29u
dGFpbmVyKCksIHNlbGVjdGVkUmFuZ2UtPmVuZE9mZnNldCgpKTsKLSAgICBBU1NFUlQoIXN0YXJ0
RW5kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKTsKLSAgICBhdXRvIGVuZFN0YXJ0UmVzdWx0ID0gUmFu
Z2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCAmc2Vs
ZWN0ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+c3RhcnRPZmZzZXQo
KSk7Ci0gICAgQVNTRVJUKCFlbmRTdGFydFJlc3VsdC5oYXNFeGNlcHRpb24oKSk7Ci0gICAgYm9v
bCBpc05vZGVGdWxseVVuc2VsZWN0ZWQgPSAoIXN0YXJ0RW5kUmVzdWx0Lmhhc0V4Y2VwdGlvbigp
ICYmIHN0YXJ0RW5kUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgfHwg
KCFlbmRTdGFydFJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBlbmRTdGFydFJlc3VsdC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSA8IDApOwotICAgIGlmIChpc05vZGVGdWxseVVuc2VsZWN0ZWQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBhbGxvd1BhcnRpYWwgfHwgbm9kZS5pc1Rl
eHROb2RlKCk7CisgICAgcmV0dXJuIGFsbG93UGFydGlhbCA/IGludGVyc2VjdHMoKnNlbGVjdGVk
UmFuZ2UsIG5vZGUpIDogY29udGFpbnMoKnNlbGVjdGVkUmFuZ2UsIG5vZGUpOwogfQogCiB2b2lk
IERPTVNlbGVjdGlvbjo6c2VsZWN0QWxsQ2hpbGRyZW4oTm9kZSYgbm9kZSkKQEAgLTQ4MywxMSAr
NDE1LDcgQEAgdW5zaWduZWQgRE9NU2VsZWN0aW9uOjpzaGFkb3dBZGp1c3RlZE9mZnNldChjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiBib29sIERPTVNlbGVjdGlvbjo6aXNWYWxpZEZv
clBvc2l0aW9uKE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgYXV0byogZnJhbWUgPSB0aGlzLT5m
cmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IW5vZGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAmbm9kZS0+ZG9jdW1lbnQo
KSA9PSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gZnJhbWUgJiYgKCFub2RlIHx8ICZu
b2RlLT5kb2N1bWVudCgpID09IGZyYW1lLT5kb2N1bWVudCgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBmOTJh
YjNiZTY0MDhiZWIxNjY3NDNlNTgzZjNjY2I4MmQ0YTllZDczLi4zY2MyY2ViYWM1YTgwMWYzOWM4
N2FhMzBhZjkwMjllZmFlZmMyOWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZG9jdW1lbnRGcmFnbWVudEZyb21EcmFnRGF0YShjb25zdCBEcmFnRGF0YSYgZHJhCiAgICAgICAg
ICAgICBTdHJpbmcgdGl0bGU7CiAgICAgICAgICAgICBTdHJpbmcgdXJsID0gZHJhZ0RhdGEuYXNV
UkwoRHJhZ0RhdGE6OkRvTm90Q29udmVydEZpbGVuYW1lcywgJnRpdGxlKTsKICAgICAgICAgICAg
IGlmICghdXJsLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
Y29udGV4dC5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCk7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0YXJ0LmRvY3VtZW50KCk7CiAgICAgICAgICAgICAgICAg
YXV0byBhbmNob3IgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICAg
ICAgICAgICAgICBhbmNob3ItPnNldEhyZWYodXJsKTsKICAgICAgICAgICAgICAgICBpZiAodGl0
bGUuaXNFbXB0eSgpKSB7CkBAIC03NzQsMTcgKzc3NCwxMyBAQCBFbGVtZW50KiBEcmFnQ29udHJv
bGxlcjo6ZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSogc291cmNlRnJhbWUsIEVsZW1lbnQq
IHN0YQogICAgIHN0YXRlLnR5cGUgPSBzb3VyY2VGcmFtZS0+c2VsZWN0aW9uKCkuY29udGFpbnMo
ZHJhZ09yaWdpbikgPyBEcmFnU291cmNlQWN0aW9uOjpTZWxlY3Rpb24gOiBPcHRpb25TZXQ8RHJh
Z1NvdXJjZUFjdGlvbj4oeyB9KTsKICAgICBpZiAoIXN0YXJ0RWxlbWVudCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIGlmIChh
dXRvIGF0dGFjaG1lbnQgPSBlbmNsb3NpbmdBdHRhY2htZW50RWxlbWVudCgqc3RhcnRFbGVtZW50
KSkgewotICAgICAgICBhdXRvIHNlbGVjdGlvbiA9IHNvdXJjZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICAgICAgYXV0byYgc2VsZWN0aW9uID0gc291cmNlRnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgICAgICBib29sIGlzU2luZ2xlQXR0YWNobWVudFNlbGVj
dGlvbiA9IHNlbGVjdGlvbi5zdGFydCgpID09IFBvc2l0aW9uKGF0dGFjaG1lbnQuZ2V0KCksIFBv
c2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKSAmJiBzZWxlY3Rpb24uZW5kKCkgPT0gUG9z
aXRpb24oYXR0YWNobWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7
Ci0gICAgICAgIGJvb2wgaXNBdHRhY2htZW50RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiA9IGZh
bHNlOwotICAgICAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNyZWF0ZUxp
dmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVOb2RlKCphdHRhY2htZW50KTsKLSAgICAg
ICAgICAgIGlzQXR0YWNobWVudEVsZW1lbnRJbkN1cnJlbnRTZWxlY3Rpb24gPSAhY29tcGFyZVJl
c3VsdC5oYXNFeGNlcHRpb24oKSAmJiBjb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
ID09IFJhbmdlOjpOT0RFX0lOU0lERTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNBdHRh
Y2htZW50RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiB8fCBpc1NpbmdsZUF0dGFjaG1lbnRTZWxl
Y3Rpb24pIHsKKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFu
Z2UoKTsKKyAgICAgICAgaWYgKGlzU2luZ2xlQXR0YWNobWVudFNlbGVjdGlvbiB8fCAhc2VsZWN0
ZWRSYW5nZSB8fCAhY29udGFpbnMoKnNlbGVjdGVkUmFuZ2UsICphdHRhY2htZW50KSkgewogICAg
ICAgICAgICAgc3RhdGUudHlwZSA9IERyYWdTb3VyY2VBY3Rpb246OkF0dGFjaG1lbnQ7CiAgICAg
ICAgICAgICByZXR1cm4gYXR0YWNobWVudC5nZXQoKTsKICAgICAgICAgfQpAQCAtMTQ3MSw4ICsx
NDY3LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xk
ZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4KIAogICAgIFZlY3RvcjxSZWY8SFRNTElt
YWdlRWxlbWVudD4+IHBsYWNlaG9sZGVyczsKICAgICBmb3IgKGF1dG8mIHBsYWNlaG9sZGVyIDog
ZGVzY2VuZGFudHNPZlR5cGU8SFRNTEltYWdlRWxlbWVudD4oZG93bmNhc3Q8Q29udGFpbmVyTm9k
ZT4oKmNvbnRhaW5lcikpKSB7Ci0gICAgICAgIGF1dG8gaW50ZXJzZWN0c05vZGUgPSBjcmVhdGVM
aXZlUmFuZ2UoKmluc2VydGVkQ29udGVudFJhbmdlKS0+aW50ZXJzZWN0c05vZGUocGxhY2Vob2xk
ZXIpOwotICAgICAgICBpZiAoIWludGVyc2VjdHNOb2RlLmhhc0V4Y2VwdGlvbigpICYmIGludGVy
c2VjdHNOb2RlLnJldHVyblZhbHVlKCkpCisgICAgICAgIGlmIChpbnRlcnNlY3RzKCppbnNlcnRl
ZENvbnRlbnRSYW5nZSwgcGxhY2Vob2xkZXIpKQogICAgICAgICAgICAgcGxhY2Vob2xkZXJzLmFw
cGVuZChwbGFjZWhvbGRlcik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKaW5kZXggMzAwNWUwYzJhZWU2YmE3MjEwODUwOTkzMTk5ZDFjOTQzYmU4M2YwYS4uYjQ1NWIx
ZGViNmU0OTE1ZTRlOTFhMGU1NTEwYTczMDExMzEzZjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcApAQCAtMjc0MSw4ICsyNzQxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRp
c3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIHRhcmdl
dE4KICAgICAvLyB3aWxsIHNldCBhIHNlbGVjdGlvbiBpbnNpZGUgaXQsIHdoaWNoIHdpbGwgYWxz
byBzZXQgdGhlIGZvY3VzZWQgZWxlbWVudC4KICAgICBpZiAoZWxlbWVudCAmJiBtX2ZyYW1lLnNl
bGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tcGFyZU5vZGUoKmVs
ZW1lbnQpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lERSAmJiBlbGVtZW50LT5p
c0Rlc2NlbmRhbnRPZihtX2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkpKQorICAg
ICAgICAgICAgaWYgKGNvbnRhaW5zKCpyYW5nZSwgKmVsZW1lbnQpICYmIGVsZW1lbnQtPmlzRGVz
Y2VuZGFudE9mKG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApp
bmRleCA0OTcyOWQwOTY5NzgwMTFlOGU3NTBhYTM4NDhiNmJjMzQwMGUzMDYxLi5hNzc4MTBiMDIw
YmY1YThkODUyMmNhYzhiMjViMzY5MjU4ODMyNTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTcz
MCwxOSArNzMwLDE5IEBAIGF1dG8gUGFnZTo6ZmluZFRleHRNYXRjaGVzKGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBsCiAKICAgICBpZiAoZnJhbWVX
aXRoU2VsZWN0aW9uKSB7CiAgICAgICAgIHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbiA9IE5vTWF0
Y2hBZnRlclVzZXJTZWxlY3Rpb247Ci0gICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1l
V2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAg
ICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSAqZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5z
KEJhY2t3YXJkcykpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHQucmFuZ2Vz
LnNpemUoKTsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29tcGFyaXNvblJl
c3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHQucmFuZ2VzW2kg
LSAxXSkpOwotICAgICAgICAgICAgICAgIGlmICghY29tcGFyaXNvblJlc3VsdC5oYXNFeGNlcHRp
b24oKSAmJiBjb21wYXJpc29uUmVzdWx0LnJldHVyblZhbHVlKCkgPiAwKSB7CisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFNlZW1zIGxpa2UgdGhpcyBzaG91bGQgYmUgaXNfZ3RlcSB0byBjb3Jy
ZWN0bHkgaGFuZGxlIHRoZSBzYW1lIHN0cmluZyBmb3VuZCB0d2ljZSBpbiBhIHJvdy4KKyAgICAg
ICAgICAgICAgICBpZiAoaXNfZ3QoZG9jdW1lbnRPcmRlcihzZWxlY3RlZFJhbmdlLnN0YXJ0LCBy
ZXN1bHQucmFuZ2VzW2kgLSAxXS5lbmQpKSkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHQu
aW5kZXhGb3JTZWxlY3Rpb24gPSBpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSByZXN1bHQucmFuZ2VzLnNpemUoKTsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9IGNy
ZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpTVEFSVF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHQucmFuZ2VzW2ldKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb21wYXJpc29uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBh
cmlzb25SZXN1bHQucmV0dXJuVmFsdWUoKSA8IDApIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogU2VlbXMgbGlrZSB0aGlzIHNob3VsZCBiZSBpc19sdGVxIHRvIGNvcnJlY3RseSBoYW5kbGUg
dGhlIHNhbWUgc3RyaW5nIGZvdW5kIHR3aWNlIGluIGEgcm93LgorICAgICAgICAgICAgICAgIGlm
IChpc19sdChkb2N1bWVudE9yZGVyKHNlbGVjdGVkUmFuZ2UuZW5kLCByZXN1bHQucmFuZ2VzW2ld
LnN0YXJ0KSkpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9u
ID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAt
NzYzLDExICs3NjMsMTEgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFBhZ2U6OnJhbmdlT2ZTdHJp
bmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IE9wdGlvbmFsPFMKICAgICBpZiAodGFyZ2V0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChyZWZl
cmVuY2VSYW5nZSAmJiByZWZlcmVuY2VSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgp
LnBhZ2UoKSAhPSB0aGlzKQorICAgIGlmIChyZWZlcmVuY2VSYW5nZSAmJiByZWZlcmVuY2VSYW5n
ZS0+c3RhcnQuZG9jdW1lbnQoKS5wYWdlKCkgIT0gdGhpcykKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIENhbldyYXAgY2FuV3JhcCA9IG9wdGlvbnMuY29udGFpbnMoV3JhcEFy
b3VuZCkgPyBDYW5XcmFwOjpZZXMgOiBDYW5XcmFwOjpObzsKLSAgICBGcmFtZSogZnJhbWUgPSBy
ZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydC5jb250YWluZXItPmRvY3VtZW50
KCkuZnJhbWUoKSA6ICZtYWluRnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VS
YW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbWFpbkZy
YW1lKCk7CiAgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBmcmFtZTsKICAgICBkbyB7CiAgICAgICAg
IGlmIChhdXRvIHJlc3VsdFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFy
Z2V0LCBmcmFtZSA9PSBzdGFydEZyYW1lID8gcmVmZXJlbmNlUmFuZ2UgOiBXVEY6Om51bGxvcHQs
IG9wdGlvbnMgLSBXcmFwQXJvdW5kKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmluZGV4IDJlZmM0MWUzZDQyNzMyNjU5Mjdh
ZGU1YjhiYmE5NmE3NzEyMzY5ODUuLmYxNmViYzU4NmM3YTdjMDQxOGY0N2VmOTRjNjU1NjMyNzhi
OTk1YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbQpAQCAtNjMwLDcgKzYzMCw3IEBAIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI6OkhpZ2hsaWdodCogU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZmluZFRlbGVwaG9u
ZU51CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChhdXRvJiBoaWdobGlnaHQg
OiBtX3BvdGVudGlhbEhpZ2hsaWdodHMpIHsKLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgp
ID09IEhpZ2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSAmJiBjcmVhdGVMaXZlUmFuZ2UoaGln
aGxpZ2h0LT5yYW5nZSgpKS0+Y29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5n
ZSkpKQorICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUZWxlcGhv
bmVOdW1iZXJUeXBlICYmIGNvbnRhaW5zKGhpZ2hsaWdodC0+cmFuZ2UoKSwgKnNlbGVjdGlvblJh
bmdlKSkKICAgICAgICAgICAgIHJldHVybiBoaWdobGlnaHQuZ2V0KCk7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGI2ZWExNTUzMDc5Nzdk
OWU1N2QyNGE4MDdlMGYyNjcyOGU5Y2VkYjIuLjk2YmRmNTRlNWMzYTIzMzUxZGFhOWE2MTIxYjE5
MDc5ZTczYzQ5ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CkBAIC0xOTc1LDcgKzE5NzUsNyBAQCBzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gYm9yZGVyQW5k
VGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgQ29vcmRpbmF0ZQogewogICAgIFZl
Y3RvcjxGbG9hdFJlY3Q+IHJlY3RzOwogCi0gICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1
bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJhbmdl
LnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
CiAKICAgICBib29sIHVzZVZpc2libGVCb3VuZHMgPSBiZWhhdmlvci5jb250YWlucyhSZW5kZXJP
YmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VWaXNpYmxlQm91bmRzKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDhjZjQyODdlMGFiZTYzMzJhZDQ0MjUyODVj
NzIyZmFmOTRiMzYwZmYuLmQ5ZDVmZTQ2MGJmMzg4NjcyYzVhZTQxNGQ4YmM2NTc0Y2YyMWNmYzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTIxNjEsMjcgKzIxNjEsNDUg
QEAgdW5zaWduZWQgSW50ZXJuYWxzOjpsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCYgc2NvcGUsIGNv
bnN0IFJhbmdlJiByYW5nZSkKICAgICByZXR1cm4gY2xhbXBUbzx1bnNpZ25lZD4oY2hhcmFjdGVy
UmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoc2NvcGUpLCBtYWtlU2lt
cGxlUmFuZ2UocmFuZ2UpKS5sZW5ndGgpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFz
VGV4dChjb25zdCBSYW5nZSYgcmFuZ2UpCitTdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dChj
b25zdCBSYW5nZSYgbGl2ZVJhbmdlKQogewotICAgIHJldHVybiByYW5nZS50ZXh0KCk7CisgICAg
YXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShsaXZlUmFuZ2UpOworICAgIHJhbmdlLnN0YXJ0
LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIHBsYWluVGV4dChyYW5nZSk7
CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRl
cmF0b3IoY29uc3QgUmFuZ2UmIHJhbmdlKQorLy8gRklYTUU6IEZpbmQgYSBnb29kIHBsYWNlIGZv
ciB0aGlzIGdlbmVyYWwgcHVycG9zZSBhbGdvcml0aG0uCitzdGF0aWMgU3RyaW5nIGpvaW4oVmVj
dG9yPFN0cmluZz4mJiBzdHJpbmdzKQogewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgZm9yIChT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKG1ha2VTaW1w
bGVSYW5nZShyYW5nZSkpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRl
cmF0b3IuYWR2YW5jZSgpKQotICAgICAgICByZXN1bHQuaW5zZXJ0KGJhY2t3YXJkc0l0ZXJhdG9y
LnRleHQoKS50b1N0cmluZygpLCAwKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OworICAgIGZvciAoYXV0byYgc3RyaW5nIDogc3RyaW5ncykKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOworICAgIHJldHVybiByZXN1bHQudG9TdHJp
bmcoKTsKK30KKworU3RyaW5nIEludGVybmFsczo6cmFuZ2VBc1RleHRVc2luZ0JhY2t3YXJkc1Rl
eHRJdGVyYXRvcihjb25zdCBSYW5nZSYgbGl2ZVJhbmdlKQoreworICAgIGF1dG8gcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UobGl2ZVJhbmdlKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVw
ZGF0ZUxheW91dCgpOworICAgIFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7CisgICAgZm9yIChTaW1w
bGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKHJhbmdlKTsgIWJh
Y2t3YXJkc0l0ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKKyAg
ICAgICAgc3RyaW5ncy5hcHBlbmQoYmFja3dhcmRzSXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCkp
OworICAgIHN0cmluZ3MucmV2ZXJzZSgpOworICAgIHJldHVybiBqb2luKFdURk1vdmUoc3RyaW5n
cykpOwogfQogCi1SZWY8UmFuZ2U+IEludGVybmFsczo6c3VicmFuZ2UoUmFuZ2UmIHJhbmdlLCB1
bnNpZ25lZCByYW5nZUxvY2F0aW9uLCB1bnNpZ25lZCByYW5nZUxlbmd0aCkKK1JlZjxSYW5nZT4g
SW50ZXJuYWxzOjpzdWJyYW5nZShSYW5nZSYgbGl2ZVJhbmdlLCB1bnNpZ25lZCByYW5nZUxvY2F0
aW9uLCB1bnNpZ25lZCByYW5nZUxlbmd0aCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdl
KHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpLCB7IHJhbmdlTG9j
YXRpb24sIHJhbmdlTGVuZ3RoIH0pKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdl
KGxpdmVSYW5nZSk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsK
KyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShyYW5nZSwg
eyByYW5nZUxvY2F0aW9uLCByYW5nZUxlbmd0aCB9KSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gSW50
ZXJuYWxzOjpyYW5nZU9mU3RyaW5nTmVhckxvY2F0aW9uKGNvbnN0IFJhbmdlJiByYW5nZSwgY29u
c3QgU3RyaW5nJiB0ZXh0LCB1bnNpZ25lZCB0YXJnZXRPZmZzZXQpCitSZWZQdHI8UmFuZ2U+IElu
dGVybmFsczo6cmFuZ2VPZlN0cmluZ05lYXJMb2NhdGlvbihjb25zdCBSYW5nZSYgbGl2ZVJhbmdl
LCBjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIHRhcmdldE9mZnNldCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlTGl2ZVJhbmdlKGZpbmRDbG9zZXN0UGxhaW5UZXh0KG1ha2VTaW1wbGVSYW5nZShy
YW5nZSksIHRleHQsIHsgfSwgdGFyZ2V0T2Zmc2V0KSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VT
aW1wbGVSYW5nZShsaXZlUmFuZ2UpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRl
TGF5b3V0KCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShmaW5kQ2xvc2VzdFBsYWluVGV4
dChyYW5nZSwgdGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpKTsKIH0KIAogI2lmICFQTEFURk9STShN
QUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlLmNwcAppbmRleCAwNjc4
Y2Q0M2QzNjFjNDg3ZDZkOGZlYmNmNGNlNmRhODY2N2VjNzg3Li45YzcxZTRmZTM3NTI0M2FkYTE3
YjcyOWM3MjY0NDUxM2ZhNWM2MDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01SYW5nZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RPTUV4Y2Vw
dGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0pTRXhlY1N0YXRlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbmNs
dWRlICJXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktp
dERPTU5vZGVQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgpAQCAtMzU1
LDkgKzM1Niw3IEBAIGdzaG9ydCB3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfYm91bmRhcnlfcG9p
bnRzKFdlYktpdERPTVJhbmdlKiBzZWxmLCBndXNob3J0IGhvCiAgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgMCk7CiAgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzb3VyY2VSYW5nZSksIDApOwogICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJDb3JlOjpSYW5nZSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpSYW5nZSogY29udmVydGVk
U291cmNlUmFuZ2UgPSBXZWJLaXQ6OmNvcmUoc291cmNlUmFuZ2UpOwotICAgIGF1dG8gcmVzdWx0
ID0gaXRlbS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MoaG93LCAqY29udmVydGVk
U291cmNlUmFuZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gV2ViS2l0Ojpjb3JlKHNlbGYpLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoaG93LCAqV2ViS2l0Ojpjb3JlKHNvdXJjZVJhbmdlKSk7CiAgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICBhdXRvIGRlc2NyaXB0aW9uID0g
V2ViQ29yZTo6RE9NRXhjZXB0aW9uOjpkZXNjcmlwdGlvbihyZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpLmNvZGUoKSk7CiAgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24ubGVnYWN5Q29kZSwgZGVzY3Jp
cHRpb24ubmFtZSk7CkBAIC01MDgsMTUgKzUwNyw3IEBAIGdib29sZWFuIHdlYmtpdF9kb21fcmFu
Z2VfaW50ZXJzZWN0c19ub2RlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBy
CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgRkFM
U0UpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2Rl
KSwgRkFMU0UpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCBG
QUxTRSk7Ci0gICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkUmVmTm9kZSA9IFdlYktpdDo6Y29yZShyZWZOb2Rl
KTsKLSAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPmludGVyc2VjdHNOb2RlKCpjb252ZXJ0ZWRSZWZO
b2RlKTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGF1dG8gZGVz
Y3JpcHRpb24gPSBXZWJDb3JlOjpET01FeGNlcHRpb246OmRlc2NyaXB0aW9uKHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5sZWdhY3lD
b2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworICAgIHJldHVybiBXZWJLaXQ6
OmNvcmUoc2VsZiktPmludGVyc2VjdHNOb2RlKCpXZWJLaXQ6OmNvcmUocmVmTm9kZSkpOwogfQog
CiBnc2hvcnQgd2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX3BvaW50KFdlYktpdERPTVJhbmdlKiBz
ZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBnbG9uZyBvZmZzZXQsIEdFcnJvcioqIGVycm9y
KQpAQCAtNjMyLDkgKzYyMyw5IEBAIGdjaGFyKiB3ZWJraXRfZG9tX3JhbmdlX2dldF90ZXh0KFdl
YktpdERPTVJhbmdlKiBzZWxmKQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNl
bGYpLCAwKTsKLSAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50ZXh0KCkpOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqV2Vi
S2l0Ojpjb3JlKHNlbGYpKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91
dCgpOworICAgIHJldHVybiBjb252ZXJ0VG9VVEY4U3RyaW5nKHBsYWluVGV4dChyYW5nZSkpOwog
fQogCiBHX0dOVUNfRU5EX0lHTk9SRV9ERVBSRUNBVElPTlM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5n
ZS5tbQppbmRleCBjZjI2OWExY2RkMzAyYTQzYjk3YWIyYjYwMDBjMGFkMzAyODBlODIyLi4zY2Fk
MmM1ZTgxMGJmNGJiNjUzYTRkNDk1NmMwNzFkNWU4MmVhODdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9N
UmFuZ2UubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIldLQnVuZGxlQVBJQ2FzdC5oIgog
I2ltcG9ydCAiV0tET01JbnRlcm5hbHMuaCIKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Zpc2li
bGVVbml0cy5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKQEAgLTQ5LDEy
ICs1MCw3IEBAIC0gKGlkKV9pbml0V2l0aEltcGw6KFdlYkNvcmU6OlJhbmdlKilpbXBsCiAKIC0g
KGlkKWluaXRXaXRoRG9jdW1lbnQ6KFdLRE9NRG9jdW1lbnQgKilkb2N1bWVudAogewotICAgIGF1
dG8gcmFuZ2UgPSBXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKCpXZWJLaXQ6OnRvV2ViQ29yZURvY3Vt
ZW50KGRvY3VtZW50KSk7Ci0gICAgc2VsZiA9IFtzZWxmIF9pbml0V2l0aEltcGw6cmFuZ2UucHRy
KCldOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBz
ZWxmOworICAgIHJldHVybiBbc2VsZiBfaW5pdFdpdGhJbXBsOldlYkNvcmU6OlJhbmdlOjpjcmVh
dGUoKldlYktpdDo6dG9XZWJDb3JlRG9jdW1lbnQoZG9jdW1lbnQpKS5wdHIoKV07CiB9CiAKIC0g
KHZvaWQpZGVhbGxvYwpAQCAtMTE4LDcgKzExNCw5IEBAIC0gKE5TSW50ZWdlcillbmRPZmZzZXQK
IAogLSAoTlNTdHJpbmcgKil0ZXh0CiB7Ci0gICAgcmV0dXJuIF9pbXBsLT50ZXh0KCk7CisgICAg
YXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqX2ltcGwpOworICAgIHJhbmdlLnN0YXJ0LmRv
Y3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIHBsYWluVGV4dChyYW5nZSk7CiB9
CiAKIC0gKEJPT0wpaXNDb2xsYXBzZWQKQEAgLTEyOCw4ICsxMjYsOSBAQCAtIChCT09MKWlzQ29s
bGFwc2VkCiAKIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKIHsKLSAgICBfaW1wbC0+b3duZXJEb2N1
bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVy
biBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMo
bWFrZVNpbXBsZVJhbmdlKCpfaW1wbCkpKS5hdXRvcmVsZWFzZSgpOworICAgIGF1dG8gcmFuZ2Ug
PSBtYWtlU2ltcGxlUmFuZ2UoKl9pbXBsKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJldHVybiBjcmVhdGVO
U0FycmF5KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKS5h
dXRvcmVsZWFzZSgpOwogfQogCiAtIChXS0RPTVJhbmdlICopcmFuZ2VCeUV4cGFuZGluZ1RvV29y
ZEJvdW5kYXJ5QnlDaGFyYWN0ZXJzOihOU1VJbnRlZ2VyKWNoYXJhY3RlcnMgaW5EaXJlY3Rpb246
KFdLRE9NUmFuZ2VEaXJlY3Rpb24pZGlyZWN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAppbmRleCA2M2YzYzc4NmU2ZmIyMTVjOWEyZjRlMjU5ZmFj
OWU2MTFiNmRiOGIyLi41YTI2ZTUzM2ZjMTVmZWZmMjVlZDgwYzcyN2QxM2UwYTc0ZWNkYmFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0lu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKQEAgLTQ0
LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlU2Vs
ZWN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KQEAgLTk3LDIzICs5OCwzMiBAQCBSYW5nZSYgSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZTo6Y29yZVJhbmdlKCkgY29uc3QKIAogUmVmPEluamVjdGVkQnVuZGxlTm9kZUhhbmRs
ZT4gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6ZG9jdW1lbnQoKQogewotICAgIHJldHVybiBJ
bmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKG1fcmFuZ2UtPm93bmVyRG9jdW1l
bnQoKSk7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUo
bV9yYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpKTsKIH0KIAogV2ViQ29yZTo6SW50
UmVjdCBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpib3VuZGluZ1JlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzKCkgY29uc3QKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBtX3JhbmdlLT5vd25lckRvY3Vt
ZW50KCkuZnJhbWUoKTsKLSAgICByZXR1cm4gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRv
dyhlbmNsb3NpbmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVj
dDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpKSkp
KTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpOworICAgIGF1dG8g
ZnJhbWUgPSByYW5nZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAg
IGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gdmlldy0+Y29udGVu
dHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJl
bmRlck9iamVjdDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMocmFuZ2UpKSkpOwogfQogCiBS
ZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2Uo
U25hcHNob3RPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQg
PSBtX3JhbmdlLT5vd25lckRvY3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gb3duZXJEb2N1
bWVudC5mcmFtZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobV9yYW5nZSk7
CisKKyAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZihyYW5nZS5zdGFydC5kb2N1bWVudCgpKTsK
KworICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKGRvY3VtZW50LT5mcmFtZSgpKTsKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBhdXRvIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3
KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0x
MjEsMTMgKzEzMSwxMSBAQCBSZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9wdGlvbgogICAgIExvY2FsRGVmYXVs
dFN5c3RlbUFwcGVhcmFuY2UgbG9jYWxBcHBlYXJhbmNlKGZyYW1lVmlldy0+dXNlRGFya0FwcGVh
cmFuY2UoKSk7CiAjZW5kaWYKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7Ci0K
ICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1ha2VTaW1w
bGVSYW5nZShtX3JhbmdlKSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihy
YW5nZSk7CiAKICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IChvcHRpb25zICYgU25hcHNob3RPcHRp
b25zRXhjbHVkZURldmljZVNjYWxlRmFjdG9yKSA/IDEgOiBmcmFtZS0+cGFnZSgpLT5kZXZpY2VT
Y2FsZUZhY3RvcigpOwotICAgIEludFJlY3QgcGFpbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh1
bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9yZGVyQW5k
VGV4dFJlY3RzKG1ha2VTaW1wbGVSYW5nZShtX3JhbmdlKSkpKTsKKyAgICBJbnRSZWN0IHBhaW50
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMoUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZUJvcmRlckFuZFRleHRSZWN0cyhyYW5nZSkpKTsKICAgICBJbnRTaXpl
IGJhY2tpbmdTdG9yZVNpemUgPSBwYWludFJlY3Quc2l6ZSgpOwogICAgIGJhY2tpbmdTdG9yZVNp
emUuc2NhbGUoc2NhbGVGYWN0b3IpOwogCkBAIC0xNTUsNyArMTYzLDcgQEAgUmVmUHRyPFdlYklt
YWdlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpyZW5kZXJlZEltYWdlKFNuYXBzaG90T3B0
aW9ucyBvcHRpb24KICAgICAgICAgcGFpbnRCZWhhdmlvci5hZGQoUGFpbnRCZWhhdmlvcjo6Rm9y
Y2VXaGl0ZVRleHQpOwogCiAgICAgZnJhbWVWaWV3LT5zZXRQYWludEJlaGF2aW9yKHBhaW50QmVo
YXZpb3IpOwotICAgIG93bmVyRG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CisgICAgZG9jdW1lbnQt
PnVwZGF0ZUxheW91dCgpOwogCiAgICAgZnJhbWVWaWV3LT5wYWludCgqZ3JhcGhpY3NDb250ZXh0
LCBwYWludFJlY3QpOwogICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihvbGRQYWludEJl
aGF2aW9yKTsKQEAgLTE2Nyw3ICsxNzUsOSBAQCBSZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9wdGlvbgogCiBT
dHJpbmcgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6dGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fcmFuZ2UtPnRleHQoKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1f
cmFuZ2UpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAg
cmV0dXJuIHBsYWluVGV4dChyYW5nZSk7CiB9CiAKIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlPiBjcmVhdGVIYW5kbGUoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+
JiByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Zp
bmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcAppbmRleCAyYTU3ZmQyMDllNjM1NzBiNzM4OTIzZjBiNTlmYjNjY2RiMmY0
ZDQ0Li5iOGMwN2I4YzI1NDA2MmRhZmJmZDNjYzY4NDIyNzFmYWRmNzYxMzI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBA
IC0zMDUsNyArMzA1LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0
Y2godWludDMyX3QgbWF0Y2hJbmRleCkKIHsKICAgICBpZiAobWF0Y2hJbmRleCA+PSBtX2ZpbmRN
YXRjaGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEZyYW1lKiBmcmFtZSA9IG1fZmlu
ZE1hdGNoZXNbbWF0Y2hJbmRleF0uc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCk7
CisgICAgRnJhbWUqIGZyYW1lID0gbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XS5zdGFydC5kb2N1
bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0z
MzYsNyArMzM2LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6c2VsZWN0RmluZE1hdGNoKHVpbnQz
Ml90IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1hdGNoSW5kZXggPj0gbV9maW5kTWF0Y2hlcy5z
aXplKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVz
W21hdGNoSW5kZXhdLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIEZy
YW1lKiBmcmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0uc3RhcnQuZG9jdW1lbnQoKS5m
cmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNw
cAppbmRleCBmOTY0MTFhMTE2MDc2ODViMGZiZjQ5ZjEwOWRkYzU4MThjMTUyYjI3Li5iZjdhYzY2
OTkxZGYzNmY0ZGFhYTAyOTY0YjA1NDVmZjFhOTU5OTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcApAQCAtMTA5LDcg
KzEwOSw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJh
bWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgICAgIGF1dG8gc3Vycm91bmRpbmdT
dGFydCA9IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQoc2VsZWN0aW9uU3RhcnQpOwogICAgICAgICBh
dXRvIHN1cnJvdW5kaW5nUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3Vycm91bmRpbmdTdGFydCwg
ZW5kT2ZFZGl0YWJsZUNvbnRlbnQoc2VsZWN0aW9uU3RhcnQpKTsKICAgICAgICAgYXV0byBjb21w
b3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwotICAgICAg
ICBpZiAoc3Vycm91bmRpbmdSYW5nZSAmJiBjb21wb3NpdGlvblJhbmdlICYmIGNyZWF0ZUxpdmVS
YW5nZShzdXJyb3VuZGluZ1JhbmdlKS0+Y29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpjb21wb3Np
dGlvblJhbmdlKS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKHN1cnJvdW5kaW5nUmFuZ2UgJiYgY29t
cG9zaXRpb25SYW5nZSAmJiBjb250YWlucygqc3Vycm91bmRpbmdSYW5nZSwgKmNvbXBvc2l0aW9u
UmFuZ2UpKSB7CiAgICAgICAgICAgICBhdXRvIGJlZm9yZVRleHQgPSBwbGFpblRleHQoeyBzdXJy
b3VuZGluZ1JhbmdlLT5zdGFydCwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQgfSk7CiAgICAgICAg
ICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHQgPSBiZWZvcmVUZXh0ICsgcGxh
aW5UZXh0KHsgY29tcG9zaXRpb25SYW5nZS0+ZW5kLCBzdXJyb3VuZGluZ1JhbmdlLT5lbmQgfSk7
CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRDdXJzb3JQb3Np
dGlvbiA9IGJlZm9yZVRleHQubGVuZ3RoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGZlNzdhYWE5Nzc3M2VkYWZmZTgx
OTk1MzMzYmI2NTBmMjA0YjYzMjQuLjE1N2EwMjk0M2JhYTllZmRmNDdiZmYwNTNkMzI0ZTBiOGM2
ZWY5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCkBAIC00MTg0LDcgKzQxODQsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RE
b2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVl
cwogCiAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIGF1dG8gcmFuZ2VPZkludGVyZXN0ID0gKm1ha2VTaW1wbGVSYW5nZShyYW5nZU9m
SW50ZXJlc3RTdGFydCwgcmFuZ2VPZkludGVyZXN0RW5kKTsKLSAgICBpZiAoc2VsZWN0aW9uUmFu
Z2UgJiYgcmFuZ2VzT3ZlcmxhcChjcmVhdGVMaXZlUmFuZ2UocmFuZ2VPZkludGVyZXN0KS5wdHIo
KSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpKSB7CisgICAgaWYgKHNl
bGVjdGlvblJhbmdlICYmIGludGVyc2VjdHMocmFuZ2VPZkludGVyZXN0LCAqc2VsZWN0aW9uUmFu
Z2UpKSB7CiAgICAgICAgIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHN0ZDo6
bWF4KHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7CiAgICAgICAgIGVuZE9m
UmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSBzdGQ6Om1pbihyYW5nZU9mSW50ZXJlc3RFbmQs
IHNlbGVjdGlvbkVuZCk7CiAgICAgfSBlbHNlIHsKQEAgLTQyNDksNyArNDI0OSw3IEBAIHZvaWQg
V2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29u
dGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgY29udGV4dC5jb250ZXh0QmVmb3JlID0gbWFrZVN0cmlu
Zyhjb250ZXh0QmVmb3JlU3RhcnQsIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7
CiAgICAgY29udGV4dC5zZWxlY3RlZFRleHQgPSBtYWtlU3RyaW5nKHN0YXJ0T2ZSYW5nZU9mSW50
ZXJlc3RJblNlbGVjdGlvbiwgZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7CiAgICAg
Y29udGV4dC5jb250ZXh0QWZ0ZXIgPSBtYWtlU3RyaW5nKGVuZE9mUmFuZ2VPZkludGVyZXN0SW5T
ZWxlY3Rpb24sIGNvbnRleHRBZnRlckVuZCk7Ci0gICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYg
cmFuZ2VzT3ZlcmxhcChjcmVhdGVMaXZlUmFuZ2UocmFuZ2VPZkludGVyZXN0KS5wdHIoKSwgY3Jl
YXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdlKS5wdHIoKSkpIHsKKyAgICBpZiAoY29tcG9z
aXRpb25SYW5nZSAmJiBpbnRlcnNlY3RzKHJhbmdlT2ZJbnRlcmVzdCwgKmNvbXBvc2l0aW9uUmFu
Z2UpKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvblN0YXJ0KGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5zdGFydCkpOwogICAgICAgICBW
aXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25FbmQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCkpOwogICAgICAgICBjb250ZXh0Lm1hcmtlZFRleHQgPSBt
YWtlU3RyaW5nKGNvbXBvc2l0aW9uU3RhcnQsIGNvbXBvc2l0aW9uRW5kKTsKQEAgLTQyNjUsNyAr
NDI2NSw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9j
dW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgIHdoaWxlICghaXRlcmF0
b3IuYXRFbmQoKSkgewogICAgICAgICAgICAgaWYgKCFpdGVyYXRvci50ZXh0KCkuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICAgICAgYXV0byBhYnNvbHV0ZUJvdW5kaW5nQm94ID0gdW5pb25SZWN0
KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMoaXRlcmF0b3IucmFuZ2UoKSwgUmVuZGVy
T2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6SWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucykp
OwotICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZCh7IGl0ZXJhdG9yLnJhbmdlKCkuc3RhcnQu
Y29udGFpbmVyLT5kb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGFic29sdXRl
Qm91bmRpbmdCb3gpLCB7IG9mZnNldFNvRmFyKyssIHN0cmlkZSB9IH0pOworICAgICAgICAgICAg
ICAgIHJlY3RzLmFwcGVuZCh7IGl0ZXJhdG9yLnJhbmdlKCkuc3RhcnQuZG9jdW1lbnQoKS52aWV3
KCktPmNvbnRlbnRzVG9Sb290VmlldyhhYnNvbHV0ZUJvdW5kaW5nQm94KSwgeyBvZmZzZXRTb0Zh
cisrLCBzdHJpZGUgfSB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGl0ZXJhdG9yLmFk
dmFuY2Uoc3RyaWRlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCBmZjc0MGY1ZmVjZDM3MzI1NDI1MDkz
NmVlOGQxYWE4MzBlZWZkNTEwLi5jOWU2ZTM3NTgzYjdhZWZkZjdkNmYxMDdmNDk0YjZlZGI0NTBl
ODA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQpAQCAtODc3LDcgKzg3Nyw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVk
aWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpCiAg
ICAgICAgIGlmICghYWN0aW9uQ29udGV4dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGF1dG8gdmlldyA9IGFjdGlvbkNvbnRleHQtPnJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9j
dW1lbnQoKS52aWV3KCk7CisgICAgICAgIGF1dG8gdmlldyA9IGFjdGlvbkNvbnRleHQtPnJhbmdl
LnN0YXJ0LmRvY3VtZW50KCkudmlldygpOwogICAgICAgICBpZiAoIXZpZXcpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KaW5kZXggZGU1ZWE4ZDZi
YzkwM2RkZWVhYWY2MTA0NGY0NDg0ODE5ZDZiZWVhMS4uNWI4Y2I2YzM4YzdhNWIxNjY3NGJmMTRh
YzAxMjBjMzVmZGYzYWRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCkBAIC01NzAs
MTAgKzU3MCw5IEBAIC0gKENHUmVjdClib3VuZGluZ0JveAogLSAoTlNSZWN0KWJvdW5kaW5nQm94
CiAjZW5kaWYKIHsKLSAgICAvLyBGSVhNRTogVGhlIGNhbGwgdG8gdXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzIHNob3VsZCBiZSBtb3ZlZCBpbnRvIFdlYkNvcmU6OlJhbmdlLgot
ICAgIGF1dG8mIHJhbmdlID0gKmNvcmUoc2VsZik7Ci0gICAgcmFuZ2Uub3duZXJEb2N1bWVudCgp
LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiB1bmlv
blJlY3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhtYWtlU2ltcGxlUmFuZ2UocmFu
Z2UpKSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqY29yZShzZWxmKSk7Cisg
ICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKKyAgICByZXR1cm4gdW5pb25SZWN0KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0
UmVjdHMocmFuZ2UpKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTU4Myw3ICs1ODIsNyBA
QCAtIChDR0ltYWdlUmVmKXJlbmRlcmVkSW1hZ2VGb3JjaW5nQmxhY2tUZXh0OihCT09MKWZvcmNl
QmxhY2tUZXh0CiAjZW5kaWYKIHsKICAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpj
b3JlKHNlbGYpKTsKLSAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cihyYW5nZS5zdGFydC5jb250
YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKSk7CisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIo
cmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gbmlsOwogCkBAIC02MDIsNyArNjAxLDcgQEAgLSAoQ0dJbWFnZVJlZilyZW5kZXJl
ZEltYWdlRm9yY2luZ0JsYWNrVGV4dDooQk9PTClmb3JjZUJsYWNrVGV4dAogLSAoTlNBcnJheSAq
KXRleHRSZWN0cwogewogICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKmNvcmUoc2Vs
ZikpOwotICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIHJldHVybiBjcmVhdGVO
U0FycmF5KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKS5hdXRvcmVsZWFz
ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFu
Z2UubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0KaW5kZXggNWVl
MGJjZGZkOTk3NDM3MmEzZWJjNGFkMmE4N2FmODNiZGY1M2Y1MS4uMjg3NjYwZmVjYWU5ODZkZjli
MzlkOGQ1N2UwM2ViYmNkMGY5NDE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTVJhbmdlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01S
YW5nZS5tbQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9KU0V4ZWNTdGF0ZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5n
ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUv
VGhyZWFkQ2hlY2suaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KICNp
bXBvcnQgPFdlYkNvcmUvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oPgpAQCAtOTIsNyArOTMsOSBA
QCAtIChET01Ob2RlICopY29tbW9uQW5jZXN0b3JDb250YWluZXIKIC0gKE5TU3RyaW5nICopdGV4
dAogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1
cm4gSU1QTC0+dGV4dCgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKklNUEwp
OworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJu
IHBsYWluVGV4dChyYW5nZSk7CiB9CiAKIC0gKHZvaWQpc2V0U3RhcnQ6KERPTU5vZGUgKilyZWZO
b2RlIG9mZnNldDooaW50KW9mZnNldApAQCAtMTcwLDcgKzE3Myw3IEBAIC0gKHNob3J0KWNvbXBh
cmVCb3VuZGFyeVBvaW50czoodW5zaWduZWQgc2hvcnQpaG93IHNvdXJjZVJhbmdlOihET01SYW5n
ZSAqKXNvdXJjCiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IGlmICghc291cmNlUmFuZ2UpCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9uKCk7Ci0g
ICAgcmV0dXJuIHJhaXNlT25ET01FcnJvcihJTVBMLT5jb21wYXJlQm91bmRhcnlQb2ludHNGb3JC
aW5kaW5ncyhob3csICpjb3JlKHNvdXJjZVJhbmdlKSkpOworICAgIHJldHVybiByYWlzZU9uRE9N
RXJyb3IoSU1QTC0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKGhvdywgKmNvcmUoc291cmNlUmFuZ2Up
KSk7CiB9CiAKIC0gKHZvaWQpZGVsZXRlQ29udGVudHMKQEAgLTI0NCw3ICsyNDcsNyBAQCAtIChC
T09MKWludGVyc2VjdHNOb2RlOihET01Ob2RlICopcmVmTm9kZQogICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBpZiAoIXJlZk5vZGUpCiAgICAgICAgIHJhaXNl
VHlwZUVycm9yRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHJhaXNlT25ET01FcnJvcihJTVBMLT5p
bnRlcnNlY3RzTm9kZSgqY29yZShyZWZOb2RlKSkpOworICAgIHJldHVybiBJTVBMLT5pbnRlcnNl
Y3RzTm9kZSgqY29yZShyZWZOb2RlKSk7CiB9CiAKIC0gKHNob3J0KWNvbXBhcmVQb2ludDooRE9N
Tm9kZSAqKXJlZk5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQppbmRleCBhZTVjNDliZjE0NzU4ZjMx
NDA5NDIwZDlmNmQ1NWEyZTYzNjI2MWM5Li5hYzU5Y2QxMmJmYThhYWMwNmRiMmYwN2ZjMDViNWVl
MTIwOTMyYTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlL
aXRFeHRlbnNpb25zLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtp
dEV4dGVuc2lvbnMubW0KQEAgLTUxLDcgKzUxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTFRl
eHRBcmVhRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9JbmxpbmVCb3guaD4KLSNpbXBvcnQgPFdlYkNvcmUvTm9kZS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9Ob2RlVHJhdmVyc2FsLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlckJsb2NrLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckJsb2NrRmxv
dy5oPgpAQCAtMTI0LDkgKzEyNCwyMSBAQCAtICh2b2lkKWV4dGVuZDooVUludDMyKWFtb3VudCBp
bkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiAgICAgICAg
IHJhbmdlLnNldEVuZCgqZW5kLmNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpKTsKIH0KIAorLy8gRklYTUU6IFJlZmFjdG9yIHRvIHNoYXJlIGNvZGUgd2l0aCBpbnRl
cnNlY3RpbmdOb2Rlc1dpdGhEZXByZWNhdGVkWmVyb09mZnNldFN0YXJ0UXVpcmsuCitzdGF0aWMg
V2ViQ29yZTo6Tm9kZSogZmlyc3ROb2RlQWZ0ZXIoY29uc3QgV2ViQ29yZTo6Qm91bmRhcnlQb2lu
dCYgcG9pbnQpCit7CisgICAgaWYgKHBvaW50LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9k
ZSgpKQorICAgICAgICByZXR1cm4gcG9pbnQuY29udGFpbmVyLnB0cigpOworICAgIGlmIChhdXRv
IGNoaWxkID0gcG9pbnQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChwb2ludC5vZmZzZXQp
KQorICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgaWYgKCFwb2ludC5vZmZzZXQpCisgICAgICAg
IHJldHVybiBwb2ludC5jb250YWluZXIucHRyKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6Ok5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHBvaW50LmNvbnRhaW5lcik7Cit9CisKIC0g
KERPTU5vZGUgKilmaXJzdE5vZGUKIHsKLSAgICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPmZpcnN0
Tm9kZSgpKTsKKyAgICByZXR1cm4ga2l0KGZpcnN0Tm9kZUFmdGVyKG1ha2VTaW1wbGVSYW5nZSgq
Y29yZShzZWxmKSkuc3RhcnQpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQppbmRleCBjYWQzNTkxYmU2MzMyM2VlNjdhYTZh
ZjhkMTNlNDVmZDcxNjBkYWE4Li43MzhiNGY4ZjI0ODQ4NGZkMjc3Y2I3MjhjMjgwMjhkN2I5YzAw
ODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0
aW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9u
cy5tbQpAQCAtMTkxLDggKzE5MSw4IEBAIC0gKFdlYkFyY2hpdmUgKil3ZWJBcmNoaXZlCiAKIC0g
KE5TU3RyaW5nICopbWFya3VwU3RyaW5nCiB7Ci0gICAgYXV0byYgcmFuZ2UgPSAqY29yZShzZWxm
KTsKLSAgICByZXR1cm4gU3RyaW5nIHsgZG9jdW1lbnRUeXBlU3RyaW5nKHJhbmdlLm93bmVyRG9j
dW1lbnQoKSkgKyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtYWtlU2ltcGxl
UmFuZ2UocmFuZ2UpLCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpZZXMpIH07Cisg
ICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqY29yZShzZWxmKSk7CisgICAgcmV0dXJu
IFN0cmluZyB7IGRvY3VtZW50VHlwZVN0cmluZyhyYW5nZS5zdGFydC5kb2N1bWVudCgpKSArIHNl
cmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKHJhbmdlLCBudWxscHRyLCBBbm5vdGF0
ZUZvckludGVyY2hhbmdlOjpZZXMpIH07CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbQppbmRleCAxYmM2N2QzNjg0MjZjYzg5MWIzZTUw
NzllMmI2ZGYzMmExMDY4OTk4Li5mYjc0MjA4Zjk5OGMzY2FiNGY1YWY3ZWMzYzdhNDZjMjI5OTIy
MWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlBERlZp
ZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1t
CkBAIC02MzYsMjEgKzYzNiwxOCBAQCAtIChCT09MKW1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxp
Z2h0ZWQKICAgICByZXR1cm4gTk87CiB9CiAKLXN0YXRpYyBCT09MIGlzRnJhbWVJblJhbmdlKFdl
YkZyYW1lICpmcmFtZSwgRE9NUmFuZ2UgKnJhbmdlKQorc3RhdGljIGJvb2wgaXNGcmFtZUluUmFu
Z2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgcmFu
Z2UpCiB7Ci0gICAgQk9PTCBpblJhbmdlID0gTk87Ci0gICAgZm9yIChhdXRvKiBvd25lckVsZW1l
bnQgPSBjb3JlKGZyYW1lKS0+b3duZXJFbGVtZW50KCk7IG93bmVyRWxlbWVudDsgb3duZXJFbGVt
ZW50ID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCktPm93bmVyRWxlbWVudCgpKSB7
Ci0gICAgICAgIGlmICgmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZjb3JlKHJhbmdlKS0+
b3duZXJEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBpblJhbmdlID0gW3JhbmdlIGludGVyc2Vj
dHNOb2RlOmtpdChvd25lckVsZW1lbnQpXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgZm9yIChhdXRvKiBvd25lckVsZW1lbnQgPSBmcmFtZS5vd25lckVsZW1lbnQoKTsgb3du
ZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50KCkub3duZXJF
bGVtZW50KCkpIHsKKyAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3VtZW50KCkgPT0gJnJh
bmdlLnN0YXJ0LmRvY3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0cyhyYW5n
ZSwgKm93bmVyRWxlbWVudCk7CiAgICAgfQotICAgIHJldHVybiBpblJhbmdlOworICAgIHJldHVy
biBmYWxzZTsKIH0KIAogLSAoTlNVSW50ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0cmlu
ZyAqKXN0cmluZyBpbkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIG9wdGlvbnM6KFdlYkZpbmRP
cHRpb25zKW9wdGlvbnMgbGltaXQ6KE5TVUludGVnZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wp
bWFya01hdGNoZXMKIHsKLSAgICBpZiAocmFuZ2UgJiYgIWlzRnJhbWVJblJhbmdlKFtkYXRhU291
cmNlIHdlYkZyYW1lXSwgcmFuZ2UpKQorICAgIGlmIChyYW5nZSAmJiAhaXNGcmFtZUluUmFuZ2Uo
KmNvcmUoW2RhdGFTb3VyY2Ugd2ViRnJhbWVdKSwgbWFrZVNpbXBsZVJhbmdlKCpjb3JlKHJhbmdl
KSkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFBERlNlbGVjdGlvbiAqcHJldmlvdXNNYXRj
aCA9IG5pbDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCA3MTFkZTI1Y2YxNDU4MmMzMGNmMGYzOWRkMTQwNTg2MzlkNTZmNDUwLi5kOGFlZTNkZmE1
YzY5MzBmYzU2MWM1Njk5YjU2MWEwNDY0OTViOTg5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDgtMjcgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBhbG1vc3QgYWxs
IHRoZSByZW1haW5pbmcgdXNlcyBvZiBsaXZlIHJhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
RG9jdW1lbnRPcmRlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKTogQWRkZWQg
dGVzdCBjYXNlcyBmb3Igbm9kZSBvcmRlcmluZyBpbnZvbHZpbmcgbm9uLXVzZXItYWdlbnQKKyAg
ICAgICAgc2hhZG93IHRyZWUuIEFkZGVkIHRlc3QgY2FzZSB0aGF0IHNob3dlZCB0aGUgb2xkICJ1
c2Ugbm9kZSBvcmRlciBpZiBvZmZzZXRzIGFyZSBlcXVhbCIKKyAgICAgICAgcnVsZSBmb3IgYm91
bmRhcnkgcG9pbnQgb3JkZXJpbmcgd2FzIHdyb25nLiBBZGRlZCB0ZXN0cyBmb3IgaXNQb2ludElu
UmFuZ2UsCisgICAgICAgIGludGVyc2VjdHMsIGFuZCBjb250YWlucyBmdW5jdGlvbnMuCisKIDIw
MjAtMDgtMjcgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IEVuc3VyZSB0aGF0IGVtYWlsIG5vdGlmaWNhdGlvbnMgYXJlIG5vdCBzZW50IGZvciBvYnNvbGV0
ZSBhbmQgci0gcGF0Y2hlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0RvY3VtZW50T3JkZXIuY3BwCmluZGV4IDA3ZTY3ZDRjZDBjYWQ1YjY2YjliOTY3ZmM2OTU0
OTUwMDJiNzQzNjEuLmM4YjNjYmMwMGI3YjA0NmZkZmUyYjA1NmE1MzcyYzNhODljZTQ0M2UgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVy
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRG9jdW1lbnRPcmRl
ci5jcHAKQEAgLTI1LDEzICsyNSwxNCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNs
dWRlIDxXZWJDb3JlL0JvdW5kYXJ5UG9pbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQm9keUVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0hUTUxEaXZFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSHRtbEVsZW1lbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUZXh0QXJlYUVsZW1lbnQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1Bvc2l0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFkb3dSb290Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmg+CiAKICNkZWZpbmUgRVhQRUNUX0JPVEgoYSwgYiwgZm9yd2FyZCwg
cmV2ZXJzZWQpIGRvIHsgRVhQRUNUX1NUUkVRKHN0cmluZyhkb2N1bWVudE9yZGVyKGEsIGIpKSwg
Zm9yd2FyZCk7IEVYUEVDVF9TVFJFUShzdHJpbmcoZG9jdW1lbnRPcmRlcihiLCBhKSksIHJldmVy
c2VkKTsgfSB3aGlsZSAoMCkKQEAgLTM5LDYgKzQwLDE0IEBACiAjZGVmaW5lIEVYUEVDVF9MRVNT
KGEsIGIpIEVYUEVDVF9CT1RIKGEsIGIsICJsZXNzIiwgImdyZWF0ZXIiKQogI2RlZmluZSBFWFBF
Q1RfVU5PUkRFUkVEKGEsIGIpIEVYUEVDVF9CT1RIKGEsIGIsICJ1bm9yZGVyZWQiLCAidW5vcmRl
cmVkIikKIAorI2RlZmluZSBFWFBFQ1RfQ09OVEFJTlNfU0VMRihhKSBFWFBFQ1RfVFJVRShjb250
YWlucyhhLCBhKSkKKyNkZWZpbmUgRVhQRUNUX05FU1RFRChhLCBiKSBkbyB7IEVYUEVDVF9UUlVF
KGNvbnRhaW5zKGEsIGIpKTsgRVhQRUNUX0ZBTFNFKGNvbnRhaW5zKGIsIGEpKTsgfSB3aGlsZSAo
MCkKKyNkZWZpbmUgRVhQRUNUX05PVF9DT05UQUlORUQoYSwgYikgZG8geyBFWFBFQ1RfRkFMU0Uo
Y29udGFpbnMoYSwgYikpOyBFWFBFQ1RfRkFMU0UoY29udGFpbnMoYiwgYSkpOyB9IHdoaWxlICgw
KQorCisjZGVmaW5lIEVYUEVDVF9JTlRFUlNFQ1RTX1NFTEYoYSkgRVhQRUNUX1RSVUUoaW50ZXJz
ZWN0cyhhLCBhKSkKKyNkZWZpbmUgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKGEsIGIpIGRv
IHsgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhhLCBiKSk7IEVYUEVDVF9UUlVFKGludGVyc2VjdHMo
YiwgYSkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBFWFBFQ1RfTk9UX0lOVEVSU0VDVElOR19CT1RI
X1dBWVMoYSwgYikgZG8geyBFWFBFQ1RfRkFMU0UoaW50ZXJzZWN0cyhhLCBiKSk7IEVYUEVDVF9G
QUxTRShpbnRlcnNlY3RzKGIsIGEpKTsgfSB3aGlsZSAoMCkKKwogbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTE0MSw2ICsxNTAsMTEgQEAg
VEVTVChEb2N1bWVudE9yZGVyLCBOb2RlKQogCiAgICAgYXV0byYgaCA9ICpnLT5pbm5lclRleHRF
bGVtZW50KCk7CiAgICAgRVhQRUNUX0xFU1MoYm9keSwgaCk7CisKKyAgICBhdXRvJiBpID0gYS0+
YXR0YWNoU2hhZG93KHsgU2hhZG93Um9vdE1vZGU6OkNsb3NlZCB9KS5yZWxlYXNlUmV0dXJuVmFs
dWUoKTsKKyAgICBFWFBFQ1RfTEVTUyhib2R5LCBpKTsKKyAgICBFWFBFQ1RfTEVTUyhkLCBpKTsK
KyAgICBFWFBFQ1RfTEVTUyhpLCBiKTsKIH0KIAogVEVTVChEb2N1bWVudE9yZGVyLCBCb3VuZGFy
eVBvaW50T2Zmc2V0WmVybykKQEAgLTE5Nyw2ICsyMTEsNyBAQCBURVNUKERvY3VtZW50T3JkZXIs
IEJvdW5kYXJ5UG9pbnRPZmZzZXRzKQogCiAgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9p
bnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpOwogICAgIEVY
UEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDApLCBtYWtlQm91bmRhcnlQb2ludChk
b2N1bWVudCwgMSkpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEp
LCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpOwogCiAgICAgYXV0byBhID0gSFRNTERp
dkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgYm9keS5hcHBlbmRDaGlsZChhKTsKQEAg
LTQ1Miw0ICs0NjcsMjQ0IEBAIFRFU1QoRG9jdW1lbnRPcmRlciwgUG9zaXRpb25zKQogICAgIFRF
U1RfQUxMX1BPU0lUSU9OX1RZUEVTX0IobWFrZVBvc2l0aW9uQWZ0ZXIoZG9jdW1lbnQpLCBoLCAw
LCBncmVhdGVyKTsKIH0KIAorVEVTVChEb2N1bWVudE9yZGVyLCBJc1BvaW50SW5SYW5nZSkKK3sK
KyAgICBhdXRvIGRvY3VtZW50ID0gY3JlYXRlRG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVu
dEVsZW1lbnQgPSAqZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIGF1dG8mIGJvZHkg
PSAqZG9jdW1lbnQtPmJvZHkoKTsKKworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBvaW50
KGRvY3VtZW50LCAwKSkpOworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3Vt
ZW50LCAxKSkpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwg
MikpKTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSkpOworICAg
IEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEpKSk7CisgICAgRVhQRUNUX1RS
VUUoaXNQb2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50
KSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMikpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQb2lu
dEluUmFuZ2UobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwg
bWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAwKSksIG1ha2VCb3VuZGFyeVBvaW50
KGJvZHksIDApKSk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVNpbXBsZVJh
bmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9k
eSwgMCkpLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSkpOworCisgICAgYXV0byBhID0gSFRN
TERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJ
blJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3Vu
ZGFyeVBvaW50KGEsIDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJblJhbmdlKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkp
KTsKKworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludElu
UmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZUJvdW5k
YXJ5UG9pbnQoYSwgMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlU2lt
cGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2lu
dChhLCAwKSksIG1ha2VCb3VuZGFyeVBvaW50KGEsIDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKGlz
UG9pbnRJblJhbmdlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwg
MCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDApKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkp
KTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJv
dW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSksIG1h
a2VCb3VuZGFyeVBvaW50KGEsIDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJblJhbmdl
KG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSwgbWFrZUJvdW5kYXJ5
UG9pbnQoZG9jdW1lbnQsIDEpKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpKTsKKyAgICBFWFBF
Q1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQo
Ym9keSwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSksIG1ha2VCb3VuZGFyeVBv
aW50KGEsIDApKSk7CisKKyAgICBhdXRvIGIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KTsKKyAgICBib2R5LmFwcGVuZENoaWxkKGIpOworCisgICAgYXV0byBjID0gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5kQ2hpbGQoYyk7CisKKyAgICBh
dXRvIGQgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhLT5hcHBlbmRD
aGlsZChkKTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQp
OworICAgIGF1dG8gZiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGUt
PmFwcGVuZENoaWxkKGYpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50SW5SYW5nZShtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VCb3VuZGFyeVBvaW50KGYsIDApKSk7
CisKKyAgICBhdXRvIGcgPSBIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwor
ICAgIGF1dG8mIGggPSAqZy0+aW5uZXJUZXh0RWxlbWVudCgpOworICAgIGMtPmFwcGVuZENoaWxk
KGcpOworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhib2R5KSwgbWFrZUJvdW5kYXJ5UG9pbnQoaCwgMCkpKTsKK30KKworVEVTVChE
b2N1bWVudE9yZGVyLCBSYW5nZUNvbnRhaW5zUmFuZ2UpCit7CisgICAgYXV0byBkb2N1bWVudCA9
IGNyZWF0ZURvY3VtZW50KCk7CisgICAgYXV0byYgZG9jdW1lbnRFbGVtZW50ID0gKmRvY3VtZW50
LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBhdXRvJiBib2R5ID0gKmRvY3VtZW50LT5ib2R5KCk7
CisKKyAgICBFWFBFQ1RfQ09OVEFJTlNfU0VMRihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfQ09OVEFJTlNfU0VMRihtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50KSk7CisgICAgRVhQRUNUX0NPTlRBSU5TX1NF
TEYobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsKKworICAgIEVYUEVDVF9O
RVNURUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCkpOworICAgIEVYUEVDVF9ORVNU
RUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoYm9keSkpOworCisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
ZG9jdW1lbnRFbGVtZW50KSk7CisKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoYm9keSkpOworCisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9j
dW1lbnQsIDApKSk7CisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1l
bnQsIDEpKSk7CisgICAgRVhQRUNUX05PVF9DT05UQUlORUQobWFrZVJhbmdlU2VsZWN0aW5nTm9k
ZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRv
Y3VtZW50LCAyKSkpOworCisgICAgRVhQRUNUX05FU1RFRChtYWtlU2ltcGxlUmFuZ2UobWFrZUJv
dW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikp
LCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1Rf
Tk9UX0NPTlRBSU5FRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBt
YWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpLCBtYWtlQm91bmRh
cnlQb2ludChkb2N1bWVudCwgMikpKTsKKworICAgIEVYUEVDVF9OT1RfQ09OVEFJTkVEKG1ha2VT
aW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBv
aW50KGRvY3VtZW50RWxlbWVudCwgMCkpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
Ym9keSkpOworICAgIEVYUEVDVF9ORVNURUQobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBv
aW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpLCBtYWtlU2ltcGxl
UmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpKTsKKworICAgIGF1dG8gYSA9IEhUTUxE
aXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIEVYUEVDVF9OT1RfQ09OVEFJTkVEKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhhKSk7CisKKyAgICBib2R5LmFwcGVuZENoaWxkKGEpOworCisgICAgYXV0
byBiID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRD
aGlsZChiKTsKKworICAgIGF1dG8gYyA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQp
OworICAgIGItPmFwcGVuZENoaWxkKGMpOworCisgICAgYXV0byBkID0gSFRNTERpdkVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYS0+YXBwZW5kQ2hpbGQoZCk7CisKKyAgICBhdXRvIGUg
PSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2
RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBF
WFBFQ1RfTk9UX0NPTlRBSU5FRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSks
IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhmKSk7CisKKyAgICBhdXRvIGcgPSBIVE1M
VGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8mIGggPSAqZy0+aW5u
ZXJUZXh0RWxlbWVudCgpOworICAgIGMtPmFwcGVuZENoaWxkKGcpOworICAgIEVYUEVDVF9ORVNU
RUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoaCkpOworfQorCitURVNUKERvY3VtZW50T3JkZXIsIFJhbmdlSW50ZXJz
ZWN0c1JhbmdlKQoreworICAgIGF1dG8gZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOworICAg
IGF1dG8mIGRvY3VtZW50RWxlbWVudCA9ICpkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Cisg
ICAgYXV0byYgYm9keSA9ICpkb2N1bWVudC0+Ym9keSgpOworCisgICAgRVhQRUNUX0lOVEVSU0VD
VFNfU0VMRihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpKTsKKyAgICBF
WFBFQ1RfSU5URVJTRUNUU19TRUxGKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1
bWVudEVsZW1lbnQpKTsKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19TRUxGKG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhib2R5KSk7CisKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dB
WVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCkpOworICAgIEVYUEVDVF9JTlRFUlNF
Q1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSkpOworICAgIEVYUEVDVF9JTlRFUlNF
Q1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVt
ZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsKKworICAgIEVYUEVD
VF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9j
dW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50KSk7
CisKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dBWVMobWFrZVJhbmdlU2VsZWN0aW5nTm9k
ZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cyhib2R5KSk7CisKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dBWVMobWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFy
eVBvaW50KGRvY3VtZW50LCAwKSkpOworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyht
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2Uo
bWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpKSk7CisgICAgRVhQRUNUX05PVF9JTlRFUlNF
Q1RJTkdfQk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCks
IG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikpKTsKKworICAg
IEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5
UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikpLCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfSU5URVJT
RUNUU19CT1RIX1dBWVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwg
bWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSwgbWFrZUJvdW5k
YXJ5UG9pbnQoZG9jdW1lbnQsIDIpKSk7CisKKyAgICBFWFBFQ1RfTk9UX0lOVEVSU0VDVElOR19C
T1RIX1dBWVMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwg
bWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAwKSksIG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhib2R5KSk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1h
a2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFy
eVBvaW50KGJvZHksIDApKSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGJvZHks
IDApKSk7CisKKyAgICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
KyAgICBFWFBFQ1RfTk9UX0lOVEVSU0VDVElOR19CT1RIX1dBWVMobWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGEp
KTsKKworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisKKyAgICBhdXRvIGIgPSBIVE1MRGl2RWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBib2R5LmFwcGVuZENoaWxkKGIpOworCisgICAg
YXV0byBjID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5k
Q2hpbGQoYyk7CisKKyAgICBhdXRvIGQgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KTsKKyAgICBhLT5hcHBlbmRDaGlsZChkKTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8gZiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUo
ZG9jdW1lbnQpOworICAgIGUtPmFwcGVuZENoaWxkKGYpOworICAgIEVYUEVDVF9OT1RfSU5URVJT
RUNUSU5HX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhmKSk7CisKKyAgICBhdXRvIGcgPSBIVE1MVGV4
dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8mIGggPSAqZy0+aW5uZXJU
ZXh0RWxlbWVudCgpOworICAgIGMtPmFwcGVuZENoaWxkKGcpOworICAgIEVYUEVDVF9JTlRFUlNF
Q1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhoKSk7Cit9CisKK1RFU1QoRG9jdW1lbnRPcmRlciwg
UmFuZ2VDb250YWluc05vZGUpCit7CisgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50
KCk7CisgICAgYXV0byYgZG9jdW1lbnRFbGVtZW50ID0gKmRvY3VtZW50LT5kb2N1bWVudEVsZW1l
bnQoKTsKKyAgICBhdXRvJiBib2R5ID0gKmRvY3VtZW50LT5ib2R5KCk7CisKKyAgICBFWFBFQ1Rf
VFJVRShjb250YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBk
b2N1bWVudEVsZW1lbnQpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250YWlucyhtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBib2R5KSk7CisgICAgRVhQRUNUX1RSVUUoY29u
dGFpbnMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCksIGJv
ZHkpKTsKKworICAgIEVYUEVDVF9GQUxTRShjb250YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoZG9jdW1lbnQpLCBkb2N1bWVudCkpOworICAgIEVYUEVDVF9GQUxTRShjb250YWlu
cyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91
bmRhcnlQb2ludChkb2N1bWVudCwgMikpLCBkb2N1bWVudCkpOworICAgIEVYUEVDVF9GQUxTRShj
b250YWlucyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBt
YWtlQm91bmRhcnlQb2ludChkb2N1bWVudEVsZW1lbnQsIDApKSwgYm9keSkpOworICAgIEVYUEVD
VF9GQUxTRShjb250YWlucyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1l
bnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSksIGJvZHkpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoY29udGFpbnMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50
LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMSkpLCBib2R5KSk7CisgICAgRVhQRUNUX1RS
VUUoY29udGFpbnMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAw
KSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAxKSksIGJvZHkpKTsKKworICAg
IGF1dG8gYSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIEVYUEVDVF9G
QUxTRShjb250YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBh
KSk7CisKKyAgICBib2R5LmFwcGVuZENoaWxkKGEpOworCisgICAgYXV0byBiID0gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChiKTsKKworICAg
IGF1dG8gYyA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGItPmFwcGVu
ZENoaWxkKGMpOworCisgICAgYXV0byBkID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVu
dCk7CisgICAgYS0+YXBwZW5kQ2hpbGQoZCk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKKyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29u
dGFpbnMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBmKSk7CisKKyAgICBh
dXRvIGcgPSBIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8m
IGggPSAqZy0+aW5uZXJUZXh0RWxlbWVudCgpOworICAgIGMtPmFwcGVuZENoaWxkKGcpOworICAg
IEVYUEVDVF9UUlVFKGNvbnRhaW5zKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5
KSwgaCkpOworfQorCitURVNUKERvY3VtZW50T3JkZXIsIFJhbmdlSW50ZXJzZWN0c05vZGUpCit7
CisgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CisgICAgYXV0byYgZG9jdW1l
bnRFbGVtZW50ID0gKmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBhdXRvJiBib2R5
ID0gKmRvY3VtZW50LT5ib2R5KCk7CisKKyAgICBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGRvY3VtZW50RWxlbWVudCkpOwor
ICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KGRvY3VtZW50KSwgYm9keSkpOworICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCksIGJvZHkpKTsKKworICAgIEVY
UEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3Vt
ZW50KSwgZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKG1ha2VTaW1wbGVS
YW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRv
Y3VtZW50LCAyKSksIGRvY3VtZW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKGludGVyc2VjdHMobWFr
ZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5
UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAwKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaW50
ZXJzZWN0cyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50
LCAxKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpKSwgYm9keSkpOworICAgIEVYUEVD
VF9UUlVFKGludGVyc2VjdHMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3Vt
ZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpLCBib2R5KSk7CisgICAgRVhQRUNU
X1RSVUUoaW50ZXJzZWN0cyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1l
bnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSksIGJvZHkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShpbnRlcnNlY3RzKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVu
dCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50RWxlbWVudCwgMSkpLCBib2R5KSk7CisK
KyAgICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBFWFBF
Q1RfRkFMU0UoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1l
bnQpLCBhKSk7CisKKyAgICBib2R5LmFwcGVuZENoaWxkKGEpOworCisgICAgYXV0byBiID0gSFRN
TERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChiKTsK
KworICAgIGF1dG8gYyA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGIt
PmFwcGVuZENoaWxkKGMpOworCisgICAgYXV0byBkID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShk
b2N1bWVudCk7CisgICAgYS0+YXBwZW5kQ2hpbGQoZCk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2
RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfRkFM
U0UoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIGUpKTsK
KyAgICBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cyhmKSwgZSkpOworICAgIEVYUEVDVF9GQUxTRShpbnRlcnNlY3RzKG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhib2R5KSwgZikpOworCisgICAgYXV0byBnID0gSFRNTFRleHRBcmVhRWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvJiBoID0gKmctPmlubmVyVGV4dEVsZW1l
bnQoKTsKKyAgICBjLT5hcHBlbmRDaGlsZChnKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRlcnNlY3Rz
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgaCkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407478</attachid>
            <date>2020-08-28 10:16:29 -0700</date>
            <delta_ts>2020-08-28 12:23:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215755-20200828101628.patch</filename>
            <type>text/plain</type>
            <size>168312</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMxZjViYzkyNTFjNDRm
ZTM5OTQ1YmJlNjkzMzUzNTNhMGFiZmJmZC4uNmZjNDQyZjExYTQ1MzFjN2Y1YzBkZjZjOTg2MWQ5
ZTI4ZWVkMWM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NiBAQAorMjAyMC0wOC0yOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwg
dGhlIHJlbWFpbmluZyB1c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcik6IFVzZSBkb2N1
bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1Jh
bmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNsb3Nlc3RUb1Jhbmdl
KTogVXNlIGNoYXJhY3RlckNvdW50LiBBbHNvIHJlbW92ZWQgdW5ubmVjZXNzYXJ5IGFzc2VydGlv
bnMKKyAgICAgICAgYW5kIHNwZWNpYWwgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbiBjb25z
dCk6IFVzZSBkb2N1bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOiBVc2UgaW50
ZXJzZWN0cy4KKyAgICAgICAgQWxzbyB1c2UgZmlyc3RSYW5nZSBpbnN0ZWFkIG9mIHRvTm9ybWFs
aXplZFJhbmdlLgorCisgICAgICAgICogZG9tL0VsZW1lbnQuaDogRXhwb3J0IGF0dGFjaFNoYWRv
dyBzbyBpdCBjYW4gYmUgdXNlZCBpbiB1bml0IHRlc3RzLgorCisgICAgICAgICogZG9tL05vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVwdGhJblRyZWUpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmRlcHRoSW5Db21wb3NlZFRyZWUpOiBSZW5hbWVkIGFuZCBjaGFuZ2VkIHRvIHVzZSBw
YXJlbnRJbkNvbXBvc2VkVHJlZQorICAgICAgICBpbnN0ZWFkIG9mIHBhcmVudE9yU2hhZG93SG9z
dE5vZGUgdG8gaGFuZGxlIGNhc2VzIGludm9sdmluZyBhc3NpZ25lZCBzbG90cyBjb3JyZWN0bHku
CisgICAgICAgIChXZWJDb3JlOjpjb21tb25JbmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcmVuKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc1NpYmxpbmdTdWJzZXF1ZW50KTogQWRkZWQgYXNz
ZXJ0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OmRvY3VtZW50T3JkZXIpOiBBZGQgbG9naWMgc28g
c2hhZG93IHJvb3RzIGFyZSBvcmRlcmVkIGJlZm9yZSB0aGUKKyAgICAgICAgb3RoZXIgY2hpbGRy
ZW4gb2YgdGhlaXIgaG9zdHMgaW4gY2FzZXMgdGhhdCBkb24ndCBpbnZvbHZlIGFzc2lnbmVkIHNs
b3RzLgorICAgICAgICBXaXRob3V0IHRoaXMgdGhlIHJlc3VsdHMgd291bGQgYmUgaW5jb25zaXN0
ZW50IGJhc2VkIG9uIHRoZSBvcmRlciBvZiB0aGUKKyAgICAgICAgYXJndW1lbnRzIHBhc3NlZCB0
byBkb2N1bWVudE9yZGVyLgorCisgICAgICAgICogZG9tL05vZGUuaDogQWRkZWQgaXNfbmVxLCBp
c19sdGVxLCBhbmQgaXNfZ3RlcSBmb3IgdXNlIHdpdGggUGFydGlhbE9yZGVyaW5nLAorICAgICAg
ICBtYXRjaGluZyB0aGUgbmFtZXMgYW5kIGJlaGF2aW9yIGZyb20gQysrMjAuCisKKyAgICAgICAg
KiBkb20vUmFuZ2UuY3BwOiBSZW1vdmVkIHVudXNlZCBDb29yZGluYXRlU3BhY2UuCisgICAgICAg
IChXZWJDb3JlOjpSYW5nZTo6UmFuZ2UpOiBVcGRhdGVkIHNpbmNlIFJhbmdlQm91bmRhcnlQb2lu
dCBub3cgdXNlcyByZWZlcmVuY2VzLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnVwZGF0ZURv
Y3VtZW50KTogUmVuYW1lZCBmcm9tIHNldERvY3VtZW50IGFuZCBjaGFuZ2VkIHNvIHRoYXQKKyAg
ICAgICAgaXQgbWFpbnRhaW5zIHRoZSBpbnZhcmlhbnRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBj
YWxsZXIgcGFzcyBhbnkgYXJndW1lbnRzLgorICAgICAgICBBbHNvIHVwZGF0ZWQgZm9yIFJhbmdl
Qm91bmRhcnlQb2ludCBhbm1lIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrRm9y
RGlmZmVyZW50Um9vdENvbnRhaW5lcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6c2V0U3RhcnQpOiBVcGRhdGVkIGZvciBjaGVja05vZGVPZmZzZXRQYWlyIG5hbWUgY2hhbmdl
LgorICAgICAgICBSZW1vdmVkIHRvby1jb21wbGV4IGNvZGUgZm9yIG1vdmluZyBiZXR3ZWVuIGRv
Y3VtZW50cy4gVXNlIGRvY3VtZW50T3JkZXIKKyAgICAgICAgaW5zdGVhZCBvZiBjaGVja0ZvckRp
ZmZlcmVudFJvb3RDb250YWluZXIgdG8gY2hlY2sgZm9yIHN0YXJ0L2VuZCB0aGF0IGhhdmUKKyAg
ICAgICAgaW5jb3JyZWN0IG9yZGVyIG9yIG5vIGNvbW1vbiBhbmNlc3Rvci4gVXNlIHVwZGF0ZURv
Y3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmlzUG9pbnRJblJhbmdlKTogVXNlIGlzUG9pbnRJblJhbmdlIHRo
YXQgdGFrZXMgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgQWxzbyB1cGRhdGVkIGZvciBjaGVja05v
ZGVPZmZzZXRQYWlyIG5hbWUgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBh
cmVQb2ludCBjb25zdCk6IFVzZSBkb2N1bWVudE9yZGVyLiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlOjpjb21wYXJlTm9kZSBjb25zdCk6IFVzZSBkb2N1bWVudE9yZGVyLgorICAgICAg
ICAoV2ViQ29yZTo6dG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjb21w
YXJlQm91bmRhcnlQb2ludHMgY29uc3QpOiBEZWxldGVkIG1vcmUgb3ZlcmxvYWRzLgorICAgICAg
ICBLZXB0IG9ubHkgdGhlIG9uZSBuZWVkZWQgZm9yIGJpbmRpbmdzLCBhbmQgcmVuYW1lZCBpdCBm
cm9tCisgICAgICAgIGNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzLiBBbHNvIGZpeGVk
IHRoZSBpbXBsZW1lbnRhdGluIHRvIGJlIHNpbXBsZXIsCisgICAgICAgIHVzZSBkb2N1bWVudE9y
ZGVyLCBhbmQgbWF0Y2ggdGhlIERPTSBzcGVjaWZpY2F0aW9uIG1vcmUgY2xvc2VseSAod2l0aG91
dCBhCisgICAgICAgIGJlaGF2aW9yIGNoYW5nZSkuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
Ym91bmRhcnlQb2ludHNWYWxpZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
YW5nZTo6aW50ZXJzZWN0c05vZGUgY29uc3QpOiBVc2UgaW50ZXJzZWN0cyBmcm9tIFNpbXBsZVJh
bmdlLgorICAgICAgICBBbHNvIGRvbid0IHJhaXNlIGV4Y2VwdGlvbnMuCisgICAgICAgIChXZWJD
b3JlOjpsZW5ndGhPZkNvbnRlbnRzSW5Ob2RlKTogRGVsZXRlZC4gVGhpcyBnaXZlcyB0aGUgc2Ft
ZSByZXN1bHQgYXMKKyAgICAgICAgTm9kZTo6bGVuZ3RoLCBidXQgbGVzcyBlZmZpY2llbnRseS4K
KyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwcm9jZXNzQ29udGVudHMpOiBVcGRhdGVkIHNpbmNl
IFJhbmdlQm91bmRhcnlQb2ludCBub3cKKyAgICAgICAgdXNlcyByZWZlcmVuY2VzLgorICAgICAg
ICAoV2ViQ29yZTo6cHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMpOiBSZW1vdmVkIG9ic29s
ZXRlIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6dG9TdHJpbmcgY29uc3QpOiBV
c2UgaW50ZXJzZWN0aW5nTm9kZXMgYW5kCisgICAgICAgIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5n
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjpkZXRhY2gpOiBNb3ZlZCB0byB0aGUgaGVhZGVyLgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrTm9kZU9mZnNldFBhaXIgY29uc3QpOiBSbmVhbWVkIGZy
b20gY2hlY2tOb2RlV09mZnNldC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjbG9uZVJhbmdl
KTogVXNlIG1fb3duZXJEb2N1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzZXRTdGFy
dEFmdGVyKTogVHdlYWtlZCBjb2Rpbmcgc3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
c2V0RW5kQmVmb3JlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kQWZ0
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzZWxlY3ROb2RlKTogRGl0dG8u
IEFsc28gcmVtb3ZlZCB1bm5lY2Vzc2FyeSBjb2RlIHRvCisgICAgICAgIGNhbGwgc2V0RG9jdW1l
bnQsIHNpbmNlIHNldFN0YXJ0IHRha2VzIGNhcmUgb2YgdGhhdC4KKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpzZWxlY3ROb2RlQ29udGVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjpzZXRTdGFydEJlZm9yZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmZp
cnN0Tm9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cGFzdExh
c3ROb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjb250YWlu
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcmVSYW5nZXNFcXVhbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyYW5nZXNPdmVybGFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmJvdW5kYXJ5Tm9kZUNoaWxkcmVuQ2hhbmdlZCk6IFR3ZWFrZWQgY29kaW5n
IHN0eWxlIGFuZCB1cGRhdGVkCisgICAgICAgIHNpbmNlIFJhbmdlQm91bmRhcnlQb2ludCB1c2Vz
IGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVDaGlsZHJlbkNoYW5n
ZWQpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2Rl
Q2hpbGRyZW5XaWxsQmVSZW1vdmVkKTogUmVtb3ZlZCB1bm5lZWRlZCBjb2RlCisgICAgICAgIHRv
IGhhbmRsZSBjYXNlIHdoZXJlIG9uZSBvZiB0aGUgY2hpbGRyZW4gaXMgdGhlIGNoaWxkQmVmb3Jl
IGJ1dCB0aGUKKyAgICAgICAgbm9kZSBpcyBub3QgaW5zaWRlIHRoZSBjb250YWluZXIgLS0gdGhh
dCBjYXNlIGRvZXNuJ3QgZXhpc3QuIFVzZQorICAgICAgICBOb2RlOjpjb250YWlucy4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjpub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKTogVXNlIG1fb3du
ZXJEb2N1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQp
OiBTaW1wbGlmeSBsb2dpYyB1c2luZworICAgICAgICBSYW5nZTo6Y29udGFpbnMuCisgICAgICAg
IChXZWJDb3JlOjpSYW5nZTo6bm9kZVdpbGxCZVJlbW92ZWQpOiBVc2UgbV9vd25lckRvY3VtZW50
LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnBhcmVudGxlc3NOb2RlTW92ZWRUb05ld0RvY3Vt
ZW50QWZmZWN0c1JhbmdlKToKKyAgICAgICAgVXBkYXRlZCBzaW5jZSBSYW5nZUJvdW5kYXJ5UG9p
bnQgdXNlcyBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dEluc2Vy
dGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyeVRleHRSZW1vdmVkKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyeVRleHROb2Rlc01lcmdlZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlUZXh0Tm9kZXNTcGxpdCk6IERpdHRvLgorICAgICAg
ICAoc2hvd1RyZWUpOiBSZW1vdmVkIGNhbGwgdG8gYm91bmRhcnlQb2ludHNWYWxpZC4gVGhhdCdz
IGNoZWNraW5nIHNvbWV0aGluZworICAgICAgICB0aGUgY2xhc3MgYWxyZWFkeSB0cmVhdHMgYXMg
YW4gaW52YXJpYW50LCBzbyBpdCdzIG9ic29sZXRlIGNvZGUgbGVmdCBmcm9tCisgICAgICAgIGxv
bmcgYWdvIHdoZW4gd2UgZGlkbid0IGhhdmUgdGhhdCBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuCisK
KyAgICAgICAgKiBkb20vUmFuZ2UuaDogUmVvcmdhbml6ZWQgdGhlIGhlYWRlciB0byBtYXRjaCB0
aGUgSURMIGZpbGUuCisgICAgICAgIFJlbW92ZWQgb3duZXJEb2N1bWVudCwgY29tcGFyZUJvdW5k
YXJ5UG9pbnRzIG92ZXJsb2FkcyBvdGhlciB0aGFuIHRoZSBvbmUKKyAgICAgICAgdXNlZCBmcm9t
IGJpbmRpbmdzLCBmaXJzdE5vZGUsIHBhc3RMYXN0Tm9kZSwgdGV4dCwgY29udGFpbnMsIGFyZVJh
bmdlc0VxdWFsLAorICAgICAgICBhbmQgcmFuZ2VzT3ZlcmxhcC4gQWxzbyB1cGRhdGVkIHNpbmNl
IFJhbmdlQm91bmRhcnlQb2ludDo6Y29udGFpbmVyIGlzIG5vdworICAgICAgICBhIHJlZmVyZW5j
ZS4gTW92ZWQgZGV0YWNoIGZ1bmN0aW9uIGhlcmUgdG8gdGhlIGhlYWRlciBhcyBhbiBlbXB0eSBp
bmxpbmUuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuaWRsOiBDaGFuZ2VkIHN0YXJ0L2VuZE9mZnNl
dCB0byB1bnNpZ25lZC4gU3RvcHBlZCB1c2luZyB0aGUKKyAgICAgICAgbmFtZSBjb21wYXJlQm91
bmRhcnlQb2ludGVyc0ZvckJpbmRpbmdzLiBVcGRhdGVkIGludGVyc2VjdHNOb2RlIHRvIG5vdAor
ICAgICAgICB0aHJvdyBleGNlcHRpb25zIGFzIGNhbGxlZCBmb3IgaW4gdGhlIERPTSBzcGVjaWZp
Y2F0aW9uLiBUd2Vha2VkIGNvbW1lbnRzLgorCisgICAgICAgICogZG9tL1JhbmdlQm91bmRhcnlQ
b2ludC5oOiBDaGFuZ2VkIGNvbnN0cnVjdG9yIGFyZ3VtZW50IHRvIGEgcmVmZXJlbmNlLgorICAg
ICAgICBSZW5hbWVkIHNldFRvQmVmb3JlQ2hpbGQsIHNldFRvQWZ0ZXJDaGlsZCwgc2V0VG9TdGFy
dE9mTm9kZSwgYW5kIHNldFRvRW5kT2ZOb2RlCisgICAgICAgIHRvIHNldFRvQmVmb3JlTm9kZSwg
c2V0VG9BZnRlck5vZGUsIHNldFRvQmVmb3JlQ29udGVudHMsIHNldFRvQWZ0ZXJDb250ZW50cy4K
KyAgICAgICAgTWVyZ2VkIGVuc3VyZU9mZnNldElzVmFsaWQgaW50byB0aGUgb2Zmc2V0IGZ1bmN0
aW9uLiBDaGFuZ2VkIG1fY29udGFpbmVyTm9kZQorICAgICAgICBpbnRvIGEgUmVmPD4gYW5kIHJl
bmFtZWQgaXQgbV9jb250YWluZXIuIFJlbW92ZWQgY2xlYXIuCisKKyAgICAgICAgKiBkb20vU2lt
cGxlUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNPZmZzZXRCZWZvcmVDaGlsZCk6IEFk
ZCBsb2dpYyBzbyBzaGFkb3cgcm9vdHMgYXJlIG9yZGVyZWQgYWZ0ZXIgb2Zmc2V0CisgICAgICAg
IDAgYnV0IGJlZm9yZSBvZmZzZXQgMSBpbiB0aGVpciBob3N0cyBpbiBjYXNlcyB0aGF0IGRvbid0
IGludm9sdmUgYXNzaWduZWQgc2xvdHMuCisgICAgICAgIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IGNo
b2ljZSwgYnV0IGlzIGNvbnNpc3RlbnQgd2l0aCBob3cgd2Ugb3JkZXIgc2hhZG93IHJvb3RzIGJl
Zm9yZQorICAgICAgICBvdGhlciBjaGlsZCBub2Rlcy4KKyAgICAgICAgKFdlYkNvcmU6OmRvY3Vt
ZW50T3JkZXIpOiBVc2UgcGFyZW50SW5Db21wb3NlZFRyZWUgaW5zdGVhZCBvZiBwYXJlbnRPclNo
YWRvd0hvc3ROb2RlCisgICAgICAgIHRvIGhhbmRsZSBjYXNlcyBpbnZvbHZpbmcgYXNzaWduZWQg
c2xvdHMgY29ycmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6aXNQb2ludEluUmFuZ2UpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmRvY3VtZW50T3JkZXIpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRhaW5zKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjppbnRlcnNlY3RzKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp1bmlvblJhbmdlcyk6IEFkZGVkLgorICAgICAgICAq
IGRvbS9TaW1wbGVSYW5nZS5oOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIGVkaXRp
bmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlUG9zaXRpb25zKTogVXNl
IGRvY3VtZW50T3JkZXIuCisgICAgICAgIChXZWJDb3JlOjppc05vZGVWaXNpYmx5Q29udGFpbmVk
V2l0aGluKTogVXNlIGNvbnRhaW5zLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmlzRnJhbWVJblJhbmdlKTogVXNlIGludGVyc2VjdHMuCisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKTogVXNl
IGludGVyc2VjdHMuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dW5pb25SYW5nZXMpOiBNb3ZlZCB0byBTaW1wbGVSYW5nZS5jcHAsIHdo
ZXJlIGl0J3Mgbm93CisgICAgICAgIGltcGxlbWVudGVkIHVzaW5nIGRvY3VtZW50T3JkZXIuCisK
KyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpyZXNwb25kVG9Ob2RlTW9kaWZpY2F0aW9uKTogVXNlIGludGVyc2Vj
dHMuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tOgor
ICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9uQ29udGFpbnNQb3NpdGlvbik6IFVzZSBpc1BvaW50
SW5SYW5nZS4KKworICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVNlbGVjdGlvbjo6ZXh0ZW5kKTogVXNlIG1ha2VSZWZQdHIgYW5kIE5vZGU6Omxl
bmd0aAorICAgICAgICB0byBzdHJlYW1saW5lIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdCk6IFVzZSBtYWtlQm91bmRhcnlQb2lu
dEJlZm9yZU5vZGUKKyAgICAgICAgYW5kIHJlbW92ZSB1bm5lZWRlZCBudWxsIGNoZWNrIHRoYXQn
cyBhbHJlYWR5IGNvdmVyZWQgYWJvdmUuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246
OmFkZFJhbmdlKTogVXNlIGludGVyc2VjdHMgYW5kIHVuaW9uUmFuZ2VzLgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU2VsZWN0aW9uOjpjb250YWluc05vZGUgY29uc3QpOiBVc2UgaW50ZXJzZWN0cyBh
bmQgY29udGFpbnMuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmlzVmFsaWRGb3JQ
b3NpdGlvbiBjb25zdCk6IFVzZSBib29sZWFuIGxvZ2ljLgorCisgICAgICAgICogcGFnZS9EcmFn
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ2dh
YmxlRWxlbWVudCBjb25zdCk6IFVzZSBjb250YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdD
b250cm9sbGVyOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KTogVXNlIGlu
dGVyc2VjdHMuCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudCk6IFVzZSBjb250YWlucy4K
KworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpmaW5k
VGV4dE1hdGNoZXMpOiBVc2UgZG9jdW1lbnRPcmRlci4KKworICAgICAgICAqIHBhZ2UvbWFjL1Nl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1Nl
bGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjb250YWlucy4KKworICAgICAgICAqIHRl
c3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cmFuZ2VB
c1RleHQpOiBVc2UgcGxhaW5UZXh0LgorICAgICAgICAoV2ViQ29yZTo6am9pbik6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyYW5nZUFzVGV4dFVzaW5nQmFja3dhcmRzVGV4
dEl0ZXJhdG9yKTogVXNlIGEgdmVjdG9yCisgICAgICAgIHRoYXQgd2UgcmV2ZXJzZSBhbmQgam9p
biByYXRoZXIgdGhhbiBpbnNlcnRpbmcgYXQgdGhlIHN0YXJ0IG9mIGEgc3RyaW5nLgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdWJyYW5nZSk6IEFkZGVkIGEgY2FsbCB0byB1cGRhdGVM
YXlvdXQgc2luY2UgdGV4dCBpdGVyYXRvcgorICAgICAgICBmdW5jdGlvbnMgZGVwZW5kIG9uIHRo
ZSBzdGF0ZSBvZiB0aGUgcmVuZGVyIHRyZWUuIFJlYWxpemVkIHRoaXMgd2FzIHRoZW9yZXRpY2Fs
bHkKKyAgICAgICAgbmVlZGVkIGJlY2F1c2Ugb2YgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dC4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cmFuZ2VPZlN0cmluZ05lYXJMb2NhdGlvbik6IERp
dHRvLgorCiAyMDIwLTA4LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJlbW92ZSBhZG9wdGVkIG5vZGUgZnJvbSBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCAxY2NkODYxZGJiOWFiZTZhNzk3YTZiMTUyN2E2YjM4YmMxNDRiNmE2Li4z
MjQxNjZmZTMwY2Y1YzQ4NWFiZWZjYjkzOTkwNjVlNGMwZjAxYmNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDM1IEBACisyMDIwLTA4LTI4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZW1vdmUgYWxtb3N0IGFsbCB0aGUgcmVtYWluaW5nIHVzZXMgb2YgbGl2ZSByYW5n
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTc1
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZS5jcHA6Cisg
ICAgICAgICh3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfYm91bmRhcnlfcG9pbnRzKTogVXBkYXRl
IGZvciByZW5hbWUgb2YKKyAgICAgICAgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3Mu
CisgICAgICAgICh3ZWJraXRfZG9tX3JhbmdlX2ludGVyc2VjdHNfbm9kZSk6IFJlbW92ZWQgZXhj
ZXB0aW9uIGhhbmRsaW5nLgorICAgICAgICAod2Via2l0X2RvbV9yYW5nZV9nZXRfdGV4dCk6IFVz
ZSBwbGFpblRleHQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9t
YWMvV0tET01SYW5nZS5tbToKKyAgICAgICAgKC1bV0tET01SYW5nZSBpbml0V2l0aERvY3VtZW50
Ol0pOiBUaWdodGVuZWQgdXAgaW50byBhIG9uZS1saW5lci4KKyAgICAgICAgKC1bV0tET01SYW5n
ZSB0ZXh0XSk6IFVzZSBwbGFpblRleHQuCisgICAgICAgICgtW1dLRE9NUmFuZ2UgdGV4dFJlY3Rz
XSk6IFN0b3BwZWQgdXNpbmcgUmFuZ2U6Om93bmVyRG9jdW1lbnQuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6ZG9jdW1lbnQpOiBT
dG9wcGVkIHVzaW5nCisgICAgICAgIFJhbmdlOjpvd25lckRvY3VtZW50LgorICAgICAgICAoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpib3VuZGluZ1JlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzIGNvbnN0KToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6dGV4dCBjb25zdCk6IFVzZSBwbGFpblRleHQu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUgY29uc3QpOiBV
c2UgY29udGFpbnMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdD
b250ZXh0KTogVXNlIGludGVyc2VjdHMuCisKIDIwMjAtMDgtMjggIFBlciBBcm5lIFZvbGxhbiAg
PHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gRml4IGlva2l0LWdldC1wcm9w
ZXJ0aWVzIHNhbmRib3ggdmlvbGF0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4
IGU3ZWJlNjk3ZTE1N2Q5NjA5YzQ0M2ViN2NlZjAwOGYxNWYwNTNhMzMuLjVjNzM5ZWQ3YjA1NTM1
M2UxMjk3ZTE0MTBlNDBlOGJlZDE3NzlkODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOC0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwgdGhlIHJlbWFpbmluZyB1c2VzIG9mIGxp
dmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIERPTS9ET01SYW5nZS5tbToKKyAgICAgICAgKC1bRE9NUmFuZ2UgdGV4dF0pOiBVc2UgcGxh
aW5UZXh0LgorICAgICAgICAoLVtET01SYW5nZSBjb21wYXJlQm91bmRhcnlQb2ludHM6c291cmNl
UmFuZ2U6XSk6IFVwZGF0ZSBmb3IgcmVuYW1lIG9mCisgICAgICAgIGNvbXBhcmVCb3VuZGFyeVBv
aW50c0ZvckJpbmRpbmdzLgorICAgICAgICAoLVtET01SYW5nZSBpbnRlcnNlY3RzTm9kZTpdKTog
UmVtb3ZlZCByYWlzZU9uRE9NRXJyb3IuCisKKyAgICAgICAgKiBET00vRE9NVUlLaXRFeHRlbnNp
b25zLm1tOgorICAgICAgICAoZmlyc3ROb2RlQWZ0ZXIpOiBNb3ZlZCBSYW5nZTo6Zmlyc3ROb2Rl
IGhlcmUgc2luY2UgaXQncyB0aGUgb25seSByZW1haW5pbmcgY2FsbGVyOworICAgICAgICBtaWdo
dCBuZWVkIHRvIGtlZXAgbGVnYWN5IGJlaGF2aW9yIGRlcGVuZGluZyBvbiBob3cgdGhpcyBpcyB1
c2VkIGJ5IFVJS2l0LgorICAgICAgICAoLVtET01SYW5nZSBmaXJzdE5vZGVdKTogQ2FsbCBmaXJz
dE5vZGVBZnRlci4KKworICAgICAgICAqIERPTS9XZWJET01PcGVyYXRpb25zLm1tOgorICAgICAg
ICAoLVtET01SYW5nZSBtYXJrdXBTdHJpbmddKTogU3RvcCB1c2luZyBSYW5nZTo6b3duZXJEb2N1
bWVudC4KKwogMjAyMC0wOC0yNyAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgW2lPU10gcHJvdmlkZSBhIHdheSB0byBnZXQgcHJldmlvdXNseSBpbnNlcnRlZCBh
bHRlcm5hdGl2ZXMgZm9yIHRoZSBzZWxlY3RlZCB0ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCA2MzhiYWYwYmM3OTg0ZDk3OTliMjgy
Y2JiYWU4Y2ExNzYxMzZmY2NmLi4xZTEwNTlkZTFlMjAxNWM1MzQwZDIzMTViYmE1NjA0OWIzMDEw
N2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAKQEAgLTIwMzYsNiArMjAzNiw4IEBAIHN0YXRpYyBib29sIGlzUmVwbGFjZWROb2RlT3JCUihO
b2RlKiBub2RlKQogCiBzdGF0aWMgYm9vbCBjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcihjb25zdCBD
aGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldDEsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYg
Y2hhcmFjdGVyT2Zmc2V0MikKIHsKKyAgICAvLyBGSVhNRTogU2hvdWxkIGp1c3QgYmUgYWJsZSB0
byBjYWxsIGRvY3VtZW50T3JkZXIgd2l0aG91dCBhY2Nlc3NpYmlsaXR5LXNwZWNpZmljIGxvZ2lj
LiBOb3QgY2xlYXIgd2h5IHdlIG5lZWQgQ2hhcmFjdGVyT2Zmc2V0IGluc3RlYWQgb2YgUG9zaXRp
b24gb3IgQm91bmRhcnlQb2ludC4KKwogICAgIGlmIChjaGFyYWN0ZXJPZmZzZXQxLmlzTnVsbCgp
IHx8IGNoYXJhY3Rlck9mZnNldDIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKQEAgLTIwNDgsMTYgKzIwNTAsMTIgQEAgc3RhdGljIGJvb2wgY2hhcmFjdGVyT2Zmc2V0c0lu
T3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb24KICAgICAg
ICAgbm9kZTEgPSBub2RlMS0+dHJhdmVyc2VUb0NoaWxkQXQoY2hhcmFjdGVyT2Zmc2V0MS5vZmZz
ZXQpOwogICAgIGlmICghbm9kZTItPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSAmJiAhaXNSZXBsYWNl
ZE5vZGVPckJSKG5vZGUyKSAmJiBub2RlMi0+aGFzQ2hpbGROb2RlcygpKQogICAgICAgICBub2Rl
MiA9IG5vZGUyLT50cmF2ZXJzZVRvQ2hpbGRBdChjaGFyYWN0ZXJPZmZzZXQyLm9mZnNldCk7Ci0g
ICAgCiAgICAgaWYgKCFub2RlMSB8fCAhbm9kZTIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKICAgICBhdXRvIHJhbmdlMSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRz
KCpub2RlMSk7CiAgICAgYXV0byByYW5nZTIgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVD
b250ZW50cygqbm9kZTIpOwotICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHJhbmdl
MSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxp
dmVSYW5nZShyYW5nZTIpKTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9
IDA7CisgICAgcmV0dXJuIGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihyYW5nZTEuc3RhcnQsIHJhbmdl
Mi5zdGFydCkpOwogfQogCiBzdGF0aWMgTm9kZSogcmVzZXROb2RlQW5kT2Zmc2V0Rm9yUmVwbGFj
ZWROb2RlKE5vZGUmIHJlcGxhY2VkTm9kZSwgaW50JiBvZmZzZXQsIGludCBjaGFyYWN0ZXJDb3Vu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCmluZGV4IGEwNDc4MzI4ZjkyM2M1NDUyMjc3YjJiZjRhNDQzMWJkNzI3NWY3OTMu
LjIwOWM5YjhjOTk4YzU2ZGZjNGMzYTQ1NTM1YjQwNzVhNjY4ZTMxZjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAt
Mjk3LDI2ICsyOTcsMTcgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Om1pc3NwZWxsaW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHMKICAgICBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiBtaXNzcGVsbGluZ3M7CiAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
KnRleHRDaGVja2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywg
bWlzc3BlbGxpbmdzLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogCi0gICAgLy8g
VGhlIHJldHVybmVkIG1pc3NwZWxsaW5ncyBhcmUgYXNzdW1lZCB0byBiZSBvcmRlcmVkIGluIHRo
ZSBkb2N1bWVudAotICAgIC8vIGxvZ2ljYWwgb3JkZXIsIHdoaWNoIHNob3VsZCBiZSBtYXRjaGVk
IGJ5IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMuCi0gICAgLy8gU28gaXRlcmF0ZSBmb3J3
YXJkIG9yIGJhY2t3YXJkcyBkZXBlbmRpbmcgb24gdGhlIGRlc2lyZWQgc2VhcmNoCi0gICAgLy8g
ZGlyZWN0aW9uIHRvIGZpbmQgdGhlIGNsb3Nlc3QgbWlzc3BlbGxpbmcgaW4gdGhhdCBkaXJlY3Rp
b24uCisgICAgLy8gRmluZCB0aGUgZmlyc3QgbWlzc3BlbGxpbmcgcGFzdCB0aGUgc3RhcnQuCiAg
ICAgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpOZXh0KSB7
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgbWlzc3BlbGxpbmcgOiBtaXNzcGVsbGluZ3MpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBtaXNzcGVsbGluZyA6IG1pc3NwZWxsaW5ncykgewogICAgICAg
ICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gZWRpdG9yLnJhbmdlRm9yVGV4dENoZWNraW5n
UmVzdWx0KG1pc3NwZWxsaW5nKTsKLSAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGNyZWF0ZUxpdmVS
YW5nZSgqbWlzc3BlbGxpbmdSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5E
X1RPX0VORCwgY3JlYXRlTGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVyblZhbHVlKCkgPiAw
KQorICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UgJiYgaXNfZ3QoZG9jdW1lbnRPcmRl
cihtaXNzcGVsbGluZ1JhbmdlLT5lbmQsIHN0YXJ0LmVuZCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybiAqbWlzc3BlbGxpbmdSYW5nZTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZGlyZWN0
aW9uID09IEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246OlByZXZpb3VzKSB7Ci0gICAgICAg
IGZvciAoYXV0byByaXQgPSBtaXNzcGVsbGluZ3MucmJlZ2luKCk7IHJpdCAhPSBtaXNzcGVsbGlu
Z3MucmVuZCgpOyArK3JpdCkgewotICAgICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0g
ZWRpdG9yLnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KCpyaXQpOwotICAgICAgICAgICAgaWYg
KCFtaXNzcGVsbGluZ1JhbmdlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICBpZiAoY3JlYXRlTGl2ZVJhbmdlKCptaXNzcGVsbGluZ1JhbmdlKS0+Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHN0YXJ0KSku
cmVsZWFzZVJldHVyblZhbHVlKCkgPCAwKQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoYXV0
byYgbWlzc3BlbGxpbmcgOiBtYWtlUmV2ZXJzZWRSYW5nZShtaXNzcGVsbGluZ3MpKSB7CisgICAg
ICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBlZGl0b3IucmFuZ2VGb3JUZXh0Q2hlY2tp
bmdSZXN1bHQobWlzc3BlbGxpbmcpOworICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2Ug
JiYgaXNfbHQoZG9jdW1lbnRPcmRlcihtaXNzcGVsbGluZ1JhbmdlLT5zdGFydCwgc3RhcnQuc3Rh
cnQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgICAg
IH0KICAgICB9CkBAIC01NjUsMjggKzU1NiwxMyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OmZpbmRNYXRjaGluZ09iamVjdHMoQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiBjcml0ZQog
Ly8gcmFuZ2UgaXMgZXhwZWN0ZWQgdG8gQUNUVUFMTFkgYmUgYmVmb3JlLiBUaGVzZSBhcmUgbm90
IGNoZWNrZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IHJhbmdlQ2xvc2VzdFRvUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJlZmVyZW5jZVJh
bmdlLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mJiBhZnRlclJhbmdlLCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4mJiBiZWZvcmVSYW5nZSkKIHsKLSAgICAvLyBUaGUgdHJlZVNjb3BlIGZvciBzaGFkb3cg
bm9kZXMgbWF5IG5vdCBiZSB0aGUgc2FtZSBzY29wZSBhcyBhbm90aGVyIGVsZW1lbnQgaW4gYSBk
b2N1bWVudC4KLSAgICAvLyBDb21wYXJpc29ucyBtYXkgZmFpbCBpbiB0aGF0IGNhc2UsIHdoaWNo
IGFyZSBleHBlY3RlZCBiZWhhdmlvciBhbmQgc2hvdWxkIG5vdCBhc3NlcnQuCi0KLSAgICBpZiAo
YWZ0ZXJSYW5nZSAmJiAoYWZ0ZXJSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbihyZWZlcmVuY2VSYW5nZS5lbmQuY29udGFpbmVyKSAmIE5vZGU6OkRPQ1VNRU5U
X1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgQVNTRVJUKCFhZnRlclJhbmdlIHx8IGNyZWF0ZUxpdmVSYW5nZShhZnRlclJhbmdlKS0+Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdl
KHJlZmVyZW5jZVJhbmdlKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMCk7Ci0KLSAgICBpZiAo
YmVmb3JlUmFuZ2UgJiYgKGJlZm9yZVJhbmdlLT5lbmQuY29udGFpbmVyLT5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbihyZWZlcmVuY2VSYW5nZS5zdGFydC5jb250YWluZXIpICYgTm9kZTo6RE9DVU1F
TlRfUE9TSVRJT05fRElTQ09OTkVDVEVEKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBBU1NFUlQoIWJlZm9yZVJhbmdlIHx8IGNyZWF0ZUxpdmVSYW5nZShiZWZvcmVSYW5nZSkt
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVS
YW5nZShyZWZlcmVuY2VSYW5nZSkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDApOwotCi0gICAg
aWYgKCFhZnRlclJhbmdlICYmICFiZWZvcmVSYW5nZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICBpZiAoIWJlZm9yZVJhbmdlKQogICAgICAgICByZXR1cm4gV1RGTW92ZShhZnRl
clJhbmdlKTsKICAgICBpZiAoIWFmdGVyUmFuZ2UpCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGJl
Zm9yZVJhbmdlKTsKLQotICAgIGF1dG8gcG9zaXRpb25zVG9BZnRlclJhbmdlID0gUG9zaXRpb246
OnBvc2l0aW9uQ291bnRCZXR3ZWVuUG9zaXRpb25zKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihhZnRlclJhbmdlLT5zdGFydCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZWZlcmVu
Y2VSYW5nZS5lbmQpKTsKLSAgICBhdXRvIHBvc2l0aW9uc1RvQmVmb3JlUmFuZ2UgPSBQb3NpdGlv
bjo6cG9zaXRpb25Db3VudEJldHdlZW5Qb3NpdGlvbnMoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKGJlZm9yZVJhbmdlLT5lbmQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmVmZXJl
bmNlUmFuZ2Uuc3RhcnQpKTsKLQotICAgIHJldHVybiBXVEZNb3ZlKHBvc2l0aW9uc1RvQWZ0ZXJS
YW5nZSA8IHBvc2l0aW9uc1RvQmVmb3JlUmFuZ2UgPyBhZnRlclJhbmdlIDogYmVmb3JlUmFuZ2Up
OworICAgIGF1dG8gZGlzdGFuY2VCZWZvcmUgPSBjaGFyYWN0ZXJDb3VudCh7IGJlZm9yZVJhbmdl
LT5lbmQsIHJlZmVyZW5jZVJhbmdlLnN0YXJ0IH0pOworICAgIGF1dG8gZGlzdGFuY2VBZnRlciA9
IGNoYXJhY3RlckNvdW50KHsgYWZ0ZXJSYW5nZS0+c3RhcnQsIHJlZmVyZW5jZVJhbmdlLmVuZCB9
KTsKKyAgICByZXR1cm4gV1RGTW92ZShkaXN0YW5jZUJlZm9yZSA8PSBkaXN0YW5jZUFmdGVyID8g
YmVmb3JlUmFuZ2UgOiBhZnRlclJhbmdlKTsKIH0KIAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9u
KGNvbnN0IFNpbXBsZVJhbmdlJiByZWZlcmVuY2VSYW5nZSwgQWNjZXNzaWJpbGl0eVNlYXJjaERp
cmVjdGlvbiBzZWFyY2hEaXJlY3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hTdHJp
bmdzKSBjb25zdApAQCAtNjAzLDIzICs1NzksMTYgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW8K
ICAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gY2xvc2VzdFN0cmluZ1JhbmdlOwogICAgIGZvciAo
YXV0byYgc2VhcmNoU3RyaW5nIDogc2VhcmNoU3RyaW5ncykgewogICAgICAgICBpZiAoYXV0byBm
b3VuZFN0cmluZ1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcoc2VhcmNoU3Ry
aW5nLCByZWZlcmVuY2VSYW5nZSwgZmluZE9wdGlvbnMpKSB7CisgICAgICAgICAgICBib29sIGZv
dW5kU3RyaW5nSXNDbG9zZXI7CiAgICAgICAgICAgICBpZiAoIWNsb3Nlc3RTdHJpbmdSYW5nZSkK
LSAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAqZm91bmRTdHJpbmdSYW5nZTsK
KyAgICAgICAgICAgICAgICBmb3VuZFN0cmluZ0lzQ2xvc2VyID0gdHJ1ZTsKICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIElmIHNlYXJjaGluZyBiYWNrd2FyZCwgdXNlIHRo
ZSB0cmFpbGluZyByYW5nZSBlZGdlcyB0byBjb3JyZWN0bHkgZGV0ZXJtaW5lIHdoaWNoCi0gICAg
ICAgICAgICAgICAgLy8gcmFuZ2UgaXMgY2xvc2VzdC4gU2ltaWxhcmx5LCBpZiBzZWFyY2hpbmcg
Zm9yd2FyZCwgdXNlIHRoZSBsZWFkaW5nIHJhbmdlIGVkZ2VzLgotICAgICAgICAgICAgICAgIGF1
dG8mIGNsb3Nlc3RTdHJpbmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBjbG9zZXN0U3Ry
aW5nUmFuZ2UtPmVuZCA6IGNsb3Nlc3RTdHJpbmdSYW5nZS0+c3RhcnQ7Ci0gICAgICAgICAgICAg
ICAgYXV0byYgZm91bmRTdHJpbmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBmb3VuZFN0
cmluZ1JhbmdlLT5lbmQgOiBmb3VuZFN0cmluZ1JhbmdlLT5zdGFydDsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBhdXRvIGNsb3Nlc3RQb3NpdGlvbk9mZnNldCA9IGNsb3Nlc3RT
dHJpbmdQb3NpdGlvbi5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWFyY2hQb3NpdGlv
bk9mZnNldCA9IGZvdW5kU3RyaW5nUG9zaXRpb24ub2Zmc2V0OwotICAgICAgICAgICAgICAgIGF1
dG8gY2xvc2VzdENvbnRhaW5lck5vZGUgPSBjbG9zZXN0U3RyaW5nUG9zaXRpb24uY29udGFpbmVy
LnB0cigpOwotICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNoQ29udGFpbmVyTm9kZSA9IGZvdW5k
U3RyaW5nUG9zaXRpb24uY29udGFpbmVyLnB0cigpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhjbG9z
ZXN0Q29udGFpbmVyTm9kZSwgY2xvc2VzdFBvc2l0aW9uT2Zmc2V0LCBzZWFyY2hDb250YWluZXJO
b2RlLCBzZWFyY2hQb3NpdGlvbk9mZnNldCkucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCghaXNCYWNrd2FyZFNlYXJjaCAmJiByZXN1bHQgPiAwKSB8fCAoaXNCYWNr
d2FyZFNlYXJjaCAmJiByZXN1bHQgPCAwKSkKLSAgICAgICAgICAgICAgICAgICAgY2xvc2VzdFN0
cmluZ1JhbmdlID0gKmZvdW5kU3RyaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAgZm91bmRTdHJp
bmdJc0Nsb3NlciA9IGlzQmFja3dhcmRTZWFyY2gKKyAgICAgICAgICAgICAgICAgICAgPyBpc19n
dChkb2N1bWVudE9yZGVyKGZvdW5kU3RyaW5nUmFuZ2UtPmVuZCwgY2xvc2VzdFN0cmluZ1Jhbmdl
LT5lbmQpKQorICAgICAgICAgICAgICAgICAgICA6IGlzX2x0KGRvY3VtZW50T3JkZXIoZm91bmRT
dHJpbmdSYW5nZS0+c3RhcnQsIGNsb3Nlc3RTdHJpbmdSYW5nZS0+c3RhcnQpKTsKICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChmb3VuZFN0cmluZ0lzQ2xvc2VyKQorICAgICAgICAgICAg
ICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9ICpmb3VuZFN0cmluZ1JhbmdlOwogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBjbG9zZXN0U3RyaW5nUmFuZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApp
bmRleCA3OWI4Y2E0YTEwYTQzNWRiMzE4ZjkwNmY0MDcxY2Q1YjA0NDE2Njk4Li4yYWMxMzQyZGFj
MzQ0NDQ3ZWQ1MTMyMTg5ZTA4ZWYzNTk1MjNmZTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAg
LTkxNSw3ICs5MTUsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsaW5r
Q2xpY2tQb2ludCgpCiAgICAgaWYgKGF1dG8gcmFuZ2UgPSBlbGVtZW50UmFuZ2UoKSkgewogICAg
ICAgICBhdXRvIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uIHsgY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKHJhbmdlLT5zdGFydCkgfTsKICAgICAgICAgYXV0byBlbmQgPSBuZXh0VmlzaWJsZVBv
c2l0aW9uKHN0YXJ0KTsKLSAgICAgICAgaWYgKCFlbmQuaXNOdWxsKCkgJiYgY3JlYXRlTGl2ZVJh
bmdlKHJhbmdlKS0+Y29udGFpbnMoZW5kKSkKKyAgICAgICAgaWYgKGlzUG9pbnRJblJhbmdlKCpy
YW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSkpCiAgICAgICAgICAgICByZXR1cm4geyBib3Vu
ZHNGb3JSYW5nZSgqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpKS5jZW50ZXIoKSB9OwogICAg
IH0KICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCgpOwpAQCAtMTU2
MSwxNyArMTU2MSw5IEBAIFBsYWluVGV4dFJhbmdlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmRvY3VtZW50QmFzZWRTZWxlY3RlZFRleHRSYW5nZSgpIGNvbnN0CiAgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24g
dmlzaWJsZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpOwotICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2Ug
PSB2aXNpYmxlU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3Rp
b25SYW5nZSkKLSAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7Ci0KLSAgICAvLyBGSVhN
RTogVGhlIHJlYXNvbiB0aGlzIGRvZXMgdGhlIGNvcnJlY3QgdGhpbmcgd2hlbiB0aGUgc2VsZWN0
aW9uIGlzIGluIHRoZQotICAgIC8vIHNoYWRvdyB0cmVlIG9mIGFuIGlucHV0IGVsZW1lbnQgaXMg
dGhhdCB3ZSBnZXQgYW4gZXhjZXB0aW9uIGJlbG93LCBhbmQgd2UKLSAgICAvLyBjaG9vc2UgdG8g
aW50ZXJwcmV0IGFsbCBleGNlcHRpb25zIGFzICJkb2VzIG5vdCBpbnRlcnNlY3QiLiBTZWVtcyBs
aWtlbHkKLSAgICAvLyB0aGF0IGRvZXMgbm90IGhhbmRsZSBhbGwgY2FzZXMgY29ycmVjdGx5Lgot
ICAgIGF1dG8gaW50ZXJzZWN0c1Jlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFu
Z2UpLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSk7Ci0gICAgaWYgKCFpbnRlcnNlY3RzUmVzdWx0Lmhh
c0V4Y2VwdGlvbigpICYmICFpbnRlcnNlY3RzUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKQor
ICAgIGF1dG8gdmlzaWJsZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpOworICAgIGF1dG8gc2VsZWN0
aW9uUmFuZ2UgPSB2aXNpYmxlU2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVj
dGlvblJhbmdlIHx8ICFpbnRlcnNlY3RzKCpzZWxlY3Rpb25SYW5nZSwgKm5vZGUpKQogICAgICAg
ICByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsKIAogICAgIGludCBzdGFydCA9IGluZGV4Rm9yVmlz
aWJsZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24uc3RhcnQoKSk7CkBAIC0xNjU2LDEwICsxNjQ4
LDEwIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRUZXh0UmFu
Z2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlCiAgICAgICAgIGF1dG8mIG5vZGUgPSAqdGhp
cy0+bm9kZSgpOwogICAgICAgICBhdXRvIGVsZW1lbnRSYW5nZSA9IHRoaXMtPmVsZW1lbnRSYW5n
ZSgpOwogICAgICAgICBhdXRvIHN0YXJ0ID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0No
YXJhY3Rlckl0ZXJhdG9yKG5vZGUsIHJhbmdlLnN0YXJ0KTsKLSAgICAgICAgaWYgKCFjcmVhdGVM
aXZlUmFuZ2UoZWxlbWVudFJhbmdlKS0+Y29udGFpbnMoc3RhcnQpKQorICAgICAgICBpZiAoIWlz
UG9pbnRJblJhbmdlKCplbGVtZW50UmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSkpCiAg
ICAgICAgICAgICBzdGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50UmFu
Z2UtPnN0YXJ0KTsKICAgICAgICAgYXV0byBlbmQgPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVz
aW5nQ2hhcmFjdGVySXRlcmF0b3Iobm9kZSwgcmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOwot
ICAgICAgICBpZiAoIWNyZWF0ZUxpdmVSYW5nZShlbGVtZW50UmFuZ2UpLT5jb250YWlucyhlbmQp
KQorICAgICAgICBpZiAoIWlzUG9pbnRJblJhbmdlKCplbGVtZW50UmFuZ2UsIG1ha2VCb3VuZGFy
eVBvaW50KGVuZCkpKQogICAgICAgICAgICAgZW5kID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKGVsZW1lbnRSYW5nZS0+c3RhcnQpOwogICAgICAgICBtX3JlbmRlcmVyLT5mcmFtZSgpLnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0LCBlbmQpLCBGcmFt
ZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwog
ICAgIH0KQEAgLTIyMTYsNyArMjIwOCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zCiAKICAg
ICAgICAgYXV0byBzdGFydCA9IHJhbmdlLnN0YXJ0OwogICAgICAgICBpZiAoYXV0byBlbGVtZW50
UmFuZ2UgPSB0aGlzLT5lbGVtZW50UmFuZ2UoKSkgewotICAgICAgICAgICAgaWYgKCFjcmVhdGVM
aXZlUmFuZ2UoZWxlbWVudFJhbmdlKS0+Y29udGFpbnMoc3RhcnQpKQorICAgICAgICAgICAgaWYg
KCFpc1BvaW50SW5SYW5nZSgqZWxlbWVudFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChzdGFydCkp
KQogICAgICAgICAgICAgICAgIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVs
ZW1lbnRSYW5nZS0+c3RhcnQpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAppbmRleCA4
ZDYyMWJlNzgxZTk5MGMxZGM0MDYwZmVkZmIzOTJiNzE2NTc1NGE5Li44ZjQzZjM4NWMzM2EyNDM3
NTlmMTJjZjc0ZDYyOTFmZWRlOTNlMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCkBAIC0xNTUsMjUg
KzE1NSw4IEBAIGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mCiAgICAgaWYgKCFjb3JlT2JqZWN0IHx8
ICFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
OwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIHdh
bnQgdG8gY2hlY2sgdGhhdCBib3RoIHRoZSBzZWxlY3Rpb24gaW50ZXJzZWN0cyB0aGUgbm9kZQot
ICAgIC8vIEFORCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMgbm90IGp1c3QgInRvdWNoaW5nIiBvbmUg
b2YgdGhlCi0gICAgLy8gYm91bmRhcmllcyBmb3IgdGhlIHNlbGVjdGVkIG5vZGUuIFdlIHdhbnQg
dG8gY2hlY2sgd2hldGhlciB0aGUKLSAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUg
cmVnaW9uLCBhdCBsZWFzdCBwYXJ0aWFsbHkuCi0gICAgYXV0byYgbm9kZSA9ICpjb3JlT2JqZWN0
LT5ub2RlKCk7Ci0gICAgYXV0byogbGFzdERlc2NlbmRhbnQgPSBub2RlLmxhc3REZXNjZW5kYW50
KCk7Ci0gICAgdW5zaWduZWQgbGFzdE9mZnNldCA9IGxhc3REZXNjZW5kYW50LT5sZW5ndGgoKTsK
LSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+aW50
ZXJzZWN0c05vZGUobm9kZSk7Ci0gICAgcmV0dXJuICFpbnRlcnNlY3RzUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpCi0gICAgICAgICYmIGludGVyc2VjdHNSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkK
LSAgICAgICAgJiYgKHJhbmdlLT5lbmQuY29udGFpbmVyLnB0cigpICE9ICZub2RlIHx8IHJhbmdl
LT5lbmQub2Zmc2V0KQotICAgICAgICAmJiAocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSAh
PSBsYXN0RGVzY2VuZGFudCB8fCByYW5nZS0+c3RhcnQub2Zmc2V0ICE9IGxhc3RPZmZzZXQpOwor
ICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpOworICAgIHJldHVybiByYW5n
ZSAmJiBpbnRlcnNlY3RzKCpyYW5nZSwgKmNvcmVPYmplY3QtPm5vZGUoKSk7CiB9CiAKIEFYQ29y
ZU9iamVjdCogb2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKEFYQ29yZU9iamVj
dCogcmVmZXJlbmNlT2JqZWN0LCBpbnQmIG9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXgg
ZjBjOGEzNGVmMzNlYmMwNmRkNTcyOTYyMDg1MGZhMTE5NWNiNzUwMi4uNWFiYzI0ZWJiOTgxZTU2
NGYwN2FkZWI4ZTVmYzExNTgxMzFjNTM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTkwNSw3
ICs5MDUsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRoZSBvd25pbmcgZWxlbWVudCBp
biB0aGUgcGFyZW50IGRvY3VtZW50LgogICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aGlzIGlz
IHRoZSB0b3AgbGV2ZWwgZG9jdW1lbnQuCi0gICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25l
ckVsZW1lbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyRWxlbWVudCgpIGNvbnN0OwogCiAgICAgLy8gVXNlZCBieSBET00gYmluZGluZ3M7
IG5vIGRpcmVjdGlvbiBrbm93bi4KICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKCkgY29uc3QgeyBy
ZXR1cm4gbV90aXRsZS5zdHJpbmc7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5jcHAKaW5kZXggMGY3Zjk5MGUzZWQ5YTc1YzYzMTEyNDBhZWQ1NTdh
ODE3MDUxY2VlNC4uOGFlMWQ4ZDU1YjhmZTcwZWVlMzk1N2QzZGRlZDc1MzhjZDEzYmYzNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKQEAg
LTY0OSw3ICs2NDksNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNj
cmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKGNvbnN0CiAKIHZvaWQgYWRkTWFya2Vy
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlw
ZSwgY29uc3QgRG9jdW1lbnRNYXJrZXI6OkRhdGEmIGRhdGEpCiB7Ci0gICAgcmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmFuZ2UsIHR5cGUsIGRh
dGEpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihyYW5n
ZSwgdHlwZSwgZGF0YSk7CiB9CiAKIHZvaWQgYWRkTWFya2VyKFRleHQmIG5vZGUsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
IHR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYgZGF0YSkKQEAgLTY1OSw3ICs2NTksNyBAQCB2
b2lkIGFkZE1hcmtlcihUZXh0JiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoLCBEb2N1bWVudE1hcmtlcgogCiB2b2lkIHJlbW92ZU1hcmtlcnMoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVz
LCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciBwb2xpY3kpCiB7Ci0gICAgcmFuZ2Uu
c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHJhbmdl
LCB0eXBlcywgcG9saWN5KTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5y
ZW1vdmVNYXJrZXJzKHJhbmdlLCB0eXBlcywgcG9saWN5KTsKIH0KIAogU2ltcGxlUmFuZ2UgbWFr
ZVNpbXBsZVJhbmdlKE5vZGUmIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuaAppbmRleCAzNGM2ZmU4OTE1MDcwNzRlYzIxYTg1ZWYyMTYyN2I3YjFmZmU5
NTU2Li4wOTVkNmZhZWRhOWI0YmFhODNhNmY1ZjQ3M2UxOGFjZjQ4M2JhYzIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgKQEAgLTI5Nyw3ICsyOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIFNoYWRvd1Jvb3RN
b2RlIG1vZGU7CiAgICAgICAgIGJvb2wgZGVsZWdhdGVzRm9jdXMgeyBmYWxzZSB9OwogICAgIH07
Ci0gICAgRXhjZXB0aW9uT3I8U2hhZG93Um9vdCY+IGF0dGFjaFNoYWRvdyhjb25zdCBTaGFkb3dS
b290SW5pdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFNoYWRvd1Jvb3QmPiBh
dHRhY2hTaGFkb3coY29uc3QgU2hhZG93Um9vdEluaXQmKTsKIAogICAgIFJlZlB0cjxTaGFkb3dS
b290PiB1c2VyQWdlbnRTaGFkb3dSb290KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2hh
ZG93Um9vdCYgZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4
IDc5MWUzNTZiODI4OTE4MjdiY2E3YTlhNjFmNzlkMzMwNWRhZDE5YjMuLjM5MzhlNTljOTQwYjE3
ZWY1MTlhMWM1ZGUwYjhiMWMxMjM5MzE2ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTE2MjgsNyAr
MTYyOCw3IEBAIGJvb2wgY29ubmVjdGVkSW5TYW1lVHJlZVNjb3BlKGNvbnN0IE5vZGUqIGEsIGNv
bnN0IE5vZGUqIGIpCiAgICAgcmV0dXJuIGEgJiYgYiAmJiBhLT5pc0Nvbm5lY3RlZCgpID09IGIt
PmlzQ29ubmVjdGVkKCkgJiYgJmEtPnRyZWVTY29wZSgpID09ICZiLT50cmVlU2NvcGUoKTsKIH0K
IAotLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgc28gaXQgY2FsbHMgZG9jdW1lbnRPcmRlcmluZywg
ZXhjZXB0IGZvciBhbnkgZXhvdGljIGluZWZmaWNpZW50IHRoaW5ncyB0aGF0IGFyZSBuZWVkZWQg
b25seSBoZXJlLgorLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgc28gaXQgY2FsbHMgZG9jdW1lbnRP
cmRlciwgZXhjZXB0IGZvciBhbnkgZXhvdGljIGluZWZmaWNpZW50IHRoaW5ncyB0aGF0IGFyZSBu
ZWVkZWQgb25seSBoZXJlLgogdW5zaWduZWQgc2hvcnQgTm9kZTo6Y29tcGFyZURvY3VtZW50UG9z
aXRpb24oTm9kZSYgb3RoZXJOb2RlKQogewogICAgIGlmICgmb3RoZXJOb2RlID09IHRoaXMpCkBA
IC0yNjI3LDExICsyNjI3LDIwIEBAIHZvaWQqIE5vZGU6Om9wYXF1ZVJvb3RTbG93KCkgY29uc3QK
ICAgICByZXR1cm4gY29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG5v
ZGUpKTsKIH0KIAotc3RhdGljIHNpemVfdCBkZXB0aChjb25zdCBOb2RlJiBub2RlKQorc3RhdGlj
IHNpemVfdCBkZXB0aEluVHJlZShjb25zdCBOb2RlJiBub2RlKQogewogICAgIHNpemVfdCBkZXB0
aCA9IDA7CiAgICAgYXV0byBhbmNlc3RvciA9ICZub2RlOwotICAgIHdoaWxlICgoYW5jZXN0b3Ig
PSBhbmNlc3Rvci0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpKSkKKyAgICB3aGlsZSAoKGFuY2Vz
dG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkpCisgICAgICAgICsrZGVwdGg7CisgICAgcmV0
dXJuIGRlcHRoOworfQorCitzdGF0aWMgc2l6ZV90IGRlcHRoSW5Db21wb3NlZFRyZWUoY29uc3Qg
Tm9kZSYgbm9kZSkKK3sKKyAgICBzaXplX3QgZGVwdGggPSAwOworICAgIGF1dG8gYW5jZXN0b3Ig
PSAmbm9kZTsKKyAgICB3aGlsZSAoKGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudEluQ29tcG9z
ZWRUcmVlKCkpKQogICAgICAgICArK2RlcHRoOwogICAgIHJldHVybiBkZXB0aDsKIH0KQEAgLTI2
NDEsMzMgKzI2NTAsNDAgQEAgc3RydWN0IEFuY2VzdG9yQW5kQ2hpbGRyZW4gewogICAgIGNvbnN0
IE5vZGUqIGRpc3RpbmN0QW5jZXN0b3JBOwogICAgIGNvbnN0IE5vZGUqIGRpc3RpbmN0QW5jZXN0
b3JCOwogfTsKKworLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24ncyBuYW1lIGlzIG5vdCBleHBsaWNp
dCBhYm91dCB0aGUgZmFjdCB0aGF0IGl0J3MgdGhlIGNvbW1vbiBpbmNsdXNpdmUgYW5jZXN0b3Ig
aW4gdGhlIGNvbXBvc2VkIHRyZWUuCiBzdGF0aWMgQW5jZXN0b3JBbmRDaGlsZHJlbiBjb21tb25J
bmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcmVuKGNvbnN0IE5vZGUmIGEsIGNvbnN0IE5vZGUmIGIp
CiB7Ci0gICAgLy8gVGhpcyBmaXJzdCBjaGVjayBpc24ndCBuZWVkZWQgZm9yIGNvcnJlY3RuZXNz
LCBidXQgaXQgaXMgY2hlYXAgYW5kIGxpa2VseSB0byBiZQorICAgIC8vIFRoaXMgY2hlY2sgaXNu
J3QgbmVlZGVkIGZvciBjb3JyZWN0bmVzcywgYnV0IGl0IGlzIGNoZWFwIGFuZCBsaWtlbHkgdG8g
YmUKICAgICAvLyBjb21tb24gZW5vdWdoIHRvIGJlIHdvcnRoIG9wdGltaXppbmcgc28gd2UgZG9u
J3QgaGF2ZSB0byB3YWxrIHRvIHRoZSByb290LgogICAgIGlmICgmYSA9PSAmYikKICAgICAgICAg
cmV0dXJuIHsgJmEsIG51bGxwdHIsIG51bGxwdHIgfTsKLSAgICBhdXRvIFtkZXB0aEEsIGRlcHRo
Ql0gPSBzdGQ6Om1ha2VfdHVwbGUoZGVwdGgoYSksIGRlcHRoKGIpKTsKKyAgICAvLyBGSVhNRTog
Q291bGQgb3B0aW1pemUgY2FzZXMgd2hlcmUgbm9kZXMgYXJlIGluIGRpZmZlcmVudCBkb2N1bWVu
dHMgdG8gcXVpY2tseSByZXR1cm4gZmFsc2UuCisgICAgLy8gRklYTUU6IENvdWxkIG9wdGltaXpl
IGNhc2VzIHdoZXJlIG9uZSBub2RlIGlzIGNvbm5lY3RlZCBhbmQgdGhlIG90aGVyIGlzIG5vdCB0
byBxdWlja2x5IHJldHVybiBmYWxzZS4KKyAgICBhdXRvIFtkZXB0aEEsIGRlcHRoQl0gPSAmYS50
cmVlU2NvcGUoKSA9PSAmYi50cmVlU2NvcGUoKQorICAgICAgICA/IHN0ZDo6bWFrZV90dXBsZShk
ZXB0aEluVHJlZShhKSwgZGVwdGhJblRyZWUoYikpCisgICAgICAgIDogc3RkOjptYWtlX3R1cGxl
KGRlcHRoSW5Db21wb3NlZFRyZWUoYSksIGRlcHRoSW5Db21wb3NlZFRyZWUoYikpOwogICAgIGF1
dG8gW3gsIHksIGRpZmZlcmVuY2VdID0gZGVwdGhBID49IGRlcHRoQgogICAgICAgICA/IHN0ZDo6
bWFrZV90dXBsZSgmYSwgJmIsIGRlcHRoQSAtIGRlcHRoQikKICAgICAgICAgOiBzdGQ6Om1ha2Vf
dHVwbGUoJmIsICZhLCBkZXB0aEIgLSBkZXB0aEEpOwogICAgIGRlY2x0eXBlKHgpIGRpc3RpbmN0
QW5jZXN0b3JBID0gbnVsbHB0cjsKICAgICBmb3IgKGRlY2x0eXBlKGRpZmZlcmVuY2UpIGkgPSAw
OyBpIDwgZGlmZmVyZW5jZTsgKytpKSB7CiAgICAgICAgIGRpc3RpbmN0QW5jZXN0b3JBID0geDsK
LSAgICAgICAgeCA9IHgtPnBhcmVudE9yU2hhZG93SG9zdE5vZGUoKTsKKyAgICAgICAgeCA9IHgt
PnBhcmVudEluQ29tcG9zZWRUcmVlKCk7CiAgICAgfQogICAgIGRlY2x0eXBlKHkpIGRpc3RpbmN0
QW5jZXN0b3JCID0gbnVsbHB0cjsKICAgICB3aGlsZSAoeCAhPSB5KSB7CiAgICAgICAgIGRpc3Rp
bmN0QW5jZXN0b3JBID0geDsKICAgICAgICAgZGlzdGluY3RBbmNlc3RvckIgPSB5OwotICAgICAg
ICB4ID0geC0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpOwotICAgICAgICB5ID0geS0+cGFyZW50
T3JTaGFkb3dIb3N0Tm9kZSgpOworICAgICAgICB4ID0geC0+cGFyZW50SW5Db21wb3NlZFRyZWUo
KTsKKyAgICAgICAgeSA9IHktPnBhcmVudEluQ29tcG9zZWRUcmVlKCk7CiAgICAgfQogICAgIGlm
IChkZXB0aEEgPCBkZXB0aEIpCiAgICAgICAgIHN0ZDo6c3dhcChkaXN0aW5jdEFuY2VzdG9yQSwg
ZGlzdGluY3RBbmNlc3RvckIpOwogICAgIHJldHVybiB7IHgsIGRpc3RpbmN0QW5jZXN0b3JBLCBk
aXN0aW5jdEFuY2VzdG9yQiB9OwogfQogCisvLyBGSVhNRTogVGhpcyBmdW5jdGlvbidzIG5hbWUg
aXMgbm90IGV4cGxpY2l0IGFib3V0IHRoZSBmYWN0IHRoYXQgaXQncyB0aGUgY29tbW9uIGluY2x1
c2l2ZSBhbmNlc3RvciBpbiB0aGUgY29tcG9zZWQgdHJlZS4KIFJlZlB0cjxOb2RlPiBjb21tb25J
bmNsdXNpdmVBbmNlc3RvcihOb2RlJiBhLCBOb2RlJiBiKQogewogICAgIHJldHVybiBjb25zdF9j
YXN0PE5vZGUqPihjb21tb25JbmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcmVuKGEsIGIpLmNvbW1v
bkFuY2VzdG9yKTsKQEAgLTI2NzUsNiArMjY5MSw4IEBAIFJlZlB0cjxOb2RlPiBjb21tb25JbmNs
dXNpdmVBbmNlc3RvcihOb2RlJiBhLCBOb2RlJiBiKQogCiBzdGF0aWMgYm9vbCBpc1NpYmxpbmdT
dWJzZXF1ZW50KGNvbnN0IE5vZGUmIHNpYmxpbmdBLCBjb25zdCBOb2RlJiBzaWJsaW5nQikKIHsK
KyAgICBBU1NFUlQoc2libGluZ0EucGFyZW50Tm9kZSgpKTsKKyAgICBBU1NFUlQoc2libGluZ0Eu
cGFyZW50Tm9kZSgpID09IHNpYmxpbmdCLnBhcmVudE5vZGUoKSk7CiAgICAgQVNTRVJUKCZzaWJs
aW5nQSAhPSAmc2libGluZ0IpOwogICAgIGZvciAoYXV0byBzaWJsaW5nID0gJnNpYmxpbmdBOyBz
aWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAo
c2libGluZyA9PSAmc2libGluZ0IpCkBAIC0yNjk0LDYgKzI3MTIsMTYgQEAgUGFydGlhbE9yZGVy
aW5nIGRvY3VtZW50T3JkZXIoY29uc3QgTm9kZSYgYSwgY29uc3QgTm9kZSYgYikKICAgICAgICAg
cmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6bGVzczsKICAgICBpZiAoIXJlc3VsdC5kaXN0aW5jdEFu
Y2VzdG9yQikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6Z3JlYXRlcjsKKyAgICBi
b29sIGlzU2hhZG93Um9vdEEgPSByZXN1bHQuZGlzdGluY3RBbmNlc3RvckEtPmlzU2hhZG93Um9v
dCgpOworICAgIGJvb2wgaXNTaGFkb3dSb290QiA9IHJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQi0+
aXNTaGFkb3dSb290KCk7CisgICAgaWYgKGlzU2hhZG93Um9vdEEgfHwgaXNTaGFkb3dSb290Qikg
eworICAgICAgICBpZiAoIWlzU2hhZG93Um9vdEIpCisgICAgICAgICAgICByZXR1cm4gUGFydGlh
bE9yZGVyaW5nOjpsZXNzOworICAgICAgICBpZiAoIWlzU2hhZG93Um9vdEEpCisgICAgICAgICAg
ICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpncmVhdGVyOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6dW5vcmRlcmVkOworICAg
IH0KICAgICByZXR1cm4gaXNTaWJsaW5nU3Vic2VxdWVudCgqcmVzdWx0LmRpc3RpbmN0QW5jZXN0
b3JBLCAqcmVzdWx0LmRpc3RpbmN0QW5jZXN0b3JCKSA/IFBhcnRpYWxPcmRlcmluZzo6bGVzcyA6
IFBhcnRpYWxPcmRlcmluZzo6Z3JlYXRlcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggYjAyNWM0Y2Ex
YTZmYWVhZDkzMzc3YmIyN2RmN2RjZjJkMjQwNDkxYi4uNTRmOWRmMTgwYTRmNmJmYjRhZjY3ZTU1
MzUyOTkyNzYzMWEzZDdlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC02OTMsNiArNjkzLDEyIEBAIHByaXZh
dGU6CiAgICAgY29uc3RleHByIFBhcnRpYWxPcmRlcmluZyhUeXBlIHR5cGUpIDogbV90eXBlIHsg
dHlwZSB9IHsgfQogICAgIFR5cGUgbV90eXBlOwogfTsKK2NvbnN0ZXhwciBib29sIGlzX2VxKFBh
cnRpYWxPcmRlcmluZyk7Citjb25zdGV4cHIgYm9vbCBpc19sdChQYXJ0aWFsT3JkZXJpbmcpOwor
Y29uc3RleHByIGJvb2wgaXNfZ3QoUGFydGlhbE9yZGVyaW5nKTsKK2NvbnN0ZXhwciBib29sIGlz
X25lcShQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHByIGJvb2wgaXNfbHRlcShQYXJ0aWFsT3Jk
ZXJpbmcpOworY29uc3RleHByIGJvb2wgaXNfZ3RlcShQYXJ0aWFsT3JkZXJpbmcpOwogCiBXRUJD
T1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBOb2RlJiwgY29u
c3QgTm9kZSYpOwogCkBAIC04MjksNiArODM1LDIxIEBAIGNvbnN0ZXhwciBib29sIGlzX2d0KFBh
cnRpYWxPcmRlcmluZyBvcmRlcmluZykKICAgICByZXR1cm4gb3JkZXJpbmcubV90eXBlID09IFBh
cnRpYWxPcmRlcmluZzo6VHlwZTo6R3JlYXRlcjsKIH0KIAorY29uc3RleHByIGJvb2wgaXNfbmVx
KFBhcnRpYWxPcmRlcmluZyBvcmRlcmluZykKK3sKKyAgICByZXR1cm4gaXNfbHQob3JkZXJpbmcp
IHx8IGlzX2d0KG9yZGVyaW5nKTsKK30KKworY29uc3RleHByIGJvb2wgaXNfbHRlcShQYXJ0aWFs
T3JkZXJpbmcgb3JkZXJpbmcpCit7CisgICAgcmV0dXJuIGlzX2x0KG9yZGVyaW5nKSB8fCBpc19l
cShvcmRlcmluZyk7Cit9CisKK2NvbnN0ZXhwciBib29sIGlzX2d0ZXEoUGFydGlhbE9yZGVyaW5n
IG9yZGVyaW5nKQoreworICAgIHJldHVybiBpc19ndChvcmRlcmluZykgfHwgaXNfZXEob3JkZXJp
bmcpOworfQorCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgTm9kZSYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApp
bmRleCA4ZjZmZDNiYzhhYmE1YWZhNDU4YzkzNmYyZWUzY2M3NDA4NGRiYzJjLi4zNjIyMjc5Y2Nh
MDNmMTEyYmFjMTc1MDQxODc0NjlmNWJlMThjNDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTY2
LDcgKzY2LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIERFRklORV9ERUJVR19PTkxZ
X0dMT0JBTChXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciwgcmFuZ2VDb3VudGVyLCAoIlJhbmdl
IikpOwogCiBlbnVtIENvbnRlbnRzUHJvY2Vzc0RpcmVjdGlvbiB7IFByb2Nlc3NDb250ZW50c0Zv
cndhcmQsIFByb2Nlc3NDb250ZW50c0JhY2t3YXJkIH07Ci1lbnVtIGNsYXNzIENvb3JkaW5hdGVT
cGFjZSB7IEFic29sdXRlLCBDbGllbnQgfTsKIAogc3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IHBy
b2Nlc3NOb2RlcyhSYW5nZTo6QWN0aW9uVHlwZSwgVmVjdG9yPFJlZjxOb2RlPj4mLCBOb2RlKiBv
bGRDb250YWluZXIsIFJlZlB0cjxOb2RlPiBuZXdDb250YWluZXIpOwogc3RhdGljIEV4Y2VwdGlv
bk9yPFJlZlB0cjxOb2RlPj4gcHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMoUmFuZ2U6OkFj
dGlvblR5cGUsIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgUmVmUHRyPE5vZGU+IGNvbnRhaW5l
ciwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CkBAIC03NCw4ICs3
Myw4IEBAIHN0YXRpYyBFeGNlcHRpb25PcjxSZWZQdHI8Tm9kZT4+IHByb2Nlc3NBbmNlc3RvcnNB
bmRUaGVpclNpYmxpbmdzKFJhbmdlOjpBY3Rpb25UCiAKIGlubGluZSBSYW5nZTo6UmFuZ2UoRG9j
dW1lbnQmIG93bmVyRG9jdW1lbnQpCiAgICAgOiBtX293bmVyRG9jdW1lbnQob3duZXJEb2N1bWVu
dCkKLSAgICAsIG1fc3RhcnQoJm93bmVyRG9jdW1lbnQpCi0gICAgLCBtX2VuZCgmb3duZXJEb2N1
bWVudCkKKyAgICAsIG1fc3RhcnQob3duZXJEb2N1bWVudCkKKyAgICAsIG1fZW5kKG93bmVyRG9j
dW1lbnQpCiB7CiAjaWZuZGVmIE5ERUJVRwogICAgIHJhbmdlQ291bnRlci5pbmNyZW1lbnQoKTsK
QEAgLTk4LDY1ICs5NywzOSBAQCBSYW5nZTo6flJhbmdlKCkKICNlbmRpZgogfQogCi12b2lkIFJh
bmdlOjpzZXREb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCit2b2lkIFJhbmdlOjp1cGRhdGVE
b2N1bWVudCgpCiB7Ci0gICAgQVNTRVJUKG1fb3duZXJEb2N1bWVudC5wdHIoKSAhPSAmZG9jdW1l
bnQpOworICAgIGF1dG8mIGRvY3VtZW50ID0gc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpOwor
ICAgIGlmIChtX293bmVyRG9jdW1lbnQucHRyKCkgPT0gJmRvY3VtZW50KQorICAgICAgICByZXR1
cm47CiAgICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hSYW5nZSgqdGhpcyk7CiAgICAgbV9vd25l
ckRvY3VtZW50ID0gZG9jdW1lbnQ7Ci0gICAgbV9zdGFydC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3Vt
ZW50KTsKLSAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKICAgICBtX293bmVy
RG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGNo
ZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5lcihjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIHN0
YXJ0LCBjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIGVuZCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJh
bmdlOjpzZXRTdGFydChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsK
LSAgICBOb2RlKiBlbmRSb290Q29udGFpbmVyID0gZW5kLmNvbnRhaW5lcigpOwotICAgIHdoaWxl
IChlbmRSb290Q29udGFpbmVyLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGVuZFJvb3RDb250YWlu
ZXIgPSBlbmRSb290Q29udGFpbmVyLT5wYXJlbnROb2RlKCk7Ci0gICAgTm9kZSogc3RhcnRSb290
Q29udGFpbmVyID0gc3RhcnQuY29udGFpbmVyKCk7Ci0gICAgd2hpbGUgKHN0YXJ0Um9vdENvbnRh
aW5lci0+cGFyZW50Tm9kZSgpKQotICAgICAgICBzdGFydFJvb3RDb250YWluZXIgPSBzdGFydFJv
b3RDb250YWluZXItPnBhcmVudE5vZGUoKTsKLQotICAgIHJldHVybiBzdGFydFJvb3RDb250YWlu
ZXIgIT0gZW5kUm9vdENvbnRhaW5lciB8fCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHN0
YXJ0LCBlbmQpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMDsKLX0KLQotRXhjZXB0aW9uT3I8dm9p
ZD4gUmFuZ2U6OnNldFN0YXJ0KFJlZjxOb2RlPiYmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkK
LXsKLSAgICBib29sIGRpZE1vdmVEb2N1bWVudCA9IGZhbHNlOwotICAgIGlmICgmcmVmTm9kZS0+
ZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7Ci0gICAgICAgIHNldERvY3VtZW50KHJl
Zk5vZGUtPmRvY3VtZW50KCkpOwotICAgICAgICBkaWRNb3ZlRG9jdW1lbnQgPSB0cnVlOwotICAg
IH0KLQotICAgIGF1dG8gY2hpbGROb2RlID0gY2hlY2tOb2RlV09mZnNldChyZWZOb2RlLCBvZmZz
ZXQpOworICAgIGF1dG8gY2hpbGROb2RlID0gY2hlY2tOb2RlT2Zmc2V0UGFpcihjb250YWluZXIs
IG9mZnNldCk7CiAgICAgaWYgKGNoaWxkTm9kZS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGNoaWxkTm9kZS5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKLSAgICBtX3N0YXJ0LnNldChXVEZN
b3ZlKHJlZk5vZGUpLCBvZmZzZXQsIGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci0K
LSAgICBpZiAoZGlkTW92ZURvY3VtZW50IHx8IGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5l
cihtX3N0YXJ0LCBtX2VuZCkpCi0gICAgICAgIGNvbGxhcHNlKHRydWUpOwotCisgICAgbV9zdGFy
dC5zZXQoV1RGTW92ZShjb250YWluZXIpLCBvZmZzZXQsIGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSk7CisgICAgaWYgKCFpc19sdGVxKGRvY3VtZW50T3JkZXIobWFrZUJvdW5kYXJ5UG9p
bnQobV9zdGFydCksIG1ha2VCb3VuZGFyeVBvaW50KG1fZW5kKSkpKQorICAgICAgICBtX2VuZCA9
IG1fc3RhcnQ7CisgICAgdXBkYXRlRG9jdW1lbnQoKTsKICAgICByZXR1cm4geyB9OwogfQogCi1F
eGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0RW5kKFJlZjxOb2RlPiYmIHJlZk5vZGUsIHVuc2ln
bmVkIG9mZnNldCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmQoUmVmPE5vZGU+JiYg
Y29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgYm9vbCBkaWRNb3ZlRG9jdW1lbnQg
PSBmYWxzZTsKLSAgICBpZiAoJnJlZk5vZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQo
KSkgewotICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLT5kb2N1bWVudCgpKTsKLSAgICAgICAg
ZGlkTW92ZURvY3VtZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhdXRvIGNoaWxkTm9kZSA9IGNo
ZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0KTsKKyAgICBhdXRvIGNoaWxkTm9kZSA9IGNo
ZWNrTm9kZU9mZnNldFBhaXIoY29udGFpbmVyLCBvZmZzZXQpOwogICAgIGlmIChjaGlsZE5vZGUu
aGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBjaGlsZE5vZGUucmVsZWFzZUV4Y2VwdGlv
bigpOwogCi0gICAgbV9lbmQuc2V0KFdURk1vdmUocmVmTm9kZSksIG9mZnNldCwgY2hpbGROb2Rl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLQotICAgIGlmIChkaWRNb3ZlRG9jdW1lbnQgfHwgY2hl
Y2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKG1fc3RhcnQsIG1fZW5kKSkKLSAgICAgICAgY29s
bGFwc2UoZmFsc2UpOwotCisgICAgbV9lbmQuc2V0KFdURk1vdmUoY29udGFpbmVyKSwgb2Zmc2V0
LCBjaGlsZE5vZGUucmVsZWFzZVJldHVyblZhbHVlKCkpOworICAgIGlmICghaXNfbHRlcShkb2N1
bWVudE9yZGVyKG1ha2VCb3VuZGFyeVBvaW50KG1fc3RhcnQpLCBtYWtlQm91bmRhcnlQb2ludCht
X2VuZCkpKSkKKyAgICAgICAgbV9zdGFydCA9IG1fZW5kOworICAgIHVwZGF0ZURvY3VtZW50KCk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTY4LDIzNyArMTQxLDEwMyBAQCB2b2lkIFJhbmdl
Ojpjb2xsYXBzZShib29sIHRvU3RhcnQpCiAgICAgICAgIG1fc3RhcnQgPSBtX2VuZDsKIH0KIAot
RXhjZXB0aW9uT3I8Ym9vbD4gUmFuZ2U6OmlzUG9pbnRJblJhbmdlKE5vZGUmIHJlZk5vZGUsIHVu
c2lnbmVkIG9mZnNldCkKK0V4Y2VwdGlvbk9yPGJvb2w+IFJhbmdlOjppc1BvaW50SW5SYW5nZShO
b2RlJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICBpZiAoJnJlZk5vZGUuZG9j
dW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIGNoZWNrTm9kZVJlc3VsdCA9IGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0
KTsKLSAgICBpZiAoY2hlY2tOb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIC8v
IERPTTQgc3BlYyByZXF1aXJlcyB1cyB0byBjaGVjayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0
IGNvbnRhaW5lciBoYXZlIHRoZSBzYW1lIHJvb3QgZmlyc3QKLSAgICAgICAgLy8gYnV0IHdlIGRv
IGl0IGluIHRoZSByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4g
Y29tbW9uIGNhc2UuCi0gICAgICAgIGlmICghY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmVmTm9k
ZSwgc3RhcnRDb250YWluZXIoKSkpCisgICAgaWYgKGF1dG8gY2hlY2tSZXN1bHQgPSBjaGVja05v
ZGVPZmZzZXRQYWlyKGNvbnRhaW5lciwgb2Zmc2V0KTsgY2hlY2tSZXN1bHQuaGFzRXhjZXB0aW9u
KCkpIHsKKyAgICAgICAgLy8gRE9NIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgdGhpcyBjaGVjayBi
ZSBkb25lIGZpcnN0IGJ1dCBzaW5jZSB0aGVyZSBhcmUgbm8gc2lkZSBlZmZlY3RzLAorICAgICAg
ICAvLyB3ZSBjYW4gZG8gaXQgaW4gcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBhbiBleHRyYSByb290
IG5vZGUgY2hlY2sgaW4gdGhlIGNvbW1vbiBjYXNlLgorICAgICAgICBpZiAoJmNvbnRhaW5lci5y
b290Tm9kZSgpICE9ICZzdGFydENvbnRhaW5lcigpLnJvb3ROb2RlKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBjaGVja05vZGVSZXN1bHQucmVsZWFzZUV4Y2Vw
dGlvbigpOworICAgICAgICByZXR1cm4gY2hlY2tSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwog
ICAgIH0KLQotICAgIGF1dG8gc3RhcnRDb21wYXJlUmVzdWx0ID0gY29tcGFyZUJvdW5kYXJ5UG9p
bnRzKCZyZWZOb2RlLCBvZmZzZXQsICZzdGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgp
KTsKLSAgICBpZiAoISghc3RhcnRDb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHN0YXJ0
Q29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+PSAwKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGF1dG8gZW5kQ29tcGFyZVJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50
cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsKLSAg
ICByZXR1cm4gIWVuZENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgZW5kQ29tcGFyZVJl
c3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwOworICAgIHJldHVybiBXZWJDb3JlOjppc1Bv
aW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpLCB7IGNvbnRhaW5lciwgb2Zmc2V0IH0p
OwogfQogCi1FeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiByZWZO
b2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CitFeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNv
bXBhcmVQb2ludChOb2RlJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsKLSAg
ICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNvbXBh
cmVQb2ludAotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgLTEsIDAgb3IgMSBkZXBlbmRpbmcg
b24gaWYgdGhlIHBvaW50IGRlc2NyaWJlZCBieSB0aGUgCi0gICAgLy8gcmVmTm9kZSBub2RlIGFu
ZCBhbiBvZmZzZXQgd2l0aGluIHRoZSBub2RlIGlzIGJlZm9yZSwgc2FtZSBhcywgb3IgYWZ0ZXIg
dGhlIHJhbmdlIHJlc3BlY3RpdmVseS4KLSAgICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAm
b3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgV3JvbmdEb2N1bWVu
dEVycm9yIH07Ci0KLSAgICBhdXRvIGNoZWNrTm9kZVJlc3VsdCA9IGNoZWNrTm9kZVdPZmZzZXQo
cmVmTm9kZSwgb2Zmc2V0KTsKLSAgICBpZiAoY2hlY2tOb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigp
KSB7Ci0gICAgICAgIC8vIERPTTQgc3BlYyByZXF1aXJlcyB1cyB0byBjaGVjayB3aGV0aGVyIHJl
Zk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZlIHRoZSBzYW1lIHJvb3QgZmlyc3QKLSAgICAg
ICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIE8obikgb3Bl
cmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0gICAgICAgIGlmICghcmVmTm9kZS5pc0Nvbm5l
Y3RlZCgpICYmICFjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyZWZOb2RlLCBzdGFydENvbnRhaW5l
cigpKSkKKyAgICBpZiAoYXV0byBjaGVja1Jlc3VsdCA9IGNoZWNrTm9kZU9mZnNldFBhaXIoY29u
dGFpbmVyLCBvZmZzZXQpOyBjaGVja1Jlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICAv
LyBET00gc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGlzIGNoZWNrIGJlIGRvbmUgZmlyc3QgYnV0
IHNpbmNlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMsCisgICAgICAgIC8vIHdlIGNhbiBkbyBp
dCBpbiByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIGFuIGV4dHJhIHJvb3Qgbm9kZSBjaGVjayBpbiB0
aGUgY29tbW9uIGNhc2UuCisgICAgICAgIGlmICgmY29udGFpbmVyLnJvb3ROb2RlKCkgIT0gJnN0
YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKLSAgICAgICAgcmV0dXJuIGNoZWNrTm9kZVJlc3VsdC5y
ZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBjaGVja1Jlc3VsdC5yZWxlYXNlRXhj
ZXB0aW9uKCk7CiAgICAgfQotCi0gICAgLy8gY29tcGFyZSB0byBzdGFydCwgYW5kIHBvaW50IGNv
bWVzIGJlZm9yZQotICAgIGF1dG8gc3RhcnRDb21wYXJlUmVzdWx0ID0gY29tcGFyZUJvdW5kYXJ5
UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZzdGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNl
dCgpKTsKLSAgICBpZiAoc3RhcnRDb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4gc3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBpZiAo
c3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKKyAgICBhdXRvIG9y
ZGVyaW5nID0gZG9jdW1lbnRPcmRlcih7IGNvbnRhaW5lciwgb2Zmc2V0IH0sIG1ha2VTaW1wbGVS
YW5nZSgqdGhpcykpOworICAgIGlmIChpc19sdChvcmRlcmluZykpCiAgICAgICAgIHJldHVybiAt
MTsKLQotICAgIC8vIGNvbXBhcmUgdG8gZW5kLCBhbmQgcG9pbnQgY29tZXMgYWZ0ZXIKLSAgICBh
dXRvIGVuZENvbXBhcmVSZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoJnJlZk5vZGUsIG9m
ZnNldCwgJmVuZENvbnRhaW5lcigpLCBtX2VuZC5vZmZzZXQoKSk7Ci0gICAgaWYgKGVuZENvbXBh
cmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBlbmRDb21wYXJlUmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBpZiAoZW5kQ29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0
dXJuVmFsdWUoKSA+IDApCisgICAgaWYgKGlzX2VxKG9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKGlzX2d0KG9yZGVyaW5nKSkKICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAv
LyBwb2ludCBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoaXMgcmFuZ2UsIG9yIG9uIHRoZSBib3VuZGFy
eSBwb2ludHMKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgV3JvbmdEb2N1
bWVudEVycm9yIH07CiB9CiAKLUV4Y2VwdGlvbk9yPFJhbmdlOjpDb21wYXJlUmVzdWx0cz4gUmFu
Z2U6OmNvbXBhcmVOb2RlKE5vZGUmIHJlZk5vZGUpIGNvbnN0CitFeGNlcHRpb25PcjxSYW5nZTo6
Q29tcGFyZVJlc3VsdHM+IFJhbmdlOjpjb21wYXJlTm9kZShOb2RlJiBub2RlKSBjb25zdAogewor
ICAgIC8vIEZJWE1FOiBUaGlzIGRlcHJlY2F0ZWQgZnVuY3Rpb24gc2hvdWxkIGJlIHJlbW92ZWQu
CisgICAgLy8gV2Ugb3JpZ2luYWxseSBhZGRlZCBpdCBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3aXRo
IEZpcmVmb3guCisgICAgLy8gUmVjZW50IHZlcnNpb25zIG9mIEZpcmVmb3ggaGF2ZSByZW1vdmVk
IGl0LgorCiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL0RPTTpy
YW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgMCwgMSwgMiwgb3Ig
MyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBiZWZvcmUsIGFmdGVyLAotICAgIC8vIGJlZm9yZSBh
bmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5zaWRlIHRoZSByYW5nZSwgcmVzcGVjdGl2ZWx5Ci0K
LSAgICBpZiAoIXJlZk5vZGUuaXNDb25uZWN0ZWQoKSkgewotICAgICAgICAvLyBGaXJlZm94IGRv
ZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNhc2U7IGl0IHJldHVybnMgMC4KLSAg
ICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOwotICAgIH0KKyAgICAvLyBiZWZvcmUgYW5kIGFmdGVy
KHN1cnJvdW5kcyksIG9yIGluc2lkZSB0aGUgcmFuZ2UsIHJlc3BlY3RpdmVseS4KIAotICAgIGlm
ICgmcmVmTm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKLSAgICAgICAgLy8g
RmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBpdCByZXR1
cm5zIDAuCisgICAgaWYgKCFub2RlLmlzQ29ubmVjdGVkKCkgfHwgJm5vZGUuZG9jdW1lbnQoKSAh
PSBtX293bmVyRG9jdW1lbnQucHRyKCkpIHsKKyAgICAgICAgLy8gTWF0Y2ggaGlzdG9yaWNhbCBG
aXJlZm94IGJlaGF2aW9yLgogICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkU7CiAgICAgfQogCi0g
ICAgYXV0byogcGFyZW50Tm9kZSA9IHJlZk5vZGUucGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFy
ZW50Tm9kZSkgewotICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyB0aGUgdG9wIG9mIHRoZSB0cmVl
IHdlIHNob3VsZCByZXR1cm4gTk9ERV9CRUZPUkVfQU5EX0FGVEVSLAotICAgICAgICAvLyBidXQg
d2UgdGhyb3cgdG8gbWF0Y2ggZmlyZWZveCBiZWhhdmlvci4KKyAgICBhdXRvIG5vZGVSYW5nZSA9
IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUobm9kZSk7CisgICAgaWYgKCFub2RlUmFuZ2UpIHsKKyAg
ICAgICAgLy8gTWF0Y2ggaGlzdG9yaWNhbCBGaXJlZm94IGJlaGF2aW9yLgogICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogICAgIH0KLSAgICBhdXRvIG5vZGVJbmRl
eCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwotCi0gICAgYXV0byBub2RlU3RhcnRDb21w
YXJlUmVzdWx0ID0gY29tcGFyZVBvaW50KCpwYXJlbnROb2RlLCBub2RlSW5kZXgpOwotICAgIGlm
IChub2RlU3RhcnRDb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
bm9kZVN0YXJ0Q29tcGFyZVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgYXV0byBub2Rl
RW5kQ29tcGFyZVJlc3VsdCA9IGNvbXBhcmVQb2ludCgqcGFyZW50Tm9kZSwgbm9kZUluZGV4ICsg
MSk7Ci0gICAgaWYgKG5vZGVFbmRDb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4gbm9kZUVuZENvbXBhcmVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotCi0gICAg
Ym9vbCBub2RlU3RhcnRzQmVmb3JlUmFuZ2UgPSBub2RlU3RhcnRDb21wYXJlUmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpIDwgMDsKLSAgICBib29sIG5vZGVFbmRzQWZ0ZXJSYW5nZSA9IG5vZGVF
bmRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMDsKLQotICAgIHJldHVybiBu
b2RlU3RhcnRzQmVmb3JlUmFuZ2UKLSAgICAgICAgPyAobm9kZUVuZHNBZnRlclJhbmdlID8gTk9E
RV9CRUZPUkVfQU5EX0FGVEVSIDogTk9ERV9CRUZPUkUpCi0gICAgICAgIDogKG5vZGVFbmRzQWZ0
ZXJSYW5nZSA/IE5PREVfQUZURVIgOiBOT0RFX0lOU0lERSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Tm9kZSogdG9wKE5vZGUmIG5vZGUpCi17Ci0gICAgYXV0byogdG9wID0gJm5vZGU7Ci0gICAgd2hp
bGUgKGF1dG8qIHBhcmVudCA9IHRvcC0+cGFyZW50Tm9kZSgpKQotICAgICAgICB0b3AgPSBwYXJl
bnQ7Ci0gICAgcmV0dXJuIHRvcDsKLX0KLQotRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21w
YXJlQm91bmRhcnlQb2ludHMoQ29tcGFyZUhvdyBob3csIGNvbnN0IFJhbmdlJiBzb3VyY2VSYW5n
ZSkgY29uc3QKLXsKLSAgICBhdXRvKiB0aGlzQ29udGFpbmVyID0gY29tbW9uQW5jZXN0b3JDb250
YWluZXIoKTsKLSAgICBhdXRvKiBzb3VyY2VDb250YWluZXIgPSBzb3VyY2VSYW5nZS5jb21tb25B
bmNlc3RvckNvbnRhaW5lcigpOwotICAgIGlmICghdGhpc0NvbnRhaW5lciB8fCAhc291cmNlQ29u
dGFpbmVyIHx8ICZ0aGlzQ29udGFpbmVyLT5kb2N1bWVudCgpICE9ICZzb3VyY2VDb250YWluZXIt
PmRvY3VtZW50KCkgfHwgdG9wKCp0aGlzQ29udGFpbmVyKSAhPSB0b3AoKnNvdXJjZUNvbnRhaW5l
cikpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKLQot
ICAgIHN3aXRjaCAoaG93KSB7Ci0gICAgY2FzZSBTVEFSVF9UT19TVEFSVDoKLSAgICAgICAgcmV0
dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS5tX3N0YXJ0KTsK
LSAgICBjYXNlIFNUQVJUX1RPX0VORDoKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhtX2VuZCwgc291cmNlUmFuZ2UubV9zdGFydCk7Ci0gICAgY2FzZSBFTkRfVE9fRU5EOgot
ICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS5t
X2VuZCk7Ci0gICAgY2FzZSBFTkRfVE9fU1RBUlQ6Ci0gICAgICAgIHJldHVybiBjb21wYXJlQm91
bmRhcnlQb2ludHMobV9zdGFydCwgc291cmNlUmFuZ2UubV9lbmQpOwotICAgIH0KIAotICAgIHJl
dHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OworICAgIGF1dG8gc3RhcnRPcmRlcmluZyA9
IGRvY3VtZW50T3JkZXIobm9kZVJhbmdlLT5zdGFydCwgbWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFy
dCkpOworICAgIGF1dG8gZW5kT3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKG5vZGVSYW5nZS0+ZW5k
LCBtYWtlQm91bmRhcnlQb2ludChtX2VuZCkpOworICAgIGlmIChpc19ndGVxKHN0YXJ0T3JkZXJp
bmcpICYmIGlzX2x0ZXEoZW5kT3JkZXJpbmcpKQorICAgICAgICByZXR1cm4gTk9ERV9JTlNJREU7
CisgICAgaWYgKGlzX2x0ZXEoc3RhcnRPcmRlcmluZykgJiYgaXNfZ3RlcShlbmRPcmRlcmluZykp
CisgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRV9BTkRfQUZURVI7CisgICAgaWYgKGlzX2x0ZXEo
c3RhcnRPcmRlcmluZykpCisgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKKyAgICBpZiAoaXNf
Z3RlcShlbmRPcmRlcmluZykpCisgICAgICAgIHJldHVybiBOT0RFX0FGVEVSOworICAgIHJldHVy
biBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKIH0KIAotRXhjZXB0aW9uT3I8c2hv
cnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9y
dCBob3csIGNvbnN0IFJhbmdlJiBzb3VyY2VSYW5nZSkgY29uc3QKK0V4Y2VwdGlvbk9yPHNob3J0
PiBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHVuc2lnbmVkIHNob3J0IGhvdywgY29uc3Qg
UmFuZ2UmIHNvdXJjZVJhbmdlKSBjb25zdAogeworICAgIGNvbnN0IFJhbmdlQm91bmRhcnlQb2lu
dCogdGhpc1BvaW50OworICAgIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCogb3RoZXJQb2ludDsK
ICAgICBzd2l0Y2ggKGhvdykgewogICAgIGNhc2UgU1RBUlRfVE9fU1RBUlQ6CisgICAgICAgIHRo
aXNQb2ludCA9ICZtX3N0YXJ0OworICAgICAgICBvdGhlclBvaW50ID0gJnNvdXJjZVJhbmdlLm1f
c3RhcnQ7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU1RBUlRfVE9fRU5EOgorICAgICAgICB0
aGlzUG9pbnQgPSAmbV9lbmQ7CisgICAgICAgIG90aGVyUG9pbnQgPSAmc291cmNlUmFuZ2UubV9z
dGFydDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFTkRfVE9fRU5EOgorICAgICAgICB0aGlz
UG9pbnQgPSAmbV9lbmQ7CisgICAgICAgIG90aGVyUG9pbnQgPSAmc291cmNlUmFuZ2UubV9lbmQ7
CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRU5EX1RPX1NUQVJUOgotICAgICAgICByZXR1cm4g
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHN0YXRpY19jYXN0PENvbXBhcmVIb3c+KGhvdyksIHNvdXJj
ZVJhbmdlKTsKKyAgICAgICAgdGhpc1BvaW50ID0gJm1fc3RhcnQ7CisgICAgICAgIG90aGVyUG9p
bnQgPSAmc291cmNlUmFuZ2UubV9lbmQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogICAgIH0KLSAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKLX0KLQotRXhjZXB0aW9u
T3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoTm9kZSogY29udGFpbmVyQSwg
dW5zaWduZWQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgdW5zaWduZWQgb2Zmc2V0QikKLXsK
LSAgICBBU1NFUlQoY29udGFpbmVyQSk7Ci0gICAgQVNTRVJUKGNvbnRhaW5lckIpOwotCi0gICAg
aWYgKCFjb250YWluZXJBKQorICAgIGF1dG8gb3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKG1ha2VC
b3VuZGFyeVBvaW50KCp0aGlzUG9pbnQpLCBtYWtlQm91bmRhcnlQb2ludCgqb3RoZXJQb2ludCkp
OworICAgIGlmIChpc19sdChvcmRlcmluZykpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAo
IWNvbnRhaW5lckIpCisgICAgaWYgKGlzX2VxKG9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKGlzX2d0KG9yZGVyaW5nKSkKICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAvLyBz
ZWUgRE9NMiB0cmF2ZXJzYWwgJiByYW5nZSBzZWN0aW9uIDIuNQotCi0gICAgLy8gY2FzZSAxOiBi
b3RoIHBvaW50cyBoYXZlIHRoZSBzYW1lIGNvbnRhaW5lcgotICAgIGlmIChjb250YWluZXJBID09
IGNvbnRhaW5lckIpIHsKLSAgICAgICAgaWYgKG9mZnNldEEgPT0gb2Zmc2V0QikKLSAgICAgICAg
ICAgIHJldHVybiAwOyAvLyBBIGlzIGVxdWFsIHRvIEIKLSAgICAgICAgaWYgKG9mZnNldEEgPCBv
ZmZzZXRCKQotICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBBIGlzIGJlZm9yZSBCCi0gICAgICAg
IHJldHVybiAxOyAvLyBBIGlzIGFmdGVyIEIKLSAgICB9Ci0KLSAgICAvLyBjYXNlIDI6IG5vZGUg
QyAoY29udGFpbmVyIEIgb3IgYW4gYW5jZXN0b3IpIGlzIGEgY2hpbGQgbm9kZSBvZiBBCi0gICAg
Tm9kZSogYyA9IGNvbnRhaW5lckI7Ci0gICAgd2hpbGUgKGMgJiYgYy0+cGFyZW50Tm9kZSgpICE9
IGNvbnRhaW5lckEpCi0gICAgICAgIGMgPSBjLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKGMpIHsK
LSAgICAgICAgdW5zaWduZWQgb2Zmc2V0QyA9IDA7Ci0gICAgICAgIE5vZGUqIG4gPSBjb250YWlu
ZXJBLT5maXJzdENoaWxkKCk7Ci0gICAgICAgIHdoaWxlIChuICE9IGMgJiYgb2Zmc2V0QyA8IG9m
ZnNldEEpIHsKLSAgICAgICAgICAgIG9mZnNldEMrKzsKLSAgICAgICAgICAgIG4gPSBuLT5uZXh0
U2libGluZygpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvZmZzZXRBIDw9IG9mZnNldEMpCi0g
ICAgICAgICAgICByZXR1cm4gLTE7IC8vIEEgaXMgYmVmb3JlIEIKLSAgICAgICAgcmV0dXJuIDE7
IC8vIEEgaXMgYWZ0ZXIgQgotICAgIH0KLQotICAgIC8vIGNhc2UgMzogbm9kZSBDIChjb250YWlu
ZXIgQSBvciBhbiBhbmNlc3RvcikgaXMgYSBjaGlsZCBub2RlIG9mIEIKLSAgICBjID0gY29udGFp
bmVyQTsKLSAgICB3aGlsZSAoYyAmJiBjLT5wYXJlbnROb2RlKCkgIT0gY29udGFpbmVyQikKLSAg
ICAgICAgYyA9IGMtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoYykgewotICAgICAgICB1bnNpZ25l
ZCBvZmZzZXRDID0gMDsKLSAgICAgICAgTm9kZSogbiA9IGNvbnRhaW5lckItPmZpcnN0Q2hpbGQo
KTsKLSAgICAgICAgd2hpbGUgKG4gIT0gYyAmJiBvZmZzZXRDIDwgb2Zmc2V0QikgewotICAgICAg
ICAgICAgb2Zmc2V0QysrOwotICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG9mZnNldEMgPCBvZmZzZXRCKQotICAgICAgICAgICAgcmV0dXJu
IC0xOyAvLyBBIGlzIGJlZm9yZSBCCi0gICAgICAgIHJldHVybiAxOyAvLyBBIGlzIGFmdGVyIEIK
LSAgICB9Ci0KLSAgICAvLyBjYXNlIDQ6IGNvbnRhaW5lcnMgQSAmIEIgYXJlIHNpYmxpbmdzLCBv
ciBjaGlsZHJlbiBvZiBzaWJsaW5ncwotICAgIC8vICMjIyB3ZSBuZWVkIHRvIGRvIGEgdHJhdmVy
c2FsIGhlcmUgaW5zdGVhZAotICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNp
dmVBbmNlc3RvcigqY29udGFpbmVyQSwgKmNvbnRhaW5lckIpOwotICAgIGlmICghY29tbW9uQW5j
ZXN0b3IpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsK
LSAgICBOb2RlKiBjaGlsZEEgPSBjb250YWluZXJBOwotICAgIHdoaWxlIChjaGlsZEEgJiYgY2hp
bGRBLT5wYXJlbnROb2RlKCkgIT0gY29tbW9uQW5jZXN0b3IpCi0gICAgICAgIGNoaWxkQSA9IGNo
aWxkQS0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghY2hpbGRBKQotICAgICAgICBjaGlsZEEgPSBj
b21tb25BbmNlc3Rvci5nZXQoKTsKLSAgICBOb2RlKiBjaGlsZEIgPSBjb250YWluZXJCOwotICAg
IHdoaWxlIChjaGlsZEIgJiYgY2hpbGRCLT5wYXJlbnROb2RlKCkgIT0gY29tbW9uQW5jZXN0b3Ip
Ci0gICAgICAgIGNoaWxkQiA9IGNoaWxkQi0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghY2hpbGRC
KQotICAgICAgICBjaGlsZEIgPSBjb21tb25BbmNlc3Rvci5nZXQoKTsKLQotICAgIGlmIChjaGls
ZEEgPT0gY2hpbGRCKQotICAgICAgICByZXR1cm4gMDsgLy8gQSBpcyBlcXVhbCB0byBCCi0KLSAg
ICBOb2RlKiBuID0gY29tbW9uQW5jZXN0b3ItPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAobikg
ewotICAgICAgICBpZiAobiA9PSBjaGlsZEEpCi0gICAgICAgICAgICByZXR1cm4gLTE7IC8vIEEg
aXMgYmVmb3JlIEIKLSAgICAgICAgaWYgKG4gPT0gY2hpbGRCKQotICAgICAgICAgICAgcmV0dXJu
IDE7IC8vIEEgaXMgYWZ0ZXIgQgotICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICB9
Ci0KLSAgICAvLyBTaG91bGQgbmV2ZXIgcmVhY2ggdGhpcyBwb2ludC4KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdl
Ojpjb21wYXJlQm91bmRhcnlQb2ludHMoY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFy
eUEsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlCKQotewotICAgIHJldHVybiBj
b21wYXJlQm91bmRhcnlQb2ludHMoYm91bmRhcnlBLmNvbnRhaW5lcigpLCBib3VuZGFyeUEub2Zm
c2V0KCksIGJvdW5kYXJ5Qi5jb250YWluZXIoKSwgYm91bmRhcnlCLm9mZnNldCgpKTsKLX0KLQot
Ym9vbCBSYW5nZTo6Ym91bmRhcnlQb2ludHNWYWxpZCgpIGNvbnN0Ci17Ci0gICAgYXV0byByZXN1
bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFydCwgbV9lbmQpOwotICAgIHJldHVybiAh
cmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAw
OworICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKIH0KIAogRXhj
ZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OmRlbGV0ZUNvbnRlbnRzKCkKQEAgLTQwOSwyNiArMjQ4LDkg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OmRlbGV0ZUNvbnRlbnRzKCkKICAgICByZXR1cm4g
eyB9OwogfQogCi1FeGNlcHRpb25Pcjxib29sPiBSYW5nZTo6aW50ZXJzZWN0c05vZGUoTm9kZSYg
cmVmTm9kZSkgY29uc3QKK2Jvb2wgUmFuZ2U6OmludGVyc2VjdHNOb2RlKE5vZGUmIG5vZGUpIGNv
bnN0CiB7Ci0gICAgaWYgKCFyZWZOb2RlLmlzQ29ubmVjdGVkKCkgfHwgJnJlZk5vZGUuZG9jdW1l
bnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvKiBwYXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnRO
b2RlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IHJl
Zk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwotCi0gICAgLy8gSWYgKHBhcmVudE5vZGUsIG5vZGVJ
bmRleCkgaXMgYmVmb3JlIGVuZCBhbmQgKHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEpIGlzIGFm
dGVyIHN0YXJ0LCByZXR1cm4gdHJ1ZS4KLSAgICAvLyBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4K
LSAgICBhdXRvIGNvbXBhcmVFbmRSZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMocGFyZW50
Tm9kZSwgbm9kZUluZGV4LCBtX2VuZC5jb250YWluZXIoKSwgbV9lbmQub2Zmc2V0KCkpOwotICAg
IGlmIChjb21wYXJlRW5kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gY29t
cGFyZUVuZFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgYXV0byBjb21wYXJlU3RhcnRS
ZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwg
bV9zdGFydC5jb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSk7Ci0gICAgaWYgKGNvbXBhcmVT
dGFydFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVTdGFydFJl
c3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGNvbXBhcmVFbmRSZXN1bHQucmV0
dXJuVmFsdWUoKSA9PSAtMSAmJiBjb21wYXJlU3RhcnRSZXN1bHQucmV0dXJuVmFsdWUoKSA9PSAx
OworICAgIHJldHVybiBpbnRlcnNlY3RzKG1ha2VTaW1wbGVSYW5nZSgqdGhpcyksIG5vZGUpOwog
fQogCiBzdGF0aWMgaW5saW5lIE5vZGUqIGhpZ2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdChO
b2RlKiBub2RlLCBOb2RlKiBjb21tb25Sb290KQpAQCAtNDY0LDMyICsyODYsMTEgQEAgc3RhdGlj
IGlubGluZSBOb2RlKiBjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldChOb2RlKiBjb250YWlu
ZXIsIHVuc2lnbmVkIG9mZnMKICAgICByZXR1cm4gY29udGFpbmVyOwogfQogCi1zdGF0aWMgaW5s
aW5lIHVuc2lnbmVkIGxlbmd0aE9mQ29udGVudHNJbk5vZGUoTm9kZSYgbm9kZSkKLXsKLSAgICAv
LyBUaGlzIHN3aXRjaCBzdGF0ZW1lbnQgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggdGhhdCBvZiBS
YW5nZTo6cHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMuCi0gICAgc3dpdGNoIChub2RlLm5v
ZGVUeXBlKCkpIHsKLSAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKLSAgICBjYXNl
IE5vZGU6OkFUVFJJQlVURV9OT0RFOgotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIE5vZGU6
OlRFWFRfTk9ERToKLSAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKLSAgICBjYXNl
IE5vZGU6OkNPTU1FTlRfTk9ERToKLSAgICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJ
T05fTk9ERToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpLmxl
bmd0aCgpOwotICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6RE9D
VU1FTlRfTk9ERToKLSAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6Ci0gICAg
ICAgIHJldHVybiBkb3duY2FzdDxDb250YWluZXJOb2RlPihub2RlKS5jb3VudENoaWxkTm9kZXMo
KTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
IEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6OnByb2Nlc3NDb250
ZW50cyhBY3Rpb25UeXBlIGFjdGlvbikKIHsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQ7CiAgICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBDbG9uZSkK
LSAgICAgICAgZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUob3duZXJEb2N1bWVu
dCgpKTsKKyAgICAgICAgZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUobV9vd25l
ckRvY3VtZW50KTsKIAogICAgIGlmIChjb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZyYWdt
ZW50OwpAQCAtNTA5LDggKzMxMCw4IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50Pj4gUmFuZ2U6OnByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlIGFjdGlvbikKICAgICBSYW5n
ZUJvdW5kYXJ5UG9pbnQgb3JpZ2luYWxFbmQobV9lbmQpOwogCiAgICAgLy8gd2hhdCBpcyB0aGUg
aGlnaGVzdCBub2RlIHRoYXQgcGFydGlhbGx5IHNlbGVjdHMgdGhlIHN0YXJ0IC8gZW5kIG9mIHRo
ZSByYW5nZT8KLSAgICBSZWZQdHI8Tm9kZT4gcGFydGlhbFN0YXJ0ID0gaGlnaGVzdEFuY2VzdG9y
VW5kZXJDb21tb25Sb290KG9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCksIGNvbW1vblJvb3QuZ2V0
KCkpOwotICAgIFJlZlB0cjxOb2RlPiBwYXJ0aWFsRW5kID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJD
b21tb25Sb290KG9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBjb21tb25Sb290LmdldCgpKTsKKyAg
ICBSZWZQdHI8Tm9kZT4gcGFydGlhbFN0YXJ0ID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21tb25S
b290KCZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpLCBjb21tb25Sb290LmdldCgpKTsKKyAgICBS
ZWZQdHI8Tm9kZT4gcGFydGlhbEVuZCA9IGhpZ2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdCgm
b3JpZ2luYWxFbmQuY29udGFpbmVyKCksIGNvbW1vblJvb3QuZ2V0KCkpOwogCiAgICAgLy8gU3Rh
cnQgYW5kIGVuZCBjb250YWluZXJzIGFyZSBkaWZmZXJlbnQuCiAgICAgLy8gVGhlcmUgYXJlIHRo
cmVlIHBvc3NpYmlsaXRpZXMgaGVyZToKQEAgLTUzMywyOCArMzM0LDI4IEBAIEV4Y2VwdGlvbk9y
PFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6OnByb2Nlc3NDb250ZW50cyhBY3Rpb25U
eXBlIGFjdGlvbikKICAgICAvLyBhZnRlciBhbnkgRE9NIG11dGF0aW9uIGV2ZW50LCBhdCB2YXJp
b3VzIHN0YWdlcyBiZWxvdy4gU2VlIHdlYmtpdCBidWcgNjAzNTAuCiAKICAgICBSZWZQdHI8Tm9k
ZT4gbGVmdENvbnRlbnRzOwotICAgIGlmIChvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpICE9IGNv
bW1vblJvb3QgJiYgY29tbW9uUm9vdC0+Y29udGFpbnMob3JpZ2luYWxTdGFydC5jb250YWluZXIo
KSkpIHsKLSAgICAgICAgYXV0byBmaXJzdFJlc3VsdCA9IHByb2Nlc3NDb250ZW50c0JldHdlZW5P
ZmZzZXRzKGFjdGlvbiwgbnVsbHB0ciwgb3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgb3JpZ2lu
YWxTdGFydC5vZmZzZXQoKSwgbGVuZ3RoT2ZDb250ZW50c0luTm9kZSgqb3JpZ2luYWxTdGFydC5j
b250YWluZXIoKSkpOwotICAgICAgICBhdXRvIHNlY29uZFJlc3VsdCA9IHByb2Nlc3NBbmNlc3Rv
cnNBbmRUaGVpclNpYmxpbmdzKGFjdGlvbiwgb3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgUHJv
Y2Vzc0NvbnRlbnRzRm9yd2FyZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0
KCkpOworICAgIGlmICgmb3JpZ2luYWxTdGFydC5jb250YWluZXIoKSAhPSBjb21tb25Sb290ICYm
IGNvbW1vblJvb3QtPmNvbnRhaW5zKCZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpKSkgeworICAg
ICAgICBhdXRvIGZpcnN0UmVzdWx0ID0gcHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMoYWN0
aW9uLCBudWxscHRyLCAmb3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgb3JpZ2luYWxTdGFydC5v
ZmZzZXQoKSwgb3JpZ2luYWxTdGFydC5jb250YWluZXIoKS5sZW5ndGgoKSk7CisgICAgICAgIGF1
dG8gc2Vjb25kUmVzdWx0ID0gcHJvY2Vzc0FuY2VzdG9yc0FuZFRoZWlyU2libGluZ3MoYWN0aW9u
LCAmb3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgUHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCwgV1RG
TW92ZShmaXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0KCkpOwogICAgICAgICAvLyBGSVhNRTog
QSBiaXQgcGVjdWxpYXIgdGhhdCB3ZSBzaWxlbnRseSBpZ25vcmUgdGhlIGV4Y2VwdGlvbiBoZXJl
LCBidXQgd2UgZG8gaGF2ZSBhdCBsZWFzdCBzb21lIHJlZ3Jlc3Npb24gdGVzdHMgdGhhdCByZWx5
IG9uIHRoaXMgYmVoYXZpb3IuCiAgICAgICAgIGlmICghc2Vjb25kUmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKQogICAgICAgICAgICAgbGVmdENvbnRlbnRzID0gc2Vjb25kUmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpOwogICAgIH0KIAogICAgIFJlZlB0cjxOb2RlPiByaWdodENvbnRlbnRzOwotICAg
IGlmICgmZW5kQ29udGFpbmVyKCkgIT0gY29tbW9uUm9vdCAmJiBjb21tb25Sb290LT5jb250YWlu
cyhvcmlnaW5hbEVuZC5jb250YWluZXIoKSkpIHsKLSAgICAgICAgYXV0byBmaXJzdFJlc3VsdCA9
IHByb2Nlc3NDb250ZW50c0JldHdlZW5PZmZzZXRzKGFjdGlvbiwgbnVsbHB0ciwgb3JpZ2luYWxF
bmQuY29udGFpbmVyKCksIDAsIG9yaWdpbmFsRW5kLm9mZnNldCgpKTsKLSAgICAgICAgYXV0byBz
ZWNvbmRSZXN1bHQgPSBwcm9jZXNzQW5jZXN0b3JzQW5kVGhlaXJTaWJsaW5ncyhhY3Rpb24sIG9y
aWdpbmFsRW5kLmNvbnRhaW5lcigpLCBQcm9jZXNzQ29udGVudHNCYWNrd2FyZCwgV1RGTW92ZShm
aXJzdFJlc3VsdCksIGNvbW1vblJvb3QuZ2V0KCkpOworICAgIGlmICgmZW5kQ29udGFpbmVyKCkg
IT0gY29tbW9uUm9vdCAmJiBjb21tb25Sb290LT5jb250YWlucygmb3JpZ2luYWxFbmQuY29udGFp
bmVyKCkpKSB7CisgICAgICAgIGF1dG8gZmlyc3RSZXN1bHQgPSBwcm9jZXNzQ29udGVudHNCZXR3
ZWVuT2Zmc2V0cyhhY3Rpb24sIG51bGxwdHIsICZvcmlnaW5hbEVuZC5jb250YWluZXIoKSwgMCwg
b3JpZ2luYWxFbmQub2Zmc2V0KCkpOworICAgICAgICBhdXRvIHNlY29uZFJlc3VsdCA9IHByb2Nl
c3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKGFjdGlvbiwgJm9yaWdpbmFsRW5kLmNvbnRhaW5l
cigpLCBQcm9jZXNzQ29udGVudHNCYWNrd2FyZCwgV1RGTW92ZShmaXJzdFJlc3VsdCksIGNvbW1v
blJvb3QuZ2V0KCkpOwogICAgICAgICAvLyBGSVhNRTogQSBiaXQgcGVjdWxpYXIgdGhhdCB3ZSBz
aWxlbnRseSBpZ25vcmUgdGhlIGV4Y2VwdGlvbiBoZXJlLCBidXQgd2UgZG8gaGF2ZSBhdCBsZWFz
dCBzb21lIHJlZ3Jlc3Npb24gdGVzdHMgdGhhdCByZWx5IG9uIHRoaXMgYmVoYXZpb3IuCiAgICAg
ICAgIGlmICghc2Vjb25kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmlnaHRD
b250ZW50cyA9IHNlY29uZFJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKICAgICB9CiAKICAg
ICAvLyBkZWxldGUgYWxsIGNoaWxkcmVuIG9mIGNvbW1vblJvb3QgYmV0d2VlbiB0aGUgc3RhcnQg
YW5kIGVuZCBjb250YWluZXIKLSAgICBSZWZQdHI8Tm9kZT4gcHJvY2Vzc1N0YXJ0ID0gY2hpbGRP
ZkNvbW1vblJvb3RCZWZvcmVPZmZzZXQob3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgb3JpZ2lu
YWxTdGFydC5vZmZzZXQoKSwgY29tbW9uUm9vdC5nZXQoKSk7Ci0gICAgaWYgKHByb2Nlc3NTdGFy
dCAmJiBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpICE9IGNvbW1vblJvb3QpIC8vIHByb2Nlc3NT
dGFydCBjb250YWlucyBub2RlcyBiZWZvcmUgbV9zdGFydC4KKyAgICBSZWZQdHI8Tm9kZT4gcHJv
Y2Vzc1N0YXJ0ID0gY2hpbGRPZkNvbW1vblJvb3RCZWZvcmVPZmZzZXQoJm9yaWdpbmFsU3RhcnQu
Y29udGFpbmVyKCksIG9yaWdpbmFsU3RhcnQub2Zmc2V0KCksIGNvbW1vblJvb3QuZ2V0KCkpOwor
ICAgIGlmIChwcm9jZXNzU3RhcnQgJiYgJm9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCkgIT0gY29t
bW9uUm9vdCkgLy8gcHJvY2Vzc1N0YXJ0IGNvbnRhaW5zIG5vZGVzIGJlZm9yZSBtX3N0YXJ0Lgog
ICAgICAgICBwcm9jZXNzU3RhcnQgPSBwcm9jZXNzU3RhcnQtPm5leHRTaWJsaW5nKCk7Ci0gICAg
UmVmUHRyPE5vZGU+IHByb2Nlc3NFbmQgPSBjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldChv
cmlnaW5hbEVuZC5jb250YWluZXIoKSwgb3JpZ2luYWxFbmQub2Zmc2V0KCksIGNvbW1vblJvb3Qu
Z2V0KCkpOworICAgIFJlZlB0cjxOb2RlPiBwcm9jZXNzRW5kID0gY2hpbGRPZkNvbW1vblJvb3RC
ZWZvcmVPZmZzZXQoJm9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBvcmlnaW5hbEVuZC5vZmZzZXQo
KSwgY29tbW9uUm9vdC5nZXQoKSk7CiAKICAgICAvLyBDb2xsYXBzZSB0aGUgcmFuZ2UsIG1ha2lu
ZyBzdXJlIHRoYXQgdGhlIHJlc3VsdCBpcyBub3Qgd2l0aGluIGEgbm9kZSB0aGF0IHdhcyBwYXJ0
aWFsbHkgc2VsZWN0ZWQuCiAgICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBE
ZWxldGUpIHsKQEAgLTYxOSw3ICs0MjAsNiBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmUHRyPE5v
ZGU+PiBwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cyhSYW5nZTo6QWN0aW9uVHlwZQogCiAg
ICAgUmVmUHRyPE5vZGU+IHJlc3VsdDsKIAotICAgIC8vIFRoaXMgc3dpdGNoIHN0YXRlbWVudCBt
dXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGF0IG9mIGxlbmd0aE9mQ29udGVudHNJbk5vZGUuCiAg
ICAgc3dpdGNoIChjb250YWluZXItPm5vZGVUeXBlKCkpIHsKICAgICBjYXNlIE5vZGU6OlRFWFRf
Tk9ERToKICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKQEAgLTg2OCwzMCArNjY4
LDE3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjppbnNlcnROb2RlKFJlZjxOb2RlPiYmIG5v
ZGUpCiAKIFN0cmluZyBSYW5nZTo6dG9TdHJpbmcoKSBjb25zdAogeworICAgIGF1dG8gcmFuZ2Ug
PSBtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpOwogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQot
ICAgIE5vZGUqIHBhc3RMYXN0ID0gcGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2Rl
ID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3Q7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KCpub2RlKSkgewotICAgICAgICBhdXRvIHR5cGUgPSBub2RlLT5ub2RlVHlwZSgpOwotICAg
ICAgICBpZiAodHlwZSA9PSBOb2RlOjpURVhUX05PREUgfHwgdHlwZSA9PSBOb2RlOjpDREFUQV9T
RUNUSU9OX05PREUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gbm9kZSA9PSAmc3Rh
cnRDb250YWluZXIoKSA/IG1fc3RhcnQub2Zmc2V0KCkgOiAwVTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGVuZCA9IG5vZGUgPT0gJmVuZENvbnRhaW5lcigpID8gc3RkOjptYXgoc3RhcnQsIG1fZW5k
Lm9mZnNldCgpKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kU3Vic3RyaW5nKGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCpu
b2RlKS5kYXRhKCksIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisgICAgZm9yIChhdXRvJiBub2RlIDog
aW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkg
eworICAgICAgICAgICAgYXV0byBvZmZzZXRSYW5nZSA9IGNoYXJhY3RlckRhdGFPZmZzZXRSYW5n
ZShyYW5nZSwgbm9kZSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFN1YnN0cmluZyhkb3du
Y2FzdDxUZXh0Pihub2RlKS5kYXRhKCksIG9mZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5l
bmQgLSBvZmZzZXRSYW5nZS5zdGFydCk7CiAgICAgICAgIH0KICAgICB9Ci0KICAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOwogfQogCi1TdHJpbmcgUmFuZ2U6OnRleHQoKSBjb25zdAotewot
ICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIGxheW91dCwgc2luY2UgcGxhaW5UZXh0IHVzZXMgbGlu
ZSBib3hlcyBpbiB0aGUgcmVuZGVyIHRyZWUuCi0gICAgLy8gRklYTUU6IEFzIHdpdGggaW5uZXJU
ZXh0LCB3ZSdkIGxpa2UgdGhpcyB0byB3b3JrIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIHJlbmRlciBv
YmplY3RzLgotICAgIHN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsK
LQotICAgIHJldHVybiBwbGFpblRleHQobWFrZVNpbXBsZVJhbmdlKCp0aGlzKSk7Ci19Ci0KIC8v
IGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9ET00tUGFyc2luZy8jd2lkbC1SYW5nZS1jcmVhdGVDb250
ZXh0dWFsRnJhZ21lbnQtRG9jdW1lbnRGcmFnbWVudC1ET01TdHJpbmctZnJhZ21lbnQKIEV4Y2Vw
dGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFn
bWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCkKIHsKQEAgLTkwOCwxMiArNjk1LDcgQEAgRXhjZXB0
aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdt
ZW50KGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gV2ViQ29yZTo6Y3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50KCplbGVtZW50LCBtYXJrdXAsIEFsbG93U2NyaXB0aW5nQ29udGVudEFuZERvTm90TWFy
a0FscmVhZHlTdGFydGVkKTsKIH0KIAotdm9pZCBSYW5nZTo6ZGV0YWNoKCkKLXsKLSAgICAvLyBU
aGlzIGlzIG5vdyBhIG5vLW9wIGFzIHBlciB0aGUgRE9NIHNwZWNpZmljYXRpb24uCi19Ci0KLUV4
Y2VwdGlvbk9yPE5vZGUqPiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlJiBub2RlLCB1bnNp
Z25lZCBvZmZzZXQpIGNvbnN0CitFeGNlcHRpb25PcjxOb2RlKj4gUmFuZ2U6OmNoZWNrTm9kZU9m
ZnNldFBhaXIoTm9kZSYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdAogewogICAgIHN3aXRj
aCAobm9kZS5ub2RlVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9O
T0RFOgpAQCAtOTQzLDU5ICs3MjUsNTUgQEAgRXhjZXB0aW9uT3I8Tm9kZSo+IFJhbmdlOjpjaGVj
a05vZGVXT2Zmc2V0KE5vZGUmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIAogUmVmPFJh
bmdlPiBSYW5nZTo6Y2xvbmVSYW5nZSgpIGNvbnN0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBjcmVh
dGUob3duZXJEb2N1bWVudCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZShtX293bmVyRG9j
dW1lbnQpOwogICAgIHJlc3VsdC0+c2V0U3RhcnQoc3RhcnRDb250YWluZXIoKSwgbV9zdGFydC5v
ZmZzZXQoKSk7CiAgICAgcmVzdWx0LT5zZXRFbmQoZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNl
dCgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6
c2V0U3RhcnRBZnRlcihOb2RlJiByZWZOb2RlKQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNl
dFN0YXJ0QWZ0ZXIoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgp
KQorICAgIGF1dG8gcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwotICAg
IHJldHVybiBzZXRTdGFydCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5v
ZGVJbmRleCgpICsgMSk7CisgICAgcmV0dXJuIHNldFN0YXJ0KCpwYXJlbnQsIG5vZGUuY29tcHV0
ZU5vZGVJbmRleCgpICsgMSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmRC
ZWZvcmUoTm9kZSYgcmVmTm9kZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmRCZWZv
cmUoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKQorICAgIGF1
dG8gcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwotICAgIHJldHVybiBz
ZXRFbmQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSk7
CisgICAgcmV0dXJuIHNldEVuZCgqcGFyZW50LCBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKSk7CiB9
CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmRBZnRlcihOb2RlJiByZWZOb2RlKQor
RXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldEVuZEFmdGVyKE5vZGUmIG5vZGUpCiB7Ci0gICAg
aWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkKKyAgICBhdXRvIHBhcmVudCA9IG5vZGUucGFyZW50
Tm9kZSgpOworICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZE5vZGVUeXBlRXJyb3IgfTsKLSAgICByZXR1cm4gc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5v
ZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCkgKyAxKTsKKyAgICByZXR1cm4gc2V0RW5k
KCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSk7CiB9CiAKLUV4Y2VwdGlvbk9y
PHZvaWQ+IFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUmIHJlZk5vZGUpCitFeGNlcHRpb25Pcjx2b2lk
PiBSYW5nZTo6c2VsZWN0Tm9kZShOb2RlJiBub2RlKQogewotICAgIGlmICghcmVmTm9kZS5wYXJl
bnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAo
IXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9y
IH07Ci0KLSAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1bWVudCgpKQot
ICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwotCi0gICAgdW5zaWduZWQg
aW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKLSAgICBhdXRvIHJlc3VsdCA9IHNl
dFN0YXJ0KCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgaW5kZXgpOworICAgIHVuc2lnbmVkIGluZGV4
ID0gbm9kZS5jb21wdXRlTm9kZUluZGV4KCk7CisgICAgYXV0byByZXN1bHQgPSBzZXRTdGFydCgq
cGFyZW50LCBpbmRleCk7CiAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHNldEVuZCgqcmVm
Tm9kZS5wYXJlbnROb2RlKCksIGluZGV4ICsgMSk7CisgICAgcmV0dXJuIHNldEVuZCgqcGFyZW50
LCBpbmRleCArIDEpOwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2VsZWN0Tm9kZUNv
bnRlbnRzKE5vZGUmIHJlZk5vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2VsZWN0Tm9k
ZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKHJlZk5vZGUuaXNEb2N1bWVudFR5cGVO
b2RlKCkpCisgICAgaWYgKG5vZGUuaXNEb2N1bWVudFR5cGVOb2RlKCkpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwogCi0gICAgaWYgKCZvd25lckRv
Y3VtZW50KCkgIT0gJnJlZk5vZGUuZG9jdW1lbnQoKSkKLSAgICAgICAgc2V0RG9jdW1lbnQocmVm
Tm9kZS5kb2N1bWVudCgpKTsKLQotICAgIG1fc3RhcnQuc2V0VG9TdGFydE9mTm9kZShyZWZOb2Rl
KTsKLSAgICBtX2VuZC5zZXRUb0VuZE9mTm9kZShyZWZOb2RlKTsKLQorICAgIG1fc3RhcnQuc2V0
VG9CZWZvcmVDb250ZW50cyhub2RlKTsKKyAgICBtX2VuZC5zZXRUb0FmdGVyQ29udGVudHMobm9k
ZSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTA1MiwzMSArODMwLDEyIEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKE5vZGUmIG5ld1BhcmVudCkKICAgICBy
ZXR1cm4gc2VsZWN0Tm9kZShuZXdQYXJlbnQpOwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5n
ZTo6c2V0U3RhcnRCZWZvcmUoTm9kZSYgcmVmTm9kZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdl
OjpzZXRTdGFydEJlZm9yZShOb2RlJiBub2RlKQogewotICAgIGlmICghcmVmTm9kZS5wYXJlbnRO
b2RlKCkpCisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBh
cmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07
Ci0gICAgcmV0dXJuIHNldFN0YXJ0KCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21w
dXRlTm9kZUluZGV4KCkpOwotfQotCi1Ob2RlKiBSYW5nZTo6Zmlyc3ROb2RlKCkgY29uc3QKLXsK
LSAgICBpZiAoc3RhcnRDb250YWluZXIoKS5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCi0gICAgICAg
IHJldHVybiAmc3RhcnRDb250YWluZXIoKTsKLSAgICBpZiAoTm9kZSogY2hpbGQgPSBzdGFydENv
bnRhaW5lcigpLnRyYXZlcnNlVG9DaGlsZEF0KG1fc3RhcnQub2Zmc2V0KCkpKQotICAgICAgICBy
ZXR1cm4gY2hpbGQ7Ci0gICAgaWYgKCFtX3N0YXJ0Lm9mZnNldCgpKQotICAgICAgICByZXR1cm4g
JnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGlu
Z0NoaWxkcmVuKHN0YXJ0Q29udGFpbmVyKCkpOwotfQotCi1Ob2RlKiBSYW5nZTo6cGFzdExhc3RO
b2RlKCkgY29uc3QKLXsKLSAgICBpZiAoZW5kQ29udGFpbmVyKCkuaXNDaGFyYWN0ZXJEYXRhTm9k
ZSgpKQotICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4o
ZW5kQ29udGFpbmVyKCkpOwotICAgIGlmIChOb2RlKiBjaGlsZCA9IGVuZENvbnRhaW5lcigpLnRy
YXZlcnNlVG9DaGlsZEF0KG1fZW5kLm9mZnNldCgpKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkOwot
ICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihlbmRDb250YWlu
ZXIoKSk7CisgICAgcmV0dXJuIHNldFN0YXJ0KCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRl
eCgpKTsKIH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKQEAgLTExMDEsMTI0ICs4NjAs
NDQgQEAgdm9pZCBSYW5nZTo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBsZW5ndGgpIGNvbnN0CiB9CiAjZW5kaWYKIAotYm9vbCBSYW5nZTo6Y29udGFpbnMoY29uc3Qg
UmFuZ2UmIG90aGVyKSBjb25zdAotewotICAgIGlmIChjb21tb25BbmNlc3RvckNvbnRhaW5lcigp
LT5kb2N1bWVudCgpICE9IG90aGVyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCktPmRvY3VtZW50
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gc3RhcnRUb1N0YXJ0ID0gY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgb3RoZXIpOwotICAgIGlm
IChzdGFydFRvU3RhcnQuaGFzRXhjZXB0aW9uKCkgfHwgc3RhcnRUb1N0YXJ0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBlbmRUb0Vu
ZCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgb3RoZXIpOwotICAg
IHJldHVybiAhZW5kVG9FbmQuaGFzRXhjZXB0aW9uKCkgJiYgZW5kVG9FbmQucmVsZWFzZVJldHVy
blZhbHVlKCkgPj0gMDsKLX0KLQotYm9vbCBSYW5nZTo6Y29udGFpbnMoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBhdXRvIHBvc2l0aW9uUmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2UocG9zaXRpb24pOwotICAgIGlmICghcG9zaXRpb25SYW5nZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb250YWlucyhjcmVhdGVMaXZlUmFuZ2UoKnBvc2l0
aW9uUmFuZ2UpKTsKLX0KLQotYm9vbCBhcmVSYW5nZXNFcXVhbChjb25zdCBSYW5nZSogYSwgY29u
c3QgUmFuZ2UqIGIpCi17Ci0gICAgaWYgKGEgPT0gYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgaWYgKCFhIHx8ICFiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICZhLT5z
dGFydENvbnRhaW5lcigpID09ICZiLT5zdGFydENvbnRhaW5lcigpICYmIGEtPnN0YXJ0T2Zmc2V0
KCkgPT0gYi0+c3RhcnRPZmZzZXQoKSAmJiAmYS0+ZW5kQ29udGFpbmVyKCkgPT0gJmItPmVuZENv
bnRhaW5lcigpICYmIGEtPmVuZE9mZnNldCgpID09IGItPmVuZE9mZnNldCgpOwotfQotCi1ib29s
IHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2UqIGEsIGNvbnN0IFJhbmdlKiBiKQotewotICAgIGlm
ICghYSB8fCAhYikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGEgPT0gYikKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIWNvbm5lY3RlZEluU2FtZVRyZWVTY29wZShh
LT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpLCBiLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigp
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2hvcnQgc3RhcnRUb1N0YXJ0ID0gYS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgKmIpLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpOwotICAgIHNob3J0IGVuZFRvRW5kID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqYikucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0KLSAgICAv
LyBGaXJzdCByYW5nZSBjb250YWlucyB0aGUgc2Vjb25kIHJhbmdlLgotICAgIGlmIChzdGFydFRv
U3RhcnQgPD0gMCAmJiBlbmRUb0VuZCA+PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IC8vIEVuZCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUgc2Vjb25kIHJhbmdlLgotICAgIGlmIChh
LT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKmIpLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpID49IDAgJiYgZW5kVG9FbmQgPD0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICAvLyBTdGFydCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUgc2Vjb25kIHJhbmdlLgot
ICAgIGlmIChzdGFydFRvU3RhcnQgPj0gMCAmJiBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OkVORF9UT19TVEFSVCwgKmIpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDApCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0aWMgaW5saW5lIHZv
aWQgYm91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRh
cnksIENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKLSAgICBpZiAoIWJvdW5kYXJ5LmNoaWxk
QmVmb3JlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkg
IT0gJmNvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuOwotICAgIGJvdW5kYXJ5LmludmFsaWRhdGVP
ZmZzZXQoKTsKKyAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSAmJiAmYm91bmRhcnkuY29u
dGFpbmVyKCkgPT0gJmNvbnRhaW5lcikKKyAgICAgICAgYm91bmRhcnkuaW52YWxpZGF0ZU9mZnNl
dCgpOwogfQogCiB2b2lkIFJhbmdlOjpub2RlQ2hpbGRyZW5DaGFuZ2VkKENvbnRhaW5lck5vZGUm
IGNvbnRhaW5lcikKIHsKLSAgICBBU1NFUlQoJmNvbnRhaW5lci5kb2N1bWVudCgpID09ICZvd25l
ckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmY29udGFpbmVyLmRvY3VtZW50KCkgPT0gbV9vd25l
ckRvY3VtZW50LnB0cigpKTsKICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbkNoYW5nZWQobV9zdGFy
dCwgY29udGFpbmVyKTsKICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbkNoYW5nZWQobV9lbmQsIGNv
bnRhaW5lcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeU5vZGVDaGlsZHJlbldp
bGxCZVJlbW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgQ29udGFpbmVyTm9kZSYg
Y29udGFpbmVyKQorc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJl
UmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBDb250YWluZXJOb2RlJiBjb250
YWluZXJPZk5vZGVzVG9CZVJlbW92ZWQpCiB7Ci0gICAgZm9yIChOb2RlKiBub2RlVG9CZVJlbW92
ZWQgPSBjb250YWluZXIuZmlyc3RDaGlsZCgpOyBub2RlVG9CZVJlbW92ZWQ7IG5vZGVUb0JlUmVt
b3ZlZCA9IG5vZGVUb0JlUmVtb3ZlZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoYm91
bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSBub2RlVG9CZVJlbW92ZWQpIHsKLSAgICAgICAgICAgIGJv
dW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29udGFpbmVyKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGZvciAoTm9kZSogbiA9IGJvdW5kYXJ5LmNvbnRhaW5lcigp
OyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAobiA9PSBub2RlVG9C
ZVJlbW92ZWQpIHsKLSAgICAgICAgICAgICAgICBib3VuZGFyeS5zZXRUb1N0YXJ0T2ZOb2RlKGNv
bnRhaW5lcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQorICAgIGlmIChjb250YWluZXJPZk5vZGVzVG9CZVJlbW92ZWQuY29udGFpbnMo
JmJvdW5kYXJ5LmNvbnRhaW5lcigpKSkKKyAgICAgICAgYm91bmRhcnkuc2V0VG9CZWZvcmVDb250
ZW50cyhjb250YWluZXJPZk5vZGVzVG9CZVJlbW92ZWQpOwogfQogCiB2b2lkIFJhbmdlOjpub2Rl
Q2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKLSAgICBB
U1NFUlQoJmNvbnRhaW5lci5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFT
U0VSVCgmY29udGFpbmVyLmRvY3VtZW50KCkgPT0gbV9vd25lckRvY3VtZW50LnB0cigpKTsKICAg
ICBib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQobV9zdGFydCwgY29udGFpbmVyKTsK
ICAgICBib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQobV9lbmQsIGNvbnRhaW5lcik7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeU5vZGVXaWxsQmVSZW1vdmVkKFJhbmdl
Qm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIG5vZGVUb0JlUmVtb3ZlZCkKIHsKLSAgICBp
ZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSAmbm9kZVRvQmVSZW1vdmVkKSB7CisgICAgaWYg
KGJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkgPT0gJm5vZGVUb0JlUmVtb3ZlZCkKICAgICAgICAgYm91
bmRhcnkuY2hpbGRCZWZvcmVXaWxsQmVSZW1vdmVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBmb3IgKE5vZGUqIG4gPSBib3VuZGFyeS5jb250YWluZXIoKTsgbjsgbiA9IG4tPnBh
cmVudE5vZGUoKSkgewotICAgICAgICBpZiAobiA9PSAmbm9kZVRvQmVSZW1vdmVkKSB7Ci0gICAg
ICAgICAgICBib3VuZGFyeS5zZXRUb0JlZm9yZUNoaWxkKG5vZGVUb0JlUmVtb3ZlZCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgZWxzZSBpZiAobm9kZVRvQmVS
ZW1vdmVkLmNvbnRhaW5zKCZib3VuZGFyeS5jb250YWluZXIoKSkpCisgICAgICAgIGJvdW5kYXJ5
LnNldFRvQmVmb3JlTm9kZShub2RlVG9CZVJlbW92ZWQpOwogfQogCiB2b2lkIFJhbmdlOjpub2Rl
V2lsbEJlUmVtb3ZlZChOb2RlJiBub2RlKQogewotICAgIEFTU0VSVCgmbm9kZS5kb2N1bWVudCgp
ID09ICZvd25lckRvY3VtZW50KCkpOwotICAgIEFTU0VSVCgmbm9kZSAhPSAmb3duZXJEb2N1bWVu
dCgpKTsKKyAgICBBU1NFUlQoJm5vZGUuZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQucHRy
KCkpOworICAgIEFTU0VSVCgmbm9kZSAhPSBtX293bmVyRG9jdW1lbnQucHRyKCkpOwogICAgIEFT
U0VSVChub2RlLnBhcmVudE5vZGUoKSk7CiAgICAgYm91bmRhcnlOb2RlV2lsbEJlUmVtb3ZlZCht
X3N0YXJ0LCBub2RlKTsKICAgICBib3VuZGFyeU5vZGVXaWxsQmVSZW1vdmVkKG1fZW5kLCBub2Rl
KTsKQEAgLTEyMjYsNyArOTA1LDcgQEAgdm9pZCBSYW5nZTo6bm9kZVdpbGxCZVJlbW92ZWQoTm9k
ZSYgbm9kZSkKIAogYm9vbCBSYW5nZTo6cGFyZW50bGVzc05vZGVNb3ZlZFRvTmV3RG9jdW1lbnRB
ZmZlY3RzUmFuZ2UoTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZS5jb250YWluc0luY2x1
ZGluZ1NoYWRvd0RPTShtX3N0YXJ0LmNvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbm9kZS5jb250
YWluc0luY2x1ZGluZ1NoYWRvd0RPTSgmbV9zdGFydC5jb250YWluZXIoKSk7CiB9CiAKIHZvaWQg
UmFuZ2U6OnVwZGF0ZVJhbmdlRm9yUGFyZW50bGVzc05vZGVNb3ZlZFRvTmV3RG9jdW1lbnQoTm9k
ZSYgbm9kZSkKQEAgLTEyMzgsNyArOTE3LDcgQEAgdm9pZCBSYW5nZTo6dXBkYXRlUmFuZ2VGb3JQ
YXJlbnRsZXNzTm9kZU1vdmVkVG9OZXdEb2N1bWVudChOb2RlJiBub2RlKQogCiBzdGF0aWMgaW5s
aW5lIHZvaWQgYm91bmRhcnlUZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFy
eSwgTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAg
aWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9ICZ0ZXh0KQorICAgIGlmICgmYm91bmRhcnkuY29u
dGFpbmVyKCkgIT0gJnRleHQpCiAgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBib3VuZGFy
eU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgIGlmIChvZmZzZXQgPj0gYm91bmRhcnlP
ZmZzZXQpCkBAIC0xMjQ4LDE0ICs5MjcsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5
VGV4dEluc2VydGVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQKIAog
dm9pZCBSYW5nZTo6dGV4dEluc2VydGVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQogewotICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09ICZvd25lckRv
Y3VtZW50KCkpOworICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1bWVu
dC5wdHIoKSk7CiAgICAgYm91bmRhcnlUZXh0SW5zZXJ0ZWQobV9zdGFydCwgdGV4dCwgb2Zmc2V0
LCBsZW5ndGgpOwogICAgIGJvdW5kYXJ5VGV4dEluc2VydGVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQs
IGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRSZW1vdmVkKFJh
bmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSAhPSAmdGV4
dCkKKyAgICBpZiAoJmJvdW5kYXJ5LmNvbnRhaW5lcigpICE9ICZ0ZXh0KQogICAgICAgICByZXR1
cm47CiAgICAgdW5zaWduZWQgYm91bmRhcnlPZmZzZXQgPSBib3VuZGFyeS5vZmZzZXQoKTsKICAg
ICBpZiAob2Zmc2V0ID49IGJvdW5kYXJ5T2Zmc2V0KQpAQCAtMTI2OCwyMyArOTQ3LDIzIEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYg
Ym91bmRhcnksIE5vZGUmIHRleHQsCiAKIHZvaWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUmIHRl
eHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEFTU0VSVCgmdGV4
dC5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmdGV4dC5kb2N1
bWVudCgpID09IG1fb3duZXJEb2N1bWVudC5wdHIoKSk7CiAgICAgYm91bmRhcnlUZXh0UmVtb3Zl
ZChtX3N0YXJ0LCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgYm91bmRhcnlUZXh0UmVtb3Zl
ZChtX2VuZCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQg
Ym91bmRhcnlUZXh0Tm9kZXNNZXJnZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9k
ZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogewotICAgIGlmIChib3VuZGFy
eS5jb250YWluZXIoKSA9PSBvbGROb2RlLm5vZGUoKSkKKyAgICBpZiAoJmJvdW5kYXJ5LmNvbnRh
aW5lcigpID09IG9sZE5vZGUubm9kZSgpKQogICAgICAgICBib3VuZGFyeS5zZXQoKm9sZE5vZGUu
bm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSwgYm91bmRhcnkub2Zmc2V0KCkgKyBvZmZzZXQsIDAp
OwotICAgIGVsc2UgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUubm9kZSgpLT5w
YXJlbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGFyeS5vZmZzZXQoKSkgPT0gb2xk
Tm9kZS5pbmRleCgpKQorICAgIGVsc2UgaWYgKCZib3VuZGFyeS5jb250YWluZXIoKSA9PSBvbGRO
b2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIGJvdW5kYXJ5Lm9mZnNldCgpID09IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihvbGROb2RlLmluZGV4KCkpKQogICAgICAgICBib3VuZGFyeS5zZXQoKm9s
ZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSwgb2Zmc2V0LCAwKTsKIH0KIAogdm9pZCBS
YW5nZTo6dGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9m
ZnNldCkKIHsKICAgICBBU1NFUlQob2xkTm9kZS5ub2RlKCkpOwotICAgIEFTU0VSVCgmb2xkTm9k
ZS5ub2RlKCktPmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZv
bGROb2RlLm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQucHRyKCkpOwogICAg
IEFTU0VSVChvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpKTsKICAgICBBU1NFUlQob2xkTm9k
ZS5ub2RlKCktPmlzVGV4dE5vZGUoKSk7CiAgICAgQVNTRVJUKG9sZE5vZGUubm9kZSgpLT5wcmV2
aW91c1NpYmxpbmcoKSk7CkBAIC0xMjk2LDcgKzk3NSw3IEBAIHZvaWQgUmFuZ2U6OnRleHROb2Rl
c01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpCiBzdGF0aWMg
aW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJv
dW5kYXJ5LCBUZXh0JiBvbGROb2RlKQogewogICAgIGF1dG8qIHBhcmVudCA9IG9sZE5vZGUucGFy
ZW50Tm9kZSgpOwotICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSAmb2xkTm9kZSkgewor
ICAgIGlmICgmYm91bmRhcnkuY29udGFpbmVyKCkgPT0gJm9sZE5vZGUpIHsKICAgICAgICAgdW5z
aWduZWQgc3BsaXRPZmZzZXQgPSBvbGROb2RlLmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25lZCBi
b3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgICAgICBpZiAoYm91bmRhcnlP
ZmZzZXQgPiBzcGxpdE9mZnNldCkgewpAQCAtMTMwOSwxNiArOTg4LDE2IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1NwbGl0KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRh
cnksIFRleHQmIG9sCiAgICAgfQogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IHBhcmVudCAmJiBib3VuZGFyeS5jaGlsZEJl
Zm9yZSgpID09ICZvbGROb2RlKSB7CisgICAgaWYgKCZib3VuZGFyeS5jb250YWluZXIoKSA9PSBw
YXJlbnQgJiYgYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSAmb2xkTm9kZSkgewogICAgICAgICBh
dXRvKiBuZXdDaGlsZCA9IG9sZE5vZGUubmV4dFNpYmxpbmcoKTsKICAgICAgICAgQVNTRVJUKG5l
d0NoaWxkKTsKLSAgICAgICAgYm91bmRhcnkuc2V0VG9BZnRlckNoaWxkKCpuZXdDaGlsZCk7Cisg
ICAgICAgIGJvdW5kYXJ5LnNldFRvQWZ0ZXJOb2RlKCpuZXdDaGlsZCk7CiAgICAgfQogfQogCiB2
b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUpCiB7Ci0gICAgQVNTRVJUKCZv
bGROb2RlLmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZvbGRO
b2RlLmRvY3VtZW50KCkgPT0gbV9vd25lckRvY3VtZW50LnB0cigpKTsKICAgICBBU1NFUlQoIW9s
ZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5vZGUubmV4dFNpYmxpbmcoKSk7CiAgICAgQVNTRVJU
KCFvbGROb2RlLnBhcmVudE5vZGUoKSB8fCBvbGROb2RlLm5leHRTaWJsaW5nKCktPmlzVGV4dE5v
ZGUoKSk7CiAgICAgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChtX3N0YXJ0LCBvbGROb2RlKTsKQEAg
LTE0MTMsNyArMTA5Miw3IEBAIFJlZlB0cjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiAKIHZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29y
ZTo6UmFuZ2UqIHJhbmdlKQogewotICAgIGlmIChyYW5nZSAmJiByYW5nZS0+Ym91bmRhcnlQb2lu
dHNWYWxpZCgpKSB7CisgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgIHJhbmdlLT5zdGFydENvbnRh
aW5lcigpLnNob3dUcmVlQW5kTWFyaygmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksICJTIiwgJnJh
bmdlLT5lbmRDb250YWluZXIoKSwgIkUiKTsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzdGFy
dCBvZmZzZXQ6ICVkLCBlbmQgb2Zmc2V0OiAlZFxuIiwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIHJh
bmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCA0ZDFjZDRmMTM2NzQ2
Y2JmNDQyZmQ2ODlkNjkxOGMzYzVmZDhlOTA0Li4xZWM1YWVkNGM1MDAwZjdmNWM5MzQxNzViN2U5
MjNjY2JiMDg0NGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtMzMsNjEgKzMzLDYwIEBAIGNsYXNzIERP
TVJlY3RMaXN0OwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIE5vZGVXaXRoSW5kZXg7
CiBjbGFzcyBUZXh0OwotY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCiBzdHJ1Y3QgU2ltcGxlUmFu
Z2U7CiAKLS8vIEZJWE1FOiBSZW5hbWUgdG8gTGl2ZVJhbmdlLCB3aGlsZSBsZWF2aW5nIHRoZSBE
T00tZXhwb3NlZCBuYW1lIGFzIFJhbmdlLgogY2xhc3MgUmFuZ2UgOiBwdWJsaWMgUmVmQ291bnRl
ZDxSYW5nZT4gewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8UmFuZ2U+
IGNyZWF0ZShEb2N1bWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5SYW5nZSgpOwogCi0gICAg
RG9jdW1lbnQmIG93bmVyRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX293bmVyRG9jdW1lbnQ7
IH0KLQotICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyKCkgY29uc3QgeyBBU1NFUlQobV9zdGFydC5j
b250YWluZXIoKSk7IHJldHVybiAqbV9zdGFydC5jb250YWluZXIoKTsgfQorICAgIE5vZGUmIHN0
YXJ0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC5jb250YWluZXIoKTsgfQogICAg
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC5vZmZzZXQoKTsg
fQotICAgIE5vZGUmIGVuZENvbnRhaW5lcigpIGNvbnN0IHsgQVNTRVJUKG1fZW5kLmNvbnRhaW5l
cigpKTsgcmV0dXJuICptX2VuZC5jb250YWluZXIoKTsgfQorICAgIE5vZGUmIGVuZENvbnRhaW5l
cigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLmNvbnRhaW5lcigpOyB9CiAgICAgdW5zaWduZWQgZW5k
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmQub2Zmc2V0KCk7IH0KICAgICBib29sIGNvbGxh
cHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQgPT0gbV9lbmQ7IH0KLQogICAgIE5vZGUqIGNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5j
ZXN0b3Ioc3RhcnRDb250YWluZXIoKSwgZW5kQ29udGFpbmVyKCkpLmdldCgpOyB9Ci0gICAgV0VC
Q09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnQoUmVmPE5vZGU+JiYgY29udGFp
bmVyLCB1bnNpZ25lZCBvZmZzZXQpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNldEVuZChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCk7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdGFydChSZWY8Tm9kZT4mJiwg
dW5zaWduZWQgb2Zmc2V0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRFbmQoUmVmPE5vZGU+JiYsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnRCZWZvcmUoTm9kZSYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0QWZ0ZXIoTm9kZSYpOworICAgIFdFQkNPUkVf
RVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZEJlZm9yZShOb2RlJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RW5kQWZ0ZXIoTm9kZSYpOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY29sbGFwc2UoYm9vbCB0b1N0YXJ0KTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBFeGNlcHRpb25Pcjxib29sPiBpc1BvaW50SW5SYW5nZShOb2RlJiByZWZOb2RlLCB1bnNpZ25l
ZCBvZmZzZXQpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHNob3J0PiBjb21wYXJl
UG9pbnQoTm9kZSYgcmVmTm9kZSwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdDsKLSAgICBlbnVtIENv
bXBhcmVSZXN1bHRzIHsgTk9ERV9CRUZPUkUsIE5PREVfQUZURVIsIE5PREVfQkVGT1JFX0FORF9B
RlRFUiwgTk9ERV9JTlNJREUgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxDb21w
YXJlUmVzdWx0cz4gY29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3Q7Ci0gICAgZW51bSBD
b21wYXJlSG93IHsgU1RBUlRfVE9fU1RBUlQsIFNUQVJUX1RPX0VORCwgRU5EX1RPX0VORCwgRU5E
X1RPX1NUQVJUIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8c2hvcnQ+IGNvbXBh
cmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNv
bnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHNob3J0PiBjb21wYXJlQm91bmRh
cnlQb2ludHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5n
ZSYgc291cmNlUmFuZ2UpIGNvbnN0OwotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxzaG9ydD4gY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNvbnRhaW5lckEsIHVuc2lnbmVkIG9mZnNldEEsIE5v
ZGUqIGNvbnRhaW5lckIsIHVuc2lnbmVkIG9mZnNldEIpOwotICAgIHN0YXRpYyBFeGNlcHRpb25P
cjxzaG9ydD4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYg
Ym91bmRhcnlBLCBjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5Qik7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBib3VuZGFyeVBvaW50c1ZhbGlkKCkgY29uc3Q7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4gaW50ZXJzZWN0c05vZGUoTm9kZSYgcmVmTm9kZSkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2VsZWN0Tm9kZShO
b2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2VsZWN0Tm9kZUNv
bnRlbnRzKE5vZGUmKTsKKworICAgIGVudW0gQ29tcGFyZUhvdyA6IHVuc2lnbmVkIHNob3J0IHsg
U1RBUlRfVE9fU1RBUlQsIFNUQVJUX1RPX0VORCwgRU5EX1RPX0VORCwgRU5EX1RPX1NUQVJUIH07
CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8c2hvcnQ+IGNvbXBhcmVCb3VuZGFyeVBv
aW50cyh1bnNpZ25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2Up
IGNvbnN0OworCiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gZGVsZXRlQ29u
dGVudHMoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFn
bWVudD4+IGV4dHJhY3RDb250ZW50cygpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9y
PFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gY2xvbmVDb250ZW50cygpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IGluc2VydE5vZGUoUmVmPE5vZGU+JiYpOwotICAgIFdFQkNP
UkVfRVhQT1JUIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHZvaWQ+IHN1cnJvdW5kQ29udGVudHMoTm9kZSYpOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgU3RyaW5nIHRleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+
IGNsb25lUmFuZ2UoKSBjb25zdDsKKyAgICBzdGF0aWMgdm9pZCBkZXRhY2goKSB7IH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50Pj4gY3JlYXRl
Q29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgaHRtbCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgRXhjZXB0aW9uT3I8Ym9vbD4gaXNQb2ludEluUmFuZ2UoTm9kZSYsIHVuc2lnbmVkIG9mZnNl
dCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8c2hvcnQ+IGNvbXBhcmVQb2ludChO
b2RlJiwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlu
dGVyc2VjdHNOb2RlKE5vZGUmKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGV0
YWNoKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmPFJhbmdlPiBjbG9uZVJhbmdlKCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdGFydEFmdGVyKE5vZGUmKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRFbmRCZWZvcmUoTm9kZSYpOwotICAg
IFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZEFmdGVyKE5vZGUmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZWxlY3ROb2RlKE5vZGUmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZWxlY3ROb2RlQ29udGVudHMoTm9k
ZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHN1cnJvdW5kQ29udGVu
dHMoTm9kZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0
QmVmb3JlKE5vZGUmKTsKKyAgICBSZWY8RE9NUmVjdExpc3Q+IGdldENsaWVudFJlY3RzKCkgY29u
c3Q7CisgICAgUmVmPERPTVJlY3Q+IGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0OworCisg
ICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBjcmVh
dGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiBmcmFnbWVudCk7CisKKyAgICAvLyBF
eHBhbmQgcmFuZ2UgdG8gYSB1bml0ICh3b3JkIG9yIHNlbnRlbmNlIG9yIGJsb2NrIG9yIGRvY3Vt
ZW50KSBib3VuZGFyeS4KKyAgICAvLyBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NjMyIGNvbW1lbnQgIzUgZm9yIGRldGFpbHMuCisgICAg
V0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gZXhwYW5kKGNvbnN0IFN0cmluZyYpOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogZmlyc3ROb2RlKCkgY29uc3Q7CisgICAgZW51bSBD
b21wYXJlUmVzdWx0cyA6IHVpbnQ4X3QgeyBOT0RFX0JFRk9SRSwgTk9ERV9BRlRFUiwgTk9ERV9C
RUZPUkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lERSB9OworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2Vw
dGlvbk9yPENvbXBhcmVSZXN1bHRzPiBjb21wYXJlTm9kZShOb2RlJikgY29uc3Q7CiAKICAgICB2
b2lkIG5vZGVDaGlsZHJlbkNoYW5nZWQoQ29udGFpbmVyTm9kZSYpOwogICAgIHZvaWQgbm9kZUNo
aWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2RlJik7CkBAIC0xMDAsNDAgKzk5LDI0IEBA
IHB1YmxpYzoKICAgICB2b2lkIHRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2Rl
LCB1bnNpZ25lZCBvZmZzZXQpOwogICAgIHZvaWQgdGV4dE5vZGVTcGxpdChUZXh0JiBvbGROb2Rl
KTsKIAotICAgIC8vIEV4cGFuZCByYW5nZSB0byBhIHVuaXQgKHdvcmQgb3Igc2VudGVuY2Ugb3Ig
YmxvY2sgb3IgZG9jdW1lbnQpIGJvdW5kYXJ5LgotICAgIC8vIFBsZWFzZSByZWZlciB0byBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzIgY29tbWVudCAjNSAKLSAg
ICAvLyBmb3IgZGV0YWlscy4KLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBl
eHBhbmQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBSZWY8RE9NUmVjdExpc3Q+IGdldENsaWVudFJl
Y3RzKCkgY29uc3Q7Ci0gICAgUmVmPERPTVJlY3Q+IGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGNv
bnN0OwotCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogICAgIHZvaWQgZm9ybWF0Rm9yRGVi
dWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogI2VuZGlmCiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNvbnN0IFJhbmdlJikgY29uc3Q7Ci0gICAg
Ym9vbCBjb250YWlucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdDsKLQotICAgIGVudW0g
QWN0aW9uVHlwZSB7IERlbGV0ZSwgRXh0cmFjdCwgQ2xvbmUgfTsKKyAgICBlbnVtIEFjdGlvblR5
cGUgOiB1aW50OF90IHsgRGVsZXRlLCBFeHRyYWN0LCBDbG9uZSB9OwogCiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IFJhbmdlKERvY3VtZW50Jik7CiAKLSAgICB2b2lkIHNldERvY3VtZW50KERvY3Vt
ZW50Jik7Ci0gICAgRXhjZXB0aW9uT3I8Tm9kZSo+IGNoZWNrTm9kZVdPZmZzZXQoTm9kZSYsIHVu
c2lnbmVkIG9mZnNldCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVEb2N1bWVudCgpOworICAgIEV4
Y2VwdGlvbk9yPE5vZGUqPiBjaGVja05vZGVPZmZzZXRQYWlyKE5vZGUmLCB1bnNpZ25lZCBvZmZz
ZXQpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gcHJv
Y2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUpOwogCi0gICAgTm9kZSogcGFzdExhc3ROb2RlKCkgY29u
c3Q7Ci0KICAgICBSZWY8RG9jdW1lbnQ+IG1fb3duZXJEb2N1bWVudDsKICAgICBSYW5nZUJvdW5k
YXJ5UG9pbnQgbV9zdGFydDsKICAgICBSYW5nZUJvdW5kYXJ5UG9pbnQgbV9lbmQ7CiB9OwogCi1X
RUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFu
Z2UqKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNv
bnN0IFJhbmdlKik7Ci0KIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5n
ZShjb25zdCBSYW5nZSYpOwogV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJh
bmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCmluZGV4
IDE1NGU4OWM2NmU1N2EyZWJhODM0MDY2NjFiNmE1M2MzM2EyNDkwYmEuLmEwNWMxNDM2YzU4Yjgz
MDIwZTI2MDk5OTdiMzY2YTYxNGY4MDY3YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbApAQCAtMjUsOSAr
MjUsOSBAQAogICAgIFtDYWxsV2l0aD1Eb2N1bWVudF0gY29uc3RydWN0b3IoKTsKIAogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBOb2RlIHN0YXJ0Q29udGFpbmVyOwotICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBsb25nIHN0YXJ0T2Zmc2V0OyAvLyBGSVhNRTogU2hvdWxkIGJlIHVuc2lnbmVkIGxvbmcu
CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc3RhcnRPZmZzZXQ7CiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgZW5kQ29udGFpbmVyOwotICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBsb25nIGVuZE9mZnNldDsgLy8gRklYTUU6IFNob3VsZCBiZSB1bnNpZ25lZCBsb25nLgor
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGVuZE9mZnNldDsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjb2xsYXBzZWQ7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IE5vZGUgY29tbW9uQW5jZXN0b3JDb250YWluZXI7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBTVEFSVF9UT19FTkQgPSAxOwogICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0IEVORF9UT19FTkQgPSAyOwogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEVORF9UT19T
VEFSVCA9IDM7Ci0gICAgW01heVRocm93RXhjZXB0aW9uLCBJbXBsZW1lbnRlZEFzPWNvbXBhcmVC
b3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzXSBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHModW5z
aWduZWQgc2hvcnQgaG93LCBSYW5nZSBzb3VyY2VSYW5nZSk7CisgICAgW01heVRocm93RXhjZXB0
aW9uXSBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHModW5zaWduZWQgc2hvcnQgaG93LCBSYW5n
ZSBzb3VyY2VSYW5nZSk7CiAKICAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSB2
b2lkIGRlbGV0ZUNvbnRlbnRzKCk7CiAgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlv
biwgTmV3T2JqZWN0XSBEb2N1bWVudEZyYWdtZW50IGV4dHJhY3RDb250ZW50cygpOwpAQCAtNTks
NyArNTksNyBAQAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBpc1BvaW50SW5SYW5n
ZShOb2RlIG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKICAgICBbTWF5VGhyb3dFeGNlcHRp
b25dIHNob3J0IGNvbXBhcmVQb2ludChOb2RlIG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsK
IAotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBpbnRlcnNlY3RzTm9kZShOb2RlIG5v
ZGUpOworICAgIGJvb2xlYW4gaW50ZXJzZWN0c05vZGUoTm9kZSBub2RlKTsKIAogICAgIHN0cmlu
Z2lmaWVyOwogCkBAIC03MCwxMCArNzAsMTEgQEAKICAgICAvLyBFeHRlbnNpb25zIGZyb20gRE9N
UGFyc2luZyBhbmQgU2VyaWFsaXphdGlvbiBzcGVjaWZpY2F0aW9uIChodHRwczovL3czYy5naXRo
dWIuaW8vRE9NLVBhcnNpbmcvI2V4dGVuc2lvbnMtdG8tdGhlLXJhbmdlLWludGVyZmFjZSkuCiAg
ICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBEb2N1bWVudEZy
YWdtZW50IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChET01TdHJpbmcgZnJhZ21lbnQpOwogCi0g
ICAgLy8gTm9uIHN0YW5kYXJkLgotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBleHBhbmQo
b3B0aW9uYWwgRE9NU3RyaW5nIHVuaXQgPSAiIik7CisgICAgLy8gTm9uLXN0YW5kYXJkIGV4dGVu
c2lvbi4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgZHJvcCB0aGlzIHNpbmNl
IG5vIG90aGVyIGJyb3dzZXIgc3VwcG9ydHMgaXQuCisgICAgW01heVRocm93RXhjZXB0aW9uXSB2
b2lkIGV4cGFuZChvcHRpb25hbCBET01TdHJpbmcgdW5pdCk7CiAKLSAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGxpa2VseSBkcm9wIHRoaXMgc2luY2Ugbm8gb3RoZXIgYnJvd3NlciBzdXBwb3J0cyBp
dC4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGxpa2VseSBkcm9wIHRoaXMgc2luY2Ugd2UgYWRk
ZWQgaXQgZm9yIEZpcmVmb3ggaW50ZXJvcGVyYWJpbGl0eSwgYnV0IG5vdyBubyBvdGhlciBicm93
c2VyIHN1cHBvcnRzIGl0LgogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gc2hvcnQgY29tcGFyZU5v
ZGUoTm9kZSBub2RlKTsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT0RFX0JFRk9SRSA9IDA7
CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTk9ERV9BRlRFUiA9IDE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5kZXggYjI0NDA5ODQ3OGI3Nzc3ZjA0Y2RmNjhkNjE5
MjliZGM4ODQ1NTE0Zi4uZDAwMzQ0ZDlmNjYwNGI5Y2VkMGFlZmViOWU3ZThkM2Q3OTg0M2FiZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaApAQCAtMzIsNDMgKzMyLDM5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmFuZ2VCb3VuZGFyeVBvaW50IHsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBSYW5nZUJvdW5kYXJ5UG9pbnQoTm9kZSogY29udGFpbmVyKTsK
KyAgICBleHBsaWNpdCBSYW5nZUJvdW5kYXJ5UG9pbnQoTm9kZSYgY29udGFpbmVyKTsKIAotICAg
IE5vZGUqIGNvbnRhaW5lcigpIGNvbnN0OworICAgIE5vZGUmIGNvbnRhaW5lcigpIGNvbnN0Owog
ICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0OwogICAgIE5vZGUqIGNoaWxkQmVmb3JlKCkgY29u
c3Q7CiAKLSAgICB2b2lkIGNsZWFyKCk7Ci0KICAgICB2b2lkIHNldChSZWY8Tm9kZT4mJiBjb250
YWluZXIsIHVuc2lnbmVkIG9mZnNldCwgTm9kZSogY2hpbGRCZWZvcmUpOwogICAgIHZvaWQgc2V0
T2Zmc2V0KHVuc2lnbmVkKTsKIAotICAgIHZvaWQgc2V0VG9CZWZvcmVDaGlsZChOb2RlJik7Ci0g
ICAgdm9pZCBzZXRUb0FmdGVyQ2hpbGQoTm9kZSYpOwotICAgIHZvaWQgc2V0VG9TdGFydE9mTm9k
ZShSZWY8Tm9kZT4mJik7Ci0gICAgdm9pZCBzZXRUb0VuZE9mTm9kZShSZWY8Tm9kZT4mJik7Cisg
ICAgdm9pZCBzZXRUb0JlZm9yZU5vZGUoTm9kZSYpOworICAgIHZvaWQgc2V0VG9BZnRlck5vZGUo
Tm9kZSYpOworICAgIHZvaWQgc2V0VG9CZWZvcmVDb250ZW50cyhSZWY8Tm9kZT4mJik7CisgICAg
dm9pZCBzZXRUb0FmdGVyQ29udGVudHMoUmVmPE5vZGU+JiYpOwogCiAgICAgdm9pZCBjaGlsZEJl
Zm9yZVdpbGxCZVJlbW92ZWQoKTsKICAgICB2b2lkIGludmFsaWRhdGVPZmZzZXQoKSBjb25zdDsK
LSAgICB2b2lkIGVuc3VyZU9mZnNldElzVmFsaWQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBS
ZWZQdHI8Tm9kZT4gbV9jb250YWluZXJOb2RlOworICAgIFJlZjxOb2RlPiBtX2NvbnRhaW5lcjsK
ICAgICBtdXRhYmxlIE9wdGlvbmFsPHVuc2lnbmVkPiBtX29mZnNldEluQ29udGFpbmVyIHsgMCB9
OwogICAgIFJlZlB0cjxOb2RlPiBtX2NoaWxkQmVmb3JlQm91bmRhcnk7CiB9OwogCiBCb3VuZGFy
eVBvaW50IG1ha2VCb3VuZGFyeVBvaW50KGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYpOwogCi1p
bmxpbmUgUmFuZ2VCb3VuZGFyeVBvaW50OjpSYW5nZUJvdW5kYXJ5UG9pbnQoTm9kZSogY29udGFp
bmVyKQotICAgIDogbV9jb250YWluZXJOb2RlKGNvbnRhaW5lcikKK2lubGluZSBSYW5nZUJvdW5k
YXJ5UG9pbnQ6OlJhbmdlQm91bmRhcnlQb2ludChOb2RlJiBjb250YWluZXIpCisgICAgOiBtX2Nv
bnRhaW5lcihjb250YWluZXIpCiB7Ci0gICAgQVNTRVJUKG1fY29udGFpbmVyTm9kZSk7CiB9CiAK
LWlubGluZSBOb2RlKiBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmNvbnRhaW5lcigpIGNvbnN0Citpbmxp
bmUgTm9kZSYgUmFuZ2VCb3VuZGFyeVBvaW50Ojpjb250YWluZXIoKSBjb25zdAogewotICAgIHJl
dHVybiBtX2NvbnRhaW5lck5vZGUuZ2V0KCk7CisgICAgcmV0dXJuIG1fY29udGFpbmVyOwogfQog
CiBpbmxpbmUgTm9kZSogUmFuZ2VCb3VuZGFyeVBvaW50OjpjaGlsZEJlZm9yZSgpIGNvbnN0CkBA
IC03Niw3NyArNzIsNjMgQEAgaW5saW5lIE5vZGUqIFJhbmdlQm91bmRhcnlQb2ludDo6Y2hpbGRC
ZWZvcmUoKSBjb25zdAogICAgIHJldHVybiBtX2NoaWxkQmVmb3JlQm91bmRhcnkuZ2V0KCk7CiB9
CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6ZW5zdXJlT2Zmc2V0SXNWYWxpZCgp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fb2Zmc2V0SW5Db250YWluZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChtX2NoaWxkQmVmb3JlQm91bmRhcnkpOwotICAgIG1fb2Zmc2V0SW5Db250
YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnktPmNvbXB1dGVOb2RlSW5kZXgoKSArIDE7Ci19
Ci0KIGlubGluZSB1bnNpZ25lZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6Om9mZnNldCgpIGNvbnN0CiB7
Ci0gICAgZW5zdXJlT2Zmc2V0SXNWYWxpZCgpOwotICAgIHJldHVybiBtX29mZnNldEluQ29udGFp
bmVyLnZhbHVlKCk7Ci19Ci0KLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6Y2xlYXIo
KQotewotICAgIG1fY29udGFpbmVyTm9kZSA9IG51bGxwdHI7Ci0gICAgbV9vZmZzZXRJbkNvbnRh
aW5lciA9IDA7Ci0gICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbnVsbHB0cjsKKyAgICBpZiAo
IW1fb2Zmc2V0SW5Db250YWluZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fY2hpbGRCZWZvcmVCb3Vu
ZGFyeSk7CisgICAgICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRh
cnktPmNvbXB1dGVOb2RlSW5kZXgoKSArIDE7CisgICAgfQorICAgIHJldHVybiAqbV9vZmZzZXRJ
bkNvbnRhaW5lcjsKIH0KIAogaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXQoUmVm
PE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIGNoaWxkQmVmb3JlKQog
ewogICAgIEFTU0VSVChjaGlsZEJlZm9yZSA9PSAob2Zmc2V0ID8gY29udGFpbmVyLT50cmF2ZXJz
ZVRvQ2hpbGRBdChvZmZzZXQgLSAxKSA6IDApKTsKLSAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZN
b3ZlKGNvbnRhaW5lcik7CisgICAgbV9jb250YWluZXIgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAg
ICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG9mZnNldDsKICAgICBtX2NoaWxkQmVmb3JlQm91bmRh
cnkgPSBjaGlsZEJlZm9yZTsKIH0KIAogaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50Ojpz
ZXRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQogewotICAgIEFTU0VSVChtX2NvbnRhaW5lck5vZGUp
OwotICAgIEFTU0VSVChtX2NvbnRhaW5lck5vZGUtPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSk7Cisg
ICAgQVNTRVJUKG1fY29udGFpbmVyLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpOwogICAgIEFTU0VS
VChtX29mZnNldEluQ29udGFpbmVyKTsKICAgICBBU1NFUlQoIW1fY2hpbGRCZWZvcmVCb3VuZGFy
eSk7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG9mZnNldDsKIH0KIAotaW5saW5lIHZvaWQg
UmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0JlZm9yZUNoaWxkKE5vZGUmIGNoaWxkKQoraW5saW5l
IHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0JlZm9yZU5vZGUoTm9kZSYgY2hpbGQpCiB7
CiAgICAgQVNTRVJUKGNoaWxkLnBhcmVudE5vZGUoKSk7CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5k
YXJ5ID0gY2hpbGQucHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgbV9jb250YWluZXJOb2RlID0gY2hp
bGQucGFyZW50Tm9kZSgpOwotICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3Jl
Qm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBPcHRpb25hbDx1bnNpZ25lZD4oMCk7CisgICAgbV9j
b250YWluZXIgPSAqY2hpbGQucGFyZW50Tm9kZSgpOworICAgIG1fb2Zmc2V0SW5Db250YWluZXIg
PSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBtYWtlT3B0aW9uYWwoMFUp
OwogfQogCi1pbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvQWZ0ZXJDaGlsZChO
b2RlJiBjaGlsZCkKK2lubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9BZnRlck5v
ZGUoTm9kZSYgY2hpbGQpCiB7CiAgICAgQVNTRVJUKGNoaWxkLnBhcmVudE5vZGUoKSk7CiAgICAg
bV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gJmNoaWxkOwotICAgIG1fY29udGFpbmVyTm9kZSA9IGNo
aWxkLnBhcmVudE5vZGUoKTsKLSAgICBtX29mZnNldEluQ29udGFpbmVyID0gbV9jaGlsZEJlZm9y
ZUJvdW5kYXJ5ID8gV1RGOjpudWxsb3B0IDogT3B0aW9uYWw8dW5zaWduZWQ+KDApOworICAgIG1f
Y29udGFpbmVyID0gKmNoaWxkLnBhcmVudE5vZGUoKTsKKyAgICBtX29mZnNldEluQ29udGFpbmVy
ID0gbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8gV1RGOjpudWxsb3B0IDogbWFrZU9wdGlvbmFsKDBV
KTsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb1N0YXJ0T2ZOb2Rl
KFJlZjxOb2RlPiYmIGNvbnRhaW5lcikKK2lubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6
c2V0VG9CZWZvcmVDb250ZW50cyhSZWY8Tm9kZT4mJiBjb250YWluZXIpCiB7Ci0gICAgbV9jb250
YWluZXJOb2RlID0gV1RGTW92ZShjb250YWluZXIpOworICAgIG1fY29udGFpbmVyID0gV1RGTW92
ZShjb250YWluZXIpOwogICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSAwOwogICAgIG1fY2hpbGRC
ZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQ
b2ludDo6c2V0VG9FbmRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFpbmVyKQoraW5saW5lIHZvaWQg
UmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0FmdGVyQ29udGVudHMoUmVmPE5vZGU+JiYgY29udGFp
bmVyKQogewotICAgIG1fY29udGFpbmVyTm9kZSA9IFdURk1vdmUoY29udGFpbmVyKTsKLSAgICBp
ZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKm1fY29udGFpbmVyTm9kZSkpIHsKLSAgICAgICAgbV9vZmZz
ZXRJbkNvbnRhaW5lciA9IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCptX2NvbnRhaW5lck5vZGUp
Lmxlbmd0aCgpOworICAgIG1fY29udGFpbmVyID0gV1RGTW92ZShjb250YWluZXIpOworICAgIGlm
IChpczxDaGFyYWN0ZXJEYXRhPihtX2NvbnRhaW5lcikpIHsKKyAgICAgICAgbV9vZmZzZXRJbkNv
bnRhaW5lciA9IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG1fY29udGFpbmVyLmdldCgpKS5sZW5n
dGgoKTsKICAgICAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbnVsbHB0cjsKICAgICB9IGVs
c2UgewotICAgICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBtX2NvbnRhaW5lck5vZGUtPmxh
c3RDaGlsZCgpOwotICAgICAgICBtX29mZnNldEluQ29udGFpbmVyID0gbV9jaGlsZEJlZm9yZUJv
dW5kYXJ5ID8gV1RGOjpudWxsb3B0IDogT3B0aW9uYWw8dW5zaWduZWQ+KDApOworICAgICAgICBt
X2NoaWxkQmVmb3JlQm91bmRhcnkgPSBtX2NvbnRhaW5lci0+bGFzdENoaWxkKCk7CisgICAgICAg
IG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxv
cHQgOiBtYWtlT3B0aW9uYWwoMFUpOwogICAgIH0KIH0KIApAQCAtMTY3LDIxICsxNDksMTYgQEAg
aW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjppbnZhbGlkYXRlT2Zmc2V0KCkgY29uc3QK
IAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIGEsIGNv
bnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYikKIHsKLSAgICBpZiAoYS5jb250YWluZXIoKSAhPSBi
LmNvbnRhaW5lcigpKQorICAgIGlmICgmYS5jb250YWluZXIoKSAhPSAmYi5jb250YWluZXIoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLmNoaWxkQmVmb3JlKCkgfHwgYi5jaGls
ZEJlZm9yZSgpKSB7Ci0gICAgICAgIGlmIChhLmNoaWxkQmVmb3JlKCkgIT0gYi5jaGlsZEJlZm9y
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChhLm9mZnNldCgpICE9IGIub2Zmc2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOworICAgIGlmIChhLmNoaWxkQmVmb3JlKCkgfHwgYi5jaGls
ZEJlZm9yZSgpKQorICAgICAgICByZXR1cm4gYS5jaGlsZEJlZm9yZSgpID09IGIuY2hpbGRCZWZv
cmUoKTsKKyAgICByZXR1cm4gYS5vZmZzZXQoKSA9PSBiLm9mZnNldCgpOwogfQogCiBpbmxpbmUg
Qm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludChjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQm
IHBvaW50KQogewotICAgIHJldHVybiB7ICpwb2ludC5jb250YWluZXIoKSwgcG9pbnQub2Zmc2V0
KCkgfTsKKyAgICByZXR1cm4geyBwb2ludC5jb250YWluZXIoKSwgcG9pbnQub2Zmc2V0KCkgfTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAK
aW5kZXggYzFiNzQ2OGUxZGUwNzk3ZWI5ZTYyY2I1OTZkMzRmM2YyOTM3NmZmMS4uM2JjMDM0OWMw
MTIzYTFkMDM1YWZmM2VhM2MwNzk2NWVkZGRiYWFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuY3BwCkBAIC03Miw2ICs3Miw5IEBAIHN0YXRpYyBib29sIGlzT2Zmc2V0QmVmb3JlQ2hpbGQo
Q29udGFpbmVyTm9kZSYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQsIE5vZGUmCiB7CiAgICAg
aWYgKCFvZmZzZXQpCiAgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIElmIHRoZSBjb250YWlu
ZXIgaXMgbm90IHRoZSBwYXJlbnQsIHRoZSBjaGlsZCBpcyBwYXJ0IG9mIGEgc2hhZG93IHRyZWUs
IHdoaWNoIHdlIHNvcnQgYmV0d2VlbiBvZmZzZXQgMCBhbmQgb2Zmc2V0IDEuCisgICAgaWYgKGNo
aWxkLnBhcmVudE5vZGUoKSAhPSAmY29udGFpbmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgdW5zaWduZWQgY3VycmVudE9mZnNldCA9IDA7CiAgICAgZm9yIChhdXRvIGN1cnJlbnRDaGls
ZCA9IGNvbnRhaW5lci5maXJzdENoaWxkKCk7IGN1cnJlbnRDaGlsZCAmJiBjdXJyZW50Q2hpbGQg
IT0gJmNoaWxkOyBjdXJyZW50Q2hpbGQgPSBjdXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgaWYgKG9mZnNldCA8PSArK2N1cnJlbnRPZmZzZXQpCkBAIC05OSwxNCArMTAyLDE0
IEBAIFBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGEs
IGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGIpCiAgICAgICAgIHJldHVybiBvcmRlcihhLm9mZnNldCwg
Yi5vZmZzZXQpOwogCiAgICAgZm9yIChhdXRvIGFuY2VzdG9yID0gYi5jb250YWluZXIucHRyKCk7
IGFuY2VzdG9yOyApIHsKLSAgICAgICAgYXV0byBuZXh0QW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFy
ZW50T3JTaGFkb3dIb3N0Tm9kZSgpOworICAgICAgICBhdXRvIG5leHRBbmNlc3RvciA9IGFuY2Vz
dG9yLT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpOwogICAgICAgICBpZiAobmV4dEFuY2VzdG9yID09
IGEuY29udGFpbmVyLnB0cigpKQogICAgICAgICAgICAgcmV0dXJuIGlzT2Zmc2V0QmVmb3JlQ2hp
bGQoKm5leHRBbmNlc3RvciwgYS5vZmZzZXQsICphbmNlc3RvcikgPyBQYXJ0aWFsT3JkZXJpbmc6
Omxlc3MgOiBQYXJ0aWFsT3JkZXJpbmc6OmdyZWF0ZXI7CiAgICAgICAgIGFuY2VzdG9yID0gbmV4
dEFuY2VzdG9yOwogICAgIH0KIAogICAgIGZvciAoYXV0byBhbmNlc3RvciA9IGEuY29udGFpbmVy
LnB0cigpOyBhbmNlc3RvcjsgKSB7Ci0gICAgICAgIGF1dG8gbmV4dEFuY2VzdG9yID0gYW5jZXN0
b3ItPnBhcmVudE9yU2hhZG93SG9zdE5vZGUoKTsKKyAgICAgICAgYXV0byBuZXh0QW5jZXN0b3Ig
PSBhbmNlc3Rvci0+cGFyZW50SW5Db21wb3NlZFRyZWUoKTsKICAgICAgICAgaWYgKG5leHRBbmNl
c3RvciA9PSBiLmNvbnRhaW5lci5wdHIoKSkKICAgICAgICAgICAgIHJldHVybiBpc09mZnNldEJl
Zm9yZUNoaWxkKCpuZXh0QW5jZXN0b3IsIGIub2Zmc2V0LCAqYW5jZXN0b3IpID8gUGFydGlhbE9y
ZGVyaW5nOjpncmVhdGVyIDogUGFydGlhbE9yZGVyaW5nOjpsZXNzOwogICAgICAgICBhbmNlc3Rv
ciA9IG5leHRBbmNlc3RvcjsKQEAgLTIwNSw0ICsyMDgsNjkgQEAgUmVmUHRyPE5vZGU+IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICByZXR1cm4g
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFpbmVyLCByYW5nZS5lbmQu
Y29udGFpbmVyKTsKIH0KIAorYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBpc19sdGVx
KGRvY3VtZW50T3JkZXIocmFuZ2Uuc3RhcnQsIHBvaW50KSkgJiYgaXNfbHRlcShkb2N1bWVudE9y
ZGVyKHBvaW50LCByYW5nZS5lbmQpKTsKK30KKworYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBwb2ludCkK
K3sKKyAgICByZXR1cm4gcG9pbnQgJiYgaXNQb2ludEluUmFuZ2UocmFuZ2UsICpwb2ludCk7Cit9
CisKK1BhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSwgY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKGF1dG8gb3JkZXIgPSBk
b2N1bWVudE9yZGVyKHJhbmdlLnN0YXJ0LCBwb2ludCk7ICFpc19sdChvcmRlcikpCisgICAgICAg
IHJldHVybiBvcmRlcjsKKyAgICBpZiAoYXV0byBvcmRlciA9IGRvY3VtZW50T3JkZXIocmFuZ2Uu
ZW5kLCBwb2ludCk7ICFpc19ndChvcmRlcikpCisgICAgICAgIHJldHVybiBvcmRlcjsKKyAgICBy
ZXR1cm4gUGFydGlhbE9yZGVyaW5nOjplcXVpdmFsZW50OworfQorCitQYXJ0aWFsT3JkZXJpbmcg
ZG9jdW1lbnRPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRPcmRlcihwb2ludCwg
cmFuZ2Uuc3RhcnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgICAgICByZXR1cm4gb3JkZXI7CisgICAg
aWYgKGF1dG8gb3JkZXIgPSBkb2N1bWVudE9yZGVyKHBvaW50LCByYW5nZS5lbmQpOyAhaXNfbHQo
b3JkZXIpKQorICAgICAgICByZXR1cm4gb3JkZXI7CisgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmlu
Zzo6ZXF1aXZhbGVudDsKK30KKworYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgb3V0
ZXJSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGlubmVyUmFuZ2UpCit7CisgICAgcmV0dXJuIGlz
X2x0ZXEoZG9jdW1lbnRPcmRlcihvdXRlclJhbmdlLnN0YXJ0LCBpbm5lclJhbmdlLnN0YXJ0KSkg
JiYgaXNfZ3RlcShkb2N1bWVudE9yZGVyKG91dGVyUmFuZ2UuZW5kLCBpbm5lclJhbmdlLmVuZCkp
OworfQorCitib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBs
ZVJhbmdlJiBiKQoreworICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIoYS5zdGFydCwg
Yi5lbmQpKSAmJiBpc19sdGVxKGRvY3VtZW50T3JkZXIoYi5zdGFydCwgYS5lbmQpKTsKK30KKwor
Ly8gRklYTUU6IE5hbWUgdGhpcyAidW5pb25SYW5nZSIgaW5zdGVhZD8gVGhlIHdvcmQgInVuaW9u
IiBpcyBhIG5vdW4gbW9yZSB0aGFuIGEgdmVyYi4gV291bGQgbGlrZSB0byBjYWxsIGl0IGp1c3Qg
dW5pb24gaWYgaXQgd2Fzbid0IGZvciB0aGUgY29uZmxpY3Qgd2l0aCB0aGUgQyBrZXl3b3JkLgor
U2ltcGxlUmFuZ2UgdW5pb25SYW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBs
ZVJhbmdlJiBiKQoreworICAgIGF1dG8mIHN0YXJ0ID0gaXNfbHRlcShkb2N1bWVudE9yZGVyKGEu
c3RhcnQsIGIuc3RhcnQpKSA/IGEgOiBiOworICAgIGF1dG8mIGVuZCA9IGlzX2x0ZXEoZG9jdW1l
bnRPcmRlcihhLmVuZCwgYi5lbmQpKSA/IGIgOiBhOworICAgIHJldHVybiB7IHN0YXJ0LnN0YXJ0
LCBlbmQuZW5kIH07Cit9CisKK2Jvb2wgY29udGFpbnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
LCBjb25zdCBOb2RlJiBub2RlKQoreworICAgIC8vIEZJWE1FOiBDb25zaWRlciBhIG1vcmUgZWZm
aWNpZW50IGFsZ29yaXRobSB0aGF0IGF2b2lkcyBhbHdheXMgY29tcHV0aW5nIHRoZSBub2RlIGlu
ZGV4LgorICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgY29uc3RfY2FzdCBwb2ludCB0byBhIGRlc2ln
biBwcm9ibGVtPworICAgIGF1dG8gbm9kZVJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShj
b25zdF9jYXN0PE5vZGUmPihub2RlKSk7CisgICAgcmV0dXJuIG5vZGVSYW5nZSAmJiBjb250YWlu
cyhyYW5nZSwgKm5vZGVSYW5nZSk7Cit9CisKK2Jvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgLy8gRklYTUU6IENvbnNpZGVy
IGEgbW9yZSBlZmZpY2llbnQgYWxnb3JpdGhtIHRoYXQgYXZvaWRzIGFsd2F5cyBjb21wdXRpbmcg
dGhlIG5vZGUgaW5kZXguCisgICAgLy8gRklYTUU6IERvZXMgdGhpcyBjb25zdF9jYXN0IHBvaW50
IHRvIGEgZGVzaWduIHByb2JsZW0/CisgICAgYXV0byBub2RlUmFuZ2UgPSBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlKGNvbnN0X2Nhc3Q8Tm9kZSY+KG5vZGUpKTsKKyAgICBpZiAoIW5vZGVSYW5nZSkK
KyAgICAgICAgcmV0dXJuIG5vZGUuY29udGFpbnMocmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigp
KTsKKyAgICByZXR1cm4gaXNfbHQoZG9jdW1lbnRPcmRlcihub2RlUmFuZ2UtPnN0YXJ0LCByYW5n
ZS5lbmQpKSAmJiBpc19sdChkb2N1bWVudE9yZGVyKHJhbmdlLnN0YXJ0LCBub2RlUmFuZ2UtPmVu
ZCkpOworCit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKaW5kZXggMGQ1Y2QxZWFiMmE3
NzFlYjY3MjY1ZGQ2MzAyNDUzNDExMjdmYzVkZi4uNDYyMTBkNzhmMTg0ZTFmNThiNWI0ZWIzMzYy
NWY4M2EyODE5YzVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKQEAgLTY1LDYgKzY1LDIw
IEBAIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihj
b25zdCBTaW1wbGVSYW5nZSYpOwogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2Um
LCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCitXRUJDT1JFX0VYUE9SVCBib29sIGlzUG9pbnRJblJh
bmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOworYm9vbCBpc1Bv
aW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9p
bnQ+Jik7CisKK1dFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnMoY29uc3QgU2ltcGxlUmFuZ2Um
IG91dGVyUmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBpbm5lclJhbmdlKTsKK1dFQkNPUkVfRVhQ
T1JUIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdl
Jik7CitXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSB1bmlvblJhbmdlcyhjb25zdCBTaW1wbGVS
YW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CisKK1dFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFp
bnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CitXRUJDT1JFX0VYUE9SVCBib29s
IGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CisKKy8vIFJldHVy
bnMgZXF1aXZhbGVudCBpZiBwb2ludCBpcyBpbiByYW5nZS4KK1dFQkNPUkVfRVhQT1JUIFBhcnRp
YWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRh
cnlQb2ludCYpOworV0VCQ09SRV9FWFBPUlQgUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIo
Y29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CisKIGNsYXNzIEludGVy
c2VjdGluZ05vZGVSYW5nZTsKIEludGVyc2VjdGluZ05vZGVSYW5nZSBpbnRlcnNlY3RpbmdOb2Rl
cyhjb25zdCBTaW1wbGVSYW5nZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRl
eCAyODNhZWFkNjU4ZDQxZWUyYTBiYzM1ZjIzMDFlOTVhZjRjZTEyM2JjLi42YjE4NGNhODU3Y2E3
ZWVjYTUxZDZiYWZmNTU0YjVhMjE1MjU3N2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5j
cHAKQEAgLTc5LDQwICs3OSwxOCBAQCBib29sIGlzQXRvbWljTm9kZShjb25zdCBOb2RlKiBub2Rl
KQogICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8IGVkaXRpbmdJ
Z25vcmVzQ29udGVudCgqbm9kZSkpOwogfQogCi0vLyBDb21wYXJlIHR3byBwb3NpdGlvbnMsIHRh
a2luZyBpbnRvIGFjY291bnQgdGhlIHBvc3NpYmlsaXR5IHRoYXQgb25lIG9yIGJvdGgKLS8vIGNv
dWxkIGJlIGluc2lkZSBhIHNoYWRvdyB0cmVlLiBPbmx5IHdvcmtzIGZvciBub24tbnVsbCB2YWx1
ZXMuCisvLyBGSVhNRTogQ2hhbmdlIGNhbGxlcnMgdG8gdXNlIGRvY3VtZW50T3JkZXIgYW5kIGRl
bGV0ZSB0aGlzLgogaW50IGNvbXBhcmVQb3NpdGlvbnMoY29uc3QgUG9zaXRpb24mIGEsIGNvbnN0
IFBvc2l0aW9uJiBiKQogewotICAgIFRyZWVTY29wZSogY29tbW9uU2NvcGUgPSBjb21tb25UcmVl
U2NvcGUoYS5jb250YWluZXJOb2RlKCksIGIuY29udGFpbmVyTm9kZSgpKTsKLQotICAgIGlmICgh
Y29tbW9uU2NvcGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgTm9kZSogbm9kZUEgPSBjb21t
b25TY29wZS0+YW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUoYS5jb250YWluZXJOb2RlKCkpOwotICAg
IEFTU0VSVChub2RlQSk7Ci0gICAgYm9vbCBoYXNEZXNjZW5kZW50QSA9IG5vZGVBICE9IGEuY29u
dGFpbmVyTm9kZSgpOwotICAgIGludCBvZmZzZXRBID0gaGFzRGVzY2VuZGVudEEgPyAwIDogYS5j
b21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0KLSAgICBOb2RlKiBub2RlQiA9IGNvbW1v
blNjb3BlLT5hbmNlc3Rvck5vZGVJblRoaXNTY29wZShiLmNvbnRhaW5lck5vZGUoKSk7Ci0gICAg
QVNTRVJUKG5vZGVCKTsKLSAgICBib29sIGhhc0Rlc2NlbmRlbnRCID0gbm9kZUIgIT0gYi5jb250
YWluZXJOb2RlKCk7Ci0gICAgaW50IG9mZnNldEIgPSBoYXNEZXNjZW5kZW50QiA/IDAgOiBiLmNv
bXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKLQotICAgIGludCBiaWFzID0gMDsKLSAgICBp
ZiAobm9kZUEgPT0gbm9kZUIpIHsKLSAgICAgICAgaWYgKGhhc0Rlc2NlbmRlbnRBKQotICAgICAg
ICAgICAgYmlhcyA9IC0xOwotICAgICAgICBlbHNlIGlmIChoYXNEZXNjZW5kZW50QikKLSAgICAg
ICAgICAgIGJpYXMgPSAxOwotICAgIH0KLQotICAgIGF1dG8gY29tcGFyaXNvblJlc3VsdCA9IFJh
bmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMobm9kZUEsIG9mZnNldEEsIG5vZGVCLCBvZmZzZXRC
KTsKLSAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuIGJpYXM7Ci0gICAgYXV0byByZXN1bHQgPSBjb21wYXJpc29uUmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpOwotICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBiaWFzOworICAgIGF1dG8g
b3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKGEsIGIpOworICAgIGlmIChpc19sdChvcmRlcmluZykp
CisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoaXNfZ3Qob3JkZXJpbmcpKQorICAgICAgICBy
ZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKIH0KIAorLy8gRklYTUU6IENoYW5nZSBjYWxsZXJzIHRv
IHVzZSBkb2N1bWVudE9yZGVyIGFuZCBkZWxldGUgdGhpcy4KIGludCBjb21wYXJlUG9zaXRpb25z
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogewog
ICAgIHJldHVybiBjb21wYXJlUG9zaXRpb25zKGEuZGVlcEVxdWl2YWxlbnQoKSwgYi5kZWVwRXF1
aXZhbGVudCgpKTsKQEAgLTExNjMsOSArMTE0MSw3IEBAIHN0YXRpYyBib29sIGlzVmlzaWJseUFk
amFjZW50KGNvbnN0IFBvc2l0aW9uJiBmaXJzdCwgY29uc3QgUG9zaXRpb24mIHNlY29uZCkKIC8v
IENhbGwgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhIG5vZGUgaXMgdmlzaWJs
eSBmaXQgaW5zaWRlIHNlbGVjdGVkUmFuZ2UKIGJvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdp
dGhpbihOb2RlJiBub2RlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgLy8gSWYg
dGhlIG5vZGUgaXMgaW5zaWRlIHRoZSByYW5nZSwgdGhlbiBpdCBzdXJlbHkgaXMgY29udGFpbmVk
IHdpdGhpbi4KLSAgICBhdXRvIGNvbXBhcmlzb25SZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UocmFu
Z2UpLT5jb21wYXJlTm9kZShub2RlKTsKLSAgICBpZiAoIWNvbXBhcmlzb25SZXN1bHQuaGFzRXhj
ZXB0aW9uKCkgJiYgY29tcGFyaXNvblJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSBSYW5n
ZTo6Tk9ERV9JTlNJREUpCisgICAgaWYgKGNvbnRhaW5zKHJhbmdlLCBub2RlKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4
IGE0YzE3NGNiMzIzYjI5YmQ4MjJhZGRmZDI4NTdhMzI1ZjA0OTFjNDMuLjA5NDY2YWYxOGRhMjUw
ZGM0MDU2OWRhMTU5ZmNiMmIxMmJkMTU3M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
QEAgLTM1NTAsMTAgKzM1NTAsOCBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpyYW5n
ZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBPcHRpb25hbAogc3RhdGljIGJv
b2wgaXNGcmFtZUluUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Up
CiB7CiAgICAgZm9yIChhdXRvKiBvd25lckVsZW1lbnQgPSBmcmFtZS5vd25lckVsZW1lbnQoKTsg
b3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50KCkub3du
ZXJFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3VtZW50KCkgPT0g
JnJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm93bmVyRWxlbWVudCk7Ci0gICAg
ICAgICAgICByZXR1cm4gIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3Vt
ZW50KCkgPT0gJnJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gaW50
ZXJzZWN0cyhyYW5nZSwgKm93bmVyRWxlbWVudCk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTM3MDMsMTggKzM3MDEsMTYgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JU
ZWxlcGhvbmVOdW1iZXJzKCkKIAogICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpIHsK
LSAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBmZXcgY2hhcmFjdGVycyBpbiBlYWNo
IGRpcmVjdGlvbiB0byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNlbGVjdGVkIHBob25lIG51bWJlcnMu
Ci0gICAgICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgY2hhcmFjdGVyc1RvRXh0ZW5kID0gMTU7
Ci0gICAgICAgICAgICBhdXRvIHNlbGVjdGVkTGl2ZVJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKCpz
ZWxlY3RlZFJhbmdlKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcmFuZ2UgOiBzY2FuRm9yVGVs
ZXBob25lTnVtYmVycyhleHRlbmRTZWxlY3Rpb24oKnNlbGVjdGVkUmFuZ2UsIGNoYXJhY3RlcnNU
b0V4dGVuZCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBkbyB0aGlz
IHVuY29uZGl0aW9uYWxseSBhbmQgdGhlIGNvZGUgYmVsb3cgdGhpcyBvbmx5IHdoZW4gaXQgb3Zl
cmxhcHMgdGhlIHNlbGVjdGlvbj8KLSAgICAgICAgICAgICAgICBhZGRNYXJrZXIocmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXIpOwotCi0gICAgICAgICAgICAgICAgLy8gT25s
eSBjb25zaWRlciByYW5nZXMgd2l0aCBhIGRldGVjdGVkIHRlbGVwaG9uZSBudW1iZXIgaWYgdGhl
eSBvdmVybGFwIHdpdGggdGhlIGFjdHVhbCBzZWxlY3Rpb24gcmFuZ2UuCi0gICAgICAgICAgICAg
ICAgaWYgKHJhbmdlc092ZXJsYXAoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSwgc2VsZWN0
ZWRMaXZlUmFuZ2UucHRyKCkpKQotICAgICAgICAgICAgICAgICAgICBtX2RldGVjdGVkVGVsZXBo
b25lTnVtYmVyUmFuZ2VzLmFwcGVuZChyYW5nZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGF1
dG8gc2VsZWN0ZWRSYW5nZSA9ICpzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwor
ICAgICAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gZWFjaCBkaXJl
Y3Rpb24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBwaG9uZSBudW1iZXJzLgorICAg
ICAgICBjb25zdGV4cHIgdW5zaWduZWQgY2hhcmFjdGVyc1RvRXh0ZW5kID0gMTU7CisgICAgICAg
IGZvciAoYXV0byYgcmFuZ2UgOiBzY2FuRm9yVGVsZXBob25lTnVtYmVycyhleHRlbmRTZWxlY3Rp
b24oc2VsZWN0ZWRSYW5nZSwgY2hhcmFjdGVyc1RvRXh0ZW5kKSkpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBXaHkgZG8gd2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgaW5zdGVhZCBvZiB3aGVu
IG9ubHkgd2hlbiBpdCBvdmVybGFwcyB0aGUgc2VsZWN0aW9uPworICAgICAgICAgICAgYWRkTWFy
a2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKKworICAgICAgICAg
ICAgLy8gT25seSBjb25zaWRlciByYW5nZXMgd2l0aCBhIGRldGVjdGVkIHRlbGVwaG9uZSBudW1i
ZXIgaWYgdGhleSBvdmVybGFwIHdpdGggdGhlIHNlbGVjdGlvbi4KKyAgICAgICAgICAgIGlmIChp
bnRlcnNlY3RzKHJhbmdlLCBzZWxlY3RlZFJhbmdlKSkKKyAgICAgICAgICAgICAgICBtX2RldGVj
dGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmFwcGVuZChyYW5nZSk7CiAgICAgICAgIH0KICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDI0NmZiMjZi
N2U4NzQ3ZjMwZDg5YmU2OTdiOTkwNmQ3NGU2Yzk5ZDEuLmIwNDk3NTk2YTc1YmVjMTE5YjY4NzI0
NDljNGY1NzQ3YzVmMDNjNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcApAQCAtMjI4LDEzICsyMjgsNiBAQCBzdGF0aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxE
aXN0YW5jZShGcmFtZSYgZnJhbWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihT
Y3JvbGxiYXI6OnBhZ2VTdGVwKGhlaWdodCkpOwogfQogCi1zdGF0aWMgU2ltcGxlUmFuZ2UgdW5p
b25SYW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQotewot
ICAgIGF1dG8mIHN0YXJ0ID0gY3JlYXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRhcnlQb2lu
dHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UoYikpLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpIDw9IDAgPyBhIDogYjsKLSAgICBhdXRvJiBlbmQgPSBjcmVhdGVMaXZlUmFuZ2Uo
YSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgY3JlYXRlTGl2ZVJh
bmdlKGIpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYiA6IGE7Ci0gICAgcmV0dXJuIHsg
c3RhcnQuc3RhcnQsIGVuZC5lbmQgfTsKLX0KLQogLy8gRXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9u
cwogCiBzdGF0aWMgYm9vbCBleGVjdXRlQmFja0NvbG9yKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBF
ZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTM1Mywx
NCArMzQ2LDE2IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb0VuZE9mUGFyYWdyYXBoKEZy
YW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291CiAKIHN0YXRpYyBib29sIGV4ZWN1
dGVEZWxldGVUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Us
IGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byYgZWRpdG9yID0gZnJhbWUuZWRpdG9yKCk7
CiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7Ci0gICAgaWYgKG1hcmsg
JiYgZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSB7Ci0gICAgICAgIGlmICghc2VsZWN0
aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpmcmFtZS5lZGl0b3IoKS5z
ZWxlY3RlZFJhbmdlKCkpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6OlllcykpCisgICAgYXV0byBtYXJrUmFuZ2UgPSBlZGl0b3IubWFyaygpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmIChtYXJrUmFuZ2UgJiYgc2VsZWN0aW9u
UmFuZ2UpIHsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvblJh
bmdlcygqbWFya1JhbmdlLCAqc2VsZWN0aW9uUmFuZ2UpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotICAgIGZyYW1lLmVkaXRvcigpLnBlcmZvcm1EZWxldGUoKTsKLSAgICBmcmFtZS5l
ZGl0b3IoKS5zZXRNYXJrKHNlbGVjdGlvbi5zZWxlY3Rpb24oKSk7CisgICAgZWRpdG9yLnBlcmZv
cm1EZWxldGUoKTsKKyAgICBlZGl0b3Iuc2V0TWFyayhzZWxlY3Rpb24uc2VsZWN0aW9uKCkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDUwLDEzICsxMDQ1LDE1IEBAIHN0YXRpYyBib29s
IGV4ZWN1dGVTZWxlY3RTZW50ZW5jZShGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSwgY29uCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RUb01hcmsoRnJhbWUmIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
YXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0g
ICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7Ci0gICAg
aWYgKCFtYXJrIHx8ICFzZWxlY3Rpb24pIHsKKyAgICBhdXRvJiBlZGl0b3IgPSBmcmFtZS5lZGl0
b3IoKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBhdXRv
IG1hcmtSYW5nZSA9IGVkaXRvci5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRv
IHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgaWYgKCFtYXJrUmFuZ2UgfHwgIXNlbGVjdGlvblJhbmdlKSB7CiAgICAgICAgIFBB
TDo6c3lzdGVtQmVlcCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpzZWxlY3Rp
b24pLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7
CisgICAgc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmtSYW5nZSwg
KnNlbGVjdGlvblJhbmdlKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3Nl
VHlwaW5nOjpZZXMpOwogICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgaWdub3JlIHRoZSByZXR1cm4g
dmFsdWUgZnJvbSBzZXRTZWxlY3RlZFJhbmdlIGhlcmU/CiAgICAgcmV0dXJuIHRydWU7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGUwMTA4YjIzYTY1
ZmYwODY1ZTIzODBmNWVjMWNhYWQ1ODYzYTU3NjguLmZkMDZmNjRmYzA1NTM5YmE0OWFiNWM3NTI1
ZTRhZDcyNWRiMDk5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCkBAIC01NTQsMTggKzU1NCwxMiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXNwb25kVG9O
b2RlTW9kaWZpY2F0aW9uKE5vZGUmIG5vZGUsIGJvb2wgYmFzZVJlbW92ZWQsIGJvbwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBtX3NlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihtX3Nl
bGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAgfSBlbHNlIGlmIChpc1Jh
bmdlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdl
KCkpIHsKLSAgICAgICAgICAgIGF1dG8gY29tcGFyZU5vZGVSZXN1bHQgPSBjcmVhdGVMaXZlUmFu
Z2UoKnJhbmdlKS0+Y29tcGFyZU5vZGUobm9kZSk7Ci0gICAgICAgICAgICBpZiAoIWNvbXBhcmVO
b2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb21wYXJl
UmVzdWx0ID0gY29tcGFyZU5vZGVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfQkVGT1JFX0FORF9BRlRF
UiB8fCBjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0lOU0lERSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSBkaWQgbm90aGluZyBoZXJlLCB3aGVuIHRoaXMgbm9kZSdzIHJlbmRl
cmVyIHdhcyBkZXN0cm95ZWQsIHRoZSByZWN0IHRoYXQgaXQKLSAgICAgICAgICAgICAgICAgICAg
Ly8gb2NjdXBpZWQgd291bGQgYmUgaW52YWxpZGF0ZWQsIGJ1dCwgc2VsZWN0aW9uIGdhcHMgdGhh
dCBjaGFuZ2UgYXMgYSByZXN1bHQgb2YKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHJlbW92
YWwgd291bGRuJ3QgYmUgaW52YWxpZGF0ZWQuCi0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBEb24ndCBkbyBzbyBtdWNoIHVubmVjZXNzYXJ5IGludmFsaWRhdGlvbi4KLSAgICAgICAgICAg
ICAgICAgICAgY2xlYXJSZW5kZXJUcmVlU2VsZWN0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9zZWxlY3Rpb24u
Zmlyc3RSYW5nZSgpOyByYW5nZSAmJiBpbnRlcnNlY3RzKCpyYW5nZSwgbm9kZSkpIHsKKyAgICAg
ICAgICAgIC8vIElmIHdlIGRpZCBub3RoaW5nIGhlcmUsIHdoZW4gdGhpcyBub2RlJ3MgcmVuZGVy
ZXIgd2FzIGRlc3Ryb3llZCwgdGhlIHJlY3QgdGhhdCBpdAorICAgICAgICAgICAgLy8gb2NjdXBp
ZWQgd291bGQgYmUgaW52YWxpZGF0ZWQsIGJ1dCwgc2VsZWN0aW9uIGdhcHMgdGhhdCBjaGFuZ2Ug
YXMgYSByZXN1bHQgb2YKKyAgICAgICAgICAgIC8vIHRoZSByZW1vdmFsIHdvdWxkbid0IGJlIGlu
dmFsaWRhdGVkLgorICAgICAgICAgICAgLy8gRklYTUU6IERvbid0IGRvIHNvIG11Y2ggdW5uZWNl
c3NhcnkgaW52YWxpZGF0aW9uLgorICAgICAgICAgICAgY2xlYXJSZW5kZXJUcmVlU2VsZWN0aW9u
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjAzNCw3ICsyMDI4LDcgQEAgYm9vbCBG
cmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mIHJhbmdlLCBFQWZmaW4KICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoJnJhbmdlLT5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkgIT0gJnJhbmdl
LT5lbmQuY29udGFpbmVyLT5kb2N1bWVudCgpKQorICAgIGlmICgmcmFuZ2UtPnN0YXJ0LmRvY3Vt
ZW50KCkgIT0gJnJhbmdlLT5lbmQuZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oKnJhbmdlLCBhZmZpbml0eSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29t
bWFuZC5jcHAKaW5kZXggNWVkMGRlOWEzMTBiMzFiZTYzZTBhM2Q0MzM4OThjMTk1MjcyODU2ZS4u
NWI3YmU3ODhjNjg0ZTEyMjI5YmM3NzdlOTk2YmY5MWFkOWU1ZGIyYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcApA
QCAtNDEsNyArNDEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZXBsYWNlUmFuZ2VXaXRo
VGV4dENvbW1hbmQ6OlJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZChjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKLSAgICA6IENvbXBvc2l0
ZUVkaXRDb21tYW5kKHJhbmdlVG9CZVJlcGxhY2VkLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQo
KSwgRWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCisgICAgOiBDb21wb3NpdGVFZGl0Q29t
bWFuZChyYW5nZVRvQmVSZXBsYWNlZC5zdGFydC5kb2N1bWVudCgpLCBFZGl0QWN0aW9uOjpJbnNl
cnRSZXBsYWNlbWVudCkKICAgICAsIG1fcmFuZ2VUb0JlUmVwbGFjZWQocmFuZ2VUb0JlUmVwbGFj
ZWQpCiAgICAgLCBtX3RleHQodGV4dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDg2NzEzMjBkYzQzYzY1YWUz
ZjAwNTA0MzdmNDM5MWYxNmY4OWNmNTYuLmE4NDg2NjM2NTNhMGY3ZmYyOTczNzM2YjExOTcyYzhj
NjRjOGNhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmNwcApAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAK
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9CZUNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0
aW9uKQotICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQocmFuZ2VUb0JlQ29ycmVjdGVkLnN0YXJ0
LmNvbnRhaW5lci0+ZG9jdW1lbnQoKSwgRWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCisg
ICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChyYW5nZVRvQmVDb3JyZWN0ZWQuc3RhcnQuZG9jdW1l
bnQoKSwgRWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCiAgICAgLCBtX3JhbmdlVG9CZUNv
cnJlY3RlZChyYW5nZVRvQmVDb3JyZWN0ZWQpCiAgICAgLCBtX3NlbGVjdGlvblRvQmVDb3JyZWN0
ZWQobV9yYW5nZVRvQmVDb3JyZWN0ZWQpCiAgICAgLCBtX2NvcnJlY3Rpb24oY29ycmVjdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCA5
MDNiYzdjYmUzZmE2ZWFmNjRhYzY2NzhkMjJjYTk0MmRjOThlMDNiLi41MjZkZWVkZjY4MDdkMzZh
ZTc4OWVjZTQyYTA4MTA4MGE1ZmZmMzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0zMzcsNyArMzM3LDcgQEAgYXV0byBUZXh0Q2hlY2tp
bmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGJv
b2wgY2hlY2sKICAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyKQogICAgICAgICAgICAg
ICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKICAg
ICAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247Ci0gICAgICAg
ICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHBhcmFncmFwaFJhbmdlLnN0YXJ0LmNvbnRhaW5l
ci0+ZG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSBwYXJhZ3JhcGhSYW5nZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CiAgICAgICAgICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LnRleHRDaGVj
a2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tpbmdUeXBlcywgcmVzdWx0cywgY3VycmVudFNl
bGVjdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rp
b25hcnlMb29rdXBMZWdhY3kubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9u
YXJ5TG9va3VwTGVnYWN5Lm1tCmluZGV4IDg3NjEyMGJiMDliMTJlMDllNGRlY2E1OGU1NTRkMzAy
NzAxZWY0MzUuLjU1ODI0ZmEwODM2ZTAzM2M3OTI2NjE2YTQ3OTcxMTIwZTM3NDNjOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3ku
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2Fj
eS5tbQpAQCAtNjgsMTEgKzY4LDggQEAgc3RhdGljIGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWaXMKICAgICBpZiAo
IXNlbGVjdGlvbi5pc1JhbmdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8g
c2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICgh
c2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGNyZWF0
ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmNvbnRhaW5zKHBvc2l0aW9uKTsKKyAgICBhdXRv
IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpOworICAgIHJldHVybiBzZWxl
Y3RlZFJhbmdlICYmIGlzUG9pbnRJblJhbmdlKCpzZWxlY3RlZFJhbmdlLCBtYWtlQm91bmRhcnlQ
b2ludChwb3NpdGlvbikpOwogfQogCiBPcHRpb25hbDxzdGQ6OnR1cGxlPFNpbXBsZVJhbmdlLCBO
U0RpY3Rpb25hcnkgKj4+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApp
bmRleCAxZjcxOTRhNzMyOGU5NDdhZWJiNjJhYzFjOGQ1OGZlOTJhMTUwYTdlLi42YjhlMzk5YTVm
OGFlZGYxZWJiNDdiYmI2ZjZkNTI2OWRiYTg1ZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCkBAIC0xMTIwLDcgKzExMjAsNyBAQCBzdGF0aWMgYm9vbCBjb250ZXh0UHJlc2VydmVzTmV3
bGluZShjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dCkKIAogUmVmPERvY3VtZW50RnJhZ21lbnQ+
IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGNvbnN0
IFN0cmluZyYgdGV4dCkKIHsKLSAgICBhdXRvJiBkb2N1bWVudCA9IGNvbnRleHQuc3RhcnQuY29u
dGFpbmVyLT5kb2N1bWVudCgpOworICAgIGF1dG8mIGRvY3VtZW50ID0gY29udGV4dC5zdGFydC5k
b2N1bWVudCgpOwogICAgIGF1dG8gZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZy
YWdtZW50KCk7CiAgICAgCiAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAppbmRleCBh
NWJlMDcxZTM2ODYwNzdlZTM2ZDIxZTM1YTU4Mzk4MDRkOTg3ZjIyLi42MDllZDExMTRmZDE5OTZj
ZTg5NzNiNzRjNzliYzdmZTA1MjZlZDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcApAQCAtNDU1LDcgKzQ1NSw3IEBA
IFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoRnJhbWUm
IGZyYW1lKQogCiBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3Jl
YXRlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBhdXRvJiBkb2N1bWVudCA9IHJh
bmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IHJh
bmdlLnN0YXJ0LmRvY3VtZW50KCk7CiAgICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgp
OwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IDk2NDQ5ZDMyN2FlYjlhOTFjZmVkNzkyOWNhNmMzNjY0
MTIwMjA1YmYuLmI3YjEyYWU2MTc5ZTg1MGU2ZDhiNmQ5OWIwMzA1YmQ1NjIzM2I4MTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKQEAgLTI4NCwxNSArMjg0LDEzIEBAIHZvaWQg
RE9NU2VsZWN0aW9uOjptb2RpZnkoY29uc3QgU3RyaW5nJiBhbHRlclN0cmluZywgY29uc3QgU3Ry
aW5nJiBkaXJlY3Rpb25TdHJpCiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVNlbGVjdGlvbjo6ZXh0
ZW5kKE5vZGUmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICBhdXRvKiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCk7CisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIodGhpcy0+ZnJhbWUoKSk7
CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBpZiAob2Zmc2V0ID4g
KG5vZGUuaXNDaGFyYWN0ZXJEYXRhTm9kZSgpID8gY2FyZXRNYXhPZmZzZXQobm9kZSkgOiBub2Rl
LmNvdW50Q2hpbGROb2RlcygpKSkKKyAgICBpZiAob2Zmc2V0ID4gbm9kZS5sZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgaWYgKCFpc1Zh
bGlkRm9yUG9zaXRpb24oJm5vZGUpKQogICAgICAgICByZXR1cm4geyB9OwotCi0gICAgUmVmPEZy
YW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0RXh0ZW50
KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmbm9kZSwgb2Zmc2V0KSwgRE9XTlNUUkVBTSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTMwMSwyMiArMjk5LDEwIEBAIEV4Y2VwdGlvbk9yPFJl
ZjxSYW5nZT4+IERPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdCh1bnNpZ25lZCBpbmRleCkKIHsKICAg
ICBpZiAoaW5kZXggPj0gcmFuZ2VDb3VudCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW5kZXhTaXplRXJyb3IgfTsKLQotICAgIC8vIElmIHlvdSdyZSBoaXR0aW5nIHRoaXMsIHlvdSd2
ZSBhZGRlZCBicm9rZW4gbXVsdGktcmFuZ2Ugc2VsZWN0aW9uIHN1cHBvcnQuCi0gICAgQVNTRVJU
KHJhbmdlQ291bnQoKSA9PSAxKTsKLQotICAgIGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsK
LSAgICBpZiAoYXV0byogc2hhZG93QW5jZXN0b3IgPSBzZWxlY3Rpb25TaGFkb3dBbmNlc3Rvcigq
ZnJhbWUpKSB7Ci0gICAgICAgIGF1dG8qIGNvbnRhaW5lciA9IHNoYWRvd0FuY2VzdG9yLT5wYXJl
bnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCk7Ci0gICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNo
YWRvd0FuY2VzdG9yLT5jb21wdXRlTm9kZUluZGV4KCk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVM
aXZlUmFuZ2UobWFrZVNpbXBsZVJhbmdlKEJvdW5kYXJ5UG9pbnQgeyAqY29udGFpbmVyLCBvZmZz
ZXQgfSkpOwotICAgIH0KLQotICAgIGF1dG8gZmlyc3RSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7Ci0gICAgQVNTRVJUKGZpcnN0UmFuZ2UpOwotICAg
IGlmICghZmlyc3RSYW5nZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVy
cm9yIH07Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZSgqZmlyc3RSYW5nZSk7CisgICAgYXV0
byYgZnJhbWUgPSAqdGhpcy0+ZnJhbWUoKTsKKyAgICBpZiAoYXV0byBzaGFkb3dBbmNlc3RvciA9
IHNlbGVjdGlvblNoYWRvd0FuY2VzdG9yKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUxp
dmVSYW5nZShtYWtlU2ltcGxlUmFuZ2UoKm1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZSgqc2hh
ZG93QW5jZXN0b3IpKSk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZSgqZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKTsKIH0KIAogdm9pZCBET01TZWxlY3Rpb246
OnJlbW92ZUFsbFJhbmdlcygpCkBAIC0zMjcsNTAgKzMxMywyMiBAQCB2b2lkIERPTVNlbGVjdGlv
bjo6cmVtb3ZlQWxsUmFuZ2VzKCkKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKIH0K
IAotdm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlJiByYW5nZSkKK3ZvaWQgRE9NU2Vs
ZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgbGl2ZVJhbmdlKQogewotICAgIGF1dG8qIGZyYW1lID0g
dGhpcy0+ZnJhbWUoKTsKKyAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cih0aGlzLT5mcmFtZSgp
KTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWY8RnJhbWU+IHBy
b3RlY3RvcigqZnJhbWUpOwotCisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShsaXZl
UmFuZ2UpOwogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKLSAgICBh
dXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29u
dGFpbmVyLT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgIHNlbGVjdGlvbi5zZXRT
ZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7CisKKyAgICBpZiAoYXV0byBzZWxlY3Rl
ZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKKyAg
ICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlLT5zdGFydC5jb250YWluZXItPmNvbnRhaW5pbmdTaGFk
b3dSb290KCkgJiYgaW50ZXJzZWN0cygqc2VsZWN0ZWRSYW5nZSwgcmFuZ2UpKQorICAgICAgICAg
ICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbih1bmlvblJhbmdlcygqc2VsZWN0ZWRSYW5nZSwgcmFu
Z2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gbm9ybWFsaXplZFJhbmdl
ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpOwotICAgIGF1dG8gcmVzdWx0ID0gcmFu
Z2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgKm5vcm1hbGl6
ZWRSYW5nZSk7Ci0gICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpID09IC0xKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZGlz
Y29udGlndW91cyBzZWxlY3Rpb24uIFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIHRoZSB0d28gcmFu
Z2VzIGRvbid0IGludGVyc2VjdC4KLSAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsICpub3JtYWxpemVkUmFuZ2UpOwotICAgICAg
ICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVl
KCkgPiAtMSkgewotICAgICAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqbm9ybWFsaXplZFJhbmdlKTsKLSAgICAgICAgICAgIGlm
ICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9
PSAtMSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSByYW5nZXMgaW50ZXJzZWN0LgotICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8obWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbigm
cmFuZ2Uuc3RhcnRDb250YWluZXIoKSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSksIG1ha2VEZXByZWNh
dGVkTGVnYWN5UG9zaXRpb24oJm5vcm1hbGl6ZWRSYW5nZS0+ZW5kQ29udGFpbmVyKCksIG5vcm1h
bGl6ZWRSYW5nZS0+ZW5kT2Zmc2V0KCkpLCBET1dOU1RSRUFNKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG5ldyByYW5nZSBjb250YWlucyB0aGUgb3JpZ2lu
YWwgcmFuZ2UuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihtYWtlU2lt
cGxlUmFuZ2UocmFuZ2UpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxlY3Rpb24uIFdl
IGRvbid0IGRvIGFueXRoaW5nIGlmIHRoZSB0d28gcmFuZ2VzIGRvbid0IGludGVyc2VjdC4KLSAg
ICAgICAgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9f
U1RBUlQsICpub3JtYWxpemVkUmFuZ2UpOwotICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRp
b24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPCAxKSB7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSByYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsICpu
b3JtYWxpemVkUmFuZ2UpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkg
JiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlIG9yaWdpbmFsIHJhbmdlIGNvbnRhaW5zIHRoZSBuZXcgcmFuZ2UuCi0gICAgICAgICAg
ICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihtYWtlU2ltcGxlUmFuZ2UoKm5vcm1hbGl6ZWRS
YW5nZSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgcmFu
Z2VzIGludGVyc2VjdC4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKG1ha2VEZXBy
ZWNhdGVkTGVnYWN5UG9zaXRpb24oJm5vcm1hbGl6ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwg
bm9ybWFsaXplZFJhbmdlLT5zdGFydE9mZnNldCgpKSwgbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3Np
dGlvbigmcmFuZ2UuZW5kQ29udGFpbmVyKCksIHJhbmdlLmVuZE9mZnNldCgpKSwgRE9XTlNUUkVB
TSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgc2VsZWN0aW9uLnNldFNl
bGVjdGlvbihyYW5nZSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpkZWxldGVGcm9tRG9jdW1l
bnQoKQpAQCAtMzkyLDQ1ICszNTAsMTkgQEAgdm9pZCBET01TZWxlY3Rpb246OmRlbGV0ZUZyb21E
b2N1bWVudCgpCiAKIGJvb2wgRE9NU2VsZWN0aW9uOjpjb250YWluc05vZGUoTm9kZSYgbm9kZSwg
Ym9vbCBhbGxvd1BhcnRpYWwpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IFRoaXMgYmVoYXZpb3Ig
ZG9lcyBub3QgbWF0Y2ggd2hhdCB0aGUgc2VsZWN0aW9uIEFQSSBzdGFuZGFyZCBzcGVjaWZpZXMu
CisgICAgaWYgKG5vZGUuaXNUZXh0Tm9kZSgpKQorICAgICAgICBhbGxvd1BhcnRpYWwgPSB0cnVl
OworCiAgICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxl
Y3Rpb24oKTsKLSAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgIT0gJm5vZGUuZG9jdW1lbnQoKSB8
fCBzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZjxO
b2RlPiBwcm90ZWN0ZWROb2RlKG5vZGUpOwotICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVj
dGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0ZWRS
YW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAg
aWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29u
dGFpbmluZ1NoYWRvd1Jvb3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ29udGFp
bmVyTm9kZSogcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50
Tm9kZSB8fCAhcGFyZW50Tm9kZS0+aXNDb25uZWN0ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwotCi0g
ICAgYXV0byBzdGFydHNSZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBhcmVu
dE5vZGUsIG5vZGVJbmRleCwgJnNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHNlbGVj
dGVkUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwotICAgIGlmIChzdGFydHNSZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZW5kc1Jlc3VsdCA9IFJh
bmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgJnNl
bGVjdGVkUmFuZ2UtPmVuZENvbnRhaW5lcigpLCBzZWxlY3RlZFJhbmdlLT5lbmRPZmZzZXQoKSk7
Ci0gICAgQVNTRVJUKCFlbmRzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKTsKLSAgICBib29sIGlzTm9k
ZUZ1bGx5U2VsZWN0ZWQgPSAhc3RhcnRzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHN0YXJ0c1Jl
c3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+PSAwCi0gICAgICAgICYmICFlbmRzUmVzdWx0Lmhh
c0V4Y2VwdGlvbigpICYmIGVuZHNSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMDsKLSAg
ICBpZiAoaXNOb2RlRnVsbHlTZWxlY3RlZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBh
dXRvIHN0YXJ0RW5kUmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhwYXJlbnRO
b2RlLCBub2RlSW5kZXgsICZzZWxlY3RlZFJhbmdlLT5lbmRDb250YWluZXIoKSwgc2VsZWN0ZWRS
YW5nZS0+ZW5kT2Zmc2V0KCkpOwotICAgIEFTU0VSVCghc3RhcnRFbmRSZXN1bHQuaGFzRXhjZXB0
aW9uKCkpOwotICAgIGF1dG8gZW5kU3RhcnRSZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsICZzZWxlY3RlZFJhbmdlLT5zdGFydENv
bnRhaW5lcigpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBBU1NFUlQoIWVu
ZFN0YXJ0UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKTsKLSAgICBib29sIGlzTm9kZUZ1bGx5VW5zZWxl
Y3RlZCA9ICghc3RhcnRFbmRSZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgc3RhcnRFbmRSZXN1bHQu
cmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKQotICAgICAgICB8fCAoIWVuZFN0YXJ0UmVzdWx0Lmhh
c0V4Y2VwdGlvbigpICYmIGVuZFN0YXJ0UmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCk7
Ci0gICAgaWYgKGlzTm9kZUZ1bGx5VW5zZWxlY3RlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIGFsbG93UGFydGlhbCB8fCBub2RlLmlzVGV4dE5vZGUoKTsKKyAgICByZXR1
cm4gYWxsb3dQYXJ0aWFsID8gaW50ZXJzZWN0cygqc2VsZWN0ZWRSYW5nZSwgbm9kZSkgOiBjb250
YWlucygqc2VsZWN0ZWRSYW5nZSwgbm9kZSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpzZWxl
Y3RBbGxDaGlsZHJlbihOb2RlJiBub2RlKQpAQCAtNDgzLDExICs0MTUsNyBAQCB1bnNpZ25lZCBE
T01TZWxlY3Rpb246OnNoYWRvd0FkanVzdGVkT2Zmc2V0KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
bikgY29uc3QKIGJvb2wgRE9NU2VsZWN0aW9uOjppc1ZhbGlkRm9yUG9zaXRpb24oTm9kZSogbm9k
ZSkgY29uc3QKIHsKICAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgcmV0dXJuICZub2RlLT5kb2N1bWVudCgpID09IGZyYW1lLT5kb2N1bWVu
dCgpOworICAgIHJldHVybiBmcmFtZSAmJiAoIW5vZGUgfHwgJm5vZGUtPmRvY3VtZW50KCkgPT0g
ZnJhbWUtPmRvY3VtZW50KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IGY5MmFiM2JlNjQwOGJlYjE2Njc0M2U1
ODNmM2NjYjgyZDRhOWVkNzMuLjNjYzJjZWJhYzVhODAxZjM5Yzg3YWEzMGFmOTAyOWVmYWVmYzI5
ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0xNTQsNyArMTU0
LDcgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50RnJv
bURyYWdEYXRhKGNvbnN0IERyYWdEYXRhJiBkcmEKICAgICAgICAgICAgIFN0cmluZyB0aXRsZTsK
ICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBkcmFnRGF0YS5hc1VSTChEcmFnRGF0YTo6RG9Ob3RD
b252ZXJ0RmlsZW5hbWVzLCAmdGl0bGUpOwogICAgICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0YXJ0LmNvbnRh
aW5lci0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGNvbnRl
eHQuc3RhcnQuZG9jdW1lbnQoKTsKICAgICAgICAgICAgICAgICBhdXRvIGFuY2hvciA9IEhUTUxB
bmNob3JFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgIGFuY2hvci0+
c2V0SHJlZih1cmwpOwogICAgICAgICAgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpIHsKQEAg
LTc3NCwxNyArNzc0LDEzIEBAIEVsZW1lbnQqIERyYWdDb250cm9sbGVyOjpkcmFnZ2FibGVFbGVt
ZW50KGNvbnN0IEZyYW1lKiBzb3VyY2VGcmFtZSwgRWxlbWVudCogc3RhCiAgICAgc3RhdGUudHlw
ZSA9IHNvdXJjZUZyYW1lLT5zZWxlY3Rpb24oKS5jb250YWlucyhkcmFnT3JpZ2luKSA/IERyYWdT
b3VyY2VBY3Rpb246OlNlbGVjdGlvbiA6IE9wdGlvblNldDxEcmFnU291cmNlQWN0aW9uPih7IH0p
OwogICAgIGlmICghc3RhcnRFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogI2lm
IEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IGVu
Y2xvc2luZ0F0dGFjaG1lbnRFbGVtZW50KCpzdGFydEVsZW1lbnQpKSB7Ci0gICAgICAgIGF1dG8g
c2VsZWN0aW9uID0gc291cmNlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAg
ICBhdXRvJiBzZWxlY3Rpb24gPSBzb3VyY2VGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CiAgICAgICAgIGJvb2wgaXNTaW5nbGVBdHRhY2htZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLnN0
YXJ0KCkgPT0gUG9zaXRpb24oYXR0YWNobWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNC
ZWZvcmVBbmNob3IpICYmIHNlbGVjdGlvbi5lbmQoKSA9PSBQb3NpdGlvbihhdHRhY2htZW50Lmdl
dCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yKTsKLSAgICAgICAgYm9vbCBpc0F0
dGFjaG1lbnRFbGVtZW50SW5DdXJyZW50U2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAgIGlmIChh
dXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAg
ICAgICAgICAgYXV0byBjb21wYXJlUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJh
bmdlKS0+Y29tcGFyZU5vZGUoKmF0dGFjaG1lbnQpOwotICAgICAgICAgICAgaXNBdHRhY2htZW50
RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiA9ICFjb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlvbigp
ICYmIGNvbXBhcmVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPT0gUmFuZ2U6Ok5PREVfSU5T
SURFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpc0F0dGFjaG1lbnRFbGVtZW50SW5DdXJy
ZW50U2VsZWN0aW9uIHx8IGlzU2luZ2xlQXR0YWNobWVudFNlbGVjdGlvbikgeworICAgICAgICBh
dXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpOworICAgICAgICBpZiAo
aXNTaW5nbGVBdHRhY2htZW50U2VsZWN0aW9uIHx8ICFzZWxlY3RlZFJhbmdlIHx8ICFjb250YWlu
cygqc2VsZWN0ZWRSYW5nZSwgKmF0dGFjaG1lbnQpKSB7CiAgICAgICAgICAgICBzdGF0ZS50eXBl
ID0gRHJhZ1NvdXJjZUFjdGlvbjo6QXR0YWNobWVudDsKICAgICAgICAgICAgIHJldHVybiBhdHRh
Y2htZW50LmdldCgpOwogICAgICAgICB9CkBAIC0xNDcxLDggKzE0NjcsNyBAQCB2b2lkIERyYWdD
b250cm9sbGVyOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0IFZl
Y3RvcjxJbnRTaXplPgogCiAgICAgVmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVtZW50Pj4gcGxhY2Vo
b2xkZXJzOwogICAgIGZvciAoYXV0byYgcGxhY2Vob2xkZXIgOiBkZXNjZW5kYW50c09mVHlwZTxI
VE1MSW1hZ2VFbGVtZW50Pihkb3duY2FzdDxDb250YWluZXJOb2RlPigqY29udGFpbmVyKSkpIHsK
LSAgICAgICAgYXV0byBpbnRlcnNlY3RzTm9kZSA9IGNyZWF0ZUxpdmVSYW5nZSgqaW5zZXJ0ZWRD
b250ZW50UmFuZ2UpLT5pbnRlcnNlY3RzTm9kZShwbGFjZWhvbGRlcik7Ci0gICAgICAgIGlmICgh
aW50ZXJzZWN0c05vZGUuaGFzRXhjZXB0aW9uKCkgJiYgaW50ZXJzZWN0c05vZGUucmV0dXJuVmFs
dWUoKSkKKyAgICAgICAgaWYgKGludGVyc2VjdHMoKmluc2VydGVkQ29udGVudFJhbmdlLCBwbGFj
ZWhvbGRlcikpCiAgICAgICAgICAgICBwbGFjZWhvbGRlcnMuYXBwZW5kKHBsYWNlaG9sZGVyKTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAzMDA1ZTBjMmFl
ZTZiYTcyMTA4NTA5OTMxOTlkMWM5NDNiZTgzZjBhLi5iNDU1YjFkZWI2ZTQ5MTVlNGU5MWEwZTU1
MTBhNzMwMTEzMTNmMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0y
NzQxLDggKzI3NDEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNv
bnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogdGFyZ2V0TgogICAgIC8vIHdpbGwgc2V0
IGEgc2VsZWN0aW9uIGluc2lkZSBpdCwgd2hpY2ggd2lsbCBhbHNvIHNldCB0aGUgZm9jdXNlZCBl
bGVtZW50LgogICAgIGlmIChlbGVtZW50ICYmIG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgp
KSB7CiAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNy
ZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb21wYXJlTm9kZSgqZWxlbWVudCk7Ci0gICAgICAgICAg
ICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVl
KCkgPT0gUmFuZ2U6Ok5PREVfSU5TSURFICYmIGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKG1fZnJh
bWUuZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSkpCisgICAgICAgICAgICBpZiAoY29udGFp
bnMoKnJhbmdlLCAqZWxlbWVudCkgJiYgZWxlbWVudC0+aXNEZXNjZW5kYW50T2YobV9mcmFtZS5k
b2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDQ5NzI5ZDA5Njk3ODAx
MWU4ZTc1MGFhMzg0OGI2YmMzNDAwZTMwNjEuLmE3NzgxMGIwMjBiZjVhOGQ4NTIyY2FjOGIyNWIz
NjkyNTg4MzI1OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNzMwLDE5ICs3MzAsMTkgQEAgYXV0
byBQYWdlOjpmaW5kVGV4dE1hdGNoZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25z
IG9wdGlvbnMsIHVuc2lnbmVkIGwKIAogICAgIGlmIChmcmFtZVdpdGhTZWxlY3Rpb24pIHsKICAg
ICAgICAgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uID0gTm9NYXRjaEFmdGVyVXNlclNlbGVjdGlv
bjsKLSAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgICAgIGF1dG8gc2VsZWN0ZWRS
YW5nZSA9ICpmcmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0
UmFuZ2UoKTsKICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkgewogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IHJlc3VsdC5yYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1p
KSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb21wYXJpc29uUmVzdWx0ID0gY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19T
VEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdC5yYW5nZXNbaSAtIDFdKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjb21wYXJpc29uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmlzb25S
ZXN1bHQucmV0dXJuVmFsdWUoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2Vl
bXMgbGlrZSB0aGlzIHNob3VsZCBiZSBpc19ndGVxIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIHNh
bWUgc3RyaW5nIGZvdW5kIHR3aWNlIGluIGEgcm93LgorICAgICAgICAgICAgICAgIGlmIChpc19n
dChkb2N1bWVudE9yZGVyKHNlbGVjdGVkUmFuZ2Uuc3RhcnQsIHJlc3VsdC5yYW5nZXNbaSAtIDFd
LmVuZCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbiA9
IGkgLSAxOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMCwgc2l6ZSA9IHJlc3VsdC5yYW5nZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBjb21wYXJpc29uUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgY3Jl
YXRlTGl2ZVJhbmdlKHJlc3VsdC5yYW5nZXNbaV0pKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNv
bXBhcmlzb25SZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgY29tcGFyaXNvblJlc3VsdC5yZXR1cm5W
YWx1ZSgpIDwgMCkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTZWVtcyBsaWtlIHRoaXMg
c2hvdWxkIGJlIGlzX2x0ZXEgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgc2FtZSBzdHJpbmcgZm91
bmQgdHdpY2UgaW4gYSByb3cuCisgICAgICAgICAgICAgICAgaWYgKGlzX2x0KGRvY3VtZW50T3Jk
ZXIoc2VsZWN0ZWRSYW5nZS5lbmQsIHJlc3VsdC5yYW5nZXNbaV0uc3RhcnQpKSkgewogICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuaW5kZXhGb3JTZWxlY3Rpb24gPSBpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC03NjMsMTEgKzc2MywxMSBAQCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gUGFnZTo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRh
cmdldCwgY29uc3QgT3B0aW9uYWw8UwogICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKHJlZmVyZW5jZVJhbmdlICYmIHJlZmVy
ZW5jZVJhbmdlLT5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkucGFnZSgpICE9IHRoaXMpCisg
ICAgaWYgKHJlZmVyZW5jZVJhbmdlICYmIHJlZmVyZW5jZVJhbmdlLT5zdGFydC5kb2N1bWVudCgp
LnBhZ2UoKSAhPSB0aGlzKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgQ2Fu
V3JhcCBjYW5XcmFwID0gb3B0aW9ucy5jb250YWlucyhXcmFwQXJvdW5kKSA/IENhbldyYXA6Olll
cyA6IENhbldyYXA6Ok5vOwotICAgIEZyYW1lKiBmcmFtZSA9IHJlZmVyZW5jZVJhbmdlID8gcmVm
ZXJlbmNlUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1haW5G
cmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFu
Z2UtPnN0YXJ0LmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtYWluRnJhbWUoKTsKICAgICBGcmFtZSog
c3RhcnRGcmFtZSA9IGZyYW1lOwogICAgIGRvIHsKICAgICAgICAgaWYgKGF1dG8gcmVzdWx0UmFu
Z2UgPSBmcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIGZyYW1lID09IHN0YXJ0
RnJhbWUgPyByZWZlcmVuY2VSYW5nZSA6IFdURjo6bnVsbG9wdCwgb3B0aW9ucyAtIFdyYXBBcm91
bmQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5
Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIubW0KaW5kZXggMmVmYzQxZTNkNDI3MzI2NTkyN2FkZTViOGJiYTk2YTc3MTIzNjk4
NS4uZjE2ZWJjNTg2YzdhN2MwNDE4ZjQ3ZWY5NGM2NTU2MzI3OGI5OTViNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBA
IC02MzAsNyArNjMwLDcgQEAgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0KiBT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVsZXBob25lTnUKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IG1fcG90ZW50aWFsSGlnaGxp
Z2h0cykgewotICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUZWxl
cGhvbmVOdW1iZXJUeXBlICYmIGNyZWF0ZUxpdmVSYW5nZShoaWdobGlnaHQtPnJhbmdlKCkpLT5j
b250YWlucyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKSkpCisgICAgICAgIGlmICho
aWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlRlbGVwaG9uZU51bWJlclR5cGUgJiYgY29u
dGFpbnMoaGlnaGxpZ2h0LT5yYW5nZSgpLCAqc2VsZWN0aW9uUmFuZ2UpKQogICAgICAgICAgICAg
cmV0dXJuIGhpZ2hsaWdodC5nZXQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKaW5kZXggYjZlYTE1NTMwNzk3N2Q5ZTU3ZDI0YTgwN2UwZjI2NzI4
ZTljZWRiMi4uOTZiZGY1NGU1YzNhMjMzNTFkYWE5YTYxMjFiMTkwNzllNzNjNDllNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTE5NzUsNyArMTk3NSw3
IEBAIHN0YXRpYyBWZWN0b3I8RmxvYXRSZWN0PiBib3JkZXJBbmRUZXh0UmVjdHMoY29uc3QgU2lt
cGxlUmFuZ2UmIHJhbmdlLCBDb29yZGluYXRlCiB7CiAgICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVj
dHM7CiAKLSAgICByYW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIGJvb2wgdXNlVmlz
aWJsZUJvdW5kcyA9IGJlaGF2aW9yLmNvbnRhaW5zKFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0
QmVoYXZpb3I6OlVzZVZpc2libGVCb3VuZHMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKaW5kZXggOGNmNDI4N2UwYWJlNjMzMmFkNDQyNTI4NWM3MjJmYWY5NGIzNjBmZi4uZDlk
NWZlNDYwYmYzODg2NzJjNWFlNDE0ZDhiYzY1NzRjZjIxY2ZjNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcApAQCAtMjE2MSwyNyArMjE2MSw0NSBAQCB1bnNpZ25lZCBJbnRlcm5h
bHM6Omxlbmd0aEZyb21SYW5nZShFbGVtZW50JiBzY29wZSwgY29uc3QgUmFuZ2UmIHJhbmdlKQog
ICAgIHJldHVybiBjbGFtcFRvPHVuc2lnbmVkPihjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQ
b2ludEJlZm9yZU5vZGVDb250ZW50cyhzY29wZSksIG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpLmxl
bmd0aCk7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0KGNvbnN0IFJhbmdlJiBy
YW5nZSkKK1N0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0KGNvbnN0IFJhbmdlJiBsaXZlUmFu
Z2UpCiB7Ci0gICAgcmV0dXJuIHJhbmdlLnRleHQoKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNp
bXBsZVJhbmdlKGxpdmVSYW5nZSk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVM
YXlvdXQoKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlKTsKIH0KIAotU3RyaW5nIEludGVy
bmFsczo6cmFuZ2VBc1RleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSYg
cmFuZ2UpCisvLyBGSVhNRTogRmluZCBhIGdvb2QgcGxhY2UgZm9yIHRoaXMgZ2VuZXJhbCBwdXJw
b3NlIGFsZ29yaXRobS4KK3N0YXRpYyBTdHJpbmcgam9pbihWZWN0b3I8U3RyaW5nPiYmIHN0cmlu
Z3MpCiB7Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBmb3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3IobWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7ICFi
YWNrd2FyZHNJdGVyYXRvci5hdEVuZCgpOyBiYWNrd2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpCi0g
ICAgICAgIHJlc3VsdC5pbnNlcnQoYmFja3dhcmRzSXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCks
IDApOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAg
Zm9yIChhdXRvJiBzdHJpbmcgOiBzdHJpbmdzKQorICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1v
dmUoc3RyaW5nKSk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCitTdHJpbmcg
SW50ZXJuYWxzOjpyYW5nZUFzVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJh
bmdlJiBsaXZlUmFuZ2UpCit7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShsaXZl
UmFuZ2UpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAg
VmVjdG9yPFN0cmluZz4gc3RyaW5nczsKKyAgICBmb3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0
SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3IocmFuZ2UpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRF
bmQoKTsgYmFja3dhcmRzSXRlcmF0b3IuYWR2YW5jZSgpKQorICAgICAgICBzdHJpbmdzLmFwcGVu
ZChiYWNrd2FyZHNJdGVyYXRvci50ZXh0KCkudG9TdHJpbmcoKSk7CisgICAgc3RyaW5ncy5yZXZl
cnNlKCk7CisgICAgcmV0dXJuIGpvaW4oV1RGTW92ZShzdHJpbmdzKSk7CiB9CiAKLVJlZjxSYW5n
ZT4gSW50ZXJuYWxzOjpzdWJyYW5nZShSYW5nZSYgcmFuZ2UsIHVuc2lnbmVkIHJhbmdlTG9jYXRp
b24sIHVuc2lnbmVkIHJhbmdlTGVuZ3RoKQorUmVmPFJhbmdlPiBJbnRlcm5hbHM6OnN1YnJhbmdl
KFJhbmdlJiBsaXZlUmFuZ2UsIHVuc2lnbmVkIHJhbmdlTG9jYXRpb24sIHVuc2lnbmVkIHJhbmdl
TGVuZ3RoKQogewotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJh
bmdlKG1ha2VTaW1wbGVSYW5nZShyYW5nZSksIHsgcmFuZ2VMb2NhdGlvbiwgcmFuZ2VMZW5ndGgg
fSkpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobGl2ZVJhbmdlKTsKKyAgICBy
YW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworICAgIHJldHVybiBjcmVhdGVM
aXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKHJhbmdlLCB7IHJhbmdlTG9jYXRpb24sIHJh
bmdlTGVuZ3RoIH0pKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBJbnRlcm5hbHM6OnJhbmdlT2ZTdHJp
bmdOZWFyTG9jYXRpb24oY29uc3QgUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIHRleHQsIHVu
c2lnbmVkIHRhcmdldE9mZnNldCkKK1JlZlB0cjxSYW5nZT4gSW50ZXJuYWxzOjpyYW5nZU9mU3Ry
aW5nTmVhckxvY2F0aW9uKGNvbnN0IFJhbmdlJiBsaXZlUmFuZ2UsIGNvbnN0IFN0cmluZyYgdGV4
dCwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0KQogewotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2Uo
ZmluZENsb3Nlc3RQbGFpblRleHQobWFrZVNpbXBsZVJhbmdlKHJhbmdlKSwgdGV4dCwgeyB9LCB0
YXJnZXRPZmZzZXQpKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGxpdmVSYW5n
ZSk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKKyAgICByZXR1
cm4gY3JlYXRlTGl2ZVJhbmdlKGZpbmRDbG9zZXN0UGxhaW5UZXh0KHJhbmdlLCB0ZXh0LCB7IH0s
IHRhcmdldE9mZnNldCkpOwogfQogCiAjaWYgIVBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwCmluZGV4IDA2NzhjZDQzZDM2MWM0ODdkNmQ4ZmVi
Y2Y0Y2U2ZGE4NjY3ZWM3ODcuLjljNzFlNGZlMzc1MjQzYWRhMTdiNzI5YzcyNjQ0NTEzZmE1YzYw
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlLmNwcApAQCAtMjUs
NiArMjUsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRE9NRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNFeGVjU3RhdGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgIldlYktpdERPTURvY3Vt
ZW50RnJhZ21lbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCkBAIC0zNTUsOSArMzU2LDcgQEAgZ3Nob3J0
IHdlYmtpdF9kb21fcmFuZ2VfY29tcGFyZV9ib3VuZGFyeV9wb2ludHMoV2ViS2l0RE9NUmFuZ2Uq
IHNlbGYsIGd1c2hvcnQgaG8KICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1JBTkdFKHNlbGYpLCAwKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1JBTkdFKHNvdXJjZVJhbmdlKSwgMCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9y
IHx8ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIFdlYkNvcmU6OlJhbmdlKiBjb252ZXJ0ZWRTb3VyY2VSYW5nZSA9IFdlYktp
dDo6Y29yZShzb3VyY2VSYW5nZSk7Ci0gICAgYXV0byByZXN1bHQgPSBpdGVtLT5jb21wYXJlQm91
bmRhcnlQb2ludHNGb3JCaW5kaW5ncyhob3csICpjb252ZXJ0ZWRTb3VyY2VSYW5nZSk7CisgICAg
YXV0byByZXN1bHQgPSBXZWJLaXQ6OmNvcmUoc2VsZiktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyho
b3csICpXZWJLaXQ6OmNvcmUoc291cmNlUmFuZ2UpKTsKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7CiAgICAgICAgIGF1dG8gZGVzY3JpcHRpb24gPSBXZWJDb3JlOjpET01FeGNlcHRp
b246OmRlc2NyaXB0aW9uKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBkZXNjcmlwdGlvbi5sZWdhY3lDb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKQEAgLTUw
OCwxNSArNTA3LDcgQEAgZ2Jvb2xlYW4gd2Via2l0X2RvbV9yYW5nZV9pbnRlcnNlY3RzX25vZGUo
V2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHIKICAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCBGQUxTRSk7CiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHJlZk5vZGUpLCBGQUxTRSk7CiAgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIEZBTFNFKTsKLSAgICBXZWJDb3Jl
OjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpOb2RlKiBj
b252ZXJ0ZWRSZWZOb2RlID0gV2ViS2l0Ojpjb3JlKHJlZk5vZGUpOwotICAgIGF1dG8gcmVzdWx0
ID0gaXRlbS0+aW50ZXJzZWN0c05vZGUoKmNvbnZlcnRlZFJlZk5vZGUpOwotICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9IFdlYkNvcmU6
OkRPTUV4Y2VwdGlvbjo6ZGVzY3JpcHRpb24ocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2Rl
KCkpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmxlZ2FjeUNvZGUsIGRlc2NyaXB0aW9uLm5h
bWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZVJldHVyblZhbHVlKCk7CisgICAgcmV0dXJuIFdlYktpdDo6Y29yZShzZWxmKS0+aW50ZXJz
ZWN0c05vZGUoKldlYktpdDo6Y29yZShyZWZOb2RlKSk7CiB9CiAKIGdzaG9ydCB3ZWJraXRfZG9t
X3JhbmdlX2NvbXBhcmVfcG9pbnQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUq
IHJlZk5vZGUsIGdsb25nIG9mZnNldCwgR0Vycm9yKiogZXJyb3IpCkBAIC02MzIsOSArNjIzLDkg
QEAgZ2NoYXIqIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X3RleHQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYp
CiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZiksIDApOwotICAgIFdlYkNv
cmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnRleHQoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpXZWJLaXQ6OmNvcmUoc2VsZikpOwor
ICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIGNv
bnZlcnRUb1VURjhTdHJpbmcocGxhaW5UZXh0KHJhbmdlKSk7CiB9CiAKIEdfR05VQ19FTkRfSUdO
T1JFX0RFUFJFQ0FUSU9OUzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCmluZGV4IGNmMjY5YTFj
ZGQzMDJhNDNiOTdhYjJiNjAwMGMwYWQzMDI4MGU4MjIuLjNjYWQyYzVlODEwYmY0YmI2NTNhNGQ0
OTU2YzA3MWQ1ZTgyZWE4N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQpAQCAtMzAsNiAr
MzAsNyBAQAogI2ltcG9ydCAiV0tCdW5kbGVBUElDYXN0LmgiCiAjaW1wb3J0ICJXS0RPTUludGVy
bmFscy5oIgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9U
ZXh0SXRlcmF0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmlzaWJsZVVuaXRzLmg+CiAjaW1wb3J0
IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIApAQCAtNDksMTIgKzUwLDcgQEAgLSAoaWQpX2lu
aXRXaXRoSW1wbDooV2ViQ29yZTo6UmFuZ2UqKWltcGwKIAogLSAoaWQpaW5pdFdpdGhEb2N1bWVu
dDooV0tET01Eb2N1bWVudCAqKWRvY3VtZW50CiB7Ci0gICAgYXV0byByYW5nZSA9IFdlYkNvcmU6
OlJhbmdlOjpjcmVhdGUoKldlYktpdDo6dG9XZWJDb3JlRG9jdW1lbnQoZG9jdW1lbnQpKTsKLSAg
ICBzZWxmID0gW3NlbGYgX2luaXRXaXRoSW1wbDpyYW5nZS5wdHIoKV07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7CisgICAgcmV0dXJuIFtz
ZWxmIF9pbml0V2l0aEltcGw6V2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZSgqV2ViS2l0Ojp0b1dlYkNv
cmVEb2N1bWVudChkb2N1bWVudCkpLnB0cigpXTsKIH0KIAogLSAodm9pZClkZWFsbG9jCkBAIC0x
MTgsNyArMTE0LDkgQEAgLSAoTlNJbnRlZ2VyKWVuZE9mZnNldAogCiAtIChOU1N0cmluZyAqKXRl
eHQKIHsKLSAgICByZXR1cm4gX2ltcGwtPnRleHQoKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNp
bXBsZVJhbmdlKCpfaW1wbCk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlv
dXQoKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlKTsKIH0KIAogLSAoQk9PTClpc0NvbGxh
cHNlZApAQCAtMTI4LDggKzEyNiw5IEBAIC0gKEJPT0wpaXNDb2xsYXBzZWQKIAogLSAoTlNBcnJh
eSAqKXRleHRSZWN0cwogewotICAgIF9pbXBsLT5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhtYWtlU2ltcGxlUmFuZ2UoKl9p
bXBsKSkpLmF1dG9yZWxlYXNlKCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgq
X2ltcGwpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSkpLmF1dG9yZWxlYXNlKCk7CiB9CiAK
IC0gKFdLRE9NUmFuZ2UgKilyYW5nZUJ5RXhwYW5kaW5nVG9Xb3JkQm91bmRhcnlCeUNoYXJhY3Rl
cnM6KE5TVUludGVnZXIpY2hhcmFjdGVycyBpbkRpcmVjdGlvbjooV0tET01SYW5nZURpcmVjdGlv
bilkaXJlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUu
Y3BwCmluZGV4IDYzZjNjNzg2ZTZmYjIxNWM5YTJmNGUyNTlmYWM5ZTYxMWI2ZGI4YjIuLjVhMjZl
NTMzZmMxNWZlZmYyNWVkODBjNzI3ZDEzZTBhNzRlY2RiYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RP
TS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SXRl
cmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Zpc2libGVTZWxlY3Rpb24uaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtOTcs
MjMgKzk4LDMyIEBAIFJhbmdlJiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpjb3JlUmFuZ2Uo
KSBjb25zdAogCiBSZWY8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlOjpkb2N1bWVudCgpCiB7Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlTm9kZUhh
bmRsZTo6Z2V0T3JDcmVhdGUobV9yYW5nZS0+b3duZXJEb2N1bWVudCgpKTsKKyAgICByZXR1cm4g
SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShtX3JhbmdlLT5zdGFydENvbnRh
aW5lcigpLmRvY3VtZW50KCkpOwogfQogCiBXZWJDb3JlOjpJbnRSZWN0IEluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGU6OmJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXMoKSBjb25zdAogewot
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpOwotICAg
IHJldHVybiBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3Qo
dW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvcmRlckFu
ZFRleHRSZWN0cyhtYWtlU2ltcGxlUmFuZ2UobV9yYW5nZSkpKSkpOworICAgIGF1dG8gcmFuZ2Ug
PSBtYWtlU2ltcGxlUmFuZ2UobV9yYW5nZSk7CisgICAgYXV0byBmcmFtZSA9IHJhbmdlLnN0YXJ0
LmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4geyB9
OworICAgIGF1dG8gdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAg
ICByZXR1cm4geyB9OworICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KGVuY2xvc2lu
Z0ludFJlY3QodW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0OjphYnNvbHV0
ZUJvcmRlckFuZFRleHRSZWN0cyhyYW5nZSkpKSk7CiB9CiAKIFJlZlB0cjxXZWJJbWFnZT4gSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6cmVuZGVyZWRJbWFnZShTbmFwc2hvdE9wdGlvbnMgb3B0
aW9ucykKIHsKLSAgICBEb2N1bWVudCYgb3duZXJEb2N1bWVudCA9IG1fcmFuZ2UtPm93bmVyRG9j
dW1lbnQoKTsKLSAgICBGcmFtZSogZnJhbWUgPSBvd25lckRvY3VtZW50LmZyYW1lKCk7CisgICAg
YXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShtX3JhbmdlKTsKKworICAgIGF1dG8gZG9jdW1l
bnQgPSBtYWtlUmVmKHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpOworCisgICAgYXV0byBmcmFtZSA9
IG1ha2VSZWZQdHIoZG9jdW1lbnQtPmZyYW1lKCkpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmll
dygpOworICAgIGF1dG8gZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1l
VmlldykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTEyMSwxMyArMTMxLDExIEBAIFJl
ZlB0cjxXZWJJbWFnZT4gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6cmVuZGVyZWRJbWFnZShT
bmFwc2hvdE9wdGlvbnMgb3B0aW9uCiAgICAgTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZSBs
b2NhbEFwcGVhcmFuY2UoZnJhbWVWaWV3LT51c2VEYXJrQXBwZWFyYW5jZSgpKTsKICNlbmRpZgog
Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKLQogICAgIFZpc2libGVTZWxlY3Rp
b24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGZy
YW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpKTsK
KyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHJhbmdlKTsKIAogICAgIGZsb2F0
IHNjYWxlRmFjdG9yID0gKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNFeGNsdWRlRGV2aWNlU2Nh
bGVGYWN0b3IpID8gMSA6IGZyYW1lLT5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAg
SW50UmVjdCBwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVy
b1JlY3RzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBs
ZVJhbmdlKG1fcmFuZ2UpKSkpOworICAgIEludFJlY3QgcGFpbnRSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdCh1bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9y
ZGVyQW5kVGV4dFJlY3RzKHJhbmdlKSkpOwogICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9
IHBhaW50UmVjdC5zaXplKCk7CiAgICAgYmFja2luZ1N0b3JlU2l6ZS5zY2FsZShzY2FsZUZhY3Rv
cik7CiAKQEAgLTE1NSw3ICsxNjMsNyBAQCBSZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9wdGlvbgogICAgICAg
ICBwYWludEJlaGF2aW9yLmFkZChQYWludEJlaGF2aW9yOjpGb3JjZVdoaXRlVGV4dCk7CiAKICAg
ICBmcmFtZVZpZXctPnNldFBhaW50QmVoYXZpb3IocGFpbnRCZWhhdmlvcik7Ci0gICAgb3duZXJE
b2N1bWVudC51cGRhdGVMYXlvdXQoKTsKKyAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0KCk7CiAK
ICAgICBmcmFtZVZpZXctPnBhaW50KCpncmFwaGljc0NvbnRleHQsIHBhaW50UmVjdCk7CiAgICAg
ZnJhbWVWaWV3LT5zZXRQYWludEJlaGF2aW9yKG9sZFBhaW50QmVoYXZpb3IpOwpAQCAtMTY3LDcg
KzE3NSw5IEBAIFJlZlB0cjxXZWJJbWFnZT4gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6cmVu
ZGVyZWRJbWFnZShTbmFwc2hvdE9wdGlvbnMgb3B0aW9uCiAKIFN0cmluZyBJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlOjp0ZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yYW5nZS0+dGV4dCgp
OworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobV9yYW5nZSk7CisgICAgcmFuZ2Uu
c3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KHJh
bmdlKTsKIH0KIAogUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IGNyZWF0ZUhhbmRs
ZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4
IDJhNTdmZDIwOWU2MzU3MGI3Mzg5MjNmMGI1OWZiM2NjZGIyZjRkNDQuLmI4YzA3YjhjMjU0MDYy
ZGFmYmZkM2NjNjg0MjI3MWZhZGY3NjEzMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTMwNSw3ICszMDUsNyBAQCB2
b2lkIEZpbmRDb250cm9sbGVyOjpnZXRJbWFnZUZvckZpbmRNYXRjaCh1aW50MzJfdCBtYXRjaElu
ZGV4KQogewogICAgIGlmIChtYXRjaEluZGV4ID49IG1fZmluZE1hdGNoZXMuc2l6ZSgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4
XS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUg
PSBtX2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLnN0YXJ0LmRvY3VtZW50KCkuZnJhbWUoKTsKICAg
ICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lk
IEZpbmRDb250cm9sbGVyOjpzZWxlY3RGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJbmRleCkKIHsK
ICAgICBpZiAobWF0Y2hJbmRleCA+PSBtX2ZpbmRNYXRjaGVzLnNpemUoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0uc3RhcnQu
Y29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gbV9maW5k
TWF0Y2hlc1ttYXRjaEluZGV4XS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24obV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCmluZGV4IGY5NjQxMWExMTYw
NzY4NWIwZmJmNDlmMTA5ZGRjNTgxOGMxNTJiMjcuLmJmN2FjNjY5OTFkZjM2ZjRkYWFhMDI5NjRi
MDU0NWZmMWE5NTk5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBXZWJQ
YWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJl
c3VsdCkgY29uc3QKICAgICAgICAgYXV0byBzdXJyb3VuZGluZ1N0YXJ0ID0gc3RhcnRPZkVkaXRh
YmxlQ29udGVudChzZWxlY3Rpb25TdGFydCk7CiAgICAgICAgIGF1dG8gc3Vycm91bmRpbmdSYW5n
ZSA9IG1ha2VTaW1wbGVSYW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBlbmRPZkVkaXRhYmxlQ29udGVu
dChzZWxlY3Rpb25TdGFydCkpOwogICAgICAgICBhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFt
ZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7Ci0gICAgICAgIGlmIChzdXJyb3VuZGluZ1Jh
bmdlICYmIGNvbXBvc2l0aW9uUmFuZ2UgJiYgY3JlYXRlTGl2ZVJhbmdlKHN1cnJvdW5kaW5nUmFu
Z2UpLT5jb250YWlucyhjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UpLmdldCgpKSkg
eworICAgICAgICBpZiAoc3Vycm91bmRpbmdSYW5nZSAmJiBjb21wb3NpdGlvblJhbmdlICYmIGNv
bnRhaW5zKCpzdXJyb3VuZGluZ1JhbmdlLCAqY29tcG9zaXRpb25SYW5nZSkpIHsKICAgICAgICAg
ICAgIGF1dG8gYmVmb3JlVGV4dCA9IHBsYWluVGV4dCh7IHN1cnJvdW5kaW5nUmFuZ2UtPnN0YXJ0
LCBjb21wb3NpdGlvblJhbmdlLT5zdGFydCB9KTsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRh
LnN1cnJvdW5kaW5nQ29udGV4dCA9IGJlZm9yZVRleHQgKyBwbGFpblRleHQoeyBjb21wb3NpdGlv
blJhbmdlLT5lbmQsIHN1cnJvdW5kaW5nUmFuZ2UtPmVuZCB9KTsKICAgICAgICAgICAgIHBvc3RM
YXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0aW9uID0gYmVmb3JlVGV4dC5s
ZW5ndGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KaW5kZXggZmY5MTE0MGQ3ODBmMTc2NDkyYWViNTgyZGM0NjhmZDIxZDc5NTZh
Yi4uZjIxMmY4NzFhMmJiN2YzYjQ1M2ZiYTE2NWUwOTU4NWYzY2JmOTgwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTQy
MDAsNyArNDIwMCw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRl
eHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAKICAgICBhdXRvIHNlbGVj
dGlvblJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0byByYW5n
ZU9mSW50ZXJlc3QgPSAqbWFrZVNpbXBsZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCByYW5n
ZU9mSW50ZXJlc3RFbmQpOwotICAgIGlmIChzZWxlY3Rpb25SYW5nZSAmJiByYW5nZXNPdmVybGFw
KGNyZWF0ZUxpdmVSYW5nZShyYW5nZU9mSW50ZXJlc3QpLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2Uo
KnNlbGVjdGlvblJhbmdlKS5wdHIoKSkpIHsKKyAgICBpZiAoc2VsZWN0aW9uUmFuZ2UgJiYgaW50
ZXJzZWN0cyhyYW5nZU9mSW50ZXJlc3QsICpzZWxlY3Rpb25SYW5nZSkpIHsKICAgICAgICAgc3Rh
cnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gc3RkOjptYXgocmFuZ2VPZkludGVyZXN0
U3RhcnQsIHNlbGVjdGlvblN0YXJ0KTsKICAgICAgICAgZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNl
bGVjdGlvbiA9IHN0ZDo6bWluKHJhbmdlT2ZJbnRlcmVzdEVuZCwgc2VsZWN0aW9uRW5kKTsKICAg
ICB9IGVsc2UgewpAQCAtNDI2NSw3ICs0MjY1LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9j
dW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMK
ICAgICBjb250ZXh0LmNvbnRleHRCZWZvcmUgPSBtYWtlU3RyaW5nKGNvbnRleHRCZWZvcmVTdGFy
dCwgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uKTsKICAgICBjb250ZXh0LnNlbGVj
dGVkVGV4dCA9IG1ha2VTdHJpbmcoc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uLCBl
bmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uKTsKICAgICBjb250ZXh0LmNvbnRleHRBZnRl
ciA9IG1ha2VTdHJpbmcoZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiwgY29udGV4dEFm
dGVyRW5kKTsKLSAgICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKGNyZWF0
ZUxpdmVSYW5nZShyYW5nZU9mSW50ZXJlc3QpLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoKmNvbXBv
c2l0aW9uUmFuZ2UpLnB0cigpKSkgeworICAgIGlmIChjb21wb3NpdGlvblJhbmdlICYmIGludGVy
c2VjdHMocmFuZ2VPZkludGVyZXN0LCAqY29tcG9zaXRpb25SYW5nZSkpIHsKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIGNvbXBvc2l0aW9uU3RhcnQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0KSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21w
b3NpdGlvbkVuZChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+
ZW5kKSk7CiAgICAgICAgIGNvbnRleHQubWFya2VkVGV4dCA9IG1ha2VTdHJpbmcoY29tcG9zaXRp
b25TdGFydCwgY29tcG9zaXRpb25FbmQpOwpAQCAtNDI4MSw3ICs0MjgxLDcgQEAgdm9pZCBXZWJQ
YWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0
UmVxdWVzdCByZXF1ZXMKICAgICAgICAgd2hpbGUgKCFpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAg
ICAgICAgICBpZiAoIWl0ZXJhdG9yLnRleHQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAg
ICBhdXRvIGFic29sdXRlQm91bmRpbmdCb3ggPSB1bmlvblJlY3QoUmVuZGVyT2JqZWN0OjphYnNv
bHV0ZVRleHRSZWN0cyhpdGVyYXRvci5yYW5nZSgpLCBSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVj
dEJlaGF2aW9yOjpJZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zKSk7Ci0gICAgICAgICAgICAgICAg
cmVjdHMuYXBwZW5kKHsgaXRlcmF0b3IucmFuZ2UoKS5zdGFydC5jb250YWluZXItPmRvY3VtZW50
KCkudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoYWJzb2x1dGVCb3VuZGluZ0JveCksIHsgb2Zm
c2V0U29GYXIrKywgc3RyaWRlIH0gfSk7CisgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHsg
aXRlcmF0b3IucmFuZ2UoKS5zdGFydC5kb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RW
aWV3KGFic29sdXRlQm91bmRpbmdCb3gpLCB7IG9mZnNldFNvRmFyKyssIHN0cmlkZSB9IH0pOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZShzdHJpZGUpOwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tCmluZGV4IGZmNzQwZjVmZWNkMzczMjU0MjUwOTM2ZWU4ZDFhYTgzMGVlZmQ1MTAu
LmM5ZTZlMzc1ODNiN2FlZmRmN2Q2ZjEwN2Y0OTRiNmVkYjQ1MGU4MDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC04Nzcs
NyArODc3LDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0
TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGkKICAgICAgICAgaWYgKCFhY3Rpb25D
b250ZXh0KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byB2aWV3ID0gYWN0
aW9uQ29udGV4dC0+cmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLnZpZXcoKTsKKyAg
ICAgICAgYXV0byB2aWV3ID0gYWN0aW9uQ29udGV4dC0+cmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS52
aWV3KCk7CiAgICAgICAgIGlmICghdmlldykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL0RPTS5tbQppbmRleCBkZTVlYThkNmJjOTAzZGRlZWFhZjYxMDQ0ZjQ0
ODQ4MTlkNmJlZWExLi41YjhjYjZjMzhjN2E1YjE2Njc0YmYxNGFjMDEyMGMzNWZkZjNhZGY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KQEAgLTU3MCwxMCArNTcwLDkgQEAgLSAoQ0dS
ZWN0KWJvdW5kaW5nQm94CiAtIChOU1JlY3QpYm91bmRpbmdCb3gKICNlbmRpZgogewotICAgIC8v
IEZJWE1FOiBUaGUgY2FsbCB0byB1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMg
c2hvdWxkIGJlIG1vdmVkIGludG8gV2ViQ29yZTo6UmFuZ2UuCi0gICAgYXV0byYgcmFuZ2UgPSAq
Y29yZShzZWxmKTsKLSAgICByYW5nZS5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJuIHVuaW9uUmVjdChSZW5kZXJPYmplY3Q6
OmFic29sdXRlVGV4dFJlY3RzKG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpKTsKKyAgICBhdXRvIHJh
bmdlID0gbWFrZVNpbXBsZVJhbmdlKCpjb3JlKHNlbGYpKTsKKyAgICByYW5nZS5zdGFydC5kb2N1
bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJldHVy
biB1bmlvblJlY3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSkpOwogfQog
CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNTgzLDcgKzU4Miw3IEBAIC0gKENHSW1hZ2VSZWYpcmVu
ZGVyZWRJbWFnZUZvcmNpbmdCbGFja1RleHQ6KEJPT0wpZm9yY2VCbGFja1RleHQKICNlbmRpZgog
ewogICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKmNvcmUoc2VsZikpOwotICAgIGF1
dG8gZnJhbWUgPSBtYWtlUmVmUHRyKHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5m
cmFtZSgpKTsKKyAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cihyYW5nZS5zdGFydC5kb2N1bWVu
dCgpLmZyYW1lKCkpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKQEAg
LTYwMiw3ICs2MDEsNyBAQCAtIChDR0ltYWdlUmVmKXJlbmRlcmVkSW1hZ2VGb3JjaW5nQmxhY2tU
ZXh0OihCT09MKWZvcmNlQmxhY2tUZXh0CiAtIChOU0FycmF5ICopdGV4dFJlY3RzCiB7CiAgICAg
YXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqY29yZShzZWxmKSk7Ci0gICAgcmFuZ2Uuc3Rh
cnQuY29udGFpbmVyLT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoUmVuZGVyT2JqZWN0
OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSkpLmF1dG9yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5tbQppbmRleCA1ZWUwYmNkZmQ5OTc0MzcyYTNlYmM0
YWQyYTg3YWY4M2JkZjUzZjUxLi4yODc2NjBmZWNhZTk4NmRmOWIzOWQ4ZDU3ZTAzZWJiY2QwZjk0
MTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0pTRXhlY1N0YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1RleHRJdGVyYXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9UaHJlYWRDaGVjay5oPgogI2lt
cG9ydCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJT
Y3JpcHRPYmplY3RQcml2YXRlLmg+CkBAIC05Miw3ICs5Myw5IEBAIC0gKERPTU5vZGUgKiljb21t
b25BbmNlc3RvckNvbnRhaW5lcgogLSAoTlNTdHJpbmcgKil0ZXh0CiB7CiAgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVybiBJTVBMLT50ZXh0KCk7Cisg
ICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqSU1QTCk7CisgICAgcmFuZ2Uuc3RhcnQu
ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlKTsK
IH0KIAogLSAodm9pZClzZXRTdGFydDooRE9NTm9kZSAqKXJlZk5vZGUgb2Zmc2V0OihpbnQpb2Zm
c2V0CkBAIC0xNzAsNyArMTczLDcgQEAgLSAoc2hvcnQpY29tcGFyZUJvdW5kYXJ5UG9pbnRzOih1
bnNpZ25lZCBzaG9ydClob3cgc291cmNlUmFuZ2U6KERPTVJhbmdlICopc291cmMKICAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgaWYgKCFzb3VyY2VSYW5nZSkK
ICAgICAgICAgcmFpc2VUeXBlRXJyb3JFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gcmFpc2VPbkRP
TUVycm9yKElNUEwtPmNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKGhvdywgKmNvcmUo
c291cmNlUmFuZ2UpKSk7CisgICAgcmV0dXJuIHJhaXNlT25ET01FcnJvcihJTVBMLT5jb21wYXJl
Qm91bmRhcnlQb2ludHMoaG93LCAqY29yZShzb3VyY2VSYW5nZSkpKTsKIH0KIAogLSAodm9pZClk
ZWxldGVDb250ZW50cwpAQCAtMjQ0LDcgKzI0Nyw3IEBAIC0gKEJPT0wpaW50ZXJzZWN0c05vZGU6
KERPTU5vZGUgKilyZWZOb2RlCiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwogICAgIGlmICghcmVmTm9kZSkKICAgICAgICAgcmFpc2VUeXBlRXJyb3JFeGNlcHRpb24o
KTsKLSAgICByZXR1cm4gcmFpc2VPbkRPTUVycm9yKElNUEwtPmludGVyc2VjdHNOb2RlKCpjb3Jl
KHJlZk5vZGUpKSk7CisgICAgcmV0dXJuIElNUEwtPmludGVyc2VjdHNOb2RlKCpjb3JlKHJlZk5v
ZGUpKTsKIH0KIAogLSAoc2hvcnQpY29tcGFyZVBvaW50OihET01Ob2RlICopcmVmTm9kZSBvZmZz
ZXQ6KGludClvZmZzZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9E
T01VSUtpdEV4dGVuc2lvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlL
aXRFeHRlbnNpb25zLm1tCmluZGV4IGFlNWM0OWJmMTQ3NThmMzE0MDk0MjBkOWY2ZDU1YTJlNjM2
MjYxYzkuLmFjNTljZDEyYmZhOGFhYzA2ZGIyZjA3ZmMwNWI1ZWUxMjA5MzJhMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpAQCAt
NTEsNyArNTEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVE1MVGV4dEFyZWFFbGVtZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ltYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0lubGluZUJveC5oPgot
I2ltcG9ydCA8V2ViQ29yZS9Ob2RlLmg+CisjaW1wb3J0IDxXZWJDb3JlL05vZGVUcmF2ZXJzYWwu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQmxv
Y2suaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQmxvY2tGbG93Lmg+CkBAIC0xMjQsOSArMTI0
LDIxIEBAIC0gKHZvaWQpZXh0ZW5kOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJUZXh0
QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KICAgICAgICAgcmFuZ2Uuc2V0RW5kKCplbmQu
Y29udGFpbmVyTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogfQogCisvLyBG
SVhNRTogUmVmYWN0b3IgdG8gc2hhcmUgY29kZSB3aXRoIGludGVyc2VjdGluZ05vZGVzV2l0aERl
cHJlY2F0ZWRaZXJvT2Zmc2V0U3RhcnRRdWlyay4KK3N0YXRpYyBXZWJDb3JlOjpOb2RlKiBmaXJz
dE5vZGVBZnRlcihjb25zdCBXZWJDb3JlOjpCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sKKyAgICBp
ZiAocG9pbnQuY29udGFpbmVyLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCisgICAgICAgIHJldHVy
biBwb2ludC5jb250YWluZXIucHRyKCk7CisgICAgaWYgKGF1dG8gY2hpbGQgPSBwb2ludC5jb250
YWluZXItPnRyYXZlcnNlVG9DaGlsZEF0KHBvaW50Lm9mZnNldCkpCisgICAgICAgIHJldHVybiBj
aGlsZDsKKyAgICBpZiAoIXBvaW50Lm9mZnNldCkKKyAgICAgICAgcmV0dXJuIHBvaW50LmNvbnRh
aW5lci5wdHIoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBw
aW5nQ2hpbGRyZW4ocG9pbnQuY29udGFpbmVyKTsKK30KKwogLSAoRE9NTm9kZSAqKWZpcnN0Tm9k
ZQogewotICAgIHJldHVybiBraXQoY29yZShzZWxmKS0+Zmlyc3ROb2RlKCkpOworICAgIHJldHVy
biBraXQoZmlyc3ROb2RlQWZ0ZXIobWFrZVNpbXBsZVJhbmdlKCpjb3JlKHNlbGYpKS5zdGFydCkp
OwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2Vi
RE9NT3BlcmF0aW9ucy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVy
YXRpb25zLm1tCmluZGV4IGNhZDM1OTFiZTYzMzIzZWU2N2FhNmFmOGQxM2U0NWZkNzE2MGRhYTgu
LjczOGI0ZjhmMjQ4NDg0ZmQyNzdjYjcyOGMyODAyOGQ3YjljMDA4NTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCkBAIC0xOTEsOCArMTkx
LDggQEAgLSAoV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmUKIAogLSAoTlNTdHJpbmcgKiltYXJrdXBT
dHJpbmcKIHsKLSAgICBhdXRvJiByYW5nZSA9ICpjb3JlKHNlbGYpOwotICAgIHJldHVybiBTdHJp
bmcgeyBkb2N1bWVudFR5cGVTdHJpbmcocmFuZ2Uub3duZXJEb2N1bWVudCgpKSArIHNlcmlhbGl6
ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1ha2VTaW1wbGVSYW5nZShyYW5nZSksIG51bGxw
dHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6OlllcykgfTsKKyAgICBhdXRvIHJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKCpjb3JlKHNlbGYpKTsKKyAgICByZXR1cm4gU3RyaW5nIHsgZG9jdW1lbnRU
eXBlU3RyaW5nKHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpICsgc2VyaWFsaXplUHJlc2VydmluZ1Zp
c3VhbEFwcGVhcmFuY2UocmFuZ2UsIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6Olll
cykgfTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJQREZWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQ
REZWaWV3Lm1tCmluZGV4IDFiYzY3ZDM2ODQyNmNjODkxYjNlNTA3OWUyYjZkZjMyYTEwNjg5OTgu
LmZiNzQyMDhmOTk4YzNjYWI0ZjVhZjdlYzNjN2E0NmMyMjk5MjIxZjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0KQEAgLTYzNiwyMSArNjM2LDE4
IEBAIC0gKEJPT0wpbWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZAogICAgIHJldHVybiBO
TzsKIH0KIAotc3RhdGljIEJPT0wgaXNGcmFtZUluUmFuZ2UoV2ViRnJhbWUgKmZyYW1lLCBET01S
YW5nZSAqcmFuZ2UpCitzdGF0aWMgYm9vbCBpc0ZyYW1lSW5SYW5nZShXZWJDb3JlOjpGcmFtZSYg
ZnJhbWUsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBCT09MIGlu
UmFuZ2UgPSBOTzsKLSAgICBmb3IgKGF1dG8qIG93bmVyRWxlbWVudCA9IGNvcmUoZnJhbWUpLT5v
d25lckVsZW1lbnQoKTsgb3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQt
PmRvY3VtZW50KCkuZnJhbWUoKS0+b3duZXJFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCZvd25l
ckVsZW1lbnQtPmRvY3VtZW50KCkgPT0gJmNvcmUocmFuZ2UpLT5vd25lckRvY3VtZW50KCkpIHsK
LSAgICAgICAgICAgIGluUmFuZ2UgPSBbcmFuZ2UgaW50ZXJzZWN0c05vZGU6a2l0KG93bmVyRWxl
bWVudCldOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8qIG93
bmVyRWxlbWVudCA9IGZyYW1lLm93bmVyRWxlbWVudCgpOyBvd25lckVsZW1lbnQ7IG93bmVyRWxl
bWVudCA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkgeworICAgICAg
ICBpZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Uuc3RhcnQuZG9jdW1lbnQo
KSkKKyAgICAgICAgICAgIHJldHVybiBpbnRlcnNlY3RzKHJhbmdlLCAqb3duZXJFbGVtZW50KTsK
ICAgICB9Ci0gICAgcmV0dXJuIGluUmFuZ2U7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiAtIChO
U1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGluRE9NUmFu
Z2U6KERPTVJhbmdlICopcmFuZ2Ugb3B0aW9uczooV2ViRmluZE9wdGlvbnMpb3B0aW9ucyBsaW1p
dDooTlNVSW50ZWdlcilsaW1pdCBtYXJrTWF0Y2hlczooQk9PTCltYXJrTWF0Y2hlcwogewotICAg
IGlmIChyYW5nZSAmJiAhaXNGcmFtZUluUmFuZ2UoW2RhdGFTb3VyY2Ugd2ViRnJhbWVdLCByYW5n
ZSkpCisgICAgaWYgKHJhbmdlICYmICFpc0ZyYW1lSW5SYW5nZSgqY29yZShbZGF0YVNvdXJjZSB3
ZWJGcmFtZV0pLCBtYWtlU2ltcGxlUmFuZ2UoKmNvcmUocmFuZ2UpKSkpCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgUERGU2VsZWN0aW9uICpwcmV2aW91c01hdGNoID0gbmlsOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGVjZDY4MDdhYjg4MDNk
Mzg0ZjBjYmMzZmEzOGYzNDA3YTVjYzViMTkuLmQ0YTM5ZGM0N2U0ZjAzMWM3NWE2NWVhMGY4MzBh
YzVmMzdkNjc1ZjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMC0wOC0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwgdGhlIHJlbWFpbmluZyB1c2Vz
IG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNwcDoK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBBZGRlZCB0ZXN0IGNhc2VzIGZvciBub2Rl
IG9yZGVyaW5nIGludm9sdmluZyBub24tdXNlci1hZ2VudAorICAgICAgICBzaGFkb3cgdHJlZS4g
QWRkZWQgdGVzdCBjYXNlIHRoYXQgc2hvd2VkIHRoZSBvbGQgInVzZSBub2RlIG9yZGVyIGlmIG9m
ZnNldHMgYXJlIGVxdWFsIgorICAgICAgICBydWxlIGZvciBib3VuZGFyeSBwb2ludCBvcmRlcmlu
ZyB3YXMgd3JvbmcuIEFkZGVkIHRlc3RzIGZvciBpc1BvaW50SW5SYW5nZSwKKyAgICAgICAgaW50
ZXJzZWN0cywgYW5kIGNvbnRhaW5zIGZ1bmN0aW9ucy4KKwogMjAyMC0wOC0yOCAgSm9uYXRoYW4g
QmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdGNvcmVweV0gTW92
ZSBUaW1lb3V0IHRvIHdlYmtpdGNvcmVweSAoUGFydCAzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwCmluZGV4IDA3ZTY3ZDRjZDBj
YWQ1YjY2YjliOTY3ZmM2OTU0OTUwMDJiNzQzNjEuLjgzYTYxNGY1Yzg2YmNmNDZhYjQ1NzAxMmNl
ZDYxYzJiZWMxOTQyNzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9Eb2N1bWVudE9yZGVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvRG9jdW1lbnRPcmRlci5jcHAKQEAgLTI1LDEzICsyNSwxNCBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKLSNpbmNsdWRlIDxXZWJDb3JlL0JvdW5kYXJ5UG9pbnQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQm9keUVsZW1lbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxEaXZFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MSHRtbEVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUZXh0QXJlYUVsZW1l
bnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Bvc2l0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
aGFkb3dSb290Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg+CiAKICNkZWZpbmUgRVhQRUNUX0JP
VEgoYSwgYiwgZm9yd2FyZCwgcmV2ZXJzZWQpIGRvIHsgRVhQRUNUX1NUUkVRKHN0cmluZyhkb2N1
bWVudE9yZGVyKGEsIGIpKSwgZm9yd2FyZCk7IEVYUEVDVF9TVFJFUShzdHJpbmcoZG9jdW1lbnRP
cmRlcihiLCBhKSksIHJldmVyc2VkKTsgfSB3aGlsZSAoMCkKQEAgLTM5LDYgKzQwLDE0IEBACiAj
ZGVmaW5lIEVYUEVDVF9MRVNTKGEsIGIpIEVYUEVDVF9CT1RIKGEsIGIsICJsZXNzIiwgImdyZWF0
ZXIiKQogI2RlZmluZSBFWFBFQ1RfVU5PUkRFUkVEKGEsIGIpIEVYUEVDVF9CT1RIKGEsIGIsICJ1
bm9yZGVyZWQiLCAidW5vcmRlcmVkIikKIAorI2RlZmluZSBFWFBFQ1RfQ09OVEFJTlNfU0VMRihh
KSBFWFBFQ1RfVFJVRShjb250YWlucyhhLCBhKSkKKyNkZWZpbmUgRVhQRUNUX05FU1RFRChhLCBi
KSBkbyB7IEVYUEVDVF9UUlVFKGNvbnRhaW5zKGEsIGIpKTsgRVhQRUNUX0ZBTFNFKGNvbnRhaW5z
KGIsIGEpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRVhQRUNUX05PVF9DT05UQUlORUQoYSwgYikg
ZG8geyBFWFBFQ1RfRkFMU0UoY29udGFpbnMoYSwgYikpOyBFWFBFQ1RfRkFMU0UoY29udGFpbnMo
YiwgYSkpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVYUEVDVF9JTlRFUlNFQ1RTX1NFTEYoYSkg
RVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhhLCBhKSkKKyNkZWZpbmUgRVhQRUNUX0lOVEVSU0VDVFNf
Qk9USF9XQVlTKGEsIGIpIGRvIHsgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhhLCBiKSk7IEVYUEVD
VF9UUlVFKGludGVyc2VjdHMoYiwgYSkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBFWFBFQ1RfTk9U
X0lOVEVSU0VDVElOR19CT1RIX1dBWVMoYSwgYikgZG8geyBFWFBFQ1RfRkFMU0UoaW50ZXJzZWN0
cyhhLCBiKSk7IEVYUEVDVF9GQUxTRShpbnRlcnNlY3RzKGIsIGEpKTsgfSB3aGlsZSAoMCkKKwog
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAg
LTE0MSw2ICsxNTAsMTMgQEAgVEVTVChEb2N1bWVudE9yZGVyLCBOb2RlKQogCiAgICAgYXV0byYg
aCA9ICpnLT5pbm5lclRleHRFbGVtZW50KCk7CiAgICAgRVhQRUNUX0xFU1MoYm9keSwgaCk7CisK
KyAgICBhdXRvJiBpID0gYS0+YXR0YWNoU2hhZG93KHsgU2hhZG93Um9vdE1vZGU6OkNsb3NlZCB9
KS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICBFWFBFQ1RfTEVTUyhib2R5LCBpKTsKKyAgICBF
WFBFQ1RfTEVTUyhpLCBkKTsKKyAgICBFWFBFQ1RfTEVTUyhpLCBiKTsKKworICAgIC8vIEZJWE1F
OiBBZGQgdGVzdHMgdGhhdCBjb3ZlciBzbG90cyBhbmQgYXNzaWdubWVudC4KIH0KIAogVEVTVChE
b2N1bWVudE9yZGVyLCBCb3VuZGFyeVBvaW50T2Zmc2V0WmVybykKQEAgLTE4OCw2ICsyMDQsOCBA
QCBURVNUKERvY3VtZW50T3JkZXIsIEJvdW5kYXJ5UG9pbnRPZmZzZXRaZXJvKQogICAgIEFTU0VS
VF9UUlVFKGgpOwogICAgIGMtPmFwcGVuZENoaWxkKGcpOwogICAgIEVYUEVDVF9MRVNTKG1ha2VC
b3VuZGFyeVBvaW50KGJvZHksIDApLCBtYWtlQm91bmRhcnlQb2ludChnLCAwKSk7CisKKyAgICAv
LyBGSVhNRTogQWRkIHRlc3RzIHRoYXQgY292ZXIgc2hhZG93IHRyZWVzLgogfQogCiBURVNUKERv
Y3VtZW50T3JkZXIsIEJvdW5kYXJ5UG9pbnRPZmZzZXRzKQpAQCAtMTk3LDYgKzIxNSw3IEBAIFRF
U1QoRG9jdW1lbnRPcmRlciwgQm91bmRhcnlQb2ludE9mZnNldHMpCiAKICAgICBFWFBFQ1RfTEVT
UyhtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3Vt
ZW50LCAxKSk7CiAgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCksIG1h
a2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSk7CisgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5k
YXJ5UG9pbnQoYm9keSwgMSksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSk7CiAKICAg
ICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICBib2R5LmFw
cGVuZENoaWxkKGEpOwpAQCAtMjQxLDYgKzI2MCw4IEBAIFRFU1QoRG9jdW1lbnRPcmRlciwgQm91
bmRhcnlQb2ludE9mZnNldHMpCiAgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYywg
MCksIG1ha2VCb3VuZGFyeVBvaW50KGgsIDApKTsKICAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRh
cnlQb2ludChoLCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYywgMSkpOwogICAgIEVYUEVDVF9MRVNT
KG1ha2VCb3VuZGFyeVBvaW50KGgsIDApLCBtYWtlQm91bmRhcnlQb2ludChjLCAyKSk7CisKKyAg
ICAvLyBGSVhNRTogQWRkIHRlc3RzIHRoYXQgY292ZXIgc2hhZG93IHRyZWVzLgogfQogCiBzdGF0
aWMgVmVjdG9yPFBvc2l0aW9uPiBhbGxQb3NpdGlvblR5cGVzKE5vZGUqIG5vZGUsIHVuc2lnbmVk
IG9mZnNldCkKQEAgLTQ1MCw2ICs0NzEsMjU4IEBAIFRFU1QoRG9jdW1lbnRPcmRlciwgUG9zaXRp
b25zKQogICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTX0IobWFrZVBvc2l0aW9uQWZ0ZXIoZG9j
dW1lbnQpLCBib2R5LCAwLCBncmVhdGVyKTsKICAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFU19C
KG1ha2VQb3NpdGlvbkFmdGVyKGRvY3VtZW50KSwgYm9keSwgMSwgZ3JlYXRlcik7CiAgICAgVEVT
VF9BTExfUE9TSVRJT05fVFlQRVNfQihtYWtlUG9zaXRpb25BZnRlcihkb2N1bWVudCksIGgsIDAs
IGdyZWF0ZXIpOworCisgICAgLy8gRklYTUU6IEFkZCB0ZXN0cyB0aGF0IGNvdmVyIHNoYWRvdyB0
cmVlcy4KK30KKworVEVTVChEb2N1bWVudE9yZGVyLCBJc1BvaW50SW5SYW5nZSkKK3sKKyAgICBh
dXRvIGRvY3VtZW50ID0gY3JlYXRlRG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudEVsZW1l
bnQgPSAqZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIGF1dG8mIGJvZHkgPSAqZG9j
dW1lbnQtPmJvZHkoKTsKKworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3Vt
ZW50LCAwKSkpOworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAx
KSkpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikpKTsK
KyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSkpOworICAgIEVYUEVD
VF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1
bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEpKSk7CisgICAgRVhQRUNUX1RSVUUoaXNQ
b2ludEluUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFr
ZUJvdW5kYXJ5UG9pbnQoYm9keSwgMikpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQb2ludEluUmFu
Z2UobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJv
dW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAwKSksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHks
IDApKSk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVNpbXBsZVJhbmdlKG1h
a2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkp
LCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSkpOworCisgICAgYXV0byBhID0gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJblJhbmdl
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBv
aW50KGEsIDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpKTsKKwor
ICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2Uo
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZUJvdW5kYXJ5UG9p
bnQoYSwgMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFu
Z2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChhLCAw
KSksIG1ha2VCb3VuZGFyeVBvaW50KGEsIDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJ
blJhbmdlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1h
a2VCb3VuZGFyeVBvaW50KGJvZHksIDApKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpKTsKKyAg
ICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5
UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSksIG1ha2VCb3Vu
ZGFyeVBvaW50KGEsIDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKGlzUG9pbnRJblJhbmdlKG1ha2VT
aW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSwgbWFrZUJvdW5kYXJ5UG9pbnQo
ZG9jdW1lbnQsIDEpKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpKTsKKyAgICBFWFBFQ1RfVFJV
RShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwg
MCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSksIG1ha2VCb3VuZGFyeVBvaW50KGEs
IDApKSk7CisKKyAgICBhdXRvIGIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
KyAgICBib2R5LmFwcGVuZENoaWxkKGIpOworCisgICAgYXV0byBjID0gSFRNTERpdkVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5kQ2hpbGQoYyk7CisKKyAgICBhdXRvIGQg
PSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhLT5hcHBlbmRDaGlsZChk
KTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAg
IGF1dG8gZiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGUtPmFwcGVu
ZENoaWxkKGYpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VCb3VuZGFyeVBvaW50KGYsIDApKSk7CisKKyAg
ICBhdXRvIGcgPSBIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1
dG8mIGggPSAqZy0+aW5uZXJUZXh0RWxlbWVudCgpOworICAgIGMtPmFwcGVuZENoaWxkKGcpOwor
ICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cyhib2R5KSwgbWFrZUJvdW5kYXJ5UG9pbnQoaCwgMCkpKTsKKworICAgIC8vIEZJWE1FOiBB
ZGQgdGVzdHMgdGhhdCBjb3ZlciBzaGFkb3cgdHJlZXMuCit9CisKK1RFU1QoRG9jdW1lbnRPcmRl
ciwgUmFuZ2VDb250YWluc1JhbmdlKQoreworICAgIGF1dG8gZG9jdW1lbnQgPSBjcmVhdGVEb2N1
bWVudCgpOworICAgIGF1dG8mIGRvY3VtZW50RWxlbWVudCA9ICpkb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCk7CisgICAgYXV0byYgYm9keSA9ICpkb2N1bWVudC0+Ym9keSgpOworCisgICAgRVhQ
RUNUX0NPTlRBSU5TX1NFTEYobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50
KSk7CisgICAgRVhQRUNUX0NPTlRBSU5TX1NFTEYobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGRvY3VtZW50RWxlbWVudCkpOworICAgIEVYUEVDVF9DT05UQUlOU19TRUxGKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSk7CisKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpKTsKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhib2R5KSk7CisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoZG9jdW1lbnRFbGVtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KGJvZHkpKTsKKworICAgIEVYUEVDVF9ORVNURUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxl
bWVudCkpOworCisgICAgRVhQRUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoZG9jdW1lbnRFbGVtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkp
KTsKKworICAgIEVYUEVDVF9ORVNURUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRv
Y3VtZW50KSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSkp
OworICAgIEVYUEVDVF9ORVNURUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3Vt
ZW50KSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSkpOwor
ICAgIEVYUEVDVF9OT1RfQ09OVEFJTkVEKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhk
b2N1bWVudCksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikp
KTsKKworICAgIEVYUEVDVF9ORVNURUQobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50
KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDIpKSwgbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSk7CisgICAgRVhQRUNUX05PVF9DT05UQUlO
RUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVNpbXBsZVJh
bmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9j
dW1lbnQsIDIpKSk7CisKKyAgICBFWFBFQ1RfTk9UX0NPTlRBSU5FRChtYWtlU2ltcGxlUmFuZ2Uo
bWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVu
dEVsZW1lbnQsIDApKSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsKKyAg
ICBFWFBFQ1RfTkVTVEVEKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVu
dCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDApKSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VC
b3VuZGFyeVBvaW50KGJvZHksIDApKSk7CisKKyAgICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBFWFBFQ1RfTk9UX0NPTlRBSU5FRChtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoYSkpOworCisgICAgYm9keS5hcHBlbmRDaGlsZChhKTsKKworICAgIGF1dG8gYiA9IEhUTUxE
aXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYik7CisK
KyAgICBhdXRvIGMgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBiLT5h
cHBlbmRDaGlsZChjKTsKKworICAgIGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQpOworICAgIGEtPmFwcGVuZENoaWxkKGQpOworCisgICAgYXV0byBlID0gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byBmID0gSFRNTERpdkVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCk7CisgICAgZS0+YXBwZW5kQ2hpbGQoZik7CisgICAgRVhQRUNUX05PVF9D
T05UQUlORUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoZikpOworCisgICAgYXV0byBnID0gSFRNTFRleHRBcmVhRWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvJiBoID0gKmctPmlubmVyVGV4dEVsZW1l
bnQoKTsKKyAgICBjLT5hcHBlbmRDaGlsZChnKTsKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGgpKTsKKworICAgIC8vIEZJWE1FOiBBZGQgdGVzdHMgdGhhdCBjb3ZlciBzaGFkb3cgdHJl
ZXMuCit9CisKK1RFU1QoRG9jdW1lbnRPcmRlciwgUmFuZ2VJbnRlcnNlY3RzUmFuZ2UpCit7Cisg
ICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CisgICAgYXV0byYgZG9jdW1lbnRF
bGVtZW50ID0gKmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBhdXRvJiBib2R5ID0g
KmRvY3VtZW50LT5ib2R5KCk7CisKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19TRUxGKG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCkpOworICAgIEVYUEVDVF9JTlRFUlNFQ1RT
X1NFTEYobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCkpOwor
ICAgIEVYUEVDVF9JTlRFUlNFQ1RTX1NFTEYobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KGJvZHkpKTsKKworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoZG9jdW1lbnRFbGVtZW50KSk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhib2R5KSk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpLCBtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSkpOworCisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9U
SF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpKTsKKworICAgIEVYUEVDVF9J
TlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1l
bnRFbGVtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsKKworICAg
IEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQs
IDApKSk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2lu
dChkb2N1bWVudCwgMSkpKTsKKyAgICBFWFBFQ1RfTk9UX0lOVEVSU0VDVElOR19CT1RIX1dBWVMo
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVNpbXBsZVJhbmdl
KG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAyKSkpOworCisgICAgRVhQRUNUX0lOVEVSU0VD
VFNfQk9USF9XQVlTKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwg
MCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAyKSksIG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhkb2N1bWVudCkpOworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyht
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2Uo
bWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVu
dCwgMikpKTsKKworICAgIEVYUEVDVF9OT1RfSU5URVJTRUNUSU5HX0JPVEhfV0FZUyhtYWtlU2lt
cGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2lu
dChkb2N1bWVudEVsZW1lbnQsIDApKSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJv
ZHkpKTsKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dBWVMobWFrZVNpbXBsZVJhbmdlKG1h
a2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkp
LCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpKTsKKworICAgIGF1
dG8gYSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIEVYUEVDVF9OT1Rf
SU5URVJTRUNUSU5HX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9j
dW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYSkpOworCisgICAgYm9keS5h
cHBlbmRDaGlsZChhKTsKKworICAgIGF1dG8gYiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYik7CisKKyAgICBhdXRvIGMgPSBIVE1MRGl2
RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBiLT5hcHBlbmRDaGlsZChjKTsKKworICAg
IGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGEtPmFwcGVu
ZENoaWxkKGQpOworCisgICAgYXV0byBlID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVu
dCk7CisgICAgYXV0byBmID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAg
ZS0+YXBwZW5kQ2hpbGQoZik7CisgICAgRVhQRUNUX05PVF9JTlRFUlNFQ1RJTkdfQk9USF9XQVlT
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGYpKTsKKworICAgIGF1dG8gZyA9IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byYgaCA9ICpnLT5pbm5lclRleHRFbGVtZW50KCk7Cisg
ICAgYy0+YXBwZW5kQ2hpbGQoZyk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9k
ZUNvbnRlbnRzKGgpKTsKKworICAgIC8vIEZJWE1FOiBBZGQgdGVzdHMgdGhhdCBjb3ZlciBzaGFk
b3cgdHJlZXMuCit9CisKK1RFU1QoRG9jdW1lbnRPcmRlciwgUmFuZ2VDb250YWluc05vZGUpCit7
CisgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CisgICAgYXV0byYgZG9jdW1l
bnRFbGVtZW50ID0gKmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBhdXRvJiBib2R5
ID0gKmRvY3VtZW50LT5ib2R5KCk7CisKKyAgICBFWFBFQ1RfVFJVRShjb250YWlucyhtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBkb2N1bWVudEVsZW1lbnQpKTsKKyAg
ICBFWFBFQ1RfVFJVRShjb250YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9j
dW1lbnQpLCBib2R5KSk7CisgICAgRVhQRUNUX1RSVUUoY29udGFpbnMobWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCksIGJvZHkpKTsKKworICAgIEVYUEVDVF9G
QUxTRShjb250YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBk
b2N1bWVudCkpOworICAgIEVYUEVDVF9GQUxTRShjb250YWlucyhtYWtlU2ltcGxlUmFuZ2UobWFr
ZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwg
MikpLCBkb2N1bWVudCkpOworICAgIEVYUEVDVF9GQUxTRShjb250YWlucyhtYWtlU2ltcGxlUmFu
Z2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1
bWVudEVsZW1lbnQsIDApKSwgYm9keSkpOworICAgIEVYUEVDVF9GQUxTRShjb250YWlucyhtYWtl
U2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQ
b2ludChib2R5LCAwKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGFpbnMobWFrZVNp
bXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9p
bnQoYm9keSwgMSkpLCBib2R5KSk7CisgICAgRVhQRUNUX1RSVUUoY29udGFpbnMobWFrZVNpbXBs
ZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQo
ZG9jdW1lbnRFbGVtZW50LCAxKSksIGJvZHkpKTsKKworICAgIGF1dG8gYSA9IEhUTUxEaXZFbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIEVYUEVDVF9GQUxTRShjb250YWlucyhtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBhKSk7CisKKyAgICBib2R5LmFwcGVu
ZENoaWxkKGEpOworCisgICAgYXV0byBiID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVu
dCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChiKTsKKworICAgIGF1dG8gYyA9IEhUTUxEaXZFbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGItPmFwcGVuZENoaWxkKGMpOworCisgICAgYXV0
byBkID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYS0+YXBwZW5kQ2hp
bGQoZCk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
KyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBlLT5h
cHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGFpbnMobWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBmKSk7CisKKyAgICBhdXRvIGcgPSBIVE1MVGV4dEFyZWFF
bGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8mIGggPSAqZy0+aW5uZXJUZXh0RWxl
bWVudCgpOworICAgIGMtPmFwcGVuZENoaWxkKGcpOworICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5z
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgaCkpOworCisgICAgLy8gRklY
TUU6IEFkZCB0ZXN0cyB0aGF0IGNvdmVyIHNoYWRvdyB0cmVlcy4KK30KKworVEVTVChEb2N1bWVu
dE9yZGVyLCBSYW5nZUludGVyc2VjdHNOb2RlKQoreworICAgIGF1dG8gZG9jdW1lbnQgPSBjcmVh
dGVEb2N1bWVudCgpOworICAgIGF1dG8mIGRvY3VtZW50RWxlbWVudCA9ICpkb2N1bWVudC0+ZG9j
dW1lbnRFbGVtZW50KCk7CisgICAgYXV0byYgYm9keSA9ICpkb2N1bWVudC0+Ym9keSgpOworCisg
ICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
ZG9jdW1lbnQpLCBkb2N1bWVudEVsZW1lbnQpKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRlcnNlY3Rz
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGJvZHkpKTsKKyAgICBF
WFBFQ1RfVFJVRShpbnRlcnNlY3RzKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1
bWVudEVsZW1lbnQpLCBib2R5KSk7CisKKyAgICBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGRvY3VtZW50KSk7CisgICAgRVhQ
RUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9j
dW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikpLCBkb2N1bWVudCkpOwor
ICAgIEVYUEVDVF9GQUxTRShpbnRlcnNlY3RzKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQ
b2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50RWxlbWVudCwgMCkp
LCBib2R5KSk7CisgICAgRVhQRUNUX0ZBTFNFKGludGVyc2VjdHMobWFrZVNpbXBsZVJhbmdlKG1h
a2VCb3VuZGFyeVBvaW50KGRvY3VtZW50RWxlbWVudCwgMSksIG1ha2VCb3VuZGFyeVBvaW50KGRv
Y3VtZW50LCAxKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKG1ha2VTaW1w
bGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50
KGJvZHksIDApKSwgYm9keSkpOworICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVNpbXBs
ZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQo
Ym9keSwgMSkpLCBib2R5KSk7CisgICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtlU2ltcGxl
UmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChk
b2N1bWVudEVsZW1lbnQsIDEpKSwgYm9keSkpOworCisgICAgYXV0byBhID0gSFRNTERpdkVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgRVhQRUNUX0ZBTFNFKGludGVyc2VjdHMobWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgYSkpOworCisgICAgYm9keS5hcHBl
bmRDaGlsZChhKTsKKworICAgIGF1dG8gYiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYik7CisKKyAgICBhdXRvIGMgPSBIVE1MRGl2RWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBiLT5hcHBlbmRDaGlsZChjKTsKKworICAgIGF1
dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGEtPmFwcGVuZENo
aWxkKGQpOworCisgICAgYXV0byBlID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7
CisgICAgYXV0byBmID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgZS0+
YXBwZW5kQ2hpbGQoZik7CisgICAgRVhQRUNUX0ZBTFNFKGludGVyc2VjdHMobWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBlKSk7CisgICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0
cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZiksIGUpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIGYpKTsK
KworICAgIGF1dG8gZyA9IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7Cisg
ICAgYXV0byYgaCA9ICpnLT5pbm5lclRleHRFbGVtZW50KCk7CisgICAgYy0+YXBwZW5kQ2hpbGQo
Zyk7CisgICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoYm9keSksIGgpKTsKKworICAgIC8vIEZJWE1FOiBBZGQgdGVzdHMgdGhhdCBjb3ZlciBz
aGFkb3cgdHJlZXMuCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407495</attachid>
            <date>2020-08-28 12:23:19 -0700</date>
            <delta_ts>2020-08-28 14:37:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215755-20200828122318.patch</filename>
            <type>text/plain</type>
            <size>168214</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2Mjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA5YjQ3NTBkOThlZjgz
NjQzZGVlOTJiMTYwNzMzNDhkNjBkMmQ4YS4uNmI1ZmFjZTYwZTQxNTIzZDZhYmU4ZGU2ODU2MGJk
OTNkOGY5Y2ViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NyBAQAorMjAyMC0wOC0yOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwg
dGhlIHJlbWFpbmluZyB1c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcik6IFVzZSBkb2N1
bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1Jh
bmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNsb3Nlc3RUb1Jhbmdl
KTogVXNlIGNoYXJhY3RlckNvdW50LiBBbHNvIHJlbW92ZWQgdW5ubmVjZXNzYXJ5IGFzc2VydGlv
bnMKKyAgICAgICAgYW5kIHNwZWNpYWwgY2FzZXMuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbiBjb25z
dCk6IFVzZSBkb2N1bWVudE9yZGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOiBVc2UgaW50
ZXJzZWN0cy4KKyAgICAgICAgQWxzbyB1c2UgZmlyc3RSYW5nZSBpbnN0ZWFkIG9mIHRvTm9ybWFs
aXplZFJhbmdlLgorCisgICAgICAgICogZG9tL0VsZW1lbnQuaDogRXhwb3J0IGF0dGFjaFNoYWRv
dyBzbyBpdCBjYW4gYmUgdXNlZCBpbiB1bml0IHRlc3RzLgorCisgICAgICAgICogZG9tL05vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVwdGhJbkNvbXBvc2VkVHJlZSk6IFJlbmFtZWQgYW5k
IGNoYW5nZWQgdG8gdXNlIHBhcmVudEluQ29tcG9zZWRUcmVlCisgICAgICAgIGluc3RlYWQgb2Yg
cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSB0byBoYW5kbGUgY2FzZXMgaW52b2x2aW5nIGFzc2lnbmVk
IHNsb3RzIGNvcnJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yQW5kQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzU2libGluZ1N1YnNl
cXVlbnQpOiBBZGRlZCBhc3NlcnRpb25zLgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRPcmRl
cik6IEFkZCBsb2dpYyBzbyBzaGFkb3cgcm9vdHMgYXJlIG9yZGVyZWQgYmVmb3JlIHRoZQorICAg
ICAgICBvdGhlciBjaGlsZHJlbiBvZiB0aGVpciBob3N0cyBpbiBjYXNlcyB0aGF0IGRvbid0IGlu
dm9sdmUgYXNzaWduZWQgc2xvdHMuCisgICAgICAgIFdpdGhvdXQgdGhpcyB0aGUgcmVzdWx0cyB3
b3VsZCBiZSBpbmNvbnNpc3RlbnQgYmFzZWQgb24gdGhlIG9yZGVyIG9mIHRoZQorICAgICAgICBh
cmd1bWVudHMgcGFzc2VkIHRvIGRvY3VtZW50T3JkZXIuCisKKyAgICAgICAgKiBkb20vTm9kZS5o
OiBBZGRlZCBpc19uZXEsIGlzX2x0ZXEsIGFuZCBpc19ndGVxIGZvciB1c2Ugd2l0aCBQYXJ0aWFs
T3JkZXJpbmcsCisgICAgICAgIG1hdGNoaW5nIHRoZSBuYW1lcyBhbmQgYmVoYXZpb3IgZnJvbSBD
KysyMC4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6IFJlbW92ZWQgdW51c2VkIENvb3JkaW5h
dGVTcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpSYW5nZSk6IFVwZGF0ZWQgc2luY2Ug
UmFuZ2VCb3VuZGFyeVBvaW50IG5vdyB1c2VzIHJlZmVyZW5jZXMuCisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6dXBkYXRlRG9jdW1lbnQpOiBSZW5hbWVkIGZyb20gc2V0RG9jdW1lbnQgYW5kIGNo
YW5nZWQgc28gdGhhdAorICAgICAgICBpdCBtYWludGFpbnMgdGhlIGludmFyaWFudHMgd2l0aG91
dCByZXF1aXJpbmcgdGhlIGNhbGxlciBwYXNzIGFueSBhcmd1bWVudHMuCisgICAgICAgIEFsc28g
dXBkYXRlZCBmb3IgUmFuZ2VCb3VuZGFyeVBvaW50IGFubWUgY2hhbmdlcy4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjpzZXRTdGFydCk6IFVwZGF0ZWQgZm9yIGNoZWNrTm9kZU9mZnNl
dFBhaXIgbmFtZSBjaGFuZ2UuCisgICAgICAgIFJlbW92ZWQgdG9vLWNvbXBsZXggY29kZSBmb3Ig
bW92aW5nIGJldHdlZW4gZG9jdW1lbnRzLiBVc2UgZG9jdW1lbnRPcmRlcgorICAgICAgICBpbnN0
ZWFkIG9mIGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5lciB0byBjaGVjayBmb3Igc3RhcnQv
ZW5kIHRoYXQgaGF2ZQorICAgICAgICBpbmNvcnJlY3Qgb3JkZXIgb3Igbm8gY29tbW9uIGFuY2Vz
dG9yLiBVc2UgdXBkYXRlRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5k
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6aXNQb2ludEluUmFuZ2UpOiBVc2Ug
aXNQb2ludEluUmFuZ2UgdGhhdCB0YWtlcyBhIFNpbXBsZVJhbmdlLgorICAgICAgICBBbHNvIHVw
ZGF0ZWQgZm9yIGNoZWNrTm9kZU9mZnNldFBhaXIgbmFtZSBjaGFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6Y29tcGFyZVBvaW50IGNvbnN0KTogVXNlIGRvY3VtZW50T3JkZXIuIERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVOb2RlIGNvbnN0KTogVXNlIGRvY3Vt
ZW50T3JkZXIuCisgICAgICAgIChXZWJDb3JlOjp0b3ApOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyBjb25zdCk6IERlbGV0ZWQgbW9yZSBv
dmVybG9hZHMuCisgICAgICAgIEtlcHQgb25seSB0aGUgb25lIG5lZWRlZCBmb3IgYmluZGluZ3Ms
IGFuZCByZW5hbWVkIGl0IGZyb20KKyAgICAgICAgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmlu
ZGluZ3MuIEFsc28gZml4ZWQgdGhlIGltcGxlbWVudGF0aW4gdG8gYmUgc2ltcGxlciwKKyAgICAg
ICAgdXNlIGRvY3VtZW50T3JkZXIsIGFuZCBtYXRjaCB0aGUgRE9NIHNwZWNpZmljYXRpb24gbW9y
ZSBjbG9zZWx5ICh3aXRob3V0IGEKKyAgICAgICAgYmVoYXZpb3IgY2hhbmdlKS4KKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjpib3VuZGFyeVBvaW50c1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJhbmdlOjppbnRlcnNlY3RzTm9kZSBjb25zdCk6IFVzZSBpbnRlcnNl
Y3RzIGZyb20gU2ltcGxlUmFuZ2UuCisgICAgICAgIEFsc28gZG9uJ3QgcmFpc2UgZXhjZXB0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmU6Omxlbmd0aE9mQ29udGVudHNJbk5vZGUpOiBEZWxldGVkLiBU
aGlzIGdpdmVzIHRoZSBzYW1lIHJlc3VsdCBhcworICAgICAgICBOb2RlOjpsZW5ndGgsIGJ1dCBs
ZXNzIGVmZmljaWVudGx5LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnByb2Nlc3NDb250ZW50
cyk6IFVwZGF0ZWQgc2luY2UgUmFuZ2VCb3VuZGFyeVBvaW50IG5vdworICAgICAgICB1c2VzIHJl
ZmVyZW5jZXMuCisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0
cyk6IFJlbW92ZWQgb2Jzb2xldGUgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0
b1N0cmluZyBjb25zdCk6IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyBhbmQKKyAgICAgICAgY2hhcmFj
dGVyRGF0YU9mZnNldFJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRleHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmRldGFjaCk6IE1vdmVkIHRvIHRo
ZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y2hlY2tOb2RlT2Zmc2V0UGFpciBj
b25zdCk6IFJuZWFtZWQgZnJvbSBjaGVja05vZGVXT2Zmc2V0LgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmNsb25lUmFuZ2UpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OnNldFN0YXJ0QWZ0ZXIpOiBUd2Vha2VkIGNvZGluZyBzdHlsZS4KKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjpzZXRFbmRCZWZvcmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpzZXRFbmRBZnRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNl
bGVjdE5vZGUpOiBEaXR0by4gQWxzbyByZW1vdmVkIHVubmVjZXNzYXJ5IGNvZGUgdG8KKyAgICAg
ICAgY2FsbCBzZXREb2N1bWVudCwgc2luY2Ugc2V0U3RhcnQgdGFrZXMgY2FyZSBvZiB0aGF0Lgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldFN0YXJ0QmVmb3JlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6Zmlyc3ROb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlOjpwYXN0TGFzdE5vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFy
ZVJhbmdlc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlc092ZXJsYXAp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2Vk
KTogVHdlYWtlZCBjb2Rpbmcgc3R5bGUgYW5kIHVwZGF0ZWQKKyAgICAgICAgc2luY2UgUmFuZ2VC
b3VuZGFyeVBvaW50IHVzZXMgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
bm9kZUNoaWxkcmVuQ2hhbmdlZCk6IFVzZSBtX293bmVyRG9jdW1lbnQuCisgICAgICAgIChXZWJD
b3JlOjpib3VuZGFyeU5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQpOiBSZW1vdmVkIHVubmVlZGVk
IGNvZGUKKyAgICAgICAgdG8gaGFuZGxlIGNhc2Ugd2hlcmUgb25lIG9mIHRoZSBjaGlsZHJlbiBp
cyB0aGUgY2hpbGRCZWZvcmUgYnV0IHRoZQorICAgICAgICBub2RlIGlzIG5vdCBpbnNpZGUgdGhl
IGNvbnRhaW5lciAtLSB0aGF0IGNhc2UgZG9lc24ndCBleGlzdC4gVXNlCisgICAgICAgIE5vZGU6
OmNvbnRhaW5zLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVDaGlsZHJlbldpbGxCZVJl
bW92ZWQpOiBVc2UgbV9vd25lckRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlO
b2RlV2lsbEJlUmVtb3ZlZCk6IFNpbXBsaWZ5IGxvZ2ljIHVzaW5nCisgICAgICAgIFJhbmdlOjpj
b250YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZCk6IFVz
ZSBtX293bmVyRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cGFyZW50bGVzc05v
ZGVNb3ZlZFRvTmV3RG9jdW1lbnRBZmZlY3RzUmFuZ2UpOgorICAgICAgICBVcGRhdGVkIHNpbmNl
IFJhbmdlQm91bmRhcnlQb2ludCB1c2VzIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6
Ym91bmRhcnlUZXh0SW5zZXJ0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5
VGV4dFJlbW92ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dE5vZGVz
TWVyZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyeVRleHROb2Rlc1NwbGl0
KTogRGl0dG8uCisgICAgICAgIChzaG93VHJlZSk6IFJlbW92ZWQgY2FsbCB0byBib3VuZGFyeVBv
aW50c1ZhbGlkLiBUaGF0J3MgY2hlY2tpbmcgc29tZXRoaW5nCisgICAgICAgIHRoZSBjbGFzcyBh
bHJlYWR5IHRyZWF0cyBhcyBhbiBpbnZhcmlhbnQsIHNvIGl0J3Mgb2Jzb2xldGUgY29kZSBsZWZ0
IGZyb20KKyAgICAgICAgbG9uZyBhZ28gd2hlbiB3ZSBkaWRuJ3QgaGF2ZSB0aGF0IGltcGxlbWVu
dGVkIGNvcnJlY3RseS4KKworICAgICAgICAqIGRvbS9SYW5nZS5oOiBSZW9yZ2FuaXplZCB0aGUg
aGVhZGVyIHRvIG1hdGNoIHRoZSBJREwgZmlsZS4KKyAgICAgICAgUmVtb3ZlZCBvd25lckRvY3Vt
ZW50LCBjb21wYXJlQm91bmRhcnlQb2ludHMgb3ZlcmxvYWRzIG90aGVyIHRoYW4gdGhlIG9uZQor
ICAgICAgICB1c2VkIGZyb20gYmluZGluZ3MsIGZpcnN0Tm9kZSwgcGFzdExhc3ROb2RlLCB0ZXh0
LCBjb250YWlucywgYXJlUmFuZ2VzRXF1YWwsCisgICAgICAgIGFuZCByYW5nZXNPdmVybGFwLiBB
bHNvIHVwZGF0ZWQgc2luY2UgUmFuZ2VCb3VuZGFyeVBvaW50Ojpjb250YWluZXIgaXMgbm93Cisg
ICAgICAgIGEgcmVmZXJlbmNlLiBNb3ZlZCBkZXRhY2ggZnVuY3Rpb24gaGVyZSB0byB0aGUgaGVh
ZGVyIGFzIGFuIGVtcHR5IGlubGluZS4KKworICAgICAgICAqIGRvbS9SYW5nZS5pZGw6IENoYW5n
ZWQgc3RhcnQvZW5kT2Zmc2V0IHRvIHVuc2lnbmVkLiBTdG9wcGVkIHVzaW5nIHRoZQorICAgICAg
ICBuYW1lIGNvbXBhcmVCb3VuZGFyeVBvaW50ZXJzRm9yQmluZGluZ3MuIFVwZGF0ZWQgaW50ZXJz
ZWN0c05vZGUgdG8gbm90CisgICAgICAgIHRocm93IGV4Y2VwdGlvbnMgYXMgY2FsbGVkIGZvciBp
biB0aGUgRE9NIHNwZWNpZmljYXRpb24uIFR3ZWFrZWQgY29tbWVudHMuCisKKyAgICAgICAgKiBk
b20vUmFuZ2VCb3VuZGFyeVBvaW50Lmg6IENoYW5nZWQgY29uc3RydWN0b3IgYXJndW1lbnQgdG8g
YSByZWZlcmVuY2UuCisgICAgICAgIFJlbmFtZWQgc2V0VG9CZWZvcmVDaGlsZCwgc2V0VG9BZnRl
ckNoaWxkLCBzZXRUb1N0YXJ0T2ZOb2RlLCBhbmQgc2V0VG9FbmRPZk5vZGUKKyAgICAgICAgdG8g
c2V0VG9CZWZvcmVOb2RlLCBzZXRUb0FmdGVyTm9kZSwgc2V0VG9CZWZvcmVDb250ZW50cywgc2V0
VG9BZnRlckNvbnRlbnRzLgorICAgICAgICBNZXJnZWQgZW5zdXJlT2Zmc2V0SXNWYWxpZCBpbnRv
IHRoZSBvZmZzZXQgZnVuY3Rpb24uIENoYW5nZWQgbV9jb250YWluZXJOb2RlCisgICAgICAgIGlu
dG8gYSBSZWY8PiBhbmQgcmVuYW1lZCBpdCBtX2NvbnRhaW5lci4gUmVtb3ZlZCBjbGVhci4KKwor
ICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc09mZnNl
dEJlZm9yZUNoaWxkKTogQWRkIGxvZ2ljIHNvIHNoYWRvdyByb290cyBhcmUgb3JkZXJlZCBhZnRl
ciBvZmZzZXQKKyAgICAgICAgMCBidXQgYmVmb3JlIG9mZnNldCAxIGluIHRoZWlyIGhvc3RzIGlu
IGNhc2VzIHRoYXQgZG9uJ3QgaW52b2x2ZSBhc3NpZ25lZCBzbG90cy4KKyAgICAgICAgVGhpcyBp
cyBhbiBhcmJpdHJhcnkgY2hvaWNlLCBidXQgaXMgY29uc2lzdGVudCB3aXRoIGhvdyB3ZSBvcmRl
ciBzaGFkb3cgcm9vdHMgYmVmb3JlCisgICAgICAgIG90aGVyIGNoaWxkIG5vZGVzLgorICAgICAg
ICAoV2ViQ29yZTo6ZG9jdW1lbnRPcmRlcik6IFVzZSBwYXJlbnRJbkNvbXBvc2VkVHJlZSBpbnN0
ZWFkIG9mIHBhcmVudE9yU2hhZG93SG9zdE5vZGUKKyAgICAgICAgdG8gaGFuZGxlIGNhc2VzIGlu
dm9sdmluZyBhc3NpZ25lZCBzbG90cyBjb3JyZWN0bHkuCisgICAgICAgIChXZWJDb3JlOjppc1Bv
aW50SW5SYW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRPcmRlcik6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmludGVyc2VjdHMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVuaW9uUmFuZ2UpOiBB
ZGRlZC4KKyAgICAgICAgKiBkb20vU2ltcGxlUmFuZ2UuaDogVXBkYXRlZCBmb3IgYWJvdmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFy
ZVBvc2l0aW9ucyk6IFVzZSBkb2N1bWVudE9yZGVyLgorICAgICAgICAoV2ViQ29yZTo6aXNOb2Rl
VmlzaWJseUNvbnRhaW5lZFdpdGhpbik6IFVzZSBjb250YWlucy4KKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0ZyYW1lSW5SYW5nZSk6IFVzZSBpbnRl
cnNlY3RzLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBo
b25lTnVtYmVycyk6IFVzZSBpbnRlcnNlY3RzLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVuaW9uUmFuZ2VzKTogTW92ZWQgdG8gU2lt
cGxlUmFuZ2UuY3BwLCB3aGVyZSBpdCdzIG5vdworICAgICAgICBpbXBsZW1lbnRlZCB1c2luZyBk
b2N1bWVudE9yZGVyLgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IFVw
ZGF0ZWQgbmFtZSB0byB1bmlvblJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVNlbGVj
dFRvTWFyayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlmaWNh
dGlvbik6IFVzZSBpbnRlcnNlY3RzLgorCisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFy
eUxvb2t1cExlZ2FjeS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkNvbnRhaW5zUG9z
aXRpb24pOiBVc2UgaXNQb2ludEluUmFuZ2UuCisKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmV4dGVuZCk6IFVzZSBtYWtl
UmVmUHRyIGFuZCBOb2RlOjpsZW5ndGgKKyAgICAgICAgdG8gc3RyZWFtbGluZSB0aGUgaW1wbGVt
ZW50YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmdldFJhbmdlQXQpOiBV
c2UgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlCisgICAgICAgIGFuZCByZW1vdmUgdW5uZWVk
ZWQgbnVsbCBjaGVjayB0aGF0J3MgYWxyZWFkeSBjb3ZlcmVkIGFib3ZlLgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU2VsZWN0aW9uOjphZGRSYW5nZSk6IFVzZSBpbnRlcnNlY3RzIGFuZCB1bmlvblJh
bmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpjb250YWluc05vZGUgY29uc3Qp
OiBVc2UgaW50ZXJzZWN0cyBhbmQgY29udGFpbnMuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxl
Y3Rpb246OmlzVmFsaWRGb3JQb3NpdGlvbiBjb25zdCk6IFVzZSBib29sZWFuIGxvZ2ljLgorCisg
ICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFn
Q29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVudCBjb25zdCk6IFVzZSBjb250YWlucy4KKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRl
cnNBdENhcmV0KTogVXNlIGludGVyc2VjdHMuCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVu
dCk6IFVzZSBjb250YWlucy4KKworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlOjpmaW5kVGV4dE1hdGNoZXMpOiBVc2UgZG9jdW1lbnRPcmRlci4KKworICAg
ICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChX
ZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVsZXBob25lTnVtYmVySGln
aGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjb250YWlu
cy4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6cmFuZ2VBc1RleHQpOiBVc2UgcGxhaW5UZXh0LgorICAgICAgICAoV2ViQ29y
ZTo6am9pbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyYW5nZUFzVGV4
dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yKTogVXNlIGEgdmVjdG9yCisgICAgICAgIHRoYXQg
d2UgcmV2ZXJzZSBhbmQgam9pbiByYXRoZXIgdGhhbiBpbnNlcnRpbmcgYXQgdGhlIHN0YXJ0IG9m
IGEgc3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdWJyYW5nZSk6IEFkZGVk
IGEgY2FsbCB0byB1cGRhdGVMYXlvdXQgc2luY2UgdGV4dCBpdGVyYXRvcgorICAgICAgICBmdW5j
dGlvbnMgZGVwZW5kIG9uIHRoZSBzdGF0ZSBvZiB0aGUgcmVuZGVyIHRyZWUuIFJlYWxpemVkIHRo
aXMgd2FzIHRoZW9yZXRpY2FsbHkKKyAgICAgICAgbmVlZGVkIGJlY2F1c2Ugb2YgSW50ZXJuYWxz
OjpyYW5nZUFzVGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cmFuZ2VPZlN0cmlu
Z05lYXJMb2NhdGlvbik6IERpdHRvLgorCiAyMDIwLTA4LTI4ICBUeWxlciBXaWxjb2NrICA8dHdp
bGNvLm9AcHJvdG9ubWFpbC5jb20+CiAKICAgICAgICAgRml4IHRleHQtdHJhbnNmb3JtIGluaGVy
aXRhbmNlIHRvIDo6bWFya2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGZhZDU2NGNiNWM2MmZiNDZjMTk4NmQwMTg5
YTc3YTE1YTZiMjI0NGEuLjQ1YWI5Y2FhNDU4ZjlkNzg5NTc1ZDFhODViZmQ1NzA3ZmRkZDYwMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjAtMDgtMjggIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBhbG1vc3QgYWxsIHRoZSByZW1haW5pbmcg
dXNlcyBvZiBsaXZlIHJhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE1NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVJhbmdlLmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb21fcmFuZ2VfY29tcGFyZV9ib3VuZGFy
eV9wb2ludHMpOiBVcGRhdGUgZm9yIHJlbmFtZSBvZgorICAgICAgICBjb21wYXJlQm91bmRhcnlQ
b2ludHNGb3JCaW5kaW5ncy4KKyAgICAgICAgKHdlYmtpdF9kb21fcmFuZ2VfaW50ZXJzZWN0c19u
b2RlKTogUmVtb3ZlZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAgICh3ZWJraXRfZG9tX3Jh
bmdlX2dldF90ZXh0KTogVXNlIHBsYWluVGV4dC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tOgorICAgICAgICAoLVtXS0RPTVJhbmdl
IGluaXRXaXRoRG9jdW1lbnQ6XSk6IFRpZ2h0ZW5lZCB1cCBpbnRvIGEgb25lLWxpbmVyLgorICAg
ICAgICAoLVtXS0RPTVJhbmdlIHRleHRdKTogVXNlIHBsYWluVGV4dC4KKyAgICAgICAgKC1bV0tE
T01SYW5nZSB0ZXh0UmVjdHNdKTogU3RvcHBlZCB1c2luZyBSYW5nZTo6b3duZXJEb2N1bWVudC4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlOjpkb2N1bWVudCk6IFN0b3BwZWQgdXNpbmcKKyAgICAgICAgUmFuZ2U6Om93bmVyRG9jdW1l
bnQuCisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmJvdW5kaW5n
UmVjdEluV2luZG93Q29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICBEaXR0by4KKyAgICAgICAg
KFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6cmVuZGVyZWRJbWFnZSk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjp0ZXh0IGNvbnN0
KTogVXNlIHBsYWluVGV4dC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dl
YlBhZ2VHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0
b3JTdGF0ZSBjb25zdCk6IFVzZSBjb250YWlucy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVz
dERvY3VtZW50RWRpdGluZ0NvbnRleHQpOiBVc2UgaW50ZXJzZWN0cy4KKwogMjAyMC0wOC0yOCAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJF
R1JFU1NJT04ocjI2NjE4Nyk6IEFSR1VNRU5UIEJBRDogV2ViSWNvblV0aWxpdGllcy5tbSgxMzgp
IDogUmV0YWluUHRyPFVJSW1hZ2U+IFdlYktpdDo6aWNvbkZvckZpbGUoTlNVUkwgKikgZmlsZSwg
W2ZpbGUgaXNGaWxlVVJMXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGU3ZWJlNjk3
ZTE1N2Q5NjA5YzQ0M2ViN2NlZjAwOGYxNWYwNTNhMzMuLjVjNzM5ZWQ3YjA1NTM1M2UxMjk3ZTE0
MTBlNDBlOGJlZDE3NzlkODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNCBAQAorMjAyMC0wOC0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmVtb3ZlIGFsbW9zdCBhbGwgdGhlIHJlbWFpbmluZyB1c2VzIG9mIGxpdmUgcmFuZ2Vz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU3NTUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9E
T01SYW5nZS5tbToKKyAgICAgICAgKC1bRE9NUmFuZ2UgdGV4dF0pOiBVc2UgcGxhaW5UZXh0Lgor
ICAgICAgICAoLVtET01SYW5nZSBjb21wYXJlQm91bmRhcnlQb2ludHM6c291cmNlUmFuZ2U6XSk6
IFVwZGF0ZSBmb3IgcmVuYW1lIG9mCisgICAgICAgIGNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJp
bmRpbmdzLgorICAgICAgICAoLVtET01SYW5nZSBpbnRlcnNlY3RzTm9kZTpdKTogUmVtb3ZlZCBy
YWlzZU9uRE9NRXJyb3IuCisKKyAgICAgICAgKiBET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tOgor
ICAgICAgICAoZmlyc3ROb2RlQWZ0ZXIpOiBNb3ZlZCBSYW5nZTo6Zmlyc3ROb2RlIGhlcmUgc2lu
Y2UgaXQncyB0aGUgb25seSByZW1haW5pbmcgY2FsbGVyOworICAgICAgICBtaWdodCBuZWVkIHRv
IGtlZXAgbGVnYWN5IGJlaGF2aW9yIGRlcGVuZGluZyBvbiBob3cgdGhpcyBpcyB1c2VkIGJ5IFVJ
S2l0LgorICAgICAgICAoLVtET01SYW5nZSBmaXJzdE5vZGVdKTogQ2FsbCBmaXJzdE5vZGVBZnRl
ci4KKworICAgICAgICAqIERPTS9XZWJET01PcGVyYXRpb25zLm1tOgorICAgICAgICAoLVtET01S
YW5nZSBtYXJrdXBTdHJpbmddKTogU3RvcCB1c2luZyBSYW5nZTo6b3duZXJEb2N1bWVudC4KKwog
MjAyMC0wOC0yNyAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAg
W2lPU10gcHJvdmlkZSBhIHdheSB0byBnZXQgcHJldmlvdXNseSBpbnNlcnRlZCBhbHRlcm5hdGl2
ZXMgZm9yIHRoZSBzZWxlY3RlZCB0ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCA2MzhiYWYwYmM3OTg0ZDk3OTliMjgyY2JiYWU4Y2Ex
NzYxMzZmY2NmLi4xZTEwNTlkZTFlMjAxNWM1MzQwZDIzMTViYmE1NjA0OWIzMDEwN2Q0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTIw
MzYsNiArMjAzNiw4IEBAIHN0YXRpYyBib29sIGlzUmVwbGFjZWROb2RlT3JCUihOb2RlKiBub2Rl
KQogCiBzdGF0aWMgYm9vbCBjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcihjb25zdCBDaGFyYWN0ZXJP
ZmZzZXQmIGNoYXJhY3Rlck9mZnNldDEsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVy
T2Zmc2V0MikKIHsKKyAgICAvLyBGSVhNRTogU2hvdWxkIGp1c3QgYmUgYWJsZSB0byBjYWxsIGRv
Y3VtZW50T3JkZXIgd2l0aG91dCBhY2Nlc3NpYmlsaXR5LXNwZWNpZmljIGxvZ2ljLiBOb3QgY2xl
YXIgd2h5IHdlIG5lZWQgQ2hhcmFjdGVyT2Zmc2V0IGluc3RlYWQgb2YgUG9zaXRpb24gb3IgQm91
bmRhcnlQb2ludC4KKwogICAgIGlmIChjaGFyYWN0ZXJPZmZzZXQxLmlzTnVsbCgpIHx8IGNoYXJh
Y3Rlck9mZnNldDIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTIw
NDgsMTYgKzIwNTAsMTIgQEAgc3RhdGljIGJvb2wgY2hhcmFjdGVyT2Zmc2V0c0luT3JkZXIoY29u
c3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb24KICAgICAgICAgbm9kZTEg
PSBub2RlMS0+dHJhdmVyc2VUb0NoaWxkQXQoY2hhcmFjdGVyT2Zmc2V0MS5vZmZzZXQpOwogICAg
IGlmICghbm9kZTItPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSAmJiAhaXNSZXBsYWNlZE5vZGVPckJS
KG5vZGUyKSAmJiBub2RlMi0+aGFzQ2hpbGROb2RlcygpKQogICAgICAgICBub2RlMiA9IG5vZGUy
LT50cmF2ZXJzZVRvQ2hpbGRBdChjaGFyYWN0ZXJPZmZzZXQyLm9mZnNldCk7Ci0gICAgCiAgICAg
aWYgKCFub2RlMSB8fCAhbm9kZTIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBh
dXRvIHJhbmdlMSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKCpub2RlMSk7
CiAgICAgYXV0byByYW5nZTIgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50cygq
bm9kZTIpOwotICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlMSktPmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShy
YW5nZTIpKTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDA7CisgICAg
cmV0dXJuIGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihyYW5nZTEuc3RhcnQsIHJhbmdlMi5zdGFydCkp
OwogfQogCiBzdGF0aWMgTm9kZSogcmVzZXROb2RlQW5kT2Zmc2V0Rm9yUmVwbGFjZWROb2RlKE5v
ZGUmIHJlcGxhY2VkTm9kZSwgaW50JiBvZmZzZXQsIGludCBjaGFyYWN0ZXJDb3VudCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CmluZGV4IGEwNDc4MzI4ZjkyM2M1NDUyMjc3YjJiZjRhNDQzMWJkNzI3NWY3OTMuLjIwOWM5Yjhj
OTk4YzU2ZGZjNGMzYTQ1NTM1YjQwNzVhNjY4ZTMxZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMjk3LDI2ICsy
OTcsMTcgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1pc3Nw
ZWxsaW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHMKICAgICBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiBtaXNzcGVsbGluZ3M7CiAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVj
a2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgbWlzc3BlbGxp
bmdzLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogCi0gICAgLy8gVGhlIHJldHVy
bmVkIG1pc3NwZWxsaW5ncyBhcmUgYXNzdW1lZCB0byBiZSBvcmRlcmVkIGluIHRoZSBkb2N1bWVu
dAotICAgIC8vIGxvZ2ljYWwgb3JkZXIsIHdoaWNoIHNob3VsZCBiZSBtYXRjaGVkIGJ5IFJhbmdl
Ojpjb21wYXJlQm91bmRhcnlQb2ludHMuCi0gICAgLy8gU28gaXRlcmF0ZSBmb3J3YXJkIG9yIGJh
Y2t3YXJkcyBkZXBlbmRpbmcgb24gdGhlIGRlc2lyZWQgc2VhcmNoCi0gICAgLy8gZGlyZWN0aW9u
IHRvIGZpbmQgdGhlIGNsb3Nlc3QgbWlzc3BlbGxpbmcgaW4gdGhhdCBkaXJlY3Rpb24uCisgICAg
Ly8gRmluZCB0aGUgZmlyc3QgbWlzc3BlbGxpbmcgcGFzdCB0aGUgc3RhcnQuCiAgICAgaWYgKGRp
cmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpOZXh0KSB7Ci0gICAgICAg
IGZvciAoY29uc3QgYXV0byYgbWlzc3BlbGxpbmcgOiBtaXNzcGVsbGluZ3MpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBtaXNzcGVsbGluZyA6IG1pc3NwZWxsaW5ncykgewogICAgICAgICAgICAgYXV0
byBtaXNzcGVsbGluZ1JhbmdlID0gZWRpdG9yLnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KG1p
c3NwZWxsaW5nKTsKLSAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGNyZWF0ZUxpdmVSYW5nZSgqbWlz
c3BlbGxpbmdSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwg
Y3JlYXRlTGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKQorICAgICAg
ICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UgJiYgaXNfZ3QoZG9jdW1lbnRPcmRlcihtaXNzcGVs
bGluZ1JhbmdlLT5lbmQsIHN0YXJ0LmVuZCkpKQogICAgICAgICAgICAgICAgIHJldHVybiAqbWlz
c3BlbGxpbmdSYW5nZTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IEFj
Y2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246OlByZXZpb3VzKSB7Ci0gICAgICAgIGZvciAoYXV0
byByaXQgPSBtaXNzcGVsbGluZ3MucmJlZ2luKCk7IHJpdCAhPSBtaXNzcGVsbGluZ3MucmVuZCgp
OyArK3JpdCkgewotICAgICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gZWRpdG9yLnJh
bmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KCpyaXQpOwotICAgICAgICAgICAgaWYgKCFtaXNzcGVs
bGluZ1JhbmdlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAo
Y3JlYXRlTGl2ZVJhbmdlKCptaXNzcGVsbGluZ1JhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJl
dHVyblZhbHVlKCkgPCAwKQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoYXV0byYgbWlzc3Bl
bGxpbmcgOiBtYWtlUmV2ZXJzZWRSYW5nZShtaXNzcGVsbGluZ3MpKSB7CisgICAgICAgICAgICBh
dXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBlZGl0b3IucmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQo
bWlzc3BlbGxpbmcpOworICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UgJiYgaXNfbHQo
ZG9jdW1lbnRPcmRlcihtaXNzcGVsbGluZ1JhbmdlLT5zdGFydCwgc3RhcnQuc3RhcnQpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9
CkBAIC01NjUsMjggKzU1NiwxMyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRNYXRj
aGluZ09iamVjdHMoQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiBjcml0ZQogLy8gcmFuZ2Ug
aXMgZXhwZWN0ZWQgdG8gQUNUVUFMTFkgYmUgYmVmb3JlLiBUaGVzZSBhcmUgbm90IGNoZWNrZWQg
Zm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJh
bmdlQ2xvc2VzdFRvUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJlZmVyZW5jZVJhbmdlLCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mJiBhZnRlclJhbmdlLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mJiBi
ZWZvcmVSYW5nZSkKIHsKLSAgICAvLyBUaGUgdHJlZVNjb3BlIGZvciBzaGFkb3cgbm9kZXMgbWF5
IG5vdCBiZSB0aGUgc2FtZSBzY29wZSBhcyBhbm90aGVyIGVsZW1lbnQgaW4gYSBkb2N1bWVudC4K
LSAgICAvLyBDb21wYXJpc29ucyBtYXkgZmFpbCBpbiB0aGF0IGNhc2UsIHdoaWNoIGFyZSBleHBl
Y3RlZCBiZWhhdmlvciBhbmQgc2hvdWxkIG5vdCBhc3NlcnQuCi0KLSAgICBpZiAoYWZ0ZXJSYW5n
ZSAmJiAoYWZ0ZXJSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bihyZWZlcmVuY2VSYW5nZS5lbmQuY29udGFpbmVyKSAmIE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9O
X0RJU0NPTk5FQ1RFRCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgQVNTRVJU
KCFhZnRlclJhbmdlIHx8IGNyZWF0ZUxpdmVSYW5nZShhZnRlclJhbmdlKS0+Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHJlZmVyZW5j
ZVJhbmdlKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMCk7Ci0KLSAgICBpZiAoYmVmb3JlUmFu
Z2UgJiYgKGJlZm9yZVJhbmdlLT5lbmQuY29udGFpbmVyLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bihyZWZlcmVuY2VSYW5nZS5zdGFydC5jb250YWluZXIpICYgTm9kZTo6RE9DVU1FTlRfUE9TSVRJ
T05fRElTQ09OTkVDVEVEKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBBU1NF
UlQoIWJlZm9yZVJhbmdlIHx8IGNyZWF0ZUxpdmVSYW5nZShiZWZvcmVSYW5nZSktPmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShyZWZl
cmVuY2VSYW5nZSkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDApOwotCi0gICAgaWYgKCFhZnRl
clJhbmdlICYmICFiZWZvcmVSYW5nZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICBpZiAoIWJlZm9yZVJhbmdlKQogICAgICAgICByZXR1cm4gV1RGTW92ZShhZnRlclJhbmdlKTsK
ICAgICBpZiAoIWFmdGVyUmFuZ2UpCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGJlZm9yZVJhbmdl
KTsKLQotICAgIGF1dG8gcG9zaXRpb25zVG9BZnRlclJhbmdlID0gUG9zaXRpb246OnBvc2l0aW9u
Q291bnRCZXR3ZWVuUG9zaXRpb25zKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihhZnRlclJh
bmdlLT5zdGFydCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZWZlcmVuY2VSYW5nZS5l
bmQpKTsKLSAgICBhdXRvIHBvc2l0aW9uc1RvQmVmb3JlUmFuZ2UgPSBQb3NpdGlvbjo6cG9zaXRp
b25Db3VudEJldHdlZW5Qb3NpdGlvbnMoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGJlZm9y
ZVJhbmdlLT5lbmQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmVmZXJlbmNlUmFuZ2Uu
c3RhcnQpKTsKLQotICAgIHJldHVybiBXVEZNb3ZlKHBvc2l0aW9uc1RvQWZ0ZXJSYW5nZSA8IHBv
c2l0aW9uc1RvQmVmb3JlUmFuZ2UgPyBhZnRlclJhbmdlIDogYmVmb3JlUmFuZ2UpOworICAgIGF1
dG8gZGlzdGFuY2VCZWZvcmUgPSBjaGFyYWN0ZXJDb3VudCh7IGJlZm9yZVJhbmdlLT5lbmQsIHJl
ZmVyZW5jZVJhbmdlLnN0YXJ0IH0pOworICAgIGF1dG8gZGlzdGFuY2VBZnRlciA9IGNoYXJhY3Rl
ckNvdW50KHsgYWZ0ZXJSYW5nZS0+c3RhcnQsIHJlZmVyZW5jZVJhbmdlLmVuZCB9KTsKKyAgICBy
ZXR1cm4gV1RGTW92ZShkaXN0YW5jZUJlZm9yZSA8PSBkaXN0YW5jZUFmdGVyID8gYmVmb3JlUmFu
Z2UgOiBhZnRlclJhbmdlKTsKIH0KIAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKGNvbnN0IFNp
bXBsZVJhbmdlJiByZWZlcmVuY2VSYW5nZSwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiBz
ZWFyY2hEaXJlY3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hTdHJpbmdzKSBjb25z
dApAQCAtNjAzLDIzICs1NzksMTYgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW8KICAgICBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gY2xvc2VzdFN0cmluZ1JhbmdlOwogICAgIGZvciAoYXV0byYgc2Vh
cmNoU3RyaW5nIDogc2VhcmNoU3RyaW5ncykgewogICAgICAgICBpZiAoYXV0byBmb3VuZFN0cmlu
Z1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcoc2VhcmNoU3RyaW5nLCByZWZl
cmVuY2VSYW5nZSwgZmluZE9wdGlvbnMpKSB7CisgICAgICAgICAgICBib29sIGZvdW5kU3RyaW5n
SXNDbG9zZXI7CiAgICAgICAgICAgICBpZiAoIWNsb3Nlc3RTdHJpbmdSYW5nZSkKLSAgICAgICAg
ICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAqZm91bmRTdHJpbmdSYW5nZTsKKyAgICAgICAg
ICAgICAgICBmb3VuZFN0cmluZ0lzQ2xvc2VyID0gdHJ1ZTsKICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIC8vIElmIHNlYXJjaGluZyBiYWNrd2FyZCwgdXNlIHRoZSB0cmFpbGlu
ZyByYW5nZSBlZGdlcyB0byBjb3JyZWN0bHkgZGV0ZXJtaW5lIHdoaWNoCi0gICAgICAgICAgICAg
ICAgLy8gcmFuZ2UgaXMgY2xvc2VzdC4gU2ltaWxhcmx5LCBpZiBzZWFyY2hpbmcgZm9yd2FyZCwg
dXNlIHRoZSBsZWFkaW5nIHJhbmdlIGVkZ2VzLgotICAgICAgICAgICAgICAgIGF1dG8mIGNsb3Nl
c3RTdHJpbmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBjbG9zZXN0U3RyaW5nUmFuZ2Ut
PmVuZCA6IGNsb3Nlc3RTdHJpbmdSYW5nZS0+c3RhcnQ7Ci0gICAgICAgICAgICAgICAgYXV0byYg
Zm91bmRTdHJpbmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBmb3VuZFN0cmluZ1Jhbmdl
LT5lbmQgOiBmb3VuZFN0cmluZ1JhbmdlLT5zdGFydDsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBhdXRvIGNsb3Nlc3RQb3NpdGlvbk9mZnNldCA9IGNsb3Nlc3RTdHJpbmdQb3Np
dGlvbi5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWFyY2hQb3NpdGlvbk9mZnNldCA9
IGZvdW5kU3RyaW5nUG9zaXRpb24ub2Zmc2V0OwotICAgICAgICAgICAgICAgIGF1dG8gY2xvc2Vz
dENvbnRhaW5lck5vZGUgPSBjbG9zZXN0U3RyaW5nUG9zaXRpb24uY29udGFpbmVyLnB0cigpOwot
ICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNoQ29udGFpbmVyTm9kZSA9IGZvdW5kU3RyaW5nUG9z
aXRpb24uY29udGFpbmVyLnB0cigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhjbG9zZXN0Q29udGFp
bmVyTm9kZSwgY2xvc2VzdFBvc2l0aW9uT2Zmc2V0LCBzZWFyY2hDb250YWluZXJOb2RlLCBzZWFy
Y2hQb3NpdGlvbk9mZnNldCkucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCghaXNCYWNrd2FyZFNlYXJjaCAmJiByZXN1bHQgPiAwKSB8fCAoaXNCYWNrd2FyZFNlYXJj
aCAmJiByZXN1bHQgPCAwKSkKLSAgICAgICAgICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1Jhbmdl
ID0gKmZvdW5kU3RyaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAgZm91bmRTdHJpbmdJc0Nsb3Nl
ciA9IGlzQmFja3dhcmRTZWFyY2gKKyAgICAgICAgICAgICAgICAgICAgPyBpc19ndChkb2N1bWVu
dE9yZGVyKGZvdW5kU3RyaW5nUmFuZ2UtPmVuZCwgY2xvc2VzdFN0cmluZ1JhbmdlLT5lbmQpKQor
ICAgICAgICAgICAgICAgICAgICA6IGlzX2x0KGRvY3VtZW50T3JkZXIoZm91bmRTdHJpbmdSYW5n
ZS0+c3RhcnQsIGNsb3Nlc3RTdHJpbmdSYW5nZS0+c3RhcnQpKTsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChmb3VuZFN0cmluZ0lzQ2xvc2VyKQorICAgICAgICAgICAgICAgIGNsb3Nl
c3RTdHJpbmdSYW5nZSA9ICpmb3VuZFN0cmluZ1JhbmdlOwogICAgICAgICB9CiAgICAgfQogICAg
IHJldHVybiBjbG9zZXN0U3RyaW5nUmFuZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA3OWI4
Y2E0YTEwYTQzNWRiMzE4ZjkwNmY0MDcxY2Q1YjA0NDE2Njk4Li4yYWMxMzQyZGFjMzQ0NDQ3ZWQ1
MTMyMTg5ZTA4ZWYzNTk1MjNmZTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTkxNSw3ICs5
MTUsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsaW5rQ2xpY2tQb2lu
dCgpCiAgICAgaWYgKGF1dG8gcmFuZ2UgPSBlbGVtZW50UmFuZ2UoKSkgewogICAgICAgICBhdXRv
IHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uIHsgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJh
bmdlLT5zdGFydCkgfTsKICAgICAgICAgYXV0byBlbmQgPSBuZXh0VmlzaWJsZVBvc2l0aW9uKHN0
YXJ0KTsKLSAgICAgICAgaWYgKCFlbmQuaXNOdWxsKCkgJiYgY3JlYXRlTGl2ZVJhbmdlKHJhbmdl
KS0+Y29udGFpbnMoZW5kKSkKKyAgICAgICAgaWYgKGlzUG9pbnRJblJhbmdlKCpyYW5nZSwgbWFr
ZUJvdW5kYXJ5UG9pbnQoZW5kKSkpCiAgICAgICAgICAgICByZXR1cm4geyBib3VuZHNGb3JSYW5n
ZSgqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpKS5jZW50ZXIoKSB9OwogICAgIH0KICAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCgpOwpAQCAtMTU2MSwxNyArMTU2
MSw5IEBAIFBsYWluVGV4dFJhbmdlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvY3VtZW50
QmFzZWRTZWxlY3RlZFRleHRSYW5nZSgpIGNvbnN0CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNl
bGVjdGlvbiA9IHNlbGVjdGlvbigpOwotICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSB2aXNpYmxl
U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkK
LSAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7Ci0KLSAgICAvLyBGSVhNRTogVGhlIHJl
YXNvbiB0aGlzIGRvZXMgdGhlIGNvcnJlY3QgdGhpbmcgd2hlbiB0aGUgc2VsZWN0aW9uIGlzIGlu
IHRoZQotICAgIC8vIHNoYWRvdyB0cmVlIG9mIGFuIGlucHV0IGVsZW1lbnQgaXMgdGhhdCB3ZSBn
ZXQgYW4gZXhjZXB0aW9uIGJlbG93LCBhbmQgd2UKLSAgICAvLyBjaG9vc2UgdG8gaW50ZXJwcmV0
IGFsbCBleGNlcHRpb25zIGFzICJkb2VzIG5vdCBpbnRlcnNlY3QiLiBTZWVtcyBsaWtlbHkKLSAg
ICAvLyB0aGF0IGRvZXMgbm90IGhhbmRsZSBhbGwgY2FzZXMgY29ycmVjdGx5LgotICAgIGF1dG8g
aW50ZXJzZWN0c1Jlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpLT5pbnRl
cnNlY3RzTm9kZSgqbm9kZSk7Ci0gICAgaWYgKCFpbnRlcnNlY3RzUmVzdWx0Lmhhc0V4Y2VwdGlv
bigpICYmICFpbnRlcnNlY3RzUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKQorICAgIGF1dG8g
dmlzaWJsZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpOworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2Ug
PSB2aXNpYmxlU2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGlvblJhbmdl
IHx8ICFpbnRlcnNlY3RzKCpzZWxlY3Rpb25SYW5nZSwgKm5vZGUpKQogICAgICAgICByZXR1cm4g
UGxhaW5UZXh0UmFuZ2UoKTsKIAogICAgIGludCBzdGFydCA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0
aW9uKHZpc2libGVTZWxlY3Rpb24uc3RhcnQoKSk7CkBAIC0xNjU2LDEwICsxNjQ4LDEwIEBAIHZv
aWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3Qg
UGxhaW5UZXh0UmFuZ2UmIHJhbmdlCiAgICAgICAgIGF1dG8mIG5vZGUgPSAqdGhpcy0+bm9kZSgp
OwogICAgICAgICBhdXRvIGVsZW1lbnRSYW5nZSA9IHRoaXMtPmVsZW1lbnRSYW5nZSgpOwogICAg
ICAgICBhdXRvIHN0YXJ0ID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0
ZXJhdG9yKG5vZGUsIHJhbmdlLnN0YXJ0KTsKLSAgICAgICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2Uo
ZWxlbWVudFJhbmdlKS0+Y29udGFpbnMoc3RhcnQpKQorICAgICAgICBpZiAoIWlzUG9pbnRJblJh
bmdlKCplbGVtZW50UmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSkpCiAgICAgICAgICAg
ICBzdGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0
KTsKICAgICAgICAgYXV0byBlbmQgPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFj
dGVySXRlcmF0b3Iobm9kZSwgcmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOwotICAgICAgICBp
ZiAoIWNyZWF0ZUxpdmVSYW5nZShlbGVtZW50UmFuZ2UpLT5jb250YWlucyhlbmQpKQorICAgICAg
ICBpZiAoIWlzUG9pbnRJblJhbmdlKCplbGVtZW50UmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGVu
ZCkpKQogICAgICAgICAgICAgZW5kID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1l
bnRSYW5nZS0+c3RhcnQpOwogICAgICAgICBtX3JlbmRlcmVyLT5mcmFtZSgpLnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0LCBlbmQpLCBGcmFtZVNlbGVjdGlv
bjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwogICAgIH0KQEAg
LTIyMTYsNyArMjIwOCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2Vs
ZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zCiAKICAgICAgICAgYXV0
byBzdGFydCA9IHJhbmdlLnN0YXJ0OwogICAgICAgICBpZiAoYXV0byBlbGVtZW50UmFuZ2UgPSB0
aGlzLT5lbGVtZW50UmFuZ2UoKSkgewotICAgICAgICAgICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2Uo
ZWxlbWVudFJhbmdlKS0+Y29udGFpbnMoc3RhcnQpKQorICAgICAgICAgICAgaWYgKCFpc1BvaW50
SW5SYW5nZSgqZWxlbWVudFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChzdGFydCkpKQogICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnRSYW5n
ZS0+c3RhcnQpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAppbmRleCA4ZDYyMWJlNzgx
ZTk5MGMxZGM0MDYwZmVkZmIzOTJiNzE2NTc1NGE5Li44ZjQzZjM4NWMzM2EyNDM3NTlmMTJjZjc0
ZDYyOTFmZWRlOTNlMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCkBAIC0xNTUsMjUgKzE1NSw4IEBA
IGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVP
YmplY3QsIFZpc2libGVTZWxlY3Rpb24mCiAgICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2Jq
ZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlm
ICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIHdhbnQgdG8gY2hl
Y2sgdGhhdCBib3RoIHRoZSBzZWxlY3Rpb24gaW50ZXJzZWN0cyB0aGUgbm9kZQotICAgIC8vIEFO
RCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMgbm90IGp1c3QgInRvdWNoaW5nIiBvbmUgb2YgdGhlCi0g
ICAgLy8gYm91bmRhcmllcyBmb3IgdGhlIHNlbGVjdGVkIG5vZGUuIFdlIHdhbnQgdG8gY2hlY2sg
d2hldGhlciB0aGUKLSAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBh
dCBsZWFzdCBwYXJ0aWFsbHkuCi0gICAgYXV0byYgbm9kZSA9ICpjb3JlT2JqZWN0LT5ub2RlKCk7
Ci0gICAgYXV0byogbGFzdERlc2NlbmRhbnQgPSBub2RlLmxhc3REZXNjZW5kYW50KCk7Ci0gICAg
dW5zaWduZWQgbGFzdE9mZnNldCA9IGxhc3REZXNjZW5kYW50LT5sZW5ndGgoKTsKLSAgICBhdXRv
IGludGVyc2VjdHNSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+aW50ZXJzZWN0c05v
ZGUobm9kZSk7Ci0gICAgcmV0dXJuICFpbnRlcnNlY3RzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpCi0g
ICAgICAgICYmIGludGVyc2VjdHNSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkKLSAgICAgICAg
JiYgKHJhbmdlLT5lbmQuY29udGFpbmVyLnB0cigpICE9ICZub2RlIHx8IHJhbmdlLT5lbmQub2Zm
c2V0KQotICAgICAgICAmJiAocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSAhPSBsYXN0RGVz
Y2VuZGFudCB8fCByYW5nZS0+c3RhcnQub2Zmc2V0ICE9IGxhc3RPZmZzZXQpOworICAgIGF1dG8g
cmFuZ2UgPSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpOworICAgIHJldHVybiByYW5nZSAmJiBpbnRl
cnNlY3RzKCpyYW5nZSwgKmNvcmVPYmplY3QtPm5vZGUoKSk7CiB9CiAKIEFYQ29yZU9iamVjdCog
b2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKEFYQ29yZU9iamVjdCogcmVmZXJl
bmNlT2JqZWN0LCBpbnQmIG9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggZjBjOGEzNGVm
MzNlYmMwNmRkNTcyOTYyMDg1MGZhMTE5NWNiNzUwMi4uNWFiYzI0ZWJiOTgxZTU2NGYwN2FkZWI4
ZTVmYzExNTgxMzFjNTM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTkwNSw3ICs5MDUsNyBA
QCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRoZSBvd25pbmcgZWxlbWVudCBpbiB0aGUgcGFy
ZW50IGRvY3VtZW50LgogICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aGlzIGlzIHRoZSB0b3Ag
bGV2ZWwgZG9jdW1lbnQuCi0gICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVy
RWxlbWVudCgpIGNvbnN0OwogCiAgICAgLy8gVXNlZCBieSBET00gYmluZGluZ3M7IG5vIGRpcmVj
dGlvbiBrbm93bi4KICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV90
aXRsZS5zdHJpbmc7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5jcHAKaW5kZXggMGY3Zjk5MGUzZWQ5YTc1YzYzMTEyNDBhZWQ1NTdhODE3MDUxY2Vl
NC4uOGFlMWQ4ZDU1YjhmZTcwZWVlMzk1N2QzZGRlZDc1MzhjZDEzYmYzNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKQEAgLTY0OSw3ICs2
NDksNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNjcmlwdGlvbk9u
TWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKGNvbnN0CiAKIHZvaWQgYWRkTWFya2VyKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgY29uc3Qg
RG9jdW1lbnRNYXJrZXI6OkRhdGEmIGRhdGEpCiB7Ci0gICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVy
LT5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmFuZ2UsIHR5cGUsIGRhdGEpOworICAg
IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihyYW5nZSwgdHlwZSwg
ZGF0YSk7CiB9CiAKIHZvaWQgYWRkTWFya2VyKFRleHQmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIERv
Y3VtZW50TWFya2VyOjpEYXRhJiYgZGF0YSkKQEAgLTY1OSw3ICs2NTksNyBAQCB2b2lkIGFkZE1h
cmtlcihUZXh0JiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBE
b2N1bWVudE1hcmtlcgogCiB2b2lkIHJlbW92ZU1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzLCBSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciBwb2xpY3kpCiB7Ci0gICAgcmFuZ2Uuc3RhcnQuY29u
dGFpbmVyLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHJhbmdlLCB0eXBlcywg
cG9saWN5KTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJr
ZXJzKHJhbmdlLCB0eXBlcywgcG9saWN5KTsKIH0KIAogU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJh
bmdlKE5vZGUmIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaAppbmRleCAzNGM2ZmU4OTE1MDcwNzRlYzIxYTg1ZWYyMTYyN2I3YjFmZmU5NTU2Li4wOTVk
NmZhZWRhOWI0YmFhODNhNmY1ZjQ3M2UxOGFjZjQ4M2JhYzIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgK
QEAgLTI5Nyw3ICsyOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIFNoYWRvd1Jvb3RNb2RlIG1vZGU7
CiAgICAgICAgIGJvb2wgZGVsZWdhdGVzRm9jdXMgeyBmYWxzZSB9OwogICAgIH07Ci0gICAgRXhj
ZXB0aW9uT3I8U2hhZG93Um9vdCY+IGF0dGFjaFNoYWRvdyhjb25zdCBTaGFkb3dSb290SW5pdCYp
OworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFNoYWRvd1Jvb3QmPiBhdHRhY2hTaGFk
b3coY29uc3QgU2hhZG93Um9vdEluaXQmKTsKIAogICAgIFJlZlB0cjxTaGFkb3dSb290PiB1c2Vy
QWdlbnRTaGFkb3dSb290KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2hhZG93Um9vdCYg
ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDc5MWUzNTZi
ODI4OTE4MjdiY2E3YTlhNjFmNzlkMzMwNWRhZDE5YjMuLjVjODMyNGUyNWViNTUwZDJlMGM3ZDA1
OWVmMjQzZWMxMzY3OTY4NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTE2MjgsNyArMTYyOCw3IEBA
IGJvb2wgY29ubmVjdGVkSW5TYW1lVHJlZVNjb3BlKGNvbnN0IE5vZGUqIGEsIGNvbnN0IE5vZGUq
IGIpCiAgICAgcmV0dXJuIGEgJiYgYiAmJiBhLT5pc0Nvbm5lY3RlZCgpID09IGItPmlzQ29ubmVj
dGVkKCkgJiYgJmEtPnRyZWVTY29wZSgpID09ICZiLT50cmVlU2NvcGUoKTsKIH0KIAotLy8gRklY
TUU6IFJlZmFjdG9yIHRoaXMgc28gaXQgY2FsbHMgZG9jdW1lbnRPcmRlcmluZywgZXhjZXB0IGZv
ciBhbnkgZXhvdGljIGluZWZmaWNpZW50IHRoaW5ncyB0aGF0IGFyZSBuZWVkZWQgb25seSBoZXJl
LgorLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgc28gaXQgY2FsbHMgZG9jdW1lbnRPcmRlciwgZXhj
ZXB0IGZvciBhbnkgZXhvdGljIGluZWZmaWNpZW50IHRoaW5ncyB0aGF0IGFyZSBuZWVkZWQgb25s
eSBoZXJlLgogdW5zaWduZWQgc2hvcnQgTm9kZTo6Y29tcGFyZURvY3VtZW50UG9zaXRpb24oTm9k
ZSYgb3RoZXJOb2RlKQogewogICAgIGlmICgmb3RoZXJOb2RlID09IHRoaXMpCkBAIC0yNjI3LDEx
ICsyNjI3LDExIEBAIHZvaWQqIE5vZGU6Om9wYXF1ZVJvb3RTbG93KCkgY29uc3QKICAgICByZXR1
cm4gY29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG5vZGUpKTsKIH0K
IAotc3RhdGljIHNpemVfdCBkZXB0aChjb25zdCBOb2RlJiBub2RlKQorc3RhdGljIHNpemVfdCBk
ZXB0aEluQ29tcG9zZWRUcmVlKGNvbnN0IE5vZGUmIG5vZGUpCiB7CiAgICAgc2l6ZV90IGRlcHRo
ID0gMDsKICAgICBhdXRvIGFuY2VzdG9yID0gJm5vZGU7Ci0gICAgd2hpbGUgKChhbmNlc3RvciA9
IGFuY2VzdG9yLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkpKQorICAgIHdoaWxlICgoYW5jZXN0
b3IgPSBhbmNlc3Rvci0+cGFyZW50SW5Db21wb3NlZFRyZWUoKSkpCiAgICAgICAgICsrZGVwdGg7
CiAgICAgcmV0dXJuIGRlcHRoOwogfQpAQCAtMjY0MSwzMyArMjY0MSwzOSBAQCBzdHJ1Y3QgQW5j
ZXN0b3JBbmRDaGlsZHJlbiB7CiAgICAgY29uc3QgTm9kZSogZGlzdGluY3RBbmNlc3RvckE7CiAg
ICAgY29uc3QgTm9kZSogZGlzdGluY3RBbmNlc3RvckI7CiB9OworCisvLyBGSVhNRTogVGhpcyBm
dW5jdGlvbidzIG5hbWUgaXMgbm90IGV4cGxpY2l0IGFib3V0IHRoZSBmYWN0IHRoYXQgaXQncyB0
aGUgY29tbW9uIGluY2x1c2l2ZSBhbmNlc3RvciBpbiB0aGUgY29tcG9zZWQgdHJlZS4KIHN0YXRp
YyBBbmNlc3RvckFuZENoaWxkcmVuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yQW5kQ2hpbGRyZW4o
Y29uc3QgTm9kZSYgYSwgY29uc3QgTm9kZSYgYikKIHsKLSAgICAvLyBUaGlzIGZpcnN0IGNoZWNr
IGlzbid0IG5lZWRlZCBmb3IgY29ycmVjdG5lc3MsIGJ1dCBpdCBpcyBjaGVhcCBhbmQgbGlrZWx5
IHRvIGJlCisgICAgLy8gVGhpcyBjaGVjayBpc24ndCBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzLCBi
dXQgaXQgaXMgY2hlYXAgYW5kIGxpa2VseSB0byBiZQogICAgIC8vIGNvbW1vbiBlbm91Z2ggdG8g
YmUgd29ydGggb3B0aW1pemluZyBzbyB3ZSBkb24ndCBoYXZlIHRvIHdhbGsgdG8gdGhlIHJvb3Qu
CiAgICAgaWYgKCZhID09ICZiKQogICAgICAgICByZXR1cm4geyAmYSwgbnVsbHB0ciwgbnVsbHB0
ciB9OwotICAgIGF1dG8gW2RlcHRoQSwgZGVwdGhCXSA9IHN0ZDo6bWFrZV90dXBsZShkZXB0aChh
KSwgZGVwdGgoYikpOworICAgIC8vIEZJWE1FOiBDb3VsZCBvcHRpbWl6ZSBjYXNlcyB3aGVyZSBu
b2RlcyBhcmUgYm90aCBpbiB0aGUgc2FtZSBzaGFkb3cgdHJlZS4KKyAgICAvLyBGSVhNRTogQ291
bGQgb3B0aW1pemUgY2FzZXMgd2hlcmUgbm9kZXMgYXJlIGluIGRpZmZlcmVudCBkb2N1bWVudHMg
dG8gcXVpY2tseSByZXR1cm4gZmFsc2UuCisgICAgLy8gRklYTUU6IENvdWxkIG9wdGltaXplIGNh
c2VzIHdoZXJlIG9uZSBub2RlIGlzIGNvbm5lY3RlZCBhbmQgdGhlIG90aGVyIGlzIG5vdCB0byBx
dWlja2x5IHJldHVybiBmYWxzZS4KKyAgICBhdXRvIFtkZXB0aEEsIGRlcHRoQl0gPSBzdGQ6Om1h
a2VfdHVwbGUoZGVwdGhJbkNvbXBvc2VkVHJlZShhKSwgZGVwdGhJbkNvbXBvc2VkVHJlZShiKSk7
CiAgICAgYXV0byBbeCwgeSwgZGlmZmVyZW5jZV0gPSBkZXB0aEEgPj0gZGVwdGhCCiAgICAgICAg
ID8gc3RkOjptYWtlX3R1cGxlKCZhLCAmYiwgZGVwdGhBIC0gZGVwdGhCKQogICAgICAgICA6IHN0
ZDo6bWFrZV90dXBsZSgmYiwgJmEsIGRlcHRoQiAtIGRlcHRoQSk7CiAgICAgZGVjbHR5cGUoeCkg
ZGlzdGluY3RBbmNlc3RvckEgPSBudWxscHRyOwogICAgIGZvciAoZGVjbHR5cGUoZGlmZmVyZW5j
ZSkgaSA9IDA7IGkgPCBkaWZmZXJlbmNlOyArK2kpIHsKICAgICAgICAgZGlzdGluY3RBbmNlc3Rv
ckEgPSB4OwotICAgICAgICB4ID0geC0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpOworICAgICAg
ICB4ID0geC0+cGFyZW50SW5Db21wb3NlZFRyZWUoKTsKICAgICB9CiAgICAgZGVjbHR5cGUoeSkg
ZGlzdGluY3RBbmNlc3RvckIgPSBudWxscHRyOwogICAgIHdoaWxlICh4ICE9IHkpIHsKICAgICAg
ICAgZGlzdGluY3RBbmNlc3RvckEgPSB4OwogICAgICAgICBkaXN0aW5jdEFuY2VzdG9yQiA9IHk7
Ci0gICAgICAgIHggPSB4LT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7Ci0gICAgICAgIHkgPSB5
LT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7CisgICAgICAgIHggPSB4LT5wYXJlbnRJbkNvbXBv
c2VkVHJlZSgpOworICAgICAgICB5ID0geS0+cGFyZW50SW5Db21wb3NlZFRyZWUoKTsKICAgICB9
CiAgICAgaWYgKGRlcHRoQSA8IGRlcHRoQikKICAgICAgICAgc3RkOjpzd2FwKGRpc3RpbmN0QW5j
ZXN0b3JBLCBkaXN0aW5jdEFuY2VzdG9yQik7CiAgICAgcmV0dXJuIHsgeCwgZGlzdGluY3RBbmNl
c3RvckEsIGRpc3RpbmN0QW5jZXN0b3JCIH07CiB9CiAKKy8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9u
J3MgbmFtZSBpcyBub3QgZXhwbGljaXQgYWJvdXQgdGhlIGZhY3QgdGhhdCBpdCdzIHRoZSBjb21t
b24gaW5jbHVzaXZlIGFuY2VzdG9yIGluIHRoZSBjb21wb3NlZCB0cmVlLgogUmVmUHRyPE5vZGU+
IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKE5vZGUmIGEsIE5vZGUmIGIpCiB7CiAgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8Tm9kZSo+KGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yQW5kQ2hpbGRyZW4oYSwg
YikuY29tbW9uQW5jZXN0b3IpOwpAQCAtMjY3NSw2ICsyNjgxLDggQEAgUmVmUHRyPE5vZGU+IGNv
bW1vbkluY2x1c2l2ZUFuY2VzdG9yKE5vZGUmIGEsIE5vZGUmIGIpCiAKIHN0YXRpYyBib29sIGlz
U2libGluZ1N1YnNlcXVlbnQoY29uc3QgTm9kZSYgc2libGluZ0EsIGNvbnN0IE5vZGUmIHNpYmxp
bmdCKQogeworICAgIEFTU0VSVChzaWJsaW5nQS5wYXJlbnROb2RlKCkpOworICAgIEFTU0VSVChz
aWJsaW5nQS5wYXJlbnROb2RlKCkgPT0gc2libGluZ0IucGFyZW50Tm9kZSgpKTsKICAgICBBU1NF
UlQoJnNpYmxpbmdBICE9ICZzaWJsaW5nQik7CiAgICAgZm9yIChhdXRvIHNpYmxpbmcgPSAmc2li
bGluZ0E7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0U2libGluZygpKSB7CiAgICAg
ICAgIGlmIChzaWJsaW5nID09ICZzaWJsaW5nQikKQEAgLTI2OTQsNiArMjcwMiwxNiBAQCBQYXJ0
aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBOb2RlJiBhLCBjb25zdCBOb2RlJiBiKQog
ICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpsZXNzOwogICAgIGlmICghcmVzdWx0LmRp
c3RpbmN0QW5jZXN0b3JCKQogICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpncmVhdGVy
OworICAgIGJvb2wgaXNTaGFkb3dSb290QSA9IHJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQS0+aXNT
aGFkb3dSb290KCk7CisgICAgYm9vbCBpc1NoYWRvd1Jvb3RCID0gcmVzdWx0LmRpc3RpbmN0QW5j
ZXN0b3JCLT5pc1NoYWRvd1Jvb3QoKTsKKyAgICBpZiAoaXNTaGFkb3dSb290QSB8fCBpc1NoYWRv
d1Jvb3RCKSB7CisgICAgICAgIGlmICghaXNTaGFkb3dSb290QikKKyAgICAgICAgICAgIHJldHVy
biBQYXJ0aWFsT3JkZXJpbmc6Omxlc3M7CisgICAgICAgIGlmICghaXNTaGFkb3dSb290QSkKKyAg
ICAgICAgICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmdyZWF0ZXI7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjp1bm9yZGVy
ZWQ7CisgICAgfQogICAgIHJldHVybiBpc1NpYmxpbmdTdWJzZXF1ZW50KCpyZXN1bHQuZGlzdGlu
Y3RBbmNlc3RvckEsICpyZXN1bHQuZGlzdGluY3RBbmNlc3RvckIpID8gUGFydGlhbE9yZGVyaW5n
OjpsZXNzIDogUGFydGlhbE9yZGVyaW5nOjpncmVhdGVyOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBi
MDI1YzRjYTFhNmZhZWFkOTMzNzdiYjI3ZGY3ZGNmMmQyNDA0OTFiLi41NGY5ZGYxODBhNGY2YmZi
NGFmNjdlNTUzNTI5OTI3NjMxYTNkN2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTY5Myw2ICs2OTMsMTIg
QEAgcHJpdmF0ZToKICAgICBjb25zdGV4cHIgUGFydGlhbE9yZGVyaW5nKFR5cGUgdHlwZSkgOiBt
X3R5cGUgeyB0eXBlIH0geyB9CiAgICAgVHlwZSBtX3R5cGU7CiB9OworY29uc3RleHByIGJvb2wg
aXNfZXEoUGFydGlhbE9yZGVyaW5nKTsKK2NvbnN0ZXhwciBib29sIGlzX2x0KFBhcnRpYWxPcmRl
cmluZyk7Citjb25zdGV4cHIgYm9vbCBpc19ndChQYXJ0aWFsT3JkZXJpbmcpOworY29uc3RleHBy
IGJvb2wgaXNfbmVxKFBhcnRpYWxPcmRlcmluZyk7Citjb25zdGV4cHIgYm9vbCBpc19sdGVxKFBh
cnRpYWxPcmRlcmluZyk7Citjb25zdGV4cHIgYm9vbCBpc19ndGVxKFBhcnRpYWxPcmRlcmluZyk7
CiAKIFdFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IE5v
ZGUmLCBjb25zdCBOb2RlJik7CiAKQEAgLTgyOSw2ICs4MzUsMjEgQEAgY29uc3RleHByIGJvb2wg
aXNfZ3QoUGFydGlhbE9yZGVyaW5nIG9yZGVyaW5nKQogICAgIHJldHVybiBvcmRlcmluZy5tX3R5
cGUgPT0gUGFydGlhbE9yZGVyaW5nOjpUeXBlOjpHcmVhdGVyOwogfQogCitjb25zdGV4cHIgYm9v
bCBpc19uZXEoUGFydGlhbE9yZGVyaW5nIG9yZGVyaW5nKQoreworICAgIHJldHVybiBpc19sdChv
cmRlcmluZykgfHwgaXNfZ3Qob3JkZXJpbmcpOworfQorCitjb25zdGV4cHIgYm9vbCBpc19sdGVx
KFBhcnRpYWxPcmRlcmluZyBvcmRlcmluZykKK3sKKyAgICByZXR1cm4gaXNfbHQob3JkZXJpbmcp
IHx8IGlzX2VxKG9yZGVyaW5nKTsKK30KKworY29uc3RleHByIGJvb2wgaXNfZ3RlcShQYXJ0aWFs
T3JkZXJpbmcgb3JkZXJpbmcpCit7CisgICAgcmV0dXJuIGlzX2d0KG9yZGVyaW5nKSB8fCBpc19l
cShvcmRlcmluZyk7Cit9CisKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBjb25zdCBOb2RlJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2UuY3BwCmluZGV4IDhmNmZkM2JjOGFiYTVhZmE0NThjOTM2ZjJlZTNjYzc0MDg0ZGJjMmMuLjM2
MjIyNzljY2EwM2YxMTJiYWMxNzUwNDE4NzQ2OWY1YmUxOGM0OTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNw
cApAQCAtNjYsNyArNjYsNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogREVGSU5FX0RF
QlVHX09OTFlfR0xPQkFMKFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyLCByYW5nZUNvdW50ZXIs
ICgiUmFuZ2UiKSk7CiAKIGVudW0gQ29udGVudHNQcm9jZXNzRGlyZWN0aW9uIHsgUHJvY2Vzc0Nv
bnRlbnRzRm9yd2FyZCwgUHJvY2Vzc0NvbnRlbnRzQmFja3dhcmQgfTsKLWVudW0gY2xhc3MgQ29v
cmRpbmF0ZVNwYWNlIHsgQWJzb2x1dGUsIENsaWVudCB9OwogCiBzdGF0aWMgRXhjZXB0aW9uT3I8
dm9pZD4gcHJvY2Vzc05vZGVzKFJhbmdlOjpBY3Rpb25UeXBlLCBWZWN0b3I8UmVmPE5vZGU+PiYs
IE5vZGUqIG9sZENvbnRhaW5lciwgUmVmUHRyPE5vZGU+IG5ld0NvbnRhaW5lcik7CiBzdGF0aWMg
RXhjZXB0aW9uT3I8UmVmUHRyPE5vZGU+PiBwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cyhS
YW5nZTo6QWN0aW9uVHlwZSwgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBSZWZQdHI8Tm9kZT4g
Y29udGFpbmVyLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKQEAg
LTc0LDggKzczLDggQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZlB0cjxOb2RlPj4gcHJvY2Vzc0Fu
Y2VzdG9yc0FuZFRoZWlyU2libGluZ3MoUmFuZ2U6OkFjdGlvblQKIAogaW5saW5lIFJhbmdlOjpS
YW5nZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCkKICAgICA6IG1fb3duZXJEb2N1bWVudChvd25l
ckRvY3VtZW50KQotICAgICwgbV9zdGFydCgmb3duZXJEb2N1bWVudCkKLSAgICAsIG1fZW5kKCZv
d25lckRvY3VtZW50KQorICAgICwgbV9zdGFydChvd25lckRvY3VtZW50KQorICAgICwgbV9lbmQo
b3duZXJEb2N1bWVudCkKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgcmFuZ2VDb3VudGVyLmluY3Jl
bWVudCgpOwpAQCAtOTgsNjUgKzk3LDM5IEBAIFJhbmdlOjp+UmFuZ2UoKQogI2VuZGlmCiB9CiAK
LXZvaWQgUmFuZ2U6OnNldERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKK3ZvaWQgUmFuZ2U6
OnVwZGF0ZURvY3VtZW50KCkKIHsKLSAgICBBU1NFUlQobV9vd25lckRvY3VtZW50LnB0cigpICE9
ICZkb2N1bWVudCk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBzdGFydENvbnRhaW5lcigpLmRvY3Vt
ZW50KCk7CisgICAgaWYgKG1fb3duZXJEb2N1bWVudC5wdHIoKSA9PSAmZG9jdW1lbnQpCisgICAg
ICAgIHJldHVybjsKICAgICBtX293bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdlKCp0aGlzKTsKICAg
ICBtX293bmVyRG9jdW1lbnQgPSBkb2N1bWVudDsKLSAgICBtX3N0YXJ0LnNldFRvU3RhcnRPZk5v
ZGUoZG9jdW1lbnQpOwotICAgIG1fZW5kLnNldFRvU3RhcnRPZk5vZGUoZG9jdW1lbnQpOwogICAg
IG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UoKnRoaXMpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKGNvbnN0IFJhbmdlQm91bmRhcnlQ
b2ludCYgc3RhcnQsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgZW5kKQorRXhjZXB0aW9uT3I8
dm9pZD4gUmFuZ2U6OnNldFN0YXJ0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zm
c2V0KQogewotICAgIE5vZGUqIGVuZFJvb3RDb250YWluZXIgPSBlbmQuY29udGFpbmVyKCk7Ci0g
ICAgd2hpbGUgKGVuZFJvb3RDb250YWluZXItPnBhcmVudE5vZGUoKSkKLSAgICAgICAgZW5kUm9v
dENvbnRhaW5lciA9IGVuZFJvb3RDb250YWluZXItPnBhcmVudE5vZGUoKTsKLSAgICBOb2RlKiBz
dGFydFJvb3RDb250YWluZXIgPSBzdGFydC5jb250YWluZXIoKTsKLSAgICB3aGlsZSAoc3RhcnRS
b290Q29udGFpbmVyLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIHN0YXJ0Um9vdENvbnRhaW5lciA9
IHN0YXJ0Um9vdENvbnRhaW5lci0+cGFyZW50Tm9kZSgpOwotCi0gICAgcmV0dXJuIHN0YXJ0Um9v
dENvbnRhaW5lciAhPSBlbmRSb290Q29udGFpbmVyIHx8IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQ
b2ludHMoc3RhcnQsIGVuZCkucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwOwotfQotCi1FeGNlcHRp
b25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnQoUmVmPE5vZGU+JiYgcmVmTm9kZSwgdW5zaWduZWQg
b2Zmc2V0KQotewotICAgIGJvb2wgZGlkTW92ZURvY3VtZW50ID0gZmFsc2U7Ci0gICAgaWYgKCZy
ZWZOb2RlLT5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKLSAgICAgICAgc2V0RG9j
dW1lbnQocmVmTm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIGRpZE1vdmVEb2N1bWVudCA9IHRy
dWU7Ci0gICAgfQotCi0gICAgYXV0byBjaGlsZE5vZGUgPSBjaGVja05vZGVXT2Zmc2V0KHJlZk5v
ZGUsIG9mZnNldCk7CisgICAgYXV0byBjaGlsZE5vZGUgPSBjaGVja05vZGVPZmZzZXRQYWlyKGNv
bnRhaW5lciwgb2Zmc2V0KTsKICAgICBpZiAoY2hpbGROb2RlLmhhc0V4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gY2hpbGROb2RlLnJlbGVhc2VFeGNlcHRpb24oKTsKIAotICAgIG1fc3RhcnQu
c2V0KFdURk1vdmUocmVmTm9kZSksIG9mZnNldCwgY2hpbGROb2RlLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKLQotICAgIGlmIChkaWRNb3ZlRG9jdW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290
Q29udGFpbmVyKG1fc3RhcnQsIG1fZW5kKSkKLSAgICAgICAgY29sbGFwc2UodHJ1ZSk7Ci0KKyAg
ICBtX3N0YXJ0LnNldChXVEZNb3ZlKGNvbnRhaW5lciksIG9mZnNldCwgY2hpbGROb2RlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpKTsKKyAgICBpZiAoIWlzX2x0ZXEoZG9jdW1lbnRPcmRlcihtYWtlQm91
bmRhcnlQb2ludChtX3N0YXJ0KSwgbWFrZUJvdW5kYXJ5UG9pbnQobV9lbmQpKSkpCisgICAgICAg
IG1fZW5kID0gbV9zdGFydDsKKyAgICB1cGRhdGVEb2N1bWVudCgpOwogICAgIHJldHVybiB7IH07
CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmQoUmVmPE5vZGU+JiYgcmVmTm9k
ZSwgdW5zaWduZWQgb2Zmc2V0KQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldEVuZChSZWY8
Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICBib29sIGRpZE1vdmVE
b2N1bWVudCA9IGZhbHNlOwotICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSAmb3duZXJE
b2N1bWVudCgpKSB7Ci0gICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUtPmRvY3VtZW50KCkpOwot
ICAgICAgICBkaWRNb3ZlRG9jdW1lbnQgPSB0cnVlOwotICAgIH0KLQotICAgIGF1dG8gY2hpbGRO
b2RlID0gY2hlY2tOb2RlV09mZnNldChyZWZOb2RlLCBvZmZzZXQpOworICAgIGF1dG8gY2hpbGRO
b2RlID0gY2hlY2tOb2RlT2Zmc2V0UGFpcihjb250YWluZXIsIG9mZnNldCk7CiAgICAgaWYgKGNo
aWxkTm9kZS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS5yZWxlYXNl
RXhjZXB0aW9uKCk7CiAKLSAgICBtX2VuZC5zZXQoV1RGTW92ZShyZWZOb2RlKSwgb2Zmc2V0LCBj
aGlsZE5vZGUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotCi0gICAgaWYgKGRpZE1vdmVEb2N1bWVu
dCB8fCBjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIobV9zdGFydCwgbV9lbmQpKQotICAg
ICAgICBjb2xsYXBzZShmYWxzZSk7Ci0KKyAgICBtX2VuZC5zZXQoV1RGTW92ZShjb250YWluZXIp
LCBvZmZzZXQsIGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgaWYgKCFpc19s
dGVxKGRvY3VtZW50T3JkZXIobWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCksIG1ha2VCb3VuZGFy
eVBvaW50KG1fZW5kKSkpKQorICAgICAgICBtX3N0YXJ0ID0gbV9lbmQ7CisgICAgdXBkYXRlRG9j
dW1lbnQoKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xNjgsMjM3ICsxNDEsMTAzIEBAIHZv
aWQgUmFuZ2U6OmNvbGxhcHNlKGJvb2wgdG9TdGFydCkKICAgICAgICAgbV9zdGFydCA9IG1fZW5k
OwogfQogCi1FeGNlcHRpb25Pcjxib29sPiBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSYgcmVm
Tm9kZSwgdW5zaWduZWQgb2Zmc2V0KQorRXhjZXB0aW9uT3I8Ym9vbD4gUmFuZ2U6OmlzUG9pbnRJ
blJhbmdlKE5vZGUmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0KQogewotICAgIGlmICgmcmVm
Tm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gY2hlY2tOb2RlUmVzdWx0ID0gY2hlY2tOb2RlV09mZnNldChyZWZOb2Rl
LCBvZmZzZXQpOwotICAgIGlmIChjaGVja05vZGVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAg
ICAgICAgLy8gRE9NNCBzcGVjIHJlcXVpcmVzIHVzIHRvIGNoZWNrIHdoZXRoZXIgcmVmTm9kZSBh
bmQgc3RhcnQgY29udGFpbmVyIGhhdmUgdGhlIHNhbWUgcm9vdCBmaXJzdAotICAgICAgICAvLyBi
dXQgd2UgZG8gaXQgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdG8gYXZvaWQgTyhuKSBvcGVyYXRpb24g
aGVyZSBpbiBjb21tb24gY2FzZS4KLSAgICAgICAgaWYgKCFjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cihyZWZOb2RlLCBzdGFydENvbnRhaW5lcigpKSkKKyAgICBpZiAoYXV0byBjaGVja1Jlc3VsdCA9
IGNoZWNrTm9kZU9mZnNldFBhaXIoY29udGFpbmVyLCBvZmZzZXQpOyBjaGVja1Jlc3VsdC5oYXNF
eGNlcHRpb24oKSkgeworICAgICAgICAvLyBET00gc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGlz
IGNoZWNrIGJlIGRvbmUgZmlyc3QgYnV0IHNpbmNlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMs
CisgICAgICAgIC8vIHdlIGNhbiBkbyBpdCBpbiByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIGFuIGV4
dHJhIHJvb3Qgbm9kZSBjaGVjayBpbiB0aGUgY29tbW9uIGNhc2UuCisgICAgICAgIGlmICgmY29u
dGFpbmVyLnJvb3ROb2RlKCkgIT0gJnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGNoZWNrTm9kZVJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBjaGVja1Jlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCk7CiAgICAgfQotCi0gICAgYXV0byBzdGFydENvbXBhcmVSZXN1bHQgPSBjb21wYXJlQm91
bmRhcnlQb2ludHMoJnJlZk5vZGUsIG9mZnNldCwgJnN0YXJ0Q29udGFpbmVyKCksIG1fc3RhcnQu
b2Zmc2V0KCkpOwotICAgIGlmICghKCFzdGFydENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkg
JiYgc3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID49IDApKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBlbmRDb21wYXJlUmVzdWx0ID0gY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZlbmRDb250YWluZXIoKSwgbV9lbmQub2Zmc2V0
KCkpOwotICAgIHJldHVybiAhZW5kQ29tcGFyZVJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBlbmRD
b21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDA7CisgICAgcmV0dXJuIFdlYkNv
cmU6OmlzUG9pbnRJblJhbmdlKG1ha2VTaW1wbGVSYW5nZSgqdGhpcyksIHsgY29udGFpbmVyLCBv
ZmZzZXQgfSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZVBvaW50KE5v
ZGUmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK0V4Y2VwdGlvbk9yPHNob3J0PiBS
YW5nZTo6Y29tcGFyZVBvaW50KE5vZGUmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0KSBjb25z
dAogewotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFu
Z2UuY29tcGFyZVBvaW50Ci0gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAtMSwgMCBvciAxIGRl
cGVuZGluZyBvbiBpZiB0aGUgcG9pbnQgZGVzY3JpYmVkIGJ5IHRoZSAKLSAgICAvLyByZWZOb2Rl
IG5vZGUgYW5kIGFuIG9mZnNldCB3aXRoaW4gdGhlIG5vZGUgaXMgYmVmb3JlLCBzYW1lIGFzLCBv
ciBhZnRlciB0aGUgcmFuZ2UgcmVzcGVjdGl2ZWx5LgotICAgIGlmICgmcmVmTm9kZS5kb2N1bWVu
dCgpICE9ICZvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9u
Z0RvY3VtZW50RXJyb3IgfTsKLQotICAgIGF1dG8gY2hlY2tOb2RlUmVzdWx0ID0gY2hlY2tOb2Rl
V09mZnNldChyZWZOb2RlLCBvZmZzZXQpOwotICAgIGlmIChjaGVja05vZGVSZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgLy8gRE9NNCBzcGVjIHJlcXVpcmVzIHVzIHRvIGNoZWNrIHdo
ZXRoZXIgcmVmTm9kZSBhbmQgc3RhcnQgY29udGFpbmVyIGhhdmUgdGhlIHNhbWUgcm9vdCBmaXJz
dAotICAgICAgICAvLyBidXQgd2UgZG8gaXQgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdG8gYXZvaWQg
TyhuKSBvcGVyYXRpb24gaGVyZSBpbiBjb21tb24gY2FzZS4KLSAgICAgICAgaWYgKCFyZWZOb2Rl
LmlzQ29ubmVjdGVkKCkgJiYgIWNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJlZk5vZGUsIHN0YXJ0
Q29udGFpbmVyKCkpKQorICAgIGlmIChhdXRvIGNoZWNrUmVzdWx0ID0gY2hlY2tOb2RlT2Zmc2V0
UGFpcihjb250YWluZXIsIG9mZnNldCk7IGNoZWNrUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Cisg
ICAgICAgIC8vIERPTSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIHRoaXMgY2hlY2sgYmUgZG9uZSBm
aXJzdCBidXQgc2luY2UgdGhlcmUgYXJlIG5vIHNpZGUgZWZmZWN0cywKKyAgICAgICAgLy8gd2Ug
Y2FuIGRvIGl0IGluIHJldmVyc2Ugb3JkZXIgdG8gYXZvaWQgYW4gZXh0cmEgcm9vdCBub2RlIGNo
ZWNrIGluIHRoZSBjb21tb24gY2FzZS4KKyAgICAgICAgaWYgKCZjb250YWluZXIucm9vdE5vZGUo
KSAhPSAmc3RhcnRDb250YWluZXIoKS5yb290Tm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9OwotICAgICAgICByZXR1cm4gY2hlY2tOb2Rl
UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGNoZWNrUmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKTsKICAgICB9Ci0KLSAgICAvLyBjb21wYXJlIHRvIHN0YXJ0LCBhbmQg
cG9pbnQgY29tZXMgYmVmb3JlCi0gICAgYXV0byBzdGFydENvbXBhcmVSZXN1bHQgPSBjb21wYXJl
Qm91bmRhcnlQb2ludHMoJnJlZk5vZGUsIG9mZnNldCwgJnN0YXJ0Q29udGFpbmVyKCksIG1fc3Rh
cnQub2Zmc2V0KCkpOwotICAgIGlmIChzdGFydENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBzdGFydENvbXBhcmVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwot
ICAgIGlmIChzdGFydENvbXBhcmVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwKQorICAg
IGF1dG8gb3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKHsgY29udGFpbmVyLCBvZmZzZXQgfSwgbWFr
ZVNpbXBsZVJhbmdlKCp0aGlzKSk7CisgICAgaWYgKGlzX2x0KG9yZGVyaW5nKSkKICAgICAgICAg
cmV0dXJuIC0xOwotCi0gICAgLy8gY29tcGFyZSB0byBlbmQsIGFuZCBwb2ludCBjb21lcyBhZnRl
cgotICAgIGF1dG8gZW5kQ29tcGFyZVJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVm
Tm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsKLSAgICBpZiAo
ZW5kQ29tcGFyZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGVuZENvbXBh
cmVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgIGlmIChlbmRDb21wYXJlUmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKKyAgICBpZiAoaXNfZXEob3JkZXJpbmcpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoaXNfZ3Qob3JkZXJpbmcpKQogICAgICAgICByZXR1cm4gMTsK
LQotICAgIC8vIHBvaW50IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhpcyByYW5nZSwgb3Igb24gdGhl
IGJvdW5kYXJ5IHBvaW50cwotICAgIHJldHVybiAwOworICAgIHJldHVybiBFeGNlcHRpb24geyBX
cm9uZ0RvY3VtZW50RXJyb3IgfTsKIH0KIAotRXhjZXB0aW9uT3I8UmFuZ2U6OkNvbXBhcmVSZXN1
bHRzPiBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3QKK0V4Y2VwdGlvbk9y
PFJhbmdlOjpDb21wYXJlUmVzdWx0cz4gUmFuZ2U6OmNvbXBhcmVOb2RlKE5vZGUmIG5vZGUpIGNv
bnN0CiB7CisgICAgLy8gRklYTUU6IFRoaXMgZGVwcmVjYXRlZCBmdW5jdGlvbiBzaG91bGQgYmUg
cmVtb3ZlZC4KKyAgICAvLyBXZSBvcmlnaW5hbGx5IGFkZGVkIGl0IGZvciBpbnRlcm9wZXJhYmls
aXR5IHdpdGggRmlyZWZveC4KKyAgICAvLyBSZWNlbnQgdmVyc2lvbnMgb2YgRmlyZWZveCBoYXZl
IHJlbW92ZWQgaXQuCisKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2Rv
Y3MvRE9NOnJhbmdlLmNvbXBhcmVOb2RlCiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAwLCAx
LCAyLCBvciAzIGJhc2VkIG9uIGlmIHRoZSBub2RlIGlzIGJlZm9yZSwgYWZ0ZXIsCi0gICAgLy8g
YmVmb3JlIGFuZCBhZnRlcihzdXJyb3VuZHMpLCBvciBpbnNpZGUgdGhlIHJhbmdlLCByZXNwZWN0
aXZlbHkKLQotICAgIGlmICghcmVmTm9kZS5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAgIC8vIEZp
cmVmb3ggZG9lc24ndCB0aHJvdyBhbiBleGNlcHRpb24gZm9yIHRoaXMgY2FzZTsgaXQgcmV0dXJu
cyAwLgotICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkU7Ci0gICAgfQorICAgIC8vIGJlZm9yZSBh
bmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5zaWRlIHRoZSByYW5nZSwgcmVzcGVjdGl2ZWx5Lgog
Ci0gICAgaWYgKCZyZWZOb2RlLmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgewotICAg
ICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNhc2U7
IGl0IHJldHVybnMgMC4KKyAgICBpZiAoIW5vZGUuaXNDb25uZWN0ZWQoKSB8fCAmbm9kZS5kb2N1
bWVudCgpICE9IG1fb3duZXJEb2N1bWVudC5wdHIoKSkgeworICAgICAgICAvLyBNYXRjaCBoaXN0
b3JpY2FsIEZpcmVmb3ggYmVoYXZpb3IuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAg
ICB9CiAKLSAgICBhdXRvKiBwYXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnROb2RlKCk7Ci0gICAg
aWYgKCFwYXJlbnROb2RlKSB7Ci0gICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHRoZSB0b3Agb2Yg
dGhlIHRyZWUgd2Ugc2hvdWxkIHJldHVybiBOT0RFX0JFRk9SRV9BTkRfQUZURVIsCi0gICAgICAg
IC8vIGJ1dCB3ZSB0aHJvdyB0byBtYXRjaCBmaXJlZm94IGJlaGF2aW9yLgorICAgIGF1dG8gbm9k
ZVJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShub2RlKTsKKyAgICBpZiAoIW5vZGVSYW5n
ZSkgeworICAgICAgICAvLyBNYXRjaCBoaXN0b3JpY2FsIEZpcmVmb3ggYmVoYXZpb3IuCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAgICAgfQotICAgIGF1dG8g
bm9kZUluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7Ci0KLSAgICBhdXRvIG5vZGVT
dGFydENvbXBhcmVSZXN1bHQgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCk7
Ci0gICAgaWYgKG5vZGVTdGFydENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBub2RlU3RhcnRDb21wYXJlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBh
dXRvIG5vZGVFbmRDb21wYXJlUmVzdWx0ID0gY29tcGFyZVBvaW50KCpwYXJlbnROb2RlLCBub2Rl
SW5kZXggKyAxKTsKLSAgICBpZiAobm9kZUVuZENvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBub2RlRW5kQ29tcGFyZVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7
Ci0KLSAgICBib29sIG5vZGVTdGFydHNCZWZvcmVSYW5nZSA9IG5vZGVTdGFydENvbXBhcmVSZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwOwotICAgIGJvb2wgbm9kZUVuZHNBZnRlclJhbmdl
ID0gbm9kZUVuZENvbXBhcmVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwOwotCi0gICAg
cmV0dXJuIG5vZGVTdGFydHNCZWZvcmVSYW5nZQotICAgICAgICA/IChub2RlRW5kc0FmdGVyUmFu
Z2UgPyBOT0RFX0JFRk9SRV9BTkRfQUZURVIgOiBOT0RFX0JFRk9SRSkKLSAgICAgICAgOiAobm9k
ZUVuZHNBZnRlclJhbmdlID8gTk9ERV9BRlRFUiA6IE5PREVfSU5TSURFKTsKLX0KLQotc3RhdGlj
IGlubGluZSBOb2RlKiB0b3AoTm9kZSYgbm9kZSkKLXsKLSAgICBhdXRvKiB0b3AgPSAmbm9kZTsK
LSAgICB3aGlsZSAoYXV0byogcGFyZW50ID0gdG9wLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIHRv
cCA9IHBhcmVudDsKLSAgICByZXR1cm4gdG9wOwotfQotCi1FeGNlcHRpb25PcjxzaG9ydD4gUmFu
Z2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93IGhvdywgY29uc3QgUmFuZ2UmIHNv
dXJjZVJhbmdlKSBjb25zdAotewotICAgIGF1dG8qIHRoaXNDb250YWluZXIgPSBjb21tb25BbmNl
c3RvckNvbnRhaW5lcigpOwotICAgIGF1dG8qIHNvdXJjZUNvbnRhaW5lciA9IHNvdXJjZVJhbmdl
LmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7Ci0gICAgaWYgKCF0aGlzQ29udGFpbmVyIHx8ICFz
b3VyY2VDb250YWluZXIgfHwgJnRoaXNDb250YWluZXItPmRvY3VtZW50KCkgIT0gJnNvdXJjZUNv
bnRhaW5lci0+ZG9jdW1lbnQoKSB8fCB0b3AoKnRoaXNDb250YWluZXIpICE9IHRvcCgqc291cmNl
Q29udGFpbmVyKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJv
ciB9OwotCi0gICAgc3dpdGNoIChob3cpIHsKLSAgICBjYXNlIFNUQVJUX1RPX1NUQVJUOgotICAg
ICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQsIHNvdXJjZVJhbmdlLm1f
c3RhcnQpOwotICAgIGNhc2UgU1RBUlRfVE9fRU5EOgotICAgICAgICByZXR1cm4gY29tcGFyZUJv
dW5kYXJ5UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS5tX3N0YXJ0KTsKLSAgICBjYXNlIEVORF9U
T19FTkQ6Ci0gICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9lbmQsIHNvdXJj
ZVJhbmdlLm1fZW5kKTsKLSAgICBjYXNlIEVORF9UT19TVEFSVDoKLSAgICAgICAgcmV0dXJuIGNv
bXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS5tX2VuZCk7Ci0gICAgfQog
Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CisgICAgYXV0byBzdGFydE9y
ZGVyaW5nID0gZG9jdW1lbnRPcmRlcihub2RlUmFuZ2UtPnN0YXJ0LCBtYWtlQm91bmRhcnlQb2lu
dChtX3N0YXJ0KSk7CisgICAgYXV0byBlbmRPcmRlcmluZyA9IGRvY3VtZW50T3JkZXIobm9kZVJh
bmdlLT5lbmQsIG1ha2VCb3VuZGFyeVBvaW50KG1fZW5kKSk7CisgICAgaWYgKGlzX2d0ZXEoc3Rh
cnRPcmRlcmluZykgJiYgaXNfbHRlcShlbmRPcmRlcmluZykpCisgICAgICAgIHJldHVybiBOT0RF
X0lOU0lERTsKKyAgICBpZiAoaXNfbHRlcShzdGFydE9yZGVyaW5nKSAmJiBpc19ndGVxKGVuZE9y
ZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFX0FORF9BRlRFUjsKKyAgICBpZiAo
aXNfbHRlcShzdGFydE9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOworICAg
IGlmIChpc19ndGVxKGVuZE9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuIE5PREVfQUZURVI7Cisg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9OwogfQogCi1FeGNlcHRp
b25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKHVuc2ln
bmVkIHNob3J0IGhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlKSBjb25zdAorRXhjZXB0aW9u
T3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHModW5zaWduZWQgc2hvcnQgaG93
LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UpIGNvbnN0CiB7CisgICAgY29uc3QgUmFuZ2VCb3Vu
ZGFyeVBvaW50KiB0aGlzUG9pbnQ7CisgICAgY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50KiBvdGhl
clBvaW50OwogICAgIHN3aXRjaCAoaG93KSB7CiAgICAgY2FzZSBTVEFSVF9UT19TVEFSVDoKKyAg
ICAgICAgdGhpc1BvaW50ID0gJm1fc3RhcnQ7CisgICAgICAgIG90aGVyUG9pbnQgPSAmc291cmNl
UmFuZ2UubV9zdGFydDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTVEFSVF9UT19FTkQ6Cisg
ICAgICAgIHRoaXNQb2ludCA9ICZtX2VuZDsKKyAgICAgICAgb3RoZXJQb2ludCA9ICZzb3VyY2VS
YW5nZS5tX3N0YXJ0OworICAgICAgICBicmVhazsKICAgICBjYXNlIEVORF9UT19FTkQ6CisgICAg
ICAgIHRoaXNQb2ludCA9ICZtX2VuZDsKKyAgICAgICAgb3RoZXJQb2ludCA9ICZzb3VyY2VSYW5n
ZS5tX2VuZDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFTkRfVE9fU1RBUlQ6Ci0gICAgICAg
IHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMoc3RhdGljX2Nhc3Q8Q29tcGFyZUhvdz4oaG93
KSwgc291cmNlUmFuZ2UpOworICAgICAgICB0aGlzUG9pbnQgPSAmbV9zdGFydDsKKyAgICAgICAg
b3RoZXJQb2ludCA9ICZzb3VyY2VSYW5nZS5tX2VuZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAg
ICAgfQotICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwotfQotCi1F
eGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhOb2RlKiBjb250
YWluZXJBLCB1bnNpZ25lZCBvZmZzZXRBLCBOb2RlKiBjb250YWluZXJCLCB1bnNpZ25lZCBvZmZz
ZXRCKQotewotICAgIEFTU0VSVChjb250YWluZXJBKTsKLSAgICBBU1NFUlQoY29udGFpbmVyQik7
Ci0KLSAgICBpZiAoIWNvbnRhaW5lckEpCisgICAgYXV0byBvcmRlcmluZyA9IGRvY3VtZW50T3Jk
ZXIobWFrZUJvdW5kYXJ5UG9pbnQoKnRoaXNQb2ludCksIG1ha2VCb3VuZGFyeVBvaW50KCpvdGhl
clBvaW50KSk7CisgICAgaWYgKGlzX2x0KG9yZGVyaW5nKSkKICAgICAgICAgcmV0dXJuIC0xOwot
ICAgIGlmICghY29udGFpbmVyQikKKyAgICBpZiAoaXNfZXEob3JkZXJpbmcpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAoaXNfZ3Qob3JkZXJpbmcpKQogICAgICAgICByZXR1cm4gMTsKLQot
ICAgIC8vIHNlZSBET00yIHRyYXZlcnNhbCAmIHJhbmdlIHNlY3Rpb24gMi41Ci0KLSAgICAvLyBj
YXNlIDE6IGJvdGggcG9pbnRzIGhhdmUgdGhlIHNhbWUgY29udGFpbmVyCi0gICAgaWYgKGNvbnRh
aW5lckEgPT0gY29udGFpbmVyQikgewotICAgICAgICBpZiAob2Zmc2V0QSA9PSBvZmZzZXRCKQot
ICAgICAgICAgICAgcmV0dXJuIDA7IC8vIEEgaXMgZXF1YWwgdG8gQgotICAgICAgICBpZiAob2Zm
c2V0QSA8IG9mZnNldEIpCi0gICAgICAgICAgICByZXR1cm4gLTE7IC8vIEEgaXMgYmVmb3JlIEIK
LSAgICAgICAgcmV0dXJuIDE7IC8vIEEgaXMgYWZ0ZXIgQgotICAgIH0KLQotICAgIC8vIGNhc2Ug
Mjogbm9kZSBDIChjb250YWluZXIgQiBvciBhbiBhbmNlc3RvcikgaXMgYSBjaGlsZCBub2RlIG9m
IEEKLSAgICBOb2RlKiBjID0gY29udGFpbmVyQjsKLSAgICB3aGlsZSAoYyAmJiBjLT5wYXJlbnRO
b2RlKCkgIT0gY29udGFpbmVyQSkKLSAgICAgICAgYyA9IGMtPnBhcmVudE5vZGUoKTsKLSAgICBp
ZiAoYykgewotICAgICAgICB1bnNpZ25lZCBvZmZzZXRDID0gMDsKLSAgICAgICAgTm9kZSogbiA9
IGNvbnRhaW5lckEtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgd2hpbGUgKG4gIT0gYyAmJiBvZmZz
ZXRDIDwgb2Zmc2V0QSkgewotICAgICAgICAgICAgb2Zmc2V0QysrOwotICAgICAgICAgICAgbiA9
IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldEEgPD0gb2Zm
c2V0QykKLSAgICAgICAgICAgIHJldHVybiAtMTsgLy8gQSBpcyBiZWZvcmUgQgotICAgICAgICBy
ZXR1cm4gMTsgLy8gQSBpcyBhZnRlciBCCi0gICAgfQotCi0gICAgLy8gY2FzZSAzOiBub2RlIEMg
KGNvbnRhaW5lciBBIG9yIGFuIGFuY2VzdG9yKSBpcyBhIGNoaWxkIG5vZGUgb2YgQgotICAgIGMg
PSBjb250YWluZXJBOwotICAgIHdoaWxlIChjICYmIGMtPnBhcmVudE5vZGUoKSAhPSBjb250YWlu
ZXJCKQotICAgICAgICBjID0gYy0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChjKSB7Ci0gICAgICAg
IHVuc2lnbmVkIG9mZnNldEMgPSAwOwotICAgICAgICBOb2RlKiBuID0gY29udGFpbmVyQi0+Zmly
c3RDaGlsZCgpOwotICAgICAgICB3aGlsZSAobiAhPSBjICYmIG9mZnNldEMgPCBvZmZzZXRCKSB7
Ci0gICAgICAgICAgICBvZmZzZXRDKys7Ci0gICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmco
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0QyA8IG9mZnNldEIpCi0gICAgICAgICAg
ICByZXR1cm4gLTE7IC8vIEEgaXMgYmVmb3JlIEIKLSAgICAgICAgcmV0dXJuIDE7IC8vIEEgaXMg
YWZ0ZXIgQgotICAgIH0KLQotICAgIC8vIGNhc2UgNDogY29udGFpbmVycyBBICYgQiBhcmUgc2li
bGluZ3MsIG9yIGNoaWxkcmVuIG9mIHNpYmxpbmdzCi0gICAgLy8gIyMjIHdlIG5lZWQgdG8gZG8g
YSB0cmF2ZXJzYWwgaGVyZSBpbnN0ZWFkCi0gICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yKCpjb250YWluZXJBLCAqY29udGFpbmVyQik7Ci0gICAgaWYgKCFj
b21tb25BbmNlc3RvcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRF
cnJvciB9OwotICAgIE5vZGUqIGNoaWxkQSA9IGNvbnRhaW5lckE7Ci0gICAgd2hpbGUgKGNoaWxk
QSAmJiBjaGlsZEEtPnBhcmVudE5vZGUoKSAhPSBjb21tb25BbmNlc3RvcikKLSAgICAgICAgY2hp
bGRBID0gY2hpbGRBLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFjaGlsZEEpCi0gICAgICAgIGNo
aWxkQSA9IGNvbW1vbkFuY2VzdG9yLmdldCgpOwotICAgIE5vZGUqIGNoaWxkQiA9IGNvbnRhaW5l
ckI7Ci0gICAgd2hpbGUgKGNoaWxkQiAmJiBjaGlsZEItPnBhcmVudE5vZGUoKSAhPSBjb21tb25B
bmNlc3RvcikKLSAgICAgICAgY2hpbGRCID0gY2hpbGRCLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYg
KCFjaGlsZEIpCi0gICAgICAgIGNoaWxkQiA9IGNvbW1vbkFuY2VzdG9yLmdldCgpOwotCi0gICAg
aWYgKGNoaWxkQSA9PSBjaGlsZEIpCi0gICAgICAgIHJldHVybiAwOyAvLyBBIGlzIGVxdWFsIHRv
IEIKLQotICAgIE5vZGUqIG4gPSBjb21tb25BbmNlc3Rvci0+Zmlyc3RDaGlsZCgpOwotICAgIHdo
aWxlIChuKSB7Ci0gICAgICAgIGlmIChuID09IGNoaWxkQSkKLSAgICAgICAgICAgIHJldHVybiAt
MTsgLy8gQSBpcyBiZWZvcmUgQgotICAgICAgICBpZiAobiA9PSBjaGlsZEIpCi0gICAgICAgICAg
ICByZXR1cm4gMTsgLy8gQSBpcyBhZnRlciBCCi0gICAgICAgIG4gPSBuLT5uZXh0U2libGluZygp
OwotICAgIH0KLQotICAgIC8vIFNob3VsZCBuZXZlciByZWFjaCB0aGlzIHBvaW50LgotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1FeGNlcHRpb25PcjxzaG9y
dD4gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQm
IGJvdW5kYXJ5QSwgY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeUIpCi17Ci0gICAg
cmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhib3VuZGFyeUEuY29udGFpbmVyKCksIGJvdW5k
YXJ5QS5vZmZzZXQoKSwgYm91bmRhcnlCLmNvbnRhaW5lcigpLCBib3VuZGFyeUIub2Zmc2V0KCkp
OwotfQotCi1ib29sIFJhbmdlOjpib3VuZGFyeVBvaW50c1ZhbGlkKCkgY29uc3QKLXsKLSAgICBh
dXRvIHJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBtX2VuZCk7Ci0gICAg
cmV0dXJuICFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpIDw9IDA7CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9Owog
fQogCiBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6ZGVsZXRlQ29udGVudHMoKQpAQCAtNDA5LDI2
ICsyNDgsOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6ZGVsZXRlQ29udGVudHMoKQogICAg
IHJldHVybiB7IH07CiB9CiAKLUV4Y2VwdGlvbk9yPGJvb2w+IFJhbmdlOjppbnRlcnNlY3RzTm9k
ZShOb2RlJiByZWZOb2RlKSBjb25zdAorYm9vbCBSYW5nZTo6aW50ZXJzZWN0c05vZGUoTm9kZSYg
bm9kZSkgY29uc3QKIHsKLSAgICBpZiAoIXJlZk5vZGUuaXNDb25uZWN0ZWQoKSB8fCAmcmVmTm9k
ZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8qIHBhcmVudE5vZGUgPSByZWZOb2RlLnBhcmVudE5vZGUoKTsKLSAgICBpZiAo
IXBhcmVudE5vZGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgdW5zaWduZWQgbm9kZUlu
ZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7Ci0KLSAgICAvLyBJZiAocGFyZW50Tm9k
ZSwgbm9kZUluZGV4KSBpcyBiZWZvcmUgZW5kIGFuZCAocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsg
MSkgaXMgYWZ0ZXIgc3RhcnQsIHJldHVybiB0cnVlLgotICAgIC8vIE90aGVyd2lzZSwgcmV0dXJu
IGZhbHNlLgotICAgIGF1dG8gY29tcGFyZUVuZFJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50
cyhwYXJlbnROb2RlLCBub2RlSW5kZXgsIG1fZW5kLmNvbnRhaW5lcigpLCBtX2VuZC5vZmZzZXQo
KSk7Ci0gICAgaWYgKGNvbXBhcmVFbmRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBjb21wYXJlRW5kUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICBhdXRvIGNvbXBh
cmVTdGFydFJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5k
ZXggKyAxLCBtX3N0YXJ0LmNvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpKTsKLSAgICBpZiAo
Y29tcGFyZVN0YXJ0UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gY29tcGFy
ZVN0YXJ0UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gY29tcGFyZUVuZFJl
c3VsdC5yZXR1cm5WYWx1ZSgpID09IC0xICYmIGNvbXBhcmVTdGFydFJlc3VsdC5yZXR1cm5WYWx1
ZSgpID09IDE7CisgICAgcmV0dXJuIGludGVyc2VjdHMobWFrZVNpbXBsZVJhbmdlKCp0aGlzKSwg
bm9kZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgTm9kZSogaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21t
b25Sb290KE5vZGUqIG5vZGUsIE5vZGUqIGNvbW1vblJvb3QpCkBAIC00NjQsMzIgKzI4NiwxMSBA
QCBzdGF0aWMgaW5saW5lIE5vZGUqIGNoaWxkT2ZDb21tb25Sb290QmVmb3JlT2Zmc2V0KE5vZGUq
IGNvbnRhaW5lciwgdW5zaWduZWQgb2ZmcwogICAgIHJldHVybiBjb250YWluZXI7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgbGVuZ3RoT2ZDb250ZW50c0luTm9kZShOb2RlJiBub2RlKQot
ewotICAgIC8vIFRoaXMgc3dpdGNoIHN0YXRlbWVudCBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0
aGF0IG9mIFJhbmdlOjpwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cy4KLSAgICBzd2l0Y2gg
KG5vZGUubm9kZVR5cGUoKSkgewotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgot
ICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNh
c2UgTm9kZTo6VEVYVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgot
ICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19J
TlNUUlVDVElPTl9OT0RFOgotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4o
bm9kZSkubGVuZ3RoKCk7Ci0gICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6Ci0gICAgY2FzZSBO
b2RlOjpET0NVTUVOVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9E
RToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KG5vZGUpLmNvdW50Q2hp
bGROb2RlcygpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQogRXhjZXB0aW9uT3I8UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6cHJv
Y2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUgYWN0aW9uKQogewogICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudDsKICAgICBpZiAoYWN0aW9uID09IEV4dHJhY3QgfHwgYWN0aW9uID09
IENsb25lKQotICAgICAgICBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShvd25l
ckRvY3VtZW50KCkpOworICAgICAgICBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0
ZShtX293bmVyRG9jdW1lbnQpOwogCiAgICAgaWYgKGNvbGxhcHNlZCgpKQogICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7CkBAIC01MDksOCArMzEwLDggQEAgRXhjZXB0aW9uT3I8UmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+PiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUgYWN0aW9uKQog
ICAgIFJhbmdlQm91bmRhcnlQb2ludCBvcmlnaW5hbEVuZChtX2VuZCk7CiAKICAgICAvLyB3aGF0
IGlzIHRoZSBoaWdoZXN0IG5vZGUgdGhhdCBwYXJ0aWFsbHkgc2VsZWN0cyB0aGUgc3RhcnQgLyBl
bmQgb2YgdGhlIHJhbmdlPwotICAgIFJlZlB0cjxOb2RlPiBwYXJ0aWFsU3RhcnQgPSBoaWdoZXN0
QW5jZXN0b3JVbmRlckNvbW1vblJvb3Qob3JpZ2luYWxTdGFydC5jb250YWluZXIoKSwgY29tbW9u
Um9vdC5nZXQoKSk7Ci0gICAgUmVmUHRyPE5vZGU+IHBhcnRpYWxFbmQgPSBoaWdoZXN0QW5jZXN0
b3JVbmRlckNvbW1vblJvb3Qob3JpZ2luYWxFbmQuY29udGFpbmVyKCksIGNvbW1vblJvb3QuZ2V0
KCkpOworICAgIFJlZlB0cjxOb2RlPiBwYXJ0aWFsU3RhcnQgPSBoaWdoZXN0QW5jZXN0b3JVbmRl
ckNvbW1vblJvb3QoJm9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCksIGNvbW1vblJvb3QuZ2V0KCkp
OworICAgIFJlZlB0cjxOb2RlPiBwYXJ0aWFsRW5kID0gaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21t
b25Sb290KCZvcmlnaW5hbEVuZC5jb250YWluZXIoKSwgY29tbW9uUm9vdC5nZXQoKSk7CiAKICAg
ICAvLyBTdGFydCBhbmQgZW5kIGNvbnRhaW5lcnMgYXJlIGRpZmZlcmVudC4KICAgICAvLyBUaGVy
ZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllcyBoZXJlOgpAQCAtNTMzLDI4ICszMzQsMjggQEAgRXhj
ZXB0aW9uT3I8UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRz
KEFjdGlvblR5cGUgYWN0aW9uKQogICAgIC8vIGFmdGVyIGFueSBET00gbXV0YXRpb24gZXZlbnQs
IGF0IHZhcmlvdXMgc3RhZ2VzIGJlbG93LiBTZWUgd2Via2l0IGJ1ZyA2MDM1MC4KIAogICAgIFJl
ZlB0cjxOb2RlPiBsZWZ0Q29udGVudHM7Ci0gICAgaWYgKG9yaWdpbmFsU3RhcnQuY29udGFpbmVy
KCkgIT0gY29tbW9uUm9vdCAmJiBjb21tb25Sb290LT5jb250YWlucyhvcmlnaW5hbFN0YXJ0LmNv
bnRhaW5lcigpKSkgewotICAgICAgICBhdXRvIGZpcnN0UmVzdWx0ID0gcHJvY2Vzc0NvbnRlbnRz
QmV0d2Vlbk9mZnNldHMoYWN0aW9uLCBudWxscHRyLCBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigp
LCBvcmlnaW5hbFN0YXJ0Lm9mZnNldCgpLCBsZW5ndGhPZkNvbnRlbnRzSW5Ob2RlKCpvcmlnaW5h
bFN0YXJ0LmNvbnRhaW5lcigpKSk7Ci0gICAgICAgIGF1dG8gc2Vjb25kUmVzdWx0ID0gcHJvY2Vz
c0FuY2VzdG9yc0FuZFRoZWlyU2libGluZ3MoYWN0aW9uLCBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5l
cigpLCBQcm9jZXNzQ29udGVudHNGb3J3YXJkLCBXVEZNb3ZlKGZpcnN0UmVzdWx0KSwgY29tbW9u
Um9vdC5nZXQoKSk7CisgICAgaWYgKCZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpICE9IGNvbW1v
blJvb3QgJiYgY29tbW9uUm9vdC0+Y29udGFpbnMoJm9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCkp
KSB7CisgICAgICAgIGF1dG8gZmlyc3RSZXN1bHQgPSBwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zm
c2V0cyhhY3Rpb24sIG51bGxwdHIsICZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpLCBvcmlnaW5h
bFN0YXJ0Lm9mZnNldCgpLCBvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpLmxlbmd0aCgpKTsKKyAg
ICAgICAgYXV0byBzZWNvbmRSZXN1bHQgPSBwcm9jZXNzQW5jZXN0b3JzQW5kVGhlaXJTaWJsaW5n
cyhhY3Rpb24sICZvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigpLCBQcm9jZXNzQ29udGVudHNGb3J3
YXJkLCBXVEZNb3ZlKGZpcnN0UmVzdWx0KSwgY29tbW9uUm9vdC5nZXQoKSk7CiAgICAgICAgIC8v
IEZJWE1FOiBBIGJpdCBwZWN1bGlhciB0aGF0IHdlIHNpbGVudGx5IGlnbm9yZSB0aGUgZXhjZXB0
aW9uIGhlcmUsIGJ1dCB3ZSBkbyBoYXZlIGF0IGxlYXN0IHNvbWUgcmVncmVzc2lvbiB0ZXN0cyB0
aGF0IHJlbHkgb24gdGhpcyBiZWhhdmlvci4KICAgICAgICAgaWYgKCFzZWNvbmRSZXN1bHQuaGFz
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBsZWZ0Q29udGVudHMgPSBzZWNvbmRSZXN1bHQucmVs
ZWFzZVJldHVyblZhbHVlKCk7CiAgICAgfQogCiAgICAgUmVmUHRyPE5vZGU+IHJpZ2h0Q29udGVu
dHM7Ci0gICAgaWYgKCZlbmRDb250YWluZXIoKSAhPSBjb21tb25Sb290ICYmIGNvbW1vblJvb3Qt
PmNvbnRhaW5zKG9yaWdpbmFsRW5kLmNvbnRhaW5lcigpKSkgewotICAgICAgICBhdXRvIGZpcnN0
UmVzdWx0ID0gcHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMoYWN0aW9uLCBudWxscHRyLCBv
cmlnaW5hbEVuZC5jb250YWluZXIoKSwgMCwgb3JpZ2luYWxFbmQub2Zmc2V0KCkpOwotICAgICAg
ICBhdXRvIHNlY29uZFJlc3VsdCA9IHByb2Nlc3NBbmNlc3RvcnNBbmRUaGVpclNpYmxpbmdzKGFj
dGlvbiwgb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIFByb2Nlc3NDb250ZW50c0JhY2t3YXJkLCBX
VEZNb3ZlKGZpcnN0UmVzdWx0KSwgY29tbW9uUm9vdC5nZXQoKSk7CisgICAgaWYgKCZlbmRDb250
YWluZXIoKSAhPSBjb21tb25Sb290ICYmIGNvbW1vblJvb3QtPmNvbnRhaW5zKCZvcmlnaW5hbEVu
ZC5jb250YWluZXIoKSkpIHsKKyAgICAgICAgYXV0byBmaXJzdFJlc3VsdCA9IHByb2Nlc3NDb250
ZW50c0JldHdlZW5PZmZzZXRzKGFjdGlvbiwgbnVsbHB0ciwgJm9yaWdpbmFsRW5kLmNvbnRhaW5l
cigpLCAwLCBvcmlnaW5hbEVuZC5vZmZzZXQoKSk7CisgICAgICAgIGF1dG8gc2Vjb25kUmVzdWx0
ID0gcHJvY2Vzc0FuY2VzdG9yc0FuZFRoZWlyU2libGluZ3MoYWN0aW9uLCAmb3JpZ2luYWxFbmQu
Y29udGFpbmVyKCksIFByb2Nlc3NDb250ZW50c0JhY2t3YXJkLCBXVEZNb3ZlKGZpcnN0UmVzdWx0
KSwgY29tbW9uUm9vdC5nZXQoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBBIGJpdCBwZWN1bGlhciB0
aGF0IHdlIHNpbGVudGx5IGlnbm9yZSB0aGUgZXhjZXB0aW9uIGhlcmUsIGJ1dCB3ZSBkbyBoYXZl
IGF0IGxlYXN0IHNvbWUgcmVncmVzc2lvbiB0ZXN0cyB0aGF0IHJlbHkgb24gdGhpcyBiZWhhdmlv
ci4KICAgICAgICAgaWYgKCFzZWNvbmRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICByaWdodENvbnRlbnRzID0gc2Vjb25kUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAg
IH0KIAogICAgIC8vIGRlbGV0ZSBhbGwgY2hpbGRyZW4gb2YgY29tbW9uUm9vdCBiZXR3ZWVuIHRo
ZSBzdGFydCBhbmQgZW5kIGNvbnRhaW5lcgotICAgIFJlZlB0cjxOb2RlPiBwcm9jZXNzU3RhcnQg
PSBjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldChvcmlnaW5hbFN0YXJ0LmNvbnRhaW5lcigp
LCBvcmlnaW5hbFN0YXJ0Lm9mZnNldCgpLCBjb21tb25Sb290LmdldCgpKTsKLSAgICBpZiAocHJv
Y2Vzc1N0YXJ0ICYmIG9yaWdpbmFsU3RhcnQuY29udGFpbmVyKCkgIT0gY29tbW9uUm9vdCkgLy8g
cHJvY2Vzc1N0YXJ0IGNvbnRhaW5zIG5vZGVzIGJlZm9yZSBtX3N0YXJ0LgorICAgIFJlZlB0cjxO
b2RlPiBwcm9jZXNzU3RhcnQgPSBjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldCgmb3JpZ2lu
YWxTdGFydC5jb250YWluZXIoKSwgb3JpZ2luYWxTdGFydC5vZmZzZXQoKSwgY29tbW9uUm9vdC5n
ZXQoKSk7CisgICAgaWYgKHByb2Nlc3NTdGFydCAmJiAmb3JpZ2luYWxTdGFydC5jb250YWluZXIo
KSAhPSBjb21tb25Sb290KSAvLyBwcm9jZXNzU3RhcnQgY29udGFpbnMgbm9kZXMgYmVmb3JlIG1f
c3RhcnQuCiAgICAgICAgIHByb2Nlc3NTdGFydCA9IHByb2Nlc3NTdGFydC0+bmV4dFNpYmxpbmco
KTsKLSAgICBSZWZQdHI8Tm9kZT4gcHJvY2Vzc0VuZCA9IGNoaWxkT2ZDb21tb25Sb290QmVmb3Jl
T2Zmc2V0KG9yaWdpbmFsRW5kLmNvbnRhaW5lcigpLCBvcmlnaW5hbEVuZC5vZmZzZXQoKSwgY29t
bW9uUm9vdC5nZXQoKSk7CisgICAgUmVmUHRyPE5vZGU+IHByb2Nlc3NFbmQgPSBjaGlsZE9mQ29t
bW9uUm9vdEJlZm9yZU9mZnNldCgmb3JpZ2luYWxFbmQuY29udGFpbmVyKCksIG9yaWdpbmFsRW5k
Lm9mZnNldCgpLCBjb21tb25Sb290LmdldCgpKTsKIAogICAgIC8vIENvbGxhcHNlIHRoZSByYW5n
ZSwgbWFraW5nIHN1cmUgdGhhdCB0aGUgcmVzdWx0IGlzIG5vdCB3aXRoaW4gYSBub2RlIHRoYXQg
d2FzIHBhcnRpYWxseSBzZWxlY3RlZC4KICAgICBpZiAoYWN0aW9uID09IEV4dHJhY3QgfHwgYWN0
aW9uID09IERlbGV0ZSkgewpAQCAtNjE5LDcgKzQyMCw2IEBAIHN0YXRpYyBFeGNlcHRpb25PcjxS
ZWZQdHI8Tm9kZT4+IHByb2Nlc3NDb250ZW50c0JldHdlZW5PZmZzZXRzKFJhbmdlOjpBY3Rpb25U
eXBlCiAKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0OwogCi0gICAgLy8gVGhpcyBzd2l0Y2ggc3Rh
dGVtZW50IG11c3QgYmUgY29uc2lzdGVudCB3aXRoIHRoYXQgb2YgbGVuZ3RoT2ZDb250ZW50c0lu
Tm9kZS4KICAgICBzd2l0Y2ggKGNvbnRhaW5lci0+bm9kZVR5cGUoKSkgewogICAgIGNhc2UgTm9k
ZTo6VEVYVF9OT0RFOgogICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgpAQCAtODY4
LDMwICs2NjgsMTcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6Omluc2VydE5vZGUoUmVmPE5v
ZGU+JiYgbm9kZSkKIAogU3RyaW5nIFJhbmdlOjp0b1N0cmluZygpIGNvbnN0CiB7CisgICAgYXV0
byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqdGhpcyk7CiAgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOwotCi0gICAgTm9kZSogcGFzdExhc3QgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdDsgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIGF1dG8gdHlwZSA9IG5vZGUtPm5vZGVUeXBl
KCk7Ci0gICAgICAgIGlmICh0eXBlID09IE5vZGU6OlRFWFRfTk9ERSB8fCB0eXBlID09IE5vZGU6
OkNEQVRBX1NFQ1RJT05fTk9ERSkgewotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBub2Rl
ID09ICZzdGFydENvbnRhaW5lcigpID8gbV9zdGFydC5vZmZzZXQoKSA6IDBVOwotICAgICAgICAg
ICAgdW5zaWduZWQgZW5kID0gbm9kZSA9PSAmZW5kQ29udGFpbmVyKCkgPyBzdGQ6Om1heChzdGFy
dCwgbV9lbmQub2Zmc2V0KCkpIDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTdWJzdHJpbmcoZG93bmNhc3Q8Q2hhcmFjdGVy
RGF0YT4oKm5vZGUpLmRhdGEoKSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgICBmb3IgKGF1dG8m
IG5vZGUgOiBpbnRlcnNlY3RpbmdOb2RlcyhyYW5nZSkpIHsKKyAgICAgICAgaWYgKGlzPFRleHQ+
KG5vZGUpKSB7CisgICAgICAgICAgICBhdXRvIG9mZnNldFJhbmdlID0gY2hhcmFjdGVyRGF0YU9m
ZnNldFJhbmdlKHJhbmdlLCBub2RlKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3Vic3Ry
aW5nKGRvd25jYXN0PFRleHQ+KG5vZGUpLmRhdGEoKSwgb2Zmc2V0UmFuZ2Uuc3RhcnQsIG9mZnNl
dFJhbmdlLmVuZCAtIG9mZnNldFJhbmdlLnN0YXJ0KTsKICAgICAgICAgfQogICAgIH0KLQogICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBSYW5nZTo6dGV4dCgpIGNv
bnN0Ci17Ci0gICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgbGF5b3V0LCBzaW5jZSBwbGFpblRleHQg
dXNlcyBsaW5lIGJveGVzIGluIHRoZSByZW5kZXIgdHJlZS4KLSAgICAvLyBGSVhNRTogQXMgd2l0
aCBpbm5lclRleHQsIHdlJ2QgbGlrZSB0aGlzIHRvIHdvcmsgZXZlbiBpZiB0aGVyZSBhcmUgbm8g
cmVuZGVyIG9iamVjdHMuCi0gICAgc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLnVwZGF0ZUxh
eW91dCgpOwotCi0gICAgcmV0dXJuIHBsYWluVGV4dChtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpKTsK
LX0KLQogLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyN3aWRsLVJhbmdlLWNy
ZWF0ZUNvbnRleHR1YWxGcmFnbWVudC1Eb2N1bWVudEZyYWdtZW50LURPTVN0cmluZy1mcmFnbWVu
dAogRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6Y3JlYXRlQ29udGV4
dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwKQogewpAQCAtOTA4LDEyICs2OTUsNyBA
QCBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVudD4+IFJhbmdlOjpjcmVhdGVDb250ZXh0
dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBXZWJDb3JlOjpjcmVhdGVDb250
ZXh0dWFsRnJhZ21lbnQoKmVsZW1lbnQsIG1hcmt1cCwgQWxsb3dTY3JpcHRpbmdDb250ZW50QW5k
RG9Ob3RNYXJrQWxyZWFkeVN0YXJ0ZWQpOwogfQogCi12b2lkIFJhbmdlOjpkZXRhY2goKQotewot
ICAgIC8vIFRoaXMgaXMgbm93IGEgbm8tb3AgYXMgcGVyIHRoZSBET00gc3BlY2lmaWNhdGlvbi4K
LX0KLQotRXhjZXB0aW9uT3I8Tm9kZSo+IFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUmIG5v
ZGUsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK0V4Y2VwdGlvbk9yPE5vZGUqPiBSYW5nZTo6Y2hl
Y2tOb2RlT2Zmc2V0UGFpcihOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7CiAg
ICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKCkpIHsKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVO
VF9UWVBFX05PREU6CkBAIC05NDMsNTkgKzcyNSw1NSBAQCBFeGNlcHRpb25PcjxOb2RlKj4gUmFu
Z2U6OmNoZWNrTm9kZVdPZmZzZXQoTm9kZSYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdAog
CiBSZWY8UmFuZ2U+IFJhbmdlOjpjbG9uZVJhbmdlKCkgY29uc3QKIHsKLSAgICBhdXRvIHJlc3Vs
dCA9IGNyZWF0ZShvd25lckRvY3VtZW50KCkpOworICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlKG1f
b3duZXJEb2N1bWVudCk7CiAgICAgcmVzdWx0LT5zZXRTdGFydChzdGFydENvbnRhaW5lcigpLCBt
X3N0YXJ0Lm9mZnNldCgpKTsKICAgICByZXN1bHQtPnNldEVuZChlbmRDb250YWluZXIoKSwgbV9l
bmQub2Zmc2V0KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+
IFJhbmdlOjpzZXRTdGFydEFmdGVyKE5vZGUmIHJlZk5vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBS
YW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlJiBub2RlKQogewotICAgIGlmICghcmVmTm9kZS5wYXJl
bnROb2RlKCkpCisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAo
IXBhcmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9y
IH07Ci0gICAgcmV0dXJuIHNldFN0YXJ0KCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5j
b21wdXRlTm9kZUluZGV4KCkgKyAxKTsKKyAgICByZXR1cm4gc2V0U3RhcnQoKnBhcmVudCwgbm9k
ZS5jb21wdXRlTm9kZUluZGV4KCkgKyAxKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6
OnNldEVuZEJlZm9yZShOb2RlJiByZWZOb2RlKQorRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNl
dEVuZEJlZm9yZShOb2RlJiBub2RlKQogewotICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkp
CisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07Ci0gICAg
cmV0dXJuIHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJ
bmRleCgpKTsKKyAgICByZXR1cm4gc2V0RW5kKCpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRl
eCgpKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldEVuZEFmdGVyKE5vZGUmIHJl
Zk5vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0RW5kQWZ0ZXIoTm9kZSYgbm9kZSkK
IHsKLSAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKQorICAgIGF1dG8gcGFyZW50ID0gbm9k
ZS5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwotICAgIHJldHVybiBzZXRFbmQoKnJlZk5vZGUu
cGFyZW50Tm9kZSgpLCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSArIDEpOworICAgIHJldHVy
biBzZXRFbmQoKnBhcmVudCwgbm9kZS5jb21wdXRlTm9kZUluZGV4KCkgKyAxKTsKIH0KIAotRXhj
ZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNlbGVjdE5vZGUoTm9kZSYgcmVmTm9kZSkKK0V4Y2VwdGlv
bk9yPHZvaWQ+IFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFyZWZO
b2RlLnBhcmVudE5vZGUoKSkKKyAgICBhdXRvIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpOwor
ICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVU
eXBlRXJyb3IgfTsKLQotICAgIGlmICgmb3duZXJEb2N1bWVudCgpICE9ICZyZWZOb2RlLmRvY3Vt
ZW50KCkpCi0gICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUuZG9jdW1lbnQoKSk7Ci0KLSAgICB1
bnNpZ25lZCBpbmRleCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwotICAgIGF1dG8gcmVz
dWx0ID0gc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCBpbmRleCk7CisgICAgdW5zaWdu
ZWQgaW5kZXggPSBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICBhdXRvIHJlc3VsdCA9IHNl
dFN0YXJ0KCpwYXJlbnQsIGluZGV4KTsKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gc2V0
RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgaW5kZXggKyAxKTsKKyAgICByZXR1cm4gc2V0RW5k
KCpwYXJlbnQsIGluZGV4ICsgMSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZWxl
Y3ROb2RlQ29udGVudHMoTm9kZSYgcmVmTm9kZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpz
ZWxlY3ROb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAocmVmTm9kZS5pc0RvY3Vt
ZW50VHlwZU5vZGUoKSkKKyAgICBpZiAobm9kZS5pc0RvY3VtZW50VHlwZU5vZGUoKSkKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07CiAKLSAgICBpZiAo
Jm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1bWVudCgpKQotICAgICAgICBzZXREb2N1
bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwotCi0gICAgbV9zdGFydC5zZXRUb1N0YXJ0T2ZOb2Rl
KHJlZk5vZGUpOwotICAgIG1fZW5kLnNldFRvRW5kT2ZOb2RlKHJlZk5vZGUpOwotCisgICAgbV9z
dGFydC5zZXRUb0JlZm9yZUNvbnRlbnRzKG5vZGUpOworICAgIG1fZW5kLnNldFRvQWZ0ZXJDb250
ZW50cyhub2RlKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xMDUyLDMxICs4MzAsMTIgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnN1cnJvdW5kQ29udGVudHMoTm9kZSYgbmV3UGFyZW50
KQogICAgIHJldHVybiBzZWxlY3ROb2RlKG5ld1BhcmVudCk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZv
aWQ+IFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlJiByZWZOb2RlKQorRXhjZXB0aW9uT3I8dm9p
ZD4gUmFuZ2U6OnNldFN0YXJ0QmVmb3JlKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFyZWZOb2Rl
LnBhcmVudE5vZGUoKSkKKyAgICBhdXRvIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpOworICAg
IGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBl
RXJyb3IgfTsKLSAgICByZXR1cm4gc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCByZWZO
b2RlLmNvbXB1dGVOb2RlSW5kZXgoKSk7Ci19Ci0KLU5vZGUqIFJhbmdlOjpmaXJzdE5vZGUoKSBj
b25zdAotewotICAgIGlmIChzdGFydENvbnRhaW5lcigpLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkK
LSAgICAgICAgcmV0dXJuICZzdGFydENvbnRhaW5lcigpOwotICAgIGlmIChOb2RlKiBjaGlsZCA9
IHN0YXJ0Q29udGFpbmVyKCkudHJhdmVyc2VUb0NoaWxkQXQobV9zdGFydC5vZmZzZXQoKSkpCi0g
ICAgICAgIHJldHVybiBjaGlsZDsKLSAgICBpZiAoIW1fc3RhcnQub2Zmc2V0KCkpCi0gICAgICAg
IHJldHVybiAmc3RhcnRDb250YWluZXIoKTsKLSAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4oc3RhcnRDb250YWluZXIoKSk7Ci19Ci0KLU5vZGUqIFJhbmdlOjpw
YXN0TGFzdE5vZGUoKSBjb25zdAotewotICAgIGlmIChlbmRDb250YWluZXIoKS5pc0NoYXJhY3Rl
ckRhdGFOb2RlKCkpCi0gICAgICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbihlbmRDb250YWluZXIoKSk7Ci0gICAgaWYgKE5vZGUqIGNoaWxkID0gZW5kQ29udGFp
bmVyKCkudHJhdmVyc2VUb0NoaWxkQXQobV9lbmQub2Zmc2V0KCkpKQotICAgICAgICByZXR1cm4g
Y2hpbGQ7Ci0gICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKGVu
ZENvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gc2V0U3RhcnQoKnBhcmVudCwgbm9kZS5jb21wdXRl
Tm9kZUluZGV4KCkpOwogfQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpAQCAtMTEwMSwx
MjQgKzg2MCw0NCBAQCB2b2lkIFJhbmdlOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIs
IHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIH0KICNlbmRpZgogCi1ib29sIFJhbmdlOjpjb250YWlu
cyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKGNvbW1vbkFuY2VzdG9yQ29u
dGFpbmVyKCktPmRvY3VtZW50KCkgIT0gb3RoZXIuY29tbW9uQW5jZXN0b3JDb250YWluZXIoKS0+
ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBzdGFydFRvU3Rh
cnQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBvdGhlcik7
Ci0gICAgaWYgKHN0YXJ0VG9TdGFydC5oYXNFeGNlcHRpb24oKSB8fCBzdGFydFRvU3RhcnQucmVs
ZWFzZVJldHVyblZhbHVlKCkgPiAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
IGVuZFRvRW5kID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBvdGhl
cik7Ci0gICAgcmV0dXJuICFlbmRUb0VuZC5oYXNFeGNlcHRpb24oKSAmJiBlbmRUb0VuZC5yZWxl
YXNlUmV0dXJuVmFsdWUoKSA+PSAwOwotfQotCi1ib29sIFJhbmdlOjpjb250YWlucyhjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAotewotICAgIGF1dG8gcG9zaXRpb25SYW5n
ZSA9IG1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbik7Ci0gICAgaWYgKCFwb3NpdGlvblJhbmdlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5n
ZSgqcG9zaXRpb25SYW5nZSkpOwotfQotCi1ib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdl
KiBhLCBjb25zdCBSYW5nZSogYikKLXsKLSAgICBpZiAoYSA9PSBiKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gJmEtPnN0YXJ0Q29udGFpbmVyKCkgPT0gJmItPnN0YXJ0Q29udGFpbmVyKCkgJiYgYS0+c3Rh
cnRPZmZzZXQoKSA9PSBiLT5zdGFydE9mZnNldCgpICYmICZhLT5lbmRDb250YWluZXIoKSA9PSAm
Yi0+ZW5kQ29udGFpbmVyKCkgJiYgYS0+ZW5kT2Zmc2V0KCkgPT0gYi0+ZW5kT2Zmc2V0KCk7Ci19
Ci0KLWJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSogYSwgY29uc3QgUmFuZ2UqIGIpCi17
Ci0gICAgaWYgKCFhIHx8ICFiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYSA9
PSBiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghY29ubmVjdGVkSW5TYW1lVHJl
ZVNjb3BlKGEtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCksIGItPmNvbW1vbkFuY2VzdG9yQ29u
dGFpbmVyKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzaG9ydCBzdGFydFRvU3Rh
cnQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCAqYiku
cmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgc2hvcnQgZW5kVG9FbmQgPSBhLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsICpiKS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsK
LQotICAgIC8vIEZpcnN0IHJhbmdlIGNvbnRhaW5zIHRoZSBzZWNvbmQgcmFuZ2UuCi0gICAgaWYg
KHN0YXJ0VG9TdGFydCA8PSAwICYmIGVuZFRvRW5kID49IDApCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgLy8gRW5kIG9mIGZpcnN0IHJhbmdlIGlzIGluc2lkZSBzZWNvbmQgcmFuZ2UuCi0g
ICAgaWYgKGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqYiku
cmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMCAmJiBlbmRUb0VuZCA8PSAwKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIC8vIFN0YXJ0IG9mIGZpcnN0IHJhbmdlIGlzIGluc2lkZSBzZWNvbmQg
cmFuZ2UuCi0gICAgaWYgKHN0YXJ0VG9TdGFydCA+PSAwICYmIGEtPmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqYikucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBp
bmxpbmUgdm9pZCBib3VuZGFyeU5vZGVDaGlsZHJlbkNoYW5nZWQoUmFuZ2VCb3VuZGFyeVBvaW50
JiBib3VuZGFyeSwgQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQogewotICAgIGlmICghYm91bmRh
cnkuY2hpbGRCZWZvcmUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChib3VuZGFyeS5jb250
YWluZXIoKSAhPSAmY29udGFpbmVyKQotICAgICAgICByZXR1cm47Ci0gICAgYm91bmRhcnkuaW52
YWxpZGF0ZU9mZnNldCgpOworICAgIGlmIChib3VuZGFyeS5jaGlsZEJlZm9yZSgpICYmICZib3Vu
ZGFyeS5jb250YWluZXIoKSA9PSAmY29udGFpbmVyKQorICAgICAgICBib3VuZGFyeS5pbnZhbGlk
YXRlT2Zmc2V0KCk7CiB9CiAKIHZvaWQgUmFuZ2U6Om5vZGVDaGlsZHJlbkNoYW5nZWQoQ29udGFp
bmVyTm9kZSYgY29udGFpbmVyKQogewotICAgIEFTU0VSVCgmY29udGFpbmVyLmRvY3VtZW50KCkg
PT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZjb250YWluZXIuZG9jdW1lbnQoKSA9
PSBtX293bmVyRG9jdW1lbnQucHRyKCkpOwogICAgIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuQ2hhbmdl
ZChtX3N0YXJ0LCBjb250YWluZXIpOwogICAgIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuQ2hhbmdlZCht
X2VuZCwgY29udGFpbmVyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5Tm9kZUNo
aWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBDb250YWlu
ZXJOb2RlJiBjb250YWluZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlOb2RlQ2hpbGRy
ZW5XaWxsQmVSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIENvbnRhaW5lck5v
ZGUmIGNvbnRhaW5lck9mTm9kZXNUb0JlUmVtb3ZlZCkKIHsKLSAgICBmb3IgKE5vZGUqIG5vZGVU
b0JlUmVtb3ZlZCA9IGNvbnRhaW5lci5maXJzdENoaWxkKCk7IG5vZGVUb0JlUmVtb3ZlZDsgbm9k
ZVRvQmVSZW1vdmVkID0gbm9kZVRvQmVSZW1vdmVkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAg
IGlmIChib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09IG5vZGVUb0JlUmVtb3ZlZCkgewotICAgICAg
ICAgICAgYm91bmRhcnkuc2V0VG9TdGFydE9mTm9kZShjb250YWluZXIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChOb2RlKiBuID0gYm91bmRhcnkuY29u
dGFpbmVyKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChuID09
IG5vZGVUb0JlUmVtb3ZlZCkgewotICAgICAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRP
Zk5vZGUoY29udGFpbmVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGNvbnRhaW5lck9mTm9kZXNUb0JlUmVtb3ZlZC5j
b250YWlucygmYm91bmRhcnkuY29udGFpbmVyKCkpKQorICAgICAgICBib3VuZGFyeS5zZXRUb0Jl
Zm9yZUNvbnRlbnRzKGNvbnRhaW5lck9mTm9kZXNUb0JlUmVtb3ZlZCk7CiB9CiAKIHZvaWQgUmFu
Z2U6Om5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQog
ewotICAgIEFTU0VSVCgmY29udGFpbmVyLmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7
CisgICAgQVNTRVJUKCZjb250YWluZXIuZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQucHRy
KCkpOwogICAgIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChtX3N0YXJ0LCBjb250
YWluZXIpOwogICAgIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChtX2VuZCwgY29u
dGFpbmVyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92
ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYgbm9kZVRvQmVSZW1vdmVkKQog
ewotICAgIGlmIChib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09ICZub2RlVG9CZVJlbW92ZWQpIHsK
KyAgICBpZiAoYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSAmbm9kZVRvQmVSZW1vdmVkKQogICAg
ICAgICBib3VuZGFyeS5jaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGZvciAoTm9kZSogbiA9IGJvdW5kYXJ5LmNvbnRhaW5lcigpOyBuOyBu
ID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuID09ICZub2RlVG9CZVJlbW92ZWQp
IHsKLSAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvQmVmb3JlQ2hpbGQobm9kZVRvQmVSZW1vdmVk
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBlbHNlIGlmIChu
b2RlVG9CZVJlbW92ZWQuY29udGFpbnMoJmJvdW5kYXJ5LmNvbnRhaW5lcigpKSkKKyAgICAgICAg
Ym91bmRhcnkuc2V0VG9CZWZvcmVOb2RlKG5vZGVUb0JlUmVtb3ZlZCk7CiB9CiAKIHZvaWQgUmFu
Z2U6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiB7Ci0gICAgQVNTRVJUKCZub2RlLmRv
Y3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7Ci0gICAgQVNTRVJUKCZub2RlICE9ICZvd25l
ckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmbm9kZS5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1
bWVudC5wdHIoKSk7CisgICAgQVNTRVJUKCZub2RlICE9IG1fb3duZXJEb2N1bWVudC5wdHIoKSk7
CiAgICAgQVNTRVJUKG5vZGUucGFyZW50Tm9kZSgpKTsKICAgICBib3VuZGFyeU5vZGVXaWxsQmVS
ZW1vdmVkKG1fc3RhcnQsIG5vZGUpOwogICAgIGJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQobV9l
bmQsIG5vZGUpOwpAQCAtMTIyNiw3ICs5MDUsNyBAQCB2b2lkIFJhbmdlOjpub2RlV2lsbEJlUmVt
b3ZlZChOb2RlJiBub2RlKQogCiBib29sIFJhbmdlOjpwYXJlbnRsZXNzTm9kZU1vdmVkVG9OZXdE
b2N1bWVudEFmZmVjdHNSYW5nZShOb2RlJiBub2RlKQogewotICAgIHJldHVybiBub2RlLmNvbnRh
aW5zSW5jbHVkaW5nU2hhZG93RE9NKG1fc3RhcnQuY29udGFpbmVyKCkpOworICAgIHJldHVybiBu
b2RlLmNvbnRhaW5zSW5jbHVkaW5nU2hhZG93RE9NKCZtX3N0YXJ0LmNvbnRhaW5lcigpKTsKIH0K
IAogdm9pZCBSYW5nZTo6dXBkYXRlUmFuZ2VGb3JQYXJlbnRsZXNzTm9kZU1vdmVkVG9OZXdEb2N1
bWVudChOb2RlJiBub2RlKQpAQCAtMTIzOCw3ICs5MTcsNyBAQCB2b2lkIFJhbmdlOjp1cGRhdGVS
YW5nZUZvclBhcmVudGxlc3NOb2RlTW92ZWRUb05ld0RvY3VtZW50KE5vZGUmIG5vZGUpCiAKIHN0
YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRJbnNlcnRlZChSYW5nZUJvdW5kYXJ5UG9pbnQm
IGJvdW5kYXJ5LCBOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJnRleHQpCisgICAgaWYgKCZib3Vu
ZGFyeS5jb250YWluZXIoKSAhPSAmdGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVk
IGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnkub2Zmc2V0KCk7CiAgICAgaWYgKG9mZnNldCA+PSBi
b3VuZGFyeU9mZnNldCkKQEAgLTEyNDgsMTQgKzkyNywxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
Ym91bmRhcnlUZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYg
dGV4dAogCiB2b2lkIFJhbmdlOjp0ZXh0SW5zZXJ0ZWQoTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0g
Jm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0gbV9vd25l
ckRvY3VtZW50LnB0cigpKTsKICAgICBib3VuZGFyeVRleHRJbnNlcnRlZChtX3N0YXJ0LCB0ZXh0
LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgYm91bmRhcnlUZXh0SW5zZXJ0ZWQobV9lbmQsIHRleHQs
IG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dFJl
bW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYgdGV4dCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigp
ICE9ICZ0ZXh0KQorICAgIGlmICgmYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJnRleHQpCiAgICAg
ICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNl
dCgpOwogICAgIGlmIChvZmZzZXQgPj0gYm91bmRhcnlPZmZzZXQpCkBAIC0xMjY4LDIzICs5NDcs
MjMgQEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dFJlbW92ZWQoUmFuZ2VCb3VuZGFy
eVBvaW50JiBib3VuZGFyeSwgTm9kZSYgdGV4dCwKIAogdm9pZCBSYW5nZTo6dGV4dFJlbW92ZWQo
Tm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQVNT
RVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZ0
ZXh0LmRvY3VtZW50KCkgPT0gbV9vd25lckRvY3VtZW50LnB0cigpKTsKICAgICBib3VuZGFyeVRl
eHRSZW1vdmVkKG1fc3RhcnQsIHRleHQsIG9mZnNldCwgbGVuZ3RoKTsKICAgICBib3VuZGFyeVRl
eHRSZW1vdmVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc01lcmdlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5k
YXJ5LCBOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgaWYg
KGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUubm9kZSgpKQorICAgIGlmICgmYm91bmRh
cnkuY29udGFpbmVyKCkgPT0gb2xkTm9kZS5ub2RlKCkpCiAgICAgICAgIGJvdW5kYXJ5LnNldCgq
b2xkTm9kZS5ub2RlKCktPnByZXZpb3VzU2libGluZygpLCBib3VuZGFyeS5vZmZzZXQoKSArIG9m
ZnNldCwgMCk7Ci0gICAgZWxzZSBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gb2xkTm9kZS5u
b2RlKCktPnBhcmVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5kYXJ5Lm9mZnNldCgp
KSA9PSBvbGROb2RlLmluZGV4KCkpCisgICAgZWxzZSBpZiAoJmJvdW5kYXJ5LmNvbnRhaW5lcigp
ID09IG9sZE5vZGUubm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgYm91bmRhcnkub2Zmc2V0KCkgPT0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9sZE5vZGUuaW5kZXgoKSkpCiAgICAgICAgIGJvdW5kYXJ5
LnNldCgqb2xkTm9kZS5ub2RlKCktPnByZXZpb3VzU2libGluZygpLCBvZmZzZXQsIDApOwogfQog
CiB2b2lkIFJhbmdlOjp0ZXh0Tm9kZXNNZXJnZWQoTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5z
aWduZWQgb2Zmc2V0KQogewogICAgIEFTU0VSVChvbGROb2RlLm5vZGUoKSk7Ci0gICAgQVNTRVJU
KCZvbGROb2RlLm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKKyAgICBB
U1NFUlQoJm9sZE5vZGUubm9kZSgpLT5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1bWVudC5wdHIo
KSk7CiAgICAgQVNTRVJUKG9sZE5vZGUubm9kZSgpLT5wYXJlbnROb2RlKCkpOwogICAgIEFTU0VS
VChvbGROb2RlLm5vZGUoKS0+aXNUZXh0Tm9kZSgpKTsKICAgICBBU1NFUlQob2xkTm9kZS5ub2Rl
KCktPnByZXZpb3VzU2libGluZygpKTsKQEAgLTEyOTYsNyArOTc1LDcgQEAgdm9pZCBSYW5nZTo6
dGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkK
IHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1NwbGl0KFJhbmdlQm91bmRhcnlQ
b2ludCYgYm91bmRhcnksIFRleHQmIG9sZE5vZGUpCiB7CiAgICAgYXV0byogcGFyZW50ID0gb2xk
Tm9kZS5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09ICZvbGRO
b2RlKSB7CisgICAgaWYgKCZib3VuZGFyeS5jb250YWluZXIoKSA9PSAmb2xkTm9kZSkgewogICAg
ICAgICB1bnNpZ25lZCBzcGxpdE9mZnNldCA9IG9sZE5vZGUubGVuZ3RoKCk7CiAgICAgICAgIHVu
c2lnbmVkIGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnkub2Zmc2V0KCk7CiAgICAgICAgIGlmIChi
b3VuZGFyeU9mZnNldCA+IHNwbGl0T2Zmc2V0KSB7CkBAIC0xMzA5LDE2ICs5ODgsMTYgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQoUmFuZ2VCb3VuZGFyeVBvaW50
JiBib3VuZGFyeSwgVGV4dCYgb2wKICAgICB9CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gcGFyZW50ICYmIGJvdW5kYXJ5
LmNoaWxkQmVmb3JlKCkgPT0gJm9sZE5vZGUpIHsKKyAgICBpZiAoJmJvdW5kYXJ5LmNvbnRhaW5l
cigpID09IHBhcmVudCAmJiBib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09ICZvbGROb2RlKSB7CiAg
ICAgICAgIGF1dG8qIG5ld0NoaWxkID0gb2xkTm9kZS5uZXh0U2libGluZygpOwogICAgICAgICBB
U1NFUlQobmV3Q2hpbGQpOwotICAgICAgICBib3VuZGFyeS5zZXRUb0FmdGVyQ2hpbGQoKm5ld0No
aWxkKTsKKyAgICAgICAgYm91bmRhcnkuc2V0VG9BZnRlck5vZGUoKm5ld0NoaWxkKTsKICAgICB9
CiB9CiAKIHZvaWQgUmFuZ2U6OnRleHROb2RlU3BsaXQoVGV4dCYgb2xkTm9kZSkKIHsKLSAgICBB
U1NFUlQoJm9sZE5vZGUuZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKKyAgICBBU1NF
UlQoJm9sZE5vZGUuZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQucHRyKCkpOwogICAgIEFT
U0VSVCghb2xkTm9kZS5wYXJlbnROb2RlKCkgfHwgb2xkTm9kZS5uZXh0U2libGluZygpKTsKICAg
ICBBU1NFUlQoIW9sZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5vZGUubmV4dFNpYmxpbmcoKS0+
aXNUZXh0Tm9kZSgpKTsKICAgICBib3VuZGFyeVRleHROb2Rlc1NwbGl0KG1fc3RhcnQsIG9sZE5v
ZGUpOwpAQCAtMTQxMyw3ICsxMDkyLDcgQEAgUmVmUHRyPFJhbmdlPiBjcmVhdGVMaXZlUmFuZ2Uo
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIAogdm9pZCBzaG93VHJlZShjb25z
dCBXZWJDb3JlOjpSYW5nZSogcmFuZ2UpCiB7Ci0gICAgaWYgKHJhbmdlICYmIHJhbmdlLT5ib3Vu
ZGFyeVBvaW50c1ZhbGlkKCkpIHsKKyAgICBpZiAocmFuZ2UpIHsKICAgICAgICAgcmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCkuc2hvd1RyZWVBbmRNYXJrKCZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwg
IlMiLCAmcmFuZ2UtPmVuZENvbnRhaW5lcigpLCAiRSIpOwogICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgInN0YXJ0IG9mZnNldDogJWQsIGVuZCBvZmZzZXQ6ICVkXG4iLCByYW5nZS0+c3RhcnRPZmZz
ZXQoKSwgcmFuZ2UtPmVuZE9mZnNldCgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IDRkMWNk
NGYxMzY3NDZjYmY0NDJmZDY4OWQ2OTE4YzNjNWZkOGU5MDQuLjFlYzVhZWQ0YzUwMDBmN2Y1Yzkz
NDE3NWI3ZTkyM2NjYmIwODQ0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0zMyw2MSArMzMsNjAgQEAg
Y2xhc3MgRE9NUmVjdExpc3Q7CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgTm9kZVdp
dGhJbmRleDsKIGNsYXNzIFRleHQ7Ci1jbGFzcyBWaXNpYmxlUG9zaXRpb247CiAKIHN0cnVjdCBT
aW1wbGVSYW5nZTsKIAotLy8gRklYTUU6IFJlbmFtZSB0byBMaXZlUmFuZ2UsIHdoaWxlIGxlYXZp
bmcgdGhlIERPTS1leHBvc2VkIG5hbWUgYXMgUmFuZ2UuCiBjbGFzcyBSYW5nZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFJhbmdlPiB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZjxSYW5nZT4gY3JlYXRlKERvY3VtZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgflJhbmdlKCk7
CiAKLSAgICBEb2N1bWVudCYgb3duZXJEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJE
b2N1bWVudDsgfQotCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIoKSBjb25zdCB7IEFTU0VSVCht
X3N0YXJ0LmNvbnRhaW5lcigpKTsgcmV0dXJuICptX3N0YXJ0LmNvbnRhaW5lcigpOyB9CisgICAg
Tm9kZSYgc3RhcnRDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LmNvbnRhaW5lcigp
OyB9CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Lm9m
ZnNldCgpOyB9Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyKCkgY29uc3QgeyBBU1NFUlQobV9lbmQu
Y29udGFpbmVyKCkpOyByZXR1cm4gKm1fZW5kLmNvbnRhaW5lcigpOyB9CisgICAgTm9kZSYgZW5k
Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV9lbmQuY29udGFpbmVyKCk7IH0KICAgICB1bnNp
Z25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZC5vZmZzZXQoKTsgfQogICAgIGJv
b2wgY29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydCA9PSBtX2VuZDsgfQotCiAgICAg
Tm9kZSogY29tbW9uQW5jZXN0b3JDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBjb21tb25JbmNs
dXNpdmVBbmNlc3RvcihzdGFydENvbnRhaW5lcigpLCBlbmRDb250YWluZXIoKSkuZ2V0KCk7IH0K
LSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdGFydChSZWY8Tm9kZT4m
JiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8dm9pZD4gc2V0RW5kKFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0
KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0KFJlZjxO
b2RlPiYmLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9y
PHZvaWQ+IHNldEVuZChSZWY8Tm9kZT4mJiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdGFydEJlZm9yZShOb2RlJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnRBZnRlcihOb2RlJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RW5kQmVmb3JlKE5vZGUmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRFbmRBZnRlcihOb2RlJik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xsYXBzZShib29sIHRvU3RhcnQpOwotICAgIFdFQkNP
UkVfRVhQT1JUIEV4Y2VwdGlvbk9yPGJvb2w+IGlzUG9pbnRJblJhbmdlKE5vZGUmIHJlZk5vZGUs
IHVuc2lnbmVkIG9mZnNldCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8c2hvcnQ+
IGNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwotICAg
IGVudW0gQ29tcGFyZVJlc3VsdHMgeyBOT0RFX0JFRk9SRSwgTk9ERV9BRlRFUiwgTk9ERV9CRUZP
UkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lERSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlv
bk9yPENvbXBhcmVSZXN1bHRzPiBjb21wYXJlTm9kZShOb2RlJiByZWZOb2RlKSBjb25zdDsKLSAg
ICBlbnVtIENvbXBhcmVIb3cgeyBTVEFSVF9UT19TVEFSVCwgU1RBUlRfVE9fRU5ELCBFTkRfVE9f
RU5ELCBFTkRfVE9fU1RBUlQgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxzaG9y
dD4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKENvbXBhcmVIb3csIGNvbnN0IFJhbmdlJiBzb3VyY2VS
YW5nZSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8c2hvcnQ+IGNvbXBh
cmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKHVuc2lnbmVkIHNob3J0IGNvbXBhcmVIb3csIGNv
bnN0IFJhbmdlJiBzb3VyY2VSYW5nZSkgY29uc3Q7Ci0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPHNo
b3J0PiBjb21wYXJlQm91bmRhcnlQb2ludHMoTm9kZSogY29udGFpbmVyQSwgdW5zaWduZWQgb2Zm
c2V0QSwgTm9kZSogY29udGFpbmVyQiwgdW5zaWduZWQgb2Zmc2V0Qik7Ci0gICAgc3RhdGljIEV4
Y2VwdGlvbk9yPHNob3J0PiBjb21wYXJlQm91bmRhcnlQb2ludHMoY29uc3QgUmFuZ2VCb3VuZGFy
eVBvaW50JiBib3VuZGFyeUEsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlCKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGJvdW5kYXJ5UG9pbnRzVmFsaWQoKSBjb25zdDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjxib29sPiBpbnRlcnNlY3RzTm9kZShOb2RlJiBy
ZWZOb2RlKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZWxl
Y3ROb2RlKE5vZGUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZWxl
Y3ROb2RlQ29udGVudHMoTm9kZSYpOworCisgICAgZW51bSBDb21wYXJlSG93IDogdW5zaWduZWQg
c2hvcnQgeyBTVEFSVF9UT19TVEFSVCwgU1RBUlRfVE9fRU5ELCBFTkRfVE9fRU5ELCBFTkRfVE9f
U1RBUlQgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxzaG9ydD4gY29tcGFyZUJv
dW5kYXJ5UG9pbnRzKHVuc2lnbmVkIHNob3J0IGNvbXBhcmVIb3csIGNvbnN0IFJhbmdlJiBzb3Vy
Y2VSYW5nZSkgY29uc3Q7CisKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBk
ZWxldGVDb250ZW50cygpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxEb2N1
bWVudEZyYWdtZW50Pj4gZXh0cmFjdENvbnRlbnRzKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhj
ZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBjbG9uZUNvbnRlbnRzKCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gaW5zZXJ0Tm9kZShSZWY8Tm9kZT4mJik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc3Vycm91bmRDb250ZW50cyhOb2RlJik7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBTdHJpbmcgdGV4dCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZjxSYW5nZT4gY2xvbmVSYW5nZSgpIGNvbnN0OworICAgIHN0YXRpYyB2b2lkIGRldGFjaCgpIHsg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+
PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiBodG1sKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBFeGNlcHRpb25Pcjxib29sPiBpc1BvaW50SW5SYW5nZShOb2RlJiwgdW5zaWdu
ZWQgb2Zmc2V0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxzaG9ydD4gY29tcGFy
ZVBvaW50KE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgaW50ZXJzZWN0c05vZGUoTm9kZSYpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkZXRhY2goKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IGNsb25lUmFuZ2Uo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0QWZ0ZXIoTm9kZSYp
OwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZEJlZm9yZShOb2Rl
Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RW5kQWZ0ZXIoTm9k
ZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNlbGVjdE5vZGUoTm9k
ZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNlbGVjdE5vZGVDb250
ZW50cyhOb2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc3Vycm91
bmRDb250ZW50cyhOb2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4g
c2V0U3RhcnRCZWZvcmUoTm9kZSYpOworICAgIFJlZjxET01SZWN0TGlzdD4gZ2V0Q2xpZW50UmVj
dHMoKSBjb25zdDsKKyAgICBSZWY8RE9NUmVjdD4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgY29u
c3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVu
dD4+IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIGZyYWdtZW50KTsKKwor
ICAgIC8vIEV4cGFuZCByYW5nZSB0byBhIHVuaXQgKHdvcmQgb3Igc2VudGVuY2Ugb3IgYmxvY2sg
b3IgZG9jdW1lbnQpIGJvdW5kYXJ5LgorICAgIC8vIFBsZWFzZSByZWZlciB0byBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzIgY29tbWVudCAjNSBmb3IgZGV0YWls
cy4KKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBleHBhbmQoY29uc3QgU3Ry
aW5nJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBOb2RlKiBmaXJzdE5vZGUoKSBjb25zdDsKKyAg
ICBlbnVtIENvbXBhcmVSZXN1bHRzIDogdWludDhfdCB7IE5PREVfQkVGT1JFLCBOT0RFX0FGVEVS
LCBOT0RFX0JFRk9SRV9BTkRfQUZURVIsIE5PREVfSU5TSURFIH07CisgICAgV0VCQ09SRV9FWFBP
UlQgRXhjZXB0aW9uT3I8Q29tcGFyZVJlc3VsdHM+IGNvbXBhcmVOb2RlKE5vZGUmKSBjb25zdDsK
IAogICAgIHZvaWQgbm9kZUNoaWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2RlJik7CiAgICAgdm9p
ZCBub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5lck5vZGUmKTsKQEAgLTEwMCw0MCAr
OTksMjQgQEAgcHVibGljOgogICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5kZXgm
IG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7CiAgICAgdm9pZCB0ZXh0Tm9kZVNwbGl0KFRleHQm
IG9sZE5vZGUpOwogCi0gICAgLy8gRXhwYW5kIHJhbmdlIHRvIGEgdW5pdCAod29yZCBvciBzZW50
ZW5jZSBvciBibG9jayBvciBkb2N1bWVudCkgYm91bmRhcnkuCi0gICAgLy8gUGxlYXNlIHJlZmVy
IHRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzYzMiBjb21tZW50
ICM1IAotICAgIC8vIGZvciBkZXRhaWxzLgotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9y
PHZvaWQ+IGV4cGFuZChjb25zdCBTdHJpbmcmKTsKLQotICAgIFJlZjxET01SZWN0TGlzdD4gZ2V0
Q2xpZW50UmVjdHMoKSBjb25zdDsKLSAgICBSZWY8RE9NUmVjdD4gZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCkgY29uc3Q7Ci0KICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCiAgICAgdm9pZCBmb3Jt
YXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAjZW5k
aWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnMoY29uc3QgUmFuZ2UmKSBjb25z
dDsKLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0OwotCi0g
ICAgZW51bSBBY3Rpb25UeXBlIHsgRGVsZXRlLCBFeHRyYWN0LCBDbG9uZSB9OworICAgIGVudW0g
QWN0aW9uVHlwZSA6IHVpbnQ4X3QgeyBEZWxldGUsIEV4dHJhY3QsIENsb25lIH07CiAKIHByaXZh
dGU6CiAgICAgZXhwbGljaXQgUmFuZ2UoRG9jdW1lbnQmKTsKIAotICAgIHZvaWQgc2V0RG9jdW1l
bnQoRG9jdW1lbnQmKTsKLSAgICBFeGNlcHRpb25PcjxOb2RlKj4gY2hlY2tOb2RlV09mZnNldChO
b2RlJiwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZURvY3VtZW50KCk7
CisgICAgRXhjZXB0aW9uT3I8Tm9kZSo+IGNoZWNrTm9kZU9mZnNldFBhaXIoTm9kZSYsIHVuc2ln
bmVkIG9mZnNldCkgY29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8UmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+PiBwcm9jZXNzQ29udGVudHMoQWN0aW9uVHlwZSk7CiAKLSAgICBOb2RlKiBwYXN0TGFzdE5v
ZGUoKSBjb25zdDsKLQogICAgIFJlZjxEb2N1bWVudD4gbV9vd25lckRvY3VtZW50OwogICAgIFJh
bmdlQm91bmRhcnlQb2ludCBtX3N0YXJ0OwogICAgIFJhbmdlQm91bmRhcnlQb2ludCBtX2VuZDsK
IH07CiAKLVdFQkNPUkVfRVhQT1JUIGJvb2wgYXJlUmFuZ2VzRXF1YWwoY29uc3QgUmFuZ2UqLCBj
b25zdCBSYW5nZSopOwotV0VCQ09SRV9FWFBPUlQgYm9vbCByYW5nZXNPdmVybGFwKGNvbnN0IFJh
bmdlKiwgY29uc3QgUmFuZ2UqKTsKLQogV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgbWFrZVNp
bXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBtYWtl
U2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5p
ZGwKaW5kZXggMTU0ZTg5YzY2ZTU3YTJlYmE4MzQwNjY2MWI2YTUzYzMzYTI0OTBiYS4uYTA1YzE0
MzZjNThiODMwMjBlMjYwOTk5N2IzNjZhNjE0ZjgwNjdiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCkBA
IC0yNSw5ICsyNSw5IEBACiAgICAgW0NhbGxXaXRoPURvY3VtZW50XSBjb25zdHJ1Y3RvcigpOwog
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgc3RhcnRDb250YWluZXI7Ci0gICAgcmVhZG9u
bHkgYXR0cmlidXRlIGxvbmcgc3RhcnRPZmZzZXQ7IC8vIEZJWE1FOiBTaG91bGQgYmUgdW5zaWdu
ZWQgbG9uZy4KKyAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzdGFydE9mZnNl
dDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgTm9kZSBlbmRDb250YWluZXI7Ci0gICAgcmVhZG9u
bHkgYXR0cmlidXRlIGxvbmcgZW5kT2Zmc2V0OyAvLyBGSVhNRTogU2hvdWxkIGJlIHVuc2lnbmVk
IGxvbmcuCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgZW5kT2Zmc2V0Owog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGNvbGxhcHNlZDsKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgTm9kZSBjb21tb25BbmNlc3RvckNvbnRhaW5lcjsKIApAQCAtNDUsNyArNDUsNyBA
QAogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNUQVJUX1RPX0VORCA9IDE7CiAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgRU5EX1RPX0VORCA9IDI7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
RU5EX1RPX1NUQVJUID0gMzsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb24sIEltcGxlbWVudGVkQXM9
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3NdIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBv
aW50cyh1bnNpZ25lZCBzaG9ydCBob3csIFJhbmdlIHNvdXJjZVJhbmdlKTsKKyAgICBbTWF5VGhy
b3dFeGNlcHRpb25dIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBvaW50cyh1bnNpZ25lZCBzaG9ydCBo
b3csIFJhbmdlIHNvdXJjZVJhbmdlKTsKIAogICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNl
cHRpb25dIHZvaWQgZGVsZXRlQ29udGVudHMoKTsKICAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93
RXhjZXB0aW9uLCBOZXdPYmplY3RdIERvY3VtZW50RnJhZ21lbnQgZXh0cmFjdENvbnRlbnRzKCk7
CkBAIC01OSw3ICs1OSw3IEBACiAgICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFuIGlzUG9p
bnRJblJhbmdlKE5vZGUgbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwogICAgIFtNYXlUaHJv
d0V4Y2VwdGlvbl0gc2hvcnQgY29tcGFyZVBvaW50KE5vZGUgbm9kZSwgdW5zaWduZWQgbG9uZyBv
ZmZzZXQpOwogCi0gICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFuIGludGVyc2VjdHNOb2Rl
KE5vZGUgbm9kZSk7CisgICAgYm9vbGVhbiBpbnRlcnNlY3RzTm9kZShOb2RlIG5vZGUpOwogCiAg
ICAgc3RyaW5naWZpZXI7CiAKQEAgLTcwLDEwICs3MCwxMSBAQAogICAgIC8vIEV4dGVuc2lvbnMg
ZnJvbSBET01QYXJzaW5nIGFuZCBTZXJpYWxpemF0aW9uIHNwZWNpZmljYXRpb24gKGh0dHBzOi8v
dzNjLmdpdGh1Yi5pby9ET00tUGFyc2luZy8jZXh0ZW5zaW9ucy10by10aGUtcmFuZ2UtaW50ZXJm
YWNlKS4KICAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uLCBOZXdPYmplY3RdIERv
Y3VtZW50RnJhZ21lbnQgY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KERPTVN0cmluZyBmcmFnbWVu
dCk7CiAKLSAgICAvLyBOb24gc3RhbmRhcmQuCi0gICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lk
IGV4cGFuZChvcHRpb25hbCBET01TdHJpbmcgdW5pdCA9ICIiKTsKKyAgICAvLyBOb24tc3RhbmRh
cmQgZXh0ZW5zaW9uLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxseSBkcm9wIHRo
aXMgc2luY2Ugbm8gb3RoZXIgYnJvd3NlciBzdXBwb3J0cyBpdC4KKyAgICBbTWF5VGhyb3dFeGNl
cHRpb25dIHZvaWQgZXhwYW5kKG9wdGlvbmFsIERPTVN0cmluZyB1bml0KTsKIAotICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbGlrZWx5IGRyb3AgdGhpcyBzaW5jZSBubyBvdGhlciBicm93c2VyIHN1
cHBvcnRzIGl0LgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbGlrZWx5IGRyb3AgdGhpcyBzaW5j
ZSB3ZSBhZGRlZCBpdCBmb3IgRmlyZWZveCBpbnRlcm9wZXJhYmlsaXR5LCBidXQgbm93IG5vIG90
aGVyIGJyb3dzZXIgc3VwcG9ydHMgaXQuCiAgICAgW01heVRocm93RXhjZXB0aW9uXSBzaG9ydCBj
b21wYXJlTm9kZShOb2RlIG5vZGUpOwogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PREVfQkVG
T1JFID0gMDsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT0RFX0FGVEVSID0gMTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaAppbmRleCBiMjQ0MDk4NDc4Yjc3NzdmMDRj
ZGY2OGQ2MTkyOWJkYzg4NDU1MTRmLi5kMDAzNDRkOWY2NjA0YjljZWQwYWVmZWI5ZTdlOGQzZDc5
ODQzYWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCkBAIC0zMiw0
MyArMzIsMzkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYW5nZUJvdW5kYXJ5UG9p
bnQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFJhbmdlQm91bmRhcnlQb2ludChOb2RlKiBjb250
YWluZXIpOworICAgIGV4cGxpY2l0IFJhbmdlQm91bmRhcnlQb2ludChOb2RlJiBjb250YWluZXIp
OwogCi0gICAgTm9kZSogY29udGFpbmVyKCkgY29uc3Q7CisgICAgTm9kZSYgY29udGFpbmVyKCkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3Q7CiAgICAgTm9kZSogY2hpbGRCZWZv
cmUoKSBjb25zdDsKIAotICAgIHZvaWQgY2xlYXIoKTsKLQogICAgIHZvaWQgc2V0KFJlZjxOb2Rl
PiYmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBjaGlsZEJlZm9yZSk7CiAgICAg
dm9pZCBzZXRPZmZzZXQodW5zaWduZWQpOwogCi0gICAgdm9pZCBzZXRUb0JlZm9yZUNoaWxkKE5v
ZGUmKTsKLSAgICB2b2lkIHNldFRvQWZ0ZXJDaGlsZChOb2RlJik7Ci0gICAgdm9pZCBzZXRUb1N0
YXJ0T2ZOb2RlKFJlZjxOb2RlPiYmKTsKLSAgICB2b2lkIHNldFRvRW5kT2ZOb2RlKFJlZjxOb2Rl
PiYmKTsKKyAgICB2b2lkIHNldFRvQmVmb3JlTm9kZShOb2RlJik7CisgICAgdm9pZCBzZXRUb0Fm
dGVyTm9kZShOb2RlJik7CisgICAgdm9pZCBzZXRUb0JlZm9yZUNvbnRlbnRzKFJlZjxOb2RlPiYm
KTsKKyAgICB2b2lkIHNldFRvQWZ0ZXJDb250ZW50cyhSZWY8Tm9kZT4mJik7CiAKICAgICB2b2lk
IGNoaWxkQmVmb3JlV2lsbEJlUmVtb3ZlZCgpOwogICAgIHZvaWQgaW52YWxpZGF0ZU9mZnNldCgp
IGNvbnN0OwotICAgIHZvaWQgZW5zdXJlT2Zmc2V0SXNWYWxpZCgpIGNvbnN0OwogCiBwcml2YXRl
OgotICAgIFJlZlB0cjxOb2RlPiBtX2NvbnRhaW5lck5vZGU7CisgICAgUmVmPE5vZGU+IG1fY29u
dGFpbmVyOwogICAgIG11dGFibGUgT3B0aW9uYWw8dW5zaWduZWQ+IG1fb2Zmc2V0SW5Db250YWlu
ZXIgeyAwIH07CiAgICAgUmVmUHRyPE5vZGU+IG1fY2hpbGRCZWZvcmVCb3VuZGFyeTsKIH07CiAK
IEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnQoY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50
Jik7CiAKLWlubGluZSBSYW5nZUJvdW5kYXJ5UG9pbnQ6OlJhbmdlQm91bmRhcnlQb2ludChOb2Rl
KiBjb250YWluZXIpCi0gICAgOiBtX2NvbnRhaW5lck5vZGUoY29udGFpbmVyKQoraW5saW5lIFJh
bmdlQm91bmRhcnlQb2ludDo6UmFuZ2VCb3VuZGFyeVBvaW50KE5vZGUmIGNvbnRhaW5lcikKKyAg
ICA6IG1fY29udGFpbmVyKGNvbnRhaW5lcikKIHsKLSAgICBBU1NFUlQobV9jb250YWluZXJOb2Rl
KTsKIH0KIAotaW5saW5lIE5vZGUqIFJhbmdlQm91bmRhcnlQb2ludDo6Y29udGFpbmVyKCkgY29u
c3QKK2lubGluZSBOb2RlJiBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmNvbnRhaW5lcigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fY29udGFpbmVyTm9kZS5nZXQoKTsKKyAgICByZXR1cm4gbV9jb250YWlu
ZXI7CiB9CiAKIGlubGluZSBOb2RlKiBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmNoaWxkQmVmb3JlKCkg
Y29uc3QKQEAgLTc2LDc3ICs3Miw2MyBAQCBpbmxpbmUgTm9kZSogUmFuZ2VCb3VuZGFyeVBvaW50
OjpjaGlsZEJlZm9yZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY2hpbGRCZWZvcmVCb3VuZGFyeS5n
ZXQoKTsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjplbnN1cmVPZmZzZXRJ
c1ZhbGlkKCkgY29uc3QKLXsKLSAgICBpZiAobV9vZmZzZXRJbkNvbnRhaW5lcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKG1fY2hpbGRCZWZvcmVCb3VuZGFyeSk7Ci0gICAgbV9vZmZz
ZXRJbkNvbnRhaW5lciA9IG1fY2hpbGRCZWZvcmVCb3VuZGFyeS0+Y29tcHV0ZU5vZGVJbmRleCgp
ICsgMTsKLX0KLQogaW5saW5lIHVuc2lnbmVkIFJhbmdlQm91bmRhcnlQb2ludDo6b2Zmc2V0KCkg
Y29uc3QKIHsKLSAgICBlbnN1cmVPZmZzZXRJc1ZhbGlkKCk7Ci0gICAgcmV0dXJuIG1fb2Zmc2V0
SW5Db250YWluZXIudmFsdWUoKTsKLX0KLQotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50
OjpjbGVhcigpCi17Ci0gICAgbV9jb250YWluZXJOb2RlID0gbnVsbHB0cjsKLSAgICBtX29mZnNl
dEluQ29udGFpbmVyID0gMDsKLSAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBudWxscHRyOwor
ICAgIGlmICghbV9vZmZzZXRJbkNvbnRhaW5lcikgeworICAgICAgICBBU1NFUlQobV9jaGlsZEJl
Zm9yZUJvdW5kYXJ5KTsKKyAgICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hpbGRCZWZv
cmVCb3VuZGFyeS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMTsKKyAgICB9CisgICAgcmV0dXJuICpt
X29mZnNldEluQ29udGFpbmVyOwogfQogCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6
OnNldChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCwgTm9kZSogY2hpbGRC
ZWZvcmUpCiB7CiAgICAgQVNTRVJUKGNoaWxkQmVmb3JlID09IChvZmZzZXQgPyBjb250YWluZXIt
PnRyYXZlcnNlVG9DaGlsZEF0KG9mZnNldCAtIDEpIDogMCkpOwotICAgIG1fY29udGFpbmVyTm9k
ZSA9IFdURk1vdmUoY29udGFpbmVyKTsKKyAgICBtX2NvbnRhaW5lciA9IFdURk1vdmUoY29udGFp
bmVyKTsKICAgICBtX29mZnNldEluQ29udGFpbmVyID0gb2Zmc2V0OwogICAgIG1fY2hpbGRCZWZv
cmVCb3VuZGFyeSA9IGNoaWxkQmVmb3JlOwogfQogCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5
UG9pbnQ6OnNldE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgQVNTRVJUKG1fY29udGFp
bmVyTm9kZSk7Ci0gICAgQVNTRVJUKG1fY29udGFpbmVyTm9kZS0+aXNDaGFyYWN0ZXJEYXRhTm9k
ZSgpKTsKKyAgICBBU1NFUlQobV9jb250YWluZXItPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSk7CiAg
ICAgQVNTRVJUKG1fb2Zmc2V0SW5Db250YWluZXIpOwogICAgIEFTU0VSVCghbV9jaGlsZEJlZm9y
ZUJvdW5kYXJ5KTsKICAgICBtX29mZnNldEluQ29udGFpbmVyID0gb2Zmc2V0OwogfQogCi1pbmxp
bmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvQmVmb3JlQ2hpbGQoTm9kZSYgY2hpbGQp
CitpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvQmVmb3JlTm9kZShOb2RlJiBj
aGlsZCkKIHsKICAgICBBU1NFUlQoY2hpbGQucGFyZW50Tm9kZSgpKTsKICAgICBtX2NoaWxkQmVm
b3JlQm91bmRhcnkgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBtX2NvbnRhaW5lck5v
ZGUgPSBjaGlsZC5wYXJlbnROb2RlKCk7Ci0gICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hp
bGRCZWZvcmVCb3VuZGFyeSA/IFdURjo6bnVsbG9wdCA6IE9wdGlvbmFsPHVuc2lnbmVkPigwKTsK
KyAgICBtX2NvbnRhaW5lciA9ICpjaGlsZC5wYXJlbnROb2RlKCk7CisgICAgbV9vZmZzZXRJbkNv
bnRhaW5lciA9IG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA/IFdURjo6bnVsbG9wdCA6IG1ha2VPcHRp
b25hbCgwVSk7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9BZnRl
ckNoaWxkKE5vZGUmIGNoaWxkKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRU
b0FmdGVyTm9kZShOb2RlJiBjaGlsZCkKIHsKICAgICBBU1NFUlQoY2hpbGQucGFyZW50Tm9kZSgp
KTsKICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSAmY2hpbGQ7Ci0gICAgbV9jb250YWluZXJO
b2RlID0gY2hpbGQucGFyZW50Tm9kZSgpOwotICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2No
aWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBPcHRpb25hbDx1bnNpZ25lZD4oMCk7
CisgICAgbV9jb250YWluZXIgPSAqY2hpbGQucGFyZW50Tm9kZSgpOworICAgIG1fb2Zmc2V0SW5D
b250YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBtYWtlT3B0
aW9uYWwoMFUpOwogfQogCi1pbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3Rh
cnRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFpbmVyKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFy
eVBvaW50OjpzZXRUb0JlZm9yZUNvbnRlbnRzKFJlZjxOb2RlPiYmIGNvbnRhaW5lcikKIHsKLSAg
ICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CisgICAgbV9jb250YWluZXIg
PSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IDA7CiAgICAg
bV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbnVsbHB0cjsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VC
b3VuZGFyeVBvaW50OjpzZXRUb0VuZE9mTm9kZShSZWY8Tm9kZT4mJiBjb250YWluZXIpCitpbmxp
bmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvQWZ0ZXJDb250ZW50cyhSZWY8Tm9kZT4m
JiBjb250YWluZXIpCiB7Ci0gICAgbV9jb250YWluZXJOb2RlID0gV1RGTW92ZShjb250YWluZXIp
OwotICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPigqbV9jb250YWluZXJOb2RlKSkgewotICAgICAg
ICBtX29mZnNldEluQ29udGFpbmVyID0gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKm1fY29udGFp
bmVyTm9kZSkubGVuZ3RoKCk7CisgICAgbV9jb250YWluZXIgPSBXVEZNb3ZlKGNvbnRhaW5lcik7
CisgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KG1fY29udGFpbmVyKSkgeworICAgICAgICBtX29m
ZnNldEluQ29udGFpbmVyID0gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obV9jb250YWluZXIuZ2V0
KCkpLmxlbmd0aCgpOwogICAgICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBudWxscHRyOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG1fY29udGFpbmVy
Tm9kZS0+bGFzdENoaWxkKCk7Ci0gICAgICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NoaWxk
QmVmb3JlQm91bmRhcnkgPyBXVEY6Om51bGxvcHQgOiBPcHRpb25hbDx1bnNpZ25lZD4oMCk7Cisg
ICAgICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG1fY29udGFpbmVyLT5sYXN0Q2hpbGQoKTsK
KyAgICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA/IFdU
Rjo6bnVsbG9wdCA6IG1ha2VPcHRpb25hbCgwVSk7CiAgICAgfQogfQogCkBAIC0xNjcsMjEgKzE0
OSwxNiBAQCBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmludmFsaWRhdGVPZmZzZXQo
KSBjb25zdAogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJhbmdlQm91bmRhcnlQb2lu
dCYgYSwgY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBiKQogewotICAgIGlmIChhLmNvbnRhaW5l
cigpICE9IGIuY29udGFpbmVyKCkpCisgICAgaWYgKCZhLmNvbnRhaW5lcigpICE9ICZiLmNvbnRh
aW5lcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEuY2hpbGRCZWZvcmUoKSB8
fCBiLmNoaWxkQmVmb3JlKCkpIHsKLSAgICAgICAgaWYgKGEuY2hpbGRCZWZvcmUoKSAhPSBiLmNo
aWxkQmVmb3JlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKGEub2Zmc2V0KCkgIT0gYi5vZmZzZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGEuY2hpbGRCZWZvcmUoKSB8
fCBiLmNoaWxkQmVmb3JlKCkpCisgICAgICAgIHJldHVybiBhLmNoaWxkQmVmb3JlKCkgPT0gYi5j
aGlsZEJlZm9yZSgpOworICAgIHJldHVybiBhLm9mZnNldCgpID09IGIub2Zmc2V0KCk7CiB9CiAK
IGlubGluZSBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50KGNvbnN0IFJhbmdlQm91bmRh
cnlQb2ludCYgcG9pbnQpCiB7Ci0gICAgcmV0dXJuIHsgKnBvaW50LmNvbnRhaW5lcigpLCBwb2lu
dC5vZmZzZXQoKSB9OworICAgIHJldHVybiB7IHBvaW50LmNvbnRhaW5lcigpLCBwb2ludC5vZmZz
ZXQoKSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJh
bmdlLmNwcAppbmRleCBjMWI3NDY4ZTFkZTA3OTdlYjllNjJjYjU5NmQzNGYzZjI5Mzc2ZmYxLi4w
MGMzOGE4MjM0YTFjOGVmYWI0NzVlYThiNGQ1YmYyNzI3N2IyMWY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aW1wbGVSYW5nZS5jcHAKQEAgLTcyLDYgKzcyLDkgQEAgc3RhdGljIGJvb2wgaXNPZmZzZXRCZWZv
cmVDaGlsZChDb250YWluZXJOb2RlJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCwgTm9kZSYK
IHsKICAgICBpZiAoIW9mZnNldCkKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gSWYgdGhl
IGNvbnRhaW5lciBpcyBub3QgdGhlIHBhcmVudCwgdGhlIGNoaWxkIGlzIHBhcnQgb2YgYSBzaGFk
b3cgdHJlZSwgd2hpY2ggd2Ugc29ydCBiZXR3ZWVuIG9mZnNldCAwIGFuZCBvZmZzZXQgMS4KKyAg
ICBpZiAoY2hpbGQucGFyZW50Tm9kZSgpICE9ICZjb250YWluZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB1bnNpZ25lZCBjdXJyZW50T2Zmc2V0ID0gMDsKICAgICBmb3IgKGF1dG8gY3Vy
cmVudENoaWxkID0gY29udGFpbmVyLmZpcnN0Q2hpbGQoKTsgY3VycmVudENoaWxkICYmIGN1cnJl
bnRDaGlsZCAhPSAmY2hpbGQ7IGN1cnJlbnRDaGlsZCA9IGN1cnJlbnRDaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICBpZiAob2Zmc2V0IDw9ICsrY3VycmVudE9mZnNldCkKQEAgLTk5LDE0
ICsxMDIsMTQgQEAgUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQ
b2ludCYgYSwgY29uc3QgQm91bmRhcnlQb2ludCYgYikKICAgICAgICAgcmV0dXJuIG9yZGVyKGEu
b2Zmc2V0LCBiLm9mZnNldCk7CiAKICAgICBmb3IgKGF1dG8gYW5jZXN0b3IgPSBiLmNvbnRhaW5l
ci5wdHIoKTsgYW5jZXN0b3I7ICkgewotICAgICAgICBhdXRvIG5leHRBbmNlc3RvciA9IGFuY2Vz
dG9yLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7CisgICAgICAgIGF1dG8gbmV4dEFuY2VzdG9y
ID0gYW5jZXN0b3ItPnBhcmVudEluQ29tcG9zZWRUcmVlKCk7CiAgICAgICAgIGlmIChuZXh0QW5j
ZXN0b3IgPT0gYS5jb250YWluZXIucHRyKCkpCiAgICAgICAgICAgICByZXR1cm4gaXNPZmZzZXRC
ZWZvcmVDaGlsZCgqbmV4dEFuY2VzdG9yLCBhLm9mZnNldCwgKmFuY2VzdG9yKSA/IFBhcnRpYWxP
cmRlcmluZzo6bGVzcyA6IFBhcnRpYWxPcmRlcmluZzo6Z3JlYXRlcjsKICAgICAgICAgYW5jZXN0
b3IgPSBuZXh0QW5jZXN0b3I7CiAgICAgfQogCiAgICAgZm9yIChhdXRvIGFuY2VzdG9yID0gYS5j
b250YWluZXIucHRyKCk7IGFuY2VzdG9yOyApIHsKLSAgICAgICAgYXV0byBuZXh0QW5jZXN0b3Ig
PSBhbmNlc3Rvci0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpOworICAgICAgICBhdXRvIG5leHRB
bmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpOwogICAgICAgICBpZiAo
bmV4dEFuY2VzdG9yID09IGIuY29udGFpbmVyLnB0cigpKQogICAgICAgICAgICAgcmV0dXJuIGlz
T2Zmc2V0QmVmb3JlQ2hpbGQoKm5leHRBbmNlc3RvciwgYi5vZmZzZXQsICphbmNlc3RvcikgPyBQ
YXJ0aWFsT3JkZXJpbmc6OmdyZWF0ZXIgOiBQYXJ0aWFsT3JkZXJpbmc6Omxlc3M7CiAgICAgICAg
IGFuY2VzdG9yID0gbmV4dEFuY2VzdG9yOwpAQCAtMjA1LDQgKzIwOCw2OCBAQCBSZWZQdHI8Tm9k
ZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAg
IHJldHVybiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyYW5nZS5zdGFydC5jb250YWluZXIsIHJh
bmdlLmVuZC5jb250YWluZXIpOwogfQogCitib29sIGlzUG9pbnRJblJhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJu
IGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihyYW5nZS5zdGFydCwgcG9pbnQpKSAmJiBpc19sdGVxKGRv
Y3VtZW50T3JkZXIocG9pbnQsIHJhbmdlLmVuZCkpOworfQorCitib29sIGlzUG9pbnRJblJhbmdl
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4m
IHBvaW50KQoreworICAgIHJldHVybiBwb2ludCAmJiBpc1BvaW50SW5SYW5nZShyYW5nZSwgKnBv
aW50KTsKK30KKworUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoYXV0byBv
cmRlciA9IGRvY3VtZW50T3JkZXIocmFuZ2Uuc3RhcnQsIHBvaW50KTsgIWlzX2x0KG9yZGVyKSkK
KyAgICAgICAgcmV0dXJuIG9yZGVyOworICAgIGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRPcmRl
cihyYW5nZS5lbmQsIHBvaW50KTsgIWlzX2d0KG9yZGVyKSkKKyAgICAgICAgcmV0dXJuIG9yZGVy
OworICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7Cit9CisKK1BhcnRpYWxP
cmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50LCBjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UpCit7CisgICAgaWYgKGF1dG8gb3JkZXIgPSBkb2N1bWVudE9yZGVy
KHBvaW50LCByYW5nZS5zdGFydCk7ICFpc19ndChvcmRlcikpCisgICAgICAgIHJldHVybiBvcmRl
cjsKKyAgICBpZiAoYXV0byBvcmRlciA9IGRvY3VtZW50T3JkZXIocG9pbnQsIHJhbmdlLmVuZCk7
ICFpc19sdChvcmRlcikpCisgICAgICAgIHJldHVybiBvcmRlcjsKKyAgICByZXR1cm4gUGFydGlh
bE9yZGVyaW5nOjplcXVpdmFsZW50OworfQorCitib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJh
bmdlJiBvdXRlclJhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgaW5uZXJSYW5nZSkKK3sKKyAgICBy
ZXR1cm4gaXNfbHRlcShkb2N1bWVudE9yZGVyKG91dGVyUmFuZ2Uuc3RhcnQsIGlubmVyUmFuZ2Uu
c3RhcnQpKSAmJiBpc19ndGVxKGRvY3VtZW50T3JkZXIob3V0ZXJSYW5nZS5lbmQsIGlubmVyUmFu
Z2UuZW5kKSk7Cit9CisKK2Jvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgYSwgY29u
c3QgU2ltcGxlUmFuZ2UmIGIpCit7CisgICAgcmV0dXJuIGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihh
LnN0YXJ0LCBiLmVuZCkpICYmIGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihiLnN0YXJ0LCBhLmVuZCkp
OworfQorCitTaW1wbGVSYW5nZSB1bmlvblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25z
dCBTaW1wbGVSYW5nZSYgYikKK3sKKyAgICBhdXRvJiBzdGFydCA9IGlzX2x0ZXEoZG9jdW1lbnRP
cmRlcihhLnN0YXJ0LCBiLnN0YXJ0KSkgPyBhIDogYjsKKyAgICBhdXRvJiBlbmQgPSBpc19sdGVx
KGRvY3VtZW50T3JkZXIoYS5lbmQsIGIuZW5kKSkgPyBiIDogYTsKKyAgICByZXR1cm4geyBzdGFy
dC5zdGFydCwgZW5kLmVuZCB9OworfQorCitib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgYSBt
b3JlIGVmZmljaWVudCBhbGdvcml0aG0gdGhhdCBhdm9pZHMgYWx3YXlzIGNvbXB1dGluZyB0aGUg
bm9kZSBpbmRleC4KKyAgICAvLyBGSVhNRTogRG9lcyB0aGlzIGNvbnN0X2Nhc3QgcG9pbnQgdG8g
YSBkZXNpZ24gcHJvYmxlbT8KKyAgICBhdXRvIG5vZGVSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGUoY29uc3RfY2FzdDxOb2RlJj4obm9kZSkpOworICAgIHJldHVybiBub2RlUmFuZ2UgJiYg
Y29udGFpbnMocmFuZ2UsICpub2RlUmFuZ2UpOworfQorCitib29sIGludGVyc2VjdHMoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQoreworICAgIC8vIEZJWE1FOiBD
b25zaWRlciBhIG1vcmUgZWZmaWNpZW50IGFsZ29yaXRobSB0aGF0IGF2b2lkcyBhbHdheXMgY29t
cHV0aW5nIHRoZSBub2RlIGluZGV4LgorICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgY29uc3RfY2Fz
dCBwb2ludCB0byBhIGRlc2lnbiBwcm9ibGVtPworICAgIGF1dG8gbm9kZVJhbmdlID0gbWFrZVJh
bmdlU2VsZWN0aW5nTm9kZShjb25zdF9jYXN0PE5vZGUmPihub2RlKSk7CisgICAgaWYgKCFub2Rl
UmFuZ2UpCisgICAgICAgIHJldHVybiBub2RlLmNvbnRhaW5zKHJhbmdlLnN0YXJ0LmNvbnRhaW5l
ci5wdHIoKSk7CisgICAgcmV0dXJuIGlzX2x0KGRvY3VtZW50T3JkZXIobm9kZVJhbmdlLT5zdGFy
dCwgcmFuZ2UuZW5kKSkgJiYgaXNfbHQoZG9jdW1lbnRPcmRlcihyYW5nZS5zdGFydCwgbm9kZVJh
bmdlLT5lbmQpKTsKKworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2lt
cGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCmluZGV4IDBkNWNk
MWVhYjJhNzcxZWI2NzI2NWRkNjMwMjQ1MzQxMTI3ZmM1ZGYuLmJhZjIzMTliMTgyNGVlODc5MTYz
NDE5YjllMzI1NjE5YzU1YzM0NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1w
bGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCkBAIC02NSw2
ICs2NSwyMCBAQCBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5j
ZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBs
ZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAorV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1Bv
aW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK2Jv
b2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBPcHRpb25hbDxCb3Vu
ZGFyeVBvaW50PiYpOworCitXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBs
ZVJhbmdlJiBvdXRlclJhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgaW5uZXJSYW5nZSk7CitXRUJD
T1JFX0VYUE9SVCBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1w
bGVSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgdW5pb25SYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CisKK1dFQkNPUkVfRVhQT1JUIGJvb2wg
Y29udGFpbnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CitXRUJDT1JFX0VYUE9S
VCBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CisKKy8v
IFJldHVybnMgZXF1aXZhbGVudCBpZiBwb2ludCBpcyBpbiByYW5nZS4KK1dFQkNPUkVfRVhQT1JU
IFBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3Qg
Qm91bmRhcnlQb2ludCYpOworV0VCQ09SRV9FWFBPUlQgUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50
T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CisKIGNsYXNz
IEludGVyc2VjdGluZ05vZGVSYW5nZTsKIEludGVyc2VjdGluZ05vZGVSYW5nZSBpbnRlcnNlY3Rp
bmdOb2Rlcyhjb25zdCBTaW1wbGVSYW5nZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNw
cAppbmRleCAyODNhZWFkNjU4ZDQxZWUyYTBiYzM1ZjIzMDFlOTVhZjRjZTEyM2JjLi42YjE4NGNh
ODU3Y2E3ZWVjYTUxZDZiYWZmNTU0YjVhMjE1MjU3N2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZy5jcHAKQEAgLTc5LDQwICs3OSwxOCBAQCBib29sIGlzQXRvbWljTm9kZShjb25zdCBOb2Rl
KiBub2RlKQogICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8IGVk
aXRpbmdJZ25vcmVzQ29udGVudCgqbm9kZSkpOwogfQogCi0vLyBDb21wYXJlIHR3byBwb3NpdGlv
bnMsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHBvc3NpYmlsaXR5IHRoYXQgb25lIG9yIGJvdGgK
LS8vIGNvdWxkIGJlIGluc2lkZSBhIHNoYWRvdyB0cmVlLiBPbmx5IHdvcmtzIGZvciBub24tbnVs
bCB2YWx1ZXMuCisvLyBGSVhNRTogQ2hhbmdlIGNhbGxlcnMgdG8gdXNlIGRvY3VtZW50T3JkZXIg
YW5kIGRlbGV0ZSB0aGlzLgogaW50IGNvbXBhcmVQb3NpdGlvbnMoY29uc3QgUG9zaXRpb24mIGEs
IGNvbnN0IFBvc2l0aW9uJiBiKQogewotICAgIFRyZWVTY29wZSogY29tbW9uU2NvcGUgPSBjb21t
b25UcmVlU2NvcGUoYS5jb250YWluZXJOb2RlKCksIGIuY29udGFpbmVyTm9kZSgpKTsKLQotICAg
IGlmICghY29tbW9uU2NvcGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgTm9kZSogbm9kZUEg
PSBjb21tb25TY29wZS0+YW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUoYS5jb250YWluZXJOb2RlKCkp
OwotICAgIEFTU0VSVChub2RlQSk7Ci0gICAgYm9vbCBoYXNEZXNjZW5kZW50QSA9IG5vZGVBICE9
IGEuY29udGFpbmVyTm9kZSgpOwotICAgIGludCBvZmZzZXRBID0gaGFzRGVzY2VuZGVudEEgPyAw
IDogYS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0KLSAgICBOb2RlKiBub2RlQiA9
IGNvbW1vblNjb3BlLT5hbmNlc3Rvck5vZGVJblRoaXNTY29wZShiLmNvbnRhaW5lck5vZGUoKSk7
Ci0gICAgQVNTRVJUKG5vZGVCKTsKLSAgICBib29sIGhhc0Rlc2NlbmRlbnRCID0gbm9kZUIgIT0g
Yi5jb250YWluZXJOb2RlKCk7Ci0gICAgaW50IG9mZnNldEIgPSBoYXNEZXNjZW5kZW50QiA/IDAg
OiBiLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKLQotICAgIGludCBiaWFzID0gMDsK
LSAgICBpZiAobm9kZUEgPT0gbm9kZUIpIHsKLSAgICAgICAgaWYgKGhhc0Rlc2NlbmRlbnRBKQot
ICAgICAgICAgICAgYmlhcyA9IC0xOwotICAgICAgICBlbHNlIGlmIChoYXNEZXNjZW5kZW50QikK
LSAgICAgICAgICAgIGJpYXMgPSAxOwotICAgIH0KLQotICAgIGF1dG8gY29tcGFyaXNvblJlc3Vs
dCA9IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMobm9kZUEsIG9mZnNldEEsIG5vZGVCLCBv
ZmZzZXRCKTsKLSAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAg
ICAgcmV0dXJuIGJpYXM7Ci0gICAgYXV0byByZXN1bHQgPSBjb21wYXJpc29uUmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpOwotICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBiaWFzOworICAg
IGF1dG8gb3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKGEsIGIpOworICAgIGlmIChpc19sdChvcmRl
cmluZykpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoaXNfZ3Qob3JkZXJpbmcpKQorICAg
ICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKIH0KIAorLy8gRklYTUU6IENoYW5nZSBjYWxs
ZXJzIHRvIHVzZSBkb2N1bWVudE9yZGVyIGFuZCBkZWxldGUgdGhpcy4KIGludCBjb21wYXJlUG9z
aXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBi
KQogewogICAgIHJldHVybiBjb21wYXJlUG9zaXRpb25zKGEuZGVlcEVxdWl2YWxlbnQoKSwgYi5k
ZWVwRXF1aXZhbGVudCgpKTsKQEAgLTExNjMsOSArMTE0MSw3IEBAIHN0YXRpYyBib29sIGlzVmlz
aWJseUFkamFjZW50KGNvbnN0IFBvc2l0aW9uJiBmaXJzdCwgY29uc3QgUG9zaXRpb24mIHNlY29u
ZCkKIC8vIENhbGwgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhIG5vZGUgaXMg
dmlzaWJseSBmaXQgaW5zaWRlIHNlbGVjdGVkUmFuZ2UKIGJvb2wgaXNOb2RlVmlzaWJseUNvbnRh
aW5lZFdpdGhpbihOb2RlJiBub2RlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAg
Ly8gSWYgdGhlIG5vZGUgaXMgaW5zaWRlIHRoZSByYW5nZSwgdGhlbiBpdCBzdXJlbHkgaXMgY29u
dGFpbmVkIHdpdGhpbi4KLSAgICBhdXRvIGNvbXBhcmlzb25SZXN1bHQgPSBjcmVhdGVMaXZlUmFu
Z2UocmFuZ2UpLT5jb21wYXJlTm9kZShub2RlKTsKLSAgICBpZiAoIWNvbXBhcmlzb25SZXN1bHQu
aGFzRXhjZXB0aW9uKCkgJiYgY29tcGFyaXNvblJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9
PSBSYW5nZTo6Tk9ERV9JTlNJREUpCisgICAgaWYgKGNvbnRhaW5zKHJhbmdlLCBub2RlKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CmluZGV4IGE0YzE3NGNiMzIzYjI5YmQ4MjJhZGRmZDI4NTdhMzI1ZjA0OTFjNDMuLjA5NDY2YWYx
OGRhMjUwZGM0MDU2OWRhMTU5ZmNiMmIxMmJkMTU3M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKQEAgLTM1NTAsMTAgKzM1NTAsOCBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9y
OjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBPcHRpb25hbAogc3Rh
dGljIGJvb2wgaXNGcmFtZUluUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpCiB7CiAgICAgZm9yIChhdXRvKiBvd25lckVsZW1lbnQgPSBmcmFtZS5vd25lckVsZW1l
bnQoKTsgb3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50
KCkub3duZXJFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3VtZW50
KCkgPT0gJnJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm93bmVyRWxlbWVudCk7
Ci0gICAgICAgICAgICByZXR1cm4gIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVs
ZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCZvd25lckVsZW1lbnQt
PmRvY3VtZW50KCkgPT0gJnJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpCisgICAgICAgICAgICByZXR1
cm4gaW50ZXJzZWN0cyhyYW5nZSwgKm93bmVyRWxlbWVudCk7CiAgICAgfQogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTM3MDMsMTggKzM3MDEsMTYgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rp
b25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKIAogICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCkpIHsKLSAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBmZXcgY2hhcmFjdGVycyBp
biBlYWNoIGRpcmVjdGlvbiB0byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNlbGVjdGVkIHBob25lIG51
bWJlcnMuCi0gICAgICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgY2hhcmFjdGVyc1RvRXh0ZW5k
ID0gMTU7Ci0gICAgICAgICAgICBhdXRvIHNlbGVjdGVkTGl2ZVJhbmdlID0gY3JlYXRlTGl2ZVJh
bmdlKCpzZWxlY3RlZFJhbmdlKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcmFuZ2UgOiBzY2Fu
Rm9yVGVsZXBob25lTnVtYmVycyhleHRlbmRTZWxlY3Rpb24oKnNlbGVjdGVkUmFuZ2UsIGNoYXJh
Y3RlcnNUb0V4dGVuZCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBk
byB0aGlzIHVuY29uZGl0aW9uYWxseSBhbmQgdGhlIGNvZGUgYmVsb3cgdGhpcyBvbmx5IHdoZW4g
aXQgb3ZlcmxhcHMgdGhlIHNlbGVjdGlvbj8KLSAgICAgICAgICAgICAgICBhZGRNYXJrZXIocmFu
Z2UsIERvY3VtZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXIpOwotCi0gICAgICAgICAgICAgICAg
Ly8gT25seSBjb25zaWRlciByYW5nZXMgd2l0aCBhIGRldGVjdGVkIHRlbGVwaG9uZSBudW1iZXIg
aWYgdGhleSBvdmVybGFwIHdpdGggdGhlIGFjdHVhbCBzZWxlY3Rpb24gcmFuZ2UuCi0gICAgICAg
ICAgICAgICAgaWYgKHJhbmdlc092ZXJsYXAoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSwg
c2VsZWN0ZWRMaXZlUmFuZ2UucHRyKCkpKQotICAgICAgICAgICAgICAgICAgICBtX2RldGVjdGVk
VGVsZXBob25lTnVtYmVyUmFuZ2VzLmFwcGVuZChyYW5nZSk7Ci0gICAgICAgICAgICB9CisgICAg
ICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9ICpzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmlyc3RSYW5n
ZSgpOworICAgICAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gZWFj
aCBkaXJlY3Rpb24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBwaG9uZSBudW1iZXJz
LgorICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgY2hhcmFjdGVyc1RvRXh0ZW5kID0gMTU7Cisg
ICAgICAgIGZvciAoYXV0byYgcmFuZ2UgOiBzY2FuRm9yVGVsZXBob25lTnVtYmVycyhleHRlbmRT
ZWxlY3Rpb24oc2VsZWN0ZWRSYW5nZSwgY2hhcmFjdGVyc1RvRXh0ZW5kKSkpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgaW5zdGVhZCBv
ZiB3aGVuIG9ubHkgd2hlbiBpdCBvdmVybGFwcyB0aGUgc2VsZWN0aW9uPworICAgICAgICAgICAg
YWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKKworICAg
ICAgICAgICAgLy8gT25seSBjb25zaWRlciByYW5nZXMgd2l0aCBhIGRldGVjdGVkIHRlbGVwaG9u
ZSBudW1iZXIgaWYgdGhleSBvdmVybGFwIHdpdGggdGhlIHNlbGVjdGlvbi4KKyAgICAgICAgICAg
IGlmIChpbnRlcnNlY3RzKHJhbmdlLCBzZWxlY3RlZFJhbmdlKSkKKyAgICAgICAgICAgICAgICBt
X2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmFwcGVuZChyYW5nZSk7CiAgICAgICAgIH0K
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDI0
NmZiMjZiN2U4NzQ3ZjMwZDg5YmU2OTdiOTkwNmQ3NGU2Yzk5ZDEuLjUyYzU4MGFmZmI0YjI4NzU3
Y2NlZDQ4M2Y2YmNkMjRlMjU3N2MwNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcApAQCAtMjI4LDEzICsyMjgsNiBAQCBzdGF0aWMgdW5zaWduZWQgdmVydGljYWxT
Y3JvbGxEaXN0YW5jZShGcmFtZSYgZnJhbWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihTY3JvbGxiYXI6OnBhZ2VTdGVwKGhlaWdodCkpOwogfQogCi1zdGF0aWMgU2ltcGxlUmFu
Z2UgdW5pb25SYW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBi
KQotewotICAgIGF1dG8mIHN0YXJ0ID0gY3JlYXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UoYikpLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpIDw9IDAgPyBhIDogYjsKLSAgICBhdXRvJiBlbmQgPSBjcmVhdGVMaXZl
UmFuZ2UoYSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgY3JlYXRl
TGl2ZVJhbmdlKGIpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYiA6IGE7Ci0gICAgcmV0
dXJuIHsgc3RhcnQuc3RhcnQsIGVuZC5lbmQgfTsKLX0KLQogLy8gRXhlY3V0ZSBjb21tYW5kIGZ1
bmN0aW9ucwogCiBzdGF0aWMgYm9vbCBleGVjdXRlQmFja0NvbG9yKEZyYW1lJiBmcmFtZSwgRXZl
bnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAg
LTM1MywxNCArMzQ2LDE2IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb0VuZE9mUGFyYWdy
YXBoKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291CiAKIHN0YXRpYyBib29s
IGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRT
b3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCku
bWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byYgZWRpdG9yID0gZnJhbWUuZWRp
dG9yKCk7CiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7Ci0gICAgaWYg
KG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSB7Ci0gICAgICAgIGlmICgh
c2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpmcmFtZS5lZGl0
b3IoKS5zZWxlY3RlZFJhbmdlKCkpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6OlllcykpCisgICAgYXV0byBtYXJrUmFuZ2UgPSBlZGl0b3IubWFyaygpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmIChtYXJrUmFuZ2UgJiYgc2Vs
ZWN0aW9uUmFuZ2UpIHsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1
bmlvblJhbmdlKCptYXJrUmFuZ2UsICpzZWxlY3Rpb25SYW5nZSksIERPV05TVFJFQU0sIEZyYW1l
U2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9Ci0gICAgZnJhbWUuZWRpdG9yKCkucGVyZm9ybURlbGV0ZSgpOwotICAgIGZy
YW1lLmVkaXRvcigpLnNldE1hcmsoc2VsZWN0aW9uLnNlbGVjdGlvbigpKTsKKyAgICBlZGl0b3Iu
cGVyZm9ybURlbGV0ZSgpOworICAgIGVkaXRvci5zZXRNYXJrKHNlbGVjdGlvbi5zZWxlY3Rpb24o
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwNTAsMTMgKzEwNDUsMTUgQEAgc3RhdGlj
IGJvb2wgZXhlY3V0ZVNlbGVjdFNlbnRlbmNlKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JD
b21tYW5kU291cmNlLCBjb24KIAogc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFt
ZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsK
LSAgICBhdXRvIG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKTsK
LSAgICBpZiAoIW1hcmsgfHwgIXNlbGVjdGlvbikgeworICAgIGF1dG8mIGVkaXRvciA9IGZyYW1l
LmVkaXRvcigpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOworICAg
IGF1dG8gbWFya1JhbmdlID0gZWRpdG9yLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
IGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICBpZiAoIW1hcmtSYW5nZSB8fCAhc2VsZWN0aW9uUmFuZ2UpIHsKICAgICAg
ICAgUEFMOjpzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvblJhbmdlcygqbWFyaywgKnNl
bGVjdGlvbiksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6
WWVzKTsKKyAgICBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvblJhbmdlKCptYXJrUmFu
Z2UsICpzZWxlY3Rpb25SYW5nZSksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRD
bG9zZVR5cGluZzo6WWVzKTsKICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIGlnbm9yZSB0aGUgcmV0
dXJuIHZhbHVlIGZyb20gc2V0U2VsZWN0ZWRSYW5nZSBoZXJlPwogICAgIHJldHVybiB0cnVlOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBlMDEwOGIy
M2E2NWZmMDg2NWUyMzgwZjVlYzFjYWFkNTg2M2E1NzY4Li5mZDA2ZjY0ZmMwNTUzOWJhNDlhYjVj
NzUyNWU0YWQ3MjVkYjA5OTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcApAQCAtNTU0LDE4ICs1NTQsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmVzcG9u
ZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVkLCBib28KICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgbV9zZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24o
bV9zZWxlY3Rpb24uZW5kKCksIG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIH0gZWxzZSBpZiAo
aXNSYW5nZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9zZWxlY3Rpb24uZmlyc3RS
YW5nZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbXBhcmVOb2RlUmVzdWx0ID0gY3JlYXRlTGl2
ZVJhbmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKG5vZGUpOwotICAgICAgICAgICAgaWYgKCFjb21w
YXJlTm9kZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29t
cGFyZVJlc3VsdCA9IGNvbXBhcmVOb2RlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAg
ICAgICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0JFRk9SRV9BTkRf
QUZURVIgfHwgY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdGhpbmcgaGVyZSwgd2hlbiB0aGlzIG5vZGUncyBy
ZW5kZXJlciB3YXMgZGVzdHJveWVkLCB0aGUgcmVjdCB0aGF0IGl0Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVjdGlvbiBnYXBz
IHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBy
ZW1vdmFsIHdvdWxkbid0IGJlIGludmFsaWRhdGVkLgotICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogRG9uJ3QgZG8gc28gbXVjaCB1bm5lY2Vzc2FyeSBpbnZhbGlkYXRpb24uCi0gICAgICAg
ICAgICAgICAgICAgIGNsZWFyUmVuZGVyVHJlZVNlbGVjdGlvbiA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fc2VsZWN0
aW9uLmZpcnN0UmFuZ2UoKTsgcmFuZ2UgJiYgaW50ZXJzZWN0cygqcmFuZ2UsIG5vZGUpKSB7Cisg
ICAgICAgICAgICAvLyBJZiB3ZSBkaWQgbm90aGluZyBoZXJlLCB3aGVuIHRoaXMgbm9kZSdzIHJl
bmRlcmVyIHdhcyBkZXN0cm95ZWQsIHRoZSByZWN0IHRoYXQgaXQKKyAgICAgICAgICAgIC8vIG9j
Y3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVjdGlvbiBnYXBzIHRoYXQgY2hh
bmdlIGFzIGEgcmVzdWx0IG9mCisgICAgICAgICAgICAvLyB0aGUgcmVtb3ZhbCB3b3VsZG4ndCBi
ZSBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBkbyBzbyBtdWNoIHVu
bmVjZXNzYXJ5IGludmFsaWRhdGlvbi4KKyAgICAgICAgICAgIGNsZWFyUmVuZGVyVHJlZVNlbGVj
dGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwMzQsNyArMjAyOCw3IEBAIGJv
b2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiByYW5nZSwgRUFmZmluCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKCZyYW5nZS0+c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpICE9ICZy
YW5nZS0+ZW5kLmNvbnRhaW5lci0+ZG9jdW1lbnQoKSkKKyAgICBpZiAoJnJhbmdlLT5zdGFydC5k
b2N1bWVudCgpICE9ICZyYW5nZS0+ZW5kLmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKCpyYW5nZSwgYWZmaW5pdHkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4
dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4
dENvbW1hbmQuY3BwCmluZGV4IDVlZDBkZTlhMzEwYjMxYmU2M2UwYTNkNDMzODk4YzE5NTI3Mjg1
NmUuLjViN2JlNzg4YzY4NGUxMjIyOWJjNzc3ZTk5NmJmOTFhZDllNWRiMmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5j
cHAKQEAgLTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVwbGFjZVJhbmdl
V2l0aFRleHRDb21tYW5kOjpSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHRleHQpCi0gICAgOiBDb21w
b3NpdGVFZGl0Q29tbWFuZChyYW5nZVRvQmVSZXBsYWNlZC5zdGFydC5jb250YWluZXItPmRvY3Vt
ZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQorICAgIDogQ29tcG9zaXRlRWRp
dENvbW1hbmQocmFuZ2VUb0JlUmVwbGFjZWQuc3RhcnQuZG9jdW1lbnQoKSwgRWRpdEFjdGlvbjo6
SW5zZXJ0UmVwbGFjZW1lbnQpCiAgICAgLCBtX3JhbmdlVG9CZVJlcGxhY2VkKHJhbmdlVG9CZVJl
cGxhY2VkKQogICAgICwgbV90ZXh0KHRleHQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRleCA4NjcxMzIwZGM0M2M2
NWFlM2YwMDUwNDM3ZjQzOTFmMTZmODljZjU2Li5hODQ4NjYzNjUzYTBmN2ZmMjk3MzczNmIxMTk3
MmM4YzY0YzhjYWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICNlbmRp
ZgogCiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29y
cmVjdGlvbikKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJhbmdlVG9CZUNvcnJlY3RlZC5z
dGFydC5jb250YWluZXItPmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50
KQorICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQocmFuZ2VUb0JlQ29ycmVjdGVkLnN0YXJ0LmRv
Y3VtZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQogICAgICwgbV9yYW5nZVRv
QmVDb3JyZWN0ZWQocmFuZ2VUb0JlQ29ycmVjdGVkKQogICAgICwgbV9zZWxlY3Rpb25Ub0JlQ29y
cmVjdGVkKG1fcmFuZ2VUb0JlQ29ycmVjdGVkKQogICAgICwgbV9jb3JyZWN0aW9uKGNvcnJlY3Rp
b24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKaW5k
ZXggOTAzYmM3Y2JlM2ZhNmVhZjY0YWM2Njc4ZDIyY2E5NDJkYzk4ZTAzYi4uNTI2ZGVlZGY2ODA3
ZDM2YWU3ODllY2U0MmEwODEwODBhNWZmZjMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMzM3LDcgKzMzNyw3IEBAIGF1dG8gVGV4dENo
ZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFz
ZShib29sIGNoZWNrCiAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hcikKICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7
CiAgICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uOwotICAg
ICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3JhcGhSYW5nZS5zdGFydC5jb250
YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZy
YW1lID0gcGFyYWdyYXBoUmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgICAgICAgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCptX2NsaWVudC50ZXh0
Q2hlY2tlcigpLCBwYXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMsIGN1cnJl
bnRTZWxlY3Rpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9E
aWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGlj
dGlvbmFyeUxvb2t1cExlZ2FjeS5tbQppbmRleCA4NzYxMjBiYjA5YjEyZTA5ZTRkZWNhNThlNTU0
ZDMwMjcwMWVmNDM1Li41NTgyNGZhMDgzNmUwMzNjNzkyNjYxNmE0Nzk3MTEyMGUzNzQzYzk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVn
YWN5Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBM
ZWdhY3kubW0KQEAgLTY4LDExICs2OCw4IEBAIHN0YXRpYyBib29sIHNlbGVjdGlvbkNvbnRhaW5z
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmlzCiAgICAg
aWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBp
ZiAoIXNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb250YWlucyhwb3NpdGlvbik7CisgICAg
YXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKKyAgICByZXR1cm4g
c2VsZWN0ZWRSYW5nZSAmJiBpc1BvaW50SW5SYW5nZSgqc2VsZWN0ZWRSYW5nZSwgbWFrZUJvdW5k
YXJ5UG9pbnQocG9zaXRpb24pKTsKIH0KIAogT3B0aW9uYWw8c3RkOjp0dXBsZTxTaW1wbGVSYW5n
ZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAKaW5kZXggMWY3MTk0YTczMjhlOTQ3YWViYjYyYWMxYzhkNThmZTkyYTE1MGE3ZS4uNmI4ZTM5
OWE1ZjhhZWRmMWViYjQ3YmJiNmY2ZDUyNjlkYmE4NWQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcApAQCAtMTEyMCw3ICsxMTIwLDcgQEAgc3RhdGljIGJvb2wgY29udGV4dFByZXNlcnZl
c05ld2xpbmUoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQpCiAKIFJlZjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgYXV0byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0YXJ0
LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IGNvbnRleHQuc3Rh
cnQuZG9jdW1lbnQoKTsKICAgICBhdXRvIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1l
bnRGcmFnbWVudCgpOwogICAgIAogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKaW5k
ZXggYTViZTA3MWUzNjg2MDc3ZWUzNmQyMWUzNWE1ODM5ODA0ZDk4N2YyMi4uNjA5ZWQxMTE0ZmQx
OTk2Y2U4OTczYjc0Yzc5YmM3ZmUwNTI2ZWQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKQEAgLTQ1NSw3ICs0NTUs
NyBAQCBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKEZy
YW1lJiBmcmFtZSkKIAogUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6
OmNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgYXV0byYgZG9jdW1lbnQg
PSByYW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCk7CisgICAgYXV0byYgZG9jdW1lbnQg
PSByYW5nZS5zdGFydC5kb2N1bWVudCgpOwogICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJh
bWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCA5NjQ0OWQzMjdhZWI5YTkxY2ZlZDc5MjljYTZj
MzY2NDEyMDIwNWJmLi5lY2YyYWVhZDZkNGVlYzg3YTJlZWZhMzM0MzJkMDA0YTI0Y2EzZjE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTVNlbGVj
dGlvbi5oIgogCkBAIC0yODQsMTUgKzI4MywxMyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6bW9kaWZ5
KGNvbnN0IFN0cmluZyYgYWx0ZXJTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaQog
CiBFeGNlcHRpb25Pcjx2b2lkPiBET01TZWxlY3Rpb246OmV4dGVuZChOb2RlJiBub2RlLCB1bnNp
Z25lZCBvZmZzZXQpCiB7Ci0gICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1
dG8gZnJhbWUgPSBtYWtlUmVmUHRyKHRoaXMtPmZyYW1lKCkpOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYgKG9mZnNldCA+IChub2RlLmlzQ2hhcmFjdGVyRGF0
YU5vZGUoKSA/IGNhcmV0TWF4T2Zmc2V0KG5vZGUpIDogbm9kZS5jb3VudENoaWxkTm9kZXMoKSkp
CisgICAgaWYgKG9mZnNldCA+IG5vZGUubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbmRleFNpemVFcnJvciB9OwogICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKCZub2Rl
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFt
ZSk7CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldEV4dGVudChjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24oJm5vZGUsIG9mZnNldCksIERPV05TVFJFQU0pOwogICAgIHJldHVybiB7IH07CiB9
CkBAIC0zMDEsMjIgKzI5OCwxMCBAQCBFeGNlcHRpb25PcjxSZWY8UmFuZ2U+PiBET01TZWxlY3Rp
b246OmdldFJhbmdlQXQodW5zaWduZWQgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IHJhbmdl
Q291bnQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07Ci0K
LSAgICAvLyBJZiB5b3UncmUgaGl0dGluZyB0aGlzLCB5b3UndmUgYWRkZWQgYnJva2VuIG11bHRp
LXJhbmdlIHNlbGVjdGlvbiBzdXBwb3J0LgotICAgIEFTU0VSVChyYW5nZUNvdW50KCkgPT0gMSk7
Ci0KLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKGF1dG8qIHNoYWRv
d0FuY2VzdG9yID0gc2VsZWN0aW9uU2hhZG93QW5jZXN0b3IoKmZyYW1lKSkgewotICAgICAgICBh
dXRvKiBjb250YWluZXIgPSBzaGFkb3dBbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0
RnJlZSgpOwotICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBzaGFkb3dBbmNlc3Rvci0+Y29tcHV0
ZU5vZGVJbmRleCgpOwotICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1ha2VTaW1wbGVS
YW5nZShCb3VuZGFyeVBvaW50IHsgKmNvbnRhaW5lciwgb2Zmc2V0IH0pKTsKLSAgICB9Ci0KLSAg
ICBhdXRvIGZpcnN0UmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOwotICAgIEFTU0VSVChmaXJzdFJhbmdlKTsKLSAgICBpZiAoIWZpcnN0UmFuZ2UpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2UoKmZpcnN0UmFuZ2UpOworICAgIGF1dG8mIGZyYW1lID0gKnRoaXMtPmZy
YW1lKCk7CisgICAgaWYgKGF1dG8gc2hhZG93QW5jZXN0b3IgPSBzZWxlY3Rpb25TaGFkb3dBbmNl
c3RvcihmcmFtZSkpCisgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UobWFrZVNpbXBsZVJh
bmdlKCptYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGUoKnNoYWRvd0FuY2VzdG9yKSkpOworICAg
IHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKmZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZp
cnN0UmFuZ2UoKSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpyZW1vdmVBbGxSYW5nZXMoKQpA
QCAtMzI3LDUwICszMTIsMjIgQEAgdm9pZCBET01TZWxlY3Rpb246OnJlbW92ZUFsbFJhbmdlcygp
CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLmNsZWFyKCk7CiB9CiAKLXZvaWQgRE9NU2VsZWN0aW9u
OjphZGRSYW5nZShSYW5nZSYgcmFuZ2UpCit2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFu
Z2UmIGxpdmVSYW5nZSkKIHsKLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAg
YXV0byBmcmFtZSA9IG1ha2VSZWZQdHIodGhpcy0+ZnJhbWUoKSk7CiAgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKLQor
ICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobGl2ZVJhbmdlKTsKICAgICBhdXRvJiBz
ZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAgYXV0byBzZWxlY3RlZFJhbmdlID0g
c2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxl
Y3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29udGFpbmluZ1No
YWRvd1Jvb3QoKSkgewotICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVS
YW5nZShyYW5nZSkpOworCisgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7CisgICAgICAgIGlmICghc2VsZWN0ZWRS
YW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb250YWluaW5nU2hhZG93Um9vdCgpICYmIGludGVyc2Vj
dHMoKnNlbGVjdGVkUmFuZ2UsIHJhbmdlKSkKKyAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxl
Y3Rpb24odW5pb25SYW5nZSgqc2VsZWN0ZWRSYW5nZSwgcmFuZ2UpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gbm9ybWFsaXplZFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKHNl
bGVjdGVkUmFuZ2UpOwotICAgIGF1dG8gcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgKm5vcm1hbGl6ZWRSYW5nZSk7Ci0gICAgaWYgKCFy
ZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IC0x
KSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxlY3Rpb24u
IFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIHRoZSB0d28gcmFuZ2VzIGRvbid0IGludGVyc2VjdC4K
LSAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFS
VF9UT19FTkQsICpub3JtYWxpemVkUmFuZ2UpOwotICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNl
cHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAtMSkgewotICAgICAgICAg
ICAgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5E
LCAqbm9ybWFsaXplZFJhbmdlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlv
bigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewotICAgICAgICAgICAg
ICAgIC8vIFRoZSByYW5nZXMgaW50ZXJzZWN0LgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5t
b3ZlVG8obWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbigmcmFuZ2Uuc3RhcnRDb250YWluZXIo
KSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSksIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24oJm5v
cm1hbGl6ZWRSYW5nZS0+ZW5kQ29udGFpbmVyKCksIG5vcm1hbGl6ZWRSYW5nZS0+ZW5kT2Zmc2V0
KCkpLCBET1dOU1RSRUFNKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlIG5ldyByYW5nZSBjb250YWlucyB0aGUgb3JpZ2luYWwgcmFuZ2UuCi0gICAgICAgICAg
ICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdlIGRvbid0
IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxlY3Rpb24uIFdlIGRvbid0IGRvIGFueXRoaW5nIGlm
IHRoZSB0d28gcmFuZ2VzIGRvbid0IGludGVyc2VjdC4KLSAgICAgICAgcmVzdWx0ID0gcmFuZ2Uu
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICpub3JtYWxpemVkUmFu
Z2UpOwotICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCkgPCAxKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSByYW5nZS5jb21wYXJl
Qm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsICpub3JtYWxpemVkUmFuZ2UpOwotICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIHJhbmdl
IGNvbnRhaW5zIHRoZSBuZXcgcmFuZ2UuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNl
bGVjdGlvbihtYWtlU2ltcGxlUmFuZ2UoKm5vcm1hbGl6ZWRSYW5nZSkpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgcmFuZ2VzIGludGVyc2VjdC4KLSAgICAg
ICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24o
Jm5vcm1hbGl6ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgbm9ybWFsaXplZFJhbmdlLT5zdGFy
dE9mZnNldCgpKSwgbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbigmcmFuZ2UuZW5kQ29udGFp
bmVyKCksIHJhbmdlLmVuZE9mZnNldCgpKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihyYW5nZSk7CiB9CiAK
IHZvaWQgRE9NU2VsZWN0aW9uOjpkZWxldGVGcm9tRG9jdW1lbnQoKQpAQCAtMzkyLDQ1ICszNDks
MTkgQEAgdm9pZCBET01TZWxlY3Rpb246OmRlbGV0ZUZyb21Eb2N1bWVudCgpCiAKIGJvb2wgRE9N
U2VsZWN0aW9uOjpjb250YWluc05vZGUoTm9kZSYgbm9kZSwgYm9vbCBhbGxvd1BhcnRpYWwpIGNv
bnN0CiB7CisgICAgLy8gRklYTUU6IFRoaXMgYmVoYXZpb3IgZG9lcyBub3QgbWF0Y2ggd2hhdCB0
aGUgc2VsZWN0aW9uIEFQSSBzdGFuZGFyZCBzcGVjaWZpZXMuCisgICAgaWYgKG5vZGUuaXNUZXh0
Tm9kZSgpKQorICAgICAgICBhbGxvd1BhcnRpYWwgPSB0cnVlOworCiAgICAgYXV0byogZnJhbWUg
PSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKLSAgICBpZiAoZnJh
bWUtPmRvY3VtZW50KCkgIT0gJm5vZGUuZG9jdW1lbnQoKSB8fCBzZWxlY3Rpb24uaXNOb25lKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZjxOb2RlPiBwcm90ZWN0ZWROb2RlKG5v
ZGUpOwotICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8
IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9
IG5vZGUucGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50Tm9kZSB8fCAhcGFyZW50Tm9kZS0+
aXNDb25uZWN0ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIG5vZGVJ
bmRleCA9IG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwotCi0gICAgYXV0byBzdGFydHNSZXN1bHQg
PSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBhcmVudE5vZGUsIG5vZGVJbmRleCwgJnNl
bGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0T2Zmc2V0
KCkpOwotICAgIGlmIChzdGFydHNSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8gZW5kc1Jlc3VsdCA9IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQ
b2ludHMocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgJnNlbGVjdGVkUmFuZ2UtPmVuZENvbnRh
aW5lcigpLCBzZWxlY3RlZFJhbmdlLT5lbmRPZmZzZXQoKSk7Ci0gICAgQVNTRVJUKCFlbmRzUmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKTsKLSAgICBib29sIGlzTm9kZUZ1bGx5U2VsZWN0ZWQgPSAhc3Rh
cnRzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHN0YXJ0c1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFs
dWUoKSA+PSAwCi0gICAgICAgICYmICFlbmRzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGVuZHNS
ZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMDsKLSAgICBpZiAoaXNOb2RlRnVsbHlTZWxl
Y3RlZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvIHN0YXJ0RW5kUmVzdWx0ID0g
UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhwYXJlbnROb2RlLCBub2RlSW5kZXgsICZzZWxl
Y3RlZFJhbmdlLT5lbmRDb250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+ZW5kT2Zmc2V0KCkpOwot
ICAgIEFTU0VSVCghc3RhcnRFbmRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpOwotICAgIGF1dG8gZW5k
U3RhcnRSZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBhcmVudE5vZGUsIG5v
ZGVJbmRleCArIDEsICZzZWxlY3RlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBzZWxlY3RlZFJh
bmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBBU1NFUlQoIWVuZFN0YXJ0UmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKTsKLSAgICBib29sIGlzTm9kZUZ1bGx5VW5zZWxlY3RlZCA9ICghc3RhcnRFbmRSZXN1
bHQuaGFzRXhjZXB0aW9uKCkgJiYgc3RhcnRFbmRSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkg
PiAwKQotICAgICAgICB8fCAoIWVuZFN0YXJ0UmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGVuZFN0
YXJ0UmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCk7Ci0gICAgaWYgKGlzTm9kZUZ1bGx5
VW5zZWxlY3RlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGFsbG93UGFy
dGlhbCB8fCBub2RlLmlzVGV4dE5vZGUoKTsKKyAgICByZXR1cm4gYWxsb3dQYXJ0aWFsID8gaW50
ZXJzZWN0cygqc2VsZWN0ZWRSYW5nZSwgbm9kZSkgOiBjb250YWlucygqc2VsZWN0ZWRSYW5nZSwg
bm9kZSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpzZWxlY3RBbGxDaGlsZHJlbihOb2RlJiBu
b2RlKQpAQCAtNDgzLDExICs0MTQsNyBAQCB1bnNpZ25lZCBET01TZWxlY3Rpb246OnNoYWRvd0Fk
anVzdGVkT2Zmc2V0KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKIGJvb2wgRE9NU2Vs
ZWN0aW9uOjppc1ZhbGlkRm9yUG9zaXRpb24oTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBhdXRv
KiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJu
ICZub2RlLT5kb2N1bWVudCgpID09IGZyYW1lLT5kb2N1bWVudCgpOworICAgIHJldHVybiBmcmFt
ZSAmJiAoIW5vZGUgfHwgJm5vZGUtPmRvY3VtZW50KCkgPT0gZnJhbWUtPmRvY3VtZW50KCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwCmluZGV4IGY5MmFiM2JlNjQwOGJlYjE2Njc0M2U1ODNmM2NjYjgyZDRhOWVkNzMuLjNj
YzJjZWJhYzVhODAxZjM5Yzg3YWEzMGFmOTAyOWVmYWVmYzI5ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0xNTQsNyArMTU0LDcgQEAgc3RhdGljIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKGNvbnN0IERyYWdE
YXRhJiBkcmEKICAgICAgICAgICAgIFN0cmluZyB0aXRsZTsKICAgICAgICAgICAgIFN0cmluZyB1
cmwgPSBkcmFnRGF0YS5hc1VSTChEcmFnRGF0YTo6RG9Ob3RDb252ZXJ0RmlsZW5hbWVzLCAmdGl0
bGUpOwogICAgICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKTsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGNvbnRleHQuc3RhcnQuZG9jdW1lbnQoKTsK
ICAgICAgICAgICAgICAgICBhdXRvIGFuY2hvciA9IEhUTUxBbmNob3JFbGVtZW50OjpjcmVhdGUo
ZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgIGFuY2hvci0+c2V0SHJlZih1cmwpOwogICAgICAg
ICAgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpIHsKQEAgLTc3NCwxNyArNzc0LDEzIEBAIEVs
ZW1lbnQqIERyYWdDb250cm9sbGVyOjpkcmFnZ2FibGVFbGVtZW50KGNvbnN0IEZyYW1lKiBzb3Vy
Y2VGcmFtZSwgRWxlbWVudCogc3RhCiAgICAgc3RhdGUudHlwZSA9IHNvdXJjZUZyYW1lLT5zZWxl
Y3Rpb24oKS5jb250YWlucyhkcmFnT3JpZ2luKSA/IERyYWdTb3VyY2VBY3Rpb246OlNlbGVjdGlv
biA6IE9wdGlvblNldDxEcmFnU291cmNlQWN0aW9uPih7IH0pOwogICAgIGlmICghc3RhcnRFbGVt
ZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VM
RU1FTlQpCiAgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IGVuY2xvc2luZ0F0dGFjaG1lbnRFbGVt
ZW50KCpzdGFydEVsZW1lbnQpKSB7Ci0gICAgICAgIGF1dG8gc2VsZWN0aW9uID0gc291cmNlRnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBhdXRvJiBzZWxlY3Rpb24gPSBz
b3VyY2VGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgIGJvb2wgaXNTaW5n
bGVBdHRhY2htZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLnN0YXJ0KCkgPT0gUG9zaXRpb24oYXR0
YWNobWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpICYmIHNlbGVj
dGlvbi5lbmQoKSA9PSBQb3NpdGlvbihhdHRhY2htZW50LmdldCgpLCBQb3NpdGlvbjo6UG9zaXRp
b25Jc0FmdGVyQW5jaG9yKTsKLSAgICAgICAgYm9vbCBpc0F0dGFjaG1lbnRFbGVtZW50SW5DdXJy
ZW50U2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAgICAgYXV0byBjb21wYXJl
UmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZU5vZGUoKmF0
dGFjaG1lbnQpOwotICAgICAgICAgICAgaXNBdHRhY2htZW50RWxlbWVudEluQ3VycmVudFNlbGVj
dGlvbiA9ICFjb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmVSZXN1bHQucmVs
ZWFzZVJldHVyblZhbHVlKCkgPT0gUmFuZ2U6Ok5PREVfSU5TSURFOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFpc0F0dGFjaG1lbnRFbGVtZW50SW5DdXJyZW50U2VsZWN0aW9uIHx8IGlzU2lu
Z2xlQXR0YWNobWVudFNlbGVjdGlvbikgeworICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBz
ZWxlY3Rpb24uZmlyc3RSYW5nZSgpOworICAgICAgICBpZiAoaXNTaW5nbGVBdHRhY2htZW50U2Vs
ZWN0aW9uIHx8ICFzZWxlY3RlZFJhbmdlIHx8ICFjb250YWlucygqc2VsZWN0ZWRSYW5nZSwgKmF0
dGFjaG1lbnQpKSB7CiAgICAgICAgICAgICBzdGF0ZS50eXBlID0gRHJhZ1NvdXJjZUFjdGlvbjo6
QXR0YWNobWVudDsKICAgICAgICAgICAgIHJldHVybiBhdHRhY2htZW50LmdldCgpOwogICAgICAg
ICB9CkBAIC0xNDcxLDggKzE0NjcsNyBAQCB2b2lkIERyYWdDb250cm9sbGVyOjppbnNlcnREcm9w
cGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0IFZlY3RvcjxJbnRTaXplPgogCiAgICAg
VmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVtZW50Pj4gcGxhY2Vob2xkZXJzOwogICAgIGZvciAoYXV0
byYgcGxhY2Vob2xkZXIgOiBkZXNjZW5kYW50c09mVHlwZTxIVE1MSW1hZ2VFbGVtZW50Pihkb3du
Y2FzdDxDb250YWluZXJOb2RlPigqY29udGFpbmVyKSkpIHsKLSAgICAgICAgYXV0byBpbnRlcnNl
Y3RzTm9kZSA9IGNyZWF0ZUxpdmVSYW5nZSgqaW5zZXJ0ZWRDb250ZW50UmFuZ2UpLT5pbnRlcnNl
Y3RzTm9kZShwbGFjZWhvbGRlcik7Ci0gICAgICAgIGlmICghaW50ZXJzZWN0c05vZGUuaGFzRXhj
ZXB0aW9uKCkgJiYgaW50ZXJzZWN0c05vZGUucmV0dXJuVmFsdWUoKSkKKyAgICAgICAgaWYgKGlu
dGVyc2VjdHMoKmluc2VydGVkQ29udGVudFJhbmdlLCBwbGFjZWhvbGRlcikpCiAgICAgICAgICAg
ICBwbGFjZWhvbGRlcnMuYXBwZW5kKHBsYWNlaG9sZGVyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAzMDA1ZTBjMmFlZTZiYTcyMTA4NTA5OTMxOTlkMWM5
NDNiZTgzZjBhLi5iNDU1YjFkZWI2ZTQ5MTVlNGU5MWEwZTU1MTBhNzMwMTEzMTNmMjRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yNzQxLDggKzI3NDEsNyBAQCBib29s
IEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50
VHlwZSwgTm9kZSogdGFyZ2V0TgogICAgIC8vIHdpbGwgc2V0IGEgc2VsZWN0aW9uIGluc2lkZSBp
dCwgd2hpY2ggd2lsbCBhbHNvIHNldCB0aGUgZm9jdXNlZCBlbGVtZW50LgogICAgIGlmIChlbGVt
ZW50ICYmIG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIGlmIChhdXRv
IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2Up
LT5jb21wYXJlTm9kZSgqZWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNl
cHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPT0gUmFuZ2U6Ok5PREVfSU5T
SURFICYmIGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNl
ZEVsZW1lbnQoKSkpCisgICAgICAgICAgICBpZiAoY29udGFpbnMoKnJhbmdlLCAqZWxlbWVudCkg
JiYgZWxlbWVudC0+aXNEZXNjZW5kYW50T2YobV9mcmFtZS5kb2N1bWVudCgpLT5mb2N1c2VkRWxl
bWVudCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDQ5NzI5ZDA5Njk3ODAxMWU4ZTc1MGFhMzg0OGI2YmMzNDAw
ZTMwNjEuLmE3NzgxMGIwMjBiZjVhOGQ4NTIyY2FjOGIyNWIzNjkyNTg4MzI1OTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcApAQCAtNzMwLDE5ICs3MzAsMTkgQEAgYXV0byBQYWdlOjpmaW5kVGV4dE1hdGNo
ZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIGwK
IAogICAgIGlmIChmcmFtZVdpdGhTZWxlY3Rpb24pIHsKICAgICAgICAgcmVzdWx0LmluZGV4Rm9y
U2VsZWN0aW9uID0gTm9NYXRjaEFmdGVyVXNlclNlbGVjdGlvbjsKLSAgICAgICAgYXV0byBzZWxl
Y3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5m
aXJzdFJhbmdlKCk7CisgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9ICpmcmFtZVdpdGhTZWxl
Y3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICAgICAgaWYg
KG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkgewogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IHJlc3VsdC5yYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBjb21wYXJpc29uUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdl
KHJlc3VsdC5yYW5nZXNbaSAtIDFdKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb21wYXJpc29u
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmlzb25SZXN1bHQucmV0dXJuVmFsdWUoKSA+
IDApIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2VlbXMgbGlrZSB0aGlzIHNob3VsZCBi
ZSBpc19ndGVxIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIHNhbWUgc3RyaW5nIGZvdW5kIHR3aWNl
IGluIGEgcm93LgorICAgICAgICAgICAgICAgIGlmIChpc19ndChkb2N1bWVudE9yZGVyKHNlbGVj
dGVkUmFuZ2Uuc3RhcnQsIHJlc3VsdC5yYW5nZXNbaSAtIDFdLmVuZCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbiA9IGkgLSAxOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJlc3VsdC5y
YW5nZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb21w
YXJpc29uUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdC5y
YW5nZXNbaV0pKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmlzb25SZXN1bHQuaGFzRXhj
ZXB0aW9uKCkgJiYgY29tcGFyaXNvblJlc3VsdC5yZXR1cm5WYWx1ZSgpIDwgMCkgeworICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBTZWVtcyBsaWtlIHRoaXMgc2hvdWxkIGJlIGlzX2x0ZXEgdG8g
Y29ycmVjdGx5IGhhbmRsZSB0aGUgc2FtZSBzdHJpbmcgZm91bmQgdHdpY2UgaW4gYSByb3cuCisg
ICAgICAgICAgICAgICAgaWYgKGlzX2x0KGRvY3VtZW50T3JkZXIoc2VsZWN0ZWRSYW5nZS5lbmQs
IHJlc3VsdC5yYW5nZXNbaV0uc3RhcnQpKSkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHQu
aW5kZXhGb3JTZWxlY3Rpb24gPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CkBAIC03NjMsMTEgKzc2MywxMSBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4g
UGFnZTo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9uYWw8
UwogICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgaWYgKHJlZmVyZW5jZVJhbmdlICYmIHJlZmVyZW5jZVJhbmdlLT5zdGFydC5jb250
YWluZXItPmRvY3VtZW50KCkucGFnZSgpICE9IHRoaXMpCisgICAgaWYgKHJlZmVyZW5jZVJhbmdl
ICYmIHJlZmVyZW5jZVJhbmdlLT5zdGFydC5kb2N1bWVudCgpLnBhZ2UoKSAhPSB0aGlzKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgQ2FuV3JhcCBjYW5XcmFwID0gb3B0aW9u
cy5jb250YWlucyhXcmFwQXJvdW5kKSA/IENhbldyYXA6OlllcyA6IENhbldyYXA6Ok5vOwotICAg
IEZyYW1lKiBmcmFtZSA9IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0LmNv
bnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1haW5GcmFtZSgpOworICAgIEZyYW1lKiBm
cmFtZSA9IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCku
ZnJhbWUoKSA6ICZtYWluRnJhbWUoKTsKICAgICBGcmFtZSogc3RhcnRGcmFtZSA9IGZyYW1lOwog
ICAgIGRvIHsKICAgICAgICAgaWYgKGF1dG8gcmVzdWx0UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCku
cmFuZ2VPZlN0cmluZyh0YXJnZXQsIGZyYW1lID09IHN0YXJ0RnJhbWUgPyByZWZlcmVuY2VSYW5n
ZSA6IFdURjo6bnVsbG9wdCwgb3B0aW9ucyAtIFdyYXBBcm91bmQpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KaW5kZXggMmVm
YzQxZTNkNDI3MzI2NTkyN2FkZTViOGJiYTk2YTc3MTIzNjk4NS4uZjE2ZWJjNTg2YzdhN2MwNDE4
ZjQ3ZWY5NGM2NTU2MzI3OGI5OTViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9t
YWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC02MzAsNyArNjMwLDcgQEAgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0KiBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpmaW5kVGVsZXBob25lTnUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBmb3Ig
KGF1dG8mIGhpZ2hsaWdodCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgewotICAgICAgICBpZiAo
aGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlICYmIGNy
ZWF0ZUxpdmVSYW5nZShoaWdobGlnaHQtPnJhbmdlKCkpLT5jb250YWlucyhjcmVhdGVMaXZlUmFu
Z2UoKnNlbGVjdGlvblJhbmdlKSkpCisgICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSBI
aWdobGlnaHQ6OlRlbGVwaG9uZU51bWJlclR5cGUgJiYgY29udGFpbnMoaGlnaGxpZ2h0LT5yYW5n
ZSgpLCAqc2VsZWN0aW9uUmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIGhpZ2hsaWdodC5nZXQo
KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5k
ZXggYjZlYTE1NTMwNzk3N2Q5ZTU3ZDI0YTgwN2UwZjI2NzI4ZTljZWRiMi4uOTZiZGY1NGU1YzNh
MjMzNTFkYWE5YTYxMjFiMTkwNzllNzNjNDllNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKQEAgLTE5NzUsNyArMTk3NSw3IEBAIHN0YXRpYyBWZWN0b3I8Rmxv
YXRSZWN0PiBib3JkZXJBbmRUZXh0UmVjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBDb29y
ZGluYXRlCiB7CiAgICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHM7CiAKLSAgICByYW5nZS5zdGFy
dC5jb250YWluZXItPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKIAogICAgIGJvb2wgdXNlVmlzaWJsZUJvdW5kcyA9IGJlaGF2aW9y
LmNvbnRhaW5zKFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlVzZVZpc2libGVC
b3VuZHMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggOGNmNDI4N2Uw
YWJlNjMzMmFkNDQyNTI4NWM3MjJmYWY5NGIzNjBmZi4uNWZhMDE1OGU1NjAyNGQ1NzNmMWM1NDcx
Y2YyNDIxOGQ2YzEyMDUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAt
MjE2MSwyNyArMjE2MSw0NSBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZShF
bGVtZW50JiBzY29wZSwgY29uc3QgUmFuZ2UmIHJhbmdlKQogICAgIHJldHVybiBjbGFtcFRvPHVu
c2lnbmVkPihjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50
cyhzY29wZSksIG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpLmxlbmd0aCk7CiB9CiAKLVN0cmluZyBJ
bnRlcm5hbHM6OnJhbmdlQXNUZXh0KGNvbnN0IFJhbmdlJiByYW5nZSkKK1N0cmluZyBJbnRlcm5h
bHM6OnJhbmdlQXNUZXh0KGNvbnN0IFJhbmdlJiBsaXZlUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIHJh
bmdlLnRleHQoKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGxpdmVSYW5nZSk7
CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKKyAgICByZXR1cm4g
cGxhaW5UZXh0KHJhbmdlKTsKIH0KIAotU3RyaW5nIEludGVybmFsczo6cmFuZ2VBc1RleHRVc2lu
Z0JhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSYgcmFuZ2UpCisvLyBGSVhNRTogTW92
ZSB0aGlzIHRvIFN0cmluZ0NvbmNhdGVuYXRlLmguCitzdGF0aWMgU3RyaW5nIGpvaW4oVmVjdG9y
PFN0cmluZz4mJiBzdHJpbmdzKQogewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgZm9yIChTaW1w
bGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKG1ha2VTaW1wbGVS
YW5nZShyYW5nZSkpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRlcmF0
b3IuYWR2YW5jZSgpKQotICAgICAgICByZXN1bHQuaW5zZXJ0KGJhY2t3YXJkc0l0ZXJhdG9yLnRl
eHQoKS50b1N0cmluZygpLCAwKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIFN0cmluZ0J1aWxk
ZXIgcmVzdWx0OworICAgIGZvciAoYXV0byYgc3RyaW5nIDogc3RyaW5ncykKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmco
KTsKK30KKworU3RyaW5nIEludGVybmFsczo6cmFuZ2VBc1RleHRVc2luZ0JhY2t3YXJkc1RleHRJ
dGVyYXRvcihjb25zdCBSYW5nZSYgbGl2ZVJhbmdlKQoreworICAgIGF1dG8gcmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2UobGl2ZVJhbmdlKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0
ZUxheW91dCgpOworICAgIFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7CisgICAgZm9yIChTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKHJhbmdlKTsgIWJhY2t3
YXJkc0l0ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKKyAgICAg
ICAgc3RyaW5ncy5hcHBlbmQoYmFja3dhcmRzSXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCkpOwor
ICAgIHN0cmluZ3MucmV2ZXJzZSgpOworICAgIHJldHVybiBqb2luKFdURk1vdmUoc3RyaW5ncykp
OwogfQogCi1SZWY8UmFuZ2U+IEludGVybmFsczo6c3VicmFuZ2UoUmFuZ2UmIHJhbmdlLCB1bnNp
Z25lZCByYW5nZUxvY2F0aW9uLCB1bnNpZ25lZCByYW5nZUxlbmd0aCkKK1JlZjxSYW5nZT4gSW50
ZXJuYWxzOjpzdWJyYW5nZShSYW5nZSYgbGl2ZVJhbmdlLCB1bnNpZ25lZCByYW5nZUxvY2F0aW9u
LCB1bnNpZ25lZCByYW5nZUxlbmd0aCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJl
c29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpLCB7IHJhbmdlTG9jYXRp
b24sIHJhbmdlTGVuZ3RoIH0pKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGxp
dmVSYW5nZSk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKKyAg
ICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShyYW5nZSwgeyBy
YW5nZUxvY2F0aW9uLCByYW5nZUxlbmd0aCB9KSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gSW50ZXJu
YWxzOjpyYW5nZU9mU3RyaW5nTmVhckxvY2F0aW9uKGNvbnN0IFJhbmdlJiByYW5nZSwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCB1bnNpZ25lZCB0YXJnZXRPZmZzZXQpCitSZWZQdHI8UmFuZ2U+IEludGVy
bmFsczo6cmFuZ2VPZlN0cmluZ05lYXJMb2NhdGlvbihjb25zdCBSYW5nZSYgbGl2ZVJhbmdlLCBj
b25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIHRhcmdldE9mZnNldCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlTGl2ZVJhbmdlKGZpbmRDbG9zZXN0UGxhaW5UZXh0KG1ha2VTaW1wbGVSYW5nZShyYW5n
ZSksIHRleHQsIHsgfSwgdGFyZ2V0T2Zmc2V0KSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1w
bGVSYW5nZShsaXZlUmFuZ2UpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5
b3V0KCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShmaW5kQ2xvc2VzdFBsYWluVGV4dChy
YW5nZSwgdGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpKTsKIH0KIAogI2lmICFQTEFURk9STShNQUMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlLmNwcAppbmRleCAwNjc4Y2Q0
M2QzNjFjNDg3ZDZkOGZlYmNmNGNlNmRhODY2N2VjNzg3Li45YzcxZTRmZTM3NTI0M2FkYTE3Yjcy
OWM3MjY0NDUxM2ZhNWM2MDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01S
YW5nZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RPTUV4Y2VwdGlv
bi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pT
RXhlY1N0YXRlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbmNsdWRl
ICJXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERP
TU5vZGVQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgpAQCAtMzU1LDkg
KzM1Niw3IEBAIGdzaG9ydCB3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfYm91bmRhcnlfcG9pbnRz
KFdlYktpdERPTVJhbmdlKiBzZWxmLCBndXNob3J0IGhvCiAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgMCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19SQU5HRShzb3VyY2VSYW5nZSksIDApOwogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJDb3JlOjpSYW5nZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpSYW5nZSogY29udmVydGVkU291
cmNlUmFuZ2UgPSBXZWJLaXQ6OmNvcmUoc291cmNlUmFuZ2UpOwotICAgIGF1dG8gcmVzdWx0ID0g
aXRlbS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MoaG93LCAqY29udmVydGVkU291
cmNlUmFuZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gV2ViS2l0Ojpjb3JlKHNlbGYpLT5jb21wYXJl
Qm91bmRhcnlQb2ludHMoaG93LCAqV2ViS2l0Ojpjb3JlKHNvdXJjZVJhbmdlKSk7CiAgICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICBhdXRvIGRlc2NyaXB0aW9uID0gV2Vi
Q29yZTo6RE9NRXhjZXB0aW9uOjpkZXNjcmlwdGlvbihyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
LmNvZGUoKSk7CiAgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24ubGVnYWN5Q29kZSwgZGVzY3JpcHRp
b24ubmFtZSk7CkBAIC01MDgsMTUgKzUwNyw3IEBAIGdib29sZWFuIHdlYmtpdF9kb21fcmFuZ2Vf
aW50ZXJzZWN0c19ub2RlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByCiAg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgRkFMU0Up
OwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSwg
RkFMU0UpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCBGQUxT
RSk7Ci0gICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
V2ViQ29yZTo6Tm9kZSogY29udmVydGVkUmVmTm9kZSA9IFdlYktpdDo6Y29yZShyZWZOb2RlKTsK
LSAgICBhdXRvIHJlc3VsdCA9IGl0ZW0tPmludGVyc2VjdHNOb2RlKCpjb252ZXJ0ZWRSZWZOb2Rl
KTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGF1dG8gZGVzY3Jp
cHRpb24gPSBXZWJDb3JlOjpET01FeGNlcHRpb246OmRlc2NyaXB0aW9uKHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCkuY29kZSgpKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5sZWdhY3lDb2Rl
LCBkZXNjcmlwdGlvbi5uYW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworICAgIHJldHVybiBXZWJLaXQ6OmNv
cmUoc2VsZiktPmludGVyc2VjdHNOb2RlKCpXZWJLaXQ6OmNvcmUocmVmTm9kZSkpOwogfQogCiBn
c2hvcnQgd2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX3BvaW50KFdlYktpdERPTVJhbmdlKiBzZWxm
LCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBnbG9uZyBvZmZzZXQsIEdFcnJvcioqIGVycm9yKQpA
QCAtNjMyLDkgKzYyMyw5IEBAIGdjaGFyKiB3ZWJraXRfZG9tX3JhbmdlX2dldF90ZXh0KFdlYktp
dERPTVJhbmdlKiBzZWxmKQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYp
LCAwKTsKLSAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50ZXh0KCkpOwotICAg
IHJldHVybiByZXN1bHQ7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqV2ViS2l0
Ojpjb3JlKHNlbGYpKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgp
OworICAgIHJldHVybiBjb252ZXJ0VG9VVEY4U3RyaW5nKHBsYWluVGV4dChyYW5nZSkpOwogfQog
CiBHX0dOVUNfRU5EX0lHTk9SRV9ERVBSRUNBVElPTlM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5t
bQppbmRleCBjZjI2OWExY2RkMzAyYTQzYjk3YWIyYjYwMDBjMGFkMzAyODBlODIyLi4zY2FkMmM1
ZTgxMGJmNGJiNjUzYTRkNDk1NmMwNzFkNWU4MmVhODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFu
Z2UubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIldLQnVuZGxlQVBJQ2FzdC5oIgogI2lt
cG9ydCAiV0tET01JbnRlcm5hbHMuaCIKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Zpc2libGVV
bml0cy5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKQEAgLTQ5LDEyICs1
MCw3IEBAIC0gKGlkKV9pbml0V2l0aEltcGw6KFdlYkNvcmU6OlJhbmdlKilpbXBsCiAKIC0gKGlk
KWluaXRXaXRoRG9jdW1lbnQ6KFdLRE9NRG9jdW1lbnQgKilkb2N1bWVudAogewotICAgIGF1dG8g
cmFuZ2UgPSBXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKCpXZWJLaXQ6OnRvV2ViQ29yZURvY3VtZW50
KGRvY3VtZW50KSk7Ci0gICAgc2VsZiA9IFtzZWxmIF9pbml0V2l0aEltcGw6cmFuZ2UucHRyKCld
OwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxm
OworICAgIHJldHVybiBbc2VsZiBfaW5pdFdpdGhJbXBsOldlYkNvcmU6OlJhbmdlOjpjcmVhdGUo
KldlYktpdDo6dG9XZWJDb3JlRG9jdW1lbnQoZG9jdW1lbnQpKS5wdHIoKV07CiB9CiAKIC0gKHZv
aWQpZGVhbGxvYwpAQCAtMTE4LDcgKzExNCw5IEBAIC0gKE5TSW50ZWdlcillbmRPZmZzZXQKIAog
LSAoTlNTdHJpbmcgKil0ZXh0CiB7Ci0gICAgcmV0dXJuIF9pbXBsLT50ZXh0KCk7CisgICAgYXV0
byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqX2ltcGwpOworICAgIHJhbmdlLnN0YXJ0LmRvY3Vt
ZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIHBsYWluVGV4dChyYW5nZSk7CiB9CiAK
IC0gKEJPT0wpaXNDb2xsYXBzZWQKQEAgLTEyOCw4ICsxMjYsOSBAQCAtIChCT09MKWlzQ29sbGFw
c2VkCiAKIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKIHsKLSAgICBfaW1wbC0+b3duZXJEb2N1bWVu
dCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiBj
cmVhdGVOU0FycmF5KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMobWFr
ZVNpbXBsZVJhbmdlKCpfaW1wbCkpKS5hdXRvcmVsZWFzZSgpOworICAgIGF1dG8gcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UoKl9pbXBsKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJldHVybiBjcmVhdGVOU0Fy
cmF5KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKS5hdXRv
cmVsZWFzZSgpOwogfQogCiAtIChXS0RPTVJhbmdlICopcmFuZ2VCeUV4cGFuZGluZ1RvV29yZEJv
dW5kYXJ5QnlDaGFyYWN0ZXJzOihOU1VJbnRlZ2VyKWNoYXJhY3RlcnMgaW5EaXJlY3Rpb246KFdL
RE9NUmFuZ2VEaXJlY3Rpb24pZGlyZWN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlLmNwcAppbmRleCA2M2YzYzc4NmU2ZmIyMTVjOWEyZjRlMjU5ZmFjOWU2
MTFiNmRiOGIyLi41YTI2ZTUzM2ZjMTVmZWZmMjVlZDgwYzcyN2QxM2UwYTc0ZWNkYmFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKQEAgLTQ0LDYg
KzQ0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlU2VsZWN0
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KQEAgLTk3LDIzICs5OCwzMiBAQCBSYW5nZSYgSW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZTo6Y29yZVJhbmdlKCkgY29uc3QKIAogUmVmPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4g
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6ZG9jdW1lbnQoKQogewotICAgIHJldHVybiBJbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKG1fcmFuZ2UtPm93bmVyRG9jdW1lbnQo
KSk7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUobV9y
YW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpKTsKIH0KIAogV2ViQ29yZTo6SW50UmVj
dCBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpib3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5h
dGVzKCkgY29uc3QKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBtX3JhbmdlLT5vd25lckRvY3VtZW50
KCkuZnJhbWUoKTsKLSAgICByZXR1cm4gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhl
bmNsb3NpbmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVjdDo6
YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpKSkpKTsK
KyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpOworICAgIGF1dG8gZnJh
bWUgPSByYW5nZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlm
ICghdmlldykKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNU
b1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRl
ck9iamVjdDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMocmFuZ2UpKSkpOwogfQogCiBSZWZQ
dHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25h
cHNob3RPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQgPSBt
X3JhbmdlLT5vd25lckRvY3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gb3duZXJEb2N1bWVu
dC5mcmFtZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobV9yYW5nZSk7CisK
KyAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZihyYW5nZS5zdGFydC5kb2N1bWVudCgpKTsKKwor
ICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKGRvY3VtZW50LT5mcmFtZSgpKTsKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBhdXRvIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7
CiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMjEs
MTMgKzEzMSwxMSBAQCBSZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6
OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9wdGlvbgogICAgIExvY2FsRGVmYXVsdFN5
c3RlbUFwcGVhcmFuY2UgbG9jYWxBcHBlYXJhbmNlKGZyYW1lVmlldy0+dXNlRGFya0FwcGVhcmFu
Y2UoKSk7CiAjZW5kaWYKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7Ci0KICAg
ICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVS
YW5nZShtX3JhbmdlKSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihyYW5n
ZSk7CiAKICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IChvcHRpb25zICYgU25hcHNob3RPcHRpb25z
RXhjbHVkZURldmljZVNjYWxlRmFjdG9yKSA/IDEgOiBmcmFtZS0+cGFnZSgpLT5kZXZpY2VTY2Fs
ZUZhY3RvcigpOwotICAgIEludFJlY3QgcGFpbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh1bmlv
blJlY3RJZ25vcmluZ1plcm9SZWN0cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9yZGVyQW5kVGV4
dFJlY3RzKG1ha2VTaW1wbGVSYW5nZShtX3JhbmdlKSkpKTsKKyAgICBJbnRSZWN0IHBhaW50UmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QodW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMoUmVuZGVyT2Jq
ZWN0OjphYnNvbHV0ZUJvcmRlckFuZFRleHRSZWN0cyhyYW5nZSkpKTsKICAgICBJbnRTaXplIGJh
Y2tpbmdTdG9yZVNpemUgPSBwYWludFJlY3Quc2l6ZSgpOwogICAgIGJhY2tpbmdTdG9yZVNpemUu
c2NhbGUoc2NhbGVGYWN0b3IpOwogCkBAIC0xNTUsNyArMTYzLDcgQEAgUmVmUHRyPFdlYkltYWdl
PiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpyZW5kZXJlZEltYWdlKFNuYXBzaG90T3B0aW9u
cyBvcHRpb24KICAgICAgICAgcGFpbnRCZWhhdmlvci5hZGQoUGFpbnRCZWhhdmlvcjo6Rm9yY2VX
aGl0ZVRleHQpOwogCiAgICAgZnJhbWVWaWV3LT5zZXRQYWludEJlaGF2aW9yKHBhaW50QmVoYXZp
b3IpOwotICAgIG93bmVyRG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CisgICAgZG9jdW1lbnQtPnVw
ZGF0ZUxheW91dCgpOwogCiAgICAgZnJhbWVWaWV3LT5wYWludCgqZ3JhcGhpY3NDb250ZXh0LCBw
YWludFJlY3QpOwogICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihvbGRQYWludEJlaGF2
aW9yKTsKQEAgLTE2Nyw3ICsxNzUsOSBAQCBSZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9wdGlvbgogCiBTdHJp
bmcgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6dGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fcmFuZ2UtPnRleHQoKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1fcmFu
Z2UpOworICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0
dXJuIHBsYWluVGV4dChyYW5nZSk7CiB9CiAKIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlPiBjcmVhdGVIYW5kbGUoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBy
YW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcAppbmRleCAyYTU3ZmQyMDllNjM1NzBiNzM4OTIzZjBiNTlmYjNjY2RiMmY0ZDQ0
Li5iOGMwN2I4YzI1NDA2MmRhZmJmZDNjYzY4NDIyNzFmYWRmNzYxMzI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC0z
MDUsNyArMzA1LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Y2go
dWludDMyX3QgbWF0Y2hJbmRleCkKIHsKICAgICBpZiAobWF0Y2hJbmRleCA+PSBtX2ZpbmRNYXRj
aGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEZyYW1lKiBmcmFtZSA9IG1fZmluZE1h
dGNoZXNbbWF0Y2hJbmRleF0uc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCk7Cisg
ICAgRnJhbWUqIGZyYW1lID0gbV9maW5kTWF0Y2hlc1ttYXRjaEluZGV4XS5zdGFydC5kb2N1bWVu
dCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMzYs
NyArMzM2LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6c2VsZWN0RmluZE1hdGNoKHVpbnQzMl90
IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1hdGNoSW5kZXggPj0gbV9maW5kTWF0Y2hlcy5zaXpl
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBGcmFtZSogZnJhbWUgPSBtX2ZpbmRNYXRjaGVzW21h
dGNoSW5kZXhdLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIEZyYW1l
KiBmcmFtZSA9IG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0uc3RhcnQuZG9jdW1lbnQoKS5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICBmcmFtZS0+c2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcApp
bmRleCBmOTY0MTFhMTE2MDc2ODViMGZiZjQ5ZjEwOWRkYzU4MThjMTUyYjI3Li5iZjdhYzY2OTkx
ZGYzNmY0ZGFhYTAyOTY0YjA1NDVmZjFhOTU5OTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcApAQCAtMTA5LDcgKzEw
OSw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUs
IEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgICAgIGF1dG8gc3Vycm91bmRpbmdTdGFy
dCA9IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQoc2VsZWN0aW9uU3RhcnQpOwogICAgICAgICBhdXRv
IHN1cnJvdW5kaW5nUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3Vycm91bmRpbmdTdGFydCwgZW5k
T2ZFZGl0YWJsZUNvbnRlbnQoc2VsZWN0aW9uU3RhcnQpKTsKICAgICAgICAgYXV0byBjb21wb3Np
dGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwotICAgICAgICBp
ZiAoc3Vycm91bmRpbmdSYW5nZSAmJiBjb21wb3NpdGlvblJhbmdlICYmIGNyZWF0ZUxpdmVSYW5n
ZShzdXJyb3VuZGluZ1JhbmdlKS0+Y29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlv
blJhbmdlKS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKHN1cnJvdW5kaW5nUmFuZ2UgJiYgY29tcG9z
aXRpb25SYW5nZSAmJiBjb250YWlucygqc3Vycm91bmRpbmdSYW5nZSwgKmNvbXBvc2l0aW9uUmFu
Z2UpKSB7CiAgICAgICAgICAgICBhdXRvIGJlZm9yZVRleHQgPSBwbGFpblRleHQoeyBzdXJyb3Vu
ZGluZ1JhbmdlLT5zdGFydCwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQgfSk7CiAgICAgICAgICAg
ICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHQgPSBiZWZvcmVUZXh0ICsgcGxhaW5U
ZXh0KHsgY29tcG9zaXRpb25SYW5nZS0+ZW5kLCBzdXJyb3VuZGluZ1JhbmdlLT5lbmQgfSk7CiAg
ICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRDdXJzb3JQb3NpdGlv
biA9IGJlZm9yZVRleHQubGVuZ3RoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGZmOTExNDBkNzgwZjE3NjQ5MmFlYjU4
MmRjNDY4ZmQyMWQ3OTU2YWIuLmYyMTJmODcxYTJiYjdmM2I0NTNmYmExNjVlMDk1ODVmM2NiZjk4
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCkBAIC00MjAwLDcgKzQyMDAsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1
bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwog
CiAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
OwogICAgIGF1dG8gcmFuZ2VPZkludGVyZXN0ID0gKm1ha2VTaW1wbGVSYW5nZShyYW5nZU9mSW50
ZXJlc3RTdGFydCwgcmFuZ2VPZkludGVyZXN0RW5kKTsKLSAgICBpZiAoc2VsZWN0aW9uUmFuZ2Ug
JiYgcmFuZ2VzT3ZlcmxhcChjcmVhdGVMaXZlUmFuZ2UocmFuZ2VPZkludGVyZXN0KS5wdHIoKSwg
Y3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpKSB7CisgICAgaWYgKHNlbGVj
dGlvblJhbmdlICYmIGludGVyc2VjdHMocmFuZ2VPZkludGVyZXN0LCAqc2VsZWN0aW9uUmFuZ2Up
KSB7CiAgICAgICAgIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHN0ZDo6bWF4
KHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7CiAgICAgICAgIGVuZE9mUmFu
Z2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSBzdGQ6Om1pbihyYW5nZU9mSW50ZXJlc3RFbmQsIHNl
bGVjdGlvbkVuZCk7CiAgICAgfSBlbHNlIHsKQEAgLTQyNjUsNyArNDI2NSw3IEBAIHZvaWQgV2Vi
UGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4
dFJlcXVlc3QgcmVxdWVzCiAgICAgY29udGV4dC5jb250ZXh0QmVmb3JlID0gbWFrZVN0cmluZyhj
b250ZXh0QmVmb3JlU3RhcnQsIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7CiAg
ICAgY29udGV4dC5zZWxlY3RlZFRleHQgPSBtYWtlU3RyaW5nKHN0YXJ0T2ZSYW5nZU9mSW50ZXJl
c3RJblNlbGVjdGlvbiwgZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7CiAgICAgY29u
dGV4dC5jb250ZXh0QWZ0ZXIgPSBtYWtlU3RyaW5nKGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxl
Y3Rpb24sIGNvbnRleHRBZnRlckVuZCk7Ci0gICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgcmFu
Z2VzT3ZlcmxhcChjcmVhdGVMaXZlUmFuZ2UocmFuZ2VPZkludGVyZXN0KS5wdHIoKSwgY3JlYXRl
TGl2ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdlKS5wdHIoKSkpIHsKKyAgICBpZiAoY29tcG9zaXRp
b25SYW5nZSAmJiBpbnRlcnNlY3RzKHJhbmdlT2ZJbnRlcmVzdCwgKmNvbXBvc2l0aW9uUmFuZ2Up
KSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvblN0YXJ0KGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5zdGFydCkpOwogICAgICAgICBWaXNp
YmxlUG9zaXRpb24gY29tcG9zaXRpb25FbmQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNv
bXBvc2l0aW9uUmFuZ2UtPmVuZCkpOwogICAgICAgICBjb250ZXh0Lm1hcmtlZFRleHQgPSBtYWtl
U3RyaW5nKGNvbXBvc2l0aW9uU3RhcnQsIGNvbXBvc2l0aW9uRW5kKTsKQEAgLTQyODEsNyArNDI4
MSw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1l
bnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgIHdoaWxlICghaXRlcmF0b3Iu
YXRFbmQoKSkgewogICAgICAgICAgICAgaWYgKCFpdGVyYXRvci50ZXh0KCkuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICAgICAgYXV0byBhYnNvbHV0ZUJvdW5kaW5nQm94ID0gdW5pb25SZWN0KFJl
bmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMoaXRlcmF0b3IucmFuZ2UoKSwgUmVuZGVyT2Jq
ZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6SWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucykpOwot
ICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZCh7IGl0ZXJhdG9yLnJhbmdlKCkuc3RhcnQuY29u
dGFpbmVyLT5kb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGFic29sdXRlQm91
bmRpbmdCb3gpLCB7IG9mZnNldFNvRmFyKyssIHN0cmlkZSB9IH0pOworICAgICAgICAgICAgICAg
IHJlY3RzLmFwcGVuZCh7IGl0ZXJhdG9yLnJhbmdlKCkuc3RhcnQuZG9jdW1lbnQoKS52aWV3KCkt
PmNvbnRlbnRzVG9Sb290VmlldyhhYnNvbHV0ZUJvdW5kaW5nQm94KSwgeyBvZmZzZXRTb0Zhcisr
LCBzdHJpZGUgfSB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFu
Y2Uoc3RyaWRlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCBmZjc0MGY1ZmVjZDM3MzI1NDI1MDkzNmVl
OGQxYWE4MzBlZWZkNTEwLi5jOWU2ZTM3NTgzYjdhZWZkZjdkNmYxMDdmNDk0YjZlZGI0NTBlODA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQpAQCAtODc3LDcgKzg3Nyw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0
ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpCiAgICAg
ICAgIGlmICghYWN0aW9uQ29udGV4dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IGF1dG8gdmlldyA9IGFjdGlvbkNvbnRleHQtPnJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1l
bnQoKS52aWV3KCk7CisgICAgICAgIGF1dG8gdmlldyA9IGFjdGlvbkNvbnRleHQtPnJhbmdlLnN0
YXJ0LmRvY3VtZW50KCkudmlldygpOwogICAgICAgICBpZiAoIXZpZXcpCiAgICAgICAgICAgICBj
b250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KaW5kZXggZGU1ZWE4ZDZiYzkw
M2RkZWVhYWY2MTA0NGY0NDg0ODE5ZDZiZWVhMS4uNWI4Y2I2YzM4YzdhNWIxNjY3NGJmMTRhYzAx
MjBjMzVmZGYzYWRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCkBAIC01NzAsMTAg
KzU3MCw5IEBAIC0gKENHUmVjdClib3VuZGluZ0JveAogLSAoTlNSZWN0KWJvdW5kaW5nQm94CiAj
ZW5kaWYKIHsKLSAgICAvLyBGSVhNRTogVGhlIGNhbGwgdG8gdXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzIHNob3VsZCBiZSBtb3ZlZCBpbnRvIFdlYkNvcmU6OlJhbmdlLgotICAg
IGF1dG8mIHJhbmdlID0gKmNvcmUoc2VsZik7Ci0gICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiB1bmlvblJl
Y3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhtYWtlU2ltcGxlUmFuZ2UocmFuZ2Up
KSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqY29yZShzZWxmKSk7CisgICAg
cmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKKyAgICByZXR1cm4gdW5pb25SZWN0KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVj
dHMocmFuZ2UpKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTU4Myw3ICs1ODIsNyBAQCAt
IChDR0ltYWdlUmVmKXJlbmRlcmVkSW1hZ2VGb3JjaW5nQmxhY2tUZXh0OihCT09MKWZvcmNlQmxh
Y2tUZXh0CiAjZW5kaWYKIHsKICAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpjb3Jl
KHNlbGYpKTsKLSAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cihyYW5nZS5zdGFydC5jb250YWlu
ZXItPmRvY3VtZW50KCkuZnJhbWUoKSk7CisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIocmFu
Z2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm4gbmlsOwogCkBAIC02MDIsNyArNjAxLDcgQEAgLSAoQ0dJbWFnZVJlZilyZW5kZXJlZElt
YWdlRm9yY2luZ0JsYWNrVGV4dDooQk9PTClmb3JjZUJsYWNrVGV4dAogLSAoTlNBcnJheSAqKXRl
eHRSZWN0cwogewogICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKmNvcmUoc2VsZikp
OwotICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIHJldHVybiBjcmVhdGVOU0Fy
cmF5KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKS5hdXRvcmVsZWFzZSgp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2Uu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0KaW5kZXggNWVlMGJj
ZGZkOTk3NDM3MmEzZWJjNGFkMmE4N2FmODNiZGY1M2Y1MS4uMjg3NjYwZmVjYWU5ODZkZjliMzlk
OGQ1N2UwM2ViYmNkMGY5NDE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL0RPTVJhbmdlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5n
ZS5tbQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9KU0V4ZWNTdGF0ZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGhy
ZWFkQ2hlY2suaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KICNpbXBv
cnQgPFdlYkNvcmUvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oPgpAQCAtOTIsNyArOTMsOSBAQCAt
IChET01Ob2RlICopY29tbW9uQW5jZXN0b3JDb250YWluZXIKIC0gKE5TU3RyaW5nICopdGV4dAog
ewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4g
SU1QTC0+dGV4dCgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKklNUEwpOwor
ICAgIHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmV0dXJuIHBs
YWluVGV4dChyYW5nZSk7CiB9CiAKIC0gKHZvaWQpc2V0U3RhcnQ6KERPTU5vZGUgKilyZWZOb2Rl
IG9mZnNldDooaW50KW9mZnNldApAQCAtMTcwLDcgKzE3Myw3IEBAIC0gKHNob3J0KWNvbXBhcmVC
b3VuZGFyeVBvaW50czoodW5zaWduZWQgc2hvcnQpaG93IHNvdXJjZVJhbmdlOihET01SYW5nZSAq
KXNvdXJjCiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGlm
ICghc291cmNlUmFuZ2UpCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9uKCk7Ci0gICAg
cmV0dXJuIHJhaXNlT25ET01FcnJvcihJTVBMLT5jb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5k
aW5ncyhob3csICpjb3JlKHNvdXJjZVJhbmdlKSkpOworICAgIHJldHVybiByYWlzZU9uRE9NRXJy
b3IoSU1QTC0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKGhvdywgKmNvcmUoc291cmNlUmFuZ2UpKSk7
CiB9CiAKIC0gKHZvaWQpZGVsZXRlQ29udGVudHMKQEAgLTI0NCw3ICsyNDcsNyBAQCAtIChCT09M
KWludGVyc2VjdHNOb2RlOihET01Ob2RlICopcmVmTm9kZQogICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBpZiAoIXJlZk5vZGUpCiAgICAgICAgIHJhaXNlVHlw
ZUVycm9yRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHJhaXNlT25ET01FcnJvcihJTVBMLT5pbnRl
cnNlY3RzTm9kZSgqY29yZShyZWZOb2RlKSkpOworICAgIHJldHVybiBJTVBMLT5pbnRlcnNlY3Rz
Tm9kZSgqY29yZShyZWZOb2RlKSk7CiB9CiAKIC0gKHNob3J0KWNvbXBhcmVQb2ludDooRE9NTm9k
ZSAqKXJlZk5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQppbmRleCBhZTVjNDliZjE0NzU4ZjMxNDA5
NDIwZDlmNmQ1NWEyZTYzNjI2MWM5Li5hYzU5Y2QxMmJmYThhYWMwNmRiMmYwN2ZjMDViNWVlMTIw
OTMyYTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRF
eHRlbnNpb25zLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4
dGVuc2lvbnMubW0KQEAgLTUxLDcgKzUxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTFRleHRB
cmVhRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9JbmxpbmVCb3guaD4KLSNpbXBvcnQgPFdlYkNvcmUvTm9kZS5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9Ob2RlVHJhdmVyc2FsLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1JlbmRlckJsb2NrLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckJsb2NrRmxvdy5o
PgpAQCAtMTI0LDkgKzEyNCwyMSBAQCAtICh2b2lkKWV4dGVuZDooVUludDMyKWFtb3VudCBpbkRp
cmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiAgICAgICAgIHJh
bmdlLnNldEVuZCgqZW5kLmNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpKTsKIH0KIAorLy8gRklYTUU6IFJlZmFjdG9yIHRvIHNoYXJlIGNvZGUgd2l0aCBpbnRlcnNl
Y3RpbmdOb2Rlc1dpdGhEZXByZWNhdGVkWmVyb09mZnNldFN0YXJ0UXVpcmsuCitzdGF0aWMgV2Vi
Q29yZTo6Tm9kZSogZmlyc3ROb2RlQWZ0ZXIoY29uc3QgV2ViQ29yZTo6Qm91bmRhcnlQb2ludCYg
cG9pbnQpCit7CisgICAgaWYgKHBvaW50LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgp
KQorICAgICAgICByZXR1cm4gcG9pbnQuY29udGFpbmVyLnB0cigpOworICAgIGlmIChhdXRvIGNo
aWxkID0gcG9pbnQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChwb2ludC5vZmZzZXQpKQor
ICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgaWYgKCFwb2ludC5vZmZzZXQpCisgICAgICAgIHJl
dHVybiBwb2ludC5jb250YWluZXIucHRyKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6Ok5vZGVUcmF2
ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHBvaW50LmNvbnRhaW5lcik7Cit9CisKIC0gKERP
TU5vZGUgKilmaXJzdE5vZGUKIHsKLSAgICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPmZpcnN0Tm9k
ZSgpKTsKKyAgICByZXR1cm4ga2l0KGZpcnN0Tm9kZUFmdGVyKG1ha2VTaW1wbGVSYW5nZSgqY29y
ZShzZWxmKSkuc3RhcnQpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQppbmRleCBjYWQzNTkxYmU2MzMyM2VlNjdhYTZhZjhk
MTNlNDVmZDcxNjBkYWE4Li43MzhiNGY4ZjI0ODQ4NGZkMjc3Y2I3MjhjMjgwMjhkN2I5YzAwODUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9u
cy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5t
bQpAQCAtMTkxLDggKzE5MSw4IEBAIC0gKFdlYkFyY2hpdmUgKil3ZWJBcmNoaXZlCiAKIC0gKE5T
U3RyaW5nICopbWFya3VwU3RyaW5nCiB7Ci0gICAgYXV0byYgcmFuZ2UgPSAqY29yZShzZWxmKTsK
LSAgICByZXR1cm4gU3RyaW5nIHsgZG9jdW1lbnRUeXBlU3RyaW5nKHJhbmdlLm93bmVyRG9jdW1l
bnQoKSkgKyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtYWtlU2ltcGxlUmFu
Z2UocmFuZ2UpLCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpZZXMpIH07CisgICAg
YXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqY29yZShzZWxmKSk7CisgICAgcmV0dXJuIFN0
cmluZyB7IGRvY3VtZW50VHlwZVN0cmluZyhyYW5nZS5zdGFydC5kb2N1bWVudCgpKSArIHNlcmlh
bGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKHJhbmdlLCBudWxscHRyLCBBbm5vdGF0ZUZv
ckludGVyY2hhbmdlOjpZZXMpIH07CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbQppbmRleCAxYmM2N2QzNjg0MjZjYzg5MWIzZTUwNzll
MmI2ZGYzMmExMDY4OTk4Li5mYjc0MjA4Zjk5OGMzY2FiNGY1YWY3ZWMzYzdhNDZjMjI5OTIyMWYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlBERlZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCkBA
IC02MzYsMjEgKzYzNiwxOCBAQCAtIChCT09MKW1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0
ZWQKICAgICByZXR1cm4gTk87CiB9CiAKLXN0YXRpYyBCT09MIGlzRnJhbWVJblJhbmdlKFdlYkZy
YW1lICpmcmFtZSwgRE9NUmFuZ2UgKnJhbmdlKQorc3RhdGljIGJvb2wgaXNGcmFtZUluUmFuZ2Uo
V2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgcmFuZ2Up
CiB7Ci0gICAgQk9PTCBpblJhbmdlID0gTk87Ci0gICAgZm9yIChhdXRvKiBvd25lckVsZW1lbnQg
PSBjb3JlKGZyYW1lKS0+b3duZXJFbGVtZW50KCk7IG93bmVyRWxlbWVudDsgb3duZXJFbGVtZW50
ID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCktPm93bmVyRWxlbWVudCgpKSB7Ci0g
ICAgICAgIGlmICgmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZjb3JlKHJhbmdlKS0+b3du
ZXJEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBpblJhbmdlID0gW3JhbmdlIGludGVyc2VjdHNO
b2RlOmtpdChvd25lckVsZW1lbnQpXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Cisg
ICAgZm9yIChhdXRvKiBvd25lckVsZW1lbnQgPSBmcmFtZS5vd25lckVsZW1lbnQoKTsgb3duZXJF
bGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50KCkub3duZXJFbGVt
ZW50KCkpIHsKKyAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3VtZW50KCkgPT0gJnJhbmdl
LnN0YXJ0LmRvY3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0cyhyYW5nZSwg
Km93bmVyRWxlbWVudCk7CiAgICAgfQotICAgIHJldHVybiBpblJhbmdlOworICAgIHJldHVybiBm
YWxzZTsKIH0KIAogLSAoTlNVSW50ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAq
KXN0cmluZyBpbkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIG9wdGlvbnM6KFdlYkZpbmRPcHRp
b25zKW9wdGlvbnMgbGltaXQ6KE5TVUludGVnZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wpbWFy
a01hdGNoZXMKIHsKLSAgICBpZiAocmFuZ2UgJiYgIWlzRnJhbWVJblJhbmdlKFtkYXRhU291cmNl
IHdlYkZyYW1lXSwgcmFuZ2UpKQorICAgIGlmIChyYW5nZSAmJiAhaXNGcmFtZUluUmFuZ2UoKmNv
cmUoW2RhdGFTb3VyY2Ugd2ViRnJhbWVdKSwgbWFrZVNpbXBsZVJhbmdlKCpjb3JlKHJhbmdlKSkp
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFBERlNlbGVjdGlvbiAqcHJldmlvdXNNYXRjaCA9
IG5pbDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCBlY2Q2ODA3YWI4ODAzZDM4NGYwY2JjM2ZhMzhmMzQwN2E1Y2M1YjE5Li5kNGEzOWRjNDdlNGYw
MzFjNzVhNjVlYTBmODMwYWM1ZjM3ZDY3NWY5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDgtMjggIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBhbG1vc3QgYWxsIHRo
ZSByZW1haW5pbmcgdXNlcyBvZiBsaXZlIHJhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRG9j
dW1lbnRPcmRlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKTogQWRkZWQgdGVz
dCBjYXNlcyBmb3Igbm9kZSBvcmRlcmluZyBpbnZvbHZpbmcgbm9uLXVzZXItYWdlbnQKKyAgICAg
ICAgc2hhZG93IHRyZWUuIEFkZGVkIHRlc3QgY2FzZSB0aGF0IHNob3dlZCB0aGUgb2xkICJ1c2Ug
bm9kZSBvcmRlciBpZiBvZmZzZXRzIGFyZSBlcXVhbCIKKyAgICAgICAgcnVsZSBmb3IgYm91bmRh
cnkgcG9pbnQgb3JkZXJpbmcgd2FzIHdyb25nLiBBZGRlZCB0ZXN0cyBmb3IgaXNQb2ludEluUmFu
Z2UsCisgICAgICAgIGludGVyc2VjdHMsIGFuZCBjb250YWlucyBmdW5jdGlvbnMuCisKIDIwMjAt
MDgtMjggIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3
ZWJraXRjb3JlcHldIE1vdmUgVGltZW91dCB0byB3ZWJraXRjb3JlcHkgKFBhcnQgMykKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNwcApp
bmRleCAwN2U2N2Q0Y2QwY2FkNWI2NmI5Yjk2N2ZjNjk1NDk1MDAyYjc0MzYxLi44M2E2MTRmNWM4
NmJjZjQ2YWI0NTcwMTJjZWQ2MWMyYmVjMTk0Mjc0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvRG9jdW1lbnRPcmRlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwCkBAIC0yNSwxMyArMjUsMTQg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSA8V2ViQ29yZS9Cb3VuZGFyeVBv
aW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SFRNTEJvZHlFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRGl2RWxlbWVudC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTEh0bWxFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MVGV4dEFyZWFFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3NpdGlvbi5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvU2hhZG93Um9vdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFu
Z2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oPgogCiAj
ZGVmaW5lIEVYUEVDVF9CT1RIKGEsIGIsIGZvcndhcmQsIHJldmVyc2VkKSBkbyB7IEVYUEVDVF9T
VFJFUShzdHJpbmcoZG9jdW1lbnRPcmRlcihhLCBiKSksIGZvcndhcmQpOyBFWFBFQ1RfU1RSRVEo
c3RyaW5nKGRvY3VtZW50T3JkZXIoYiwgYSkpLCByZXZlcnNlZCk7IH0gd2hpbGUgKDApCkBAIC0z
OSw2ICs0MCwxNCBAQAogI2RlZmluZSBFWFBFQ1RfTEVTUyhhLCBiKSBFWFBFQ1RfQk9USChhLCBi
LCAibGVzcyIsICJncmVhdGVyIikKICNkZWZpbmUgRVhQRUNUX1VOT1JERVJFRChhLCBiKSBFWFBF
Q1RfQk9USChhLCBiLCAidW5vcmRlcmVkIiwgInVub3JkZXJlZCIpCiAKKyNkZWZpbmUgRVhQRUNU
X0NPTlRBSU5TX1NFTEYoYSkgRVhQRUNUX1RSVUUoY29udGFpbnMoYSwgYSkpCisjZGVmaW5lIEVY
UEVDVF9ORVNURUQoYSwgYikgZG8geyBFWFBFQ1RfVFJVRShjb250YWlucyhhLCBiKSk7IEVYUEVD
VF9GQUxTRShjb250YWlucyhiLCBhKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIEVYUEVDVF9OT1Rf
Q09OVEFJTkVEKGEsIGIpIGRvIHsgRVhQRUNUX0ZBTFNFKGNvbnRhaW5zKGEsIGIpKTsgRVhQRUNU
X0ZBTFNFKGNvbnRhaW5zKGIsIGEpKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFWFBFQ1RfSU5U
RVJTRUNUU19TRUxGKGEpIEVYUEVDVF9UUlVFKGludGVyc2VjdHMoYSwgYSkpCisjZGVmaW5lIEVY
UEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhhLCBiKSBkbyB7IEVYUEVDVF9UUlVFKGludGVyc2Vj
dHMoYSwgYikpOyBFWFBFQ1RfVFJVRShpbnRlcnNlY3RzKGIsIGEpKTsgfSB3aGlsZSAoMCkKKyNk
ZWZpbmUgRVhQRUNUX05PVF9JTlRFUlNFQ1RJTkdfQk9USF9XQVlTKGEsIGIpIGRvIHsgRVhQRUNU
X0ZBTFNFKGludGVyc2VjdHMoYSwgYikpOyBFWFBFQ1RfRkFMU0UoaW50ZXJzZWN0cyhiLCBhKSk7
IH0gd2hpbGUgKDApCisKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CkBAIC0xNDEsNiArMTUwLDEzIEBAIFRFU1QoRG9jdW1lbnRPcmRlciwgTm9k
ZSkKIAogICAgIGF1dG8mIGggPSAqZy0+aW5uZXJUZXh0RWxlbWVudCgpOwogICAgIEVYUEVDVF9M
RVNTKGJvZHksIGgpOworCisgICAgYXV0byYgaSA9IGEtPmF0dGFjaFNoYWRvdyh7IFNoYWRvd1Jv
b3RNb2RlOjpDbG9zZWQgfSkucmVsZWFzZVJldHVyblZhbHVlKCk7CisgICAgRVhQRUNUX0xFU1Mo
Ym9keSwgaSk7CisgICAgRVhQRUNUX0xFU1MoaSwgZCk7CisgICAgRVhQRUNUX0xFU1MoaSwgYik7
CisKKyAgICAvLyBGSVhNRTogQWRkIHRlc3RzIHRoYXQgY292ZXIgc2xvdHMgYW5kIGFzc2lnbm1l
bnQuCiB9CiAKIFRFU1QoRG9jdW1lbnRPcmRlciwgQm91bmRhcnlQb2ludE9mZnNldFplcm8pCkBA
IC0xODgsNiArMjA0LDggQEAgVEVTVChEb2N1bWVudE9yZGVyLCBCb3VuZGFyeVBvaW50T2Zmc2V0
WmVybykKICAgICBBU1NFUlRfVFJVRShoKTsKICAgICBjLT5hcHBlbmRDaGlsZChnKTsKICAgICBF
WFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQo
ZywgMCkpOworCisgICAgLy8gRklYTUU6IEFkZCB0ZXN0cyB0aGF0IGNvdmVyIHNoYWRvdyB0cmVl
cy4KIH0KIAogVEVTVChEb2N1bWVudE9yZGVyLCBCb3VuZGFyeVBvaW50T2Zmc2V0cykKQEAgLTE5
Nyw2ICsyMTUsNyBAQCBURVNUKERvY3VtZW50T3JkZXIsIEJvdW5kYXJ5UG9pbnRPZmZzZXRzKQog
CiAgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91
bmRhcnlQb2ludChkb2N1bWVudCwgMSkpOwogICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBv
aW50KGJvZHksIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpOworICAgIEVYUEVD
VF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEpLCBtYWtlQm91bmRhcnlQb2ludChkb2N1
bWVudCwgMSkpOwogCiAgICAgYXV0byBhID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVu
dCk7CiAgICAgYm9keS5hcHBlbmRDaGlsZChhKTsKQEAgLTI0MSw2ICsyNjAsOCBAQCBURVNUKERv
Y3VtZW50T3JkZXIsIEJvdW5kYXJ5UG9pbnRPZmZzZXRzKQogICAgIEVYUEVDVF9MRVNTKG1ha2VC
b3VuZGFyeVBvaW50KGMsIDApLCBtYWtlQm91bmRhcnlQb2ludChoLCAwKSk7CiAgICAgRVhQRUNU
X0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoaCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGMsIDEpKTsK
ICAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChoLCAwKSwgbWFrZUJvdW5kYXJ5UG9p
bnQoYywgMikpOworCisgICAgLy8gRklYTUU6IEFkZCB0ZXN0cyB0aGF0IGNvdmVyIHNoYWRvdyB0
cmVlcy4KIH0KIAogc3RhdGljIFZlY3RvcjxQb3NpdGlvbj4gYWxsUG9zaXRpb25UeXBlcyhOb2Rl
KiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpCkBAIC00NTAsNiArNDcxLDI1OCBAQCBURVNUKERvY3Vt
ZW50T3JkZXIsIFBvc2l0aW9ucykKICAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFU19CKG1ha2VQ
b3NpdGlvbkFmdGVyKGRvY3VtZW50KSwgYm9keSwgMCwgZ3JlYXRlcik7CiAgICAgVEVTVF9BTExf
UE9TSVRJT05fVFlQRVNfQihtYWtlUG9zaXRpb25BZnRlcihkb2N1bWVudCksIGJvZHksIDEsIGdy
ZWF0ZXIpOwogICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTX0IobWFrZVBvc2l0aW9uQWZ0ZXIo
ZG9jdW1lbnQpLCBoLCAwLCBncmVhdGVyKTsKKworICAgIC8vIEZJWE1FOiBBZGQgdGVzdHMgdGhh
dCBjb3ZlciBzaGFkb3cgdHJlZXMuCit9CisKK1RFU1QoRG9jdW1lbnRPcmRlciwgSXNQb2ludElu
UmFuZ2UpCit7CisgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CisgICAgYXV0
byYgZG9jdW1lbnRFbGVtZW50ID0gKmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBh
dXRvJiBib2R5ID0gKmRvY3VtZW50LT5ib2R5KCk7CisKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50
SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91
bmRhcnlQb2ludChkb2N1bWVudCwgMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5n
ZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQ
b2ludChkb2N1bWVudCwgMSkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQb2ludEluUmFuZ2UobWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZUJvdW5kYXJ5UG9pbnQo
ZG9jdW1lbnQsIDIpKSk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwg
MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSkpOworICAg
IEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cyhkb2N1bWVudCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDIpKSk7CisgICAgRVhQRUNUX0ZB
TFNFKGlzUG9pbnRJblJhbmdlKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1
bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50RWxlbWVudCwgMCkpLCBtYWtlQm91
bmRhcnlQb2ludChib2R5LCAwKSkpOworICAgIEVYUEVDVF9UUlVFKGlzUG9pbnRJblJhbmdlKG1h
a2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFy
eVBvaW50KGJvZHksIDApKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpKTsKKworICAgIGF1
dG8gYSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIEVYUEVDVF9GQUxT
RShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQp
LCBtYWtlQm91bmRhcnlQb2ludChhLCAwKSkpOworICAgIEVYUEVDVF9GQUxTRShpc1BvaW50SW5S
YW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VCb3VuZGFyeVBv
aW50KGEsIDApKSk7CisKKyAgICBib2R5LmFwcGVuZENoaWxkKGEpOworICAgIEVYUEVDVF9UUlVF
KGlzUG9pbnRJblJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCks
IG1ha2VCb3VuZGFyeVBvaW50KGEsIDApKSk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFu
Z2UobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJv
dW5kYXJ5UG9pbnQoYSwgMCkpLCBtYWtlQm91bmRhcnlQb2ludChhLCAwKSkpOworICAgIEVYUEVD
VF9GQUxTRShpc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQo
ZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSksIG1ha2VCb3VuZGFyeVBv
aW50KGEsIDApKSk7CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVNpbXBsZVJh
bmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9k
eSwgMSkpLCBtYWtlQm91bmRhcnlQb2ludChhLCAwKSkpOworICAgIEVYUEVDVF9GQUxTRShpc1Bv
aW50SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMSksIG1h
a2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSksIG1ha2VCb3VuZGFyeVBvaW50KGEsIDApKSk7
CisgICAgRVhQRUNUX1RSVUUoaXNQb2ludEluUmFuZ2UobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3Vu
ZGFyeVBvaW50KGJvZHksIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpLCBtYWtl
Qm91bmRhcnlQb2ludChhLCAwKSkpOworCisgICAgYXV0byBiID0gSFRNTERpdkVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChiKTsKKworICAgIGF1dG8gYyA9
IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGItPmFwcGVuZENoaWxkKGMp
OworCisgICAgYXV0byBkID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAg
YS0+YXBwZW5kQ2hpbGQoZCk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KTsKKyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNQb2ludEluUmFu
Z2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBtYWtlQm91bmRhcnlQb2lu
dChmLCAwKSkpOworCisgICAgYXV0byBnID0gSFRNTFRleHRBcmVhRWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKKyAgICBhdXRvJiBoID0gKmctPmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBjLT5h
cHBlbmRDaGlsZChnKTsKKyAgICBFWFBFQ1RfVFJVRShpc1BvaW50SW5SYW5nZShtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VCb3VuZGFyeVBvaW50KGgsIDApKSk7CisK
KyAgICAvLyBGSVhNRTogQWRkIHRlc3RzIHRoYXQgY292ZXIgc2hhZG93IHRyZWVzLgorfQorCitU
RVNUKERvY3VtZW50T3JkZXIsIFJhbmdlQ29udGFpbnNSYW5nZSkKK3sKKyAgICBhdXRvIGRvY3Vt
ZW50ID0gY3JlYXRlRG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudEVsZW1lbnQgPSAqZG9j
dW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIGF1dG8mIGJvZHkgPSAqZG9jdW1lbnQtPmJv
ZHkoKTsKKworICAgIEVYUEVDVF9DT05UQUlOU19TRUxGKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhkb2N1bWVudCkpOworICAgIEVYUEVDVF9DT05UQUlOU19TRUxGKG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpKTsKKyAgICBFWFBFQ1RfQ09OVEFJ
TlNfU0VMRihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSkpOworCisgICAgRVhQ
RUNUX05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50KSk7CisgICAgRVhQRUNU
X05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSkpOworICAgIEVYUEVDVF9ORVNURUQobWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCksIG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhib2R5KSk7CisKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cyhkb2N1bWVudEVsZW1lbnQpKTsKKworICAgIEVYUEVDVF9ORVNURUQobWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhib2R5KSk7CisKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2lu
dChkb2N1bWVudCwgMCkpKTsKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhkb2N1bWVudCksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChk
b2N1bWVudCwgMSkpKTsKKyAgICBFWFBFQ1RfTk9UX0NPTlRBSU5FRChtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9p
bnQoZG9jdW1lbnQsIDIpKSk7CisKKyAgICBFWFBFQ1RfTkVTVEVEKG1ha2VTaW1wbGVSYW5nZSht
YWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50
LCAyKSksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCkpOworICAgIEVY
UEVDVF9OT1RfQ09OVEFJTkVEKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVu
dCksIG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMSksIG1ha2VC
b3VuZGFyeVBvaW50KGRvY3VtZW50LCAyKSkpOworCisgICAgRVhQRUNUX05PVF9DT05UQUlORUQo
bWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5k
YXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAwKSksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cyhib2R5KSk7CisgICAgRVhQRUNUX05FU1RFRChtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5k
YXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSksIG1ha2VT
aW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSkpOworCisgICAgYXV0byBhID0g
SFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgRVhQRUNUX05PVF9DT05UQUlO
RUQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGEpKTsKKworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisKKyAg
ICBhdXRvIGIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBib2R5LmFw
cGVuZENoaWxkKGIpOworCisgICAgYXV0byBjID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1
bWVudCk7CisgICAgYi0+YXBwZW5kQ2hpbGQoYyk7CisKKyAgICBhdXRvIGQgPSBIVE1MRGl2RWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhLT5hcHBlbmRDaGlsZChkKTsKKworICAgIGF1
dG8gZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8gZiA9IEhU
TUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGUtPmFwcGVuZENoaWxkKGYpOwor
ICAgIEVYUEVDVF9OT1RfQ09OVEFJTkVEKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhi
b2R5KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGYpKTsKKworICAgIGF1dG8gZyA9
IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byYgaCA9ICpn
LT5pbm5lclRleHRFbGVtZW50KCk7CisgICAgYy0+YXBwZW5kQ2hpbGQoZyk7CisgICAgRVhQRUNU
X05FU1RFRChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhoKSk7CisKKyAgICAvLyBGSVhNRTogQWRkIHRlc3RzIHRoYXQg
Y292ZXIgc2hhZG93IHRyZWVzLgorfQorCitURVNUKERvY3VtZW50T3JkZXIsIFJhbmdlSW50ZXJz
ZWN0c1JhbmdlKQoreworICAgIGF1dG8gZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOworICAg
IGF1dG8mIGRvY3VtZW50RWxlbWVudCA9ICpkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Cisg
ICAgYXV0byYgYm9keSA9ICpkb2N1bWVudC0+Ym9keSgpOworCisgICAgRVhQRUNUX0lOVEVSU0VD
VFNfU0VMRihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpKTsKKyAgICBF
WFBFQ1RfSU5URVJTRUNUU19TRUxGKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1
bWVudEVsZW1lbnQpKTsKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19TRUxGKG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhib2R5KSk7CisKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dB
WVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCkpOworICAgIEVYUEVDVF9JTlRFUlNF
Q1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSkpOworICAgIEVYUEVDVF9JTlRFUlNF
Q1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVt
ZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpKTsKKworICAgIEVYUEVD
VF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9j
dW1lbnQpLCBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50KSk7
CisKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dBWVMobWFrZVJhbmdlU2VsZWN0aW5nTm9k
ZUNvbnRlbnRzKGRvY3VtZW50RWxlbWVudCksIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cyhib2R5KSk7CisKKyAgICBFWFBFQ1RfSU5URVJTRUNUU19CT1RIX1dBWVMobWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFy
eVBvaW50KGRvY3VtZW50LCAwKSkpOworICAgIEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyht
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBtYWtlU2ltcGxlUmFuZ2Uo
bWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpKSk7CisgICAgRVhQRUNUX05PVF9JTlRFUlNF
Q1RJTkdfQk9USF9XQVlTKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCks
IG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikpKTsKKworICAg
IEVYUEVDVF9JTlRFUlNFQ1RTX0JPVEhfV0FZUyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5
UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMikpLCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfSU5URVJT
RUNUU19CT1RIX1dBWVMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwg
bWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAxKSwgbWFrZUJvdW5k
YXJ5UG9pbnQoZG9jdW1lbnQsIDIpKSk7CisKKyAgICBFWFBFQ1RfTk9UX0lOVEVSU0VDVElOR19C
T1RIX1dBWVMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwg
bWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAwKSksIG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhib2R5KSk7CisgICAgRVhQRUNUX0lOVEVSU0VDVFNfQk9USF9XQVlTKG1h
a2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1ha2VCb3VuZGFy
eVBvaW50KGJvZHksIDApKSwgbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGJvZHks
IDApKSk7CisKKyAgICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
KyAgICBFWFBFQ1RfTk9UX0lOVEVSU0VDVElOR19CT1RIX1dBWVMobWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGEp
KTsKKworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisKKyAgICBhdXRvIGIgPSBIVE1MRGl2RWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBib2R5LmFwcGVuZENoaWxkKGIpOworCisgICAg
YXV0byBjID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5k
Q2hpbGQoYyk7CisKKyAgICBhdXRvIGQgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KTsKKyAgICBhLT5hcHBlbmRDaGlsZChkKTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8gZiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUo
ZG9jdW1lbnQpOworICAgIGUtPmFwcGVuZENoaWxkKGYpOworICAgIEVYUEVDVF9OT1RfSU5URVJT
RUNUSU5HX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhmKSk7CisKKyAgICBhdXRvIGcgPSBIVE1MVGV4
dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8mIGggPSAqZy0+aW5uZXJU
ZXh0RWxlbWVudCgpOworICAgIGMtPmFwcGVuZENoaWxkKGcpOworICAgIEVYUEVDVF9JTlRFUlNF
Q1RTX0JPVEhfV0FZUyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhoKSk7CisKKyAgICAvLyBGSVhNRTogQWRkIHRlc3Rz
IHRoYXQgY292ZXIgc2hhZG93IHRyZWVzLgorfQorCitURVNUKERvY3VtZW50T3JkZXIsIFJhbmdl
Q29udGFpbnNOb2RlKQoreworICAgIGF1dG8gZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOwor
ICAgIGF1dG8mIGRvY3VtZW50RWxlbWVudCA9ICpkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7
CisgICAgYXV0byYgYm9keSA9ICpkb2N1bWVudC0+Ym9keSgpOworCisgICAgRVhQRUNUX1RSVUUo
Y29udGFpbnMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgZG9jdW1l
bnRFbGVtZW50KSk7CisgICAgRVhQRUNUX1RSVUUoY29udGFpbnMobWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgYm9keSkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5z
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudEVsZW1lbnQpLCBib2R5KSk7
CisKKyAgICBFWFBFQ1RfRkFMU0UoY29udGFpbnMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGRvY3VtZW50KSwgZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGFpbnMobWFr
ZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5
UG9pbnQoZG9jdW1lbnQsIDIpKSwgZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGFp
bnMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJv
dW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAwKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoY29udGFpbnMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAw
KSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCkpLCBib2R5KSk7CisgICAgRVhQRUNUX0ZBTFNF
KGNvbnRhaW5zKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCks
IG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEpKSwgYm9keSkpOworICAgIEVYUEVDVF9UUlVFKGNv
bnRhaW5zKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1h
a2VCb3VuZGFyeVBvaW50KGRvY3VtZW50RWxlbWVudCwgMSkpLCBib2R5KSk7CisKKyAgICBhdXRv
IGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y29udGFpbnMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgYSkpOwor
CisgICAgYm9keS5hcHBlbmRDaGlsZChhKTsKKworICAgIGF1dG8gYiA9IEhUTUxEaXZFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYik7CisKKyAgICBhdXRv
IGMgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBiLT5hcHBlbmRDaGls
ZChjKTsKKworICAgIGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwor
ICAgIGEtPmFwcGVuZENoaWxkKGQpOworCisgICAgYXV0byBlID0gSFRNTERpdkVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCk7CisgICAgYXV0byBmID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1
bWVudCk7CisgICAgZS0+YXBwZW5kQ2hpbGQoZik7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRhaW5z
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgZikpOworCisgICAgYXV0byBn
ID0gSFRNTFRleHRBcmVhRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvJiBoID0g
KmctPmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBjLT5hcHBlbmRDaGlsZChnKTsKKyAgICBFWFBF
Q1RfVFJVRShjb250YWlucyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm9keSksIGgp
KTsKKworICAgIC8vIEZJWE1FOiBBZGQgdGVzdHMgdGhhdCBjb3ZlciBzaGFkb3cgdHJlZXMuCit9
CisKK1RFU1QoRG9jdW1lbnRPcmRlciwgUmFuZ2VJbnRlcnNlY3RzTm9kZSkKK3sKKyAgICBhdXRv
IGRvY3VtZW50ID0gY3JlYXRlRG9jdW1lbnQoKTsKKyAgICBhdXRvJiBkb2N1bWVudEVsZW1lbnQg
PSAqZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIGF1dG8mIGJvZHkgPSAqZG9jdW1l
bnQtPmJvZHkoKTsKKworICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KSwgZG9jdW1lbnRFbGVtZW50KSk7CisgICAgRVhQRUNU
X1RSVUUoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQp
LCBib2R5KSk7CisgICAgRVhQRUNUX1RSVUUoaW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnRFbGVtZW50KSwgYm9keSkpOworCisgICAgRVhQRUNUX1RSVUUo
aW50ZXJzZWN0cyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpLCBkb2N1
bWVudCkpOworICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVNpbXBsZVJhbmdlKG1ha2VC
b3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDIp
KSwgZG9jdW1lbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaW50ZXJzZWN0cyhtYWtlU2ltcGxlUmFu
Z2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChkb2N1
bWVudEVsZW1lbnQsIDApKSwgYm9keSkpOworICAgIEVYUEVDVF9GQUxTRShpbnRlcnNlY3RzKG1h
a2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudEVsZW1lbnQsIDEpLCBtYWtl
Qm91bmRhcnlQb2ludChkb2N1bWVudCwgMSkpLCBib2R5KSk7CisgICAgRVhQRUNUX1RSVUUoaW50
ZXJzZWN0cyhtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBt
YWtlQm91bmRhcnlQb2ludChib2R5LCAwKSksIGJvZHkpKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRl
cnNlY3RzKG1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCksIG1h
a2VCb3VuZGFyeVBvaW50KGJvZHksIDEpKSwgYm9keSkpOworICAgIEVYUEVDVF9UUlVFKGludGVy
c2VjdHMobWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFr
ZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnRFbGVtZW50LCAxKSksIGJvZHkpKTsKKworICAgIGF1dG8g
YSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIEVYUEVDVF9GQUxTRShp
bnRlcnNlY3RzKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCksIGEpKTsK
KworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisKKyAgICBhdXRvIGIgPSBIVE1MRGl2RWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBib2R5LmFwcGVuZENoaWxkKGIpOworCisgICAgYXV0
byBjID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5kQ2hp
bGQoYyk7CisKKyAgICBhdXRvIGQgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
KyAgICBhLT5hcHBlbmRDaGlsZChkKTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZFbGVtZW50Ojpj
cmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8gZiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQpOworICAgIGUtPmFwcGVuZENoaWxkKGYpOworICAgIEVYUEVDVF9GQUxTRShpbnRlcnNl
Y3RzKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib2R5KSwgZSkpOworICAgIEVYUEVD
VF9UUlVFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGYpLCBlKSk7
CisgICAgRVhQRUNUX0ZBTFNFKGludGVyc2VjdHMobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGJvZHkpLCBmKSk7CisKKyAgICBhdXRvIGcgPSBIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQpOworICAgIGF1dG8mIGggPSAqZy0+aW5uZXJUZXh0RWxlbWVudCgpOworICAg
IGMtPmFwcGVuZENoaWxkKGcpOworICAgIEVYUEVDVF9UUlVFKGludGVyc2VjdHMobWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvZHkpLCBoKSk7CisKKyAgICAvLyBGSVhNRTogQWRkIHRl
c3RzIHRoYXQgY292ZXIgc2hhZG93IHRyZWVzLgogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>