<?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>204092</bug_id>
          
          <creation_ts>2019-11-11 16:53:12 -0800</creation_ts>
          <short_desc>[WebAssembly] Improve Wasm::LLIntGenerator</short_desc>
          <delta_ts>2019-11-22 14:14:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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>204474</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tadeu Zagallo">tzagallo</reporter>
          <assigned_to name="Tadeu Zagallo">tzagallo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1589370</commentid>
    <comment_count>0</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-11 16:53:12 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589375</commentid>
    <comment_count>1</comment_count>
      <attachid>383316</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-11 16:55:50 -0800</bug_when>
    <thetext>Created attachment 383316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589443</commentid>
    <comment_count>2</comment_count>
      <attachid>383316</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-11-11 19:24:56 -0800</bug_when>
    <thetext>Comment on attachment 383316
Patch

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

New failing tests:
wasm.yaml/wasm/stress/wasm-wasm-call-many-return-types-on-stack-no-args.js.default-wasm
wasm.yaml/wasm/function-tests/stack-overflow.js.default-wasm
wasm.yaml/wasm/stress/wasm-js-call-many-return-types-on-stack-no-args.js.wasm-eager-jettison
wasm.yaml/wasm/function-tests/many-arguments-to-function.js.wasm-eager
wasm.yaml/wasm/function-tests/many-arguments-to-function.js.wasm-collect-continuously
wasm.yaml/wasm/function-tests/stack-overflow.js.wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/function-tests/many-args-tail-call-sp-restored.js.default-wasm
wasm.yaml/wasm/stress/wasm-wasm-call-indirect-many-return-types-on-stack.js.wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/function-tests/add-12.js.wasm-no-tls-context
wasm.yaml/wasm/stress/wasm-wasm-call-indirect-many-return-types-on-stack.js.wasm-slow-memory
wasm.yaml/wasm/stress/wasm-wasm-call-indirect-many-return-types-on-stack.js.wasm-no-tls-context
wasm.yaml/wasm/function-tests/many-args-tail-call-sp-restored.js.wasm-eager
wasm.yaml/wasm/stress/wasm-js-call-many-return-types-on-stack-no-args.js.wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/stress/wasm-wasm-call-indirect-many-return-types-on-stack.js.wasm-eager
wasm.yaml/wasm/function-tests/many-args-tail-call-sp-restored.js.wasm-slow-memory
wasm.yaml/wasm/stress/wasm-wasm-call-indirect-many-return-types-on-stack.js.wasm-eager-jettison
wasm.yaml/wasm/stress/wasm-js-call-many-return-types-on-stack-no-args.js.default-wasm
wasm.yaml/wasm/stress/wasm-js-call-many-return-types-on-stack-no-args.js.wasm-collect-continuously
wasm.yaml/wasm/function-tests/add-12.js.wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/function-tests/many-arguments-to-function.js.wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/stress/wasm-js-call-many-return-types-on-stack-no-args.js.wasm-slow-memory
wasm.yaml/wasm/stress/wasm-wasm-call-many-return-types-on-stack-no-args.js.wasm-no-tls-context
wasm.yaml/wasm/stress/wasm-wasm-call-many-return-types-on-stack-no-args.js.wasm-slow-memory
wasm.yaml/wasm/stress/wasm-wasm-call-indirect-many-return-types-on-stack.js.wasm-collect-continuously
wasm.yaml/wasm/function-tests/stack-overflow.js.wasm-eager
wasm.yaml/wasm/function-tests/add-12.js.wasm-slow-memory
wasm.yaml/wasm/stress/wasm-js-call-many-return-types-on-stack-no-args.js.wasm-eager
wasm.yaml/wasm/function-tests/add-12.js.wasm-eager
wasm.yaml/wasm/function-tests/many-args-tail-call-sp-restored.js.wasm-eager-jettison
wasm.yaml/wasm/function-tests/stack-overflow.js.wasm-no-tls-context
wasm.yaml/wasm/function-tests/add-12.js.default-wasm
wasm.yaml/wasm/function-tests/many-args-tail-call-sp-restored.js.wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/stress/wasm-wasm-call-many-return-types-on-stack-no-args.js.wasm-collect-continuously
wasm.yaml/wasm/stress/wasm-js-call-many-return-types-on-stack-no-args.js.wasm-no-tls-context
wasm.yaml/wasm/function-tests/many-args-tail-call-sp-restored.js.wasm-no-tls-context
wasm.yaml/wasm/function-tests/many-arguments-to-function.js.wasm-no-tls-context
wasm.yaml/wasm/function-tests/many-arguments-to-function.js.wasm-eager-jettison
wasm.yaml/wasm/function-tests/many-arguments-to-function.js.wasm-slow-memory
wasm.yaml/wasm/stress/wasm-wasm-call-many-return-types-on-stack-no-args.js.wasm-eager-jettison
wasm.yaml/wasm/function-tests/many-args-tail-call-sp-restored.js.wasm-collect-continuously
wasm.yaml/wasm/function-tests/stack-overflow.js.wasm-slow-memory
wasm.yaml/wasm/function-tests/add-12.js.wasm-eager-jettison
wasm.yaml/wasm/stress/wasm-wasm-call-many-return-types-on-stack-no-args.js.wasm-eager
wasm.yaml/wasm/function-tests/stack-overflow.js.wasm-eager-jettison
wasm.yaml/wasm/stress/wasm-wasm-call-many-return-types-on-stack-no-args.js.wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/function-tests/stack-overflow.js.wasm-collect-continuously
wasm.yaml/wasm/stress/wasm-wasm-call-indirect-many-return-types-on-stack.js.default-wasm
wasm.yaml/wasm/function-tests/many-arguments-to-function.js.default-wasm
wasm.yaml/wasm/function-tests/add-12.js.wasm-collect-continuously</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589539</commentid>
    <comment_count>3</comment_count>
      <attachid>383316</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-11-12 08:43:54 -0800</bug_when>
    <thetext>Comment on attachment 383316
Patch

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

Tests are broken

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        - Removing redundant moves when materializing constants

You should also say how, not just what

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        - Delay holding the lock in LLintPlan::compileFunction, since we do not need to hold it while compiling.

I think you meant to say compiling the entrypoint

&gt; Source/JavaScriptCore/wasm/WasmLLIntPlan.cpp:85
&gt;          entry.function = m_createEmbedderWrapper(*entry.jit, signature, &amp;m_unlinkedWasmToWasmCalls[functionIndex], m_moduleInformation.get(), m_mode, functionIndex);

We’re sure it’s ok to call this concurrently?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589646</commentid>
    <comment_count>4</comment_count>
      <attachid>383387</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-12 14:51:42 -0800</bug_when>
    <thetext>Created attachment 383387
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589652</commentid>
    <comment_count>5</comment_count>
      <attachid>383316</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-12 15:06:38 -0800</bug_when>
    <thetext>Comment on attachment 383316
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:9
&gt;&gt; +        - Removing redundant moves when materializing constants
&gt; 
&gt; You should also say how, not just what

updated

&gt;&gt; Source/JavaScriptCore/ChangeLog:13
&gt;&gt; +        - Delay holding the lock in LLintPlan::compileFunction, since we do not need to hold it while compiling.
&gt; 
&gt; I think you meant to say compiling the entrypoint

fixed

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntPlan.cpp:85
&gt;&gt;          entry.function = m_createEmbedderWrapper(*entry.jit, signature, &amp;m_unlinkedWasmToWasmCalls[functionIndex], m_moduleInformation.get(), m_mode, functionIndex);
&gt; 
&gt; We’re sure it’s ok to call this concurrently?

yeah, it&apos;s fine</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589716</commentid>
    <comment_count>6</comment_count>
      <attachid>383387</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-11-12 17:21:08 -0800</bug_when>
    <thetext>Comment on attachment 383387
Patch

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

New failing tests:
stress/llint-put-to-scope-global-cache-watchpoint-invalidate.js.dfg-eager-no-cjit-validate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590981</commentid>
    <comment_count>7</comment_count>
      <attachid>383731</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-17 21:45:16 -0800</bug_when>
    <thetext>Created attachment 383731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591042</commentid>
    <comment_count>8</comment_count>
      <attachid>383745</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-18 07:30:50 -0800</bug_when>
    <thetext>Created attachment 383745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591135</commentid>
    <comment_count>9</comment_count>
      <attachid>383764</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-18 11:24:55 -0800</bug_when>
    <thetext>Created attachment 383764
Patch

Fix iOS build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591152</commentid>
    <comment_count>10</comment_count>
      <attachid>383771</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-18 11:48:22 -0800</bug_when>
    <thetext>Created attachment 383771
Patch

Change LLIntGenerator::Stack size to 16</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591328</commentid>
    <comment_count>11</comment_count>
      <attachid>383771</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-11-18 16:58:19 -0800</bug_when>
    <thetext>Comment on attachment 383771
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +          to work, we still allocate the stack slot for the temporaries, since we have to materialize them in before loops and branches.

&quot;them in&quot; =&gt; &quot;them&quot;

&gt; Source/JavaScriptCore/bytecompiler/Label.h:131
&gt; +        typedef Vector&lt;int, 8&gt; JumpVector;

typedef =&gt; using

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:52
&gt; +    using Stack = Vector&lt;ExpressionType, 16, UnsafeVectorOverflow&gt;;

Does UnsafeVectorOverflow actually make a difference?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:154
&gt; +            if (dst == src)
&gt; +                continue;

Does this actually happen?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:165
&gt; +    void didPopValueFromStack() { --m_stackSize; }

Why can&apos;t we make this a function of m_expressionStack and the reserved callee register size?
That feels more robust than doing it this way, especially since there are already places we map from a stack index to a local.

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:312
&gt; +            if (expression != slot) {

why not just check if it&apos;s a constant?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:317
&gt; +        }

can we write the code where we assert each non-constant on the stack is the local we expect it to be? Otherwise, this code will always feel fishy. Maybe we can have a &quot;checkConsistency&quot; which does that?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:326
&gt; +        static constexpr bool emptyValueIsZero = false;

this looks wrong :-)

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:384
&gt; +    // This function is setups the stack layout for calls. The desired stack layout is:

&quot;is setups&quot; =&gt; &quot;sets up&quot;

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:580
&gt; +

nit: revert

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:694
&gt; +    for (int i = expressionStack.size(); i &gt; 0; --i) {

nit: same comment about the loop. Let&apos;s not use int

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:784
&gt; +    // TODO: don&apos;t emit jump for empty else

TODO =&gt; FIXME and please file a bug and link it here if this is something that should be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591395</commentid>
    <comment_count>12</comment_count>
      <attachid>383771</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-18 18:12:29 -0800</bug_when>
    <thetext>Comment on attachment 383771
Patch

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

&gt;&gt; Source/JavaScriptCore/bytecompiler/Label.h:131
&gt;&gt; +        typedef Vector&lt;int, 8&gt; JumpVector;
&gt; 
&gt; typedef =&gt; using

Oops, I just moved it, will fix.

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:52
&gt;&gt; +    using Stack = Vector&lt;ExpressionType, 16, UnsafeVectorOverflow&gt;;
&gt; 
&gt; Does UnsafeVectorOverflow actually make a difference?

I haven&apos;t measured, but I saw no reason to have overflow checks since we don&apos;t use it for arbitrary access.

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:154
&gt;&gt; +                continue;
&gt; 
&gt; Does this actually happen?

It used to, it might not happen anymore. I can remove it.

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:165
&gt;&gt; +    void didPopValueFromStack() { --m_stackSize; }
&gt; 
&gt; Why can&apos;t we make this a function of m_expressionStack and the reserved callee register size?
&gt; That feels more robust than doing it this way, especially since there are already places we map from a stack index to a local.

I don&apos;t follow... what do you mean by a function of m_expressionStack? We create the values that go into the expression stack based on m_stackSize.

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:312
&gt;&gt; +            if (expression != slot) {
&gt; 
&gt; why not just check if it&apos;s a constant?

Because we also delay setLocal, in which case the VirtualRegister will point to a local instead of a stack slot

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:317
&gt;&gt; +        }
&gt; 
&gt; can we write the code where we assert each non-constant on the stack is the local we expect it to be? Otherwise, this code will always feel fishy. Maybe we can have a &quot;checkConsistency&quot; which does that?

That&apos;s already what this function does, right? We traverse the whole expression stack, and we must either contain the expected virtual register (i.e. the one that&apos;d point at that stack slot), a constant, or a wasm local (i.e. a delayed get_local)

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:326
&gt;&gt; +        static constexpr bool emptyValueIsZero = false;
&gt; 
&gt; this looks wrong :-)

oops haha, I copied it from WTF/HashTraits and modified the zero value, but not the flag... I&apos;ll update. I don&apos;t think it&apos;s broken though, just bad.

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:384
&gt;&gt; +    // This function is setups the stack layout for calls. The desired stack layout is:
&gt; 
&gt; &quot;is setups&quot; =&gt; &quot;sets up&quot;

will fix.

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:784
&gt;&gt; +    // TODO: don&apos;t emit jump for empty else
&gt; 
&gt; TODO =&gt; FIXME and please file a bug and link it here if this is something that should be done.

Oops, I forgot this comment, I actually already did that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592675</commentid>
    <comment_count>13</comment_count>
      <attachid>384127</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-21 23:44:09 -0800</bug_when>
    <thetext>Created attachment 384127
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592941</commentid>
    <comment_count>14</comment_count>
      <attachid>384127</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-11-22 12:03:37 -0800</bug_when>
    <thetext>Comment on attachment 384127
Patch

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

r=me

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:360
&gt; +        });

nit: maybe checkConsistency after too?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:363
&gt; +    void materializeLocals(Stack&amp; expressionStack, size_t newStackSize)

put inside splitStack? Or maybe call this materializeLocalsAfterSplit and name &quot;newStackSize&quot; =&gt; &quot;splitStackSize&quot;?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:403
&gt; +    unsigned m_topLevelStackSize;

this seems completely unused (except setting it somewhere)

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:783
&gt; +    materializeLocals(enclosingStack, newStack.size());

why not put materializeLocals into splitStack?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:959
&gt; +#if !ASSERT_DISABLED
&gt; +        ASSERT(unreachable || tmp == expressionStack[i]);
&gt; +#endif

no need for !ASSERT_DISABLED here. Also, you should just ASSERT_UNUSED and remove the UNUSED_PARAM above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592971</commentid>
    <comment_count>15</comment_count>
      <attachid>384127</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-22 13:10:30 -0800</bug_when>
    <thetext>Comment on attachment 384127
Patch

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

Thanks for the review!

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:360
&gt;&gt; +        });
&gt; 
&gt; nit: maybe checkConsistency after too?

Good call

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:363
&gt;&gt; +    void materializeLocals(Stack&amp; expressionStack, size_t newStackSize)
&gt; 
&gt; put inside splitStack? Or maybe call this materializeLocalsAfterSplit and name &quot;newStackSize&quot; =&gt; &quot;splitStackSize&quot;?

I added a custom splitStack to LLIntGenerator that does it.

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:403
&gt;&gt; +    unsigned m_topLevelStackSize;
&gt; 
&gt; this seems completely unused (except setting it somewhere)

you&apos;re right. I added it but removed its uses while refactoring the patch. I&apos;ll remove it.

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:783
&gt;&gt; +    materializeLocals(enclosingStack, newStack.size());
&gt; 
&gt; why not put materializeLocals into splitStack?

done

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:959
&gt;&gt; +#endif
&gt; 
&gt; no need for !ASSERT_DISABLED here. Also, you should just ASSERT_UNUSED and remove the UNUSED_PARAM above

good point. There was some more code in there at some point, but it doesn&apos;t make sense anymore. I&apos;ll fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592976</commentid>
    <comment_count>16</comment_count>
      <attachid>384190</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-22 13:28:25 -0800</bug_when>
    <thetext>Created attachment 384190
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592995</commentid>
    <comment_count>17</comment_count>
      <attachid>384190</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-22 14:13:35 -0800</bug_when>
    <thetext>Comment on attachment 384190
Patch for landing

Clearing flags on attachment: 384190

Committed r252800: &lt;https://trac.webkit.org/changeset/252800&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592996</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-22 14:13:37 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592999</commentid>
    <comment_count>19</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-22 14:14:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/57440426&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383316</attachid>
            <date>2019-11-11 16:55:50 -0800</date>
            <delta_ts>2019-11-12 14:51:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204092-20191111165550.patch</filename>
            <type>text/plain</type>
            <size>33207</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MzQ3MmM3NzZmODMzZThmMzExNTgyZTQ4N2Y0MmE1MjNhNzFjNmNlLi42MDZjOTlmZTc0ZWJiOTU5
NjgwOGUzODYzZjJhZDRkMDQ3M2JkMGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NCBAQAorMjAxOS0xMS0xMSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBbV2ViQXNzZW1ibHldIEltcHJvdmUgV2FzbTo6TExJbnRHZW5lcmF0b3IK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDA5Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW1w
cm92ZXMgdGhlIFdhc206OkxMSW50R2VuZXJhdG9yIGJ5OgorICAgICAgICAtIFJlbW92aW5nIHJl
ZHVuZGFudCBtb3ZlcyB3aGVuIG1hdGVyaWFsaXppbmcgY29uc3RhbnRzCisgICAgICAgIC0gQWRk
aW5nIGEgY29uc3RydWN0b3IgdG8gQ29udHJvbFR5cGUgdGhhdCB0YWtlcyB0aGUgcmVzdWx0cyBF
eHByZXNzaW9uTGlzdCBhcyBhbiBydmFsdWUgaW5zdGVhZCBvZiBjb3B5aW5nIGl0CisgICAgICAg
IC0gT3B0aW1pemluZyBjYWxsSW5mb3JtYXRpb25Gb3IsIHdoaWNoIGlzIG5vdyBzcGxpdCBpbnRv
IHR3byBmdW5jdGlvbnMuICBUaGUgY2FsbGVlIGRvZXMgbm90IGNhcmUgYWJvdXQgYXJndW1lbnRz
LCBhbmQKKyAgICAgICAgICBzaG91bGQgbmV2ZXIgYWxsb2NhdGUgdGVtcG9yYXJpZXMsIGFuZCB0
aGUgY2FsbGVyIGNhc2Ugd2FzIG9wdGltaXplZCBieSBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjYWxs
cyB0byBuZXdUZW1wb3JhcnkKKyAgICAgICAgLSBEZWxheSBob2xkaW5nIHRoZSBsb2NrIGluIExM
aW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9uLCBzaW5jZSB3ZSBkbyBub3QgbmVlZCB0byBob2xkIGl0
IHdoaWxlIGNvbXBpbGluZy4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvckJhc2UuaDoKKyAgICAgICAgKiBnZW5lcmF0b3IvV2FzbS5yYjoKKyAgICAgICAgKiB3YXNt
L1dhc21MTEludEdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjpDb250cm9sVHlwZTo6bG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjpDb250cm9sVHlwZTo6dG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Q29udHJvbFR5cGU6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppZl8pOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Q29udHJvbFR5cGU6OkNvbnRyb2xUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OnZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6Oldhc206OkxM
SW50R2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpkdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OnZpcnR1YWxSZWdpc3RlckZvcldhc21Mb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OkxM
SW50R2VuZXJhdG9yOjpyZXVzZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6
OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZExvb3Ap
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRWxzZSk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQnJhbmNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OmFkZFN3aXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRD
YWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVj
dCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRSZWZJc051bGwpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVGFibGVHZXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVGFibGVHcm93KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6YWRkU2VsZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OmxvYWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpM
TEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
YXNtL1dhc21MTEludFBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludFBsYW46OmNv
bXBpbGVGdW5jdGlvbik6CisKIDIwMTktMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggYWxpZ25tZW50IGFkanVzdG1lbnQg
d2hlbiByZXVzaW5nIFByZWNpc2VBbGxvY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZ2VuZXJhdG9yL1dhc20ucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL1dhc20ucmIKaW5kZXggYzAwYzYyOWRkMDM3NjM3MzM5MjgwYzE1MWE4NzljMmFiM2JhOGRm
NC4uNjdiNjYwY2Q5MjhkZjMwZjkwYTc4MTE3NWE1ZWYwMmNlOWNhNTZkMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9XYXNtLnJiCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvV2FzbS5yYgpAQCAtNTgsNyArNTgsNyBAQCBtb2R1bGUgV2Fz
bQogdGVtcGxhdGU8PgogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkT3A8I3tvcF90eXBlKG9wKX0+
KEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbGhzOworICAgIHJlc3Vs
dCA9IHJldXNlKGxocywgcmhzKTsKICAgICAje29wLmNhcGl0YWxpemVkX25hbWV9OjplbWl0KHRo
aXMsIHJlc3VsdCwgbGhzLCByaHMpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC03MCw3ICs3MCw3
IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZE9wPCN7b3BfdHlwZShvcCl9PihFeHByZXNzaW9u
VHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJoCiB0ZW1wbGF0ZTw+CiBhdXRvIExMSW50R2VuZXJh
dG9yOjphZGRPcDwje29wX3R5cGUob3ApfT4oRXhwcmVzc2lvblR5cGUgb3BlcmFuZCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG9wZXJh
bmQ7CisgICAgcmVzdWx0ID0gcmV1c2Uob3BlcmFuZCk7CiAgICAgI3tvcC5jYXBpdGFsaXplZF9u
YW1lfTo6ZW1pdCh0aGlzLCByZXN1bHQsIG9wZXJhbmQpOwogICAgIHJldHVybiB7IH07CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApp
bmRleCBiYWVmNTA3MDM3Zjk2MTczNGE5YThiZWE0Mjc3NjY5NGZmMzc1YjQzLi4xYjc0NjRjZDM5
Y2NkZDdmZjkxNDRkNDc0MTIwOWY0NzcyZmU2YzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAgLTczLDI0ICs3MywyNCBAQCBw
dWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBDb250cm9sVHlw
ZSBsb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJl
c3VsdHMsIFJlZjxMYWJlbD4gYm9keSwgUmVmUHRyPExhYmVsPiBjb250aW51YXRpb24pCisgICAg
ICAgIHN0YXRpYyBDb250cm9sVHlwZSBsb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgY29u
c3QgU3RhY2smIHJlc3VsdHMsIFJlZjxMYWJlbD4gYm9keSwgUmVmUHRyPExhYmVsPiBjb250aW51
YXRpb24pCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1
cmUsIHJlc3VsdHMsIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbExvb3AgeyBXVEZNb3Zl
KGJvZHkpIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIHRvcExl
dmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3Vs
dHMsIFJlZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQorICAgICAgICBzdGF0aWMgQ29udHJvbFR5
cGUgdG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBFeHByZXNzaW9uTGlzdCYmIHJl
c3VsdHMsIFJlZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCByZXN1bHRzLCBXVEZNb3ZlKGNvbnRpbnVh
dGlvbiksIENvbnRyb2xUb3BMZXZlbCB7IH0pOworICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xU
eXBlKHNpZ25hdHVyZSwgV1RGTW92ZShyZXN1bHRzKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBD
b250cm9sVG9wTGV2ZWwgeyB9KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBDb250cm9s
VHlwZSBibG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIGNvbnN0IEV4cHJlc3Npb25MaXN0
JiByZXN1bHRzLCBSZWZQdHI8TGFiZWw+IGNvbnRpbnVhdGlvbikKKyAgICAgICAgc3RhdGljIENv
bnRyb2xUeXBlIGJsb2NrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgRXhwcmVzc2lvbkxpc3Qm
JiByZXN1bHRzLCBSZWZQdHI8TGFiZWw+IGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgcmVzdWx0cywgV1RGTW92ZShjb250
aW51YXRpb24pLCBDb250cm9sQmxvY2sgeyB9KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9s
VHlwZShzaWduYXR1cmUsIFdURk1vdmUocmVzdWx0cyksIFdURk1vdmUoY29udGludWF0aW9uKSwg
Q29udHJvbEJsb2NrIHsgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQ29udHJvbFR5
cGUgaWZfKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJl
c3VsdHMsIFJlZjxMYWJlbD4gYWx0ZXJuYXRlLCBSZWZQdHI8TGFiZWw+IGNvbnRpbnVhdGlvbikK
KyAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGlmXyhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUs
IEV4cHJlc3Npb25MaXN0JiYgcmVzdWx0cywgUmVmPExhYmVsPiBhbHRlcm5hdGUsIFJlZlB0cjxM
YWJlbD4gY29udGludWF0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29udHJv
bFR5cGUoc2lnbmF0dXJlLCByZXN1bHRzLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xJ
ZiB7IFdURk1vdmUoYWx0ZXJuYXRlKSB9KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlw
ZShzaWduYXR1cmUsIFdURk1vdmUocmVzdWx0cyksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29u
dHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOwogICAgICAgICB9CiAKICAgICAgICAgUmVm
UHRyPExhYmVsPiB0YXJnZXRMYWJlbEZvckJyYW5jaCgpIGNvbnN0CkBAIC0xMTMsNiArMTEzLDE1
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICwgbV9jb250aW51YXRpb24oV1RGTW92ZShjb250aW51
YXRpb24pKQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgICAgICBDb250cm9sVHlwZShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIEV4cHJl
c3Npb25MaXN0JiYgcmVzdWx0cywgUmVmUHRyPExhYmVsPiBjb250aW51YXRpb24sIFQgdCkKKyAg
ICAgICAgICAgIDogQmFzZShXVEZNb3ZlKHQpKQorICAgICAgICAgICAgLCBtX3NpZ25hdHVyZShz
aWduYXR1cmUpCisgICAgICAgICAgICAsIG1fcmVzdWx0cyhXVEZNb3ZlKHJlc3VsdHMpKQorICAg
ICAgICAgICAgLCBtX2NvbnRpbnVhdGlvbihXVEZNb3ZlKGNvbnRpbnVhdGlvbikpCisgICAgICAg
IHsKKyAgICAgICAgfQogICAgIH07CiAKICAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJpbmc7CkBA
IC0xMzMsMTIgKzE0MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkUmVz
dWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBmYWlsZWQgY29tcGlsaW5nOiAiX3Ms
IG1ha2VTdHJpbmcoYXJncykuLi4pKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoRXhwcmVzc2lvblR5cGUgcmVnKSB7IHJldHVybiBy
ZWctPnZpcnR1YWxSZWdpc3RlcigpOyB9CisgICAgQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIHJlZzsgfQor
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhwcmVzc2lvbkxpc3RBLCB0eXBlbmFtZSBFeHByZXNz
aW9uTGlzdEI+CiAgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9u
TGlzdEEmIGRlc3RpbmF0aW9ucywgY29uc3QgRXhwcmVzc2lvbkxpc3RCJiB2YWx1ZXMpCiAgICAg
ewogICAgICAgICBBU1NFUlQoZGVzdGluYXRpb25zLnNpemUoKSA8PSB2YWx1ZXMuc2l6ZSgpKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRlc3RpbmF0aW9uc1tkZXN0aW5hdGlv
bnMuc2l6ZSgpIC0gaSAtIDFdLCB2YWx1ZXNbdmFsdWVzLnNpemUoKSAtIGkgLSAxXSk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBhdXRvIGRzdCA9IGRlc3RpbmF0aW9uc1tkZXN0aW5hdGlvbnMuc2l6ZSgpIC0g
aSAtIDFdOworICAgICAgICAgICAgYXV0byBzcmMgPSB2YWx1ZXNbdmFsdWVzLnNpemUoKSAtIGkg
LSAxXTsKKyAgICAgICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIoZHN0KSA9PSB2aXJ0dWFsUmVn
aXN0ZXIoc3JjKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFdhc21N
b3Y6OmVtaXQodGhpcywgZHN0LCBzcmMpOworICAgICAgICB9CiAgICAgfQogCiAKQEAgLTE4Nywx
MyArMjA0LDEzIEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRCbG9jayhCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9s
VHlwZSYgbmV3QmxvY2ssIFN0YWNrJiBuZXdTdGFjayk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkTG9vcChCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0
YWNrLCBDb250cm9sVHlwZSYgYmxvY2ssIFN0YWNrJiBuZXdTdGFjaywgdWludDMyX3QgbG9vcElu
ZGV4KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNz
aW9uVHlwZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ss
IENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7Ci0gICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sVHlwZSYsIGNvbnN0IEV4cHJlc3Np
b25MaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShD
b250cm9sVHlwZSYsIGNvbnN0IFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKIAotICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sVHlwZSYs
IGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sVHlwZSYsIEV4cHJlc3Npb25UeXBl
IGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Ci0gICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlKj4mIHRhcmdldHMsIENvbnRyb2xUeXBl
JiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7
Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVu
dHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xUeXBlJiwgY29uc3Qg
U3RhY2smIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQnJhbmNoKENvbnRyb2xUeXBlJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25z
dCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29u
dHJvbFR5cGUqPiYgdGFyZ2V0cywgQ29udHJvbFR5cGUmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBT
dGFjayYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENv
bnRyb2xFbnRyeSYsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSB7IH0pOwogCiAgICAg
Ly8gQ2FsbHMKQEAgLTIwNSw3ICsyMjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFBhcnNl
cihGdW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBh
cnNlcjsgfTsKIAotICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNv
bnN0IEV4cHJlc3Npb25MaXN0KikgeyB9CisgICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250
cm9sRW50cnk+JiwgY29uc3QgU3RhY2sqKSB7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgR2Vu
ZXJpY0xhYmVsPFdhc206OkdlbmVyYXRvclRyYWl0cz47CkBAIC0yMTMsMTMgKzIzMCwxNCBAQCBw
cml2YXRlOgogICAgIHN0cnVjdCBMTEludENhbGxJbmZvcm1hdGlvbiB7CiAgICAgICAgIHVuc2ln
bmVkIHN0YWNrT2Zmc2V0OwogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQXJndW1lbnRz
OwotICAgICAgICBFeHByZXNzaW9uTGlzdCBhcmd1bWVudHM7CisgICAgICAgIFZlY3RvcjxWaXJ0
dWFsUmVnaXN0ZXI+IGFyZ3VtZW50czsKICAgICAgICAgRXhwcmVzc2lvbkxpc3QgcmVzdWx0czsK
ICAgICB9OwogCi0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yKGNv
bnN0IFNpZ25hdHVyZSYsIENhbGxSb2xlID0gQ2FsbFJvbGU6OkNhbGxlcik7CisgICAgTExJbnRD
YWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYp
OworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IGNhbGxJbmZvcm1hdGlvbkZvckNhbGxl
ZShjb25zdCBTaWduYXR1cmUmKTsKIAotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbCh1aW50MzJfdCBpbmRleCkKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyRm9yV2FzbUxvY2FsKHVpbnQzMl90IGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKGlu
ZGV4IDwgbV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzKQogICAgICAgICAgICAgcmV0dXJuIG1f
bm9ybWFsaXplZEFyZ3VtZW50c1tpbmRleF07CkBAIC0yMjcsNyArMjQ1LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY29uc3QgYXV0byYgY2FsbGluZ0NvbnZlbnRpb24gPSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKTsKICAgICAgICAgY29uc3QgdWludDMyX3QgZ3ByQ291bnQgPSBjYWxsaW5nQ29udmVu
dGlvbi5ncHJBcmdzLnNpemUoKTsKICAgICAgICAgY29uc3QgdWludDMyX3QgZnByQ291bnQgPSBj
YWxsaW5nQ29udmVudGlvbi5mcHJBcmdzLnNpemUoKTsKLSAgICAgICAgcmV0dXJuIDo6SlNDOjp2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG1fY29kZUJsb2NrLT5tX251bUFyZ3VtZW50
cyArIGdwckNvdW50ICsgZnByQ291bnQgKyBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVy
cyk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG1fY29k
ZUJsb2NrLT5tX251bUFyZ3VtZW50cyArIGdwckNvdW50ICsgZnByQ291bnQgKyBudW1iZXJPZkxM
SW50Q2FsbGVlU2F2ZVJlZ2lzdGVycyk7CiAgICAgfQogCiAgICAgRXhwcmVzc2lvbkxpc3QgdG1w
c0ZvclNpZ25hdHVyZShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUpCkBAIC0yNDUsNiArMjYzLDE5
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX2pzTnVsbENvbnN0YW50OwogICAgIH0KIAor
ICAgIEV4cHJlc3Npb25UeXBlIHJldXNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXdUZW1w
b3JhcnkoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBSZXN0PgorICAgIEV4
cHJlc3Npb25UeXBlIHJldXNlKEV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb24sIFJlc3QuLi4gZXhw
cmVzc2lvbnMpCisgICAgeworICAgICAgICBpZiAoIWV4cHJlc3Npb24tPnZpcnR1YWxSZWdpc3Rl
cigpLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBleHByZXNzaW9uOworICAgICAg
ICByZXR1cm4gcmV1c2Uoc3RkOjpmb3J3YXJkPFJlc3Q+KGV4cHJlc3Npb25zKS4uLik7CisgICAg
fQorCiAgICAgc3RydWN0IFN3aXRjaEVudHJ5IHsKICAgICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldCBvZmZzZXQ7CiAgICAgICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQqIGp1bXBU
YXJnZXQ7CkBAIC0yNTcsNyArMjg4LDkgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPExhYmVsKiwg
VmVjdG9yPFN3aXRjaEVudHJ5Pj4gbV9zd2l0Y2hlczsKICAgICBFeHByZXNzaW9uVHlwZSBtX2pz
TnVsbENvbnN0YW50OwogICAgIEV4cHJlc3Npb25MaXN0IG1fdW5pdGlhbGl6ZWRMb2NhbHM7Ci0g
ICAgU3RkVW5vcmRlcmVkTWFwPHVpbnQ2NF90LCBWaXJ0dWFsUmVnaXN0ZXI+IG1fY29uc3RhbnRN
YXA7CisgICAgU3RkVW5vcmRlcmVkTWFwPHVpbnQ2NF90LCB1bnNpZ25lZD4gbV9jb25zdGFudE1h
cDsKKyAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAyPiBtX3Jlc3VsdHM7CisgICAgU2VnbWVu
dGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NvbnN0YW50UG9vbFJlZ2lzdGVyczsKIH07CiAK
IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFy
c2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90
IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRocm93V2FzbUV4Y2Vw
dGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCkBAIC0yOTAsNyArMzIzLDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxpemUoKQogLy8gR2Vu
ZXJhdGVkIGZyb20gd2FzbS5qc29uCiAjaW5jbHVkZSAiV2FzbUxMSW50R2VuZXJhdG9ySW5saW5l
cy5oIgogCi1hdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3IoY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIENhbGxSb2xlIHJvbGUpIC0+IExMSW50Q2FsbEluZm9ybWF0aW9u
CithdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSW50Q2FsbEluZm9ybWF0aW9uCiB7CiAgICAgY29uc3Qg
YXV0byYgY2FsbGluZ0NvbnZlbnRpb24gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKICAgICBj
b25zdCB1aW50MzJfdCBncHJDb3VudCA9IGNhbGxpbmdDb252ZW50aW9uLmdwckFyZ3Muc2l6ZSgp
OwpAQCAtMjk5LDE0ICszMzIsOSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRp
b25Gb3IoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENhbGxSb2xlIHJvbAogICAgIHVpbnQz
Ml90IHN0YWNrQ291bnQgPSAwOwogICAgIHVpbnQzMl90IGdwckluZGV4ID0gMDsKICAgICB1aW50
MzJfdCBmcHJJbmRleCA9IDA7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFJlZ2lzdGVySUQ+LCAxNj4g
cmVnaXN0ZXJzOwotCi0gICAgRXhwcmVzc2lvbkxpc3QgYXJndW1lbnRzKHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkpOwotICAgIEV4cHJlc3Npb25MaXN0IHJlc3VsdHMoc2lnbmF0dXJlLnJldHVy
bkNvdW50KCkpOworICAgIHVpbnQzMl90IHN0YWNrSW5kZXggPSAwOwogCiAgICAgYXV0byBhbGxv
Y2F0ZVN0YWNrUmVnaXN0ZXIgPSBbJl0oVHlwZSB0eXBlKSB7Ci0gICAgICAgIEFTU0VSVChyb2xl
ID09IENhbGxSb2xlOjpDYWxsZXIpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAg
Y2FzZSBUeXBlOjpJMzI6CiAgICAgICAgIGNhc2UgVHlwZTo6STY0OgpAQCAtMzE0LDE5ICszNDIs
MTUgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBDYWxsUm9sZSByb2wKICAgICAgICAgY2FzZSBUeXBlOjpGdW5jcmVm
OgogICAgICAgICAgICAgaWYgKGdwckluZGV4IDwgZ3ByQ291bnQpCiAgICAgICAgICAgICAgICAg
KytncHJJbmRleDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVy
cy5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOworICAgICAgICAgICAgZWxzZSBpZiAoc3RhY2tJbmRl
eCsrID49IHN0YWNrQ291bnQpCiAgICAgICAgICAgICAgICAgKytzdGFja0NvdW50OwotICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZTo6RjMyOgogICAg
ICAgICBjYXNlIFR5cGU6OkY2NDoKICAgICAgICAgICAgIGlmIChmcHJJbmRleCA8IGZwckNvdW50
KQogICAgICAgICAgICAgICAgICsrZnBySW5kZXg7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICByZWdpc3RlcnMuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHN0YWNrSW5kZXgrKyA+PSBzdGFja0NvdW50KQogICAgICAgICAgICAgICAgICsr
c3RhY2tDb3VudDsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFZvaWQ6CiAgICAgICAgIGNhc2UgRnVuYzoKQEAgLTMzNSw5MiArMzU5LDE0NSBAQCBhdXRv
IExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3IoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIENhbGxSb2xlIHJvbAogICAgIH07CiAKIAotICAgIGlmIChyb2xlID09IENhbGxSb2xl
OjpDYWxsZWUpIHsKLSAgICAgICAgLy8gUmV1c2UgdGhlIHNsb3RzIHdlIGFsbG9jYXRlZCB0byBz
cGlsbCB0aGUgcmVnaXN0ZXJzIGluIGFkZEFyZ3VtZW50cwotICAgICAgICBmb3IgKHVpbnQzMl90
IGkgPSBncHJDb3VudCArIGZwckNvdW50OyBpLS07KQotICAgICAgICAgICAgcmVnaXN0ZXJzLmFw
cGVuZChuZXcgUmVnaXN0ZXJJRCg6OkpTQzo6dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobnVtYmVy
T2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnMgKyBpKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBncHJDb3VudDsgaSsrKQotICAgICAgICAgICAgcmVn
aXN0ZXJzLmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7Ci0gICAgICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBmcHJDb3VudDsgaSsrKQotICAgICAgICAgICAgcmVnaXN0ZXJzLmFwcGVuZChuZXdU
ZW1wb3JhcnkoKSk7Ci0KLSAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCk7IGkrKykKLSAgICAgICAgICAgIGFsbG9jYXRlU3RhY2tSZWdpc3Rl
cihzaWduYXR1cmUuYXJndW1lbnQoaSkpOwotICAgICAgICBncHJJbmRleCA9IDA7Ci0gICAgICAg
IGZwckluZGV4ID0gMDsKLSAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS5yZXR1cm5Db3VudCgpOyBpKyspCi0gICAgICAgICAgICBhbGxvY2F0ZVN0YWNrUmVnaXN0ZXIo
c2lnbmF0dXJlLnJldHVyblR5cGUoaSkpOwotICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKQorICAgICAgICBhbGxvY2F0ZVN0
YWNrUmVnaXN0ZXIoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKTsKKyAgICBncHJJbmRleCA9IDA7Cisg
ICAgZnBySW5kZXggPSAwOworICAgIHN0YWNrSW5kZXggPSAwOworICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgaSsrKQorICAgICAgICBhbGxvY2F0
ZVN0YWNrUmVnaXN0ZXIoc2lnbmF0dXJlLnJldHVyblR5cGUoaSkpOwogCi0gICAgdW5zaWduZWQg
c3RhY2tPZmZzZXQ7Ci0gICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlZSkKLSAgICAgICAg
c3RhY2tPZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXJlZ2lzdGVycy5sYXN0KCktPmlu
ZGV4KCkpOwotICAgIGVsc2UgewotICAgICAgICAvLyBBbGlnbiB0aGUgc3RhY2sKLSAgICAgICAg
YXV0byBjb21wdXRlU3RhY2tPZmZzZXQgPSBbJl0gewotICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPigtcmVnaXN0ZXJzLmxhc3QoKS0+aW5kZXgoKSkgKyBDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgfTsKLSAgICAgICAgd2hpbGUgKGNvbXB1
dGVTdGFja09mZnNldCgpICUgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkKLSAgICAgICAgICAg
IHJlZ2lzdGVycy5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwotICAgICAgICBzdGFja09mZnNldCA9
IGNvbXB1dGVTdGFja09mZnNldCgpOwotICAgIH0KKyAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxs
ZWVMb2NhbHMgPSBzdGQ6Om1heDxpbnQ+KG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2Fscywg
bV9jYWxsZWVMb2NhbHMuc2l6ZSgpICsgZ3ByQ291bnQgKyBmcHJDb3VudCArIHN0YWNrQ291bnQg
KyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CisgICAgaWYgKG1fY29kZUJsb2Nr
LT5tX251bUNhbGxlZUxvY2FscyAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpCisgICAgICAg
ICsrbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9jYWxzOworCisgICAgY29uc3QgdW5zaWduZWQg
c3RhY2tPZmZzZXQgPSBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVMb2NhbHM7CisgICAgY29uc3Qg
dW5zaWduZWQgYmFzZSA9IG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2FscyAtIENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzIC0gMTsKKworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0
ZXI+IGFyZ3VtZW50cyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBFeHByZXNzaW9u
TGlzdCByZXN1bHRzKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKTsKIAotICAgIEFTU0VSVChyb2xl
ID09IENhbGxSb2xlOjpDYWxsZXIgfHwgIXN0YWNrQ291bnQpOwotICAgIGNvbnN0IHVpbnQzMl90
IG1heEdQUkluZGV4ID0gc3RhY2tDb3VudCArIGdwckNvdW50OworICAgIGNvbnN0IHVpbnQzMl90
IG1heEdQUkluZGV4ID0gZ3ByQ291bnQ7CiAgICAgY29uc3QgdWludDMyX3QgbWF4RlBSSW5kZXgg
PSBtYXhHUFJJbmRleCArIGZwckNvdW50OwotICAgIHVpbnQzMl90IHN0YWNrSW5kZXggPSAwOwot
ICAgIGF1dG8gYXBwZW5kRm9yVHlwZSA9IFsmXShUeXBlIHR5cGUsIHVuc2lnbmVkIGluZGV4LCBh
dXRvJiB2ZWN0b3IpIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7CisKKyAgICBncHJJbmRleCA9
IDA7CisgICAgZnBySW5kZXggPSBtYXhHUFJJbmRleDsKKyAgICBzdGFja0luZGV4ID0gbWF4RlBS
SW5kZXg7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgewog
ICAgICAgICBjYXNlIFR5cGU6OkkzMjoKICAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CiAgICAgICAg
IGNhc2UgVHlwZTo6QW55cmVmOgogICAgICAgICBjYXNlIFR5cGU6OkZ1bmNyZWY6CiAgICAgICAg
ICAgICBpZiAoZ3BySW5kZXggPCBtYXhHUFJJbmRleCkKLSAgICAgICAgICAgICAgICB2ZWN0b3Jb
aW5kZXhdID0gcmVnaXN0ZXJzW3JlZ2lzdGVycy5zaXplKCkgLSBncHJJbmRleCsrIC0gMV07Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBDYWxsUm9sZTo6
Q2FsbGVyKQotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaW5kZXhdID0gcmVnaXN0ZXJzW3Jl
Z2lzdGVycy5zaXplKCkgLSBzdGFja0luZGV4KysgLSAxXTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpbmRleF0gPSBuZXcgUmVnaXN0ZXJJRCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChzdGFja0luZGV4KyspKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBhcmd1bWVudHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChiYXNl
IC0gZ3BySW5kZXgrKyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1l
bnRzW2ldID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYmFzZSAtIHN0YWNrSW5kZXgrKyk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlOjpGMzI6CiAgICAgICAgIGNhc2Ug
VHlwZTo6RjY0OgogICAgICAgICAgICAgaWYgKGZwckluZGV4IDwgbWF4RlBSSW5kZXgpCi0gICAg
ICAgICAgICAgICAgdmVjdG9yW2luZGV4XSA9IHJlZ2lzdGVyc1tyZWdpc3RlcnMuc2l6ZSgpIC0g
ZnBySW5kZXgrKyAtIDFdOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcikKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2lu
ZGV4XSA9IHJlZ2lzdGVyc1tyZWdpc3RlcnMuc2l6ZSgpIC0gc3RhY2tJbmRleCsrIC0gMV07Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaW5kZXhdID0g
bmV3IFJlZ2lzdGVySUQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoc3RhY2tJbmRleCsrKSk7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoYmFzZSAtIGZwckluZGV4KyspOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGJhc2Ug
LSBzdGFja0luZGV4KyspOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVm9pZDoK
ICAgICAgICAgY2FzZSBGdW5jOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgfQotICAgIH07CisgICAgfQogCi0gICAgZ3BySW5kZXggPSBzdGFja0Nv
dW50OwotICAgIGZwckluZGV4ID0gbWF4R1BSSW5kZXg7Ci0gICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykKLSAgICAgICAgYXBwZW5kRm9y
VHlwZShzaWduYXR1cmUuYXJndW1lbnQoaSksIGksIGFyZ3VtZW50cyk7Ci0gICAgZ3BySW5kZXgg
PSBzdGFja0NvdW50OworICAgIGdwckluZGV4ID0gMDsKICAgICBmcHJJbmRleCA9IG1heEdQUklu
ZGV4OwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQo
KTsgaSsrKQotICAgICAgICBhcHBlbmRGb3JUeXBlKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpLCBp
LCByZXN1bHRzKTsKLQotICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxsZXIpIHsKLSAgICAg
ICAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgY2FsbCBmcmFtZS4KLSAgICAgICAgVmVjdG9yPFJlZlB0
cjxSZWdpc3RlcklEPiwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyAyLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4gY2FsbEZyYW1lOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOyArK2kpCi0gICAgICAgICAgICBjYWxs
RnJhbWUuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKKyAgICBzdGFja0luZGV4ID0gbWF4RlBSSW5k
ZXg7CisgICAgLy8gRklYTUU6IFNlZ21lbnRlZFZlY3Rvcjo6Z3JvdyBjb3VsZCBoYXZlIGEgZmFz
dGVyIGltcGxlbWVudGF0aW9uCisgICAgbV9jYWxsZWVMb2NhbHMuZ3JvdyhtX2NvZGVCbG9jay0+
bV9udW1DYWxsZWVMb2NhbHMpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1
cmUucmV0dXJuQ291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVy
blR5cGUoaSkpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6
STY0OgorICAgICAgICBjYXNlIFR5cGU6OkFueXJlZjoKKyAgICAgICAgY2FzZSBUeXBlOjpGdW5j
cmVmOgorICAgICAgICAgICAgaWYgKGdwckluZGV4IDwgbWF4R1BSSW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBSZWdpc3RlcklEJiBsb2NhbCA9IG1fY2FsbGVlTG9jYWxzW2Jhc2UgLSBncHJJbmRl
eF07CisgICAgICAgICAgICAgICAgbmV3ICgmbG9jYWwpIFJlZ2lzdGVySUQodmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoYmFzZSAtIGdwckluZGV4KSk7CisgICAgICAgICAgICAgICAgcmVzdWx0c1tp
XSA9ICZsb2NhbDsKKyAgICAgICAgICAgICAgICArK2dwckluZGV4OworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBSZWdpc3RlcklEJiBsb2NhbCA9IG1fY2FsbGVlTG9jYWxz
W2Jhc2UgLSBzdGFja0luZGV4XTsKKyAgICAgICAgICAgICAgICBuZXcgKCZsb2NhbCkgUmVnaXN0
ZXJJRCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChiYXNlIC0gc3RhY2tJbmRleCkpOworICAgICAg
ICAgICAgICAgIHJlc3VsdHNbaV0gPSAmbG9jYWw7CisgICAgICAgICAgICAgICAgKytzdGFja0lu
ZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlw
ZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIGlmIChmcHJJbmRl
eCA8IG1heEZQUkluZGV4KSB7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCYgbG9jYWwgPSBt
X2NhbGxlZUxvY2Fsc1tiYXNlIC0gZnBySW5kZXhdOworICAgICAgICAgICAgICAgIG5ldyAoJmxv
Y2FsKSBSZWdpc3RlcklEKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGJhc2UgLSBmcHJJbmRleCkp
OworICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSAmbG9jYWw7CisgICAgICAgICAgICAgICAg
KytmcHJJbmRleDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUmVnaXN0
ZXJJRCYgbG9jYWwgPSBtX2NhbGxlZUxvY2Fsc1tiYXNlIC0gc3RhY2tJbmRleF07CisgICAgICAg
ICAgICAgICAgbmV3ICgmbG9jYWwpIFJlZ2lzdGVySUQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
YmFzZSAtIHN0YWNrSW5kZXgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0gJmxvY2Fs
OworICAgICAgICAgICAgICAgICsrc3RhY2tJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgIGNhc2UgRnVuYzoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICByZXR1cm4gTExJbnRDYWxsSW5mb3JtYXRpb24geyBzdGFja09mZnNldCwgc3RhY2tDb3Vu
dCwgV1RGTW92ZShhcmd1bWVudHMpLCBXVEZNb3ZlKHJlc3VsdHMpIH07CiB9CiAKK2F1dG8gTExJ
bnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSkgLT4gVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4KK3sKKyAgICBpZiAobV9yZXN1
bHRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0czsKKworICAgIG1fcmVzdWx0cy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKTsKKworICAgIGNv
bnN0IGF1dG8mIGNhbGxpbmdDb252ZW50aW9uID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7Cisg
ICAgY29uc3QgdWludDMyX3QgZ3ByQ291bnQgPSBjYWxsaW5nQ29udmVudGlvbi5ncHJBcmdzLnNp
emUoKTsKKyAgICBjb25zdCB1aW50MzJfdCBmcHJDb3VudCA9IGNhbGxpbmdDb252ZW50aW9uLmZw
ckFyZ3Muc2l6ZSgpOworCisgICAgdWludDMyX3QgZ3BySW5kZXggPSAwOworICAgIHVpbnQzMl90
IGZwckluZGV4ID0gZ3ByQ291bnQ7CisgICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CisgICAg
Y29uc3QgdWludDMyX3QgbWF4R1BSSW5kZXggPSBncHJDb3VudDsKKyAgICBjb25zdCB1aW50MzJf
dCBtYXhGUFJJbmRleCA9IG1heEdQUkluZGV4ICsgZnByQ291bnQ7CisKKyAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7IGkrKykgeworICAgICAgICBz
d2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMy
OgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgY2FzZSBUeXBlOjpBbnlyZWY6Cisg
ICAgICAgIGNhc2UgVHlwZTo6RnVuY3JlZjoKKyAgICAgICAgICAgIGlmIChncHJJbmRleCA8IG1h
eEdQUkluZGV4KQorICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQodmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwobnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnMgKyBncHJJbmRleCsr
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChzdGFja0luZGV4KyspKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6Cisg
ICAgICAgICAgICBpZiAoZnBySW5kZXggPCBtYXhGUFJJbmRleCkKKyAgICAgICAgICAgICAgICBt
X3Jlc3VsdHMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG51bWJlck9mTExJbnRDYWxs
ZWVTYXZlUmVnaXN0ZXJzICsgZnBySW5kZXgrKykpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoc3Rh
Y2tJbmRleCsrKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWb2lkOgorICAg
ICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1fcmVzdWx0czsKK30KKworCiBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBtX2NvZGVCbG9jay0+bV9udW1Bcmd1bWVudHMgPSBz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpOwpAQCAtNDkzLDE3ICs1NzAsMTUgQEAgdm9pZCBMTElu
dEdlbmVyYXRvcjo6ZGlkRmluaXNoUGFyc2luZ0xvY2FscygpCiAKIGF1dG8gTExJbnRHZW5lcmF0
b3I6OmFkZENvbnN0YW50KFR5cGUgdHlwZSwgdWludDY0X3QgdmFsdWUpIC0+IEV4cHJlc3Npb25U
eXBlCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNvdXJjZShGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCArIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5zaXplKCkpOwotICAgIGF1dG8gcmVzdWx0
ID0gbV9jb25zdGFudE1hcC5lbXBsYWNlKHZhbHVlLCBzb3VyY2UpOwotICAgIGlmIChyZXN1bHQu
c2Vjb25kKSB7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5hcHBlbmQodmFsdWUp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZFdhc21CeXRlY29k
ZXMoKSkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudFR5cGVzLmFwcGVuZCh0
eXBlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291cmNlID0gcmVzdWx0LmZpcnN0LT5zZWNvbmQ7
Ci0gICAgYXV0byB0YXJnZXQgPSBuZXdUZW1wb3JhcnkoKTsKLSAgICBXYXNtTW92OjplbWl0KHRo
aXMsIHRhcmdldCwgc291cmNlKTsKLSAgICByZXR1cm4gdGFyZ2V0OworICAgIGF1dG8gcmVzdWx0
ID0gbV9jb25zdGFudE1hcC5lbXBsYWNlKHZhbHVlLCBtX2NvbnN0YW50UG9vbFJlZ2lzdGVycy5z
aXplKCkpOworICAgIGlmICghcmVzdWx0LnNlY29uZCkKKyAgICAgICAgcmV0dXJuICZtX2NvbnN0
YW50UG9vbFJlZ2lzdGVyc1tyZXN1bHQuZmlyc3QtPnNlY29uZF07CisKKyAgICBtX2NvbnN0YW50
UG9vbFJlZ2lzdGVycy5hcHBlbmQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvZGVC
bG9jay0+bV9jb25zdGFudHMuc2l6ZSgpKTsKKyAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudHMu
YXBwZW5kKHZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZFdh
c21CeXRlY29kZXMoKSkpCisgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50VHlwZXMuYXBw
ZW5kKHR5cGUpOworICAgIHJldHVybiAmbV9jb25zdGFudFBvb2xSZWdpc3RlcnMubGFzdCgpOwog
fQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdApAQCAtNTExLDEzICs1ODYsMTMgQEAg
YXV0byBMTEludEdlbmVyYXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWwKICAgICAvLyBGSVhNRTogUmVtb3ZlIHVubmVjZXNzYXJ5
IG1vdmVzCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MzY1NwogICAgIHJlc3VsdCA9IG5ld1RlbXBvcmFyeSgpOwotICAgIFdhc21Nb3Y6OmVtaXQodGhp
cywgcmVzdWx0LCB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCkpOworICAgIFdhc21Nb3Y6
OmVtaXQodGhpcywgcmVzdWx0LCB2aXJ0dWFsUmVnaXN0ZXJGb3JXYXNtTG9jYWwoaW5kZXgpKTsK
ICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAg
ICBXYXNtTW92OjplbWl0KHRoaXMsIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4KSwgdmFs
dWUpOworICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgdmlydHVhbFJlZ2lzdGVyRm9yV2FzbUxvY2Fs
KGluZGV4KSwgdmFsdWUpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTU0MCwxMCArNjE1LDIz
IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVz
c2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExv
b3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRy
b2xUeXBlJiBibG9jaywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKKyAgICBuZXdTdGFjay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBlbmNsb3NpbmdT
dGFjay5zaXplKCkgLSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAg
ICBFeHByZXNzaW9uVHlwZSBlbnRyeSA9IGVuY2xvc2luZ1N0YWNrLmF0KGkgKyBvZmZzZXQpOwor
ICAgICAgICBpZiAoIWVudHJ5LT52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgICAgIG5ld1N0YWNrLnVuY2hlY2tlZEFwcGVuZChlbnRyeSk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBFeHByZXNzaW9uVHlwZSB0bXAgPSBuZXdUZW1w
b3JhcnkoKTsKKyAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCB0bXAsIGVudHJ5KTsKKyAgICAg
ICAgbmV3U3RhY2sudW5jaGVja2VkQXBwZW5kKHRtcCk7CisgICAgfQorICAgIGVuY2xvc2luZ1N0
YWNrLnNocmluayhvZmZzZXQpOworCiAgICAgUmVmPExhYmVsPiBib2R5ID0gbmV3RW1pdHRlZExh
YmVsKCk7CiAgICAgUmVmPExhYmVsPiBjb250aW51YXRpb24gPSBuZXdMYWJlbCgpOwogCi0gICAg
bmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOwogICAgIGJs
b2NrID0gQ29udHJvbFR5cGU6Omxvb3Aoc2lnbmF0dXJlLCBuZXdTdGFjaywgV1RGTW92ZShib2R5
KSwgV1RGTW92ZShjb250aW51YXRpb24pKTsKIAogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+
IG9zckVudHJ5RGF0YTsKQEAgLTU1NCw5ICs2NDIsOSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBD
bwogICAgIGNvbnN0IHVpbnQzMl90IGdwckNvdW50ID0gY2FsbGluZ0NvbnZlbnRpb24uZ3ByQXJn
cy5zaXplKCk7CiAgICAgY29uc3QgdWludDMyX3QgZnByQ291bnQgPSBjYWxsaW5nQ29udmVudGlv
bi5mcHJBcmdzLnNpemUoKTsKICAgICBmb3IgKGludDMyX3QgaSA9IGdwckNvdW50ICsgZnByQ291
bnQgKyBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVyczsgaSA8IG1fY29kZUJsb2NrLT5t
X251bVZhcnM7IGkrKykKLSAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZCg6OkpTQzo6dmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaSkpOworICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9
IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29u
dHJvbEluZGV4KSB7Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2sgPSBt
X3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjazsKKyAgICAgICAgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9s
U3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOwogICAgICAgICBm
b3IgKGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCiAgICAgICAgICAgICBvc3JF
bnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24tPnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CkBA
IC01OTIsNyArNjgwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFMKICAgICByZXR1cm4geyB9
OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xUeXBlJiBkYXRhLCBj
b25zdCBFeHByZXNzaW9uTGlzdCYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRv
IExMSW50R2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xUeXBlJiBkYXRhLCBjb25zdCBTdGFjayYg
Y3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8Q29udHJvbElmPihkYXRhKSk7CiAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
ZGF0YS5tX3Jlc3VsdHMsIGN1cnJlbnRTdGFjayk7CkBAIC02MDgsMjEgKzY5NiwyMCBAQCBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkg
LT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0
b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sVHlwZSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6
YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xUeXBlJiBkYXRhLCBjb25zdCBTdGFjayYgcmV0dXJuVmFs
dWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgaWYgKCFkYXRhLm1fc2lnbmF0dXJlLT5yZXR1
cm5Db3VudCgpKSB7CiAgICAgICAgIFdhc21SZXRWb2lkOjplbWl0KHRoaXMpOwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAotICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxs
SW5mb3JtYXRpb25Gb3IoKmRhdGEubV9zaWduYXR1cmUsIENhbGxSb2xlOjpDYWxsZWUpOwotICAg
IHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGluZm8ucmVzdWx0cywgcmV0dXJuVmFsdWVzKTsKKyAgICB1
bmlmeVZhbHVlc1dpdGhCbG9jayhjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoKmRhdGEubV9zaWdu
YXR1cmUpLCByZXR1cm5WYWx1ZXMpOwogICAgIFdhc21SZXQ6OmVtaXQodGhpcyk7CiAKICAgICBy
ZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbFR5
cGUmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3Qm
IHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
QnJhbmNoKENvbnRyb2xUeXBlJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0
IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1bmlmeVZhbHVl
c1dpdGhCbG9jayhkYXRhLm1fcmVzdWx0cywgcmV0dXJuVmFsdWVzKTsKIApAQCAtNjM1LDcgKzcy
Miw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sVHlwZSYgZGF0YSwg
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29u
c3QgVmVjdG9yPENvbnRyb2xUeXBlKj4mIHRhcmdldHMsIENvbnRyb2xUeXBlJiBkZWZhdWx0VGFy
Z2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0
aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbFR5cGUqPiYgdGFyZ2V0cywgQ29udHJvbFR5cGUmIGRl
ZmF1bHRUYXJnZXQsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gbV9jb2RlQmxvY2stPm51bWJlck9mSnVt
cFRhYmxlcygpOwogICAgIEZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFibGUmIGp1bXBUYWJsZSA9
IG1fY29kZUJsb2NrLT5hZGRKdW1wVGFibGUodGFyZ2V0cy5zaXplKCkpOwpAQCAtNjY1LDcgKzc1
Miw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0
byBMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVy
YXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4cHJlc3Npb25TdGFj
aykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENvbnRyb2xUeXBlJiBkYXRhID0gZW50cnkuY29u
dHJvbERhdGE7CiAKQEAgLTcwMyw3ICs3OTAsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRF
bmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZQog
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhw
cmVzc2lvbkxpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7Ci0gICAgTExJbnRDYWxsSW5m
b3JtYXRpb24gaW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUpOworICAgIExMSW50
Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoc2lnbmF0dXJl
KTsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhpbmZvLmFyZ3VtZW50cywgYXJncyk7CiAgICAg
cmVzdWx0cyA9IFdURk1vdmUoaW5mby5yZXN1bHRzKTsKICAgICBpZiAoQ29udGV4dDo6dXNlRmFz
dFRMUygpKQpAQCAtNzIyLDcgKzgwOSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhbGxJ
bmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hCiAgICAg
QVNTRVJUKG1faW5mby50YWJsZUNvdW50KCkgPiB0YWJsZUluZGV4KTsKICAgICBBU1NFUlQobV9p
bmZvLnRhYmxlc1t0YWJsZUluZGV4XS50eXBlKCkgPT0gVGFibGVFbGVtZW50VHlwZTo6RnVuY3Jl
Zik7CiAKLSAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2FsbEluZm9ybWF0aW9uRm9y
KHNpZ25hdHVyZSk7CisgICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJbmZvcm1h
dGlvbkZvckNhbGxlcihzaWduYXR1cmUpOwogICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGluZm8u
YXJndW1lbnRzLCBhcmdzKTsKICAgICByZXN1bHRzID0gV1RGTW92ZShpbmZvLnJlc3VsdHMpOwog
ICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCkBAIC03MzUsNyArODIyLDcgQEAgYXV0byBM
TEludEdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmEKIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4
cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7Ci0gICAgcmVzdWx0ID0gdmFsdWU7CisgICAgcmVzdWx0ID0gcmV1c2UodmFsdWUpOwog
ICAgIFdhc21SZWZJc051bGw6OmVtaXQodGhpcywgcmVzdWx0LCB2YWx1ZSk7CiAKICAgICByZXR1
cm4geyB9OwpAQCAtNzUxLDcgKzgzOCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJlZkZ1
bmModWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpCiAKIGF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJl
c3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
CiB7Ci0gICAgcmVzdWx0ID0gaW5kZXg7CisgICAgcmVzdWx0ID0gcmV1c2UoaW5kZXgpOwogICAg
IFdhc21UYWJsZUdldDo6ZW1pdCh0aGlzLCByZXN1bHQsIGluZGV4LCB0YWJsZUluZGV4KTsKIAog
ICAgIHJldHVybiB7IH07CkBAIC03NzQsNyArODYxLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6
YWRkVGFibGVTaXplKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0KIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5k
ZXgsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gZmlsbDsKKyAg
ICByZXN1bHQgPSByZXVzZShmaWxsLCBkZWx0YSk7CiAgICAgV2FzbVRhYmxlR3Jvdzo6ZW1pdCh0
aGlzLCByZXN1bHQsIGZpbGwsIGRlbHRhLCB0YWJsZUluZGV4KTsKIAogICAgIHJldHVybiB7IH07
CkBAIC04MDQsNyArODkxLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9y
eShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiAKIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBkZWx0YTsKKyAg
ICByZXN1bHQgPSByZXVzZShkZWx0YSk7CiAgICAgV2FzbUdyb3dNZW1vcnk6OmVtaXQodGhpcywg
cmVzdWx0LCBkZWx0YSk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtODEyLDcgKzg5OSw3IEBAIGF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFNlbGVjdChF
eHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Np
b25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
LSAgICByZXN1bHQgPSBjb25kaXRpb247CisgICAgcmVzdWx0ID0gcmV1c2UoY29uZGl0aW9uLCBu
b25aZXJvLCB6ZXJvKTsKICAgICBXYXNtU2VsZWN0OjplbWl0KHRoaXMsIHJlc3VsdCwgY29uZGl0
aW9uLCBub25aZXJvLCB6ZXJvKTsKIAogICAgIHJldHVybiB7IH07CkBAIC04MjAsNyArOTA3LDcg
QEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywKIAogYXV0byBMTEludEdlbmVyYXRvcjo6bG9hZChM
b2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBw
b2ludGVyOworICAgIHJlc3VsdCA9IHJldXNlKHBvaW50ZXIpOwogICAgIHN3aXRjaCAob3ApIHsK
ICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoKICAgICAgICAgV2FzbUkzMkxvYWQ4Uzo6
ZW1pdCh0aGlzLCByZXN1bHQsIHBvaW50ZXIsIG9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCmluZGV4IDc3MmI1MTk2NmU0NTdkMjk2OGJjNjVi
MzEwOTM4ZGRmYmMyYjEwZjYuLmJjZWViMjg2YmEzY2IzMTk3ZWJmYjgwYjRlNWVmNTE2ZmFiNGQ1
OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCkBA
IC04MCwxMCArODAsMTAgQEAgdm9pZCBMTEludFBsYW46OmNvbXBpbGVGdW5jdGlvbih1aW50MzJf
dCBmdW5jdGlvbkluZGV4KQogICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5k
ZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKIAogICAgIGlmIChtX2V4cG9y
dGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpIHx8IG1fbW9kdWxlSW5m
b3JtYXRpb24tPnJlZmVyZW5jZWRGdW5jdGlvbnMoKS5jb250YWlucyhmdW5jdGlvbkluZGV4KSkg
ewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgIEVtYmVk
ZXJUb1dhc21GdW5jdGlvbiBlbnRyeTsKICAgICAgICAgZW50cnkuaml0ID0gbWFrZVVuaXF1ZTxD
Q2FsbEhlbHBlcnM+KCk7CiAgICAgICAgIGVudHJ5LmZ1bmN0aW9uID0gbV9jcmVhdGVFbWJlZGRl
cldyYXBwZXIoKmVudHJ5LmppdCwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5j
dGlvbkluZGV4KTsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAg
ICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQo
ZnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbnRyeSkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383387</attachid>
            <date>2019-11-12 14:51:42 -0800</date>
            <delta_ts>2019-11-17 21:45:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204092-20191112145142.patch</filename>
            <type>text/plain</type>
            <size>34539</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MWVjZjQ0MmU3YjA0ZGU1ZWQ3MWExMzBlNDk2NDAzZDhhZWJhYzkyLi5kNDFmMGJmOWNiNDBkNDk1
ODJiMjEyOThhMmI5NWI5ZmEwZDE4NjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NiBAQAorMjAxOS0xMS0xMSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBbV2ViQXNzZW1ibHldIEltcHJvdmUgV2FzbTo6TExJbnRHZW5lcmF0b3IK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDA5Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW1w
cm92ZXMgdGhlIFdhc206OkxMSW50R2VuZXJhdG9yIGJ5OgorICAgICAgICAtIFJlbW92aW5nIHJl
ZHVuZGFudCBtb3ZlcyB3aGVuIG1hdGVyaWFsaXppbmcgY29uc3RhbnRzOiBJbnN0ZWFkIG9mIGNy
ZWF0aW5nIGEgbmV3IHRlbXBvcmFyeSBmb3IgZWFjaCBjb25zdGFudCwgd2UgcmV0dXJuIHRoZSBj
b25zdGFudAorICAgICAgICAgIHZpcnR1YWwgcmVnaXN0ZXIgZGlyZWN0bHkuIEluIG9yZGVyIGZv
ciB0aGlzIHRvIHdvcmssIHdlIGhhdmUgdG8gbW92ZSBjb25zdGFudHMgdGhhdCBhcmUgcGFzc2Vk
IGFzIGFyZ3VtZW50cyB0byBsb29wcyBpbnRvIHRlbXBvcmFyaWVzLAorICAgICAgICAgIHNpbmNl
IHRob3NlIHJlZ2lzdGVycyB3aWxsIGJlIHdyaXR0ZW4gdG8gaW4gbG9vcCBiYWNrIGVkZ2VzCisg
ICAgICAgIC0gQWRkaW5nIGEgY29uc3RydWN0b3IgdG8gQ29udHJvbFR5cGUgdGhhdCB0YWtlcyB0
aGUgcmVzdWx0cyBFeHByZXNzaW9uTGlzdCBhcyBhbiBydmFsdWUgaW5zdGVhZCBvZiBjb3B5aW5n
IGl0CisgICAgICAgIC0gT3B0aW1pemluZyBjYWxsSW5mb3JtYXRpb25Gb3IsIHdoaWNoIGlzIG5v
dyBzcGxpdCBpbnRvIHR3byBmdW5jdGlvbnMuICBUaGUgY2FsbGVlIGRvZXMgbm90IGNhcmUgYWJv
dXQgYXJndW1lbnRzLCBhbmQgc2hvdWxkCisgICAgICAgICAgbmV2ZXIgYWxsb2NhdGUgdGVtcG9y
YXJpZXMsIGFuZCB0aGUgY2FsbGVyIGNhc2Ugd2FzIG9wdGltaXplZCBieSBhdm9pZGluZyB1bm5l
Y2Vzc2FyeSBjYWxscyB0byBuZXdUZW1wb3JhcnkKKyAgICAgICAgLSBEZWxheSBob2xkaW5nIHRo
ZSBsb2NrIGluIExMaW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9uLCBzaW5jZSB3ZSBkbyBub3QgbmVl
ZCB0byBob2xkIGl0IHdoaWxlIGNvbXBpbGluZyB0aGUganMtdG8td2FzbSBlbnRyeXBvaW50CisK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3JCYXNlLmg6CisgICAgICAg
ICogZ2VuZXJhdG9yL1dhc20ucmI6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omxv
b3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnRv
cExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBl
OjpibG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlw
ZTo6aWZfKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBl
OjpDb250cm9sVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjp2aXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6dW5pZnlW
YWx1ZXNXaXRoQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6ZHVt
cCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjp2aXJ0dWFsUmVnaXN0ZXJG
b3JXYXNtTG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6cmV1c2Up
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9y
Q2FsbGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1h
dGlvbkZvckNhbGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRD
b25zdGFudCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpnZXRMb2NhbCk6
CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpzZXRMb2NhbCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRMb29wKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TExJbnRHZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6
OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRTd2l0
Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjphZGRHcm93TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6
OmFkZFNlbGVjdCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpsb2FkKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJ
bmZvcm1hdGlvbkZvcik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtTExJbnRQbGFuLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorCiAy
MDE5LTExLTExICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgZml4IGluY29ycmVjdCBhc3NlcnRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvV2FzbS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvV2FzbS5yYgppbmRleCBjMDBjNjI5ZGQwMzc2MzczMzkyODBjMTUxYTg3OWMyYWIz
YmE4ZGY0Li42N2I2NjBjZDkyOGRmMzBmOTBhNzgxMTc1YTVlZjAyY2U5Y2E1NmQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1dhc20ucmIKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9XYXNtLnJiCkBAIC01OCw3ICs1OCw3IEBAIG1vZHVs
ZSBXYXNtCiB0ZW1wbGF0ZTw+CiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRPcDwje29wX3R5cGUo
b3ApfT4oRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBsaHM7CisgICAg
cmVzdWx0ID0gcmV1c2UobGhzLCByaHMpOwogICAgICN7b3AuY2FwaXRhbGl6ZWRfbmFtZX06OmVt
aXQodGhpcywgcmVzdWx0LCBsaHMsIHJocyk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTcwLDcg
KzcwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkT3A8I3tvcF90eXBlKG9wKX0+KEV4cHJl
c3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmgKIHRlbXBsYXRlPD4KIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OmFkZE9wPCN7b3BfdHlwZShvcCl9PihFeHByZXNzaW9uVHlwZSBvcGVyYW5kLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0g
b3BlcmFuZDsKKyAgICByZXN1bHQgPSByZXVzZShvcGVyYW5kKTsKICAgICAje29wLmNhcGl0YWxp
emVkX25hbWV9OjplbWl0KHRoaXMsIHJlc3VsdCwgb3BlcmFuZCk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwCmluZGV4IGJhZWY1MDcwMzdmOTYxNzM0YTlhOGJlYTQyNzc2Njk0ZmYzNzViNDMuLmJhYjNk
NjRlMmZiZDIxMmI4MmI3ODk4ZTJmZDI2NGVhZmZkYWU0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtNzMsMjQgKzczLDI0
IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvbnRy
b2xUeXBlIGxvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmVzdWx0cywgUmVmPExhYmVsPiBib2R5LCBSZWZQdHI8TGFiZWw+IGNvbnRpbnVhdGlvbikK
KyAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGxvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJl
LCBjb25zdCBTdGFjayYgcmVzdWx0cywgUmVmPExhYmVsPiBib2R5LCBSZWZQdHI8TGFiZWw+IGNv
bnRpbnVhdGlvbikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNp
Z25hdHVyZSwgcmVzdWx0cywgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sTG9vcCB7IFdU
Rk1vdmUoYm9keSkgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUg
dG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9uTGlzdCYg
cmVzdWx0cywgUmVmUHRyPExhYmVsPiBjb250aW51YXRpb24pCisgICAgICAgIHN0YXRpYyBDb250
cm9sVHlwZSB0b3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIEV4cHJlc3Npb25MaXN0
JiYgcmVzdWx0cywgUmVmUHRyPExhYmVsPiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHJlc3VsdHMsIFdURk1vdmUoY29u
dGludWF0aW9uKSwgQ29udHJvbFRvcExldmVsIHsgfSk7CisgICAgICAgICAgICByZXR1cm4gQ29u
dHJvbFR5cGUoc2lnbmF0dXJlLCBXVEZNb3ZlKHJlc3VsdHMpLCBXVEZNb3ZlKGNvbnRpbnVhdGlv
biksIENvbnRyb2xUb3BMZXZlbCB7IH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENv
bnRyb2xUeXBlIGJsb2NrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJlc3VsdHMsIFJlZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQorICAgICAgICBzdGF0
aWMgQ29udHJvbFR5cGUgYmxvY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBFeHByZXNzaW9u
TGlzdCYmIHJlc3VsdHMsIFJlZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCByZXN1bHRzLCBXVEZNb3Zl
KGNvbnRpbnVhdGlvbiksIENvbnRyb2xCbG9jayB7IH0pOworICAgICAgICAgICAgcmV0dXJuIENv
bnRyb2xUeXBlKHNpZ25hdHVyZSwgV1RGTW92ZShyZXN1bHRzKSwgV1RGTW92ZShjb250aW51YXRp
b24pLCBDb250cm9sQmxvY2sgeyB9KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBDb250
cm9sVHlwZSBpZl8oQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmVzdWx0cywgUmVmPExhYmVsPiBhbHRlcm5hdGUsIFJlZlB0cjxMYWJlbD4gY29udGludWF0
aW9uKQorICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgaWZfKEJsb2NrU2lnbmF0dXJlIHNpZ25h
dHVyZSwgRXhwcmVzc2lvbkxpc3QmJiByZXN1bHRzLCBSZWY8TGFiZWw+IGFsdGVybmF0ZSwgUmVm
UHRyPExhYmVsPiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBD
b250cm9sVHlwZShzaWduYXR1cmUsIHJlc3VsdHMsIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29u
dHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOworICAgICAgICAgICAgcmV0dXJuIENvbnRy
b2xUeXBlKHNpZ25hdHVyZSwgV1RGTW92ZShyZXN1bHRzKSwgV1RGTW92ZShjb250aW51YXRpb24p
LCBDb250cm9sSWYgeyBXVEZNb3ZlKGFsdGVybmF0ZSkgfSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBSZWZQdHI8TGFiZWw+IHRhcmdldExhYmVsRm9yQnJhbmNoKCkgY29uc3QKQEAgLTExMyw2ICsx
MTMsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX2NvbnRpbnVhdGlvbihXVEZNb3ZlKGNv
bnRpbnVhdGlvbikpCiAgICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgICAgIENvbnRyb2xUeXBlKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
RXhwcmVzc2lvbkxpc3QmJiByZXN1bHRzLCBSZWZQdHI8TGFiZWw+IGNvbnRpbnVhdGlvbiwgVCB0
KQorICAgICAgICAgICAgOiBCYXNlKFdURk1vdmUodCkpCisgICAgICAgICAgICAsIG1fc2lnbmF0
dXJlKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICwgbV9yZXN1bHRzKFdURk1vdmUocmVzdWx0cykp
CisgICAgICAgICAgICAsIG1fY29udGludWF0aW9uKFdURk1vdmUoY29udGludWF0aW9uKSkKKyAg
ICAgICAgeworICAgICAgICB9CiAgICAgfTsKIAogICAgIHVzaW5nIEVycm9yVHlwZSA9IFN0cmlu
ZzsKQEAgLTEzMywxMiArMTQyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxpbmc6
ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcihFeHByZXNzaW9uVHlwZSByZWcpIHsgcmV0
dXJuIHJlZy0+dmlydHVhbFJlZ2lzdGVyKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gcmVn
OyB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeHByZXNzaW9uTGlzdEEsIHR5cGVuYW1lIEV4
cHJlc3Npb25MaXN0Qj4KICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJl
c3Npb25MaXN0QSYgZGVzdGluYXRpb25zLCBjb25zdCBFeHByZXNzaW9uTGlzdEImIHZhbHVlcykK
ICAgICB7CiAgICAgICAgIEFTU0VSVChkZXN0aW5hdGlvbnMuc2l6ZSgpIDw9IHZhbHVlcy5zaXpl
KCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgZGVzdGluYXRpb25zW2Rlc3Rp
bmF0aW9ucy5zaXplKCkgLSBpIC0gMV0sIHZhbHVlc1t2YWx1ZXMuc2l6ZSgpIC0gaSAtIDFdKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGF1dG8gZHN0ID0gZGVzdGluYXRpb25zW2Rlc3RpbmF0aW9ucy5zaXpl
KCkgLSBpIC0gMV07CisgICAgICAgICAgICBhdXRvIHNyYyA9IHZhbHVlc1t2YWx1ZXMuc2l6ZSgp
IC0gaSAtIDFdOworICAgICAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3Rlcihkc3QpID09IHZpcnR1
YWxSZWdpc3RlcihzcmMpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
V2FzbU1vdjo6ZW1pdCh0aGlzLCBkc3QsIHNyYyk7CisgICAgICAgIH0KICAgICB9CiAKIApAQCAt
MTg3LDEzICsyMDQsMTMgQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEJsb2NrKEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENv
bnRyb2xUeXBlJiBuZXdCbG9jaywgU3RhY2smIG5ld1N0YWNrKTsKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb29wKEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9z
aW5nU3RhY2ssIENvbnRyb2xUeXBlJiBibG9jaywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBs
b29wSW5kZXgpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdT
dGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xUeXBlJiwgY29uc3QgRXhw
cmVzc2lvbkxpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRF
bHNlKENvbnRyb2xUeXBlJiwgY29uc3QgU3RhY2smKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOwogCi0gICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xU
eXBlJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Ci0gICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xUeXBlJiwgRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKLSAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbFR5cGUqPiYgdGFyZ2V0cywgQ29udHJv
bFR5cGUmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0
YWNrKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250
cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmLCBj
b25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbFR5cGUmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3Rv
cjxDb250cm9sVHlwZSo+JiB0YXJnZXRzLCBDb250cm9sVHlwZSYgZGVmYXVsdFRhcmdldHMsIGNv
bnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNrJiBleHByZXNzaW9uU3RhY2sp
OwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFi
bGUoQ29udHJvbEVudHJ5JiwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IHsgfSk7CiAK
ICAgICAvLyBDYWxscwpAQCAtMjA1LDcgKzIyMiw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0
UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiogcGFyc2VyKSB7IG1fcGFyc2Vy
ID0gcGFyc2VyOyB9OwogCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+
JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QqKSB7IH0KKyAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9y
PENvbnRyb2xFbnRyeT4mLCBjb25zdCBTdGFjayopIHsgfQogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBHZW5lcmljTGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjsKQEAgLTIxMywxMyArMjMwLDE0
IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IExMSW50Q2FsbEluZm9ybWF0aW9uIHsKICAgICAgICAg
dW5zaWduZWQgc3RhY2tPZmZzZXQ7CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tBcmd1
bWVudHM7Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0IGFyZ3VtZW50czsKKyAgICAgICAgVmVjdG9y
PFZpcnR1YWxSZWdpc3Rlcj4gYXJndW1lbnRzOwogICAgICAgICBFeHByZXNzaW9uTGlzdCByZXN1
bHRzOwogICAgIH07CiAKLSAgICBMTEludENhbGxJbmZvcm1hdGlvbiBjYWxsSW5mb3JtYXRpb25G
b3IoY29uc3QgU2lnbmF0dXJlJiwgQ2FsbFJvbGUgPSBDYWxsUm9sZTo6Q2FsbGVyKTsKKyAgICBM
TEludENhbGxJbmZvcm1hdGlvbiBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0
dXJlJik7CisgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4gY2FsbEluZm9ybWF0aW9uRm9y
Q2FsbGVlKGNvbnN0IFNpZ25hdHVyZSYpOwogCi0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKHVpbnQzMl90IGluZGV4KQorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXJGb3JXYXNtTG9jYWwodWludDMyX3QgaW5kZXgpCiAgICAgewogICAgICAgICBp
ZiAoaW5kZXggPCBtX2NvZGVCbG9jay0+bV9udW1Bcmd1bWVudHMpCiAgICAgICAgICAgICByZXR1
cm4gbV9ub3JtYWxpemVkQXJndW1lbnRzW2luZGV4XTsKQEAgLTIyNyw3ICsyNDUsNyBAQCBwcml2
YXRlOgogICAgICAgICBjb25zdCBhdXRvJiBjYWxsaW5nQ29udmVudGlvbiA9IHdhc21DYWxsaW5n
Q29udmVudGlvbigpOwogICAgICAgICBjb25zdCB1aW50MzJfdCBncHJDb3VudCA9IGNhbGxpbmdD
b252ZW50aW9uLmdwckFyZ3Muc2l6ZSgpOwogICAgICAgICBjb25zdCB1aW50MzJfdCBmcHJDb3Vu
dCA9IGNhbGxpbmdDb252ZW50aW9uLmZwckFyZ3Muc2l6ZSgpOwotICAgICAgICByZXR1cm4gOjpK
U0M6OnZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbV9jb2RlQmxvY2stPm1fbnVtQXJn
dW1lbnRzICsgZ3ByQ291bnQgKyBmcHJDb3VudCArIG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVn
aXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0g
bV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzICsgZ3ByQ291bnQgKyBmcHJDb3VudCArIG51bWJl
ck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzKTsKICAgICB9CiAKICAgICBFeHByZXNzaW9uTGlz
dCB0bXBzRm9yU2lnbmF0dXJlKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkKQEAgLTI0NSw2ICsy
NjMsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fanNOdWxsQ29uc3RhbnQ7CiAgICAg
fQogCisgICAgRXhwcmVzc2lvblR5cGUgcmV1c2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
d1RlbXBvcmFyeSgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFJlc3Q+Cisg
ICAgRXhwcmVzc2lvblR5cGUgcmV1c2UoRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvbiwgUmVzdC4u
LiBleHByZXNzaW9ucykKKyAgICB7CisgICAgICAgIGlmICghZXhwcmVzc2lvbi0+dmlydHVhbFJl
Z2lzdGVyKCkuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGV4cHJlc3Npb247Cisg
ICAgICAgIHJldHVybiByZXVzZShzdGQ6OmZvcndhcmQ8UmVzdD4oZXhwcmVzc2lvbnMpLi4uKTsK
KyAgICB9CisKICAgICBzdHJ1Y3QgU3dpdGNoRW50cnkgewogICAgICAgICBJbnN0cnVjdGlvblN0
cmVhbTo6T2Zmc2V0IG9mZnNldDsKICAgICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCog
anVtcFRhcmdldDsKQEAgLTI1Nyw3ICsyODgsOSBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8TGFi
ZWwqLCBWZWN0b3I8U3dpdGNoRW50cnk+PiBtX3N3aXRjaGVzOwogICAgIEV4cHJlc3Npb25UeXBl
IG1fanNOdWxsQ29uc3RhbnQ7CiAgICAgRXhwcmVzc2lvbkxpc3QgbV91bml0aWFsaXplZExvY2Fs
czsKLSAgICBTdGRVbm9yZGVyZWRNYXA8dWludDY0X3QsIFZpcnR1YWxSZWdpc3Rlcj4gbV9jb25z
dGFudE1hcDsKKyAgICBTdGRVbm9yZGVyZWRNYXA8dWludDY0X3QsIHVuc2lnbmVkPiBtX2NvbnN0
YW50TWFwOworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IG1fcmVzdWx0czsKKyAgICBT
ZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29uc3RhbnRQb29sUmVnaXN0ZXJzOwog
fTsKIAogRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5n
PiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBz
aXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGhyb3dXYXNt
RXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKQEAgLTI5MCw4ICszMjMsMzAgQEAgc3RkOjp1
bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxpemUoKQog
Ly8gR2VuZXJhdGVkIGZyb20gd2FzbS5qc29uCiAjaW5jbHVkZSAiV2FzbUxMSW50R2VuZXJhdG9y
SW5saW5lcy5oIgogCi1hdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3IoY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENhbGxSb2xlIHJvbGUpIC0+IExMSW50Q2FsbEluZm9y
bWF0aW9uCithdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSW50Q2FsbEluZm9ybWF0aW9uCiB7CisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBpcyBzZXR1cHMgdGhlIHN0YWNrIGxheW91dCBmb3IgY2FsbHMuIFRo
ZSBkZXNpcmVkIHN0YWNrIGxheW91dCBpczoKKworICAgIC8vIEZQUm4KKyAgICAvLyAuLi4KKyAg
ICAvLyBGUFIxCisgICAgLy8gRlBSMAorICAgIC8vIC0tLQorICAgIC8vIEdQUm4KKyAgICAvLyAu
Li4KKyAgICAvLyBHUFIxCisgICAgLy8gR1BSMAorICAgIC8vIC0tLS0KKyAgICAvLyBzdGFja04K
KyAgICAvLyAuLi4KKyAgICAvLyBzdGFjazEKKyAgICAvLyBzdGFjazAKKyAgICAvLyAtLS0KKyAg
ICAvLyBjYWxsIGZyYW1lIGhlYWRlcgorCisgICAgLy8gV2UgbmVlZCB0byBhbGxvY2F0ZSBhdCBs
ZWFzdCBzcGFjZSBmb3IgYWxsIEdQUnMgYW5kIEZQUnMuCisgICAgLy8gUmV0dXJuIHZhbHVlcyB1
c2UgdGhlIHNhbWUgYWxsb2NhdGlvbiBsYXlvdXQuCisKICAgICBjb25zdCBhdXRvJiBjYWxsaW5n
Q29udmVudGlvbiA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpOwogICAgIGNvbnN0IHVpbnQzMl90
IGdwckNvdW50ID0gY2FsbGluZ0NvbnZlbnRpb24uZ3ByQXJncy5zaXplKCk7CiAgICAgY29uc3Qg
dWludDMyX3QgZnByQ291bnQgPSBjYWxsaW5nQ29udmVudGlvbi5mcHJBcmdzLnNpemUoKTsKQEAg
LTI5OSwxNCArMzU0LDkgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9y
KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDYWxsUm9sZSByb2wKICAgICB1aW50MzJfdCBz
dGFja0NvdW50ID0gMDsKICAgICB1aW50MzJfdCBncHJJbmRleCA9IDA7CiAgICAgdWludDMyX3Qg
ZnBySW5kZXggPSAwOwotCi0gICAgVmVjdG9yPFJlZlB0cjxSZWdpc3RlcklEPiwgMTY+IHJlZ2lz
dGVyczsKLQotICAgIEV4cHJlc3Npb25MaXN0IGFyZ3VtZW50cyhzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpKTsKLSAgICBFeHByZXNzaW9uTGlzdCByZXN1bHRzKHNpZ25hdHVyZS5yZXR1cm5Db3Vu
dCgpKTsKKyAgICB1aW50MzJfdCBzdGFja0luZGV4ID0gMDsKIAogICAgIGF1dG8gYWxsb2NhdGVT
dGFja1JlZ2lzdGVyID0gWyZdKFR5cGUgdHlwZSkgewotICAgICAgICBBU1NFUlQocm9sZSA9PSBD
YWxsUm9sZTo6Q2FsbGVyKTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2Ug
VHlwZTo6STMyOgogICAgICAgICBjYXNlIFR5cGU6Okk2NDoKQEAgLTMxNCwxOSArMzY0LDE1IEBA
IGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvcihjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgQ2FsbFJvbGUgcm9sCiAgICAgICAgIGNhc2UgVHlwZTo6RnVuY3JlZjoKICAg
ICAgICAgICAgIGlmIChncHJJbmRleCA8IGdwckNvdW50KQogICAgICAgICAgICAgICAgICsrZ3By
SW5kZXg7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByZWdpc3RlcnMuYXBw
ZW5kKG5ld1RlbXBvcmFyeSgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YWNrSW5kZXgrKyA+
PSBzdGFja0NvdW50KQogICAgICAgICAgICAgICAgICsrc3RhY2tDb3VudDsKLSAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFR5cGU6OkYzMjoKICAgICAgICAg
Y2FzZSBUeXBlOjpGNjQ6CiAgICAgICAgICAgICBpZiAoZnBySW5kZXggPCBmcHJDb3VudCkKICAg
ICAgICAgICAgICAgICArK2ZwckluZGV4OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgcmVnaXN0ZXJzLmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CisgICAgICAgICAgICBlbHNl
IGlmIChzdGFja0luZGV4KysgPj0gc3RhY2tDb3VudCkKICAgICAgICAgICAgICAgICArK3N0YWNr
Q291bnQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBW
b2lkOgogICAgICAgICBjYXNlIEZ1bmM6CkBAIC0zMzUsOTIgKzM4MSwxNDcgQEAgYXV0byBMTElu
dEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LCBDYWxsUm9sZSByb2wKICAgICB9OwogCiAKLSAgICBpZiAocm9sZSA9PSBDYWxsUm9sZTo6Q2Fs
bGVlKSB7Ci0gICAgICAgIC8vIFJldXNlIHRoZSBzbG90cyB3ZSBhbGxvY2F0ZWQgdG8gc3BpbGwg
dGhlIHJlZ2lzdGVycyBpbiBhZGRBcmd1bWVudHMKLSAgICAgICAgZm9yICh1aW50MzJfdCBpID0g
Z3ByQ291bnQgKyBmcHJDb3VudDsgaS0tOykKLSAgICAgICAgICAgIHJlZ2lzdGVycy5hcHBlbmQo
bmV3IFJlZ2lzdGVySUQoOjpKU0M6OnZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG51bWJlck9mTExJ
bnRDYWxsZWVTYXZlUmVnaXN0ZXJzICsgaSkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgZ3ByQ291bnQ7IGkrKykKLSAgICAgICAgICAgIHJlZ2lzdGVy
cy5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgZnByQ291bnQ7IGkrKykKLSAgICAgICAgICAgIHJlZ2lzdGVycy5hcHBlbmQobmV3VGVtcG9y
YXJ5KCkpOwotCi0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpOyBpKyspCi0gICAgICAgICAgICBhbGxvY2F0ZVN0YWNrUmVnaXN0ZXIoc2ln
bmF0dXJlLmFyZ3VtZW50KGkpKTsKLSAgICAgICAgZ3BySW5kZXggPSAwOwotICAgICAgICBmcHJJ
bmRleCA9IDA7Ci0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0
dXJuQ291bnQoKTsgaSsrKQotICAgICAgICAgICAgYWxsb2NhdGVTdGFja1JlZ2lzdGVyKHNpZ25h
dHVyZS5yZXR1cm5UeXBlKGkpKTsKLSAgICB9CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykKKyAgICAgICAgYWxsb2NhdGVTdGFja1Jl
Z2lzdGVyKHNpZ25hdHVyZS5hcmd1bWVudChpKSk7CiAKLSAgICB1bnNpZ25lZCBzdGFja09mZnNl
dDsKLSAgICBpZiAocm9sZSA9PSBDYWxsUm9sZTo6Q2FsbGVlKQotICAgICAgICBzdGFja09mZnNl
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPigtcmVnaXN0ZXJzLmxhc3QoKS0+aW5kZXgoKSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIC8vIEFsaWduIHRoZSBzdGFjawotICAgICAgICBhdXRvIGNvbXB1
dGVTdGFja09mZnNldCA9IFsmXSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KC1yZWdpc3RlcnMubGFzdCgpLT5pbmRleCgpKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzOwotICAgICAgICB9OwotICAgICAgICB3aGlsZSAoY29tcHV0ZVN0YWNrT2Zm
c2V0KCkgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKQotICAgICAgICAgICAgcmVnaXN0ZXJz
LmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gY29tcHV0ZVN0
YWNrT2Zmc2V0KCk7CisgICAgZ3BySW5kZXggPSAwOworICAgIGZwckluZGV4ID0gMDsKKyAgICBz
dGFja0luZGV4ID0gMDsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJl
dHVybkNvdW50KCk7IGkrKykKKyAgICAgICAgYWxsb2NhdGVTdGFja1JlZ2lzdGVyKHNpZ25hdHVy
ZS5yZXR1cm5UeXBlKGkpKTsKKworICAgIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2FscyA9
IHN0ZDo6bWF4PGludD4obV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9jYWxzLCBtX2NhbGxlZUxv
Y2Fscy5zaXplKCkgKyBncHJDb3VudCArIGZwckNvdW50ICsgc3RhY2tDb3VudCArIENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKKyAgICBpZiAobV9jb2RlQmxvY2stPm1fbnVtQ2Fs
bGVlTG9jYWxzICUgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkKKyAgICAgICAgKyttX2NvZGVC
bG9jay0+bV9udW1DYWxsZWVMb2NhbHM7CisKKworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+
IGFyZ3VtZW50cyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBFeHByZXNzaW9uTGlz
dCByZXN1bHRzKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKTsKKworICAgIGNvbnN0IHVuc2lnbmVk
IHN0YWNrT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9jYWxzOworICAgIGNvbnN0
IHVuc2lnbmVkIGJhc2UgPSBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVMb2NhbHMgLSBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKKworICAgIGNvbnN0IHVpbnQzMl90IGdwckxpbWl0
ID0gYmFzZSAtIHN0YWNrQ291bnQgLSBncHJDb3VudDsKKyAgICBjb25zdCB1aW50MzJfdCBmcHJM
aW1pdCA9IGdwckxpbWl0IC0gZnByQ291bnQ7CisKKyAgICBzdGFja0luZGV4ID0gYmFzZTsKKyAg
ICBncHJJbmRleCA9IGJhc2UgLSBzdGFja0NvdW50OworICAgIGZwckluZGV4ID0gZ3BySW5kZXgg
LSBncHJDb3VudDsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkp
KSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAg
ICAgICAgY2FzZSBUeXBlOjpBbnlyZWY6CisgICAgICAgIGNhc2UgVHlwZTo6RnVuY3JlZjoKKyAg
ICAgICAgICAgIGlmIChncHJJbmRleCA+IGdwckxpbWl0KQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50c1tpXSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKC0tZ3BySW5kZXgpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKC0tc3RhY2tJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
eXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgaWYgKGZwcklu
ZGV4ID4gZnByTGltaXQpCisgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoLS1mcHJJbmRleCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRzW2ldID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1zdGFja0luZGV4
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgIGNhc2Ug
RnVuYzoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KICAgICB9CiAKLSAgICBBU1NFUlQocm9sZSA9PSBDYWxsUm9sZTo6Q2FsbGVyIHx8ICFzdGFj
a0NvdW50KTsKLSAgICBjb25zdCB1aW50MzJfdCBtYXhHUFJJbmRleCA9IHN0YWNrQ291bnQgKyBn
cHJDb3VudDsKLSAgICBjb25zdCB1aW50MzJfdCBtYXhGUFJJbmRleCA9IG1heEdQUkluZGV4ICsg
ZnByQ291bnQ7Ci0gICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7Ci0gICAgYXV0byBhcHBlbmRG
b3JUeXBlID0gWyZdKFR5cGUgdHlwZSwgdW5zaWduZWQgaW5kZXgsIGF1dG8mIHZlY3Rvcikgewot
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBzdGFja0luZGV4ID0gYmFzZTsKKyAgICBncHJJ
bmRleCA9IGJhc2UgLSBzdGFja0NvdW50OworICAgIGZwckluZGV4ID0gZ3BySW5kZXggLSBncHJD
b3VudDsKKyAgICAvLyBGSVhNRTogU2VnbWVudGVkVmVjdG9yOjpncm93IGNvdWxkIGhhdmUgYSBm
YXN0ZXIgaW1wbGVtZW50YXRpb24gLS0gd2UgZG9uJ3QgbmVlZCB0byBncm93IGFzIG11Y2gKKyAg
ICBtX2NhbGxlZUxvY2Fscy5ncm93KG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2Fscyk7Cisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyBpKysp
IHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZShpKSkgewogICAgICAgICBj
YXNlIFR5cGU6OkkzMjoKICAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CiAgICAgICAgIGNhc2UgVHlw
ZTo6QW55cmVmOgogICAgICAgICBjYXNlIFR5cGU6OkZ1bmNyZWY6Ci0gICAgICAgICAgICBpZiAo
Z3BySW5kZXggPCBtYXhHUFJJbmRleCkKLSAgICAgICAgICAgICAgICB2ZWN0b3JbaW5kZXhdID0g
cmVnaXN0ZXJzW3JlZ2lzdGVycy5zaXplKCkgLSBncHJJbmRleCsrIC0gMV07Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBDYWxsUm9sZTo6Q2FsbGVyKQot
ICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaW5kZXhdID0gcmVnaXN0ZXJzW3JlZ2lzdGVycy5z
aXplKCkgLSBzdGFja0luZGV4KysgLSAxXTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHZlY3RvcltpbmRleF0gPSBuZXcgUmVnaXN0ZXJJRCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChzdGFja0luZGV4KyspKTsKKyAgICAgICAgICAgIGlmIChncHJJbmRleCA+
IGdwckxpbWl0KSB7CisgICAgICAgICAgICAgICAgLS1ncHJJbmRleDsKKyAgICAgICAgICAgICAg
ICBSZWdpc3RlcklEJiBsb2NhbCA9IG1fY2FsbGVlTG9jYWxzW2dwckluZGV4XTsKKyAgICAgICAg
ICAgICAgICBuZXcgKCZsb2NhbCkgUmVnaXN0ZXJJRCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChn
cHJJbmRleCkpOworICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSAmbG9jYWw7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC0tc3RhY2tJbmRleDsKKyAgICAgICAgICAg
ICAgICBSZWdpc3RlcklEJiBsb2NhbCA9IG1fY2FsbGVlTG9jYWxzW3N0YWNrSW5kZXhdOworICAg
ICAgICAgICAgICAgIG5ldyAoJmxvY2FsKSBSZWdpc3RlcklEKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKHN0YWNrSW5kZXgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0gJmxvY2FsOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZTo6RjMy
OgogICAgICAgICBjYXNlIFR5cGU6OkY2NDoKLSAgICAgICAgICAgIGlmIChmcHJJbmRleCA8IG1h
eEZQUkluZGV4KQotICAgICAgICAgICAgICAgIHZlY3RvcltpbmRleF0gPSByZWdpc3RlcnNbcmVn
aXN0ZXJzLnNpemUoKSAtIGZwckluZGV4KysgLSAxXTsKLSAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxsZXIpCi0gICAgICAgICAgICAg
ICAgICAgIHZlY3RvcltpbmRleF0gPSByZWdpc3RlcnNbcmVnaXN0ZXJzLnNpemUoKSAtIHN0YWNr
SW5kZXgrKyAtIDFdOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
dmVjdG9yW2luZGV4XSA9IG5ldyBSZWdpc3RlcklEKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KHN0YWNrSW5kZXgrKykpOworICAgICAgICAgICAgaWYgKGZwckluZGV4ID4gZnByTGltaXQpIHsK
KyAgICAgICAgICAgICAgICAtLWZwckluZGV4OworICAgICAgICAgICAgICAgIFJlZ2lzdGVySUQm
IGxvY2FsID0gbV9jYWxsZWVMb2NhbHNbZnBySW5kZXhdOworICAgICAgICAgICAgICAgIG5ldyAo
JmxvY2FsKSBSZWdpc3RlcklEKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZwckluZGV4KSk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0c1tpXSA9ICZsb2NhbDsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLS1zdGFja0luZGV4OworICAgICAgICAgICAgICAgIFJlZ2lzdGVy
SUQmIGxvY2FsID0gbV9jYWxsZWVMb2NhbHNbc3RhY2tJbmRleF07CisgICAgICAgICAgICAgICAg
bmV3ICgmbG9jYWwpIFJlZ2lzdGVySUQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoc3RhY2tJbmRl
eCkpOworICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSAmbG9jYWw7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWb2lkOgogICAgICAgICBjYXNlIEZ1
bmM6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9
Ci0gICAgfTsKKyAgICB9CiAKLSAgICBncHJJbmRleCA9IHN0YWNrQ291bnQ7Ci0gICAgZnBySW5k
ZXggPSBtYXhHUFJJbmRleDsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKTsgaSsrKQotICAgICAgICBhcHBlbmRGb3JUeXBlKHNpZ25hdHVyZS5h
cmd1bWVudChpKSwgaSwgYXJndW1lbnRzKTsKLSAgICBncHJJbmRleCA9IHN0YWNrQ291bnQ7Ci0g
ICAgZnBySW5kZXggPSBtYXhHUFJJbmRleDsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
c2lnbmF0dXJlLnJldHVybkNvdW50KCk7IGkrKykKLSAgICAgICAgYXBwZW5kRm9yVHlwZShzaWdu
YXR1cmUucmV0dXJuVHlwZShpKSwgaSwgcmVzdWx0cyk7CisgICAgcmV0dXJuIExMSW50Q2FsbElu
Zm9ybWF0aW9uIHsgc3RhY2tPZmZzZXQsIHN0YWNrQ291bnQsIFdURk1vdmUoYXJndW1lbnRzKSwg
V1RGTW92ZShyZXN1bHRzKSB9OworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3Jt
YXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFZlY3RvcjxWaXJ0
dWFsUmVnaXN0ZXIsIDI+Cit7CisgICAgaWYgKG1fcmVzdWx0cy5zaXplKCkpCisgICAgICAgIHJl
dHVybiBtX3Jlc3VsdHM7CisKKyAgICBtX3Jlc3VsdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShz
aWduYXR1cmUucmV0dXJuQ291bnQoKSk7CisKKyAgICBjb25zdCBhdXRvJiBjYWxsaW5nQ29udmVu
dGlvbiA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpOworICAgIGNvbnN0IHVpbnQzMl90IGdwckNv
dW50ID0gY2FsbGluZ0NvbnZlbnRpb24uZ3ByQXJncy5zaXplKCk7CisgICAgY29uc3QgdWludDMy
X3QgZnByQ291bnQgPSBjYWxsaW5nQ29udmVudGlvbi5mcHJBcmdzLnNpemUoKTsKKworICAgIHVp
bnQzMl90IGdwckluZGV4ID0gMDsKKyAgICB1aW50MzJfdCBmcHJJbmRleCA9IGdwckNvdW50Owor
ICAgIHVpbnQzMl90IHN0YWNrSW5kZXggPSAwOworICAgIGNvbnN0IHVpbnQzMl90IG1heEdQUklu
ZGV4ID0gZ3ByQ291bnQ7CisgICAgY29uc3QgdWludDMyX3QgbWF4RlBSSW5kZXggPSBtYXhHUFJJ
bmRleCArIGZwckNvdW50OwogCi0gICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcikgewot
ICAgICAgICAvLyBSZXNlcnZlIHNwYWNlIGZvciBjYWxsIGZyYW1lLgotICAgICAgICBWZWN0b3I8
UmVmUHRyPFJlZ2lzdGVySUQ+LCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIDIs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiBjYWxsRnJhbWU7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7ICsraSkKLSAgICAgICAgICAg
IGNhbGxGcmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOworICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAo
c2lnbmF0dXJlLnJldHVyblR5cGUoaSkpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAg
ICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICBjYXNlIFR5cGU6OkFueXJlZjoKKyAgICAgICAg
Y2FzZSBUeXBlOjpGdW5jcmVmOgorICAgICAgICAgICAgaWYgKGdwckluZGV4IDwgbWF4R1BSSW5k
ZXgpCisgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycyArIGdwckluZGV4KyspKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBwZW5kKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KHN0YWNrSW5kZXgrKykpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAg
ICAgIGlmIChmcHJJbmRleCA8IG1heEZQUkluZGV4KQorICAgICAgICAgICAgICAgIG1fcmVzdWx0
cy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobnVtYmVyT2ZMTEludENhbGxlZVNhdmVS
ZWdpc3RlcnMgKyBmcHJJbmRleCsrKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9yZXN1bHRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChzdGFja0luZGV4
KyspKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgIGNh
c2UgRnVuYzoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gTExJbnRDYWxsSW5mb3JtYXRpb24geyBzdGFja09m
ZnNldCwgc3RhY2tDb3VudCwgV1RGTW92ZShhcmd1bWVudHMpLCBXVEZNb3ZlKHJlc3VsdHMpIH07
CisgICAgcmV0dXJuIG1fcmVzdWx0czsKIH0KIAorCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRB
cmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
ICAgICBtX2NvZGVCbG9jay0+bV9udW1Bcmd1bWVudHMgPSBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpOwpAQCAtNDg1LDYgKzU4Niw5IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvY2FsKFR5
cGUgdHlwZSwgdWludDMyX3QgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKIAogdm9pZCBMTEludEdl
bmVyYXRvcjo6ZGlkRmluaXNoUGFyc2luZ0xvY2FscygpCiB7CisgICAgaWYgKG1fdW5pdGlhbGl6
ZWRMb2NhbHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIG51bGwgPSBq
c051bGxDb25zdGFudCgpOwogICAgIGZvciAoYXV0byBsb2NhbCA6IG1fdW5pdGlhbGl6ZWRMb2Nh
bHMpCiAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgbG9jYWwsIG51bGwpOwpAQCAtNDkzLDE3
ICs1OTcsMTUgQEAgdm9pZCBMTEludEdlbmVyYXRvcjo6ZGlkRmluaXNoUGFyc2luZ0xvY2Fscygp
CiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENvbnN0YW50KFR5cGUgdHlwZSwgdWludDY0X3Qg
dmFsdWUpIC0+IEV4cHJlc3Npb25UeXBlCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNvdXJjZShG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5zaXpl
KCkpOwotICAgIGF1dG8gcmVzdWx0ID0gbV9jb25zdGFudE1hcC5lbXBsYWNlKHZhbHVlLCBzb3Vy
Y2UpOwotICAgIGlmIChyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX2Nv
bnN0YW50cy5hcHBlbmQodmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVt
cEdlbmVyYXRlZFdhc21CeXRlY29kZXMoKSkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9j
b25zdGFudFR5cGVzLmFwcGVuZCh0eXBlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291cmNlID0g
cmVzdWx0LmZpcnN0LT5zZWNvbmQ7Ci0gICAgYXV0byB0YXJnZXQgPSBuZXdUZW1wb3JhcnkoKTsK
LSAgICBXYXNtTW92OjplbWl0KHRoaXMsIHRhcmdldCwgc291cmNlKTsKLSAgICByZXR1cm4gdGFy
Z2V0OworICAgIGF1dG8gcmVzdWx0ID0gbV9jb25zdGFudE1hcC5lbXBsYWNlKHZhbHVlLCBtX2Nv
bnN0YW50UG9vbFJlZ2lzdGVycy5zaXplKCkpOworICAgIGlmICghcmVzdWx0LnNlY29uZCkKKyAg
ICAgICAgcmV0dXJuICZtX2NvbnN0YW50UG9vbFJlZ2lzdGVyc1tyZXN1bHQuZmlyc3QtPnNlY29u
ZF07CisKKyAgICBtX2NvbnN0YW50UG9vbFJlZ2lzdGVycy5hcHBlbmQoRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXggKyBtX2NvZGVCbG9jay0+bV9jb25zdGFudHMuc2l6ZSgpKTsKKyAgICBtX2Nv
ZGVCbG9jay0+bV9jb25zdGFudHMuYXBwZW5kKHZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6ZHVtcEdlbmVyYXRlZFdhc21CeXRlY29kZXMoKSkpCisgICAgICAgIG1fY29kZUJsb2Nr
LT5tX2NvbnN0YW50VHlwZXMuYXBwZW5kKHR5cGUpOworICAgIHJldHVybiAmbV9jb25zdGFudFBv
b2xSZWdpc3RlcnMubGFzdCgpOwogfQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjpnZXRMb2NhbCh1
aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdApA
QCAtNTExLDEzICs2MTMsMTMgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Z2V0TG9jYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWwKICAgICAvLyBGSVhN
RTogUmVtb3ZlIHVubmVjZXNzYXJ5IG1vdmVzCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMzY1NwogICAgIHJlc3VsdCA9IG5ld1RlbXBvcmFyeSgpOwot
ICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgcmVzdWx0LCB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChp
bmRleCkpOworICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgcmVzdWx0LCB2aXJ0dWFsUmVnaXN0ZXJG
b3JXYXNtTG9jYWwoaW5kZXgpKTsKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIExMSW50R2Vu
ZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBXYXNtTW92OjplbWl0KHRoaXMsIHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGluZGV4KSwgdmFsdWUpOworICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgdmlydHVh
bFJlZ2lzdGVyRm9yV2FzbUxvY2FsKGluZGV4KSwgdmFsdWUpOwogICAgIHJldHVybiB7IH07CiB9
CiAKQEAgLTU0MCwxMCArNjQyLDIzIEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OnNldEdsb2JhbCh1
aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSCiAKIGF1dG8g
TExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYg
ZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBibG9jaywgU3RhY2smIG5ld1N0YWNrLCB1aW50
MzJfdCBsb29wSW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBuZXdTdGFjay5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICB1bnNpZ25l
ZCBvZmZzZXQgPSBlbmNsb3NpbmdTdGFjay5zaXplKCkgLSBzaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENv
dW50KCk7ICsraSkgeworICAgICAgICBFeHByZXNzaW9uVHlwZSBlbnRyeSA9IGVuY2xvc2luZ1N0
YWNrLmF0KGkgKyBvZmZzZXQpOworICAgICAgICBpZiAoIWVudHJ5LT52aXJ0dWFsUmVnaXN0ZXIo
KS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIG5ld1N0YWNrLnVuY2hlY2tlZEFwcGVuZChl
bnRyeSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBFeHByZXNz
aW9uVHlwZSB0bXAgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlz
LCB0bXAsIGVudHJ5KTsKKyAgICAgICAgbmV3U3RhY2sudW5jaGVja2VkQXBwZW5kKHRtcCk7Cisg
ICAgfQorICAgIGVuY2xvc2luZ1N0YWNrLnNocmluayhvZmZzZXQpOworCiAgICAgUmVmPExhYmVs
PiBib2R5ID0gbmV3RW1pdHRlZExhYmVsKCk7CiAgICAgUmVmPExhYmVsPiBjb250aW51YXRpb24g
PSBuZXdMYWJlbCgpOwogCi0gICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5j
bG9zaW5nU3RhY2spOwogICAgIGJsb2NrID0gQ29udHJvbFR5cGU6Omxvb3Aoc2lnbmF0dXJlLCBu
ZXdTdGFjaywgV1RGTW92ZShib2R5KSwgV1RGTW92ZShjb250aW51YXRpb24pKTsKIAogICAgIFZl
Y3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IG9zckVudHJ5RGF0YTsKQEAgLTU1NCw5ICs2NjksOSBAQCBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3Rh
Y2smIGVuY2xvc2luZ1N0YWNrLCBDbwogICAgIGNvbnN0IHVpbnQzMl90IGdwckNvdW50ID0gY2Fs
bGluZ0NvbnZlbnRpb24uZ3ByQXJncy5zaXplKCk7CiAgICAgY29uc3QgdWludDMyX3QgZnByQ291
bnQgPSBjYWxsaW5nQ29udmVudGlvbi5mcHJBcmdzLnNpemUoKTsKICAgICBmb3IgKGludDMyX3Qg
aSA9IGdwckNvdW50ICsgZnByQ291bnQgKyBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVy
czsgaSA8IG1fY29kZUJsb2NrLT5tX251bVZhcnM7IGkrKykKLSAgICAgICAgb3NyRW50cnlEYXRh
LmFwcGVuZCg6OkpTQzo6dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOworICAgICAgICBvc3JF
bnRyeURhdGEuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKICAgICBmb3IgKHVu
c2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9s
U3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0
JiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4
XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgU3RhY2smIGV4cHJlc3Npb25TdGFj
ayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVz
c2lvblN0YWNrOwogICAgICAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3Rh
Y2spCiAgICAgICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24tPnZpcnR1YWxS
ZWdpc3RlcigpKTsKICAgICB9CkBAIC01OTIsNyArNzA3LDcgQEAgYXV0byBMTEludEdlbmVyYXRv
cjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1
cmUsIFMKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbHNl
KENvbnRyb2xUeXBlJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgY3VycmVudFN0YWNrKSAt
PiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xUeXBl
JiBkYXRhLCBjb25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbElmPihkYXRhKSk7CiAgICAg
dW5pZnlWYWx1ZXNXaXRoQmxvY2soZGF0YS5tX3Jlc3VsdHMsIGN1cnJlbnRTdGFjayk7CkBAIC02
MDgsMjEgKzcyMywyMCBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJs
ZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9
CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sVHlwZSYgZGF0
YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAor
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xUeXBlJiBkYXRhLCBj
b25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgaWYgKCFk
YXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSB7CiAgICAgICAgIFdhc21SZXRWb2lkOjpl
bWl0KHRoaXMpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIExMSW50Q2FsbElu
Zm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3IoKmRhdGEubV9zaWduYXR1cmUsIENh
bGxSb2xlOjpDYWxsZWUpOwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGluZm8ucmVzdWx0cywg
cmV0dXJuVmFsdWVzKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjYWxsSW5mb3JtYXRpb25G
b3JDYWxsZWUoKmRhdGEubV9zaWduYXR1cmUpLCByZXR1cm5WYWx1ZXMpOwogICAgIFdhc21SZXQ6
OmVtaXQodGhpcyk7CiAKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9y
OjphZGRCcmFuY2goQ29udHJvbFR5cGUmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiBkYXRhLCBFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhkYXRhLm1fcmVzdWx0cywgcmV0dXJuVmFs
dWVzKTsKIApAQCAtNjM1LDcgKzc0OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEJyYW5j
aChDb250cm9sVHlwZSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zCiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlKj4mIHRhcmdldHMsIENv
bnRyb2xUeXBlJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lv
blN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRTd2l0Y2go
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbFR5cGUqPiYgdGFy
Z2V0cywgQ29udHJvbFR5cGUmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9u
U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gbV9j
b2RlQmxvY2stPm51bWJlck9mSnVtcFRhYmxlcygpOwogICAgIEZ1bmN0aW9uQ29kZUJsb2NrOjpK
dW1wVGFibGUmIGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRKdW1wVGFibGUodGFyZ2V0cy5z
aXplKCkpOwpAQCAtNjY1LDcgKzc3OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFN3aXRj
aChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwCiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVu
dHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJl
c3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwg
U3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENvbnRyb2xU
eXBlJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CiAKQEAgLTcwMyw3ICs4MTcsNyBAQCBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnks
IGNvbnN0IFN0YWNrJiBleHByZQogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUo
KSk7Ci0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvcihz
aWduYXR1cmUpOworICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRp
b25Gb3JDYWxsZXIoc2lnbmF0dXJlKTsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhpbmZvLmFy
Z3VtZW50cywgYXJncyk7CiAgICAgcmVzdWx0cyA9IFdURk1vdmUoaW5mby5yZXN1bHRzKTsKICAg
ICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQpAQCAtNzIyLDcgKzgzNiw3IEBAIGF1dG8gTExJ
bnRHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hCiAgICAgQVNTRVJUKG1faW5mby50YWJsZUNvdW50KCkgPiB0YWJsZUlu
ZGV4KTsKICAgICBBU1NFUlQobV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS50eXBlKCkgPT0gVGFi
bGVFbGVtZW50VHlwZTo6RnVuY3JlZik7CiAKLSAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZv
ID0gY2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSk7CisgICAgTExJbnRDYWxsSW5mb3JtYXRp
b24gaW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihzaWduYXR1cmUpOwogICAgIHVuaWZ5
VmFsdWVzV2l0aEJsb2NrKGluZm8uYXJndW1lbnRzLCBhcmdzKTsKICAgICByZXN1bHRzID0gV1RG
TW92ZShpbmZvLnJlc3VsdHMpOwogICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCkBAIC03
MzUsNyArODQ5LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2ln
bmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKIAogYXV0byBMTEludEdlbmVy
YXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gdmFsdWU7CisgICAgcmVz
dWx0ID0gcmV1c2UodmFsdWUpOwogICAgIFdhc21SZWZJc051bGw6OmVtaXQodGhpcywgcmVzdWx0
LCB2YWx1ZSk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtNzUxLDcgKzg2NSw3IEBAIGF1dG8gTExJ
bnRHZW5lcmF0b3I6OmFkZFJlZkZ1bmModWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVuc2ln
bmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gaW5kZXg7CisgICAgcmVzdWx0
ID0gcmV1c2UoaW5kZXgpOwogICAgIFdhc21UYWJsZUdldDo6ZW1pdCh0aGlzLCByZXN1bHQsIGlu
ZGV4LCB0YWJsZUluZGV4KTsKIAogICAgIHJldHVybiB7IH07CkBAIC03NzQsNyArODg4LDcgQEAg
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkVGFibGVTaXplKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0KIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVGFibGVH
cm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25U
eXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0g
ICAgcmVzdWx0ID0gZmlsbDsKKyAgICByZXN1bHQgPSByZXVzZShmaWxsLCBkZWx0YSk7CiAgICAg
V2FzbVRhYmxlR3Jvdzo6ZW1pdCh0aGlzLCByZXN1bHQsIGZpbGwsIGRlbHRhLCB0YWJsZUluZGV4
KTsKIAogICAgIHJldHVybiB7IH07CkBAIC04MDQsNyArOTE4LDcgQEAgYXV0byBMTEludEdlbmVy
YXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5
cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAg
ICByZXN1bHQgPSBkZWx0YTsKKyAgICByZXN1bHQgPSByZXVzZShkZWx0YSk7CiAgICAgV2FzbUdy
b3dNZW1vcnk6OmVtaXQodGhpcywgcmVzdWx0LCBkZWx0YSk7CiAKICAgICByZXR1cm4geyB9OwpA
QCAtODEyLDcgKzkyNiw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhw
cmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCiAKIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25U
eXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBjb25kaXRpb247CisgICAgcmVzdWx0
ID0gcmV1c2UoY29uZGl0aW9uLCBub25aZXJvLCB6ZXJvKTsKICAgICBXYXNtU2VsZWN0OjplbWl0
KHRoaXMsIHJlc3VsdCwgY29uZGl0aW9uLCBub25aZXJvLCB6ZXJvKTsKIAogICAgIHJldHVybiB7
IH07CkBAIC04MjAsNyArOTM0LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywKIAogYXV0byBM
TEludEdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKLSAgICByZXN1bHQgPSBwb2ludGVyOworICAgIHJlc3VsdCA9IHJldXNlKHBvaW50ZXIp
OwogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoKICAg
ICAgICAgV2FzbUkzMkxvYWQ4Uzo6ZW1pdCh0aGlzLCByZXN1bHQsIHBvaW50ZXIsIG9mZnNldCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCmluZGV4IDc3
MmI1MTk2NmU0NTdkMjk2OGJjNjViMzEwOTM4ZGRmYmMyYjEwZjYuLmJjZWViMjg2YmEzY2IzMTk3
ZWJmYjgwYjRlNWVmNTE2ZmFiNGQ1OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludFBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21MTEludFBsYW4uY3BwCkBAIC04MCwxMCArODAsMTAgQEAgdm9pZCBMTEludFBsYW46OmNv
bXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIG1fd2FzbUludGVybmFs
RnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0
KTsKIAogICAgIGlmIChtX2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9u
SW5kZXgpIHx8IG1fbW9kdWxlSW5mb3JtYXRpb24tPnJlZmVyZW5jZWRGdW5jdGlvbnMoKS5jb250
YWlucyhmdW5jdGlvbkluZGV4KSkgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bG9jayk7CiAgICAgICAgIEVtYmVkZXJUb1dhc21GdW5jdGlvbiBlbnRyeTsKICAgICAgICAgZW50
cnkuaml0ID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgICAgIGVudHJ5LmZ1bmN0
aW9uID0gbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoKmVudHJ5LmppdCwgc2lnbmF0dXJlLCAmbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOwogICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21J
bnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbnRyeSkpOwogICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383731</attachid>
            <date>2019-11-17 21:45:16 -0800</date>
            <delta_ts>2019-11-18 07:30:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204092-20191117214514.patch</filename>
            <type>text/plain</type>
            <size>66120</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MWVjZjQ0MmU3YjA0ZGU1ZWQ3MWExMzBlNDk2NDAzZDhhZWJhYzkyLi4zMDc5ZDE1MDQ4NGZkNDgy
YWQ3ODQ5OTBjM2JkN2JhZTM5MDkxY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMTktMTEtMTcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBJbXByb3ZlIFdhc206OkxMSW50R2VuZXJhdG9y
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQwOTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlt
cHJvdmVzIHRoZSBXYXNtOjpMTEludEdlbmVyYXRvciBieToKKyAgICAgICAgLSBDaGFuZ2luZyBM
TEludEdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgZnJvbSBSZWZQdHI8UmVnaXN0ZXJJRD4gdG8g
VmlydHVhbFJlZ2lzdGVyOiBJbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYW5kIHJldGFpbmluZworICAg
ICAgICAgIFJlZ2lzdGVySURzIHdlIHVzZSBWaXJ0dWFsUmVnaXN0ZXJzIGRpcmVjdGx5IGFuZCBl
bnN1cmUgdGhhdCB0aGV5IG1hdGNoIHRoZSBXZWJBc3NlbWJseSBzdGFjaywgaS5lLiB0aGUgcGFy
c2VyJ3MgZXhwcmVzc2lvbgorICAgICAgICAgIHN0YWNrIHNob3VsZCBtYXRjaCB0aGUgdmlydHVh
bCByZWdpc3RlcnMuCisgICAgICAgIC0gUmVtb3ZpbmcgcmVkdW5kYW50IG1vdmVzIHdoZW4gbWF0
ZXJpYWxpemluZyBjb25zdGFudHMgYW5kIHBlcmZvcm1pbmcgbG9jYWwuZ2V0OiBpbnN0ZWFkIG9m
IGNyZWF0aW5nIGEgbmV3IHRlbXBvcmFyeQorICAgICAgICAgIGZvciBlYWNoIGNvbnN0YW50IGFu
ZCBsb2NhbC5nZXQsIHdlIHJldHVybiB0aGUgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGUgY29uc3Rh
bnQvbG9jYWwgc2xvdCBkaXJlY3RseS4gSW4gb3JkZXIgZm9yIHRoaXMKKyAgICAgICAgICB0byB3
b3JrLCB3ZSBzdGlsbCBhbGxvY2F0ZSB0aGUgc3RhY2sgc2xvdCBmb3IgdGhlIHRlbXBvcmFyaWVz
LCBzaW5jZSB3ZSBoYXZlIHRvIG1hdGVyaWFsaXplIHRoZW0gaW4gYmVmb3JlIGxvb3BzIGFuZCBi
cmFuY2hlcy4KKyAgICAgICAgLSBBZGRpbmcgYSBjb25zdHJ1Y3RvciB0byBDb250cm9sVHlwZSB0
aGF0IHRha2VzIHRoZSByZXN1bHRzIEV4cHJlc3Npb25MaXN0IGFzIGFuIHJ2YWx1ZSBpbnN0ZWFk
IG9mIGNvcHlpbmcgaXQKKyAgICAgICAgLSBPcHRpbWl6aW5nIGNhbGxJbmZvcm1hdGlvbkZvciwg
d2hpY2ggaXMgbm93IHNwbGl0IGludG8gdHdvIGZ1bmN0aW9ucy4gVGhlIGNhbGxlZSBkb2VzIG5v
dCBjYXJlIGFib3V0IGFyZ3VtZW50cywgYW5kIHNob3VsZAorICAgICAgICAgIG5ldmVyIGFsbG9j
YXRlIHRlbXBvcmFyaWVzLCBhbmQgdGhlIGNhbGxlciBjYXNlIHdhcyBvcHRpbWl6ZWQgYnkgYXZv
aWRpbmcgdW5uZWNlc3NhcnkgY2FsbHMgdG8gbmV3VGVtcG9yYXJ5CisgICAgICAgIC0gRGVsYXkg
aG9sZGluZyB0aGUgbG9jayBpbiBMTGludFBsYW46OmNvbXBpbGVGdW5jdGlvbiwgc2luY2Ugd2Ug
ZG8gbm90IG5lZWQgdG8gaG9sZCBpdCB3aGlsZSBjb21waWxpbmcgdGhlIGpzLXRvLXdhc20gZW50
cnlwb2ludAorCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAq
IGJ5dGVjb21waWxlci9MYWJlbC5oOgorICAgICAgICAoSlNDOjpHZW5lcmljTGFiZWw6OmxvY2F0
aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0xhYmVsOjp1bnJlc29sdmVkSnVtcHMg
Y29uc3QpOgorICAgICAgICAqIGdlbmVyYXRvci9XYXNtLnJiOgorICAgICAgICAqIGxsaW50L1dl
YkFzc2VtYmx5LmFzbToKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbmRUb3BMZXZlbCk6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisgICAg
ICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmVuZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2spOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9u
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmFk
ZEp1bXBUYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvblBhcnNlcjo6ZXhwcmVzc2lvblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQm9keSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OkNvbnRyb2xUeXBlOjpsb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OkNvbnRyb2xUeXBlOjp0b3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpDb250cm9sVHlwZTo6YmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Q29udHJvbFR5cGU6OmlmXyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpDb250cm9sVHlwZTo6dGFyZ2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnN0YWNrU2l6ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Q29udHJvbFR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxv
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6cHVzaCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpkdW1wKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TExJbnRHZW5lcmF0b3I6OnZpcnR1YWxSZWdpc3RlckZvcldhc21Mb2NhbCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpqc051bGxDb25zdGFudCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjp6ZXJvQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6Z2V0RHJvcEtlZXBDb3VudCk6CisgICAgICAgIChKU0M6Oldh
c206OkxMSW50R2VuZXJhdG9yOjpkcm9wS2VlcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjptYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2Fscyk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb25zdGFudE1hcEhhc2hUcmFpdHM6OmVtcHR5VmFsdWUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29uc3RhbnRNYXBIYXNoVHJh
aXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Q29uc3RhbnRNYXBIYXNoVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIpOgorICAgICAgICAoSlND
OjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Omdl
dEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRMb29wKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRvcExldmVsKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZElmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
YWRkRWxzZVRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEJy
YW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6ZW5kVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkUmVmSXNOdWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OmFkZFJlZkZ1bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRk
VGFibGVHZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVGFibGVT
aXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6
CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkU2VsZWN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmxvYWQpOgorICAgICAgICAoSlNDOjpHZW5lcmljTGFi
ZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjo6c2V0TG9jYXRpb24pOgorICAgICAgICAqIHdhc20v
V2FzbUxMSW50UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50UGxhbjo6Y29tcGls
ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OlZhbGlkYXRlOjplbmRUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OlZh
bGlkYXRlOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisKIDIwMTktMTEtMTEgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggaW5jb3Jy
ZWN0IGFzc2VydGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QucmIKaW5kZXggYzJlYzljZjU3MmFiNmUxNmE4NDM3MmJmZjAwMzYwYjkzZmUxMzJjYy4u
ZjgyYmVkOTg5MjBlNzk1NWI1MjI4Y2Q3Yjg0MzRhNmUwNDA5MjI3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0xMjk3LDcgKzEyOTcs
NiBAQCBvcCA6c3dpdGNoLAogICAgIGFyZ3M6IHsKICAgICAgICAgc2NydXRpbmVlOiBWaXJ0dWFs
UmVnaXN0ZXIsCiAgICAgICAgIHRhYmxlSW5kZXg6IHVuc2lnbmVkLAotICAgICAgICBkZWZhdWx0
VGFyZ2V0OiBXYXNtQm91bmRMYWJlbCwKICAgICB9CiAKICMgV2FzbSBzcGVjaWZpYyBieXRlY29k
ZXMKQEAgLTEzMDUsNiArMTMwNCwxMyBAQCBvcCA6c3dpdGNoLAogb3AgOnVucmVhY2hhYmxlCiBv
cCA6cmV0X3ZvaWQKIAorb3AgOmRyb3Bfa2VlcCwKKyAgICBhcmdzOiB7CisgICAgICAgIHN0YXJ0
T2Zmc2V0OiB1bnNpZ25lZCwKKyAgICAgICAgZHJvcENvdW50OiB1bnNpZ25lZCwKKyAgICAgICAg
a2VlcENvdW50OiB1bnNpZ25lZCwKKyAgICB9CisKIG9wIDpyZWZfaXNfbnVsbCwKICAgICBhcmdz
OiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9MYWJlbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9MYWJlbC5oCmluZGV4IDkwMzEzNjI2ZjhmYjNjOGRjN2QwMjk1Y2ZkMzI2
ODBhZGEwMjBmNmQuLjM1YmMxNDc0ODlhNTI3MjA2MmQzOWRkYTkxYWNkODkyNzI0MjhiNDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTGFiZWwuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgKQEAgLTEyOCw2ICsx
MjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2Vu
ZXJpY0xhYmVsKTsKICAgICAgICAgdXNpbmcgQnl0ZWNvZGVHZW5lcmF0b3IgPSBCeXRlY29kZUdl
bmVyYXRvckJhc2U8VHJhaXRzPjsKICAgICAgICAgdXNpbmcgQm91bmRMYWJlbCA9IEdlbmVyaWNC
b3VuZExhYmVsPFRyYWl0cz47CisgICAgICAgIHR5cGVkZWYgVmVjdG9yPGludCwgOD4gSnVtcFZl
Y3RvcjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgR2VuZXJpY0xhYmVsKCkgPSBkZWZhdWx0OwpA
QCAtMTcwLDExICsxNzEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBi
b29sIGlzQm91bmQoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kOyB9CiAKKyAgICAgICAgdW5zaWdu
ZWQgbG9jYXRpb24oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWlzRm9y
d2FyZCgpKTsKKyAgICAgICAgICAgIG1fYm91bmQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IG1fbG9jYXRpb247CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgSnVtcFZlY3RvciYgdW5y
ZXNvbHZlZEp1bXBzKCkgY29uc3QgeyByZXR1cm4gIG1fdW5yZXNvbHZlZEp1bXBzOyB9CisKICAg
ICBwcml2YXRlOgogICAgICAgICBmcmllbmQgQm91bmRMYWJlbDsKIAotICAgICAgICB0eXBlZGVm
IFZlY3RvcjxpbnQsIDg+IEp1bXBWZWN0b3I7Ci0KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBpbnZhbGlkTG9jYXRpb24gPSBVSU5UX01BWDsKIAogICAgICAgICBpbnQgbV9yZWZD
b3VudCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
V2FzbS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvV2FzbS5yYgppbmRleCBj
MDBjNjI5ZGQwMzc2MzczMzkyODBjMTUxYTg3OWMyYWIzYmE4ZGY0Li5jMTc4NTg2ZDUyMWZhZDdk
YmI1MmI2NzdiYTUxZmFkNTIxNjlmOWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL1dhc20ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9XYXNtLnJiCkBAIC01OCw3ICs1OCw3IEBAIG1vZHVsZSBXYXNtCiB0ZW1wbGF0ZTw+CiBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRPcDwje29wX3R5cGUob3ApfT4oRXhwcmVzc2lvblR5cGUgbGhz
LCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICByZXN1bHQgPSBsaHM7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgICN7
b3AuY2FwaXRhbGl6ZWRfbmFtZX06OmVtaXQodGhpcywgcmVzdWx0LCBsaHMsIHJocyk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KQEAgLTcwLDcgKzcwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
T3A8I3tvcF90eXBlKG9wKX0+KEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmgK
IHRlbXBsYXRlPD4KIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZE9wPCN7b3BfdHlwZShvcCl9PihF
eHByZXNzaW9uVHlwZSBvcGVyYW5kLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gb3BlcmFuZDsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAg
ICAgI3tvcC5jYXBpdGFsaXplZF9uYW1lfTo6ZW1pdCh0aGlzLCByZXN1bHQsIG9wZXJhbmQpOwog
ICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvV2ViQXNzZW1ibHkuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2Vt
Ymx5LmFzbQppbmRleCAwYmI5ZmZkMzUyYWI0NDI4ZjVjNmM2Nzk1OGJjY2ZkNmVhM2Y0ZmE2Li42
Zjc1NTJkY2MyNzRmNDNmMDNiZjQ0OTcwOWNjNDExY2JjZDcyMjIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20KQEAgLTI5Nyw3ICsyOTcsNyBAQCBtYWNy
byB3YXNtUHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvY2tTZXR0ZXIsIGxvYWRXYXNt
SW5zdGFuY2UpCiAgICAgYnRpeiB3czEsIC56ZXJvSW5pdGlhbGl6ZUxvY2Fsc0RvbmUKICAgICBu
ZWdpIHdzMQogICAgIHN4aTJxIHdzMSwgd3MxCi0gICAgbGVhcCAoTnVtYmVyT2ZXYXNtQXJndW1l
bnRzICsgQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKSAqIC04W2Nmcl0sIHdzMAor
ICAgIGxlYXAgKE51bWJlck9mV2FzbUFyZ3VtZW50cyArIENhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycyArIDEpICogLThbY2ZyXSwgd3MwCiAuemVyb0luaXRpYWxpemVMb2NhbHNMb29w
OgogICAgIGFkZHEgMSwgd3MxCiAgICAgc3RvcmVxIDAsIFt3czAsIHdzMSwgOF0KQEAgLTU4OCwx
NCArNTg4LDIzIEBAIHdhc21PcChzd2l0Y2gsIFdhc21Td2l0Y2gsIG1hY3JvKGN0eCkKICAgICBh
ZGRwIHQxLCB0MgogCiAgICAgbG9hZGkgVmVjdG9yU2l6ZU9mZnNldFt0Ml0sIHQzCi0gICAgYmlh
ZXEgdDAsIHQzLCAuZGVmYXVsdAorICAgIGJpYiB0MCwgdDMsIC5pbkJvdW5kcworCisub3V0T2ZC
b3VuZHM6CisgICAgc3ViaSB0MywgMSwgdDAKKworLmluQm91bmRzOgogICAgIGxvYWRwIFZlY3Rv
ckJ1ZmZlck9mZnNldFt0Ml0sIHQyCi0gICAgbG9hZGkgW3QyLCB0MCwgNF0sIHQzCisgICAgbXVs
aSBzaXplb2YgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5LCB0MAorCisg
ICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5OjpzdGFydE9m
ZnNldFt0MiwgdDBdLCB0MQorICAgIGxvYWRpIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1w
VGFibGVFbnRyeTo6ZHJvcENvdW50W3QyLCB0MF0sIHQzCisgICAgbG9hZGkgV2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5OjprZWVwQ291bnRbdDIsIHQwXSwgdDUKKyAgICBk
cm9wS2VlcCh0MSwgdDMsIHQ1KQorCisgICAgbG9hZGlzIFdhc206OkZ1bmN0aW9uQ29kZUJsb2Nr
OjpKdW1wVGFibGVFbnRyeTo6dGFyZ2V0W3QyLCB0MF0sIHQzCiAgICAgYXNzZXJ0KG1hY3JvKG9r
KSBidGlueiB0MywgLm9rIGVuZCkKICAgICB3YXNtRGlzcGF0Y2hJbmRpcmVjdCh0MykKLQotLmRl
ZmF1bHQ6Ci0gICAganVtcChjdHgsIG1fZGVmYXVsdFRhcmdldCkKIGVuZCkKIAogdW5wcmVmaXhl
ZFdhc21PcCh3YXNtX2ptcCwgV2FzbUptcCwgbWFjcm8oY3R4KQpAQCAtMTk5MywzICsyMDAyLDMw
IEBAIHdhc21PcChpNjRfcmVpbnRlcnByZXRfZjY0LCBXYXNtSTY0UmVpbnRlcnByZXRGNjQsIG1h
Y3JvKGN0eCkKICAgICBmZDJxIGZ0MCwgdDAKICAgICByZXR1cm5xKGN0eCwgdDApCiBlbmQpCisK
K21hY3JvIGRyb3BLZWVwKHN0YXJ0T2Zmc2V0LCBkcm9wLCBrZWVwKQorICAgIGxzaGlmdGkgMywg
c3RhcnRPZmZzZXQKKyAgICBzdWJwIGNmciwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0CisgICAg
bmVnaSBkcm9wCisgICAgc3hpMnEgZHJvcCwgZHJvcAorCisuY29weUxvb3A6CisgICAgYnRpeiBr
ZWVwLCAuZG9uZQorICAgIG1vdmUgW3N0YXJ0T2Zmc2V0LCBkcm9wLCA4XSwgdDYKKyAgICBtb3Zl
IHQ2LCBbc3RhcnRPZmZzZXRdCisgICAgc3ViaSAxLCBrZWVwCisgICAgc3VicCA4LCBzdGFydE9m
ZnNldAorICAgIGptcCAuY29weUxvb3AKKworLmRvbmU6CitlbmQKKword2FzbU9wKGRyb3Bfa2Vl
cCwgV2FzbURyb3BLZWVwLCBtYWNybyhjdHgpCisgICAgd2dldHUoY3R4LCBtX3N0YXJ0T2Zmc2V0
LCB0MCkKKyAgICB3Z2V0dShjdHgsIG1fZHJvcENvdW50LCB0MSkKKyAgICB3Z2V0dShjdHgsIG1f
a2VlcENvdW50LCB0MikKKworICAgIGRyb3BLZWVwKHQwLCB0MSwgdDIpCisKKyAgICBkaXNwYXRj
aChjdHgpCitlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmNwcAppbmRleCA5YzcwODYxNzMwZDI3ZWQ1OTc0YTQ0ZjhkNTc1ZmIyNjE2ZDAx
ODU2Li5lZDdiOGRlOThmNTZlNDNjYmY3YTUzYzVlZGIyMjc1MDUyZmNmOGExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTI4
NSw2ICsyODUsOCBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250
cm9sRW50cnkmLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0geyB9KTsKIAorICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJl
KSB7IHJldHVybiB7IH07IH0KKwogICAgIC8vIENhbGxzCiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0
dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgVmVjdG9yPEV4cHJlc3Npb25UeXBl
LCAxPiYgcmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4mIHJlc3Vs
dHMpOwpAQCAtMjk5LDYgKzMwMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoY29uc3QgVmVj
dG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJlc3Npb25T
dGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+
KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAgdm9pZCBkaWRGaW5pc2hQYXJz
aW5nTG9jYWxzKCkgeyB9CisgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgfQogCiAg
ICAgc3RhdGljIFZlY3RvcjxUbXA+IHRvVG1wVmVjdG9yKGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4m
IHZlY3RvcikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKaW5kZXggODY1YTczOTNhZGE5ZjlmMjE0NWIzOGNhNGQ1NDc2YjZlMzY2
ZDIxMy4uNjE5NjE5MzljNjVjZjE5ODQ2ZTNiZmU2MDViZDA0MThlMTkyZmUyMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMjM1
LDYgKzIzNSw4IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRy
b2xFbnRyeSYsIGNvbnN0IFN0YWNrJiA9IHsgfSk7CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBlbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSkgeyByZXR1cm4geyB9OyB9
CisKICAgICAvLyBDYWxscwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4
LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRM
aXN0JiByZXN1bHRzKTsKQEAgLTI0NCw2ICsyNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1w
KGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0YWNrKiBl
eHByZXNzaW9uU3RhY2spOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPEIzSVJH
ZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAgdm9pZCBkaWRG
aW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9CisgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygp
IHsgfQogCiAgICAgVmFsdWUqIGNvbnN0YW50KEIzOjpUeXBlLCB1aW50NjRfdCBiaXRzLCBPcHRp
b25hbDxPcmlnaW4+ID0gV1RGOjpudWxsb3B0KTsKICAgICBWYWx1ZSogZnJhbWVQb2ludGVyKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2Rl
QmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJs
b2NrLmNwcAppbmRleCBkMzUwNWMzMDA4MTllYWU0Y2E2OTQ4Zjk4ZDhmYmE3Y2EyM2ZjZGI5Li4x
NjJhMzcyMzA1NGY3ZDIzNWZkZjU0MGYzNDI5YTg4MDY1ZjgwNzEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5jcHAKQEAgLTc1
LDExICs3NSw3IEBAIGNvbnN0IFNpZ25hdHVyZSYgRnVuY3Rpb25Db2RlQmxvY2s6OnNpZ25hdHVy
ZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIAogYXV0byBGdW5jdGlvbkNvZGVCbG9jazo6YWRkSnVt
cFRhYmxlKHNpemVfdCBudW1iZXJPZkVudHJpZXMpIC0+IEp1bXBUYWJsZSYKIHsKLSNpZiAhQVNT
RVJUX0RJU0FCTEVECi0gICAgbV9qdW1wVGFibGVzLmFwcGVuZChKdW1wVGFibGUobnVtYmVyT2ZF
bnRyaWVzLCAwKSk7Ci0jZWxzZQogICAgIG1fanVtcFRhYmxlcy5hcHBlbmQoSnVtcFRhYmxlKG51
bWJlck9mRW50cmllcykpOwotI2VuZGlmCiAgICAgcmV0dXJuIG1fanVtcFRhYmxlcy5sYXN0KCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
bkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrLmgKaW5kZXggZmVkNDQ3NWNhNWQ1Nzk3NjQ4YTlmN2IyOWM1MGE5NTc2YTRjYzEyZS4u
ZjY4OGE3YzllOTQyNmQ5ZTBiZWEzYWYwY2ZmYWYyYzI3ZGQ1YTU2NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKQEAgLTEwNSw3
ICsxMDUsMTQgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFkZFNpZ25hdHVyZShjb25zdCBTaWdu
YXR1cmUmKTsKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSh1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CiAKLSAgICB1c2luZyBKdW1wVGFibGUgPSBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldD47CisgICAgc3RydWN0IEp1bXBUYWJsZUVudHJ5IHsKKyAgICAgICAgaW50IHRhcmdl
dCB7IDAgfTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVk
IGRyb3BDb3VudDsKKyAgICAgICAgdW5zaWduZWQga2VlcENvdW50OworICAgIH07CisKKyAgICB1
c2luZyBKdW1wVGFibGUgPSBWZWN0b3I8SnVtcFRhYmxlRW50cnk+OwogICAgIEp1bXBUYWJsZSYg
YWRkSnVtcFRhYmxlKHNpemVfdCBudW1iZXJPZkVudHJpZXMpOwogICAgIGNvbnN0IEp1bXBUYWJs
ZSYganVtcFRhYmxlKHVuc2lnbmVkIHRhYmxlSW5kZXgpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51
bWJlck9mSnVtcFRhYmxlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCBmNzcxNmE3MDFlNzcyMGI4ZjM2YWM5ODUzNjAz
ODJmZmMyZjhjY2VhLi5kZTllZGY2OTJhODZiNDViY2Q5MmY5MjM2MmQxYjVmYjNjYWEzZDQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApA
QCAtNzcsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUo
KSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQogCiAgICAgVmVjdG9yPENvbnRyb2xFbnRy
eT4mIGNvbnRyb2xTdGFjaygpIHsgcmV0dXJuIG1fY29udHJvbFN0YWNrOyB9CisgICAgU3RhY2sm
IGV4cHJlc3Npb25TdGFjaygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvblN0YWNrOyB9CiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTg5LDYg
KzkwLDcgQEAgcHJpdmF0ZToKICNkZWZpbmUgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tf
SU5UTyhyZXN1bHQsIHdoYXQpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSwg
ImNhbid0IHBvcCBlbXB0eSBzdGFjayBpbiAiIHdoYXQpOyBcCiAgICAgICAgIHJlc3VsdCA9IG1f
ZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNr
KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIH0gd2hpbGUgKDApCiAKICAgICB0ZW1wbGF0ZTxPcFR5cGU+CkBAIC0xNzYsNiArMTc4LDcg
QEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCb2R5KCkgLT4gUGFydGlhbFJl
c3VsdAogICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4cHJlc3Np
b24oKSk7CiAgICAgICAgIH0KICAgICB9CisgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyht
X2NvbnRleHQuZW5kVG9wTGV2ZWwoJm1fc2lnbmF0dXJlKSk7CiAKICAgICBBU1NFUlQob3AgPT0g
T3BUeXBlOjpFbmQpOwogICAgIHJldHVybiB7IH07CkBAIC00MzgsOCArNDQxLDEwIEBAIGF1dG8g
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1
bHQKICAgICAgICAgc2l6ZV90IGZpcnN0QXJndW1lbnRJbmRleCA9IG1fZXhwcmVzc2lvblN0YWNr
LnNpemUoKSAtIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CiAgICAgICAgIFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4gYXJnczsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJn
cy50cnlSZXNlcnZlQ2FwYWNpdHkoY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSksICJj
YW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBjYWxsJ3MgIiwgY2FsbGVlU2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNz
aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5k
KG1fZXhwcmVzc2lvblN0YWNrLmF0KGkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BW
YWx1ZUZyb21TdGFjaygpOworICAgICAgICB9CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNo
cmluayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsK
QEAgLTQ2Nyw4ICs0NzIsMTAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+IGFyZ3M7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
IiwgYXJndW1lbnRDb3VudCwgIiBjYWxsX2luZGlyZWN0IGFyZ3VtZW50cyIpOwogICAgICAgICBz
aXplX3QgZmlyc3RBcmd1bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gYXJn
dW1lbnRDb3VudDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRleDsg
aSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQorICAgICAgICBmb3IgKHNpemVfdCBp
ID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrLmF0
KGkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21TdGFjaygpOworICAg
ICAgICB9CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhmaXJzdEFyZ3VtZW50SW5k
ZXgpOwogCiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKQEAgLTYwOCw2ICs2MTUsNyBAQCBh
dXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFs
UmVzdWx0CiAgICAgY2FzZSBEcm9wOiB7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1f
ZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgImNhbid0IGRyb3Agb24gZW1wdHkgc3RhY2siKTsKICAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgbV9jb250ZXh0LmRp
ZFBvcFZhbHVlRnJvbVN0YWNrKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAppbmRl
eCBiYWVmNTA3MDM3Zjk2MTczNGE5YThiZWE0Mjc3NjY5NGZmMzc1YjQzLi5mNDE2MjMyNjYxYTcx
Nzk1NDQwMzcxMDNmZTdmYjgxMzJhYWM1MjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAgLTMyLDEzICszMiwxMyBAQAogI2lu
Y2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uU3RyZWFtLmgi
CiAjaW5jbHVkZSAiTGFiZWwuaCIKLSNpbmNsdWRlICJSZWdpc3RlcklELmgiCiAjaW5jbHVkZSAi
V2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiV2FzbUZ1bmN0
aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbUdlbmVyYXRvclRyYWl0cy5oIgogI2luY2x1ZGUg
Ildhc21UaHVua3MuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZFVub3JkZXJlZE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CkBAIC00Nyw5ICs0Nyw5IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIExMSW50R2VuZXJhdG9yIDogcHVibGljIEJ5dGVjb2Rl
R2VuZXJhdG9yQmFzZTxHZW5lcmF0b3JUcmFpdHM+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBFeHBy
ZXNzaW9uVHlwZSA9IFJlZlB0cjxSZWdpc3RlcklEPjsKKyAgICB1c2luZyBFeHByZXNzaW9uVHlw
ZSA9IFZpcnR1YWxSZWdpc3RlcjsKICAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZlY3RvcjxF
eHByZXNzaW9uVHlwZSwgMT47Ci0gICAgdXNpbmcgU3RhY2sgPSBFeHByZXNzaW9uTGlzdDsKKyAg
ICB1c2luZyBTdGFjayA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMTI4LCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz47CiAKICAgICBzdHJ1Y3QgQ29udHJvbExvb3AgIHsKICAgICAgICAgUmVmPExhYmVs
PiBtX2JvZHk7CkBAIC03MywyNCArNzMsMjQgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAg
IH0KIAotICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgbG9vcChCbG9ja1NpZ25hdHVyZSBzaWdu
YXR1cmUsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRzLCBSZWY8TGFiZWw+IGJvZHksIFJl
ZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQorICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgbG9v
cChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVs
PiYmIGJvZHksIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHJlc3VsdHMsIFdURk1vdmUoY29u
dGludWF0aW9uKSwgQ29udHJvbExvb3AgeyBXVEZNb3ZlKGJvZHkpIH0pOworICAgICAgICAgICAg
cmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbExvb3AgeyBXVEZNb3Zl
KGJvZHkpIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIHRvcExl
dmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3Vs
dHMsIFJlZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQorICAgICAgICBzdGF0aWMgQ29udHJvbFR5
cGUgdG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUs
IFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHJlc3VsdHMsIFdURk1vdmUoY29udGludWF0aW9u
KSwgQ29udHJvbFRvcExldmVsIHsgfSk7CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUo
c2lnbmF0dXJlLCBzdGFja1NpemUsIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbFRvcExl
dmVsIHsgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgYmxvY2so
QmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0cywg
UmVmUHRyPExhYmVsPiBjb250aW51YXRpb24pCisgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBi
bG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmUHRy
PExhYmVsPiYmIGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENv
bnRyb2xUeXBlKHNpZ25hdHVyZSwgcmVzdWx0cywgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250
cm9sQmxvY2sgeyB9KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUs
IHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVh
dGlvbiksIENvbnRyb2xCbG9jayB7IH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENv
bnRyb2xUeXBlIGlmXyhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIGNvbnN0IEV4cHJlc3Npb25M
aXN0JiByZXN1bHRzLCBSZWY8TGFiZWw+IGFsdGVybmF0ZSwgUmVmUHRyPExhYmVsPiBjb250aW51
YXRpb24pCisgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBpZl8oQmxvY2tTaWduYXR1cmUgc2ln
bmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZjxMYWJlbD4mJiBhbHRlcm5hdGUsIFJlZlB0
cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBD
b250cm9sVHlwZShzaWduYXR1cmUsIHJlc3VsdHMsIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29u
dHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOworICAgICAgICAgICAgcmV0dXJuIENvbnRy
b2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCks
IFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0p
OwogICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPExhYmVsPiB0YXJnZXRMYWJlbEZvckJyYW5j
aCgpIGNvbnN0CkBAIC0xMDAsMTYgKzEwMCwyNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gbV9jb250aW51YXRpb247CiAgICAgICAgIH0KIAorICAgICAgICB1bnNpZ25lZCB0YXJnZXRB
cml0eSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPENvbnRyb2xMb29wPigqdGhpcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUt
PnJldHVybkNvdW50KCk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemUo
KSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2l6ZTsgfQorCiAgICAgICAgIEJsb2NrU2lnbmF0dXJl
IG1fc2lnbmF0dXJlOwotICAgICAgICBFeHByZXNzaW9uTGlzdCBtX3Jlc3VsdHM7CisgICAgICAg
IHVuc2lnbmVkIG1fc3RhY2tTaXplOwogICAgICAgICBSZWZQdHI8TGFiZWw+IG1fY29udGludWF0
aW9uOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAg
ICAgQ29udHJvbFR5cGUoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYgcmVzdWx0cywgUmVmUHRyPExhYmVsPiBjb250aW51YXRpb24sIFQgdCkKKyAgICAgICAg
Q29udHJvbFR5cGUoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUs
IFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24sIFQmJiB0KQogICAgICAgICAgICAgOiBCYXNl
KFdURk1vdmUodCkpCiAgICAgICAgICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKLSAgICAg
ICAgICAgICwgbV9yZXN1bHRzKHJlc3VsdHMpCisgICAgICAgICAgICAsIG1fc3RhY2tTaXplKHN0
YWNrU2l6ZSkKICAgICAgICAgICAgICwgbV9jb250aW51YXRpb24oV1RGTW92ZShjb250aW51YXRp
b24pKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTEzNywxOCArMTQ2LDMxIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0QSYgZGVz
dGluYXRpb25zLCBjb25zdCBFeHByZXNzaW9uTGlzdEImIHZhbHVlcykKICAgICB7CiAgICAgICAg
IEFTU0VSVChkZXN0aW5hdGlvbnMuc2l6ZSgpIDw9IHZhbHVlcy5zaXplKCkpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgZGVzdGluYXRpb25zW2Rlc3RpbmF0aW9ucy5zaXplKCkg
LSBpIC0gMV0sIHZhbHVlc1t2YWx1ZXMuc2l6ZSgpIC0gaSAtIDFdKTsKKyAgICAgICAgYXV0byBv
ZmZzZXQgPSB2YWx1ZXMuc2l6ZSgpIC0gZGVzdGluYXRpb25zLnNpemUoKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGF1dG8gZHN0ID0gZGVzdGluYXRpb25zW2ldOworICAgICAgICAgICAgYXV0byBzcmMgPSB2
YWx1ZXNbb2Zmc2V0ICsgaV07CisgICAgICAgICAgICBpZiAoZHN0ID09IHNyYykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgZHN0LCBz
cmMpOworICAgICAgICB9CiAgICAgfQogCisgICAgRXhwcmVzc2lvblR5cGUgcHVzaCgpCisgICAg
eworICAgICAgICBtX21heFN0YWNrU2l6ZSA9IHN0ZDo6bWF4KG1fbWF4U3RhY2tTaXplLCArK21f
c3RhY2tTaXplKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fc3Rh
Y2tTaXplIC0gMSk7CisgICAgfQorCisgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsg
LS1tX3N0YWNrU2l6ZTsgfQogCi0gICAgc3RhdGljIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVz
c2lvbigpIHsgcmV0dXJuIG51bGxwdHI7IH07CisgICAgc3RhdGljIEV4cHJlc3Npb25UeXBlIGVt
cHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIFZpcnR1YWxSZWdpc3RlciB7IH07IH07CiAgICAgU3Rh
Y2sgY3JlYXRlU3RhY2soKSB7IHJldHVybiBTdGFjaygpOyB9CiAgICAgYm9vbCBpc0NvbnRyb2xU
eXBlSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8Q29udHJvbElmPihjb250cm9sKTsgfQogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKLSAg
ICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCB1aW50NjRfdCk7CisgICAgRXhwcmVz
c2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgaW50NjRfdCk7CiAKICAgICAvLyBSZWZlcmVuY2Vz
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmVmSXNOdWxsKEV4cHJl
c3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKQEAgLTE4NywxNCArMjA5
LDE1IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRC
bG9jayhCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYg
bmV3QmxvY2ssIFN0YWNrJiBuZXdTdGFjayk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkTG9vcChCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBD
b250cm9sVHlwZSYgYmxvY2ssIFN0YWNrJiBuZXdTdGFjaywgdWludDMyX3QgbG9vcEluZGV4KTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRy
b2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sVHlwZSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0
Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9s
VHlwZSYsIFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
RWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKIAotICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sVHlwZSYsIGNvbnN0IEV4cHJl
c3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEJyYW5jaChDb250cm9sVHlwZSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Ci0gICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29u
c3QgVmVjdG9yPENvbnRyb2xUeXBlKj4mIHRhcmdldHMsIENvbnRyb2xUeXBlJiBkZWZhdWx0VGFy
Z2V0cywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVz
c2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmLCBjb25zdCBTdGFjayYg
ZXhwcmVzc2lvblN0YWNrID0geyB9KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmLCBTdGFjayYgcmV0dXJuVmFsdWVzKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbFR5
cGUmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFN0YWNrJiByZXR1cm5WYWx1ZXMpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZSo+JiB0YXJnZXRzLCBDb250cm9s
VHlwZSYgZGVmYXVsdFRhcmdldHMsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNr
JiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFj
ayA9IHsgfSwgYm9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlKTsKIAogICAgIC8vIENh
bGxzCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJf
dCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMpOwpAQCAtMjA1LDcgKzIyOCw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiog
cGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QqKSB7IH0KKyAgICB2b2lk
IGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBTdGFjayopIHsgfQogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBHZW5lcmljTGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjsK
QEAgLTIxNCwxMiArMjM3LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zm
c2V0OwogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQXJndW1lbnRzOwogICAgICAgICBF
eHByZXNzaW9uTGlzdCBhcmd1bWVudHM7Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0IHJlc3VsdHM7
CisgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwcmVzc2lvbkxpc3QmKT4gY29tbWl0
UmVzdWx0czsKICAgICB9OwogCi0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0
aW9uRm9yKGNvbnN0IFNpZ25hdHVyZSYsIENhbGxSb2xlID0gQ2FsbFJvbGU6OkNhbGxlcik7Cisg
ICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNp
Z25hdHVyZSYpOworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IGNhbGxJbmZvcm1hdGlv
bkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmKTsKIAotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbCh1aW50MzJfdCBpbmRleCkKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yV2FzbUxvY2FsKHVpbnQzMl90IGluZGV4KQogICAgIHsKICAgICAg
ICAgaWYgKGluZGV4IDwgbV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzKQogICAgICAgICAgICAg
cmV0dXJuIG1fbm9ybWFsaXplZEFyZ3VtZW50c1tpbmRleF07CkBAIC0yMjcsMjcgKzI1MSw4MiBA
QCBwcml2YXRlOgogICAgICAgICBjb25zdCBhdXRvJiBjYWxsaW5nQ29udmVudGlvbiA9IHdhc21D
YWxsaW5nQ29udmVudGlvbigpOwogICAgICAgICBjb25zdCB1aW50MzJfdCBncHJDb3VudCA9IGNh
bGxpbmdDb252ZW50aW9uLmdwckFyZ3Muc2l6ZSgpOwogICAgICAgICBjb25zdCB1aW50MzJfdCBm
cHJDb3VudCA9IGNhbGxpbmdDb252ZW50aW9uLmZwckFyZ3Muc2l6ZSgpOwotICAgICAgICByZXR1
cm4gOjpKU0M6OnZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbV9jb2RlQmxvY2stPm1f
bnVtQXJndW1lbnRzICsgZ3ByQ291bnQgKyBmcHJDb3VudCArIG51bWJlck9mTExJbnRDYWxsZWVT
YXZlUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGlu
ZGV4IC0gbV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzICsgZ3ByQ291bnQgKyBmcHJDb3VudCAr
IG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzKTsKICAgICB9CiAKLSAgICBFeHByZXNz
aW9uTGlzdCB0bXBzRm9yU2lnbmF0dXJlKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkKKyAgICBF
eHByZXNzaW9uVHlwZSBqc051bGxDb25zdGFudCgpCiAgICAgewotICAgICAgICBFeHByZXNzaW9u
TGlzdCByZXN1bHQoc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKQotICAgICAgICAg
ICAgcmVzdWx0W2ldID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghbV9qc051bGxDb25zdGFudC5pc1ZhbGlkKCkpKSB7CisgICAg
ICAgICAgICBtX2pzTnVsbENvbnN0YW50ID0gVmlydHVhbFJlZ2lzdGVyKEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4ICsgbV9jb2RlQmxvY2stPm1fY29uc3RhbnRzLnNpemUoKSk7CisgICAgICAg
ICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudHMuYXBwZW5kKEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRX
YXNtQnl0ZWNvZGVzKCkpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50
VHlwZXMuYXBwZW5kKFR5cGU6OkFueXJlZik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1f
anNOdWxsQ29uc3RhbnQ7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvblR5cGUganNOdWxsQ29uc3Rh
bnQoKQorICAgIEV4cHJlc3Npb25UeXBlIHplcm9Db25zdGFudCgpCiAgICAgewotICAgICAgICBp
ZiAoIW1fanNOdWxsQ29uc3RhbnQpCi0gICAgICAgICAgICBtX2pzTnVsbENvbnN0YW50ID0gYWRk
Q29uc3RhbnQoVHlwZTo6QW55cmVmLCBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKTsKLSAgICAg
ICAgcmV0dXJuIG1fanNOdWxsQ29uc3RhbnQ7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV96ZXJv
Q29uc3RhbnQuaXNWYWxpZCgpKSkgeworICAgICAgICAgICAgbV96ZXJvQ29uc3RhbnQgPSBWaXJ0
dWFsUmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvZGVCbG9jay0+bV9j
b25zdGFudHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5h
cHBlbmQoMCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEdlbmVyYXRl
ZFdhc21CeXRlY29kZXMoKSkpCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fY29uc3Rh
bnRUeXBlcy5hcHBlbmQoVHlwZTo6STMyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV96
ZXJvQ29uc3RhbnQ7CisgICAgfQorCisgICAgdm9pZCBnZXREcm9wS2VlcENvdW50KGNvbnN0IENv
bnRyb2xUeXBlJiB0YXJnZXQsIHVuc2lnbmVkJiBzdGFydE9mZnNldCwgdW5zaWduZWQmIGRyb3As
IHVuc2lnbmVkJiBrZWVwKQorICAgIHsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSB0YXJnZXQuc3Rh
Y2tTaXplKCkgKyAxOworICAgICAgICBrZWVwID0gdGFyZ2V0LnRhcmdldEFyaXR5KCk7CisgICAg
ICAgIGRyb3AgPSBtX3N0YWNrU2l6ZSAtIHRhcmdldC5zdGFja1NpemUoKSAtIHRhcmdldC50YXJn
ZXRBcml0eSgpOworICAgIH0KKworICAgIHZvaWQgZHJvcEtlZXAoU3RhY2smIHZhbHVlcywgY29u
c3QgQ29udHJvbFR5cGUmIHRhcmdldCwgYm9vbCBkcm9wVmFsdWVzKQorICAgIHsKKyAgICAgICAg
dW5zaWduZWQgc3RhcnRPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIGtlZXA7CisgICAgICAgIHVu
c2lnbmVkIGRyb3A7CisKKyAgICAgICAgZ2V0RHJvcEtlZXBDb3VudCh0YXJnZXQsIHN0YXJ0T2Zm
c2V0LCBkcm9wLCBrZWVwKTsKKworICAgICAgICBpZiAoZHJvcFZhbHVlcykKKyAgICAgICAgICAg
IHZhbHVlcy5zaHJpbmsoa2VlcCk7CisKKyAgICAgICAgaWYgKCFkcm9wKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmIChrZWVwKQorICAgICAgICAgICAgV2FzbURyb3BLZWVwOjpl
bWl0KHRoaXMsIHN0YXJ0T2Zmc2V0LCBkcm9wLCBrZWVwKTsKKyAgICB9CisKKyAgICB2b2lkIG1h
dGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKFN0YWNrJiBleHByZXNzaW9uU3RhY2spCisgICAg
eworICAgICAgICBpZiAoZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBmb3IgKGludCBpID0gZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgaSA+
IDA7IC0taSkgeworICAgICAgICAgICAgYXV0byBleHByZXNzaW9uID0gZXhwcmVzc2lvblN0YWNr
W2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpXTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBzbG90ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9zdGFja1NpemUgLSBpKTsKKyAgICAg
ICAgICAgIGlmIChleHByZXNzaW9uICE9IHNsb3QpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
ZXhwcmVzc2lvbi5pc0NvbnN0YW50KCkgfHwgZXhwcmVzc2lvbi5pc0FyZ3VtZW50KCkgfHwgZXhw
cmVzc2lvbi50b0xvY2FsKCkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICAgICAgICAg
ICAgICBXYXNtTW92OjplbWl0KHRoaXMsIHNsb3QsIGV4cHJlc3Npb24pOworICAgICAgICAgICAg
ICAgIGV4cHJlc3Npb25TdGFja1tleHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaV0gPSBzbG90Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgc3RydWN0IFN3aXRjaEVudHJ5
IHsKICAgICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQqIGp1bXBUYXJnZXQ7CisgICAgICAgIGludCoganVtcFRh
cmdldDsKKyAgICB9OworCisgICAgc3RydWN0IENvbnN0YW50TWFwSGFzaFRyYWl0cyA6IFdURjo6
R2VuZXJpY0hhc2hUcmFpdHM8RW5jb2RlZEpTVmFsdWU+IHsKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIGVtcHR5VmFsdWUoKSB7IHJldHVybiAwOyB9CisgICAgICAgIHN0YXRpYyB2b2lk
IGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkgeyBzbG90ID0gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRW
YWx1ZShFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKTsgfQogICAgIH07CiAKICAgICBGdW5jdGlvblBhcnNlcjxMTEludEdlbmVy
YXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwpAQCAtMjU2LDggKzMzNSwxMyBAQCBwcml2YXRl
OgogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IG1fbm9ybWFsaXplZEFyZ3VtZW50czsKICAg
ICBIYXNoTWFwPExhYmVsKiwgVmVjdG9yPFN3aXRjaEVudHJ5Pj4gbV9zd2l0Y2hlczsKICAgICBF
eHByZXNzaW9uVHlwZSBtX2pzTnVsbENvbnN0YW50OworICAgIEV4cHJlc3Npb25UeXBlIG1femVy
b0NvbnN0YW50OwogICAgIEV4cHJlc3Npb25MaXN0IG1fdW5pdGlhbGl6ZWRMb2NhbHM7Ci0gICAg
U3RkVW5vcmRlcmVkTWFwPHVpbnQ2NF90LCBWaXJ0dWFsUmVnaXN0ZXI+IG1fY29uc3RhbnRNYXA7
CisgICAgSGFzaE1hcDxFbmNvZGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyLCBXVEY6OkludEhh
c2g8RW5jb2RlZEpTVmFsdWU+LCBDb25zdGFudE1hcEhhc2hUcmFpdHM+IG1fY29uc3RhbnRNYXA7
CisgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4gbV9yZXN1bHRzOworICAgIHVuc2lnbmVk
IG1fc3RhY2tTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbWF4U3RhY2tTaXplIHsgMCB9Owor
ICAgIHVuc2lnbmVkIG1fdG9wTGV2ZWxTdGFja1NpemU7CiB9OwogCiBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVj
b2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uKQpAQCAtMjcwLDEwICszNTQsMTQgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1
bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb24KIH0K
IAogTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dX
YXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmKQotICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JC
YXNlKG1ha2VVbmlxdWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1bmN0aW9uSW5kZXgpLCBudW1iZXJP
ZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycykKKyAgICA6IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZSht
YWtlVW5pcXVlPEZ1bmN0aW9uQ29kZUJsb2NrPihmdW5jdGlvbkluZGV4KSwgMCkKICAgICAsIG1f
aW5mbyhpbmZvKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiB7CisgICAg
bV9jb2RlQmxvY2stPm1fbnVtVmFycyA9IG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJz
OworICAgIG1fc3RhY2tTaXplID0gbnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnM7Cisg
ICAgbV9tYXhTdGFja1NpemUgPSBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVyczsKKwog
ICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgICAgIFRodW5rczo6c2luZ2xldG9uKCku
c2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7CiAKQEAgLTI4Myw2ICsz
NzEsNyBAQCBMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSQogc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxpemUoKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKG1fY29kZUJsb2NrKTsKKyAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVMb2NhbHMgPSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgbV9tYXhT
dGFja1NpemUpOwogICAgIG1fY29kZUJsb2NrLT5zZXRJbnN0cnVjdGlvbnMobV93cml0ZXIuZmlu
YWxpemUoKSk7CiAgICAgcmV0dXJuIFdURk1vdmUobV9jb2RlQmxvY2spOwogfQpAQCAtMjkwLDgg
KzM3OSwzMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IExMSW50R2VuZXJh
dG9yOjpmaW5hbGl6ZSgpCiAvLyBHZW5lcmF0ZWQgZnJvbSB3YXNtLmpzb24KICNpbmNsdWRlICJX
YXNtTExJbnRHZW5lcmF0b3JJbmxpbmVzLmgiCiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJ
bmZvcm1hdGlvbkZvcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ2FsbFJvbGUgcm9sZSkg
LT4gTExJbnRDYWxsSW5mb3JtYXRpb24KK2F1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1h
dGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJbnRDYWxsSW5m
b3JtYXRpb24KIHsKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHNldHVwcyB0aGUgc3RhY2sgbGF5
b3V0IGZvciBjYWxscy4gVGhlIGRlc2lyZWQgc3RhY2sgbGF5b3V0IGlzOgorCisgICAgLy8gRlBS
bgorICAgIC8vIC4uLgorICAgIC8vIEZQUjEKKyAgICAvLyBGUFIwCisgICAgLy8gLS0tCisgICAg
Ly8gR1BSbgorICAgIC8vIC4uLgorICAgIC8vIEdQUjEKKyAgICAvLyBHUFIwCisgICAgLy8gLS0t
LQorICAgIC8vIHN0YWNrTgorICAgIC8vIC4uLgorICAgIC8vIHN0YWNrMQorICAgIC8vIHN0YWNr
MAorICAgIC8vIC0tLQorICAgIC8vIGNhbGwgZnJhbWUgaGVhZGVyCisKKyAgICAvLyBXZSBuZWVk
IHRvIGFsbG9jYXRlIGF0IGxlYXN0IHNwYWNlIGZvciBhbGwgR1BScyBhbmQgRlBScy4KKyAgICAv
LyBSZXR1cm4gdmFsdWVzIHVzZSB0aGUgc2FtZSBhbGxvY2F0aW9uIGxheW91dC4KKworICAgIGNv
bnN0IGF1dG8gaW5pdGlhbFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOworCiAgICAgY29uc3QgYXV0
byYgY2FsbGluZ0NvbnZlbnRpb24gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKICAgICBjb25z
dCB1aW50MzJfdCBncHJDb3VudCA9IGNhbGxpbmdDb252ZW50aW9uLmdwckFyZ3Muc2l6ZSgpOwog
ICAgIGNvbnN0IHVpbnQzMl90IGZwckNvdW50ID0gY2FsbGluZ0NvbnZlbnRpb24uZnByQXJncy5z
aXplKCk7CkBAIC0yOTksMTQgKzQxMiw5IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZv
cm1hdGlvbkZvcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ2FsbFJvbGUgcm9sCiAgICAg
dWludDMyX3Qgc3RhY2tDb3VudCA9IDA7CiAgICAgdWludDMyX3QgZ3BySW5kZXggPSAwOwogICAg
IHVpbnQzMl90IGZwckluZGV4ID0gMDsKLQotICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJJRD4s
IDE2PiByZWdpc3RlcnM7Ci0KLSAgICBFeHByZXNzaW9uTGlzdCBhcmd1bWVudHMoc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSk7Ci0gICAgRXhwcmVzc2lvbkxpc3QgcmVzdWx0cyhzaWduYXR1cmUu
cmV0dXJuQ291bnQoKSk7CisgICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CiAKICAgICBhdXRv
IGFsbG9jYXRlU3RhY2tSZWdpc3RlciA9IFsmXShUeXBlIHR5cGUpIHsKLSAgICAgICAgQVNTRVJU
KHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcik7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAg
ICAgICBjYXNlIFR5cGU6OkkzMjoKICAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CkBAIC0zMTQsMTkg
KzQyMiwxNSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3IoY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIENhbGxSb2xlIHJvbAogICAgICAgICBjYXNlIFR5cGU6OkZ1
bmNyZWY6CiAgICAgICAgICAgICBpZiAoZ3BySW5kZXggPCBncHJDb3VudCkKICAgICAgICAgICAg
ICAgICArK2dwckluZGV4OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVn
aXN0ZXJzLmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGFj
a0luZGV4KysgPj0gc3RhY2tDb3VudCkKICAgICAgICAgICAgICAgICArK3N0YWNrQ291bnQ7Ci0g
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlOjpGMzI6
CiAgICAgICAgIGNhc2UgVHlwZTo6RjY0OgogICAgICAgICAgICAgaWYgKGZwckluZGV4IDwgZnBy
Q291bnQpCiAgICAgICAgICAgICAgICAgKytmcHJJbmRleDsKLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIHJlZ2lzdGVycy5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOworICAgICAg
ICAgICAgZWxzZSBpZiAoc3RhY2tJbmRleCsrID49IHN0YWNrQ291bnQpCiAgICAgICAgICAgICAg
ICAgKytzdGFja0NvdW50OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgVm9pZDoKICAgICAgICAgY2FzZSBGdW5jOgpAQCAtMzM1LDkyICs0MzksMTQ1IEBA
IGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvcihjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgQ2FsbFJvbGUgcm9sCiAgICAgfTsKIAogCi0gICAgaWYgKHJvbGUgPT0gQ2Fs
bFJvbGU6OkNhbGxlZSkgewotICAgICAgICAvLyBSZXVzZSB0aGUgc2xvdHMgd2UgYWxsb2NhdGVk
IHRvIHNwaWxsIHRoZSByZWdpc3RlcnMgaW4gYWRkQXJndW1lbnRzCi0gICAgICAgIGZvciAodWlu
dDMyX3QgaSA9IGdwckNvdW50ICsgZnByQ291bnQ7IGktLTspCi0gICAgICAgICAgICByZWdpc3Rl
cnMuYXBwZW5kKG5ldyBSZWdpc3RlcklEKDo6SlNDOjp2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChu
dW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycyArIGkpKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGdwckNvdW50OyBpKyspCi0gICAgICAgICAg
ICByZWdpc3RlcnMuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGZwckNvdW50OyBpKyspCi0gICAgICAgICAgICByZWdpc3RlcnMuYXBwZW5k
KG5ld1RlbXBvcmFyeSgpKTsKLQotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKQotICAgICAgICAgICAgYWxsb2NhdGVTdGFja1Jl
Z2lzdGVyKHNpZ25hdHVyZS5hcmd1bWVudChpKSk7Ci0gICAgICAgIGdwckluZGV4ID0gMDsKLSAg
ICAgICAgZnBySW5kZXggPSAwOwotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2ln
bmF0dXJlLnJldHVybkNvdW50KCk7IGkrKykKLSAgICAgICAgICAgIGFsbG9jYXRlU3RhY2tSZWdp
c3RlcihzaWduYXR1cmUucmV0dXJuVHlwZShpKSk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykKKyAgICAgICAgYWxsb2NhdGVTdGFj
a1JlZ2lzdGVyKHNpZ25hdHVyZS5hcmd1bWVudChpKSk7CisKKyAgICBncHJJbmRleCA9IDA7Cisg
ICAgZnBySW5kZXggPSAwOworICAgIHN0YWNrSW5kZXggPSAwOworICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgaSsrKQorICAgICAgICBhbGxvY2F0
ZVN0YWNrUmVnaXN0ZXIoc2lnbmF0dXJlLnJldHVyblR5cGUoaSkpOworCisgICAgLy8gRklYTUU6
IHdlIGFyZSBhbGxvY2F0aW5nIHRoZSBleHRyYSBzcGFjZSBmb3IgdGhlIGFyZ3VtZW50L3JldHVy
biBjb3VudCBpbiBvcmRlciB0byBhdm9pZCBpbnRlcmZlcmVuY2UsIGJ1dCB3ZSBjb3VsZCBkbyBi
ZXR0ZXIKKyAgICAvLyBOT1RFOiBXZSBpbmNyZWFzZSBhcmcgY291bnQgYnkgMSBmb3IgdGhlIGNh
c2Ugb2YgaW5kaXJlY3QgY2FsbHMKKyAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1heChzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpICsgMSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkpICsgZ3ByQ291
bnQgKyBmcHJDb3VudCArIHN0YWNrQ291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lz
dGVyczsKKyAgICBpZiAobV9zdGFja1NpemUgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKQor
ICAgICAgICArK21fc3RhY2tTaXplOworICAgIGlmIChtX21heFN0YWNrU2l6ZSA8IG1fc3RhY2tT
aXplKQorICAgICAgICBtX21heFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOworCisKKyAgICBFeHBy
ZXNzaW9uTGlzdCBhcmd1bWVudHMoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CisgICAgRXhw
cmVzc2lvbkxpc3QgdGVtcG9yYXJ5UmVzdWx0cyhzaWduYXR1cmUucmV0dXJuQ291bnQoKSk7CisK
KyAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IG1fc3RhY2tTaXplOworICAgIGNvbnN0
IHVuc2lnbmVkIGJhc2UgPSBzdGFja09mZnNldCAtIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVn
aXN0ZXJzOworCisgICAgY29uc3QgdWludDMyX3QgZ3ByTGltaXQgPSBiYXNlIC0gc3RhY2tDb3Vu
dCAtIGdwckNvdW50OworICAgIGNvbnN0IHVpbnQzMl90IGZwckxpbWl0ID0gZ3ByTGltaXQgLSBm
cHJDb3VudDsKKworICAgIHN0YWNrSW5kZXggPSBiYXNlOworICAgIGdwckluZGV4ID0gYmFzZSAt
IHN0YWNrQ291bnQ7CisgICAgZnBySW5kZXggPSBncHJJbmRleCAtIGdwckNvdW50OworICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsK
KyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAgY2FzZSBU
eXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICBjYXNlIFR5cGU6OkFu
eXJlZjoKKyAgICAgICAgY2FzZSBUeXBlOjpGdW5jcmVmOgorICAgICAgICAgICAgaWYgKGdwcklu
ZGV4ID4gZ3ByTGltaXQpCisgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoLS1ncHJJbmRleCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRzW2ldID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1zdGFja0luZGV4
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAg
Y2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBpZiAoZnBySW5kZXggPiBmcHJMaW1pdCkKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLWZw
ckluZGV4KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNbaV0g
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLXN0YWNrSW5kZXgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHVu
c2lnbmVkIHN0YWNrT2Zmc2V0OwotICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxsZWUpCi0g
ICAgICAgIHN0YWNrT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1yZWdpc3RlcnMubGFz
dCgpLT5pbmRleCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gQWxpZ24gdGhlIHN0YWNrCi0g
ICAgICAgIGF1dG8gY29tcHV0ZVN0YWNrT2Zmc2V0ID0gWyZdIHsKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXJlZ2lzdGVycy5sYXN0KCktPmluZGV4KCkpICsgQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIH07Ci0gICAgICAgIHdoaWxl
IChjb21wdXRlU3RhY2tPZmZzZXQoKSAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpCi0gICAg
ICAgICAgICByZWdpc3RlcnMuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAgc3RhY2tP
ZmZzZXQgPSBjb21wdXRlU3RhY2tPZmZzZXQoKTsKKyAgICBzdGFja0luZGV4ID0gYmFzZTsKKyAg
ICBncHJJbmRleCA9IGJhc2UgLSBzdGFja0NvdW50OworICAgIGZwckluZGV4ID0gZ3BySW5kZXgg
LSBncHJDb3VudDsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVy
bkNvdW50KCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkp
KSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAg
ICAgICAgY2FzZSBUeXBlOjpBbnlyZWY6CisgICAgICAgIGNhc2UgVHlwZTo6RnVuY3JlZjoKKyAg
ICAgICAgICAgIGlmIChncHJJbmRleCA+IGdwckxpbWl0KQorICAgICAgICAgICAgICAgIHRlbXBv
cmFyeVJlc3VsdHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLWdwckluZGV4KTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0ZW1wb3JhcnlSZXN1bHRzW2ldID0gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1zdGFja0luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAg
ICAgICBpZiAoZnBySW5kZXggPiBmcHJMaW1pdCkKKyAgICAgICAgICAgICAgICB0ZW1wb3JhcnlS
ZXN1bHRzW2ldID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1mcHJJbmRleCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVzdWx0c1tpXSA9IHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKC0tc3RhY2tJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBWb2lkOgorICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKHJvbGUg
PT0gQ2FsbFJvbGU6OkNhbGxlciB8fCAhc3RhY2tDb3VudCk7Ci0gICAgY29uc3QgdWludDMyX3Qg
bWF4R1BSSW5kZXggPSBzdGFja0NvdW50ICsgZ3ByQ291bnQ7Ci0gICAgY29uc3QgdWludDMyX3Qg
bWF4RlBSSW5kZXggPSBtYXhHUFJJbmRleCArIGZwckNvdW50OworICAgIG1fc3RhY2tTaXplID0g
aW5pdGlhbFN0YWNrU2l6ZTsKKworICAgIGF1dG8gY29tbWl0UmVzdWx0cyA9IFt0aGlzLCB0ZW1w
b3JhcnlSZXN1bHRzID0gV1RGTW92ZSh0ZW1wb3JhcnlSZXN1bHRzKV0oRXhwcmVzc2lvbkxpc3Qm
IHJlc3VsdHMpIHsKKyAgICAgICAgZm9yIChhdXRvIHRlbXBvcmFyeVJlc3VsdCA6IHRlbXBvcmFy
eVJlc3VsdHMpIHsKKyAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IHB1c2goKTsK
KyAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgcmVzdWx0LCB0ZW1wb3JhcnlSZXN1bHQp
OworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICByZXR1cm4gTExJbnRDYWxsSW5mb3JtYXRpb24geyBzdGFja09mZnNldCwgc3RhY2tD
b3VudCwgV1RGTW92ZShhcmd1bWVudHMpLCBXVEZNb3ZlKGNvbW1pdFJlc3VsdHMpIH07Cit9CisK
K2F1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSkgLT4gVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4KK3sKKyAgICBp
ZiAobV9yZXN1bHRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0czsKKworICAgIG1f
cmVzdWx0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKTsK
KworICAgIGNvbnN0IGF1dG8mIGNhbGxpbmdDb252ZW50aW9uID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCk7CisgICAgY29uc3QgdWludDMyX3QgZ3ByQ291bnQgPSBjYWxsaW5nQ29udmVudGlvbi5n
cHJBcmdzLnNpemUoKTsKKyAgICBjb25zdCB1aW50MzJfdCBmcHJDb3VudCA9IGNhbGxpbmdDb252
ZW50aW9uLmZwckFyZ3Muc2l6ZSgpOworCisgICAgdWludDMyX3QgZ3BySW5kZXggPSAwOworICAg
IHVpbnQzMl90IGZwckluZGV4ID0gZ3ByQ291bnQ7CiAgICAgdWludDMyX3Qgc3RhY2tJbmRleCA9
IDA7Ci0gICAgYXV0byBhcHBlbmRGb3JUeXBlID0gWyZdKFR5cGUgdHlwZSwgdW5zaWduZWQgaW5k
ZXgsIGF1dG8mIHZlY3RvcikgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjb25zdCB1
aW50MzJfdCBtYXhHUFJJbmRleCA9IGdwckNvdW50OworICAgIGNvbnN0IHVpbnQzMl90IG1heEZQ
UkluZGV4ID0gbWF4R1BSSW5kZXggKyBmcHJDb3VudDsKKworICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAo
c2lnbmF0dXJlLnJldHVyblR5cGUoaSkpIHsKICAgICAgICAgY2FzZSBUeXBlOjpJMzI6CiAgICAg
ICAgIGNhc2UgVHlwZTo6STY0OgogICAgICAgICBjYXNlIFR5cGU6OkFueXJlZjoKICAgICAgICAg
Y2FzZSBUeXBlOjpGdW5jcmVmOgogICAgICAgICAgICAgaWYgKGdwckluZGV4IDwgbWF4R1BSSW5k
ZXgpCi0gICAgICAgICAgICAgICAgdmVjdG9yW2luZGV4XSA9IHJlZ2lzdGVyc1tyZWdpc3RlcnMu
c2l6ZSgpIC0gZ3BySW5kZXgrKyAtIDFdOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcikKLSAgICAgICAgICAgICAgICAgICAg
dmVjdG9yW2luZGV4XSA9IHJlZ2lzdGVyc1tyZWdpc3RlcnMuc2l6ZSgpIC0gc3RhY2tJbmRleCsr
IC0gMV07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB2ZWN0b3Jb
aW5kZXhdID0gbmV3IFJlZ2lzdGVySUQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoc3RhY2tJ
bmRleCsrKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVu
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVy
cyArIGdwckluZGV4KyspKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Jl
c3VsdHMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KHN0YWNrSW5kZXgrKykpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZTo6RjMyOgogICAgICAgICBjYXNl
IFR5cGU6OkY2NDoKICAgICAgICAgICAgIGlmIChmcHJJbmRleCA8IG1heEZQUkluZGV4KQotICAg
ICAgICAgICAgICAgIHZlY3RvcltpbmRleF0gPSByZWdpc3RlcnNbcmVnaXN0ZXJzLnNpemUoKSAt
IGZwckluZGV4KysgLSAxXTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlm
IChyb2xlID09IENhbGxSb2xlOjpDYWxsZXIpCi0gICAgICAgICAgICAgICAgICAgIHZlY3Rvcltp
bmRleF0gPSByZWdpc3RlcnNbcmVnaXN0ZXJzLnNpemUoKSAtIHN0YWNrSW5kZXgrKyAtIDFdOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2luZGV4XSA9
IG5ldyBSZWdpc3RlcklEKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KHN0YWNrSW5kZXgrKykp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwobnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnMgKyBmcHJJ
bmRleCsrKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFw
cGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChzdGFja0luZGV4KyspKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZvaWQ6CiAgICAgICAgIGNhc2UgRnVuYzoKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KLSAgICB9Owot
Ci0gICAgZ3BySW5kZXggPSBzdGFja0NvdW50OwotICAgIGZwckluZGV4ID0gbWF4R1BSSW5kZXg7
Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
IGkrKykKLSAgICAgICAgYXBwZW5kRm9yVHlwZShzaWduYXR1cmUuYXJndW1lbnQoaSksIGksIGFy
Z3VtZW50cyk7Ci0gICAgZ3BySW5kZXggPSBzdGFja0NvdW50OwotICAgIGZwckluZGV4ID0gbWF4
R1BSSW5kZXg7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5D
b3VudCgpOyBpKyspCi0gICAgICAgIGFwcGVuZEZvclR5cGUoc2lnbmF0dXJlLnJldHVyblR5cGUo
aSksIGksIHJlc3VsdHMpOwotCi0gICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcikgewot
ICAgICAgICAvLyBSZXNlcnZlIHNwYWNlIGZvciBjYWxsIGZyYW1lLgotICAgICAgICBWZWN0b3I8
UmVmUHRyPFJlZ2lzdGVySUQ+LCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIDIs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiBjYWxsRnJhbWU7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7ICsraSkKLSAgICAgICAgICAg
IGNhbGxGcmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwogICAgIH0KIAotICAgIHJldHVybiBM
TEludENhbGxJbmZvcm1hdGlvbiB7IHN0YWNrT2Zmc2V0LCBzdGFja0NvdW50LCBXVEZNb3ZlKGFy
Z3VtZW50cyksIFdURk1vdmUocmVzdWx0cykgfTsKKyAgICByZXR1cm4gbV9yZXN1bHRzOwogfQog
CisKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIG1fY29kZUJsb2NrLT5tX251bUFyZ3Vt
ZW50cyA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CkBAIC00MzUsOSArNTkyLDkgQEAgYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgdWludDMyX3QgZnBySW5kZXggPSBtYXhHUFJJbmRleDsK
ICAgICB1aW50MzJfdCBzdGFja0luZGV4ID0gMDsKIAotICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0
ZXJJRD4+IHJlZ2lzdGVyQXJndW1lbnRzKGdwckNvdW50ICsgZnByQ291bnQpOworICAgIFZlY3Rv
cjxWaXJ0dWFsUmVnaXN0ZXI+IHJlZ2lzdGVyQXJndW1lbnRzKGdwckNvdW50ICsgZnByQ291bnQp
OwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBncHJDb3VudCArIGZwckNvdW50OyBpKysp
Ci0gICAgICAgIHJlZ2lzdGVyQXJndW1lbnRzW2ldID0gYWRkVmFyKCk7CisgICAgICAgIHJlZ2lz
dGVyQXJndW1lbnRzW2ldID0gcHVzaCgpOwogCiAgICAgY29uc3QgYXV0byBhZGRBcmd1bWVudCA9
IFsmXSh1aW50MzJfdCBpbmRleCwgdWludDMyX3QmIGNvdW50LCB1aW50MzJfdCBtYXgpIHsKICAg
ICAgICAgaWYgKGNvdW50IDwgbWF4KQpAQCAtNDY0LDEzICs2MjEsMTYgQEAgYXV0byBMTEludEdl
bmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0
aWFsUmVzdWx0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2NvZGVCbG9jay0+bV9udW1WYXJz
ICs9IGdwckNvdW50ICsgZnByQ291bnQ7CisKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIExM
SW50R2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CisgICAgbV9jb2RlQmxvY2stPm1fbnVtVmFycyArPSBjb3VudDsKICAgICB3
aGlsZSAoY291bnQtLSkgewotICAgICAgICBhdXRvIGxvY2FsID0gYWRkVmFyKCk7CisgICAgICAg
IGF1dG8gbG9jYWwgPSBwdXNoKCk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBj
YXNlIFR5cGU6OkFueXJlZjoKICAgICAgICAgY2FzZSBUeXBlOjpGdW5jcmVmOgpAQCAtNDg1LDQ1
ICs2NDUsNjkgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50
MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogCiB2b2lkIExMSW50R2VuZXJhdG9yOjpkaWRG
aW5pc2hQYXJzaW5nTG9jYWxzKCkKIHsKKyAgICBpZiAobV91bml0aWFsaXplZExvY2Fscy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gbnVsbCA9IGpzTnVsbENvbnN0YW50
KCk7CiAgICAgZm9yIChhdXRvIGxvY2FsIDogbV91bml0aWFsaXplZExvY2FscykKICAgICAgICAg
V2FzbU1vdjo6ZW1pdCh0aGlzLCBsb2NhbCwgbnVsbCk7CiAgICAgbV91bml0aWFsaXplZExvY2Fs
cy5jbGVhcigpOwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5
cGUsIHVpbnQ2NF90IHZhbHVlKSAtPiBFeHByZXNzaW9uVHlwZQorYXV0byBMTEludEdlbmVyYXRv
cjo6YWRkQ29uc3RhbnQoVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKSAtPiBFeHByZXNzaW9uVHlw
ZQogewotICAgIFZpcnR1YWxSZWdpc3RlciBzb3VyY2UoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXggKyBtX2NvZGVCbG9jay0+bV9jb25zdGFudHMuc2l6ZSgpKTsKLSAgICBhdXRvIHJlc3VsdCA9
IG1fY29uc3RhbnRNYXAuZW1wbGFjZSh2YWx1ZSwgc291cmNlKTsKLSAgICBpZiAocmVzdWx0LnNl
Y29uZCkgeworICAgIGF1dG8gY29uc3RhbnQgPSBbJl0geworICAgICAgICBpZiAoIXZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuIHplcm9Db25zdGFudCgpOworCisgICAgICAgIGlmICh2YWx1ZSA9
PSBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKQorICAgICAgICAgICAgcmV0dXJuIGpzTnVsbENv
bnN0YW50KCk7CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNvdXJjZShGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCArIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5zaXplKCkpOworICAgICAg
ICBhdXRvIHJlc3VsdCA9IG1fY29uc3RhbnRNYXAuYWRkKHZhbHVlLCBzb3VyY2UpOworICAgICAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5hcHBlbmQodmFs
dWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZFdhc21CeXRl
Y29kZXMoKSkpCiAgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudFR5cGVzLmFwcGVu
ZCh0eXBlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291cmNlID0gcmVzdWx0LmZpcnN0LT5zZWNv
bmQ7Ci0gICAgYXV0byB0YXJnZXQgPSBuZXdUZW1wb3JhcnkoKTsKLSAgICBXYXNtTW92OjplbWl0
KHRoaXMsIHRhcmdldCwgc291cmNlKTsKLSAgICByZXR1cm4gdGFyZ2V0OworICAgICAgICByZXR1
cm4gc291cmNlOworICAgIH07CisgICAgLy8gbGVhdmUgYSBob2xlIGlmIHdlIG5lZWQgdG8gbWF0
ZXJpYWxpemUgdGhlIGNvbnN0YW50CisgICAgcHVzaCgpOworICAgIHJldHVybiBjb25zdGFudCgp
OwogfQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdW5uZWNlc3NhcnkgbW92ZXMKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjAzNjU3Ci0gICAgcmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAg
V2FzbU1vdjo6ZW1pdCh0aGlzLCByZXN1bHQsIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4
KSk7CisgICAgLy8gbGVhdmUgYSBob2xlIGlmIHdlIG5lZWQgdG8gbWF0ZXJpYWxpemUgdGhlIGxv
Y2FsCisgICAgcHVzaCgpOworICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZvcldhc21Mb2Nh
bChpbmRleCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBMTEludEdlbmVyYXRvcjo6c2V0
TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7Ci0gICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChp
bmRleCksIHZhbHVlKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0ID0gdmlydHVhbFJlZ2lz
dGVyRm9yV2FzbUxvY2FsKGluZGV4KTsKKworICAgIC8vIElmIHRoaXMgbG9jYWwgaXMgY3VycmVu
dGx5IG9uIHRoZSBzdGFjayB3ZSBuZWVkIHRvIG1hdGVyaWFsaXplIGl0LCBvdGhlcndpc2UgaXQn
bGwgc2VlIHRoZSBuZXcgdmFsdWUgaW5zdGVhZCBvZiB0aGUgb2xkIG9uZQorICAgIFN0YWNrJiBl
eHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+ZXhwcmVzc2lvblN0YWNrKCk7CisgICAgZm9yIChp
bnQgaSA9IGV4cHJlc3Npb25TdGFjay5zaXplKCk7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgYXV0
byBleHByZXNzaW9uID0gZXhwcmVzc2lvblN0YWNrW2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBp
XTsKKyAgICAgICAgaWYgKGV4cHJlc3Npb24gPT0gdGFyZ2V0KSB7CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2xvdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fc3RhY2tTaXplIC0g
aSk7CisgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIHNsb3QsIGV4cHJlc3Npb24pOwor
ICAgICAgICAgICAgZXhwcmVzc2lvblN0YWNrW2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpXSA9
IHNsb3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBXYXNtU2V0TG9jYWw6OmVtaXQodGhpcywg
dGFyZ2V0LCB2YWx1ZSk7CisKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIExMSW50R2VuZXJh
dG9yOjpnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICByZXN1
bHQgPSBwdXNoKCk7CiAgICAgV2FzbUdldEdsb2JhbDo6ZW1pdCh0aGlzLCByZXN1bHQsIGluZGV4
KTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNTQwLDExICs3MjQsMTMgQEAgYXV0byBMTEludEdl
bmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkg
LT4gUGFydGlhbFIKIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVy
ZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIGJsb2NrLCBT
dGFjayYgbmV3U3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCkgLT4gUGFydGlhbFJlc3VsdAogewor
ICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKKyAg
ICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhuZXdTdGFjayk7CisKICAgICBSZWY8TGFi
ZWw+IGJvZHkgPSBuZXdFbWl0dGVkTGFiZWwoKTsKICAgICBSZWY8TGFiZWw+IGNvbnRpbnVhdGlv
biA9IG5ld0xhYmVsKCk7CiAKLSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBl
bmNsb3NpbmdTdGFjayk7Ci0gICAgYmxvY2sgPSBDb250cm9sVHlwZTo6bG9vcChzaWduYXR1cmUs
IG5ld1N0YWNrLCBXVEZNb3ZlKGJvZHkpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbikpOworICAgIGJs
b2NrID0gQ29udHJvbFR5cGU6Omxvb3Aoc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwgV1RGTW92ZShi
b2R5KSwgV1RGTW92ZShjb250aW51YXRpb24pKTsKIAogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0
ZXI+IG9zckVudHJ5RGF0YTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9jb2RlQmxv
Y2stPm1fbnVtQXJndW1lbnRzOyBpKyspCkBAIC01NTQsMTEgKzc0MCwxMSBAQCBhdXRvIExMSW50
R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xv
c2luZ1N0YWNrLCBDbwogICAgIGNvbnN0IHVpbnQzMl90IGdwckNvdW50ID0gY2FsbGluZ0NvbnZl
bnRpb24uZ3ByQXJncy5zaXplKCk7CiAgICAgY29uc3QgdWludDMyX3QgZnByQ291bnQgPSBjYWxs
aW5nQ29udmVudGlvbi5mcHJBcmdzLnNpemUoKTsKICAgICBmb3IgKGludDMyX3QgaSA9IGdwckNv
dW50ICsgZnByQ291bnQgKyBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVyczsgaSA8IG1f
Y29kZUJsb2NrLT5tX251bVZhcnM7IGkrKykKLSAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZCg6
OkpTQzo6dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOworICAgICAgICBvc3JFbnRyeURhdGEu
YXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGNv
bnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5z
aXplKCk7ICsrY29udHJvbEluZGV4KSB7Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0JiBleHByZXNz
aW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3Nl
ZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IG1fcGFy
c2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNr
OwogICAgICAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCi0gICAg
ICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24tPnZpcnR1YWxSZWdpc3Rlcigp
KTsKKyAgICAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQoZXhwcmVzc2lvbik7CiAgICAgfQog
CiAgICAgV2FzbUxvb3BIaW50OjplbWl0KHRoaXMpOwpAQCAtNTcwLDEzICs3NTYsMTQgQEAgYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNr
JiBlbmNsb3NpbmdTdGFjaywgQ28KIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVG9wTGV2ZWwo
QmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKSAtPiBDb250cm9sVHlwZQogewotICAgIHJldHVybiBD
b250cm9sVHlwZTo6dG9wTGV2ZWwoc2lnbmF0dXJlLCB0bXBzRm9yU2lnbmF0dXJlKHNpZ25hdHVy
ZSksIG5ld0xhYmVsKCkpOworICAgIG1fdG9wTGV2ZWxTdGFja1NpemUgPSBtX3N0YWNrU2l6ZTsK
KyAgICByZXR1cm4gQ29udHJvbFR5cGU6OnRvcExldmVsKHNpZ25hdHVyZSwgbV9zdGFja1NpemUs
IG5ld0xhYmVsKCkpOwogfQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRCbG9jayhCbG9ja1Np
Z25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5l
d0Jsb2NrLCBTdGFjayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBuZXdTdGFj
ayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7Ci0gICAgbmV3QmxvY2sg
PSBDb250cm9sVHlwZTo6YmxvY2soc2lnbmF0dXJlLCB0bXBzRm9yU2lnbmF0dXJlKHNpZ25hdHVy
ZSksIG5ld0xhYmVsKCkpOworICAgIG5ld0Jsb2NrID0gQ29udHJvbFR5cGU6OmJsb2NrKHNpZ25h
dHVyZSwgbV9zdGFja1NpemUsIG5ld0xhYmVsKCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAg
LTU4OCwxMTQgKzc3NSwxNTAgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFMKICAgICBXYXNtSmZh
bHNlOjplbWl0KHRoaXMsIGNvbmRpdGlvbiwgYWx0ZXJuYXRlLT5iaW5kKHRoaXMpKTsKIAogICAg
IG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKLSAgICBy
ZXN1bHQgPSBDb250cm9sVHlwZTo6aWZfKHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25hdHVyZShzaWdu
YXR1cmUpLCBXVEZNb3ZlKGFsdGVybmF0ZSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CisgICAg
cmVzdWx0ID0gQ29udHJvbFR5cGU6OmlmXyhzaWduYXR1cmUsIG1fc3RhY2tTaXplLCBXVEZNb3Zl
KGFsdGVybmF0ZSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9sVHlwZSYgZGF0YSwgY29uc3Qg
RXhwcmVzc2lvbkxpc3QmIGN1cnJlbnRTdGFjaykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9sVHlwZSYgZGF0YSwgU3RhY2smIGV4cHJlc3Npb25T
dGFjaykgLT4gUGFydGlhbFJlc3VsdAogeworICAgIC8vIFRPRE86IGRvbid0IGVtaXQganVtcCBm
b3IgZW1wdHkgZWxzZQogICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xJ
Zj4oZGF0YSkpOwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGRhdGEubV9yZXN1bHRzLCBjdXJy
ZW50U3RhY2spOworICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKGV4cHJlc3Npb25T
dGFjayk7CiAgICAgV2FzbUptcDo6ZW1pdCh0aGlzLCBkYXRhLm1fY29udGludWF0aW9uLT5iaW5k
KHRoaXMpKTsKICAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7CiB9CiAKIGF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRh
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgp
ICsgZGF0YS5tX3NpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRhdGEubV9zaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAg
ICAgICBwdXNoKCk7CisKICAgICBDb250cm9sSWYmIGNvbnRyb2wgPSBXVEY6OmdldDxDb250cm9s
SWY+KGRhdGEpOwogICAgIGVtaXRMYWJlbChjb250cm9sLm1fYWx0ZXJuYXRlLmdldCgpKTsKLSAg
ICBkYXRhID0gQ29udHJvbFR5cGU6OmJsb2NrKGRhdGEubV9zaWduYXR1cmUsIFdURk1vdmUoZGF0
YS5tX3Jlc3VsdHMpLCBXVEZNb3ZlKGRhdGEubV9jb250aW51YXRpb24pKTsKKyAgICBkYXRhID0g
Q29udHJvbFR5cGU6OmJsb2NrKGRhdGEubV9zaWduYXR1cmUsIG1fc3RhY2tTaXplLCBXVEZNb3Zl
KGRhdGEubV9jb250aW51YXRpb24pKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50
R2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmIGRhdGEsIGNvbnN0IEV4cHJl
c3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5l
cmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sVHlwZSYgZGF0YSwgU3RhY2smIHJldHVyblZh
bHVlcykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGlmICghZGF0YS5tX3NpZ25hdHVyZS0+cmV0
dXJuQ291bnQoKSkgewogICAgICAgICBXYXNtUmV0Vm9pZDo6ZW1pdCh0aGlzKTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2Fs
bEluZm9ybWF0aW9uRm9yKCpkYXRhLm1fc2lnbmF0dXJlLCBDYWxsUm9sZTo6Q2FsbGVlKTsKLSAg
ICB1bmlmeVZhbHVlc1dpdGhCbG9jayhpbmZvLnJlc3VsdHMsIHJldHVyblZhbHVlcyk7CisgICAg
Ly8gbm8gbmVlZCB0byBkcm9wIGtlZXAgaGVyZSwgc2luY2Ugd2UgaGF2ZSB0byBtb3ZlIGFueXdh
eQorICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZSgqZGF0
YS5tX3NpZ25hdHVyZSksIHJldHVyblZhbHVlcyk7CiAgICAgV2FzbVJldDo6ZW1pdCh0aGlzKTsK
IAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEJyYW5jaChD
b250cm9sVHlwZSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJh
dG9yOjphZGRCcmFuY2goQ29udHJvbFR5cGUmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHVuaWZ5VmFs
dWVzV2l0aEJsb2NrKGRhdGEubV9yZXN1bHRzLCByZXR1cm5WYWx1ZXMpOwotCiAgICAgUmVmUHRy
PExhYmVsPiB0YXJnZXQgPSBkYXRhLnRhcmdldExhYmVsRm9yQnJhbmNoKCk7Ci0gICAgaWYgKGNv
bmRpdGlvbikKLSAgICAgICAgV2FzbUp0cnVlOjplbWl0KHRoaXMsIGNvbmRpdGlvbiwgdGFyZ2V0
LT5iaW5kKHRoaXMpKTsKLSAgICBlbHNlCi0gICAgICAgIFdhc21KbXA6OmVtaXQodGhpcywgdGFy
Z2V0LT5iaW5kKHRoaXMpKTsKKyAgICBSZWZQdHI8TGFiZWw+IHNraXAgPSBudWxscHRyOworCisg
ICAgbWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMocmV0dXJuVmFsdWVzKTsKKworICAgIGlm
IChjb25kaXRpb24uaXNWYWxpZCgpKSB7CisgICAgICAgIHNraXAgPSBuZXdMYWJlbCgpOworICAg
ICAgICBXYXNtSmZhbHNlOjplbWl0KHRoaXMsIGNvbmRpdGlvbiwgc2tpcC0+YmluZCh0aGlzKSk7
CisgICAgfQorCisgICAgZHJvcEtlZXAocmV0dXJuVmFsdWVzLCBkYXRhLCAhc2tpcCk7CisgICAg
V2FzbUptcDo6ZW1pdCh0aGlzLCB0YXJnZXQtPmJpbmQodGhpcykpOworCisgICAgaWYgKHNraXAp
CisgICAgICAgIGVtaXRMYWJlbCgqc2tpcCk7CiAKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRv
IExMSW50R2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25z
dCBWZWN0b3I8Q29udHJvbFR5cGUqPiYgdGFyZ2V0cywgQ29udHJvbFR5cGUmIGRlZmF1bHRUYXJn
ZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1
bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRp
b24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZSo+JiB0YXJnZXRzLCBDb250cm9sVHlwZSYgZGVm
YXVsdFRhcmdldCwgU3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFibGVz
KCk7Ci0gICAgRnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2Rl
QmxvY2stPmFkZEp1bXBUYWJsZSh0YXJnZXRzLnNpemUoKSk7CisgICAgbWF0ZXJpYWxpemVDb25z
dGFudHNBbmRMb2NhbHMoZXhwcmVzc2lvblN0YWNrKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYg
dGFyZ2V0IDogdGFyZ2V0cykKLSAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2sodGFyZ2V0LT5t
X3Jlc3VsdHMsIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZGVm
YXVsdFRhcmdldC5tX3Jlc3VsdHMsIGV4cHJlc3Npb25TdGFjayk7CisgICAgdW5zaWduZWQgdGFi
bGVJbmRleCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYWJsZXMoKTsKKyAgICBGdW5jdGlv
bkNvZGVCbG9jazo6SnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkSnVtcFRh
YmxlKHRhcmdldHMuc2l6ZSgpICsgMSk7CiAKLSAgICBXYXNtU3dpdGNoOjplbWl0KHRoaXMsIGNv
bmRpdGlvbiwgdGFibGVJbmRleCwgZGVmYXVsdFRhcmdldC50YXJnZXRMYWJlbEZvckJyYW5jaCgp
LT5iaW5kKHRoaXMpKTsKKyAgICBXYXNtU3dpdGNoOjplbWl0KHRoaXMsIGNvbmRpdGlvbiwgdGFi
bGVJbmRleCk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgSW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldCBvZmZzZXQgPSBtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKTsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldHMpIHsKLSAgICAgICAgUmVmUHRyPExhYmVsPiB0
YXJnZXRMYWJlbCA9IHRhcmdldC0+dGFyZ2V0TGFiZWxGb3JCcmFuY2goKTsKKworICAgIGF1dG8g
YWRkVGFyZ2V0ID0gWyZdKENvbnRyb2xUeXBlJiB0YXJnZXQpIHsKKyAgICAgICAgUmVmUHRyPExh
YmVsPiB0YXJnZXRMYWJlbCA9IHRhcmdldC50YXJnZXRMYWJlbEZvckJyYW5jaCgpOworCisgICAg
ICAgIGdldERyb3BLZWVwQ291bnQodGFyZ2V0LCBqdW1wVGFibGVbaW5kZXhdLnN0YXJ0T2Zmc2V0
LCBqdW1wVGFibGVbaW5kZXhdLmRyb3BDb3VudCwganVtcFRhYmxlW2luZGV4XS5rZWVwQ291bnQp
OworCiAgICAgICAgIGlmICh0YXJnZXRMYWJlbC0+aXNGb3J3YXJkKCkpIHsKICAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gbV9zd2l0Y2hlcy5hZGQodGFyZ2V0TGFiZWwuZ2V0KCksIFZlY3RvcjxT
d2l0Y2hFbnRyeT4oKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWp1bXBUYWJsZVtpbmRleF0pOwot
ICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoeyBvZmZzZXQsICZqdW1w
VGFibGVbaW5kZXgrK10gfSk7CisgICAgICAgICAgICBBU1NFUlQoIWp1bXBUYWJsZVtpbmRleF0u
dGFyZ2V0KTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKFN3aXRj
aEVudHJ5IHsgb2Zmc2V0LCAmanVtcFRhYmxlW2luZGV4KytdLnRhcmdldCB9KTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGludCBqdW1wVGFyZ2V0ID0gdGFyZ2V0TGFiZWwtPmJpbmQo
dGhpcykudGFyZ2V0KCk7CisgICAgICAgICAgICBpbnQganVtcFRhcmdldCA9IHRhcmdldExhYmVs
LT5sb2NhdGlvbigpIC0gb2Zmc2V0OwogICAgICAgICAgICAgQVNTRVJUKGp1bXBUYXJnZXQpOwot
ICAgICAgICAgICAganVtcFRhYmxlW2luZGV4KytdID0ganVtcFRhcmdldDsKKyAgICAgICAgICAg
IGp1bXBUYWJsZVtpbmRleCsrXS50YXJnZXQgPSBqdW1wVGFyZ2V0OwogICAgICAgICB9Ci0gICAg
fQorICAgIH07CiAKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldHMpCisgICAg
ICAgIGFkZFRhcmdldCgqdGFyZ2V0KTsKKyAgICBhZGRUYXJnZXQoZGVmYXVsdFRhcmdldCk7CiAK
ICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjplbmRCbG9jayhDb250
cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0
aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVu
dHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgQ29u
dHJvbFR5cGUmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKLQotICAgIGlmICghV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxDb250cm9sTG9vcD4oZGF0YSkpCi0gICAgICAgIHVuaWZ5VmFsdWVzV2l0
aEJsb2NrKGRhdGEubV9yZXN1bHRzLCBleHByZXNzaW9uU3RhY2spOwotCi0gICAgcmV0dXJuIGFk
ZEVuZFRvVW5yZWFjaGFibGUoZW50cnksIGV4cHJlc3Npb25TdGFjayk7CisgICAgcmV0dXJuIGFk
ZEVuZFRvVW5yZWFjaGFibGUoZW50cnksIGV4cHJlc3Npb25TdGFjaywgZmFsc2UpOwogfQogCiAK
LWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBl
bnRyeSwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5
LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBib29sIHVucmVhY2hhYmxlKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CisgICAgaWYgKCF1bnJlYWNoYWJsZSkKKyAgICAgICAgbWF0ZXJpYWxpemVDb25zdGFu
dHNBbmRMb2NhbHMoZXhwcmVzc2lvblN0YWNrKTsKKwogICAgIENvbnRyb2xUeXBlJiBkYXRhID0g
ZW50cnkuY29udHJvbERhdGE7CiAKLSAgICBlbWl0TGFiZWwoKmRhdGEubV9jb250aW51YXRpb24p
OworICAgIFJFTEVBU0VfQVNTRVJUKHVucmVhY2hhYmxlIHx8IG1fc3RhY2tTaXplID09IGRhdGEu
bV9zdGFja1NpemUgKyBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKIAotICAgIGlm
ICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sTG9vcD4oZGF0YSkpCi0gICAgICAgIGVu
dHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZFZlY3RvcihkYXRhLm1fcmVzdWx0cyk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fc2ln
bmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpIDwgZXhwcmVz
c2lvblN0YWNrLnNpemUoKSkKLSAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Np
b25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQobmV3VGVt
cG9yYXJ5KCkpOwotICAgICAgICB9CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9zaWduYXR1cmUtPnJldHVy
bkNvdW50KCk7ICsraSkgeworICAgICAgICBhdXRvIHRtcCA9IHB1c2goKTsKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgICAgIEFTU0VSVCh1bnJlYWNoYWJsZSB8fCB0bXAgPT0gZXhwcmVzc2lv
blN0YWNrW2ldKTsKKyNlbmRpZgorICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFj
ay5hcHBlbmQodG1wKTsKKyAgICB9CisKKyAgICBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gd2FzbV9q
bXAgJiYgZGF0YS5tX2NvbnRpbnVhdGlvbi0+dW5yZXNvbHZlZEp1bXBzKCkuc2l6ZSgpID09IDEg
JiYgZGF0YS5tX2NvbnRpbnVhdGlvbi0+dW5yZXNvbHZlZEp1bXBzKClbMF0gPT0gc3RhdGljX2Nh
c3Q8aW50PihtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSkpIHsKKyAgICAgICAgbV9sYXN0T3Bj
b2RlSUQgPSB3YXNtX3VucmVhY2hhYmxlOworICAgICAgICBtX3dyaXRlci5yZXdpbmQobV9sYXN0
SW5zdHJ1Y3Rpb24pOworICAgIH0gZWxzZQorICAgICAgICBlbWl0TGFiZWwoKmRhdGEubV9jb250
aW51YXRpb24pOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6
ZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgaWYgKCFzaWduYXR1cmUtPnJldHVybkNvdW50KCkpIHsKKyAgICAgICAgV2FzbVJldFZv
aWQ6OmVtaXQodGhpcyk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgLy8gVG9w
TGV2ZWwgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBhZnRlciB0aGlzIHNvIHdlIG5lZWQgdG8gbWFr
ZSBzdXJlIHdlIGVtaXQgYSByZXR1cm4gaGVyZS4KLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxDb250cm9sVG9wTGV2ZWw+KGRhdGEpKQotICAgICAgICByZXR1cm4gYWRkUmV0dXJuKGRh
dGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKKyAgICBtX3N0YWNrU2l6ZSA9IG1f
dG9wTGV2ZWxTdGFja1NpemU7CisgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gcmV0dXJuVmFs
dWVzKHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICByZXR1cm5WYWx1ZXNb
aV0gPSBwdXNoKCk7CisKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjYWxsSW5mb3JtYXRpb25G
b3JDYWxsZWUoKnNpZ25hdHVyZSksIHJldHVyblZhbHVlcyk7CisgICAgV2FzbVJldDo6ZW1pdCh0
aGlzKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC03MDMsMTMgKzkyNiwxMyBAQCBhdXRvIExM
SW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNv
bnN0IFN0YWNrJiBleHByZQogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7
Ci0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvcihzaWdu
YXR1cmUpOworICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25G
b3JDYWxsZXIoc2lnbmF0dXJlKTsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhpbmZvLmFyZ3Vt
ZW50cywgYXJncyk7Ci0gICAgcmVzdWx0cyA9IFdURk1vdmUoaW5mby5yZXN1bHRzKTsKICAgICBp
ZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICBXYXNtQ2FsbDo6ZW1pdCh0aGlzLCBm
dW5jdGlvbkluZGV4LCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVu
dHMpOwogICAgIGVsc2UKICAgICAgICAgV2FzbUNhbGxOb1Rsczo6ZW1pdCh0aGlzLCBmdW5jdGlv
bkluZGV4LCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVudHMpOwor
ICAgIGluZm8uY29tbWl0UmVzdWx0cyhyZXN1bHRzKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBA
IC03MjIsMjAgKzk0NSwyMCBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qo
dW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYQogICAgIEFTU0VSVCht
X2luZm8udGFibGVDb3VudCgpID4gdGFibGVJbmRleCk7CiAgICAgQVNTRVJUKG1faW5mby50YWJs
ZXNbdGFibGVJbmRleF0udHlwZSgpID09IFRhYmxlRWxlbWVudFR5cGU6OkZ1bmNyZWYpOwogCi0g
ICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1
cmUpOworICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3JD
YWxsZXIoc2lnbmF0dXJlKTsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhpbmZvLmFyZ3VtZW50
cywgYXJncyk7Ci0gICAgcmVzdWx0cyA9IFdURk1vdmUoaW5mby5yZXN1bHRzKTsKICAgICBpZiAo
Q29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICBXYXNtQ2FsbEluZGlyZWN0OjplbWl0KHRo
aXMsIGNhbGxlZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKHNpZ25hdHVyZSksIGlu
Zm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50cywgdGFibGVJbmRleCk7
CiAgICAgZWxzZQogICAgICAgICBXYXNtQ2FsbEluZGlyZWN0Tm9UbHM6OmVtaXQodGhpcywgY2Fs
bGVlSW5kZXgsIG1fY29kZUJsb2NrLT5hZGRTaWduYXR1cmUoc2lnbmF0dXJlKSwgaW5mby5zdGFj
a09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNrQXJndW1lbnRzLCB0YWJsZUluZGV4KTsKKyAgICBp
bmZvLmNvbW1pdFJlc3VsdHMocmVzdWx0cyk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRSZWZJc051bGwoRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSB2YWx1
ZTsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAgICAgV2FzbVJlZklzTnVsbDo6ZW1pdCh0aGlzLCBy
ZXN1bHQsIHZhbHVlKTsKIAogICAgIHJldHVybiB7IH07CkBAIC03NDMsNyArOTY2LDcgQEAgYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRSZWZGdW5jKHVp
bnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7
Ci0gICAgcmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAg
IFdhc21SZWZGdW5jOjplbWl0KHRoaXMsIHJlc3VsdCwgaW5kZXgpOwogCiAgICAgcmV0dXJuIHsg
fTsKQEAgLTc1MSw3ICs5NzQsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRSZWZGdW5jKHVp
bnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aQogCiBhdXRvIExM
SW50R2VuZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9u
VHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIHJlc3VsdCA9IGluZGV4OworICAgIHJlc3VsdCA9IHB1c2goKTsKICAgICBXYXNtVGFibGVH
ZXQ6OmVtaXQodGhpcywgcmVzdWx0LCBpbmRleCwgdGFibGVJbmRleCk7CiAKICAgICByZXR1cm4g
eyB9OwpAQCAtNzY2LDcgKzk4OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlU2V0
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByCiAKIGF1dG8g
TExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbmV3VGVt
cG9yYXJ5KCk7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21UYWJsZVNpemU6OmVtaXQo
dGhpcywgcmVzdWx0LCB0YWJsZUluZGV4KTsKIAogICAgIHJldHVybiB7IH07CkBAIC03NzQsNyAr
OTk3LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVGFibGVTaXplKHVuc2lnbmVkIHRhYmxl
SW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0KIAogYXV0byBMTEludEdlbmVyYXRvcjo6
YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4
cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7Ci0gICAgcmVzdWx0ID0gZmlsbDsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAgICAgV2Fz
bVRhYmxlR3Jvdzo6ZW1pdCh0aGlzLCByZXN1bHQsIGZpbGwsIGRlbHRhLCB0YWJsZUluZGV4KTsK
IAogICAgIHJldHVybiB7IH07CkBAIC03OTYsNyArMTAxOSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0
b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAogCiBhdXRvIExMSW50R2VuZXJh
dG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICByZXN1bHQgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICByZXN1bHQgPSBwdXNo
KCk7CiAgICAgV2FzbUN1cnJlbnRNZW1vcnk6OmVtaXQodGhpcywgcmVzdWx0KTsKIAogICAgIHJl
dHVybiB7IH07CkBAIC04MDQsNyArMTAyNyw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEN1
cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogCiBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0g
ZGVsdGE7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21Hcm93TWVtb3J5OjplbWl0KHRo
aXMsIHJlc3VsdCwgZGVsdGEpOwogCiAgICAgcmV0dXJuIHsgfTsKQEAgLTgxMiw3ICsxMDM1LDcg
QEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0
YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkU2Vs
ZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhw
cmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAogewotICAgIHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAgICAg
V2FzbVNlbGVjdDo6ZW1pdCh0aGlzLCByZXN1bHQsIGNvbmRpdGlvbiwgbm9uWmVybywgemVybyk7
CiAKICAgICByZXR1cm4geyB9OwpAQCAtODIwLDcgKzEwNDMsNyBAQCBhdXRvIExMSW50R2VuZXJh
dG9yOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBu
b25aZXJvLAogCiBhdXRvIExMSW50R2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJl
c3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNl
dCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IHBvaW50ZXI7CisgICAgcmVzdWx0
ID0gcHVzaCgpOwogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxv
YWQ4UzoKICAgICAgICAgV2FzbUkzMkxvYWQ4Uzo6ZW1pdCh0aGlzLCByZXN1bHQsIHBvaW50ZXIs
IG9mZnNldCk7CkBAIC05MzIsMTYgKzExNTUsOCBAQCB2b2lkIEdlbmVyaWNMYWJlbDxXYXNtOjpH
ZW5lcmF0b3JUcmFpdHM+OjpzZXRMb2NhdGlvbihCeXRlY29kZUdlbmVyYXRvckJhc2U8V2FzbQog
ICAgICAgICBDQVNFKFdhc21KbXApCiAgICAgICAgIENBU0UoV2FzbUp0cnVlKQogICAgICAgICBD
QVNFKFdhc21KZmFsc2UpCi0gICAgICAgIGNhc2UgV2FzbVN3aXRjaDo6b3Bjb2RlSUQ6IHsKLSAg
ICAgICAgICAgIEFTU0VSVCgoIWluc3RydWN0aW9uLT5hczxXYXNtU3dpdGNoLCBXYXNtT3Bjb2Rl
VHJhaXRzPigpLm1fZGVmYXVsdFRhcmdldCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb24tPmNh
c3Q8V2FzbVN3aXRjaCwgV2FzbU9wY29kZVRyYWl0cz4oKS0+c2V0RGVmYXVsdFRhcmdldChCb3Vu
ZExhYmVsKHRhcmdldCksIFsmXSgpIHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IubV9jb2Rl
QmxvY2stPmFkZE91dE9mTGluZUp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCksIHRhcmdl
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJvdW5kTGFiZWwoKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogI3VuZGVmIENBU0UKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCmluZGV4IDc3MmI1MTk2NmU0NTdk
Mjk2OGJjNjViMzEwOTM4ZGRmYmMyYjEwZjYuLmJjZWViMjg2YmEzY2IzMTk3ZWJmYjgwYjRlNWVm
NTE2ZmFiNGQ1OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21M
TEludFBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBs
YW4uY3BwCkBAIC04MCwxMCArODAsMTAgQEAgdm9pZCBMTEludFBsYW46OmNvbXBpbGVGdW5jdGlv
bih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKIAogICAgIGlm
IChtX2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpIHx8IG1f
bW9kdWxlSW5mb3JtYXRpb24tPnJlZmVyZW5jZWRGdW5jdGlvbnMoKS5jb250YWlucyhmdW5jdGlv
bkluZGV4KSkgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAg
ICAgIEVtYmVkZXJUb1dhc21GdW5jdGlvbiBlbnRyeTsKICAgICAgICAgZW50cnkuaml0ID0gbWFr
ZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgICAgIGVudHJ5LmZ1bmN0aW9uID0gbV9jcmVh
dGVFbWJlZGRlcldyYXBwZXIoKmVudHJ5LmppdCwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21U
b1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9t
b2RlLCBmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOwogICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0
aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbnRyeSkpOwogICAgICAgICBBU1NFUlRf
VU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCmluZGV4IGM1YTA4MTU0NWQ0NTQzOTVjMGQw
YmJkNGEzMDAzNjkyYTAxN2JjYzcuLjcyODMyZjI5NjhmZmI0Mzg1NDM3ZTQ0NDM3NDFkOWE4NTdm
ZDIyZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcApA
QCAtMTYxLDYgKzE2MSw3IEBAIHB1YmxpYzoKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICBSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCkgeyByZXR1cm4geyB9OyB9CisgICAg
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSkgeyBy
ZXR1cm4geyB9OyB9CiAKICAgICAvLyBDYWxscwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3Qg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYpOwpAQCAtMTc2LDYgKzE3
Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4m
LCBjb25zdCBTdGFjayopOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPFZhbGlk
YXRlPiopIHsgfQogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpIHsgfQorICAgIHZv
aWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KIAogcHJpdmF0ZToKICAgICBSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHVuaWZ5KGNvbnN0IFN0YWNrJiwgY29uc3QgQ29udHJvbERhdGEmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383745</attachid>
            <date>2019-11-18 07:30:50 -0800</date>
            <delta_ts>2019-11-18 11:24:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204092-20191118073048.patch</filename>
            <type>text/plain</type>
            <size>66076</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MWVjZjQ0MmU3YjA0ZGU1ZWQ3MWExMzBlNDk2NDAzZDhhZWJhYzkyLi4zMDc5ZDE1MDQ4NGZkNDgy
YWQ3ODQ5OTBjM2JkN2JhZTM5MDkxY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMTktMTEtMTcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBJbXByb3ZlIFdhc206OkxMSW50R2VuZXJhdG9y
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQwOTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlt
cHJvdmVzIHRoZSBXYXNtOjpMTEludEdlbmVyYXRvciBieToKKyAgICAgICAgLSBDaGFuZ2luZyBM
TEludEdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgZnJvbSBSZWZQdHI8UmVnaXN0ZXJJRD4gdG8g
VmlydHVhbFJlZ2lzdGVyOiBJbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYW5kIHJldGFpbmluZworICAg
ICAgICAgIFJlZ2lzdGVySURzIHdlIHVzZSBWaXJ0dWFsUmVnaXN0ZXJzIGRpcmVjdGx5IGFuZCBl
bnN1cmUgdGhhdCB0aGV5IG1hdGNoIHRoZSBXZWJBc3NlbWJseSBzdGFjaywgaS5lLiB0aGUgcGFy
c2VyJ3MgZXhwcmVzc2lvbgorICAgICAgICAgIHN0YWNrIHNob3VsZCBtYXRjaCB0aGUgdmlydHVh
bCByZWdpc3RlcnMuCisgICAgICAgIC0gUmVtb3ZpbmcgcmVkdW5kYW50IG1vdmVzIHdoZW4gbWF0
ZXJpYWxpemluZyBjb25zdGFudHMgYW5kIHBlcmZvcm1pbmcgbG9jYWwuZ2V0OiBpbnN0ZWFkIG9m
IGNyZWF0aW5nIGEgbmV3IHRlbXBvcmFyeQorICAgICAgICAgIGZvciBlYWNoIGNvbnN0YW50IGFu
ZCBsb2NhbC5nZXQsIHdlIHJldHVybiB0aGUgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGUgY29uc3Rh
bnQvbG9jYWwgc2xvdCBkaXJlY3RseS4gSW4gb3JkZXIgZm9yIHRoaXMKKyAgICAgICAgICB0byB3
b3JrLCB3ZSBzdGlsbCBhbGxvY2F0ZSB0aGUgc3RhY2sgc2xvdCBmb3IgdGhlIHRlbXBvcmFyaWVz
LCBzaW5jZSB3ZSBoYXZlIHRvIG1hdGVyaWFsaXplIHRoZW0gaW4gYmVmb3JlIGxvb3BzIGFuZCBi
cmFuY2hlcy4KKyAgICAgICAgLSBBZGRpbmcgYSBjb25zdHJ1Y3RvciB0byBDb250cm9sVHlwZSB0
aGF0IHRha2VzIHRoZSByZXN1bHRzIEV4cHJlc3Npb25MaXN0IGFzIGFuIHJ2YWx1ZSBpbnN0ZWFk
IG9mIGNvcHlpbmcgaXQKKyAgICAgICAgLSBPcHRpbWl6aW5nIGNhbGxJbmZvcm1hdGlvbkZvciwg
d2hpY2ggaXMgbm93IHNwbGl0IGludG8gdHdvIGZ1bmN0aW9ucy4gVGhlIGNhbGxlZSBkb2VzIG5v
dCBjYXJlIGFib3V0IGFyZ3VtZW50cywgYW5kIHNob3VsZAorICAgICAgICAgIG5ldmVyIGFsbG9j
YXRlIHRlbXBvcmFyaWVzLCBhbmQgdGhlIGNhbGxlciBjYXNlIHdhcyBvcHRpbWl6ZWQgYnkgYXZv
aWRpbmcgdW5uZWNlc3NhcnkgY2FsbHMgdG8gbmV3VGVtcG9yYXJ5CisgICAgICAgIC0gRGVsYXkg
aG9sZGluZyB0aGUgbG9jayBpbiBMTGludFBsYW46OmNvbXBpbGVGdW5jdGlvbiwgc2luY2Ugd2Ug
ZG8gbm90IG5lZWQgdG8gaG9sZCBpdCB3aGlsZSBjb21waWxpbmcgdGhlIGpzLXRvLXdhc20gZW50
cnlwb2ludAorCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAq
IGJ5dGVjb21waWxlci9MYWJlbC5oOgorICAgICAgICAoSlNDOjpHZW5lcmljTGFiZWw6OmxvY2F0
aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0xhYmVsOjp1bnJlc29sdmVkSnVtcHMg
Y29uc3QpOgorICAgICAgICAqIGdlbmVyYXRvci9XYXNtLnJiOgorICAgICAgICAqIGxsaW50L1dl
YkFzc2VtYmx5LmFzbToKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbmRUb3BMZXZlbCk6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisgICAg
ICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmVuZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2spOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9u
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmFk
ZEp1bXBUYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvblBhcnNlcjo6ZXhwcmVzc2lvblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQm9keSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OkNvbnRyb2xUeXBlOjpsb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OkNvbnRyb2xUeXBlOjp0b3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpDb250cm9sVHlwZTo6YmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Q29udHJvbFR5cGU6OmlmXyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpDb250cm9sVHlwZTo6dGFyZ2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnN0YWNrU2l6ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Q29udHJvbFR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxv
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6cHVzaCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpkdW1wKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TExJbnRHZW5lcmF0b3I6OnZpcnR1YWxSZWdpc3RlckZvcldhc21Mb2NhbCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpqc051bGxDb25zdGFudCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjp6ZXJvQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6Z2V0RHJvcEtlZXBDb3VudCk6CisgICAgICAgIChKU0M6Oldh
c206OkxMSW50R2VuZXJhdG9yOjpkcm9wS2VlcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjptYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2Fscyk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb25zdGFudE1hcEhhc2hUcmFpdHM6OmVtcHR5VmFsdWUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29uc3RhbnRNYXBIYXNoVHJh
aXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Q29uc3RhbnRNYXBIYXNoVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIpOgorICAgICAgICAoSlND
OjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Omdl
dEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRMb29wKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRvcExldmVsKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZElmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
YWRkRWxzZVRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEJy
YW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6ZW5kVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkUmVmSXNOdWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OmFkZFJlZkZ1bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRk
VGFibGVHZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVGFibGVT
aXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6
CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkU2VsZWN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmxvYWQpOgorICAgICAgICAoSlNDOjpHZW5lcmljTGFi
ZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjo6c2V0TG9jYXRpb24pOgorICAgICAgICAqIHdhc20v
V2FzbUxMSW50UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50UGxhbjo6Y29tcGls
ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OlZhbGlkYXRlOjplbmRUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OlZh
bGlkYXRlOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisKIDIwMTktMTEtMTEgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggaW5jb3Jy
ZWN0IGFzc2VydGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QucmIKaW5kZXggYzJlYzljZjU3MmFiNmUxNmE4NDM3MmJmZjAwMzYwYjkzZmUxMzJjYy4u
ZjgyYmVkOTg5MjBlNzk1NWI1MjI4Y2Q3Yjg0MzRhNmUwNDA5MjI3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0xMjk3LDcgKzEyOTcs
NiBAQCBvcCA6c3dpdGNoLAogICAgIGFyZ3M6IHsKICAgICAgICAgc2NydXRpbmVlOiBWaXJ0dWFs
UmVnaXN0ZXIsCiAgICAgICAgIHRhYmxlSW5kZXg6IHVuc2lnbmVkLAotICAgICAgICBkZWZhdWx0
VGFyZ2V0OiBXYXNtQm91bmRMYWJlbCwKICAgICB9CiAKICMgV2FzbSBzcGVjaWZpYyBieXRlY29k
ZXMKQEAgLTEzMDUsNiArMTMwNCwxMyBAQCBvcCA6c3dpdGNoLAogb3AgOnVucmVhY2hhYmxlCiBv
cCA6cmV0X3ZvaWQKIAorb3AgOmRyb3Bfa2VlcCwKKyAgICBhcmdzOiB7CisgICAgICAgIHN0YXJ0
T2Zmc2V0OiB1bnNpZ25lZCwKKyAgICAgICAgZHJvcENvdW50OiB1bnNpZ25lZCwKKyAgICAgICAg
a2VlcENvdW50OiB1bnNpZ25lZCwKKyAgICB9CisKIG9wIDpyZWZfaXNfbnVsbCwKICAgICBhcmdz
OiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9MYWJlbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9MYWJlbC5oCmluZGV4IDkwMzEzNjI2ZjhmYjNjOGRjN2QwMjk1Y2ZkMzI2
ODBhZGEwMjBmNmQuLjM1YmMxNDc0ODlhNTI3MjA2MmQzOWRkYTkxYWNkODkyNzI0MjhiNDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTGFiZWwuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgKQEAgLTEyOCw2ICsx
MjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2Vu
ZXJpY0xhYmVsKTsKICAgICAgICAgdXNpbmcgQnl0ZWNvZGVHZW5lcmF0b3IgPSBCeXRlY29kZUdl
bmVyYXRvckJhc2U8VHJhaXRzPjsKICAgICAgICAgdXNpbmcgQm91bmRMYWJlbCA9IEdlbmVyaWNC
b3VuZExhYmVsPFRyYWl0cz47CisgICAgICAgIHR5cGVkZWYgVmVjdG9yPGludCwgOD4gSnVtcFZl
Y3RvcjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgR2VuZXJpY0xhYmVsKCkgPSBkZWZhdWx0OwpA
QCAtMTcwLDExICsxNzEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBi
b29sIGlzQm91bmQoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kOyB9CiAKKyAgICAgICAgdW5zaWdu
ZWQgbG9jYXRpb24oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWlzRm9y
d2FyZCgpKTsKKyAgICAgICAgICAgIG1fYm91bmQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IG1fbG9jYXRpb247CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgSnVtcFZlY3RvciYgdW5y
ZXNvbHZlZEp1bXBzKCkgY29uc3QgeyByZXR1cm4gIG1fdW5yZXNvbHZlZEp1bXBzOyB9CisKICAg
ICBwcml2YXRlOgogICAgICAgICBmcmllbmQgQm91bmRMYWJlbDsKIAotICAgICAgICB0eXBlZGVm
IFZlY3RvcjxpbnQsIDg+IEp1bXBWZWN0b3I7Ci0KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBpbnZhbGlkTG9jYXRpb24gPSBVSU5UX01BWDsKIAogICAgICAgICBpbnQgbV9yZWZD
b3VudCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
V2FzbS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvV2FzbS5yYgppbmRleCBj
MDBjNjI5ZGQwMzc2MzczMzkyODBjMTUxYTg3OWMyYWIzYmE4ZGY0Li5jMTc4NTg2ZDUyMWZhZDdk
YmI1MmI2NzdiYTUxZmFkNTIxNjlmOWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL1dhc20ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9XYXNtLnJiCkBAIC01OCw3ICs1OCw3IEBAIG1vZHVsZSBXYXNtCiB0ZW1wbGF0ZTw+CiBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRPcDwje29wX3R5cGUob3ApfT4oRXhwcmVzc2lvblR5cGUgbGhz
LCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICByZXN1bHQgPSBsaHM7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgICN7
b3AuY2FwaXRhbGl6ZWRfbmFtZX06OmVtaXQodGhpcywgcmVzdWx0LCBsaHMsIHJocyk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KQEAgLTcwLDcgKzcwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
T3A8I3tvcF90eXBlKG9wKX0+KEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmgK
IHRlbXBsYXRlPD4KIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZE9wPCN7b3BfdHlwZShvcCl9PihF
eHByZXNzaW9uVHlwZSBvcGVyYW5kLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gb3BlcmFuZDsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAg
ICAgI3tvcC5jYXBpdGFsaXplZF9uYW1lfTo6ZW1pdCh0aGlzLCByZXN1bHQsIG9wZXJhbmQpOwog
ICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvV2ViQXNzZW1ibHkuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2Vt
Ymx5LmFzbQppbmRleCAwYmI5ZmZkMzUyYWI0NDI4ZjVjNmM2Nzk1OGJjY2ZkNmVhM2Y0ZmE2Li42
Zjc1NTJkY2MyNzRmNDNmMDNiZjQ0OTcwOWNjNDExY2JjZDcyMjIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20KQEAgLTI5Nyw3ICsyOTcsNyBAQCBtYWNy
byB3YXNtUHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvY2tTZXR0ZXIsIGxvYWRXYXNt
SW5zdGFuY2UpCiAgICAgYnRpeiB3czEsIC56ZXJvSW5pdGlhbGl6ZUxvY2Fsc0RvbmUKICAgICBu
ZWdpIHdzMQogICAgIHN4aTJxIHdzMSwgd3MxCi0gICAgbGVhcCAoTnVtYmVyT2ZXYXNtQXJndW1l
bnRzICsgQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKSAqIC04W2Nmcl0sIHdzMAor
ICAgIGxlYXAgKE51bWJlck9mV2FzbUFyZ3VtZW50cyArIENhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycyArIDEpICogLThbY2ZyXSwgd3MwCiAuemVyb0luaXRpYWxpemVMb2NhbHNMb29w
OgogICAgIGFkZHEgMSwgd3MxCiAgICAgc3RvcmVxIDAsIFt3czAsIHdzMSwgOF0KQEAgLTU4OCwx
NCArNTg4LDIzIEBAIHdhc21PcChzd2l0Y2gsIFdhc21Td2l0Y2gsIG1hY3JvKGN0eCkKICAgICBh
ZGRwIHQxLCB0MgogCiAgICAgbG9hZGkgVmVjdG9yU2l6ZU9mZnNldFt0Ml0sIHQzCi0gICAgYmlh
ZXEgdDAsIHQzLCAuZGVmYXVsdAorICAgIGJpYiB0MCwgdDMsIC5pbkJvdW5kcworCisub3V0T2ZC
b3VuZHM6CisgICAgc3ViaSB0MywgMSwgdDAKKworLmluQm91bmRzOgogICAgIGxvYWRwIFZlY3Rv
ckJ1ZmZlck9mZnNldFt0Ml0sIHQyCi0gICAgbG9hZGkgW3QyLCB0MCwgNF0sIHQzCisgICAgbXVs
aSBzaXplb2YgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5LCB0MAorCisg
ICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5OjpzdGFydE9m
ZnNldFt0MiwgdDBdLCB0MQorICAgIGxvYWRpIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1w
VGFibGVFbnRyeTo6ZHJvcENvdW50W3QyLCB0MF0sIHQzCisgICAgbG9hZGkgV2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5OjprZWVwQ291bnRbdDIsIHQwXSwgdDUKKyAgICBk
cm9wS2VlcCh0MSwgdDMsIHQ1KQorCisgICAgbG9hZGlzIFdhc206OkZ1bmN0aW9uQ29kZUJsb2Nr
OjpKdW1wVGFibGVFbnRyeTo6dGFyZ2V0W3QyLCB0MF0sIHQzCiAgICAgYXNzZXJ0KG1hY3JvKG9r
KSBidGlueiB0MywgLm9rIGVuZCkKICAgICB3YXNtRGlzcGF0Y2hJbmRpcmVjdCh0MykKLQotLmRl
ZmF1bHQ6Ci0gICAganVtcChjdHgsIG1fZGVmYXVsdFRhcmdldCkKIGVuZCkKIAogdW5wcmVmaXhl
ZFdhc21PcCh3YXNtX2ptcCwgV2FzbUptcCwgbWFjcm8oY3R4KQpAQCAtMTk5MywzICsyMDAyLDMw
IEBAIHdhc21PcChpNjRfcmVpbnRlcnByZXRfZjY0LCBXYXNtSTY0UmVpbnRlcnByZXRGNjQsIG1h
Y3JvKGN0eCkKICAgICBmZDJxIGZ0MCwgdDAKICAgICByZXR1cm5xKGN0eCwgdDApCiBlbmQpCisK
K21hY3JvIGRyb3BLZWVwKHN0YXJ0T2Zmc2V0LCBkcm9wLCBrZWVwKQorICAgIGxzaGlmdGkgMywg
c3RhcnRPZmZzZXQKKyAgICBzdWJwIGNmciwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0CisgICAg
bmVnaSBkcm9wCisgICAgc3hpMnEgZHJvcCwgZHJvcAorCisuY29weUxvb3A6CisgICAgYnRpeiBr
ZWVwLCAuZG9uZQorICAgIG1vdmUgW3N0YXJ0T2Zmc2V0LCBkcm9wLCA4XSwgdDYKKyAgICBtb3Zl
IHQ2LCBbc3RhcnRPZmZzZXRdCisgICAgc3ViaSAxLCBrZWVwCisgICAgc3VicCA4LCBzdGFydE9m
ZnNldAorICAgIGptcCAuY29weUxvb3AKKworLmRvbmU6CitlbmQKKword2FzbU9wKGRyb3Bfa2Vl
cCwgV2FzbURyb3BLZWVwLCBtYWNybyhjdHgpCisgICAgd2dldHUoY3R4LCBtX3N0YXJ0T2Zmc2V0
LCB0MCkKKyAgICB3Z2V0dShjdHgsIG1fZHJvcENvdW50LCB0MSkKKyAgICB3Z2V0dShjdHgsIG1f
a2VlcENvdW50LCB0MikKKworICAgIGRyb3BLZWVwKHQwLCB0MSwgdDIpCisKKyAgICBkaXNwYXRj
aChjdHgpCitlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmNwcAppbmRleCA5YzcwODYxNzMwZDI3ZWQ1OTc0YTQ0ZjhkNTc1ZmIyNjE2ZDAx
ODU2Li5lZDdiOGRlOThmNTZlNDNjYmY3YTUzYzVlZGIyMjc1MDUyZmNmOGExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTI4
NSw2ICsyODUsOCBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250
cm9sRW50cnkmLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0geyB9KTsKIAorICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJl
KSB7IHJldHVybiB7IH07IH0KKwogICAgIC8vIENhbGxzCiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0
dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgVmVjdG9yPEV4cHJlc3Npb25UeXBl
LCAxPiYgcmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4mIHJlc3Vs
dHMpOwpAQCAtMjk5LDYgKzMwMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoY29uc3QgVmVj
dG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJlc3Npb25T
dGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+
KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAgdm9pZCBkaWRGaW5pc2hQYXJz
aW5nTG9jYWxzKCkgeyB9CisgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgfQogCiAg
ICAgc3RhdGljIFZlY3RvcjxUbXA+IHRvVG1wVmVjdG9yKGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4m
IHZlY3RvcikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKaW5kZXggODY1YTczOTNhZGE5ZjlmMjE0NWIzOGNhNGQ1NDc2YjZlMzY2
ZDIxMy4uNjE5NjE5MzljNjVjZjE5ODQ2ZTNiZmU2MDViZDA0MThlMTkyZmUyMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMjM1
LDYgKzIzNSw4IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRy
b2xFbnRyeSYsIGNvbnN0IFN0YWNrJiA9IHsgfSk7CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBlbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSkgeyByZXR1cm4geyB9OyB9
CisKICAgICAvLyBDYWxscwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4
LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRM
aXN0JiByZXN1bHRzKTsKQEAgLTI0NCw2ICsyNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1w
KGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0YWNrKiBl
eHByZXNzaW9uU3RhY2spOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPEIzSVJH
ZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAgdm9pZCBkaWRG
aW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9CisgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygp
IHsgfQogCiAgICAgVmFsdWUqIGNvbnN0YW50KEIzOjpUeXBlLCB1aW50NjRfdCBiaXRzLCBPcHRp
b25hbDxPcmlnaW4+ID0gV1RGOjpudWxsb3B0KTsKICAgICBWYWx1ZSogZnJhbWVQb2ludGVyKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2Rl
QmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJs
b2NrLmNwcAppbmRleCBkMzUwNWMzMDA4MTllYWU0Y2E2OTQ4Zjk4ZDhmYmE3Y2EyM2ZjZGI5Li4x
NjJhMzcyMzA1NGY3ZDIzNWZkZjU0MGYzNDI5YTg4MDY1ZjgwNzEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5jcHAKQEAgLTc1
LDExICs3NSw3IEBAIGNvbnN0IFNpZ25hdHVyZSYgRnVuY3Rpb25Db2RlQmxvY2s6OnNpZ25hdHVy
ZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIAogYXV0byBGdW5jdGlvbkNvZGVCbG9jazo6YWRkSnVt
cFRhYmxlKHNpemVfdCBudW1iZXJPZkVudHJpZXMpIC0+IEp1bXBUYWJsZSYKIHsKLSNpZiAhQVNT
RVJUX0RJU0FCTEVECi0gICAgbV9qdW1wVGFibGVzLmFwcGVuZChKdW1wVGFibGUobnVtYmVyT2ZF
bnRyaWVzLCAwKSk7Ci0jZWxzZQogICAgIG1fanVtcFRhYmxlcy5hcHBlbmQoSnVtcFRhYmxlKG51
bWJlck9mRW50cmllcykpOwotI2VuZGlmCiAgICAgcmV0dXJuIG1fanVtcFRhYmxlcy5sYXN0KCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
bkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrLmgKaW5kZXggZmVkNDQ3NWNhNWQ1Nzk3NjQ4YTlmN2IyOWM1MGE5NTc2YTRjYzEyZS4u
ZjY4OGE3YzllOTQyNmQ5ZTBiZWEzYWYwY2ZmYWYyYzI3ZGQ1YTU2NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKQEAgLTEwNSw3
ICsxMDUsMTQgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFkZFNpZ25hdHVyZShjb25zdCBTaWdu
YXR1cmUmKTsKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSh1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CiAKLSAgICB1c2luZyBKdW1wVGFibGUgPSBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldD47CisgICAgc3RydWN0IEp1bXBUYWJsZUVudHJ5IHsKKyAgICAgICAgaW50IHRhcmdl
dCB7IDAgfTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVk
IGRyb3BDb3VudDsKKyAgICAgICAgdW5zaWduZWQga2VlcENvdW50OworICAgIH07CisKKyAgICB1
c2luZyBKdW1wVGFibGUgPSBWZWN0b3I8SnVtcFRhYmxlRW50cnk+OwogICAgIEp1bXBUYWJsZSYg
YWRkSnVtcFRhYmxlKHNpemVfdCBudW1iZXJPZkVudHJpZXMpOwogICAgIGNvbnN0IEp1bXBUYWJs
ZSYganVtcFRhYmxlKHVuc2lnbmVkIHRhYmxlSW5kZXgpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51
bWJlck9mSnVtcFRhYmxlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCBmNzcxNmE3MDFlNzcyMGI4ZjM2YWM5ODUzNjAz
ODJmZmMyZjhjY2VhLi5kZTllZGY2OTJhODZiNDViY2Q5MmY5MjM2MmQxYjVmYjNjYWEzZDQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApA
QCAtNzcsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUo
KSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQogCiAgICAgVmVjdG9yPENvbnRyb2xFbnRy
eT4mIGNvbnRyb2xTdGFjaygpIHsgcmV0dXJuIG1fY29udHJvbFN0YWNrOyB9CisgICAgU3RhY2sm
IGV4cHJlc3Npb25TdGFjaygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvblN0YWNrOyB9CiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTg5LDYg
KzkwLDcgQEAgcHJpdmF0ZToKICNkZWZpbmUgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tf
SU5UTyhyZXN1bHQsIHdoYXQpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSwg
ImNhbid0IHBvcCBlbXB0eSBzdGFjayBpbiAiIHdoYXQpOyBcCiAgICAgICAgIHJlc3VsdCA9IG1f
ZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNr
KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIH0gd2hpbGUgKDApCiAKICAgICB0ZW1wbGF0ZTxPcFR5cGU+CkBAIC0xNzYsNiArMTc4LDcg
QEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCb2R5KCkgLT4gUGFydGlhbFJl
c3VsdAogICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4cHJlc3Np
b24oKSk7CiAgICAgICAgIH0KICAgICB9CisgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyht
X2NvbnRleHQuZW5kVG9wTGV2ZWwoJm1fc2lnbmF0dXJlKSk7CiAKICAgICBBU1NFUlQob3AgPT0g
T3BUeXBlOjpFbmQpOwogICAgIHJldHVybiB7IH07CkBAIC00MzgsOCArNDQxLDEwIEBAIGF1dG8g
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1
bHQKICAgICAgICAgc2l6ZV90IGZpcnN0QXJndW1lbnRJbmRleCA9IG1fZXhwcmVzc2lvblN0YWNr
LnNpemUoKSAtIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CiAgICAgICAgIFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4gYXJnczsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJn
cy50cnlSZXNlcnZlQ2FwYWNpdHkoY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSksICJj
YW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBjYWxsJ3MgIiwgY2FsbGVlU2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNz
aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5k
KG1fZXhwcmVzc2lvblN0YWNrLmF0KGkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BW
YWx1ZUZyb21TdGFjaygpOworICAgICAgICB9CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNo
cmluayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsK
QEAgLTQ2Nyw4ICs0NzIsMTAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+IGFyZ3M7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
IiwgYXJndW1lbnRDb3VudCwgIiBjYWxsX2luZGlyZWN0IGFyZ3VtZW50cyIpOwogICAgICAgICBz
aXplX3QgZmlyc3RBcmd1bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gYXJn
dW1lbnRDb3VudDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRleDsg
aSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQorICAgICAgICBmb3IgKHNpemVfdCBp
ID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrLmF0
KGkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21TdGFjaygpOworICAg
ICAgICB9CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhmaXJzdEFyZ3VtZW50SW5k
ZXgpOwogCiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKQEAgLTYwOCw2ICs2MTUsNyBAQCBh
dXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFs
UmVzdWx0CiAgICAgY2FzZSBEcm9wOiB7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1f
ZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgImNhbid0IGRyb3Agb24gZW1wdHkgc3RhY2siKTsKICAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgbV9jb250ZXh0LmRp
ZFBvcFZhbHVlRnJvbVN0YWNrKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAppbmRl
eCBiYWVmNTA3MDM3Zjk2MTczNGE5YThiZWE0Mjc3NjY5NGZmMzc1YjQzLi5hOWUxMThmNWFlMGMy
ODA3ZDMwNmViZTcxZDJhODdjZTEyYTk3MjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAgLTMyLDEzICszMiwxMyBAQAogI2lu
Y2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uU3RyZWFtLmgi
CiAjaW5jbHVkZSAiTGFiZWwuaCIKLSNpbmNsdWRlICJSZWdpc3RlcklELmgiCiAjaW5jbHVkZSAi
V2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiV2FzbUZ1bmN0
aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbUdlbmVyYXRvclRyYWl0cy5oIgogI2luY2x1ZGUg
Ildhc21UaHVua3MuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZFVub3JkZXJlZE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CkBAIC00Nyw5ICs0Nyw5IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIExMSW50R2VuZXJhdG9yIDogcHVibGljIEJ5dGVjb2Rl
R2VuZXJhdG9yQmFzZTxHZW5lcmF0b3JUcmFpdHM+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBFeHBy
ZXNzaW9uVHlwZSA9IFJlZlB0cjxSZWdpc3RlcklEPjsKKyAgICB1c2luZyBFeHByZXNzaW9uVHlw
ZSA9IFZpcnR1YWxSZWdpc3RlcjsKICAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZlY3RvcjxF
eHByZXNzaW9uVHlwZSwgMT47Ci0gICAgdXNpbmcgU3RhY2sgPSBFeHByZXNzaW9uTGlzdDsKKyAg
ICB1c2luZyBTdGFjayA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMTI4LCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz47CiAKICAgICBzdHJ1Y3QgQ29udHJvbExvb3AgIHsKICAgICAgICAgUmVmPExhYmVs
PiBtX2JvZHk7CkBAIC03MywyNCArNzMsMjQgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAg
IH0KIAotICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgbG9vcChCbG9ja1NpZ25hdHVyZSBzaWdu
YXR1cmUsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRzLCBSZWY8TGFiZWw+IGJvZHksIFJl
ZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQorICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgbG9v
cChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVs
PiYmIGJvZHksIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHJlc3VsdHMsIFdURk1vdmUoY29u
dGludWF0aW9uKSwgQ29udHJvbExvb3AgeyBXVEZNb3ZlKGJvZHkpIH0pOworICAgICAgICAgICAg
cmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbExvb3AgeyBXVEZNb3Zl
KGJvZHkpIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIHRvcExl
dmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3Vs
dHMsIFJlZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQorICAgICAgICBzdGF0aWMgQ29udHJvbFR5
cGUgdG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUs
IFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHJlc3VsdHMsIFdURk1vdmUoY29udGludWF0aW9u
KSwgQ29udHJvbFRvcExldmVsIHsgfSk7CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUo
c2lnbmF0dXJlLCBzdGFja1NpemUsIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbFRvcExl
dmVsIHsgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgYmxvY2so
QmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0cywg
UmVmUHRyPExhYmVsPiBjb250aW51YXRpb24pCisgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBi
bG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmUHRy
PExhYmVsPiYmIGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENv
bnRyb2xUeXBlKHNpZ25hdHVyZSwgcmVzdWx0cywgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250
cm9sQmxvY2sgeyB9KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUs
IHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVh
dGlvbiksIENvbnRyb2xCbG9jayB7IH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENv
bnRyb2xUeXBlIGlmXyhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIGNvbnN0IEV4cHJlc3Npb25M
aXN0JiByZXN1bHRzLCBSZWY8TGFiZWw+IGFsdGVybmF0ZSwgUmVmUHRyPExhYmVsPiBjb250aW51
YXRpb24pCisgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBpZl8oQmxvY2tTaWduYXR1cmUgc2ln
bmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZjxMYWJlbD4mJiBhbHRlcm5hdGUsIFJlZlB0
cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBD
b250cm9sVHlwZShzaWduYXR1cmUsIHJlc3VsdHMsIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29u
dHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOworICAgICAgICAgICAgcmV0dXJuIENvbnRy
b2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCks
IFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0p
OwogICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPExhYmVsPiB0YXJnZXRMYWJlbEZvckJyYW5j
aCgpIGNvbnN0CkBAIC0xMDAsMTYgKzEwMCwyNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gbV9jb250aW51YXRpb247CiAgICAgICAgIH0KIAorICAgICAgICB1bnNpZ25lZCB0YXJnZXRB
cml0eSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPENvbnRyb2xMb29wPigqdGhpcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUt
PnJldHVybkNvdW50KCk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemUo
KSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2l6ZTsgfQorCiAgICAgICAgIEJsb2NrU2lnbmF0dXJl
IG1fc2lnbmF0dXJlOwotICAgICAgICBFeHByZXNzaW9uTGlzdCBtX3Jlc3VsdHM7CisgICAgICAg
IHVuc2lnbmVkIG1fc3RhY2tTaXplOwogICAgICAgICBSZWZQdHI8TGFiZWw+IG1fY29udGludWF0
aW9uOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAg
ICAgQ29udHJvbFR5cGUoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYgcmVzdWx0cywgUmVmUHRyPExhYmVsPiBjb250aW51YXRpb24sIFQgdCkKKyAgICAgICAg
Q29udHJvbFR5cGUoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUs
IFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24sIFQmJiB0KQogICAgICAgICAgICAgOiBCYXNl
KFdURk1vdmUodCkpCiAgICAgICAgICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKLSAgICAg
ICAgICAgICwgbV9yZXN1bHRzKHJlc3VsdHMpCisgICAgICAgICAgICAsIG1fc3RhY2tTaXplKHN0
YWNrU2l6ZSkKICAgICAgICAgICAgICwgbV9jb250aW51YXRpb24oV1RGTW92ZShjb250aW51YXRp
b24pKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTEzNywxOCArMTQ2LDMxIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0QSYgZGVz
dGluYXRpb25zLCBjb25zdCBFeHByZXNzaW9uTGlzdEImIHZhbHVlcykKICAgICB7CiAgICAgICAg
IEFTU0VSVChkZXN0aW5hdGlvbnMuc2l6ZSgpIDw9IHZhbHVlcy5zaXplKCkpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgZGVzdGluYXRpb25zW2Rlc3RpbmF0aW9ucy5zaXplKCkg
LSBpIC0gMV0sIHZhbHVlc1t2YWx1ZXMuc2l6ZSgpIC0gaSAtIDFdKTsKKyAgICAgICAgYXV0byBv
ZmZzZXQgPSB2YWx1ZXMuc2l6ZSgpIC0gZGVzdGluYXRpb25zLnNpemUoKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGF1dG8gZHN0ID0gZGVzdGluYXRpb25zW2ldOworICAgICAgICAgICAgYXV0byBzcmMgPSB2
YWx1ZXNbb2Zmc2V0ICsgaV07CisgICAgICAgICAgICBpZiAoZHN0ID09IHNyYykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgZHN0LCBz
cmMpOworICAgICAgICB9CiAgICAgfQogCisgICAgRXhwcmVzc2lvblR5cGUgcHVzaCgpCisgICAg
eworICAgICAgICBtX21heFN0YWNrU2l6ZSA9IHN0ZDo6bWF4KG1fbWF4U3RhY2tTaXplLCArK21f
c3RhY2tTaXplKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fc3Rh
Y2tTaXplIC0gMSk7CisgICAgfQorCisgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsg
LS1tX3N0YWNrU2l6ZTsgfQogCi0gICAgc3RhdGljIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVz
c2lvbigpIHsgcmV0dXJuIG51bGxwdHI7IH07CisgICAgc3RhdGljIEV4cHJlc3Npb25UeXBlIGVt
cHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIFZpcnR1YWxSZWdpc3RlciB7IH07IH07CiAgICAgU3Rh
Y2sgY3JlYXRlU3RhY2soKSB7IHJldHVybiBTdGFjaygpOyB9CiAgICAgYm9vbCBpc0NvbnRyb2xU
eXBlSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8Q29udHJvbElmPihjb250cm9sKTsgfQogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKLSAg
ICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCB1aW50NjRfdCk7CisgICAgRXhwcmVz
c2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgaW50NjRfdCk7CiAKICAgICAvLyBSZWZlcmVuY2Vz
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmVmSXNOdWxsKEV4cHJl
c3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKQEAgLTE4NywxNCArMjA5
LDE1IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRC
bG9jayhCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYg
bmV3QmxvY2ssIFN0YWNrJiBuZXdTdGFjayk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkTG9vcChCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBD
b250cm9sVHlwZSYgYmxvY2ssIFN0YWNrJiBuZXdTdGFjaywgdWludDMyX3QgbG9vcEluZGV4KTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRy
b2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sVHlwZSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0
Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9s
VHlwZSYsIFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
RWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKIAotICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sVHlwZSYsIGNvbnN0IEV4cHJl
c3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEJyYW5jaChDb250cm9sVHlwZSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Ci0gICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29u
c3QgVmVjdG9yPENvbnRyb2xUeXBlKj4mIHRhcmdldHMsIENvbnRyb2xUeXBlJiBkZWZhdWx0VGFy
Z2V0cywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVz
c2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmLCBjb25zdCBTdGFjayYg
ZXhwcmVzc2lvblN0YWNrID0geyB9KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmLCBTdGFjayYgcmV0dXJuVmFsdWVzKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbFR5
cGUmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFN0YWNrJiByZXR1cm5WYWx1ZXMpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZSo+JiB0YXJnZXRzLCBDb250cm9s
VHlwZSYgZGVmYXVsdFRhcmdldHMsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNr
JiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiwgY29uc3QgU3RhY2smIGV4cHJlc3Np
b25TdGFjayA9IHsgfSwgYm9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlKTsKIAogICAg
IC8vIENhbGxzCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1
aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25U
eXBlPiYgYXJncywgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMpOwpAQCAtMjA1LDcgKzIyOCw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJh
dG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCi0gICAgdm9pZCBkdW1wKGNv
bnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QqKSB7IH0KKyAg
ICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBTdGFjayopIHsg
fQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBHZW5lcmljTGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJh
aXRzPjsKQEAgLTIxNCwxMiArMjM3LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIHN0
YWNrT2Zmc2V0OwogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQXJndW1lbnRzOwogICAg
ICAgICBFeHByZXNzaW9uTGlzdCBhcmd1bWVudHM7Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0IHJl
c3VsdHM7CisgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwcmVzc2lvbkxpc3QmKT4g
Y29tbWl0UmVzdWx0czsKICAgICB9OwogCi0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbElu
Zm9ybWF0aW9uRm9yKGNvbnN0IFNpZ25hdHVyZSYsIENhbGxSb2xlID0gQ2FsbFJvbGU6OkNhbGxl
cik7CisgICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNv
bnN0IFNpZ25hdHVyZSYpOworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IGNhbGxJbmZv
cm1hdGlvbkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmKTsKIAotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCh1aW50MzJfdCBpbmRleCkKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yV2FzbUxvY2FsKHVpbnQzMl90IGluZGV4KQogICAgIHsK
ICAgICAgICAgaWYgKGluZGV4IDwgbV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzKQogICAgICAg
ICAgICAgcmV0dXJuIG1fbm9ybWFsaXplZEFyZ3VtZW50c1tpbmRleF07CkBAIC0yMjcsMjcgKzI1
MSw4MiBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBhdXRvJiBjYWxsaW5nQ29udmVudGlvbiA9
IHdhc21DYWxsaW5nQ29udmVudGlvbigpOwogICAgICAgICBjb25zdCB1aW50MzJfdCBncHJDb3Vu
dCA9IGNhbGxpbmdDb252ZW50aW9uLmdwckFyZ3Muc2l6ZSgpOwogICAgICAgICBjb25zdCB1aW50
MzJfdCBmcHJDb3VudCA9IGNhbGxpbmdDb252ZW50aW9uLmZwckFyZ3Muc2l6ZSgpOwotICAgICAg
ICByZXR1cm4gOjpKU0M6OnZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbV9jb2RlQmxv
Y2stPm1fbnVtQXJndW1lbnRzICsgZ3ByQ291bnQgKyBmcHJDb3VudCArIG51bWJlck9mTExJbnRD
YWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGluZGV4IC0gbV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzICsgZ3ByQ291bnQgKyBmcHJD
b3VudCArIG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzKTsKICAgICB9CiAKLSAgICBF
eHByZXNzaW9uTGlzdCB0bXBzRm9yU2lnbmF0dXJlKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkK
KyAgICBFeHByZXNzaW9uVHlwZSBqc051bGxDb25zdGFudCgpCiAgICAgewotICAgICAgICBFeHBy
ZXNzaW9uTGlzdCByZXN1bHQoc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKQotICAg
ICAgICAgICAgcmVzdWx0W2ldID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9qc051bGxDb25zdGFudC5pc1ZhbGlkKCkpKSB7
CisgICAgICAgICAgICBtX2pzTnVsbENvbnN0YW50ID0gVmlydHVhbFJlZ2lzdGVyKEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb2RlQmxvY2stPm1fY29uc3RhbnRzLnNpemUoKSk7Cisg
ICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudHMuYXBwZW5kKEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBHZW5l
cmF0ZWRXYXNtQnl0ZWNvZGVzKCkpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2Nv
bnN0YW50VHlwZXMuYXBwZW5kKFR5cGU6OkFueXJlZik7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG1fanNOdWxsQ29uc3RhbnQ7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvblR5cGUganNOdWxs
Q29uc3RhbnQoKQorICAgIEV4cHJlc3Npb25UeXBlIHplcm9Db25zdGFudCgpCiAgICAgewotICAg
ICAgICBpZiAoIW1fanNOdWxsQ29uc3RhbnQpCi0gICAgICAgICAgICBtX2pzTnVsbENvbnN0YW50
ID0gYWRkQ29uc3RhbnQoVHlwZTo6QW55cmVmLCBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKTsK
LSAgICAgICAgcmV0dXJuIG1fanNOdWxsQ29uc3RhbnQ7CisgICAgICAgIGlmIChVTkxJS0VMWSgh
bV96ZXJvQ29uc3RhbnQuaXNWYWxpZCgpKSkgeworICAgICAgICAgICAgbV96ZXJvQ29uc3RhbnQg
PSBWaXJ0dWFsUmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvZGVCbG9j
ay0+bV9jb25zdGFudHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0
YW50cy5hcHBlbmQoMCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEdl
bmVyYXRlZFdhc21CeXRlY29kZXMoKSkpCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1f
Y29uc3RhbnRUeXBlcy5hcHBlbmQoVHlwZTo6STMyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbV96ZXJvQ29uc3RhbnQ7CisgICAgfQorCisgICAgdm9pZCBnZXREcm9wS2VlcENvdW50KGNv
bnN0IENvbnRyb2xUeXBlJiB0YXJnZXQsIHVuc2lnbmVkJiBzdGFydE9mZnNldCwgdW5zaWduZWQm
IGRyb3AsIHVuc2lnbmVkJiBrZWVwKQorICAgIHsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSB0YXJn
ZXQuc3RhY2tTaXplKCkgKyAxOworICAgICAgICBrZWVwID0gdGFyZ2V0LnRhcmdldEFyaXR5KCk7
CisgICAgICAgIGRyb3AgPSBtX3N0YWNrU2l6ZSAtIHRhcmdldC5zdGFja1NpemUoKSAtIHRhcmdl
dC50YXJnZXRBcml0eSgpOworICAgIH0KKworICAgIHZvaWQgZHJvcEtlZXAoU3RhY2smIHZhbHVl
cywgY29uc3QgQ29udHJvbFR5cGUmIHRhcmdldCwgYm9vbCBkcm9wVmFsdWVzKQorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIGtlZXA7CisgICAg
ICAgIHVuc2lnbmVkIGRyb3A7CisKKyAgICAgICAgZ2V0RHJvcEtlZXBDb3VudCh0YXJnZXQsIHN0
YXJ0T2Zmc2V0LCBkcm9wLCBrZWVwKTsKKworICAgICAgICBpZiAoZHJvcFZhbHVlcykKKyAgICAg
ICAgICAgIHZhbHVlcy5zaHJpbmsoa2VlcCk7CisKKyAgICAgICAgaWYgKCFkcm9wKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChrZWVwKQorICAgICAgICAgICAgV2FzbURyb3BL
ZWVwOjplbWl0KHRoaXMsIHN0YXJ0T2Zmc2V0LCBkcm9wLCBrZWVwKTsKKyAgICB9CisKKyAgICB2
b2lkIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKFN0YWNrJiBleHByZXNzaW9uU3RhY2sp
CisgICAgeworICAgICAgICBpZiAoZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBmb3IgKGludCBpID0gZXhwcmVzc2lvblN0YWNrLnNpemUo
KTsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgYXV0byBleHByZXNzaW9uID0gZXhwcmVzc2lv
blN0YWNrW2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpXTsKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBzbG90ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9zdGFja1NpemUgLSBpKTsK
KyAgICAgICAgICAgIGlmIChleHByZXNzaW9uICE9IHNsb3QpIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoZXhwcmVzc2lvbi5pc0NvbnN0YW50KCkgfHwgZXhwcmVzc2lvbi5pc0FyZ3VtZW50KCkg
fHwgZXhwcmVzc2lvbi50b0xvY2FsKCkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICAg
ICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIHNsb3QsIGV4cHJlc3Npb24pOworICAgICAg
ICAgICAgICAgIGV4cHJlc3Npb25TdGFja1tleHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaV0gPSBz
bG90OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgc3RydWN0IFN3aXRj
aEVudHJ5IHsKICAgICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQ7Ci0gICAg
ICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQqIGp1bXBUYXJnZXQ7CisgICAgICAgIGludCog
anVtcFRhcmdldDsKKyAgICB9OworCisgICAgc3RydWN0IENvbnN0YW50TWFwSGFzaFRyYWl0cyA6
IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8RW5jb2RlZEpTVmFsdWU+IHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICAgICAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIGVtcHR5VmFsdWUoKSB7IHJldHVybiAwOyB9CisgICAgICAgIHN0YXRp
YyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkgeyBzbG90
ID0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0Rl
bGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKTsgfQogICAgIH07CiAKICAgICBGdW5jdGlvblBhcnNlcjxMTElu
dEdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwpAQCAtMjU2LDggKzMzNSwxMyBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IG1fbm9ybWFsaXplZEFyZ3VtZW50
czsKICAgICBIYXNoTWFwPExhYmVsKiwgVmVjdG9yPFN3aXRjaEVudHJ5Pj4gbV9zd2l0Y2hlczsK
ICAgICBFeHByZXNzaW9uVHlwZSBtX2pzTnVsbENvbnN0YW50OworICAgIEV4cHJlc3Npb25UeXBl
IG1femVyb0NvbnN0YW50OwogICAgIEV4cHJlc3Npb25MaXN0IG1fdW5pdGlhbGl6ZWRMb2NhbHM7
Ci0gICAgU3RkVW5vcmRlcmVkTWFwPHVpbnQ2NF90LCBWaXJ0dWFsUmVnaXN0ZXI+IG1fY29uc3Rh
bnRNYXA7CisgICAgSGFzaE1hcDxFbmNvZGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyLCBXVEY6
OkludEhhc2g8RW5jb2RlZEpTVmFsdWU+LCBDb25zdGFudE1hcEhhc2hUcmFpdHM+IG1fY29uc3Rh
bnRNYXA7CisgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4gbV9yZXN1bHRzOworICAgIHVu
c2lnbmVkIG1fc3RhY2tTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbWF4U3RhY2tTaXplIHsg
MCB9OworICAgIHVuc2lnbmVkIG1fdG9wTGV2ZWxTdGFja1NpemU7CiB9OwogCiBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGls
ZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxl
bmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dX
YXNtRXhjZXB0aW9uKQpAQCAtMjcwLDEwICszNTQsMTQgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShj
b24KIH0KIAogTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaHJvd1dhc21FeGNlcHRpb24g
dGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmKQotICAgIDogQnl0ZWNvZGVHZW5l
cmF0b3JCYXNlKG1ha2VVbmlxdWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1bmN0aW9uSW5kZXgpLCBu
dW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycykKKyAgICA6IEJ5dGVjb2RlR2VuZXJhdG9y
QmFzZShtYWtlVW5pcXVlPEZ1bmN0aW9uQ29kZUJsb2NrPihmdW5jdGlvbkluZGV4KSwgMCkKICAg
ICAsIG1faW5mbyhpbmZvKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiB7
CisgICAgbV9jb2RlQmxvY2stPm1fbnVtVmFycyA9IG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVn
aXN0ZXJzOworICAgIG1fc3RhY2tTaXplID0gbnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3Rl
cnM7CisgICAgbV9tYXhTdGFja1NpemUgPSBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVy
czsKKwogICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgICAgIFRodW5rczo6c2luZ2xl
dG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7CiAKQEAgLTI4
Myw2ICszNzEsNyBAQCBMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSQogc3RkOjp1bmlxdWVfcHRyPEZ1
bmN0aW9uQ29kZUJsb2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxpemUoKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKG1fY29kZUJsb2NrKTsKKyAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVMb2Nh
bHMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwg
bV9tYXhTdGFja1NpemUpOwogICAgIG1fY29kZUJsb2NrLT5zZXRJbnN0cnVjdGlvbnMobV93cml0
ZXIuZmluYWxpemUoKSk7CiAgICAgcmV0dXJuIFdURk1vdmUobV9jb2RlQmxvY2spOwogfQpAQCAt
MjkwLDggKzM3OSwzMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IExMSW50
R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiAvLyBHZW5lcmF0ZWQgZnJvbSB3YXNtLmpzb24KICNpbmNs
dWRlICJXYXNtTExJbnRHZW5lcmF0b3JJbmxpbmVzLmgiCiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6
OmNhbGxJbmZvcm1hdGlvbkZvcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ2FsbFJvbGUg
cm9sZSkgLT4gTExJbnRDYWxsSW5mb3JtYXRpb24KK2F1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJ
bmZvcm1hdGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJbnRD
YWxsSW5mb3JtYXRpb24KIHsKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHNldHVwcyB0aGUgc3Rh
Y2sgbGF5b3V0IGZvciBjYWxscy4gVGhlIGRlc2lyZWQgc3RhY2sgbGF5b3V0IGlzOgorCisgICAg
Ly8gRlBSbgorICAgIC8vIC4uLgorICAgIC8vIEZQUjEKKyAgICAvLyBGUFIwCisgICAgLy8gLS0t
CisgICAgLy8gR1BSbgorICAgIC8vIC4uLgorICAgIC8vIEdQUjEKKyAgICAvLyBHUFIwCisgICAg
Ly8gLS0tLQorICAgIC8vIHN0YWNrTgorICAgIC8vIC4uLgorICAgIC8vIHN0YWNrMQorICAgIC8v
IHN0YWNrMAorICAgIC8vIC0tLQorICAgIC8vIGNhbGwgZnJhbWUgaGVhZGVyCisKKyAgICAvLyBX
ZSBuZWVkIHRvIGFsbG9jYXRlIGF0IGxlYXN0IHNwYWNlIGZvciBhbGwgR1BScyBhbmQgRlBScy4K
KyAgICAvLyBSZXR1cm4gdmFsdWVzIHVzZSB0aGUgc2FtZSBhbGxvY2F0aW9uIGxheW91dC4KKwor
ICAgIGNvbnN0IGF1dG8gaW5pdGlhbFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOworCiAgICAgY29u
c3QgYXV0byYgY2FsbGluZ0NvbnZlbnRpb24gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKICAg
ICBjb25zdCB1aW50MzJfdCBncHJDb3VudCA9IGNhbGxpbmdDb252ZW50aW9uLmdwckFyZ3Muc2l6
ZSgpOwogICAgIGNvbnN0IHVpbnQzMl90IGZwckNvdW50ID0gY2FsbGluZ0NvbnZlbnRpb24uZnBy
QXJncy5zaXplKCk7CkBAIC0yOTksMTQgKzQxMiw5IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNh
bGxJbmZvcm1hdGlvbkZvcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ2FsbFJvbGUgcm9s
CiAgICAgdWludDMyX3Qgc3RhY2tDb3VudCA9IDA7CiAgICAgdWludDMyX3QgZ3BySW5kZXggPSAw
OwogICAgIHVpbnQzMl90IGZwckluZGV4ID0gMDsKLQotICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0
ZXJJRD4sIDE2PiByZWdpc3RlcnM7Ci0KLSAgICBFeHByZXNzaW9uTGlzdCBhcmd1bWVudHMoc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7Ci0gICAgRXhwcmVzc2lvbkxpc3QgcmVzdWx0cyhzaWdu
YXR1cmUucmV0dXJuQ291bnQoKSk7CisgICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CiAKICAg
ICBhdXRvIGFsbG9jYXRlU3RhY2tSZWdpc3RlciA9IFsmXShUeXBlIHR5cGUpIHsKLSAgICAgICAg
QVNTRVJUKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcik7CiAgICAgICAgIHN3aXRjaCAodHlwZSkg
ewogICAgICAgICBjYXNlIFR5cGU6OkkzMjoKICAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CkBAIC0z
MTQsMTkgKzQyMiwxNSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3Io
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENhbGxSb2xlIHJvbAogICAgICAgICBjYXNlIFR5
cGU6OkZ1bmNyZWY6CiAgICAgICAgICAgICBpZiAoZ3BySW5kZXggPCBncHJDb3VudCkKICAgICAg
ICAgICAgICAgICArK2dwckluZGV4OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgcmVnaXN0ZXJzLmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CisgICAgICAgICAgICBlbHNlIGlm
IChzdGFja0luZGV4KysgPj0gc3RhY2tDb3VudCkKICAgICAgICAgICAgICAgICArK3N0YWNrQ291
bnQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBl
OjpGMzI6CiAgICAgICAgIGNhc2UgVHlwZTo6RjY0OgogICAgICAgICAgICAgaWYgKGZwckluZGV4
IDwgZnByQ291bnQpCiAgICAgICAgICAgICAgICAgKytmcHJJbmRleDsKLSAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVycy5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoc3RhY2tJbmRleCsrID49IHN0YWNrQ291bnQpCiAgICAgICAg
ICAgICAgICAgKytzdGFja0NvdW50OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgVm9pZDoKICAgICAgICAgY2FzZSBGdW5jOgpAQCAtMzM1LDkyICs0Mzks
MTQ1IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvcihjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwgQ2FsbFJvbGUgcm9sCiAgICAgfTsKIAogCi0gICAgaWYgKHJvbGUg
PT0gQ2FsbFJvbGU6OkNhbGxlZSkgewotICAgICAgICAvLyBSZXVzZSB0aGUgc2xvdHMgd2UgYWxs
b2NhdGVkIHRvIHNwaWxsIHRoZSByZWdpc3RlcnMgaW4gYWRkQXJndW1lbnRzCi0gICAgICAgIGZv
ciAodWludDMyX3QgaSA9IGdwckNvdW50ICsgZnByQ291bnQ7IGktLTspCi0gICAgICAgICAgICBy
ZWdpc3RlcnMuYXBwZW5kKG5ldyBSZWdpc3RlcklEKDo6SlNDOjp2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycyArIGkpKSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGdwckNvdW50OyBpKyspCi0gICAg
ICAgICAgICByZWdpc3RlcnMuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IGZwckNvdW50OyBpKyspCi0gICAgICAgICAgICByZWdpc3RlcnMu
YXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLQotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKQotICAgICAgICAgICAgYWxsb2NhdGVT
dGFja1JlZ2lzdGVyKHNpZ25hdHVyZS5hcmd1bWVudChpKSk7Ci0gICAgICAgIGdwckluZGV4ID0g
MDsKLSAgICAgICAgZnBySW5kZXggPSAwOwotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7IGkrKykKLSAgICAgICAgICAgIGFsbG9jYXRlU3Rh
Y2tSZWdpc3RlcihzaWduYXR1cmUucmV0dXJuVHlwZShpKSk7CisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykKKyAgICAgICAgYWxsb2Nh
dGVTdGFja1JlZ2lzdGVyKHNpZ25hdHVyZS5hcmd1bWVudChpKSk7CisKKyAgICBncHJJbmRleCA9
IDA7CisgICAgZnBySW5kZXggPSAwOworICAgIHN0YWNrSW5kZXggPSAwOworICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgaSsrKQorICAgICAgICBh
bGxvY2F0ZVN0YWNrUmVnaXN0ZXIoc2lnbmF0dXJlLnJldHVyblR5cGUoaSkpOworCisgICAgLy8g
RklYTUU6IHdlIGFyZSBhbGxvY2F0aW5nIHRoZSBleHRyYSBzcGFjZSBmb3IgdGhlIGFyZ3VtZW50
L3JldHVybiBjb3VudCBpbiBvcmRlciB0byBhdm9pZCBpbnRlcmZlcmVuY2UsIGJ1dCB3ZSBjb3Vs
ZCBkbyBiZXR0ZXIKKyAgICAvLyBOT1RFOiBXZSBpbmNyZWFzZSBhcmcgY291bnQgYnkgMSBmb3Ig
dGhlIGNhc2Ugb2YgaW5kaXJlY3QgY2FsbHMKKyAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1heChz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpICsgMSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkpICsg
Z3ByQ291bnQgKyBmcHJDb3VudCArIHN0YWNrQ291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVyczsKKyAgICBpZiAobV9zdGFja1NpemUgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVy
cygpKQorICAgICAgICArK21fc3RhY2tTaXplOworICAgIGlmIChtX21heFN0YWNrU2l6ZSA8IG1f
c3RhY2tTaXplKQorICAgICAgICBtX21heFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOworCisKKyAg
ICBFeHByZXNzaW9uTGlzdCBhcmd1bWVudHMoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7Cisg
ICAgRXhwcmVzc2lvbkxpc3QgdGVtcG9yYXJ5UmVzdWx0cyhzaWduYXR1cmUucmV0dXJuQ291bnQo
KSk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IG1fc3RhY2tTaXplOworICAg
IGNvbnN0IHVuc2lnbmVkIGJhc2UgPSBzdGFja09mZnNldCAtIENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzOworCisgICAgY29uc3QgdWludDMyX3QgZ3ByTGltaXQgPSBiYXNlIC0gc3Rh
Y2tDb3VudCAtIGdwckNvdW50OworICAgIGNvbnN0IHVpbnQzMl90IGZwckxpbWl0ID0gZ3ByTGlt
aXQgLSBmcHJDb3VudDsKKworICAgIHN0YWNrSW5kZXggPSBiYXNlOworICAgIGdwckluZGV4ID0g
YmFzZSAtIHN0YWNrQ291bnQ7CisgICAgZnBySW5kZXggPSBncHJJbmRleCAtIGdwckNvdW50Owor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBp
KyspIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAg
Y2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICBjYXNlIFR5
cGU6OkFueXJlZjoKKyAgICAgICAgY2FzZSBUeXBlOjpGdW5jcmVmOgorICAgICAgICAgICAgaWYg
KGdwckluZGV4ID4gZ3ByTGltaXQpCisgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1ncHJJbmRleCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1zdGFj
a0luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAg
ICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBpZiAoZnBySW5kZXggPiBmcHJMaW1p
dCkKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bCgtLWZwckluZGV4KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLXN0YWNrSW5kZXgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgY2FzZSBGdW5jOgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogICAgIH0KIAot
ICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0OwotICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxs
ZWUpCi0gICAgICAgIHN0YWNrT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1yZWdpc3Rl
cnMubGFzdCgpLT5pbmRleCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gQWxpZ24gdGhlIHN0
YWNrCi0gICAgICAgIGF1dG8gY29tcHV0ZVN0YWNrT2Zmc2V0ID0gWyZdIHsKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXJlZ2lzdGVycy5sYXN0KCktPmluZGV4KCkp
ICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIH07Ci0gICAgICAg
IHdoaWxlIChjb21wdXRlU3RhY2tPZmZzZXQoKSAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkp
Ci0gICAgICAgICAgICByZWdpc3RlcnMuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAg
c3RhY2tPZmZzZXQgPSBjb21wdXRlU3RhY2tPZmZzZXQoKTsKKyAgICBzdGFja0luZGV4ID0gYmFz
ZTsKKyAgICBncHJJbmRleCA9IGJhc2UgLSBzdGFja0NvdW50OworICAgIGZwckluZGV4ID0gZ3By
SW5kZXggLSBncHJDb3VudDsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJl
LnJldHVybkNvdW50KCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5U
eXBlKGkpKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2
NDoKKyAgICAgICAgY2FzZSBUeXBlOjpBbnlyZWY6CisgICAgICAgIGNhc2UgVHlwZTo6RnVuY3Jl
ZjoKKyAgICAgICAgICAgIGlmIChncHJJbmRleCA+IGdwckxpbWl0KQorICAgICAgICAgICAgICAg
IHRlbXBvcmFyeVJlc3VsdHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLWdwckluZGV4
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0ZW1wb3JhcnlSZXN1bHRzW2ld
ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1zdGFja0luZGV4KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6Cisg
ICAgICAgICAgICBpZiAoZnBySW5kZXggPiBmcHJMaW1pdCkKKyAgICAgICAgICAgICAgICB0ZW1w
b3JhcnlSZXN1bHRzW2ldID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1mcHJJbmRleCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVzdWx0c1tpXSA9IHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKC0tc3RhY2tJbmRleCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJU
KHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlciB8fCAhc3RhY2tDb3VudCk7Ci0gICAgY29uc3QgdWlu
dDMyX3QgbWF4R1BSSW5kZXggPSBzdGFja0NvdW50ICsgZ3ByQ291bnQ7Ci0gICAgY29uc3QgdWlu
dDMyX3QgbWF4RlBSSW5kZXggPSBtYXhHUFJJbmRleCArIGZwckNvdW50OworICAgIG1fc3RhY2tT
aXplID0gaW5pdGlhbFN0YWNrU2l6ZTsKKworICAgIGF1dG8gY29tbWl0UmVzdWx0cyA9IFt0aGlz
LCB0ZW1wb3JhcnlSZXN1bHRzID0gV1RGTW92ZSh0ZW1wb3JhcnlSZXN1bHRzKV0oRXhwcmVzc2lv
bkxpc3QmIHJlc3VsdHMpIHsKKyAgICAgICAgZm9yIChhdXRvIHRlbXBvcmFyeVJlc3VsdCA6IHRl
bXBvcmFyeVJlc3VsdHMpIHsKKyAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IHB1
c2goKTsKKyAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgcmVzdWx0LCB0ZW1wb3JhcnlS
ZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICByZXR1cm4gTExJbnRDYWxsSW5mb3JtYXRpb24geyBzdGFja09mZnNldCwg
c3RhY2tDb3VudCwgV1RGTW92ZShhcmd1bWVudHMpLCBXVEZNb3ZlKGNvbW1pdFJlc3VsdHMpIH07
Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4KK3sK
KyAgICBpZiAobV9yZXN1bHRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0czsKKwor
ICAgIG1fcmVzdWx0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpZ25hdHVyZS5yZXR1cm5Db3Vu
dCgpKTsKKworICAgIGNvbnN0IGF1dG8mIGNhbGxpbmdDb252ZW50aW9uID0gd2FzbUNhbGxpbmdD
b252ZW50aW9uKCk7CisgICAgY29uc3QgdWludDMyX3QgZ3ByQ291bnQgPSBjYWxsaW5nQ29udmVu
dGlvbi5ncHJBcmdzLnNpemUoKTsKKyAgICBjb25zdCB1aW50MzJfdCBmcHJDb3VudCA9IGNhbGxp
bmdDb252ZW50aW9uLmZwckFyZ3Muc2l6ZSgpOworCisgICAgdWludDMyX3QgZ3BySW5kZXggPSAw
OworICAgIHVpbnQzMl90IGZwckluZGV4ID0gZ3ByQ291bnQ7CiAgICAgdWludDMyX3Qgc3RhY2tJ
bmRleCA9IDA7Ci0gICAgYXV0byBhcHBlbmRGb3JUeXBlID0gWyZdKFR5cGUgdHlwZSwgdW5zaWdu
ZWQgaW5kZXgsIGF1dG8mIHZlY3RvcikgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
b25zdCB1aW50MzJfdCBtYXhHUFJJbmRleCA9IGdwckNvdW50OworICAgIGNvbnN0IHVpbnQzMl90
IG1heEZQUkluZGV4ID0gbWF4R1BSSW5kZXggKyBmcHJDb3VudDsKKworICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3
aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoaSkpIHsKICAgICAgICAgY2FzZSBUeXBlOjpJMzI6
CiAgICAgICAgIGNhc2UgVHlwZTo6STY0OgogICAgICAgICBjYXNlIFR5cGU6OkFueXJlZjoKICAg
ICAgICAgY2FzZSBUeXBlOjpGdW5jcmVmOgogICAgICAgICAgICAgaWYgKGdwckluZGV4IDwgbWF4
R1BSSW5kZXgpCi0gICAgICAgICAgICAgICAgdmVjdG9yW2luZGV4XSA9IHJlZ2lzdGVyc1tyZWdp
c3RlcnMuc2l6ZSgpIC0gZ3BySW5kZXgrKyAtIDFdOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcikKLSAgICAgICAgICAgICAg
ICAgICAgdmVjdG9yW2luZGV4XSA9IHJlZ2lzdGVyc1tyZWdpc3RlcnMuc2l6ZSgpIC0gc3RhY2tJ
bmRleCsrIC0gMV07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB2
ZWN0b3JbaW5kZXhdID0gbmV3IFJlZ2lzdGVySUQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
c3RhY2tJbmRleCsrKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9yZXN1bHRz
LmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJl
Z2lzdGVycyArIGdwckluZGV4KyspKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX3Jlc3VsdHMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KHN0YWNrSW5kZXgr
KykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZTo6RjMyOgogICAgICAg
ICBjYXNlIFR5cGU6OkY2NDoKICAgICAgICAgICAgIGlmIChmcHJJbmRleCA8IG1heEZQUkluZGV4
KQotICAgICAgICAgICAgICAgIHZlY3RvcltpbmRleF0gPSByZWdpc3RlcnNbcmVnaXN0ZXJzLnNp
emUoKSAtIGZwckluZGV4KysgLSAxXTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxsZXIpCi0gICAgICAgICAgICAgICAgICAgIHZl
Y3RvcltpbmRleF0gPSByZWdpc3RlcnNbcmVnaXN0ZXJzLnNpemUoKSAtIHN0YWNrSW5kZXgrKyAt
IDFdOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2lu
ZGV4XSA9IG5ldyBSZWdpc3RlcklEKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KHN0YWNrSW5k
ZXgrKykpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQo
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnMg
KyBmcHJJbmRleCsrKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9yZXN1
bHRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChzdGFja0luZGV4KyspKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZvaWQ6CiAgICAgICAgIGNhc2UgRnVuYzoK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KLSAg
ICB9OwotCi0gICAgZ3BySW5kZXggPSBzdGFja0NvdW50OwotICAgIGZwckluZGV4ID0gbWF4R1BS
SW5kZXg7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCk7IGkrKykKLSAgICAgICAgYXBwZW5kRm9yVHlwZShzaWduYXR1cmUuYXJndW1lbnQoaSks
IGksIGFyZ3VtZW50cyk7Ci0gICAgZ3BySW5kZXggPSBzdGFja0NvdW50OwotICAgIGZwckluZGV4
ID0gbWF4R1BSSW5kZXg7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5y
ZXR1cm5Db3VudCgpOyBpKyspCi0gICAgICAgIGFwcGVuZEZvclR5cGUoc2lnbmF0dXJlLnJldHVy
blR5cGUoaSksIGksIHJlc3VsdHMpOwotCi0gICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxl
cikgewotICAgICAgICAvLyBSZXNlcnZlIHNwYWNlIGZvciBjYWxsIGZyYW1lLgotICAgICAgICBW
ZWN0b3I8UmVmUHRyPFJlZ2lzdGVySUQ+LCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVy
cyArIDIsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBjYWxsRnJhbWU7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7ICsraSkKLSAgICAg
ICAgICAgIGNhbGxGcmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwogICAgIH0KIAotICAgIHJl
dHVybiBMTEludENhbGxJbmZvcm1hdGlvbiB7IHN0YWNrT2Zmc2V0LCBzdGFja0NvdW50LCBXVEZN
b3ZlKGFyZ3VtZW50cyksIFdURk1vdmUocmVzdWx0cykgfTsKKyAgICByZXR1cm4gbV9yZXN1bHRz
OwogfQogCisKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIG1fY29kZUJsb2NrLT5tX251
bUFyZ3VtZW50cyA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CkBAIC00MzUsOSArNTkyLDkg
QEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgdWludDMyX3QgZnBySW5kZXggPSBtYXhHUFJJ
bmRleDsKICAgICB1aW50MzJfdCBzdGFja0luZGV4ID0gMDsKIAotICAgIFZlY3RvcjxSZWZQdHI8
UmVnaXN0ZXJJRD4+IHJlZ2lzdGVyQXJndW1lbnRzKGdwckNvdW50ICsgZnByQ291bnQpOworICAg
IFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IHJlZ2lzdGVyQXJndW1lbnRzKGdwckNvdW50ICsgZnBy
Q291bnQpOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBncHJDb3VudCArIGZwckNvdW50
OyBpKyspCi0gICAgICAgIHJlZ2lzdGVyQXJndW1lbnRzW2ldID0gYWRkVmFyKCk7CisgICAgICAg
IHJlZ2lzdGVyQXJndW1lbnRzW2ldID0gcHVzaCgpOwogCiAgICAgY29uc3QgYXV0byBhZGRBcmd1
bWVudCA9IFsmXSh1aW50MzJfdCBpbmRleCwgdWludDMyX3QmIGNvdW50LCB1aW50MzJfdCBtYXgp
IHsKICAgICAgICAgaWYgKGNvdW50IDwgbWF4KQpAQCAtNDY0LDEzICs2MjEsMTYgQEAgYXV0byBM
TEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2NvZGVCbG9jay0+bV9u
dW1WYXJzICs9IGdwckNvdW50ICsgZnByQ291bnQ7CisKICAgICByZXR1cm4geyB9OwogfQogCiBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgbV9jb2RlQmxvY2stPm1fbnVtVmFycyArPSBjb3VudDsK
ICAgICB3aGlsZSAoY291bnQtLSkgewotICAgICAgICBhdXRvIGxvY2FsID0gYWRkVmFyKCk7Cisg
ICAgICAgIGF1dG8gbG9jYWwgPSBwdXNoKCk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAg
ICAgICBjYXNlIFR5cGU6OkFueXJlZjoKICAgICAgICAgY2FzZSBUeXBlOjpGdW5jcmVmOgpAQCAt
NDg1LDQ1ICs2NDUsNjkgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBl
LCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogCiB2b2lkIExMSW50R2VuZXJhdG9y
OjpkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkKIHsKKyAgICBpZiAobV91bml0aWFsaXplZExvY2Fs
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gbnVsbCA9IGpzTnVsbENv
bnN0YW50KCk7CiAgICAgZm9yIChhdXRvIGxvY2FsIDogbV91bml0aWFsaXplZExvY2FscykKICAg
ICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBsb2NhbCwgbnVsbCk7CiAgICAgbV91bml0aWFsaXpl
ZExvY2Fscy5jbGVhcigpOwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDb25zdGFudChU
eXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKSAtPiBFeHByZXNzaW9uVHlwZQorYXV0byBMTEludEdl
bmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKSAtPiBFeHByZXNz
aW9uVHlwZQogewotICAgIFZpcnR1YWxSZWdpc3RlciBzb3VyY2UoRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXggKyBtX2NvZGVCbG9jay0+bV9jb25zdGFudHMuc2l6ZSgpKTsKLSAgICBhdXRvIHJl
c3VsdCA9IG1fY29uc3RhbnRNYXAuZW1wbGFjZSh2YWx1ZSwgc291cmNlKTsKLSAgICBpZiAocmVz
dWx0LnNlY29uZCkgeworICAgIGF1dG8gY29uc3RhbnQgPSBbJl0geworICAgICAgICBpZiAoIXZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIHplcm9Db25zdGFudCgpOworCisgICAgICAgIGlmICh2
YWx1ZSA9PSBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKQorICAgICAgICAgICAgcmV0dXJuIGpz
TnVsbENvbnN0YW50KCk7CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNvdXJjZShGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5zaXplKCkpOwor
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1fY29uc3RhbnRNYXAuYWRkKHZhbHVlLCBzb3VyY2UpOwor
ICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5hcHBl
bmQodmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZFdh
c21CeXRlY29kZXMoKSkpCiAgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudFR5cGVz
LmFwcGVuZCh0eXBlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291cmNlID0gcmVzdWx0LmZpcnN0
LT5zZWNvbmQ7Ci0gICAgYXV0byB0YXJnZXQgPSBuZXdUZW1wb3JhcnkoKTsKLSAgICBXYXNtTW92
OjplbWl0KHRoaXMsIHRhcmdldCwgc291cmNlKTsKLSAgICByZXR1cm4gdGFyZ2V0OworICAgICAg
ICByZXR1cm4gc291cmNlOworICAgIH07CisgICAgLy8gbGVhdmUgYSBob2xlIGlmIHdlIG5lZWQg
dG8gbWF0ZXJpYWxpemUgdGhlIGNvbnN0YW50CisgICAgcHVzaCgpOworICAgIHJldHVybiBjb25z
dGFudCgpOwogfQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdW5uZWNlc3NhcnkgbW92ZXMKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNjU3Ci0gICAgcmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7
Ci0gICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCByZXN1bHQsIHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGluZGV4KSk7CisgICAgLy8gbGVhdmUgYSBob2xlIGlmIHdlIG5lZWQgdG8gbWF0ZXJpYWxpemUg
dGhlIGxvY2FsCisgICAgcHVzaCgpOworICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZvcldh
c21Mb2NhbChpbmRleCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBMTEludEdlbmVyYXRv
cjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7Ci0gICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpbmRleCksIHZhbHVlKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0ID0gdmlydHVh
bFJlZ2lzdGVyRm9yV2FzbUxvY2FsKGluZGV4KTsKKworICAgIC8vIElmIHRoaXMgbG9jYWwgaXMg
Y3VycmVudGx5IG9uIHRoZSBzdGFjayB3ZSBuZWVkIHRvIG1hdGVyaWFsaXplIGl0LCBvdGhlcndp
c2UgaXQnbGwgc2VlIHRoZSBuZXcgdmFsdWUgaW5zdGVhZCBvZiB0aGUgb2xkIG9uZQorICAgIFN0
YWNrJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+ZXhwcmVzc2lvblN0YWNrKCk7CisgICAg
Zm9yIChpbnQgaSA9IGV4cHJlc3Npb25TdGFjay5zaXplKCk7IGkgPiAwOyAtLWkpIHsKKyAgICAg
ICAgYXV0byBleHByZXNzaW9uID0gZXhwcmVzc2lvblN0YWNrW2V4cHJlc3Npb25TdGFjay5zaXpl
KCkgLSBpXTsKKyAgICAgICAgaWYgKGV4cHJlc3Npb24gPT0gdGFyZ2V0KSB7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fc3RhY2tT
aXplIC0gaSk7CisgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIHNsb3QsIGV4cHJlc3Np
b24pOworICAgICAgICAgICAgZXhwcmVzc2lvblN0YWNrW2V4cHJlc3Npb25TdGFjay5zaXplKCkg
LSBpXSA9IHNsb3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBXYXNtTW92OjplbWl0KHRoaXMs
IHRhcmdldCwgdmFsdWUpOworCiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBMTEludEdlbmVy
YXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgcmVz
dWx0ID0gcHVzaCgpOwogICAgIFdhc21HZXRHbG9iYWw6OmVtaXQodGhpcywgcmVzdWx0LCBpbmRl
eCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTU0MCwxMSArNzI0LDEzIEBAIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUp
IC0+IFBhcnRpYWxSCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBibG9jaywg
U3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
KyAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7Cisg
ICAgbWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMobmV3U3RhY2spOworCiAgICAgUmVmPExh
YmVsPiBib2R5ID0gbmV3RW1pdHRlZExhYmVsKCk7CiAgICAgUmVmPExhYmVsPiBjb250aW51YXRp
b24gPSBuZXdMYWJlbCgpOwogCi0gICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwg
ZW5jbG9zaW5nU3RhY2spOwotICAgIGJsb2NrID0gQ29udHJvbFR5cGU6Omxvb3Aoc2lnbmF0dXJl
LCBuZXdTdGFjaywgV1RGTW92ZShib2R5KSwgV1RGTW92ZShjb250aW51YXRpb24pKTsKKyAgICBi
bG9jayA9IENvbnRyb2xUeXBlOjpsb29wKHNpZ25hdHVyZSwgbV9zdGFja1NpemUsIFdURk1vdmUo
Ym9keSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CiAKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lz
dGVyPiBvc3JFbnRyeURhdGE7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fY29kZUJs
b2NrLT5tX251bUFyZ3VtZW50czsgaSsrKQpAQCAtNTU0LDExICs3NDAsMTEgQEAgYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNs
b3NpbmdTdGFjaywgQ28KICAgICBjb25zdCB1aW50MzJfdCBncHJDb3VudCA9IGNhbGxpbmdDb252
ZW50aW9uLmdwckFyZ3Muc2l6ZSgpOwogICAgIGNvbnN0IHVpbnQzMl90IGZwckNvdW50ID0gY2Fs
bGluZ0NvbnZlbnRpb24uZnByQXJncy5zaXplKCk7CiAgICAgZm9yIChpbnQzMl90IGkgPSBncHJD
b3VudCArIGZwckNvdW50ICsgbnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnM7IGkgPCBt
X2NvZGVCbG9jay0+bV9udW1WYXJzOyBpKyspCi0gICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQo
OjpKU0M6OnZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKKyAgICAgICAgb3NyRW50cnlEYXRh
LmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBj
b250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCku
c2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgewotICAgICAgICBFeHByZXNzaW9uTGlzdCYgZXhwcmVz
c2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBtX3Bh
cnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFj
azsKICAgICAgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKQotICAg
ICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChleHByZXNzaW9uLT52aXJ0dWFsUmVnaXN0ZXIo
KSk7CisgICAgICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24pOwogICAgIH0K
IAogICAgIFdhc21Mb29wSGludDo6ZW1pdCh0aGlzKTsKQEAgLTU3MCwxMyArNzU2LDE0IEBAIGF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFj
ayYgZW5jbG9zaW5nU3RhY2ssIENvCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRvcExldmVs
KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkgLT4gQ29udHJvbFR5cGUKIHsKLSAgICByZXR1cm4g
Q29udHJvbFR5cGU6OnRvcExldmVsKHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25hdHVyZShzaWduYXR1
cmUpLCBuZXdMYWJlbCgpKTsKKyAgICBtX3RvcExldmVsU3RhY2tTaXplID0gbV9zdGFja1NpemU7
CisgICAgcmV0dXJuIENvbnRyb2xUeXBlOjp0b3BMZXZlbChzaWduYXR1cmUsIG1fc3RhY2tTaXpl
LCBuZXdMYWJlbCgpKTsKIH0KIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQmxvY2soQmxvY2tT
aWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBu
ZXdCbG9jaywgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgbmV3U3Rh
Y2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOwotICAgIG5ld0Jsb2Nr
ID0gQ29udHJvbFR5cGU6OmJsb2NrKHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25hdHVyZShzaWduYXR1
cmUpLCBuZXdMYWJlbCgpKTsKKyAgICBuZXdCbG9jayA9IENvbnRyb2xUeXBlOjpibG9jayhzaWdu
YXR1cmUsIG1fc3RhY2tTaXplLCBuZXdMYWJlbCgpKTsKICAgICByZXR1cm4geyB9OwogfQogCkBA
IC01ODgsMTE0ICs3NzUsMTQ5IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTCiAgICAgV2FzbUpm
YWxzZTo6ZW1pdCh0aGlzLCBjb25kaXRpb24sIGFsdGVybmF0ZS0+YmluZCh0aGlzKSk7CiAKICAg
ICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7Ci0gICAg
cmVzdWx0ID0gQ29udHJvbFR5cGU6OmlmXyhzaWduYXR1cmUsIHRtcHNGb3JTaWduYXR1cmUoc2ln
bmF0dXJlKSwgV1RGTW92ZShhbHRlcm5hdGUpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbikpOworICAg
IHJlc3VsdCA9IENvbnRyb2xUeXBlOjppZl8oc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwgV1RGTW92
ZShhbHRlcm5hdGUpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbikpOwogICAgIHJldHVybiB7IH07CiB9
CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbFR5cGUmIGRhdGEsIGNvbnN0
IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJ
bnRHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbFR5cGUmIGRhdGEsIFN0YWNrJiBleHByZXNzaW9u
U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICAvLyBUT0RPOiBkb24ndCBlbWl0IGp1bXAg
Zm9yIGVtcHR5IGVsc2UKICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9s
SWY+KGRhdGEpKTsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhkYXRhLm1fcmVzdWx0cywgY3Vy
cmVudFN0YWNrKTsKKyAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNzaW9u
U3RhY2spOwogICAgIFdhc21KbXA6OmVtaXQodGhpcywgZGF0YS5tX2NvbnRpbnVhdGlvbi0+Ymlu
ZCh0aGlzKSk7CiAgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEpOwogfQogCiBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgZGF0
YSkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUo
KSArIGRhdGEubV9zaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKKwogICAgIENvbnRyb2xJZiYg
Y29udHJvbCA9IFdURjo6Z2V0PENvbnRyb2xJZj4oZGF0YSk7CiAgICAgZW1pdExhYmVsKGNvbnRy
b2wubV9hbHRlcm5hdGUuZ2V0KCkpOwotICAgIGRhdGEgPSBDb250cm9sVHlwZTo6YmxvY2soZGF0
YS5tX3NpZ25hdHVyZSwgV1RGTW92ZShkYXRhLm1fcmVzdWx0cyksIFdURk1vdmUoZGF0YS5tX2Nv
bnRpbnVhdGlvbikpOworICAgIGRhdGEgPSBDb250cm9sVHlwZTo6YmxvY2soZGF0YS5tX3NpZ25h
dHVyZSwgbV9zdGFja1NpemUsIFdURk1vdmUoZGF0YS5tX2NvbnRpbnVhdGlvbikpOwogICAgIHJl
dHVybiB7IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250
cm9sVHlwZSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xU
eXBlJiBkYXRhLCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAg
aWYgKCFkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSB7CiAgICAgICAgIFdhc21SZXRW
b2lkOjplbWl0KHRoaXMpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIExMSW50
Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3IoKmRhdGEubV9zaWduYXR1
cmUsIENhbGxSb2xlOjpDYWxsZWUpOwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGluZm8ucmVz
dWx0cywgcmV0dXJuVmFsdWVzKTsKKyAgICAvLyBubyBuZWVkIHRvIGRyb3Aga2VlcCBoZXJlLCBz
aW5jZSB3ZSBoYXZlIHRvIG1vdmUgYW55d2F5CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY2Fs
bEluZm9ybWF0aW9uRm9yQ2FsbGVlKCpkYXRhLm1fc2lnbmF0dXJlKSwgcmV0dXJuVmFsdWVzKTsK
ICAgICBXYXNtUmV0OjplbWl0KHRoaXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBM
TEludEdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiBkYXRhLCBFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRp
YWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sVHlwZSYgZGF0
YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZGF0YS5tX3Jlc3VsdHMsIHJl
dHVyblZhbHVlcyk7Ci0KICAgICBSZWZQdHI8TGFiZWw+IHRhcmdldCA9IGRhdGEudGFyZ2V0TGFi
ZWxGb3JCcmFuY2goKTsKLSAgICBpZiAoY29uZGl0aW9uKQotICAgICAgICBXYXNtSnRydWU6OmVt
aXQodGhpcywgY29uZGl0aW9uLCB0YXJnZXQtPmJpbmQodGhpcykpOwotICAgIGVsc2UKLSAgICAg
ICAgV2FzbUptcDo6ZW1pdCh0aGlzLCB0YXJnZXQtPmJpbmQodGhpcykpOworICAgIFJlZlB0cjxM
YWJlbD4gc2tpcCA9IG51bGxwdHI7CisKKyAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2Fs
cyhyZXR1cm5WYWx1ZXMpOworCisgICAgaWYgKGNvbmRpdGlvbi5pc1ZhbGlkKCkpIHsKKyAgICAg
ICAgc2tpcCA9IG5ld0xhYmVsKCk7CisgICAgICAgIFdhc21KZmFsc2U6OmVtaXQodGhpcywgY29u
ZGl0aW9uLCBza2lwLT5iaW5kKHRoaXMpKTsKKyAgICB9CisKKyAgICBkcm9wS2VlcChyZXR1cm5W
YWx1ZXMsIGRhdGEsICFza2lwKTsKKyAgICBXYXNtSm1wOjplbWl0KHRoaXMsIHRhcmdldC0+Ymlu
ZCh0aGlzKSk7CisKKyAgICBpZiAoc2tpcCkKKyAgICAgICAgZW1pdExhYmVsKCpza2lwKTsKIAog
ICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFN3aXRjaChFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZSo+JiB0YXJnZXRz
LCBDb250cm9sVHlwZSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJl
c3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkU3dp
dGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlKj4m
IHRhcmdldHMsIENvbnRyb2xUeXBlJiBkZWZhdWx0VGFyZ2V0LCBTdGFjayYgZXhwcmVzc2lvblN0
YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgdW5zaWduZWQgdGFibGVJbmRleCA9IG1fY29k
ZUJsb2NrLT5udW1iZXJPZkp1bXBUYWJsZXMoKTsKLSAgICBGdW5jdGlvbkNvZGVCbG9jazo6SnVt
cFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkSnVtcFRhYmxlKHRhcmdldHMuc2l6
ZSgpKTsKKyAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNzaW9uU3RhY2sp
OwogCi0gICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0YXJnZXRzKQotICAgICAgICB1bmlm
eVZhbHVlc1dpdGhCbG9jayh0YXJnZXQtPm1fcmVzdWx0cywgZXhwcmVzc2lvblN0YWNrKTsKLSAg
ICB1bmlmeVZhbHVlc1dpdGhCbG9jayhkZWZhdWx0VGFyZ2V0Lm1fcmVzdWx0cywgZXhwcmVzc2lv
blN0YWNrKTsKKyAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gbV9jb2RlQmxvY2stPm51bWJlck9m
SnVtcFRhYmxlcygpOworICAgIEZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFibGUmIGp1bXBUYWJs
ZSA9IG1fY29kZUJsb2NrLT5hZGRKdW1wVGFibGUodGFyZ2V0cy5zaXplKCkgKyAxKTsKIAotICAg
IFdhc21Td2l0Y2g6OmVtaXQodGhpcywgY29uZGl0aW9uLCB0YWJsZUluZGV4LCBkZWZhdWx0VGFy
Z2V0LnRhcmdldExhYmVsRm9yQnJhbmNoKCktPmJpbmQodGhpcykpOworICAgIFdhc21Td2l0Y2g6
OmVtaXQodGhpcywgY29uZGl0aW9uLCB0YWJsZUluZGV4KTsKIAogICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKICAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldCA9IG1fbGFzdEluc3Ry
dWN0aW9uLm9mZnNldCgpOwotICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykg
ewotICAgICAgICBSZWZQdHI8TGFiZWw+IHRhcmdldExhYmVsID0gdGFyZ2V0LT50YXJnZXRMYWJl
bEZvckJyYW5jaCgpOworCisgICAgYXV0byBhZGRUYXJnZXQgPSBbJl0oQ29udHJvbFR5cGUmIHRh
cmdldCkgeworICAgICAgICBSZWZQdHI8TGFiZWw+IHRhcmdldExhYmVsID0gdGFyZ2V0LnRhcmdl
dExhYmVsRm9yQnJhbmNoKCk7CisKKyAgICAgICAgZ2V0RHJvcEtlZXBDb3VudCh0YXJnZXQsIGp1
bXBUYWJsZVtpbmRleF0uc3RhcnRPZmZzZXQsIGp1bXBUYWJsZVtpbmRleF0uZHJvcENvdW50LCBq
dW1wVGFibGVbaW5kZXhdLmtlZXBDb3VudCk7CisKICAgICAgICAgaWYgKHRhcmdldExhYmVsLT5p
c0ZvcndhcmQoKSkgewogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX3N3aXRjaGVzLmFkZCh0
YXJnZXRMYWJlbC5nZXQoKSwgVmVjdG9yPFN3aXRjaEVudHJ5PigpKTsKLSAgICAgICAgICAgIEFT
U0VSVCghanVtcFRhYmxlW2luZGV4XSk7Ci0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZCh7IG9mZnNldCwgJmp1bXBUYWJsZVtpbmRleCsrXSB9KTsKKyAgICAgICAgICAg
IEFTU0VSVCghanVtcFRhYmxlW2luZGV4XS50YXJnZXQpOworICAgICAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5hcHBlbmQoU3dpdGNoRW50cnkgeyBvZmZzZXQsICZqdW1wVGFibGVbaW5k
ZXgrK10udGFyZ2V0IH0pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW50IGp1bXBU
YXJnZXQgPSB0YXJnZXRMYWJlbC0+YmluZCh0aGlzKS50YXJnZXQoKTsKKyAgICAgICAgICAgIGlu
dCBqdW1wVGFyZ2V0ID0gdGFyZ2V0TGFiZWwtPmxvY2F0aW9uKCkgLSBvZmZzZXQ7CiAgICAgICAg
ICAgICBBU1NFUlQoanVtcFRhcmdldCk7Ci0gICAgICAgICAgICBqdW1wVGFibGVbaW5kZXgrK10g
PSBqdW1wVGFyZ2V0OworICAgICAgICAgICAganVtcFRhYmxlW2luZGV4KytdLnRhcmdldCA9IGp1
bXBUYXJnZXQ7CiAgICAgICAgIH0KLSAgICB9CisgICAgfTsKIAorICAgIGZvciAoY29uc3QgYXV0
byYgdGFyZ2V0IDogdGFyZ2V0cykKKyAgICAgICAgYWRkVGFyZ2V0KCp0YXJnZXQpOworICAgIGFk
ZFRhcmdldChkZWZhdWx0VGFyZ2V0KTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gTExJ
bnRHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0
JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6
OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+
IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBDb250cm9sVHlwZSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xE
YXRhOwotCi0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29wPihkYXRh
KSkKLSAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZGF0YS5tX3Jlc3VsdHMsIGV4cHJlc3Np
b25TdGFjayk7Ci0KLSAgICByZXR1cm4gYWRkRW5kVG9VbnJlYWNoYWJsZShlbnRyeSwgZXhwcmVz
c2lvblN0YWNrKTsKKyAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNzaW9u
U3RhY2spOworICAgIHJldHVybiBhZGRFbmRUb1VucmVhY2hhYmxlKGVudHJ5LCBleHByZXNzaW9u
U3RhY2ssIGZhbHNlKTsKIH0KIAogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVh
Y2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2sp
IC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFi
bGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgYm9v
bCB1bnJlYWNoYWJsZSkgLT4gUGFydGlhbFJlc3VsdAogeworI2lmIEFTU0VSVF9ESVNBQkxFRAor
ICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uU3RhY2spOworI2VuZGlmCisKICAgICBDb250cm9s
VHlwZSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOwogCi0gICAgZW1pdExhYmVsKCpkYXRhLm1f
Y29udGludWF0aW9uKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh1bnJlYWNoYWJsZSB8fCBtX3N0YWNr
U2l6ZSA9PSBkYXRhLnN0YWNrU2l6ZSgpICsgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQo
KSk7CiAKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KGRhdGEp
KQotICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmRWZWN0b3IoZGF0
YS5tX3Jlc3VsdHMpOwotICAgIGVsc2UgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpCi0gICAgICAgICAgICAgICAgZW50cnkuZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4cHJlc3Npb25TdGFja1tpXSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2su
YXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAgfQorICAgIG1fc3RhY2tTaXplID0gZGF0
YS5zdGFja1NpemUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fc2ln
bmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKKyAgICAgICAgYXV0byB0bXAgPSBwdXNoKCk7
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBBU1NFUlQodW5yZWFjaGFibGUgfHwgdG1w
ID09IGV4cHJlc3Npb25TdGFja1tpXSk7CisjZW5kaWYKKyAgICAgICAgZW50cnkuZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2suYXBwZW5kKHRtcCk7CisgICAgfQorCisgICAgaWYgKG1fbGFzdE9wY29k
ZUlEID09IHdhc21fam1wICYmIGRhdGEubV9jb250aW51YXRpb24tPnVucmVzb2x2ZWRKdW1wcygp
LnNpemUoKSA9PSAxICYmIGRhdGEubV9jb250aW51YXRpb24tPnVucmVzb2x2ZWRKdW1wcygpWzBd
ID09IHN0YXRpY19jYXN0PGludD4obV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpKSB7CisgICAg
ICAgIG1fbGFzdE9wY29kZUlEID0gd2FzbV91bnJlYWNoYWJsZTsKKyAgICAgICAgbV93cml0ZXIu
cmV3aW5kKG1fbGFzdEluc3RydWN0aW9uKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdExhYmVs
KCpkYXRhLm1fY29udGludWF0aW9uKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJ
bnRHZW5lcmF0b3I6OmVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIGlmICghc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSB7CisgICAg
ICAgIFdhc21SZXRWb2lkOjplbWl0KHRoaXMpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
IAotICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgYWZ0ZXIgdGhpcyBzbyB3
ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0dXJuIGhlcmUuCi0gICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbFRvcExldmVsPihkYXRhKSkKLSAgICAgICAgcmV0dXJu
IGFkZFJldHVybihkYXRhLCBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisgICAgbV9z
dGFja1NpemUgPSBtX3RvcExldmVsU3RhY2tTaXplOworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0
ZXI+IHJldHVyblZhbHVlcyhzaWduYXR1cmUtPnJldHVybkNvdW50KCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAg
cmV0dXJuVmFsdWVzW2ldID0gcHVzaCgpOworCisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY2Fs
bEluZm9ybWF0aW9uRm9yQ2FsbGVlKCpzaWduYXR1cmUpLCByZXR1cm5WYWx1ZXMpOworICAgIFdh
c21SZXQ6OmVtaXQodGhpcyk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtNzAzLDEzICs5MjUs
MTMgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50
cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmUKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENh
bGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25MaXN0JiByZXN1bHRzKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0g
YXJncy5zaXplKCkpOwotICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3Jt
YXRpb25Gb3Ioc2lnbmF0dXJlKTsKKyAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2Fs
bEluZm9ybWF0aW9uRm9yQ2FsbGVyKHNpZ25hdHVyZSk7CiAgICAgdW5pZnlWYWx1ZXNXaXRoQmxv
Y2soaW5mby5hcmd1bWVudHMsIGFyZ3MpOwotICAgIHJlc3VsdHMgPSBXVEZNb3ZlKGluZm8ucmVz
dWx0cyk7CiAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgV2FzbUNhbGw6
OmVtaXQodGhpcywgZnVuY3Rpb25JbmRleCwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJP
ZlN0YWNrQXJndW1lbnRzKTsKICAgICBlbHNlCiAgICAgICAgIFdhc21DYWxsTm9UbHM6OmVtaXQo
dGhpcywgZnVuY3Rpb25JbmRleCwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNr
QXJndW1lbnRzKTsKKyAgICBpbmZvLmNvbW1pdFJlc3VsdHMocmVzdWx0cyk7CiAKICAgICByZXR1
cm4geyB9OwogfQpAQCAtNzIyLDIwICs5NDQsMjAgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEK
ICAgICBBU1NFUlQobV9pbmZvLnRhYmxlQ291bnQoKSA+IHRhYmxlSW5kZXgpOwogICAgIEFTU0VS
VChtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLnR5cGUoKSA9PSBUYWJsZUVsZW1lbnRUeXBlOjpG
dW5jcmVmKTsKIAotICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRp
b25Gb3Ioc2lnbmF0dXJlKTsKKyAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2FsbElu
Zm9ybWF0aW9uRm9yQ2FsbGVyKHNpZ25hdHVyZSk7CiAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
aW5mby5hcmd1bWVudHMsIGFyZ3MpOwotICAgIHJlc3VsdHMgPSBXVEZNb3ZlKGluZm8ucmVzdWx0
cyk7CiAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgV2FzbUNhbGxJbmRp
cmVjdDo6ZW1pdCh0aGlzLCBjYWxsZWVJbmRleCwgbV9jb2RlQmxvY2stPmFkZFNpZ25hdHVyZShz
aWduYXR1cmUpLCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVudHMs
IHRhYmxlSW5kZXgpOwogICAgIGVsc2UKICAgICAgICAgV2FzbUNhbGxJbmRpcmVjdE5vVGxzOjpl
bWl0KHRoaXMsIGNhbGxlZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKHNpZ25hdHVy
ZSksIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50cywgdGFibGVJ
bmRleCk7CisgICAgaW5mby5jb21taXRSZXN1bHRzKHJlc3VsdHMpOwogCiAgICAgcmV0dXJuIHsg
fTsKIH0KIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBl
IHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAg
cmVzdWx0ID0gdmFsdWU7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21SZWZJc051bGw6
OmVtaXQodGhpcywgcmVzdWx0LCB2YWx1ZSk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtNzQzLDcg
Kzk2NSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlw
ZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKIAogYXV0byBMTEludEdlbmVyYXRvcjo6
YWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG5ld1RlbXBvcmFyeSgpOworICAgIHJlc3VsdCA9
IHB1c2goKTsKICAgICBXYXNtUmVmRnVuYzo6ZW1pdCh0aGlzLCByZXN1bHQsIGluZGV4KTsKIAog
ICAgIHJldHVybiB7IH07CkBAIC03NTEsNyArOTczLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6
YWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGkKIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVGFibGVHZXQodW5zaWduZWQgdGFibGVJbmRl
eCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBpbmRleDsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAg
ICAgV2FzbVRhYmxlR2V0OjplbWl0KHRoaXMsIHJlc3VsdCwgaW5kZXgsIHRhYmxlSW5kZXgpOwog
CiAgICAgcmV0dXJuIHsgfTsKQEAgLTc2Niw3ICs5ODgsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9y
OjphZGRUYWJsZVNldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBpbmRleCwg
RXhwcgogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRUYWJsZVNpemUodW5zaWduZWQgdGFibGVJ
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJl
c3VsdCA9IG5ld1RlbXBvcmFyeSgpOworICAgIHJlc3VsdCA9IHB1c2goKTsKICAgICBXYXNtVGFi
bGVTaXplOjplbWl0KHRoaXMsIHJlc3VsdCwgdGFibGVJbmRleCk7CiAKICAgICByZXR1cm4geyB9
OwpAQCAtNzc0LDcgKzk5Niw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSh1
bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtCiAKIGF1dG8gTExJ
bnRHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9u
VHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IGZpbGw7CisgICAgcmVzdWx0ID0gcHVz
aCgpOwogICAgIFdhc21UYWJsZUdyb3c6OmVtaXQodGhpcywgcmVzdWx0LCBmaWxsLCBkZWx0YSwg
dGFibGVJbmRleCk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtNzk2LDcgKzEwMTgsNyBAQCBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKIAogYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7CisgICAg
cmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21DdXJyZW50TWVtb3J5OjplbWl0KHRoaXMsIHJlc3Vs
dCk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtODA0LDcgKzEwMjYsNyBAQCBhdXRvIExMSW50R2Vu
ZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9u
VHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIHJlc3VsdCA9IGRlbHRhOworICAgIHJlc3VsdCA9IHB1c2goKTsKICAgICBXYXNtR3Jvd01l
bW9yeTo6ZW1pdCh0aGlzLCByZXN1bHQsIGRlbHRhKTsKIAogICAgIHJldHVybiB7IH07CkBAIC04
MTIsNyArMTAzNCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVz
c2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCiAKIGF1dG8gTExJbnRHZW5l
cmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBl
IG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBjb25kaXRpb247CisgICAgcmVzdWx0ID0g
cHVzaCgpOwogICAgIFdhc21TZWxlY3Q6OmVtaXQodGhpcywgcmVzdWx0LCBjb25kaXRpb24sIG5v
blplcm8sIHplcm8pOwogCiAgICAgcmV0dXJuIHsgfTsKQEAgLTgyMCw3ICsxMDQyLDcgQEAgYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhw
cmVzc2lvblR5cGUgbm9uWmVybywKIAogYXV0byBMTEludEdlbmVyYXRvcjo6bG9hZChMb2FkT3BU
eXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1
aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBwb2ludGVy
OworICAgIHJlc3VsdCA9IHB1c2goKTsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJMzJMb2FkOFM6CiAgICAgICAgIFdhc21JMzJMb2FkOFM6OmVtaXQodGhpcywgcmVz
dWx0LCBwb2ludGVyLCBvZmZzZXQpOwpAQCAtOTMyLDE2ICsxMTU0LDggQEAgdm9pZCBHZW5lcmlj
TGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjo6c2V0TG9jYXRpb24oQnl0ZWNvZGVHZW5lcmF0
b3JCYXNlPFdhc20KICAgICAgICAgQ0FTRShXYXNtSm1wKQogICAgICAgICBDQVNFKFdhc21KdHJ1
ZSkKICAgICAgICAgQ0FTRShXYXNtSmZhbHNlKQotICAgICAgICBjYXNlIFdhc21Td2l0Y2g6Om9w
Y29kZUlEOiB7Ci0gICAgICAgICAgICBBU1NFUlQoKCFpbnN0cnVjdGlvbi0+YXM8V2FzbVN3aXRj
aCwgV2FzbU9wY29kZVRyYWl0cz4oKS5tX2RlZmF1bHRUYXJnZXQpKTsKLSAgICAgICAgICAgIGlu
c3RydWN0aW9uLT5jYXN0PFdhc21Td2l0Y2gsIFdhc21PcGNvZGVUcmFpdHM+KCktPnNldERlZmF1
bHRUYXJnZXQoQm91bmRMYWJlbCh0YXJnZXQpLCBbJl0oKSB7Ci0gICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yLm1fY29kZUJsb2NrLT5hZGRPdXRPZkxpbmVKdW1wVGFyZ2V0KGluc3RydWN0aW9uLm9m
ZnNldCgpLCB0YXJnZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiBCb3VuZExhYmVsKCk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICN1bmRlZiBDQVNFCiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAppbmRleCA3
NzJiNTE5NjZlNDU3ZDI5NjhiYzY1YjMxMDkzOGRkZmJjMmIxMGY2Li5iY2VlYjI4NmJhM2NiMzE5
N2ViZmI4MGI0ZTVlZjUxNmZhYjRkNTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTExJbnRQbGFuLmNwcApAQCAtODAsMTAgKzgwLDEwIEBAIHZvaWQgTExJbnRQbGFuOjpj
b21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3Vs
dCk7CiAKICAgICBpZiAobV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlcy5jb250YWlucyhmdW5jdGlv
bkluZGV4KSB8fCBtX21vZHVsZUluZm9ybWF0aW9uLT5yZWZlcmVuY2VkRnVuY3Rpb25zKCkuY29u
dGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOwogICAgICAgICBFbWJlZGVyVG9XYXNtRnVuY3Rpb24gZW50cnk7CiAgICAgICAgIGVu
dHJ5LmppdCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgICAgICBlbnRyeS5mdW5j
dGlvbiA9IG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKCplbnRyeS5qaXQsIHNpZ25hdHVyZSwgJm1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRp
b24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCk7CisgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyVG9XYXNt
SW50ZXJuYWxGdW5jdGlvbnMuYWRkKGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW50cnkpKTsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAppbmRleCBjNWEwODE1
NDVkNDU0Mzk1YzBkMGJiZDRhMzAwMzY5MmEwMTdiY2M3Li43MjgzMmYyOTY4ZmZiNDM4NTQzN2U0
NDQzNzQxZDlhODU3ZmQyMmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21W
YWxpZGF0ZS5jcHAKQEAgLTE2MSw2ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwog
CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpIHsgcmV0dXJu
IHsgfTsgfQorICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kVG9wTGV2ZWwoQmxvY2tT
aWduYXR1cmUpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQ2FsbHMKICAgICBSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmKTsK
QEAgLTE3Niw2ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxD
b250cm9sRW50cnk+JiwgY29uc3QgU3RhY2sqKTsKICAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlv
blBhcnNlcjxWYWxpZGF0ZT4qKSB7IH0KICAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmdMb2NhbHMo
KSB7IH0KKyAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNrKCkgeyB9CiAKIHByaXZhdGU6CiAg
ICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeShjb25zdCBTdGFjayYsIGNvbnN0IENv
bnRyb2xEYXRhJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383764</attachid>
            <date>2019-11-18 11:24:55 -0800</date>
            <delta_ts>2019-11-18 11:48:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204092-20191118112454.patch</filename>
            <type>text/plain</type>
            <size>66079</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MWVjZjQ0MmU3YjA0ZGU1ZWQ3MWExMzBlNDk2NDAzZDhhZWJhYzkyLi4zMDc5ZDE1MDQ4NGZkNDgy
YWQ3ODQ5OTBjM2JkN2JhZTM5MDkxY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMTktMTEtMTcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBJbXByb3ZlIFdhc206OkxMSW50R2VuZXJhdG9y
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQwOTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlt
cHJvdmVzIHRoZSBXYXNtOjpMTEludEdlbmVyYXRvciBieToKKyAgICAgICAgLSBDaGFuZ2luZyBM
TEludEdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgZnJvbSBSZWZQdHI8UmVnaXN0ZXJJRD4gdG8g
VmlydHVhbFJlZ2lzdGVyOiBJbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYW5kIHJldGFpbmluZworICAg
ICAgICAgIFJlZ2lzdGVySURzIHdlIHVzZSBWaXJ0dWFsUmVnaXN0ZXJzIGRpcmVjdGx5IGFuZCBl
bnN1cmUgdGhhdCB0aGV5IG1hdGNoIHRoZSBXZWJBc3NlbWJseSBzdGFjaywgaS5lLiB0aGUgcGFy
c2VyJ3MgZXhwcmVzc2lvbgorICAgICAgICAgIHN0YWNrIHNob3VsZCBtYXRjaCB0aGUgdmlydHVh
bCByZWdpc3RlcnMuCisgICAgICAgIC0gUmVtb3ZpbmcgcmVkdW5kYW50IG1vdmVzIHdoZW4gbWF0
ZXJpYWxpemluZyBjb25zdGFudHMgYW5kIHBlcmZvcm1pbmcgbG9jYWwuZ2V0OiBpbnN0ZWFkIG9m
IGNyZWF0aW5nIGEgbmV3IHRlbXBvcmFyeQorICAgICAgICAgIGZvciBlYWNoIGNvbnN0YW50IGFu
ZCBsb2NhbC5nZXQsIHdlIHJldHVybiB0aGUgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGUgY29uc3Rh
bnQvbG9jYWwgc2xvdCBkaXJlY3RseS4gSW4gb3JkZXIgZm9yIHRoaXMKKyAgICAgICAgICB0byB3
b3JrLCB3ZSBzdGlsbCBhbGxvY2F0ZSB0aGUgc3RhY2sgc2xvdCBmb3IgdGhlIHRlbXBvcmFyaWVz
LCBzaW5jZSB3ZSBoYXZlIHRvIG1hdGVyaWFsaXplIHRoZW0gaW4gYmVmb3JlIGxvb3BzIGFuZCBi
cmFuY2hlcy4KKyAgICAgICAgLSBBZGRpbmcgYSBjb25zdHJ1Y3RvciB0byBDb250cm9sVHlwZSB0
aGF0IHRha2VzIHRoZSByZXN1bHRzIEV4cHJlc3Npb25MaXN0IGFzIGFuIHJ2YWx1ZSBpbnN0ZWFk
IG9mIGNvcHlpbmcgaXQKKyAgICAgICAgLSBPcHRpbWl6aW5nIGNhbGxJbmZvcm1hdGlvbkZvciwg
d2hpY2ggaXMgbm93IHNwbGl0IGludG8gdHdvIGZ1bmN0aW9ucy4gVGhlIGNhbGxlZSBkb2VzIG5v
dCBjYXJlIGFib3V0IGFyZ3VtZW50cywgYW5kIHNob3VsZAorICAgICAgICAgIG5ldmVyIGFsbG9j
YXRlIHRlbXBvcmFyaWVzLCBhbmQgdGhlIGNhbGxlciBjYXNlIHdhcyBvcHRpbWl6ZWQgYnkgYXZv
aWRpbmcgdW5uZWNlc3NhcnkgY2FsbHMgdG8gbmV3VGVtcG9yYXJ5CisgICAgICAgIC0gRGVsYXkg
aG9sZGluZyB0aGUgbG9jayBpbiBMTGludFBsYW46OmNvbXBpbGVGdW5jdGlvbiwgc2luY2Ugd2Ug
ZG8gbm90IG5lZWQgdG8gaG9sZCBpdCB3aGlsZSBjb21waWxpbmcgdGhlIGpzLXRvLXdhc20gZW50
cnlwb2ludAorCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAq
IGJ5dGVjb21waWxlci9MYWJlbC5oOgorICAgICAgICAoSlNDOjpHZW5lcmljTGFiZWw6OmxvY2F0
aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0xhYmVsOjp1bnJlc29sdmVkSnVtcHMg
Y29uc3QpOgorICAgICAgICAqIGdlbmVyYXRvci9XYXNtLnJiOgorICAgICAgICAqIGxsaW50L1dl
YkFzc2VtYmx5LmFzbToKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbmRUb3BMZXZlbCk6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisgICAg
ICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmVuZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2spOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9u
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmFk
ZEp1bXBUYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvblBhcnNlcjo6ZXhwcmVzc2lvblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQm9keSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OkNvbnRyb2xUeXBlOjpsb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OkNvbnRyb2xUeXBlOjp0b3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpDb250cm9sVHlwZTo6YmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Q29udHJvbFR5cGU6OmlmXyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpDb250cm9sVHlwZTo6dGFyZ2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnN0YWNrU2l6ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Q29udHJvbFR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxv
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6cHVzaCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpkdW1wKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TExJbnRHZW5lcmF0b3I6OnZpcnR1YWxSZWdpc3RlckZvcldhc21Mb2NhbCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpqc051bGxDb25zdGFudCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjp6ZXJvQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6Z2V0RHJvcEtlZXBDb3VudCk6CisgICAgICAgIChKU0M6Oldh
c206OkxMSW50R2VuZXJhdG9yOjpkcm9wS2VlcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjptYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2Fscyk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb25zdGFudE1hcEhhc2hUcmFpdHM6OmVtcHR5VmFsdWUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29uc3RhbnRNYXBIYXNoVHJh
aXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Q29uc3RhbnRNYXBIYXNoVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIpOgorICAgICAgICAoSlND
OjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Omdl
dEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRMb29wKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRvcExldmVsKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZElmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
YWRkRWxzZVRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEJy
YW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6ZW5kVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkUmVmSXNOdWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OmFkZFJlZkZ1bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRk
VGFibGVHZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVGFibGVT
aXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6
CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkU2VsZWN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmxvYWQpOgorICAgICAgICAoSlNDOjpHZW5lcmljTGFi
ZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjo6c2V0TG9jYXRpb24pOgorICAgICAgICAqIHdhc20v
V2FzbUxMSW50UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50UGxhbjo6Y29tcGls
ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OlZhbGlkYXRlOjplbmRUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OlZh
bGlkYXRlOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisKIDIwMTktMTEtMTEgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggaW5jb3Jy
ZWN0IGFzc2VydGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QucmIKaW5kZXggYzJlYzljZjU3MmFiNmUxNmE4NDM3MmJmZjAwMzYwYjkzZmUxMzJjYy4u
ZjgyYmVkOTg5MjBlNzk1NWI1MjI4Y2Q3Yjg0MzRhNmUwNDA5MjI3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0xMjk3LDcgKzEyOTcs
NiBAQCBvcCA6c3dpdGNoLAogICAgIGFyZ3M6IHsKICAgICAgICAgc2NydXRpbmVlOiBWaXJ0dWFs
UmVnaXN0ZXIsCiAgICAgICAgIHRhYmxlSW5kZXg6IHVuc2lnbmVkLAotICAgICAgICBkZWZhdWx0
VGFyZ2V0OiBXYXNtQm91bmRMYWJlbCwKICAgICB9CiAKICMgV2FzbSBzcGVjaWZpYyBieXRlY29k
ZXMKQEAgLTEzMDUsNiArMTMwNCwxMyBAQCBvcCA6c3dpdGNoLAogb3AgOnVucmVhY2hhYmxlCiBv
cCA6cmV0X3ZvaWQKIAorb3AgOmRyb3Bfa2VlcCwKKyAgICBhcmdzOiB7CisgICAgICAgIHN0YXJ0
T2Zmc2V0OiB1bnNpZ25lZCwKKyAgICAgICAgZHJvcENvdW50OiB1bnNpZ25lZCwKKyAgICAgICAg
a2VlcENvdW50OiB1bnNpZ25lZCwKKyAgICB9CisKIG9wIDpyZWZfaXNfbnVsbCwKICAgICBhcmdz
OiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9MYWJlbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9MYWJlbC5oCmluZGV4IDkwMzEzNjI2ZjhmYjNjOGRjN2QwMjk1Y2ZkMzI2
ODBhZGEwMjBmNmQuLjM1YmMxNDc0ODlhNTI3MjA2MmQzOWRkYTkxYWNkODkyNzI0MjhiNDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTGFiZWwuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgKQEAgLTEyOCw2ICsx
MjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2Vu
ZXJpY0xhYmVsKTsKICAgICAgICAgdXNpbmcgQnl0ZWNvZGVHZW5lcmF0b3IgPSBCeXRlY29kZUdl
bmVyYXRvckJhc2U8VHJhaXRzPjsKICAgICAgICAgdXNpbmcgQm91bmRMYWJlbCA9IEdlbmVyaWNC
b3VuZExhYmVsPFRyYWl0cz47CisgICAgICAgIHR5cGVkZWYgVmVjdG9yPGludCwgOD4gSnVtcFZl
Y3RvcjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgR2VuZXJpY0xhYmVsKCkgPSBkZWZhdWx0OwpA
QCAtMTcwLDExICsxNzEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBi
b29sIGlzQm91bmQoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kOyB9CiAKKyAgICAgICAgdW5zaWdu
ZWQgbG9jYXRpb24oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWlzRm9y
d2FyZCgpKTsKKyAgICAgICAgICAgIG1fYm91bmQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IG1fbG9jYXRpb247CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgSnVtcFZlY3RvciYgdW5y
ZXNvbHZlZEp1bXBzKCkgY29uc3QgeyByZXR1cm4gIG1fdW5yZXNvbHZlZEp1bXBzOyB9CisKICAg
ICBwcml2YXRlOgogICAgICAgICBmcmllbmQgQm91bmRMYWJlbDsKIAotICAgICAgICB0eXBlZGVm
IFZlY3RvcjxpbnQsIDg+IEp1bXBWZWN0b3I7Ci0KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBpbnZhbGlkTG9jYXRpb24gPSBVSU5UX01BWDsKIAogICAgICAgICBpbnQgbV9yZWZD
b3VudCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
V2FzbS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvV2FzbS5yYgppbmRleCBj
MDBjNjI5ZGQwMzc2MzczMzkyODBjMTUxYTg3OWMyYWIzYmE4ZGY0Li5jMTc4NTg2ZDUyMWZhZDdk
YmI1MmI2NzdiYTUxZmFkNTIxNjlmOWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL1dhc20ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9XYXNtLnJiCkBAIC01OCw3ICs1OCw3IEBAIG1vZHVsZSBXYXNtCiB0ZW1wbGF0ZTw+CiBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRPcDwje29wX3R5cGUob3ApfT4oRXhwcmVzc2lvblR5cGUgbGhz
LCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICByZXN1bHQgPSBsaHM7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgICN7
b3AuY2FwaXRhbGl6ZWRfbmFtZX06OmVtaXQodGhpcywgcmVzdWx0LCBsaHMsIHJocyk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KQEAgLTcwLDcgKzcwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
T3A8I3tvcF90eXBlKG9wKX0+KEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmgK
IHRlbXBsYXRlPD4KIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZE9wPCN7b3BfdHlwZShvcCl9PihF
eHByZXNzaW9uVHlwZSBvcGVyYW5kLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gb3BlcmFuZDsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAg
ICAgI3tvcC5jYXBpdGFsaXplZF9uYW1lfTo6ZW1pdCh0aGlzLCByZXN1bHQsIG9wZXJhbmQpOwog
ICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvV2ViQXNzZW1ibHkuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2Vt
Ymx5LmFzbQppbmRleCAwYmI5ZmZkMzUyYWI0NDI4ZjVjNmM2Nzk1OGJjY2ZkNmVhM2Y0ZmE2Li5h
NWM3Yzg4MDI4OTg3Zjk4MWQyZGJlMzU3MmJlZTNiMTQ0MDFhMTVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20KQEAgLTI5Nyw3ICsyOTcsNyBAQCBtYWNy
byB3YXNtUHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvY2tTZXR0ZXIsIGxvYWRXYXNt
SW5zdGFuY2UpCiAgICAgYnRpeiB3czEsIC56ZXJvSW5pdGlhbGl6ZUxvY2Fsc0RvbmUKICAgICBu
ZWdpIHdzMQogICAgIHN4aTJxIHdzMSwgd3MxCi0gICAgbGVhcCAoTnVtYmVyT2ZXYXNtQXJndW1l
bnRzICsgQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKSAqIC04W2Nmcl0sIHdzMAor
ICAgIGxlYXAgKE51bWJlck9mV2FzbUFyZ3VtZW50cyArIENhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycyArIDEpICogLThbY2ZyXSwgd3MwCiAuemVyb0luaXRpYWxpemVMb2NhbHNMb29w
OgogICAgIGFkZHEgMSwgd3MxCiAgICAgc3RvcmVxIDAsIFt3czAsIHdzMSwgOF0KQEAgLTU4OCwx
NCArNTg4LDIzIEBAIHdhc21PcChzd2l0Y2gsIFdhc21Td2l0Y2gsIG1hY3JvKGN0eCkKICAgICBh
ZGRwIHQxLCB0MgogCiAgICAgbG9hZGkgVmVjdG9yU2l6ZU9mZnNldFt0Ml0sIHQzCi0gICAgYmlh
ZXEgdDAsIHQzLCAuZGVmYXVsdAorICAgIGJpYiB0MCwgdDMsIC5pbkJvdW5kcworCisub3V0T2ZC
b3VuZHM6CisgICAgc3ViaSB0MywgMSwgdDAKKworLmluQm91bmRzOgogICAgIGxvYWRwIFZlY3Rv
ckJ1ZmZlck9mZnNldFt0Ml0sIHQyCi0gICAgbG9hZGkgW3QyLCB0MCwgNF0sIHQzCisgICAgbXVs
aSBzaXplb2YgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5LCB0MAorCisg
ICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5OjpzdGFydE9m
ZnNldFt0MiwgdDBdLCB0MQorICAgIGxvYWRpIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1w
VGFibGVFbnRyeTo6ZHJvcENvdW50W3QyLCB0MF0sIHQzCisgICAgbG9hZGkgV2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5OjprZWVwQ291bnRbdDIsIHQwXSwgdDUKKyAgICBk
cm9wS2VlcCh0MSwgdDMsIHQ1KQorCisgICAgbG9hZGlzIFdhc206OkZ1bmN0aW9uQ29kZUJsb2Nr
OjpKdW1wVGFibGVFbnRyeTo6dGFyZ2V0W3QyLCB0MF0sIHQzCiAgICAgYXNzZXJ0KG1hY3JvKG9r
KSBidGlueiB0MywgLm9rIGVuZCkKICAgICB3YXNtRGlzcGF0Y2hJbmRpcmVjdCh0MykKLQotLmRl
ZmF1bHQ6Ci0gICAganVtcChjdHgsIG1fZGVmYXVsdFRhcmdldCkKIGVuZCkKIAogdW5wcmVmaXhl
ZFdhc21PcCh3YXNtX2ptcCwgV2FzbUptcCwgbWFjcm8oY3R4KQpAQCAtMTk5MywzICsyMDAyLDMw
IEBAIHdhc21PcChpNjRfcmVpbnRlcnByZXRfZjY0LCBXYXNtSTY0UmVpbnRlcnByZXRGNjQsIG1h
Y3JvKGN0eCkKICAgICBmZDJxIGZ0MCwgdDAKICAgICByZXR1cm5xKGN0eCwgdDApCiBlbmQpCisK
K21hY3JvIGRyb3BLZWVwKHN0YXJ0T2Zmc2V0LCBkcm9wLCBrZWVwKQorICAgIGxzaGlmdGkgMywg
c3RhcnRPZmZzZXQKKyAgICBzdWJwIGNmciwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0CisgICAg
bmVnaSBkcm9wCisgICAgc3hpMnEgZHJvcCwgZHJvcAorCisuY29weUxvb3A6CisgICAgYnRpeiBr
ZWVwLCAuZG9uZQorICAgIGxvYWRxIFtzdGFydE9mZnNldCwgZHJvcCwgOF0sIHQ2CisgICAgc3Rv
cmVxIHQ2LCBbc3RhcnRPZmZzZXRdCisgICAgc3ViaSAxLCBrZWVwCisgICAgc3VicCA4LCBzdGFy
dE9mZnNldAorICAgIGptcCAuY29weUxvb3AKKworLmRvbmU6CitlbmQKKword2FzbU9wKGRyb3Bf
a2VlcCwgV2FzbURyb3BLZWVwLCBtYWNybyhjdHgpCisgICAgd2dldHUoY3R4LCBtX3N0YXJ0T2Zm
c2V0LCB0MCkKKyAgICB3Z2V0dShjdHgsIG1fZHJvcENvdW50LCB0MSkKKyAgICB3Z2V0dShjdHgs
IG1fa2VlcENvdW50LCB0MikKKworICAgIGRyb3BLZWVwKHQwLCB0MSwgdDIpCisKKyAgICBkaXNw
YXRjaChjdHgpCitlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmNwcAppbmRleCA5YzcwODYxNzMwZDI3ZWQ1OTc0YTQ0ZjhkNTc1ZmIyNjE2
ZDAxODU2Li5lZDdiOGRlOThmNTZlNDNjYmY3YTUzYzVlZGIyMjc1MDUyZmNmOGExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAg
LTI4NSw2ICsyODUsOCBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShD
b250cm9sRW50cnkmLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0geyB9KTsKIAorICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0
dXJlKSB7IHJldHVybiB7IH07IH0KKwogICAgIC8vIENhbGxzCiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2ln
bmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgVmVjdG9yPEV4cHJlc3Npb25U
eXBlLCAxPiYgcmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4mIHJl
c3VsdHMpOwpAQCAtMjk5LDYgKzMwMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoY29uc3Qg
VmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJlc3Np
b25TdGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0
b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAgdm9pZCBkaWRGaW5pc2hQ
YXJzaW5nTG9jYWxzKCkgeyB9CisgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgfQog
CiAgICAgc3RhdGljIFZlY3RvcjxUbXA+IHRvVG1wVmVjdG9yKGNvbnN0IFZlY3RvcjxUeXBlZFRt
cD4mIHZlY3RvcikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKaW5kZXggODY1YTczOTNhZGE5ZjlmMjE0NWIzOGNhNGQ1NDc2YjZl
MzY2ZDIxMy4uNjE5NjE5MzljNjVjZjE5ODQ2ZTNiZmU2MDViZDA0MThlMTkyZmUyMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAt
MjM1LDYgKzIzNSw4IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENv
bnRyb2xFbnRyeSYsIGNvbnN0IFN0YWNrJiA9IHsgfSk7CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBlbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSkgeyByZXR1cm4geyB9
OyB9CisKICAgICAvLyBDYWxscwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUlu
ZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1
bHRMaXN0JiByZXN1bHRzKTsKQEAgLTI0NCw2ICsyNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
dW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0YWNr
KiBleHByZXNzaW9uU3RhY2spOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPEIz
SVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAgdm9pZCBk
aWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9CisgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFj
aygpIHsgfQogCiAgICAgVmFsdWUqIGNvbnN0YW50KEIzOjpUeXBlLCB1aW50NjRfdCBiaXRzLCBP
cHRpb25hbDxPcmlnaW4+ID0gV1RGOjpudWxsb3B0KTsKICAgICBWYWx1ZSogZnJhbWVQb2ludGVy
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25D
b2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrLmNwcAppbmRleCBkMzUwNWMzMDA4MTllYWU0Y2E2OTQ4Zjk4ZDhmYmE3Y2EyM2ZjZGI5
Li4xNjJhMzcyMzA1NGY3ZDIzNWZkZjU0MGYzNDI5YTg4MDY1ZjgwNzEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5jcHAKQEAg
LTc1LDExICs3NSw3IEBAIGNvbnN0IFNpZ25hdHVyZSYgRnVuY3Rpb25Db2RlQmxvY2s6OnNpZ25h
dHVyZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIAogYXV0byBGdW5jdGlvbkNvZGVCbG9jazo6YWRk
SnVtcFRhYmxlKHNpemVfdCBudW1iZXJPZkVudHJpZXMpIC0+IEp1bXBUYWJsZSYKIHsKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgbV9qdW1wVGFibGVzLmFwcGVuZChKdW1wVGFibGUobnVtYmVy
T2ZFbnRyaWVzLCAwKSk7Ci0jZWxzZQogICAgIG1fanVtcFRhYmxlcy5hcHBlbmQoSnVtcFRhYmxl
KG51bWJlck9mRW50cmllcykpOwotI2VuZGlmCiAgICAgcmV0dXJuIG1fanVtcFRhYmxlcy5sYXN0
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9u
Q29kZUJsb2NrLmgKaW5kZXggZmVkNDQ3NWNhNWQ1Nzk3NjQ4YTlmN2IyOWM1MGE5NTc2YTRjYzEy
ZS4uZjY4OGE3YzllOTQyNmQ5ZTBiZWEzYWYwY2ZmYWYyYzI3ZGQ1YTU2NyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKQEAgLTEw
NSw3ICsxMDUsMTQgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFkZFNpZ25hdHVyZShjb25zdCBT
aWduYXR1cmUmKTsKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSh1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CiAKLSAgICB1c2luZyBKdW1wVGFibGUgPSBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldD47CisgICAgc3RydWN0IEp1bXBUYWJsZUVudHJ5IHsKKyAgICAgICAgaW50IHRh
cmdldCB7IDAgfTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7CisgICAgICAgIHVuc2ln
bmVkIGRyb3BDb3VudDsKKyAgICAgICAgdW5zaWduZWQga2VlcENvdW50OworICAgIH07CisKKyAg
ICB1c2luZyBKdW1wVGFibGUgPSBWZWN0b3I8SnVtcFRhYmxlRW50cnk+OwogICAgIEp1bXBUYWJs
ZSYgYWRkSnVtcFRhYmxlKHNpemVfdCBudW1iZXJPZkVudHJpZXMpOwogICAgIGNvbnN0IEp1bXBU
YWJsZSYganVtcFRhYmxlKHVuc2lnbmVkIHRhYmxlSW5kZXgpIGNvbnN0OwogICAgIHVuc2lnbmVk
IG51bWJlck9mSnVtcFRhYmxlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCBmNzcxNmE3MDFlNzcyMGI4ZjM2YWM5ODUz
NjAzODJmZmMyZjhjY2VhLi5kZTllZGY2OTJhODZiNDViY2Q5MmY5MjM2MmQxYjVmYjNjYWEzZDQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJz
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIu
aApAQCAtNzcsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQogCiAgICAgVmVjdG9yPENvbnRyb2xF
bnRyeT4mIGNvbnRyb2xTdGFjaygpIHsgcmV0dXJuIG1fY29udHJvbFN0YWNrOyB9CisgICAgU3Rh
Y2smIGV4cHJlc3Npb25TdGFjaygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvblN0YWNrOyB9CiAKIHBy
aXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTg5
LDYgKzkwLDcgQEAgcHJpdmF0ZToKICNkZWZpbmUgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RB
Q0tfSU5UTyhyZXN1bHQsIHdoYXQpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLmlzRW1wdHko
KSwgImNhbid0IHBvcCBlbXB0eSBzdGFjayBpbiAiIHdoYXQpOyBcCiAgICAgICAgIHJlc3VsdCA9
IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0
YWNrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIH0gd2hpbGUgKDApCiAKICAgICB0ZW1wbGF0ZTxPcFR5cGU+CkBAIC0xNzYsNiArMTc4
LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCb2R5KCkgLT4gUGFydGlh
bFJlc3VsdAogICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4cHJl
c3Npb24oKSk7CiAgICAgICAgIH0KICAgICB9CisgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhtX2NvbnRleHQuZW5kVG9wTGV2ZWwoJm1fc2lnbmF0dXJlKSk7CiAKICAgICBBU1NFUlQob3Ag
PT0gT3BUeXBlOjpFbmQpOwogICAgIHJldHVybiB7IH07CkBAIC00MzgsOCArNDQxLDEwIEBAIGF1
dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxS
ZXN1bHQKICAgICAgICAgc2l6ZV90IGZpcnN0QXJndW1lbnRJbmRleCA9IG1fZXhwcmVzc2lvblN0
YWNrLnNpemUoKSAtIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CiAgICAgICAgIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4gYXJnczsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
YXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSks
ICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBjYWxsJ3MgIiwgY2FsbGVlU2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytp
KQorICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBw
ZW5kKG1fZXhwcmVzc2lvblN0YWNrLmF0KGkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQ
b3BWYWx1ZUZyb21TdGFjaygpOworICAgICAgICB9CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNr
LnNocmluayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0
czsKQEAgLTQ2Nyw4ICs0NzIsMTAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+IGFyZ3M7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBm
b3IgIiwgYXJndW1lbnRDb3VudCwgIiBjYWxsX2luZGlyZWN0IGFyZ3VtZW50cyIpOwogICAgICAg
ICBzaXplX3QgZmlyc3RBcmd1bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0g
YXJndW1lbnRDb3VudDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRl
eDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQorICAgICAgICBmb3IgKHNpemVf
dCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVzc2lvblN0YWNr
LmF0KGkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21TdGFjaygpOwor
ICAgICAgICB9CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhmaXJzdEFyZ3VtZW50
SW5kZXgpOwogCiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKQEAgLTYwOCw2ICs2MTUsNyBA
QCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0
aWFsUmVzdWx0CiAgICAgY2FzZSBEcm9wOiB7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IW1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgImNhbid0IGRyb3Agb24gZW1wdHkgc3RhY2siKTsK
ICAgICAgICAgbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgbV9jb250ZXh0
LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApp
bmRleCBiYWVmNTA3MDM3Zjk2MTczNGE5YThiZWE0Mjc3NjY5NGZmMzc1YjQzLi5hOWUxMThmNWFl
MGMyODA3ZDMwNmViZTcxZDJhODdjZTEyYTk3MjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAgLTMyLDEzICszMiwxMyBAQAog
I2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uU3RyZWFt
LmgiCiAjaW5jbHVkZSAiTGFiZWwuaCIKLSNpbmNsdWRlICJSZWdpc3RlcklELmgiCiAjaW5jbHVk
ZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiV2FzbUZ1
bmN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbUdlbmVyYXRvclRyYWl0cy5oIgogI2luY2x1
ZGUgIldhc21UaHVua3MuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZFVub3JkZXJlZE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CkBAIC00Nyw5ICs0Nyw5IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIExMSW50R2VuZXJhdG9yIDogcHVibGljIEJ5dGVj
b2RlR2VuZXJhdG9yQmFzZTxHZW5lcmF0b3JUcmFpdHM+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBF
eHByZXNzaW9uVHlwZSA9IFJlZlB0cjxSZWdpc3RlcklEPjsKKyAgICB1c2luZyBFeHByZXNzaW9u
VHlwZSA9IFZpcnR1YWxSZWdpc3RlcjsKICAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZlY3Rv
cjxFeHByZXNzaW9uVHlwZSwgMT47Ci0gICAgdXNpbmcgU3RhY2sgPSBFeHByZXNzaW9uTGlzdDsK
KyAgICB1c2luZyBTdGFjayA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMTI4LCBVbnNhZmVWZWN0
b3JPdmVyZmxvdz47CiAKICAgICBzdHJ1Y3QgQ29udHJvbExvb3AgIHsKICAgICAgICAgUmVmPExh
YmVsPiBtX2JvZHk7CkBAIC03MywyNCArNzMsMjQgQEAgcHVibGljOgogICAgICAgICB7CiAgICAg
ICAgIH0KIAotICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgbG9vcChCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRzLCBSZWY8TGFiZWw+IGJvZHks
IFJlZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQorICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUg
bG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExh
YmVsPiYmIGJvZHksIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHJlc3VsdHMsIFdURk1vdmUo
Y29udGludWF0aW9uKSwgQ29udHJvbExvb3AgeyBXVEZNb3ZlKGJvZHkpIH0pOworICAgICAgICAg
ICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbExvb3AgeyBXVEZN
b3ZlKGJvZHkpIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIHRv
cExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJl
c3VsdHMsIFJlZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQorICAgICAgICBzdGF0aWMgQ29udHJv
bFR5cGUgdG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1Np
emUsIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHJlc3VsdHMsIFdURk1vdmUoY29udGludWF0
aW9uKSwgQ29udHJvbFRvcExldmVsIHsgfSk7CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5
cGUoc2lnbmF0dXJlLCBzdGFja1NpemUsIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbFRv
cExldmVsIHsgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgYmxv
Y2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0
cywgUmVmUHRyPExhYmVsPiBjb250aW51YXRpb24pCisgICAgICAgIHN0YXRpYyBDb250cm9sVHlw
ZSBibG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVm
UHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgcmVzdWx0cywgV1RGTW92ZShjb250aW51YXRpb24pLCBD
b250cm9sQmxvY2sgeyB9KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1
cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRp
bnVhdGlvbiksIENvbnRyb2xCbG9jayB7IH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGlj
IENvbnRyb2xUeXBlIGlmXyhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIGNvbnN0IEV4cHJlc3Np
b25MaXN0JiByZXN1bHRzLCBSZWY8TGFiZWw+IGFsdGVybmF0ZSwgUmVmUHRyPExhYmVsPiBjb250
aW51YXRpb24pCisgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBpZl8oQmxvY2tTaWduYXR1cmUg
c2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZjxMYWJlbD4mJiBhbHRlcm5hdGUsIFJl
ZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBDb250cm9sVHlwZShzaWduYXR1cmUsIHJlc3VsdHMsIFdURk1vdmUoY29udGludWF0aW9uKSwg
Q29udHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOworICAgICAgICAgICAgcmV0dXJuIENv
bnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUp
IH0pOwogICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPExhYmVsPiB0YXJnZXRMYWJlbEZvckJy
YW5jaCgpIGNvbnN0CkBAIC0xMDAsMTYgKzEwMCwyNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm4gbV9jb250aW51YXRpb247CiAgICAgICAgIH0KIAorICAgICAgICB1bnNpZ25lZCB0YXJn
ZXRBcml0eSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPENvbnRyb2xMb29wPigqdGhpcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
c2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1
cmUtPnJldHVybkNvdW50KCk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzdGFja1Np
emUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2l6ZTsgfQorCiAgICAgICAgIEJsb2NrU2lnbmF0
dXJlIG1fc2lnbmF0dXJlOwotICAgICAgICBFeHByZXNzaW9uTGlzdCBtX3Jlc3VsdHM7CisgICAg
ICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwogICAgICAgICBSZWZQdHI8TGFiZWw+IG1fY29udGlu
dWF0aW9uOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAg
ICAgICAgQ29udHJvbFR5cGUoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgcmVzdWx0cywgUmVmUHRyPExhYmVsPiBjb250aW51YXRpb24sIFQgdCkKKyAgICAg
ICAgQ29udHJvbFR5cGUoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1Np
emUsIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24sIFQmJiB0KQogICAgICAgICAgICAgOiBC
YXNlKFdURk1vdmUodCkpCiAgICAgICAgICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKLSAg
ICAgICAgICAgICwgbV9yZXN1bHRzKHJlc3VsdHMpCisgICAgICAgICAgICAsIG1fc3RhY2tTaXpl
KHN0YWNrU2l6ZSkKICAgICAgICAgICAgICwgbV9jb250aW51YXRpb24oV1RGTW92ZShjb250aW51
YXRpb24pKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTEzNywxOCArMTQ2LDMxIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0QSYg
ZGVzdGluYXRpb25zLCBjb25zdCBFeHByZXNzaW9uTGlzdEImIHZhbHVlcykKICAgICB7CiAgICAg
ICAgIEFTU0VSVChkZXN0aW5hdGlvbnMuc2l6ZSgpIDw9IHZhbHVlcy5zaXplKCkpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAg
ICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgZGVzdGluYXRpb25zW2Rlc3RpbmF0aW9ucy5zaXpl
KCkgLSBpIC0gMV0sIHZhbHVlc1t2YWx1ZXMuc2l6ZSgpIC0gaSAtIDFdKTsKKyAgICAgICAgYXV0
byBvZmZzZXQgPSB2YWx1ZXMuc2l6ZSgpIC0gZGVzdGluYXRpb25zLnNpemUoKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGF1dG8gZHN0ID0gZGVzdGluYXRpb25zW2ldOworICAgICAgICAgICAgYXV0byBzcmMg
PSB2YWx1ZXNbb2Zmc2V0ICsgaV07CisgICAgICAgICAgICBpZiAoZHN0ID09IHNyYykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgZHN0
LCBzcmMpOworICAgICAgICB9CiAgICAgfQogCisgICAgRXhwcmVzc2lvblR5cGUgcHVzaCgpCisg
ICAgeworICAgICAgICBtX21heFN0YWNrU2l6ZSA9IHN0ZDo6bWF4KG1fbWF4U3RhY2tTaXplLCAr
K21fc3RhY2tTaXplKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1f
c3RhY2tTaXplIC0gMSk7CisgICAgfQorCisgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygp
IHsgLS1tX3N0YWNrU2l6ZTsgfQogCi0gICAgc3RhdGljIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhw
cmVzc2lvbigpIHsgcmV0dXJuIG51bGxwdHI7IH07CisgICAgc3RhdGljIEV4cHJlc3Npb25UeXBl
IGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIFZpcnR1YWxSZWdpc3RlciB7IH07IH07CiAgICAg
U3RhY2sgY3JlYXRlU3RhY2soKSB7IHJldHVybiBTdGFjaygpOyB9CiAgICAgYm9vbCBpc0NvbnRy
b2xUeXBlSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8Q29udHJvbElmPihjb250cm9sKTsgfQogCiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsK
LSAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCB1aW50NjRfdCk7CisgICAgRXhw
cmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgaW50NjRfdCk7CiAKICAgICAvLyBSZWZlcmVu
Y2VzCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmVmSXNOdWxsKEV4
cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKQEAgLTE4NywxNCAr
MjA5LDE1IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRCbG9jayhCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlw
ZSYgbmV3QmxvY2ssIFN0YWNrJiBuZXdTdGFjayk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkTG9vcChCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNr
LCBDb250cm9sVHlwZSYgYmxvY2ssIFN0YWNrJiBuZXdTdGFjaywgdWludDMyX3QgbG9vcEluZGV4
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENv
bnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7Ci0gICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sVHlwZSYsIGNvbnN0IEV4cHJlc3Npb25M
aXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250
cm9sVHlwZSYsIFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKIAotICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sVHlwZSYsIGNvbnN0IEV4
cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sVHlwZSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Ci0gICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
Y29uc3QgVmVjdG9yPENvbnRyb2xUeXBlKj4mIHRhcmdldHMsIENvbnRyb2xUeXBlJiBkZWZhdWx0
VGFyZ2V0cywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhw
cmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmLCBjb25zdCBTdGFj
ayYgZXhwcmVzc2lvblN0YWNrID0geyB9KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmLCBTdGFjayYgcmV0dXJuVmFsdWVz
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJv
bFR5cGUmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFN0YWNrJiByZXR1cm5WYWx1ZXMpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZSo+JiB0YXJnZXRzLCBDb250
cm9sVHlwZSYgZGVmYXVsdFRhcmdldHMsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0
YWNrJiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiwgY29uc3QgU3RhY2smIGV4cHJl
c3Npb25TdGFjayA9IHsgfSwgYm9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlKTsKIAog
ICAgIC8vIENhbGxzCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2Fs
bCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMpOwpAQCAtMjA1LDcgKzIyOCw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50R2Vu
ZXJhdG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCi0gICAgdm9pZCBkdW1w
KGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QqKSB7IH0K
KyAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBTdGFjayop
IHsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBHZW5lcmljTGFiZWw8V2FzbTo6R2VuZXJhdG9y
VHJhaXRzPjsKQEAgLTIxNCwxMiArMjM3LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVk
IHN0YWNrT2Zmc2V0OwogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQXJndW1lbnRzOwog
ICAgICAgICBFeHByZXNzaW9uTGlzdCBhcmd1bWVudHM7Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0
IHJlc3VsdHM7CisgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwcmVzc2lvbkxpc3Qm
KT4gY29tbWl0UmVzdWx0czsKICAgICB9OwogCi0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2Fs
bEluZm9ybWF0aW9uRm9yKGNvbnN0IFNpZ25hdHVyZSYsIENhbGxSb2xlID0gQ2FsbFJvbGU6OkNh
bGxlcik7CisgICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVy
KGNvbnN0IFNpZ25hdHVyZSYpOworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IGNhbGxJ
bmZvcm1hdGlvbkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmKTsKIAotICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCh1aW50MzJfdCBpbmRleCkKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yV2FzbUxvY2FsKHVpbnQzMl90IGluZGV4KQogICAg
IHsKICAgICAgICAgaWYgKGluZGV4IDwgbV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzKQogICAg
ICAgICAgICAgcmV0dXJuIG1fbm9ybWFsaXplZEFyZ3VtZW50c1tpbmRleF07CkBAIC0yMjcsMjcg
KzI1MSw4MiBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBhdXRvJiBjYWxsaW5nQ29udmVudGlv
biA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpOwogICAgICAgICBjb25zdCB1aW50MzJfdCBncHJD
b3VudCA9IGNhbGxpbmdDb252ZW50aW9uLmdwckFyZ3Muc2l6ZSgpOwogICAgICAgICBjb25zdCB1
aW50MzJfdCBmcHJDb3VudCA9IGNhbGxpbmdDb252ZW50aW9uLmZwckFyZ3Muc2l6ZSgpOwotICAg
ICAgICByZXR1cm4gOjpKU0M6OnZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbV9jb2Rl
QmxvY2stPm1fbnVtQXJndW1lbnRzICsgZ3ByQ291bnQgKyBmcHJDb3VudCArIG51bWJlck9mTExJ
bnRDYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGluZGV4IC0gbV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzICsgZ3ByQ291bnQgKyBm
cHJDb3VudCArIG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzKTsKICAgICB9CiAKLSAg
ICBFeHByZXNzaW9uTGlzdCB0bXBzRm9yU2lnbmF0dXJlKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVy
ZSkKKyAgICBFeHByZXNzaW9uVHlwZSBqc051bGxDb25zdGFudCgpCiAgICAgewotICAgICAgICBF
eHByZXNzaW9uTGlzdCByZXN1bHQoc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKQot
ICAgICAgICAgICAgcmVzdWx0W2ldID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9qc051bGxDb25zdGFudC5pc1ZhbGlkKCkp
KSB7CisgICAgICAgICAgICBtX2pzTnVsbENvbnN0YW50ID0gVmlydHVhbFJlZ2lzdGVyKEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb2RlQmxvY2stPm1fY29uc3RhbnRzLnNpemUoKSk7
CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudHMuYXBwZW5kKEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBH
ZW5lcmF0ZWRXYXNtQnl0ZWNvZGVzKCkpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5t
X2NvbnN0YW50VHlwZXMuYXBwZW5kKFR5cGU6OkFueXJlZik7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG1fanNOdWxsQ29uc3RhbnQ7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvblR5cGUganNO
dWxsQ29uc3RhbnQoKQorICAgIEV4cHJlc3Npb25UeXBlIHplcm9Db25zdGFudCgpCiAgICAgewot
ICAgICAgICBpZiAoIW1fanNOdWxsQ29uc3RhbnQpCi0gICAgICAgICAgICBtX2pzTnVsbENvbnN0
YW50ID0gYWRkQ29uc3RhbnQoVHlwZTo6QW55cmVmLCBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KTsKLSAgICAgICAgcmV0dXJuIG1fanNOdWxsQ29uc3RhbnQ7CisgICAgICAgIGlmIChVTkxJS0VM
WSghbV96ZXJvQ29uc3RhbnQuaXNWYWxpZCgpKSkgeworICAgICAgICAgICAgbV96ZXJvQ29uc3Rh
bnQgPSBWaXJ0dWFsUmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvZGVC
bG9jay0+bV9jb25zdGFudHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2Nv
bnN0YW50cy5hcHBlbmQoMCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVt
cEdlbmVyYXRlZFdhc21CeXRlY29kZXMoKSkpCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2st
Pm1fY29uc3RhbnRUeXBlcy5hcHBlbmQoVHlwZTo6STMyKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbV96ZXJvQ29uc3RhbnQ7CisgICAgfQorCisgICAgdm9pZCBnZXREcm9wS2VlcENvdW50
KGNvbnN0IENvbnRyb2xUeXBlJiB0YXJnZXQsIHVuc2lnbmVkJiBzdGFydE9mZnNldCwgdW5zaWdu
ZWQmIGRyb3AsIHVuc2lnbmVkJiBrZWVwKQorICAgIHsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSB0
YXJnZXQuc3RhY2tTaXplKCkgKyAxOworICAgICAgICBrZWVwID0gdGFyZ2V0LnRhcmdldEFyaXR5
KCk7CisgICAgICAgIGRyb3AgPSBtX3N0YWNrU2l6ZSAtIHRhcmdldC5zdGFja1NpemUoKSAtIHRh
cmdldC50YXJnZXRBcml0eSgpOworICAgIH0KKworICAgIHZvaWQgZHJvcEtlZXAoU3RhY2smIHZh
bHVlcywgY29uc3QgQ29udHJvbFR5cGUmIHRhcmdldCwgYm9vbCBkcm9wVmFsdWVzKQorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIGtlZXA7Cisg
ICAgICAgIHVuc2lnbmVkIGRyb3A7CisKKyAgICAgICAgZ2V0RHJvcEtlZXBDb3VudCh0YXJnZXQs
IHN0YXJ0T2Zmc2V0LCBkcm9wLCBrZWVwKTsKKworICAgICAgICBpZiAoZHJvcFZhbHVlcykKKyAg
ICAgICAgICAgIHZhbHVlcy5zaHJpbmsoa2VlcCk7CisKKyAgICAgICAgaWYgKCFkcm9wKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChrZWVwKQorICAgICAgICAgICAgV2FzbURy
b3BLZWVwOjplbWl0KHRoaXMsIHN0YXJ0T2Zmc2V0LCBkcm9wLCBrZWVwKTsKKyAgICB9CisKKyAg
ICB2b2lkIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKFN0YWNrJiBleHByZXNzaW9uU3Rh
Y2spCisgICAgeworICAgICAgICBpZiAoZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBmb3IgKGludCBpID0gZXhwcmVzc2lvblN0YWNrLnNp
emUoKTsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgYXV0byBleHByZXNzaW9uID0gZXhwcmVz
c2lvblN0YWNrW2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpXTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBzbG90ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9zdGFja1NpemUgLSBp
KTsKKyAgICAgICAgICAgIGlmIChleHByZXNzaW9uICE9IHNsb3QpIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZXhwcmVzc2lvbi5pc0NvbnN0YW50KCkgfHwgZXhwcmVzc2lvbi5pc0FyZ3VtZW50
KCkgfHwgZXhwcmVzc2lvbi50b0xvY2FsKCkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAg
ICAgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIHNsb3QsIGV4cHJlc3Npb24pOworICAg
ICAgICAgICAgICAgIGV4cHJlc3Npb25TdGFja1tleHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaV0g
PSBzbG90OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgc3RydWN0IFN3
aXRjaEVudHJ5IHsKICAgICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQ7Ci0g
ICAgICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQqIGp1bXBUYXJnZXQ7CisgICAgICAgIGlu
dCoganVtcFRhcmdldDsKKyAgICB9OworCisgICAgc3RydWN0IENvbnN0YW50TWFwSGFzaFRyYWl0
cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8RW5jb2RlZEpTVmFsdWU+IHsKKyAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICAgICAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIGVtcHR5VmFsdWUoKSB7IHJldHVybiAwOyB9CisgICAgICAgIHN0
YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkgeyBz
bG90ID0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBp
c0RlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsgfQogICAgIH07CiAKICAgICBGdW5jdGlvblBhcnNlcjxM
TEludEdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwpAQCAtMjU2LDggKzMzNSwxMyBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IG1fbm9ybWFsaXplZEFyZ3Vt
ZW50czsKICAgICBIYXNoTWFwPExhYmVsKiwgVmVjdG9yPFN3aXRjaEVudHJ5Pj4gbV9zd2l0Y2hl
czsKICAgICBFeHByZXNzaW9uVHlwZSBtX2pzTnVsbENvbnN0YW50OworICAgIEV4cHJlc3Npb25U
eXBlIG1femVyb0NvbnN0YW50OwogICAgIEV4cHJlc3Npb25MaXN0IG1fdW5pdGlhbGl6ZWRMb2Nh
bHM7Ci0gICAgU3RkVW5vcmRlcmVkTWFwPHVpbnQ2NF90LCBWaXJ0dWFsUmVnaXN0ZXI+IG1fY29u
c3RhbnRNYXA7CisgICAgSGFzaE1hcDxFbmNvZGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyLCBX
VEY6OkludEhhc2g8RW5jb2RlZEpTVmFsdWU+LCBDb25zdGFudE1hcEhhc2hUcmFpdHM+IG1fY29u
c3RhbnRNYXA7CisgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4gbV9yZXN1bHRzOworICAg
IHVuc2lnbmVkIG1fc3RhY2tTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbWF4U3RhY2tTaXpl
IHsgMCB9OworICAgIHVuc2lnbmVkIG1fdG9wTGV2ZWxTdGFja1NpemU7CiB9OwogCiBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaHJvd1dhc21FeGNlcHRpb24gdGhy
b3dXYXNtRXhjZXB0aW9uKQpAQCAtMjcwLDEwICszNTQsMTQgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29k
ZShjb24KIH0KIAogTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmKQotICAgIDogQnl0ZWNvZGVH
ZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1bmN0aW9uSW5kZXgp
LCBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycykKKyAgICA6IEJ5dGVjb2RlR2VuZXJh
dG9yQmFzZShtYWtlVW5pcXVlPEZ1bmN0aW9uQ29kZUJsb2NrPihmdW5jdGlvbkluZGV4KSwgMCkK
ICAgICAsIG1faW5mbyhpbmZvKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgp
CiB7CisgICAgbV9jb2RlQmxvY2stPm1fbnVtVmFycyA9IG51bWJlck9mTExJbnRDYWxsZWVTYXZl
UmVnaXN0ZXJzOworICAgIG1fc3RhY2tTaXplID0gbnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdp
c3RlcnM7CisgICAgbV9tYXhTdGFja1NpemUgPSBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lz
dGVyczsKKwogICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgICAgIFRodW5rczo6c2lu
Z2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7CiAKQEAg
LTI4Myw2ICszNzEsNyBAQCBMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSQogc3RkOjp1bmlxdWVfcHRy
PEZ1bmN0aW9uQ29kZUJsb2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxpemUoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKG1fY29kZUJsb2NrKTsKKyAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVM
b2NhbHMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwgbV9tYXhTdGFja1NpemUpOwogICAgIG1fY29kZUJsb2NrLT5zZXRJbnN0cnVjdGlvbnMobV93
cml0ZXIuZmluYWxpemUoKSk7CiAgICAgcmV0dXJuIFdURk1vdmUobV9jb2RlQmxvY2spOwogfQpA
QCAtMjkwLDggKzM3OSwzMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IExM
SW50R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiAvLyBHZW5lcmF0ZWQgZnJvbSB3YXNtLmpzb24KICNp
bmNsdWRlICJXYXNtTExJbnRHZW5lcmF0b3JJbmxpbmVzLmgiCiAKLWF1dG8gTExJbnRHZW5lcmF0
b3I6OmNhbGxJbmZvcm1hdGlvbkZvcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ2FsbFJv
bGUgcm9sZSkgLT4gTExJbnRDYWxsSW5mb3JtYXRpb24KK2F1dG8gTExJbnRHZW5lcmF0b3I6OmNh
bGxJbmZvcm1hdGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJ
bnRDYWxsSW5mb3JtYXRpb24KIHsKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHNldHVwcyB0aGUg
c3RhY2sgbGF5b3V0IGZvciBjYWxscy4gVGhlIGRlc2lyZWQgc3RhY2sgbGF5b3V0IGlzOgorCisg
ICAgLy8gRlBSbgorICAgIC8vIC4uLgorICAgIC8vIEZQUjEKKyAgICAvLyBGUFIwCisgICAgLy8g
LS0tCisgICAgLy8gR1BSbgorICAgIC8vIC4uLgorICAgIC8vIEdQUjEKKyAgICAvLyBHUFIwCisg
ICAgLy8gLS0tLQorICAgIC8vIHN0YWNrTgorICAgIC8vIC4uLgorICAgIC8vIHN0YWNrMQorICAg
IC8vIHN0YWNrMAorICAgIC8vIC0tLQorICAgIC8vIGNhbGwgZnJhbWUgaGVhZGVyCisKKyAgICAv
LyBXZSBuZWVkIHRvIGFsbG9jYXRlIGF0IGxlYXN0IHNwYWNlIGZvciBhbGwgR1BScyBhbmQgRlBS
cy4KKyAgICAvLyBSZXR1cm4gdmFsdWVzIHVzZSB0aGUgc2FtZSBhbGxvY2F0aW9uIGxheW91dC4K
KworICAgIGNvbnN0IGF1dG8gaW5pdGlhbFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOworCiAgICAg
Y29uc3QgYXV0byYgY2FsbGluZ0NvbnZlbnRpb24gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsK
ICAgICBjb25zdCB1aW50MzJfdCBncHJDb3VudCA9IGNhbGxpbmdDb252ZW50aW9uLmdwckFyZ3Mu
c2l6ZSgpOwogICAgIGNvbnN0IHVpbnQzMl90IGZwckNvdW50ID0gY2FsbGluZ0NvbnZlbnRpb24u
ZnByQXJncy5zaXplKCk7CkBAIC0yOTksMTQgKzQxMiw5IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6
OmNhbGxJbmZvcm1hdGlvbkZvcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ2FsbFJvbGUg
cm9sCiAgICAgdWludDMyX3Qgc3RhY2tDb3VudCA9IDA7CiAgICAgdWludDMyX3QgZ3BySW5kZXgg
PSAwOwogICAgIHVpbnQzMl90IGZwckluZGV4ID0gMDsKLQotICAgIFZlY3RvcjxSZWZQdHI8UmVn
aXN0ZXJJRD4sIDE2PiByZWdpc3RlcnM7Ci0KLSAgICBFeHByZXNzaW9uTGlzdCBhcmd1bWVudHMo
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7Ci0gICAgRXhwcmVzc2lvbkxpc3QgcmVzdWx0cyhz
aWduYXR1cmUucmV0dXJuQ291bnQoKSk7CisgICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CiAK
ICAgICBhdXRvIGFsbG9jYXRlU3RhY2tSZWdpc3RlciA9IFsmXShUeXBlIHR5cGUpIHsKLSAgICAg
ICAgQVNTRVJUKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcik7CiAgICAgICAgIHN3aXRjaCAodHlw
ZSkgewogICAgICAgICBjYXNlIFR5cGU6OkkzMjoKICAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CkBA
IC0zMTQsMTkgKzQyMiwxNSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25G
b3IoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENhbGxSb2xlIHJvbAogICAgICAgICBjYXNl
IFR5cGU6OkZ1bmNyZWY6CiAgICAgICAgICAgICBpZiAoZ3BySW5kZXggPCBncHJDb3VudCkKICAg
ICAgICAgICAgICAgICArK2dwckluZGV4OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgcmVnaXN0ZXJzLmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CisgICAgICAgICAgICBlbHNl
IGlmIChzdGFja0luZGV4KysgPj0gc3RhY2tDb3VudCkKICAgICAgICAgICAgICAgICArK3N0YWNr
Q291bnQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBU
eXBlOjpGMzI6CiAgICAgICAgIGNhc2UgVHlwZTo6RjY0OgogICAgICAgICAgICAgaWYgKGZwcklu
ZGV4IDwgZnByQ291bnQpCiAgICAgICAgICAgICAgICAgKytmcHJJbmRleDsKLSAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVycy5hcHBlbmQobmV3VGVtcG9yYXJ5KCkp
OworICAgICAgICAgICAgZWxzZSBpZiAoc3RhY2tJbmRleCsrID49IHN0YWNrQ291bnQpCiAgICAg
ICAgICAgICAgICAgKytzdGFja0NvdW50OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgVm9pZDoKICAgICAgICAgY2FzZSBGdW5jOgpAQCAtMzM1LDkyICs0
MzksMTQ1IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvcihjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgQ2FsbFJvbGUgcm9sCiAgICAgfTsKIAogCi0gICAgaWYgKHJv
bGUgPT0gQ2FsbFJvbGU6OkNhbGxlZSkgewotICAgICAgICAvLyBSZXVzZSB0aGUgc2xvdHMgd2Ug
YWxsb2NhdGVkIHRvIHNwaWxsIHRoZSByZWdpc3RlcnMgaW4gYWRkQXJndW1lbnRzCi0gICAgICAg
IGZvciAodWludDMyX3QgaSA9IGdwckNvdW50ICsgZnByQ291bnQ7IGktLTspCi0gICAgICAgICAg
ICByZWdpc3RlcnMuYXBwZW5kKG5ldyBSZWdpc3RlcklEKDo6SlNDOjp2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycyArIGkpKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGdwckNvdW50OyBpKyspCi0g
ICAgICAgICAgICByZWdpc3RlcnMuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGZwckNvdW50OyBpKyspCi0gICAgICAgICAgICByZWdpc3Rl
cnMuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLQotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKQotICAgICAgICAgICAgYWxsb2Nh
dGVTdGFja1JlZ2lzdGVyKHNpZ25hdHVyZS5hcmd1bWVudChpKSk7Ci0gICAgICAgIGdwckluZGV4
ID0gMDsKLSAgICAgICAgZnBySW5kZXggPSAwOwotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7IGkrKykKLSAgICAgICAgICAgIGFsbG9jYXRl
U3RhY2tSZWdpc3RlcihzaWduYXR1cmUucmV0dXJuVHlwZShpKSk7CisgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykKKyAgICAgICAgYWxs
b2NhdGVTdGFja1JlZ2lzdGVyKHNpZ25hdHVyZS5hcmd1bWVudChpKSk7CisKKyAgICBncHJJbmRl
eCA9IDA7CisgICAgZnBySW5kZXggPSAwOworICAgIHN0YWNrSW5kZXggPSAwOworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgaSsrKQorICAgICAg
ICBhbGxvY2F0ZVN0YWNrUmVnaXN0ZXIoc2lnbmF0dXJlLnJldHVyblR5cGUoaSkpOworCisgICAg
Ly8gRklYTUU6IHdlIGFyZSBhbGxvY2F0aW5nIHRoZSBleHRyYSBzcGFjZSBmb3IgdGhlIGFyZ3Vt
ZW50L3JldHVybiBjb3VudCBpbiBvcmRlciB0byBhdm9pZCBpbnRlcmZlcmVuY2UsIGJ1dCB3ZSBj
b3VsZCBkbyBiZXR0ZXIKKyAgICAvLyBOT1RFOiBXZSBpbmNyZWFzZSBhcmcgY291bnQgYnkgMSBm
b3IgdGhlIGNhc2Ugb2YgaW5kaXJlY3QgY2FsbHMKKyAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1h
eChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpICsgMSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkp
ICsgZ3ByQ291bnQgKyBmcHJDb3VudCArIHN0YWNrQ291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVyczsKKyAgICBpZiAobV9zdGFja1NpemUgJSBzdGFja0FsaWdubWVudFJlZ2lz
dGVycygpKQorICAgICAgICArK21fc3RhY2tTaXplOworICAgIGlmIChtX21heFN0YWNrU2l6ZSA8
IG1fc3RhY2tTaXplKQorICAgICAgICBtX21heFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOworCisK
KyAgICBFeHByZXNzaW9uTGlzdCBhcmd1bWVudHMoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7
CisgICAgRXhwcmVzc2lvbkxpc3QgdGVtcG9yYXJ5UmVzdWx0cyhzaWduYXR1cmUucmV0dXJuQ291
bnQoKSk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IG1fc3RhY2tTaXplOwor
ICAgIGNvbnN0IHVuc2lnbmVkIGJhc2UgPSBzdGFja09mZnNldCAtIENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzOworCisgICAgY29uc3QgdWludDMyX3QgZ3ByTGltaXQgPSBiYXNlIC0g
c3RhY2tDb3VudCAtIGdwckNvdW50OworICAgIGNvbnN0IHVpbnQzMl90IGZwckxpbWl0ID0gZ3By
TGltaXQgLSBmcHJDb3VudDsKKworICAgIHN0YWNrSW5kZXggPSBiYXNlOworICAgIGdwckluZGV4
ID0gYmFzZSAtIHN0YWNrQ291bnQ7CisgICAgZnBySW5kZXggPSBncHJJbmRleCAtIGdwckNvdW50
OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
OyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAg
ICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICBjYXNl
IFR5cGU6OkFueXJlZjoKKyAgICAgICAgY2FzZSBUeXBlOjpGdW5jcmVmOgorICAgICAgICAgICAg
aWYgKGdwckluZGV4ID4gZ3ByTGltaXQpCisgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1ncHJJbmRleCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1z
dGFja0luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoK
KyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBpZiAoZnBySW5kZXggPiBmcHJM
aW1pdCkKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbCgtLWZwckluZGV4KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1
bWVudHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLXN0YWNrSW5kZXgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgY2FzZSBGdW5jOgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogICAgIH0K
IAotICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0OwotICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpD
YWxsZWUpCi0gICAgICAgIHN0YWNrT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1yZWdp
c3RlcnMubGFzdCgpLT5pbmRleCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gQWxpZ24gdGhl
IHN0YWNrCi0gICAgICAgIGF1dG8gY29tcHV0ZVN0YWNrT2Zmc2V0ID0gWyZdIHsKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXJlZ2lzdGVycy5sYXN0KCktPmluZGV4
KCkpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIH07Ci0gICAg
ICAgIHdoaWxlIChjb21wdXRlU3RhY2tPZmZzZXQoKSAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJz
KCkpCi0gICAgICAgICAgICByZWdpc3RlcnMuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLSAgICAg
ICAgc3RhY2tPZmZzZXQgPSBjb21wdXRlU3RhY2tPZmZzZXQoKTsKKyAgICBzdGFja0luZGV4ID0g
YmFzZTsKKyAgICBncHJJbmRleCA9IGJhc2UgLSBzdGFja0NvdW50OworICAgIGZwckluZGV4ID0g
Z3BySW5kZXggLSBncHJDb3VudDsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0
dXJlLnJldHVybkNvdW50KCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1
cm5UeXBlKGkpKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6
Okk2NDoKKyAgICAgICAgY2FzZSBUeXBlOjpBbnlyZWY6CisgICAgICAgIGNhc2UgVHlwZTo6RnVu
Y3JlZjoKKyAgICAgICAgICAgIGlmIChncHJJbmRleCA+IGdwckxpbWl0KQorICAgICAgICAgICAg
ICAgIHRlbXBvcmFyeVJlc3VsdHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLWdwcklu
ZGV4KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0ZW1wb3JhcnlSZXN1bHRz
W2ldID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1zdGFja0luZGV4KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6
CisgICAgICAgICAgICBpZiAoZnBySW5kZXggPiBmcHJMaW1pdCkKKyAgICAgICAgICAgICAgICB0
ZW1wb3JhcnlSZXN1bHRzW2ldID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1mcHJJbmRleCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVzdWx0c1tpXSA9
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKC0tc3RhY2tJbmRleCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAgICAgfQogCi0gICAgQVNT
RVJUKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlciB8fCAhc3RhY2tDb3VudCk7Ci0gICAgY29uc3Qg
dWludDMyX3QgbWF4R1BSSW5kZXggPSBzdGFja0NvdW50ICsgZ3ByQ291bnQ7Ci0gICAgY29uc3Qg
dWludDMyX3QgbWF4RlBSSW5kZXggPSBtYXhHUFJJbmRleCArIGZwckNvdW50OworICAgIG1fc3Rh
Y2tTaXplID0gaW5pdGlhbFN0YWNrU2l6ZTsKKworICAgIGF1dG8gY29tbWl0UmVzdWx0cyA9IFt0
aGlzLCB0ZW1wb3JhcnlSZXN1bHRzID0gV1RGTW92ZSh0ZW1wb3JhcnlSZXN1bHRzKV0oRXhwcmVz
c2lvbkxpc3QmIHJlc3VsdHMpIHsKKyAgICAgICAgZm9yIChhdXRvIHRlbXBvcmFyeVJlc3VsdCA6
IHRlbXBvcmFyeVJlc3VsdHMpIHsKKyAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9
IHB1c2goKTsKKyAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgcmVzdWx0LCB0ZW1wb3Jh
cnlSZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICByZXR1cm4gTExJbnRDYWxsSW5mb3JtYXRpb24geyBzdGFja09mZnNl
dCwgc3RhY2tDb3VudCwgV1RGTW92ZShhcmd1bWVudHMpLCBXVEZNb3ZlKGNvbW1pdFJlc3VsdHMp
IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4K
K3sKKyAgICBpZiAobV9yZXN1bHRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0czsK
KworICAgIG1fcmVzdWx0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpZ25hdHVyZS5yZXR1cm5D
b3VudCgpKTsKKworICAgIGNvbnN0IGF1dG8mIGNhbGxpbmdDb252ZW50aW9uID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uKCk7CisgICAgY29uc3QgdWludDMyX3QgZ3ByQ291bnQgPSBjYWxsaW5nQ29u
dmVudGlvbi5ncHJBcmdzLnNpemUoKTsKKyAgICBjb25zdCB1aW50MzJfdCBmcHJDb3VudCA9IGNh
bGxpbmdDb252ZW50aW9uLmZwckFyZ3Muc2l6ZSgpOworCisgICAgdWludDMyX3QgZ3BySW5kZXgg
PSAwOworICAgIHVpbnQzMl90IGZwckluZGV4ID0gZ3ByQ291bnQ7CiAgICAgdWludDMyX3Qgc3Rh
Y2tJbmRleCA9IDA7Ci0gICAgYXV0byBhcHBlbmRGb3JUeXBlID0gWyZdKFR5cGUgdHlwZSwgdW5z
aWduZWQgaW5kZXgsIGF1dG8mIHZlY3RvcikgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjb25zdCB1aW50MzJfdCBtYXhHUFJJbmRleCA9IGdwckNvdW50OworICAgIGNvbnN0IHVpbnQz
Ml90IG1heEZQUkluZGV4ID0gbWF4R1BSSW5kZXggKyBmcHJDb3VudDsKKworICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgaSsrKSB7CisgICAgICAg
IHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoaSkpIHsKICAgICAgICAgY2FzZSBUeXBlOjpJ
MzI6CiAgICAgICAgIGNhc2UgVHlwZTo6STY0OgogICAgICAgICBjYXNlIFR5cGU6OkFueXJlZjoK
ICAgICAgICAgY2FzZSBUeXBlOjpGdW5jcmVmOgogICAgICAgICAgICAgaWYgKGdwckluZGV4IDwg
bWF4R1BSSW5kZXgpCi0gICAgICAgICAgICAgICAgdmVjdG9yW2luZGV4XSA9IHJlZ2lzdGVyc1ty
ZWdpc3RlcnMuc2l6ZSgpIC0gZ3BySW5kZXgrKyAtIDFdOwotICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcikKLSAgICAgICAgICAg
ICAgICAgICAgdmVjdG9yW2luZGV4XSA9IHJlZ2lzdGVyc1tyZWdpc3RlcnMuc2l6ZSgpIC0gc3Rh
Y2tJbmRleCsrIC0gMV07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICB2ZWN0b3JbaW5kZXhdID0gbmV3IFJlZ2lzdGVySUQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoc3RhY2tJbmRleCsrKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9yZXN1
bHRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChudW1iZXJPZkxMSW50Q2FsbGVlU2F2
ZVJlZ2lzdGVycyArIGdwckluZGV4KyspKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3Jlc3VsdHMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KHN0YWNrSW5k
ZXgrKykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZTo6RjMyOgogICAg
ICAgICBjYXNlIFR5cGU6OkY2NDoKICAgICAgICAgICAgIGlmIChmcHJJbmRleCA8IG1heEZQUklu
ZGV4KQotICAgICAgICAgICAgICAgIHZlY3RvcltpbmRleF0gPSByZWdpc3RlcnNbcmVnaXN0ZXJz
LnNpemUoKSAtIGZwckluZGV4KysgLSAxXTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxsZXIpCi0gICAgICAgICAgICAgICAgICAg
IHZlY3RvcltpbmRleF0gPSByZWdpc3RlcnNbcmVnaXN0ZXJzLnNpemUoKSAtIHN0YWNrSW5kZXgr
KyAtIDFdOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9y
W2luZGV4XSA9IG5ldyBSZWdpc3RlcklEKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KHN0YWNr
SW5kZXgrKykpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBl
bmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3Rl
cnMgKyBmcHJJbmRleCsrKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9y
ZXN1bHRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChzdGFja0luZGV4KyspKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZvaWQ6CiAgICAgICAgIGNhc2UgRnVu
YzoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0K
LSAgICB9OwotCi0gICAgZ3BySW5kZXggPSBzdGFja0NvdW50OwotICAgIGZwckluZGV4ID0gbWF4
R1BSSW5kZXg7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCk7IGkrKykKLSAgICAgICAgYXBwZW5kRm9yVHlwZShzaWduYXR1cmUuYXJndW1lbnQo
aSksIGksIGFyZ3VtZW50cyk7Ci0gICAgZ3BySW5kZXggPSBzdGFja0NvdW50OwotICAgIGZwcklu
ZGV4ID0gbWF4R1BSSW5kZXg7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS5yZXR1cm5Db3VudCgpOyBpKyspCi0gICAgICAgIGFwcGVuZEZvclR5cGUoc2lnbmF0dXJlLnJl
dHVyblR5cGUoaSksIGksIHJlc3VsdHMpOwotCi0gICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNh
bGxlcikgewotICAgICAgICAvLyBSZXNlcnZlIHNwYWNlIGZvciBjYWxsIGZyYW1lLgotICAgICAg
ICBWZWN0b3I8UmVmUHRyPFJlZ2lzdGVySUQ+LCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lz
dGVycyArIDIsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBjYWxsRnJhbWU7Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7ICsraSkKLSAg
ICAgICAgICAgIGNhbGxGcmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwogICAgIH0KIAotICAg
IHJldHVybiBMTEludENhbGxJbmZvcm1hdGlvbiB7IHN0YWNrT2Zmc2V0LCBzdGFja0NvdW50LCBX
VEZNb3ZlKGFyZ3VtZW50cyksIFdURk1vdmUocmVzdWx0cykgfTsKKyAgICByZXR1cm4gbV9yZXN1
bHRzOwogfQogCisKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIG1fY29kZUJsb2NrLT5t
X251bUFyZ3VtZW50cyA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CkBAIC00MzUsOSArNTky
LDkgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgdWludDMyX3QgZnBySW5kZXggPSBtYXhH
UFJJbmRleDsKICAgICB1aW50MzJfdCBzdGFja0luZGV4ID0gMDsKIAotICAgIFZlY3RvcjxSZWZQ
dHI8UmVnaXN0ZXJJRD4+IHJlZ2lzdGVyQXJndW1lbnRzKGdwckNvdW50ICsgZnByQ291bnQpOwor
ICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IHJlZ2lzdGVyQXJndW1lbnRzKGdwckNvdW50ICsg
ZnByQ291bnQpOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBncHJDb3VudCArIGZwckNv
dW50OyBpKyspCi0gICAgICAgIHJlZ2lzdGVyQXJndW1lbnRzW2ldID0gYWRkVmFyKCk7CisgICAg
ICAgIHJlZ2lzdGVyQXJndW1lbnRzW2ldID0gcHVzaCgpOwogCiAgICAgY29uc3QgYXV0byBhZGRB
cmd1bWVudCA9IFsmXSh1aW50MzJfdCBpbmRleCwgdWludDMyX3QmIGNvdW50LCB1aW50MzJfdCBt
YXgpIHsKICAgICAgICAgaWYgKGNvdW50IDwgbWF4KQpAQCAtNDY0LDEzICs2MjEsMTYgQEAgYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2NvZGVCbG9jay0+
bV9udW1WYXJzICs9IGdwckNvdW50ICsgZnByQ291bnQ7CisKICAgICByZXR1cm4geyB9OwogfQog
CiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgbV9jb2RlQmxvY2stPm1fbnVtVmFycyArPSBjb3Vu
dDsKICAgICB3aGlsZSAoY291bnQtLSkgewotICAgICAgICBhdXRvIGxvY2FsID0gYWRkVmFyKCk7
CisgICAgICAgIGF1dG8gbG9jYWwgPSBwdXNoKCk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewog
ICAgICAgICBjYXNlIFR5cGU6OkFueXJlZjoKICAgICAgICAgY2FzZSBUeXBlOjpGdW5jcmVmOgpA
QCAtNDg1LDQ1ICs2NDUsNjkgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0
eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogCiB2b2lkIExMSW50R2VuZXJh
dG9yOjpkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkKIHsKKyAgICBpZiAobV91bml0aWFsaXplZExv
Y2Fscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gbnVsbCA9IGpzTnVs
bENvbnN0YW50KCk7CiAgICAgZm9yIChhdXRvIGxvY2FsIDogbV91bml0aWFsaXplZExvY2FscykK
ICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBsb2NhbCwgbnVsbCk7CiAgICAgbV91bml0aWFs
aXplZExvY2Fscy5jbGVhcigpOwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDb25zdGFu
dChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKSAtPiBFeHByZXNzaW9uVHlwZQorYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKSAtPiBFeHBy
ZXNzaW9uVHlwZQogewotICAgIFZpcnR1YWxSZWdpc3RlciBzb3VyY2UoRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXggKyBtX2NvZGVCbG9jay0+bV9jb25zdGFudHMuc2l6ZSgpKTsKLSAgICBhdXRv
IHJlc3VsdCA9IG1fY29uc3RhbnRNYXAuZW1wbGFjZSh2YWx1ZSwgc291cmNlKTsKLSAgICBpZiAo
cmVzdWx0LnNlY29uZCkgeworICAgIGF1dG8gY29uc3RhbnQgPSBbJl0geworICAgICAgICBpZiAo
IXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHplcm9Db25zdGFudCgpOworCisgICAgICAgIGlm
ICh2YWx1ZSA9PSBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKQorICAgICAgICAgICAgcmV0dXJu
IGpzTnVsbENvbnN0YW50KCk7CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNvdXJjZShGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5zaXplKCkp
OworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fY29uc3RhbnRNYXAuYWRkKHZhbHVlLCBzb3VyY2Up
OworICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5h
cHBlbmQodmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEdlbmVyYXRl
ZFdhc21CeXRlY29kZXMoKSkpCiAgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudFR5
cGVzLmFwcGVuZCh0eXBlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291cmNlID0gcmVzdWx0LmZp
cnN0LT5zZWNvbmQ7Ci0gICAgYXV0byB0YXJnZXQgPSBuZXdUZW1wb3JhcnkoKTsKLSAgICBXYXNt
TW92OjplbWl0KHRoaXMsIHRhcmdldCwgc291cmNlKTsKLSAgICByZXR1cm4gdGFyZ2V0OworICAg
ICAgICByZXR1cm4gc291cmNlOworICAgIH07CisgICAgLy8gbGVhdmUgYSBob2xlIGlmIHdlIG5l
ZWQgdG8gbWF0ZXJpYWxpemUgdGhlIGNvbnN0YW50CisgICAgcHVzaCgpOworICAgIHJldHVybiBj
b25zdGFudCgpOwogfQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIC8v
IEZJWE1FOiBSZW1vdmUgdW5uZWNlc3NhcnkgbW92ZXMKLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNjU3Ci0gICAgcmVzdWx0ID0gbmV3VGVtcG9yYXJ5
KCk7Ci0gICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCByZXN1bHQsIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGluZGV4KSk7CisgICAgLy8gbGVhdmUgYSBob2xlIGlmIHdlIG5lZWQgdG8gbWF0ZXJpYWxp
emUgdGhlIGxvY2FsCisgICAgcHVzaCgpOworICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZv
cldhc21Mb2NhbChpbmRleCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBMTEludEdlbmVy
YXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0gICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChpbmRleCksIHZhbHVlKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0ID0gdmly
dHVhbFJlZ2lzdGVyRm9yV2FzbUxvY2FsKGluZGV4KTsKKworICAgIC8vIElmIHRoaXMgbG9jYWwg
aXMgY3VycmVudGx5IG9uIHRoZSBzdGFjayB3ZSBuZWVkIHRvIG1hdGVyaWFsaXplIGl0LCBvdGhl
cndpc2UgaXQnbGwgc2VlIHRoZSBuZXcgdmFsdWUgaW5zdGVhZCBvZiB0aGUgb2xkIG9uZQorICAg
IFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+ZXhwcmVzc2lvblN0YWNrKCk7Cisg
ICAgZm9yIChpbnQgaSA9IGV4cHJlc3Npb25TdGFjay5zaXplKCk7IGkgPiAwOyAtLWkpIHsKKyAg
ICAgICAgYXV0byBleHByZXNzaW9uID0gZXhwcmVzc2lvblN0YWNrW2V4cHJlc3Npb25TdGFjay5z
aXplKCkgLSBpXTsKKyAgICAgICAgaWYgKGV4cHJlc3Npb24gPT0gdGFyZ2V0KSB7CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fc3Rh
Y2tTaXplIC0gaSk7CisgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIHNsb3QsIGV4cHJl
c3Npb24pOworICAgICAgICAgICAgZXhwcmVzc2lvblN0YWNrW2V4cHJlc3Npb25TdGFjay5zaXpl
KCkgLSBpXSA9IHNsb3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBXYXNtTW92OjplbWl0KHRo
aXMsIHRhcmdldCwgdmFsdWUpOworCiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBMTEludEdl
bmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7CisgICAg
cmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21HZXRHbG9iYWw6OmVtaXQodGhpcywgcmVzdWx0LCBp
bmRleCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTU0MCwxMSArNzI0LDEzIEBAIGF1dG8gTExJ
bnRHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFs
dWUpIC0+IFBhcnRpYWxSCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWdu
YXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBibG9j
aywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKKyAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7
CisgICAgbWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMobmV3U3RhY2spOworCiAgICAgUmVm
PExhYmVsPiBib2R5ID0gbmV3RW1pdHRlZExhYmVsKCk7CiAgICAgUmVmPExhYmVsPiBjb250aW51
YXRpb24gPSBuZXdMYWJlbCgpOwogCi0gICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVy
ZSwgZW5jbG9zaW5nU3RhY2spOwotICAgIGJsb2NrID0gQ29udHJvbFR5cGU6Omxvb3Aoc2lnbmF0
dXJlLCBuZXdTdGFjaywgV1RGTW92ZShib2R5KSwgV1RGTW92ZShjb250aW51YXRpb24pKTsKKyAg
ICBibG9jayA9IENvbnRyb2xUeXBlOjpsb29wKHNpZ25hdHVyZSwgbV9zdGFja1NpemUsIFdURk1v
dmUoYm9keSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CiAKICAgICBWZWN0b3I8VmlydHVhbFJl
Z2lzdGVyPiBvc3JFbnRyeURhdGE7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fY29k
ZUJsb2NrLT5tX251bUFyZ3VtZW50czsgaSsrKQpAQCAtNTU0LDExICs3NDAsMTEgQEAgYXV0byBM
TEludEdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBl
bmNsb3NpbmdTdGFjaywgQ28KICAgICBjb25zdCB1aW50MzJfdCBncHJDb3VudCA9IGNhbGxpbmdD
b252ZW50aW9uLmdwckFyZ3Muc2l6ZSgpOwogICAgIGNvbnN0IHVpbnQzMl90IGZwckNvdW50ID0g
Y2FsbGluZ0NvbnZlbnRpb24uZnByQXJncy5zaXplKCk7CiAgICAgZm9yIChpbnQzMl90IGkgPSBn
cHJDb3VudCArIGZwckNvdW50ICsgbnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnM7IGkg
PCBtX2NvZGVCbG9jay0+bV9udW1WYXJzOyBpKyspCi0gICAgICAgIG9zckVudHJ5RGF0YS5hcHBl
bmQoOjpKU0M6OnZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKKyAgICAgICAgb3NyRW50cnlE
YXRhLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNr
KCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgewotICAgICAgICBFeHByZXNzaW9uTGlzdCYgZXhw
cmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBt
X3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjazsKICAgICAgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKQot
ICAgICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChleHByZXNzaW9uLT52aXJ0dWFsUmVnaXN0
ZXIoKSk7CisgICAgICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24pOwogICAg
IH0KIAogICAgIFdhc21Mb29wSGludDo6ZW1pdCh0aGlzKTsKQEAgLTU3MCwxMyArNzU2LDE0IEBA
IGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBT
dGFjayYgZW5jbG9zaW5nU3RhY2ssIENvCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRvcExl
dmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkgLT4gQ29udHJvbFR5cGUKIHsKLSAgICByZXR1
cm4gQ29udHJvbFR5cGU6OnRvcExldmVsKHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25hdHVyZShzaWdu
YXR1cmUpLCBuZXdMYWJlbCgpKTsKKyAgICBtX3RvcExldmVsU3RhY2tTaXplID0gbV9zdGFja1Np
emU7CisgICAgcmV0dXJuIENvbnRyb2xUeXBlOjp0b3BMZXZlbChzaWduYXR1cmUsIG1fc3RhY2tT
aXplLCBuZXdMYWJlbCgpKTsKIH0KIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQmxvY2soQmxv
Y2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBl
JiBuZXdCbG9jaywgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgbmV3
U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOwotICAgIG5ld0Js
b2NrID0gQ29udHJvbFR5cGU6OmJsb2NrKHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25hdHVyZShzaWdu
YXR1cmUpLCBuZXdMYWJlbCgpKTsKKyAgICBuZXdCbG9jayA9IENvbnRyb2xUeXBlOjpibG9jayhz
aWduYXR1cmUsIG1fc3RhY2tTaXplLCBuZXdMYWJlbCgpKTsKICAgICByZXR1cm4geyB9OwogfQog
CkBAIC01ODgsMTE0ICs3NzUsMTQ5IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZElmKEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTCiAgICAgV2Fz
bUpmYWxzZTo6ZW1pdCh0aGlzLCBjb25kaXRpb24sIGFsdGVybmF0ZS0+YmluZCh0aGlzKSk7CiAK
ICAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7Ci0g
ICAgcmVzdWx0ID0gQ29udHJvbFR5cGU6OmlmXyhzaWduYXR1cmUsIHRtcHNGb3JTaWduYXR1cmUo
c2lnbmF0dXJlKSwgV1RGTW92ZShhbHRlcm5hdGUpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbikpOwor
ICAgIHJlc3VsdCA9IENvbnRyb2xUeXBlOjppZl8oc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwgV1RG
TW92ZShhbHRlcm5hdGUpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbikpOwogICAgIHJldHVybiB7IH07
CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbFR5cGUmIGRhdGEsIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8g
TExJbnRHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbFR5cGUmIGRhdGEsIFN0YWNrJiBleHByZXNz
aW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICAvLyBUT0RPOiBkb24ndCBlbWl0IGp1
bXAgZm9yIGVtcHR5IGVsc2UKICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250
cm9sSWY+KGRhdGEpKTsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhkYXRhLm1fcmVzdWx0cywg
Y3VycmVudFN0YWNrKTsKKyAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNz
aW9uU3RhY2spOwogICAgIFdhc21KbXA6OmVtaXQodGhpcywgZGF0YS5tX2NvbnRpbnVhdGlvbi0+
YmluZCh0aGlzKSk7CiAgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEpOwogfQog
CiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYg
ZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1Np
emUoKSArIGRhdGEubV9zaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKKwogICAgIENvbnRyb2xJ
ZiYgY29udHJvbCA9IFdURjo6Z2V0PENvbnRyb2xJZj4oZGF0YSk7CiAgICAgZW1pdExhYmVsKGNv
bnRyb2wubV9hbHRlcm5hdGUuZ2V0KCkpOwotICAgIGRhdGEgPSBDb250cm9sVHlwZTo6YmxvY2so
ZGF0YS5tX3NpZ25hdHVyZSwgV1RGTW92ZShkYXRhLm1fcmVzdWx0cyksIFdURk1vdmUoZGF0YS5t
X2NvbnRpbnVhdGlvbikpOworICAgIGRhdGEgPSBDb250cm9sVHlwZTo6YmxvY2soZGF0YS5tX3Np
Z25hdHVyZSwgbV9zdGFja1NpemUsIFdURk1vdmUoZGF0YS5tX2NvbnRpbnVhdGlvbikpOwogICAg
IHJldHVybiB7IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBD
b250cm9sVHlwZSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRy
b2xUeXBlJiBkYXRhLCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgaWYgKCFkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSB7CiAgICAgICAgIFdhc21S
ZXRWb2lkOjplbWl0KHRoaXMpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIExM
SW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3IoKmRhdGEubV9zaWdu
YXR1cmUsIENhbGxSb2xlOjpDYWxsZWUpOwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGluZm8u
cmVzdWx0cywgcmV0dXJuVmFsdWVzKTsKKyAgICAvLyBubyBuZWVkIHRvIGRyb3Aga2VlcCBoZXJl
LCBzaW5jZSB3ZSBoYXZlIHRvIG1vdmUgYW55d2F5CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKCpkYXRhLm1fc2lnbmF0dXJlKSwgcmV0dXJuVmFsdWVz
KTsKICAgICBXYXNtUmV0OjplbWl0KHRoaXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiBkYXRhLCBFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sVHlwZSYg
ZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZGF0YS5tX3Jlc3VsdHMs
IHJldHVyblZhbHVlcyk7Ci0KICAgICBSZWZQdHI8TGFiZWw+IHRhcmdldCA9IGRhdGEudGFyZ2V0
TGFiZWxGb3JCcmFuY2goKTsKLSAgICBpZiAoY29uZGl0aW9uKQotICAgICAgICBXYXNtSnRydWU6
OmVtaXQodGhpcywgY29uZGl0aW9uLCB0YXJnZXQtPmJpbmQodGhpcykpOwotICAgIGVsc2UKLSAg
ICAgICAgV2FzbUptcDo6ZW1pdCh0aGlzLCB0YXJnZXQtPmJpbmQodGhpcykpOworICAgIFJlZlB0
cjxMYWJlbD4gc2tpcCA9IG51bGxwdHI7CisKKyAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExv
Y2FscyhyZXR1cm5WYWx1ZXMpOworCisgICAgaWYgKGNvbmRpdGlvbi5pc1ZhbGlkKCkpIHsKKyAg
ICAgICAgc2tpcCA9IG5ld0xhYmVsKCk7CisgICAgICAgIFdhc21KZmFsc2U6OmVtaXQodGhpcywg
Y29uZGl0aW9uLCBza2lwLT5iaW5kKHRoaXMpKTsKKyAgICB9CisKKyAgICBkcm9wS2VlcChyZXR1
cm5WYWx1ZXMsIGRhdGEsICFza2lwKTsKKyAgICBXYXNtSm1wOjplbWl0KHRoaXMsIHRhcmdldC0+
YmluZCh0aGlzKSk7CisKKyAgICBpZiAoc2tpcCkKKyAgICAgICAgZW1pdExhYmVsKCpza2lwKTsK
IAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFN3aXRjaChF
eHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZSo+JiB0YXJn
ZXRzLCBDb250cm9sVHlwZSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4
cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
U3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xUeXBl
Kj4mIHRhcmdldHMsIENvbnRyb2xUeXBlJiBkZWZhdWx0VGFyZ2V0LCBTdGFjayYgZXhwcmVzc2lv
blN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgdW5zaWduZWQgdGFibGVJbmRleCA9IG1f
Y29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYWJsZXMoKTsKLSAgICBGdW5jdGlvbkNvZGVCbG9jazo6
SnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkSnVtcFRhYmxlKHRhcmdldHMu
c2l6ZSgpKTsKKyAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNzaW9uU3Rh
Y2spOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0YXJnZXRzKQotICAgICAgICB1
bmlmeVZhbHVlc1dpdGhCbG9jayh0YXJnZXQtPm1fcmVzdWx0cywgZXhwcmVzc2lvblN0YWNrKTsK
LSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhkZWZhdWx0VGFyZ2V0Lm1fcmVzdWx0cywgZXhwcmVz
c2lvblN0YWNrKTsKKyAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gbV9jb2RlQmxvY2stPm51bWJl
ck9mSnVtcFRhYmxlcygpOworICAgIEZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFibGUmIGp1bXBU
YWJsZSA9IG1fY29kZUJsb2NrLT5hZGRKdW1wVGFibGUodGFyZ2V0cy5zaXplKCkgKyAxKTsKIAot
ICAgIFdhc21Td2l0Y2g6OmVtaXQodGhpcywgY29uZGl0aW9uLCB0YWJsZUluZGV4LCBkZWZhdWx0
VGFyZ2V0LnRhcmdldExhYmVsRm9yQnJhbmNoKCktPmJpbmQodGhpcykpOworICAgIFdhc21Td2l0
Y2g6OmVtaXQodGhpcywgY29uZGl0aW9uLCB0YWJsZUluZGV4KTsKIAogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gMDsKICAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldCA9IG1fbGFzdElu
c3RydWN0aW9uLm9mZnNldCgpOwotICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0
cykgewotICAgICAgICBSZWZQdHI8TGFiZWw+IHRhcmdldExhYmVsID0gdGFyZ2V0LT50YXJnZXRM
YWJlbEZvckJyYW5jaCgpOworCisgICAgYXV0byBhZGRUYXJnZXQgPSBbJl0oQ29udHJvbFR5cGUm
IHRhcmdldCkgeworICAgICAgICBSZWZQdHI8TGFiZWw+IHRhcmdldExhYmVsID0gdGFyZ2V0LnRh
cmdldExhYmVsRm9yQnJhbmNoKCk7CisKKyAgICAgICAgZ2V0RHJvcEtlZXBDb3VudCh0YXJnZXQs
IGp1bXBUYWJsZVtpbmRleF0uc3RhcnRPZmZzZXQsIGp1bXBUYWJsZVtpbmRleF0uZHJvcENvdW50
LCBqdW1wVGFibGVbaW5kZXhdLmtlZXBDb3VudCk7CisKICAgICAgICAgaWYgKHRhcmdldExhYmVs
LT5pc0ZvcndhcmQoKSkgewogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX3N3aXRjaGVzLmFk
ZCh0YXJnZXRMYWJlbC5nZXQoKSwgVmVjdG9yPFN3aXRjaEVudHJ5PigpKTsKLSAgICAgICAgICAg
IEFTU0VSVCghanVtcFRhYmxlW2luZGV4XSk7Ci0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLmFwcGVuZCh7IG9mZnNldCwgJmp1bXBUYWJsZVtpbmRleCsrXSB9KTsKKyAgICAgICAg
ICAgIEFTU0VSVCghanVtcFRhYmxlW2luZGV4XS50YXJnZXQpOworICAgICAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoU3dpdGNoRW50cnkgeyBvZmZzZXQsICZqdW1wVGFibGVb
aW5kZXgrK10udGFyZ2V0IH0pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW50IGp1
bXBUYXJnZXQgPSB0YXJnZXRMYWJlbC0+YmluZCh0aGlzKS50YXJnZXQoKTsKKyAgICAgICAgICAg
IGludCBqdW1wVGFyZ2V0ID0gdGFyZ2V0TGFiZWwtPmxvY2F0aW9uKCkgLSBvZmZzZXQ7CiAgICAg
ICAgICAgICBBU1NFUlQoanVtcFRhcmdldCk7Ci0gICAgICAgICAgICBqdW1wVGFibGVbaW5kZXgr
K10gPSBqdW1wVGFyZ2V0OworICAgICAgICAgICAganVtcFRhYmxlW2luZGV4KytdLnRhcmdldCA9
IGp1bXBUYXJnZXQ7CiAgICAgICAgIH0KLSAgICB9CisgICAgfTsKIAorICAgIGZvciAoY29uc3Qg
YXV0byYgdGFyZ2V0IDogdGFyZ2V0cykKKyAgICAgICAgYWRkVGFyZ2V0KCp0YXJnZXQpOworICAg
IGFkZFRhcmdldChkZWZhdWx0VGFyZ2V0KTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8g
TExJbnRHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25M
aXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0
b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNzaW9uU3RhY2sp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBDb250cm9sVHlwZSYgZGF0YSA9IGVudHJ5LmNvbnRy
b2xEYXRhOwotCi0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29wPihk
YXRhKSkKLSAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZGF0YS5tX3Jlc3VsdHMsIGV4cHJl
c3Npb25TdGFjayk7Ci0KLSAgICByZXR1cm4gYWRkRW5kVG9VbnJlYWNoYWJsZShlbnRyeSwgZXhw
cmVzc2lvblN0YWNrKTsKKyAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNz
aW9uU3RhY2spOworICAgIHJldHVybiBhZGRFbmRUb1VucmVhY2hhYmxlKGVudHJ5LCBleHByZXNz
aW9uU3RhY2ssIGZhbHNlKTsKIH0KIAogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3Rh
Y2spIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFj
aGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaywg
Ym9vbCB1bnJlYWNoYWJsZSkgLT4gUGFydGlhbFJlc3VsdAogeworI2lmIEFTU0VSVF9ESVNBQkxF
RAorICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uU3RhY2spOworI2VuZGlmCisKICAgICBDb250
cm9sVHlwZSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOwogCi0gICAgZW1pdExhYmVsKCpkYXRh
Lm1fY29udGludWF0aW9uKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh1bnJlYWNoYWJsZSB8fCBtX3N0
YWNrU2l6ZSA9PSBkYXRhLnN0YWNrU2l6ZSgpICsgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291
bnQoKSk7CiAKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KGRh
dGEpKQotICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmRWZWN0b3Io
ZGF0YS5tX3Jlc3VsdHMpOwotICAgIGVsc2UgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpCi0gICAgICAgICAgICAgICAgZW50cnku
ZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4cHJlc3Npb25TdGFja1tpXSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3Rh
Y2suYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAgfQorICAgIG1fc3RhY2tTaXplID0g
ZGF0YS5zdGFja1NpemUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1f
c2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKKyAgICAgICAgYXV0byB0bXAgPSBwdXNo
KCk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBBU1NFUlQodW5yZWFjaGFibGUgfHwg
dG1wID09IGV4cHJlc3Npb25TdGFja1tpXSk7CisjZW5kaWYKKyAgICAgICAgZW50cnkuZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKHRtcCk7CisgICAgfQorCisgICAgaWYgKG1fbGFzdE9w
Y29kZUlEID09IHdhc21fam1wICYmIGRhdGEubV9jb250aW51YXRpb24tPnVucmVzb2x2ZWRKdW1w
cygpLnNpemUoKSA9PSAxICYmIGRhdGEubV9jb250aW51YXRpb24tPnVucmVzb2x2ZWRKdW1wcygp
WzBdID09IHN0YXRpY19jYXN0PGludD4obV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpKSB7Cisg
ICAgICAgIG1fbGFzdE9wY29kZUlEID0gd2FzbV91bnJlYWNoYWJsZTsKKyAgICAgICAgbV93cml0
ZXIucmV3aW5kKG1fbGFzdEluc3RydWN0aW9uKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdExh
YmVsKCpkYXRhLm1fY29udGludWF0aW9uKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
TExJbnRHZW5lcmF0b3I6OmVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIGlmICghc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSB7Cisg
ICAgICAgIFdhc21SZXRWb2lkOjplbWl0KHRoaXMpOworICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAotICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgYWZ0ZXIgdGhpcyBz
byB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0dXJuIGhlcmUuCi0gICAgaWYgKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbFRvcExldmVsPihkYXRhKSkKLSAgICAgICAgcmV0
dXJuIGFkZFJldHVybihkYXRhLCBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisgICAg
bV9zdGFja1NpemUgPSBtX3RvcExldmVsU3RhY2tTaXplOworICAgIFZlY3RvcjxWaXJ0dWFsUmVn
aXN0ZXI+IHJldHVyblZhbHVlcyhzaWduYXR1cmUtPnJldHVybkNvdW50KCkpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAg
ICAgcmV0dXJuVmFsdWVzW2ldID0gcHVzaCgpOworCisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKCpzaWduYXR1cmUpLCByZXR1cm5WYWx1ZXMpOworICAg
IFdhc21SZXQ6OmVtaXQodGhpcyk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtNzAzLDEzICs5
MjUsMTMgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9s
RW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmUKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFk
ZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25MaXN0JiByZXN1bHRzKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkg
PT0gYXJncy5zaXplKCkpOwotICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5m
b3JtYXRpb25Gb3Ioc2lnbmF0dXJlKTsKKyAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0g
Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKHNpZ25hdHVyZSk7CiAgICAgdW5pZnlWYWx1ZXNXaXRo
QmxvY2soaW5mby5hcmd1bWVudHMsIGFyZ3MpOwotICAgIHJlc3VsdHMgPSBXVEZNb3ZlKGluZm8u
cmVzdWx0cyk7CiAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgV2FzbUNh
bGw6OmVtaXQodGhpcywgZnVuY3Rpb25JbmRleCwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1i
ZXJPZlN0YWNrQXJndW1lbnRzKTsKICAgICBlbHNlCiAgICAgICAgIFdhc21DYWxsTm9UbHM6OmVt
aXQodGhpcywgZnVuY3Rpb25JbmRleCwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0
YWNrQXJndW1lbnRzKTsKKyAgICBpbmZvLmNvbW1pdFJlc3VsdHMocmVzdWx0cyk7CiAKICAgICBy
ZXR1cm4geyB9OwogfQpAQCAtNzIyLDIwICs5NDQsMjAgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmEKICAgICBBU1NFUlQobV9pbmZvLnRhYmxlQ291bnQoKSA+IHRhYmxlSW5kZXgpOwogICAgIEFT
U0VSVChtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLnR5cGUoKSA9PSBUYWJsZUVsZW1lbnRUeXBl
OjpGdW5jcmVmKTsKIAotICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3Jt
YXRpb25Gb3Ioc2lnbmF0dXJlKTsKKyAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2Fs
bEluZm9ybWF0aW9uRm9yQ2FsbGVyKHNpZ25hdHVyZSk7CiAgICAgdW5pZnlWYWx1ZXNXaXRoQmxv
Y2soaW5mby5hcmd1bWVudHMsIGFyZ3MpOwotICAgIHJlc3VsdHMgPSBXVEZNb3ZlKGluZm8ucmVz
dWx0cyk7CiAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgV2FzbUNhbGxJ
bmRpcmVjdDo6ZW1pdCh0aGlzLCBjYWxsZWVJbmRleCwgbV9jb2RlQmxvY2stPmFkZFNpZ25hdHVy
ZShzaWduYXR1cmUpLCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVu
dHMsIHRhYmxlSW5kZXgpOwogICAgIGVsc2UKICAgICAgICAgV2FzbUNhbGxJbmRpcmVjdE5vVGxz
OjplbWl0KHRoaXMsIGNhbGxlZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKHNpZ25h
dHVyZSksIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50cywgdGFi
bGVJbmRleCk7CisgICAgaW5mby5jb21taXRSZXN1bHRzKHJlc3VsdHMpOwogCiAgICAgcmV0dXJu
IHsgfTsKIH0KIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25U
eXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0g
ICAgcmVzdWx0ID0gdmFsdWU7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21SZWZJc051
bGw6OmVtaXQodGhpcywgcmVzdWx0LCB2YWx1ZSk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtNzQz
LDcgKzk2NSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJlZklzTnVsbChFeHByZXNzaW9u
VHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKIAogYXV0byBMTEludEdlbmVyYXRv
cjo6YWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG5ld1RlbXBvcmFyeSgpOworICAgIHJlc3Vs
dCA9IHB1c2goKTsKICAgICBXYXNtUmVmRnVuYzo6ZW1pdCh0aGlzLCByZXN1bHQsIGluZGV4KTsK
IAogICAgIHJldHVybiB7IH07CkBAIC03NTEsNyArOTczLDcgQEAgYXV0byBMTEludEdlbmVyYXRv
cjo6YWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGkKIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVGFibGVHZXQodW5zaWduZWQgdGFibGVJ
bmRleCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBpbmRleDsKKyAgICByZXN1bHQgPSBwdXNoKCk7
CiAgICAgV2FzbVRhYmxlR2V0OjplbWl0KHRoaXMsIHJlc3VsdCwgaW5kZXgsIHRhYmxlSW5kZXgp
OwogCiAgICAgcmV0dXJuIHsgfTsKQEAgLTc2Niw3ICs5ODgsNyBAQCBhdXRvIExMSW50R2VuZXJh
dG9yOjphZGRUYWJsZVNldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBpbmRl
eCwgRXhwcgogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRUYWJsZVNpemUodW5zaWduZWQgdGFi
bGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAg
IHJlc3VsdCA9IG5ld1RlbXBvcmFyeSgpOworICAgIHJlc3VsdCA9IHB1c2goKTsKICAgICBXYXNt
VGFibGVTaXplOjplbWl0KHRoaXMsIHJlc3VsdCwgdGFibGVJbmRleCk7CiAKICAgICByZXR1cm4g
eyB9OwpAQCAtNzc0LDcgKzk5Niw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlU2l6
ZSh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtCiAKIGF1dG8g
TExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNz
aW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IGZpbGw7CisgICAgcmVzdWx0ID0g
cHVzaCgpOwogICAgIFdhc21UYWJsZUdyb3c6OmVtaXQodGhpcywgcmVzdWx0LCBmaWxsLCBkZWx0
YSwgdGFibGVJbmRleCk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtNzk2LDcgKzEwMTgsNyBAQCBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKIAog
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7Cisg
ICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21DdXJyZW50TWVtb3J5OjplbWl0KHRoaXMsIHJl
c3VsdCk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtODA0LDcgKzEwMjYsNyBAQCBhdXRvIExMSW50
R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNz
aW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAog
ewotICAgIHJlc3VsdCA9IGRlbHRhOworICAgIHJlc3VsdCA9IHB1c2goKTsKICAgICBXYXNtR3Jv
d01lbW9yeTo6ZW1pdCh0aGlzLCByZXN1bHQsIGRlbHRhKTsKIAogICAgIHJldHVybiB7IH07CkBA
IC04MTIsNyArMTAzNCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhw
cmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCiAKIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25U
eXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBjb25kaXRpb247CisgICAgcmVzdWx0
ID0gcHVzaCgpOwogICAgIFdhc21TZWxlY3Q6OmVtaXQodGhpcywgcmVzdWx0LCBjb25kaXRpb24s
IG5vblplcm8sIHplcm8pOwogCiAgICAgcmV0dXJuIHsgfTsKQEAgLTgyMCw3ICsxMDQyLDcgQEAg
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
RXhwcmVzc2lvblR5cGUgbm9uWmVybywKIAogYXV0byBMTEludEdlbmVyYXRvcjo6bG9hZChMb2Fk
T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBwb2lu
dGVyOworICAgIHJlc3VsdCA9IHB1c2goKTsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBM
b2FkT3BUeXBlOjpJMzJMb2FkOFM6CiAgICAgICAgIFdhc21JMzJMb2FkOFM6OmVtaXQodGhpcywg
cmVzdWx0LCBwb2ludGVyLCBvZmZzZXQpOwpAQCAtOTMyLDE2ICsxMTU0LDggQEAgdm9pZCBHZW5l
cmljTGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjo6c2V0TG9jYXRpb24oQnl0ZWNvZGVHZW5l
cmF0b3JCYXNlPFdhc20KICAgICAgICAgQ0FTRShXYXNtSm1wKQogICAgICAgICBDQVNFKFdhc21K
dHJ1ZSkKICAgICAgICAgQ0FTRShXYXNtSmZhbHNlKQotICAgICAgICBjYXNlIFdhc21Td2l0Y2g6
Om9wY29kZUlEOiB7Ci0gICAgICAgICAgICBBU1NFUlQoKCFpbnN0cnVjdGlvbi0+YXM8V2FzbVN3
aXRjaCwgV2FzbU9wY29kZVRyYWl0cz4oKS5tX2RlZmF1bHRUYXJnZXQpKTsKLSAgICAgICAgICAg
IGluc3RydWN0aW9uLT5jYXN0PFdhc21Td2l0Y2gsIFdhc21PcGNvZGVUcmFpdHM+KCktPnNldERl
ZmF1bHRUYXJnZXQoQm91bmRMYWJlbCh0YXJnZXQpLCBbJl0oKSB7Ci0gICAgICAgICAgICAgICAg
Z2VuZXJhdG9yLm1fY29kZUJsb2NrLT5hZGRPdXRPZkxpbmVKdW1wVGFyZ2V0KGluc3RydWN0aW9u
Lm9mZnNldCgpLCB0YXJnZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiBCb3VuZExhYmVsKCk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICN1bmRlZiBDQVNFCiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxh
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAppbmRl
eCA3NzJiNTE5NjZlNDU3ZDI5NjhiYzY1YjMxMDkzOGRkZmJjMmIxMGY2Li5iY2VlYjI4NmJhM2Ni
MzE5N2ViZmI4MGI0ZTVlZjUxNmZhYjRkNTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRQbGFuLmNwcApAQCAtODAsMTAgKzgwLDEwIEBAIHZvaWQgTExJbnRQbGFu
Ojpjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICBtX3dhc21JbnRl
cm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJl
c3VsdCk7CiAKICAgICBpZiAobV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlcy5jb250YWlucyhmdW5j
dGlvbkluZGV4KSB8fCBtX21vZHVsZUluZm9ybWF0aW9uLT5yZWZlcmVuY2VkRnVuY3Rpb25zKCku
Y29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOwogICAgICAgICBFbWJlZGVyVG9XYXNtRnVuY3Rpb24gZW50cnk7CiAgICAgICAg
IGVudHJ5LmppdCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgICAgICBlbnRyeS5m
dW5jdGlvbiA9IG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKCplbnRyeS5qaXQsIHNpZ25hdHVyZSwg
Jm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3Jt
YXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCk7CisgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyVG9X
YXNtSW50ZXJuYWxGdW5jdGlvbnMuYWRkKGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW50cnkpKTsK
ICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAppbmRleCBjNWEw
ODE1NDVkNDU0Mzk1YzBkMGJiZDRhMzAwMzY5MmEwMTdiY2M3Li43MjgzMmYyOTY4ZmZiNDM4NTQz
N2U0NDQzNzQxZDlhODU3ZmQyMmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21WYWxpZGF0ZS5jcHAKQEAgLTE2MSw2ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OwogCiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpIHsgcmV0
dXJuIHsgfTsgfQorICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kVG9wTGV2ZWwoQmxv
Y2tTaWduYXR1cmUpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQ2FsbHMKICAgICBSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5kZXgsIGNvbnN0IFNp
Z25hdHVyZSYsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3Qm
KTsKQEAgLTE3Niw2ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKGNvbnN0IFZlY3Rv
cjxDb250cm9sRW50cnk+JiwgY29uc3QgU3RhY2sqKTsKICAgICB2b2lkIHNldFBhcnNlcihGdW5j
dGlvblBhcnNlcjxWYWxpZGF0ZT4qKSB7IH0KICAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmdMb2Nh
bHMoKSB7IH0KKyAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNrKCkgeyB9CiAKIHByaXZhdGU6
CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeShjb25zdCBTdGFjayYsIGNvbnN0
IENvbnRyb2xEYXRhJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383771</attachid>
            <date>2019-11-18 11:48:22 -0800</date>
            <delta_ts>2019-11-21 23:44:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204092-20191118114821.patch</filename>
            <type>text/plain</type>
            <size>66078</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MWVjZjQ0MmU3YjA0ZGU1ZWQ3MWExMzBlNDk2NDAzZDhhZWJhYzkyLi4zMDc5ZDE1MDQ4NGZkNDgy
YWQ3ODQ5OTBjM2JkN2JhZTM5MDkxY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMTktMTEtMTcgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBJbXByb3ZlIFdhc206OkxMSW50R2VuZXJhdG9y
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQwOTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlt
cHJvdmVzIHRoZSBXYXNtOjpMTEludEdlbmVyYXRvciBieToKKyAgICAgICAgLSBDaGFuZ2luZyBM
TEludEdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgZnJvbSBSZWZQdHI8UmVnaXN0ZXJJRD4gdG8g
VmlydHVhbFJlZ2lzdGVyOiBJbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYW5kIHJldGFpbmluZworICAg
ICAgICAgIFJlZ2lzdGVySURzIHdlIHVzZSBWaXJ0dWFsUmVnaXN0ZXJzIGRpcmVjdGx5IGFuZCBl
bnN1cmUgdGhhdCB0aGV5IG1hdGNoIHRoZSBXZWJBc3NlbWJseSBzdGFjaywgaS5lLiB0aGUgcGFy
c2VyJ3MgZXhwcmVzc2lvbgorICAgICAgICAgIHN0YWNrIHNob3VsZCBtYXRjaCB0aGUgdmlydHVh
bCByZWdpc3RlcnMuCisgICAgICAgIC0gUmVtb3ZpbmcgcmVkdW5kYW50IG1vdmVzIHdoZW4gbWF0
ZXJpYWxpemluZyBjb25zdGFudHMgYW5kIHBlcmZvcm1pbmcgbG9jYWwuZ2V0OiBpbnN0ZWFkIG9m
IGNyZWF0aW5nIGEgbmV3IHRlbXBvcmFyeQorICAgICAgICAgIGZvciBlYWNoIGNvbnN0YW50IGFu
ZCBsb2NhbC5nZXQsIHdlIHJldHVybiB0aGUgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGUgY29uc3Rh
bnQvbG9jYWwgc2xvdCBkaXJlY3RseS4gSW4gb3JkZXIgZm9yIHRoaXMKKyAgICAgICAgICB0byB3
b3JrLCB3ZSBzdGlsbCBhbGxvY2F0ZSB0aGUgc3RhY2sgc2xvdCBmb3IgdGhlIHRlbXBvcmFyaWVz
LCBzaW5jZSB3ZSBoYXZlIHRvIG1hdGVyaWFsaXplIHRoZW0gaW4gYmVmb3JlIGxvb3BzIGFuZCBi
cmFuY2hlcy4KKyAgICAgICAgLSBBZGRpbmcgYSBjb25zdHJ1Y3RvciB0byBDb250cm9sVHlwZSB0
aGF0IHRha2VzIHRoZSByZXN1bHRzIEV4cHJlc3Npb25MaXN0IGFzIGFuIHJ2YWx1ZSBpbnN0ZWFk
IG9mIGNvcHlpbmcgaXQKKyAgICAgICAgLSBPcHRpbWl6aW5nIGNhbGxJbmZvcm1hdGlvbkZvciwg
d2hpY2ggaXMgbm93IHNwbGl0IGludG8gdHdvIGZ1bmN0aW9ucy4gVGhlIGNhbGxlZSBkb2VzIG5v
dCBjYXJlIGFib3V0IGFyZ3VtZW50cywgYW5kIHNob3VsZAorICAgICAgICAgIG5ldmVyIGFsbG9j
YXRlIHRlbXBvcmFyaWVzLCBhbmQgdGhlIGNhbGxlciBjYXNlIHdhcyBvcHRpbWl6ZWQgYnkgYXZv
aWRpbmcgdW5uZWNlc3NhcnkgY2FsbHMgdG8gbmV3VGVtcG9yYXJ5CisgICAgICAgIC0gRGVsYXkg
aG9sZGluZyB0aGUgbG9jayBpbiBMTGludFBsYW46OmNvbXBpbGVGdW5jdGlvbiwgc2luY2Ugd2Ug
ZG8gbm90IG5lZWQgdG8gaG9sZCBpdCB3aGlsZSBjb21waWxpbmcgdGhlIGpzLXRvLXdhc20gZW50
cnlwb2ludAorCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAq
IGJ5dGVjb21waWxlci9MYWJlbC5oOgorICAgICAgICAoSlNDOjpHZW5lcmljTGFiZWw6OmxvY2F0
aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0xhYmVsOjp1bnJlc29sdmVkSnVtcHMg
Y29uc3QpOgorICAgICAgICAqIGdlbmVyYXRvci9XYXNtLnJiOgorICAgICAgICAqIGxsaW50L1dl
YkFzc2VtYmx5LmFzbToKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbmRUb3BMZXZlbCk6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisgICAg
ICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmVuZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2spOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9u
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmFk
ZEp1bXBUYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvblBhcnNlcjo6ZXhwcmVzc2lvblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQm9keSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OkNvbnRyb2xUeXBlOjpsb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OkNvbnRyb2xUeXBlOjp0b3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpDb250cm9sVHlwZTo6YmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Q29udHJvbFR5cGU6OmlmXyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpDb250cm9sVHlwZTo6dGFyZ2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnN0YWNrU2l6ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Q29udHJvbFR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxv
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6cHVzaCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpkdW1wKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TExJbnRHZW5lcmF0b3I6OnZpcnR1YWxSZWdpc3RlckZvcldhc21Mb2NhbCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpqc051bGxDb25zdGFudCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjp6ZXJvQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6Z2V0RHJvcEtlZXBDb3VudCk6CisgICAgICAgIChKU0M6Oldh
c206OkxMSW50R2VuZXJhdG9yOjpkcm9wS2VlcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjptYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2Fscyk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb25zdGFudE1hcEhhc2hUcmFpdHM6OmVtcHR5VmFsdWUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29uc3RhbnRNYXBIYXNoVHJh
aXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Q29uc3RhbnRNYXBIYXNoVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIpOgorICAgICAgICAoSlND
OjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Omdl
dEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRMb29wKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRvcExldmVsKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZElmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
YWRkRWxzZVRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEJy
YW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6ZW5kVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkUmVmSXNOdWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OmFkZFJlZkZ1bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRk
VGFibGVHZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVGFibGVT
aXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6
CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkU2VsZWN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmxvYWQpOgorICAgICAgICAoSlNDOjpHZW5lcmljTGFi
ZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjo6c2V0TG9jYXRpb24pOgorICAgICAgICAqIHdhc20v
V2FzbUxMSW50UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50UGxhbjo6Y29tcGls
ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OlZhbGlkYXRlOjplbmRUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OlZh
bGlkYXRlOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisKIDIwMTktMTEtMTEgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggaW5jb3Jy
ZWN0IGFzc2VydGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QucmIKaW5kZXggYzJlYzljZjU3MmFiNmUxNmE4NDM3MmJmZjAwMzYwYjkzZmUxMzJjYy4u
ZjgyYmVkOTg5MjBlNzk1NWI1MjI4Y2Q3Yjg0MzRhNmUwNDA5MjI3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0xMjk3LDcgKzEyOTcs
NiBAQCBvcCA6c3dpdGNoLAogICAgIGFyZ3M6IHsKICAgICAgICAgc2NydXRpbmVlOiBWaXJ0dWFs
UmVnaXN0ZXIsCiAgICAgICAgIHRhYmxlSW5kZXg6IHVuc2lnbmVkLAotICAgICAgICBkZWZhdWx0
VGFyZ2V0OiBXYXNtQm91bmRMYWJlbCwKICAgICB9CiAKICMgV2FzbSBzcGVjaWZpYyBieXRlY29k
ZXMKQEAgLTEzMDUsNiArMTMwNCwxMyBAQCBvcCA6c3dpdGNoLAogb3AgOnVucmVhY2hhYmxlCiBv
cCA6cmV0X3ZvaWQKIAorb3AgOmRyb3Bfa2VlcCwKKyAgICBhcmdzOiB7CisgICAgICAgIHN0YXJ0
T2Zmc2V0OiB1bnNpZ25lZCwKKyAgICAgICAgZHJvcENvdW50OiB1bnNpZ25lZCwKKyAgICAgICAg
a2VlcENvdW50OiB1bnNpZ25lZCwKKyAgICB9CisKIG9wIDpyZWZfaXNfbnVsbCwKICAgICBhcmdz
OiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9MYWJlbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9MYWJlbC5oCmluZGV4IDkwMzEzNjI2ZjhmYjNjOGRjN2QwMjk1Y2ZkMzI2
ODBhZGEwMjBmNmQuLjM1YmMxNDc0ODlhNTI3MjA2MmQzOWRkYTkxYWNkODkyNzI0MjhiNDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTGFiZWwuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgKQEAgLTEyOCw2ICsx
MjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2Vu
ZXJpY0xhYmVsKTsKICAgICAgICAgdXNpbmcgQnl0ZWNvZGVHZW5lcmF0b3IgPSBCeXRlY29kZUdl
bmVyYXRvckJhc2U8VHJhaXRzPjsKICAgICAgICAgdXNpbmcgQm91bmRMYWJlbCA9IEdlbmVyaWNC
b3VuZExhYmVsPFRyYWl0cz47CisgICAgICAgIHR5cGVkZWYgVmVjdG9yPGludCwgOD4gSnVtcFZl
Y3RvcjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgR2VuZXJpY0xhYmVsKCkgPSBkZWZhdWx0OwpA
QCAtMTcwLDExICsxNzEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBi
b29sIGlzQm91bmQoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kOyB9CiAKKyAgICAgICAgdW5zaWdu
ZWQgbG9jYXRpb24oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWlzRm9y
d2FyZCgpKTsKKyAgICAgICAgICAgIG1fYm91bmQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IG1fbG9jYXRpb247CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgSnVtcFZlY3RvciYgdW5y
ZXNvbHZlZEp1bXBzKCkgY29uc3QgeyByZXR1cm4gIG1fdW5yZXNvbHZlZEp1bXBzOyB9CisKICAg
ICBwcml2YXRlOgogICAgICAgICBmcmllbmQgQm91bmRMYWJlbDsKIAotICAgICAgICB0eXBlZGVm
IFZlY3RvcjxpbnQsIDg+IEp1bXBWZWN0b3I7Ci0KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBpbnZhbGlkTG9jYXRpb24gPSBVSU5UX01BWDsKIAogICAgICAgICBpbnQgbV9yZWZD
b3VudCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
V2FzbS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvV2FzbS5yYgppbmRleCBj
MDBjNjI5ZGQwMzc2MzczMzkyODBjMTUxYTg3OWMyYWIzYmE4ZGY0Li5jMTc4NTg2ZDUyMWZhZDdk
YmI1MmI2NzdiYTUxZmFkNTIxNjlmOWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL1dhc20ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9XYXNtLnJiCkBAIC01OCw3ICs1OCw3IEBAIG1vZHVsZSBXYXNtCiB0ZW1wbGF0ZTw+CiBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRPcDwje29wX3R5cGUob3ApfT4oRXhwcmVzc2lvblR5cGUgbGhz
LCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICByZXN1bHQgPSBsaHM7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgICN7
b3AuY2FwaXRhbGl6ZWRfbmFtZX06OmVtaXQodGhpcywgcmVzdWx0LCBsaHMsIHJocyk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KQEAgLTcwLDcgKzcwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
T3A8I3tvcF90eXBlKG9wKX0+KEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmgK
IHRlbXBsYXRlPD4KIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZE9wPCN7b3BfdHlwZShvcCl9PihF
eHByZXNzaW9uVHlwZSBvcGVyYW5kLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gb3BlcmFuZDsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAg
ICAgI3tvcC5jYXBpdGFsaXplZF9uYW1lfTo6ZW1pdCh0aGlzLCByZXN1bHQsIG9wZXJhbmQpOwog
ICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvV2ViQXNzZW1ibHkuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2Vt
Ymx5LmFzbQppbmRleCAwYmI5ZmZkMzUyYWI0NDI4ZjVjNmM2Nzk1OGJjY2ZkNmVhM2Y0ZmE2Li5h
NWM3Yzg4MDI4OTg3Zjk4MWQyZGJlMzU3MmJlZTNiMTQ0MDFhMTVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20KQEAgLTI5Nyw3ICsyOTcsNyBAQCBtYWNy
byB3YXNtUHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvY2tTZXR0ZXIsIGxvYWRXYXNt
SW5zdGFuY2UpCiAgICAgYnRpeiB3czEsIC56ZXJvSW5pdGlhbGl6ZUxvY2Fsc0RvbmUKICAgICBu
ZWdpIHdzMQogICAgIHN4aTJxIHdzMSwgd3MxCi0gICAgbGVhcCAoTnVtYmVyT2ZXYXNtQXJndW1l
bnRzICsgQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKSAqIC04W2Nmcl0sIHdzMAor
ICAgIGxlYXAgKE51bWJlck9mV2FzbUFyZ3VtZW50cyArIENhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycyArIDEpICogLThbY2ZyXSwgd3MwCiAuemVyb0luaXRpYWxpemVMb2NhbHNMb29w
OgogICAgIGFkZHEgMSwgd3MxCiAgICAgc3RvcmVxIDAsIFt3czAsIHdzMSwgOF0KQEAgLTU4OCwx
NCArNTg4LDIzIEBAIHdhc21PcChzd2l0Y2gsIFdhc21Td2l0Y2gsIG1hY3JvKGN0eCkKICAgICBh
ZGRwIHQxLCB0MgogCiAgICAgbG9hZGkgVmVjdG9yU2l6ZU9mZnNldFt0Ml0sIHQzCi0gICAgYmlh
ZXEgdDAsIHQzLCAuZGVmYXVsdAorICAgIGJpYiB0MCwgdDMsIC5pbkJvdW5kcworCisub3V0T2ZC
b3VuZHM6CisgICAgc3ViaSB0MywgMSwgdDAKKworLmluQm91bmRzOgogICAgIGxvYWRwIFZlY3Rv
ckJ1ZmZlck9mZnNldFt0Ml0sIHQyCi0gICAgbG9hZGkgW3QyLCB0MCwgNF0sIHQzCisgICAgbXVs
aSBzaXplb2YgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5LCB0MAorCisg
ICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5OjpzdGFydE9m
ZnNldFt0MiwgdDBdLCB0MQorICAgIGxvYWRpIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1w
VGFibGVFbnRyeTo6ZHJvcENvdW50W3QyLCB0MF0sIHQzCisgICAgbG9hZGkgV2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5OjprZWVwQ291bnRbdDIsIHQwXSwgdDUKKyAgICBk
cm9wS2VlcCh0MSwgdDMsIHQ1KQorCisgICAgbG9hZGlzIFdhc206OkZ1bmN0aW9uQ29kZUJsb2Nr
OjpKdW1wVGFibGVFbnRyeTo6dGFyZ2V0W3QyLCB0MF0sIHQzCiAgICAgYXNzZXJ0KG1hY3JvKG9r
KSBidGlueiB0MywgLm9rIGVuZCkKICAgICB3YXNtRGlzcGF0Y2hJbmRpcmVjdCh0MykKLQotLmRl
ZmF1bHQ6Ci0gICAganVtcChjdHgsIG1fZGVmYXVsdFRhcmdldCkKIGVuZCkKIAogdW5wcmVmaXhl
ZFdhc21PcCh3YXNtX2ptcCwgV2FzbUptcCwgbWFjcm8oY3R4KQpAQCAtMTk5MywzICsyMDAyLDMw
IEBAIHdhc21PcChpNjRfcmVpbnRlcnByZXRfZjY0LCBXYXNtSTY0UmVpbnRlcnByZXRGNjQsIG1h
Y3JvKGN0eCkKICAgICBmZDJxIGZ0MCwgdDAKICAgICByZXR1cm5xKGN0eCwgdDApCiBlbmQpCisK
K21hY3JvIGRyb3BLZWVwKHN0YXJ0T2Zmc2V0LCBkcm9wLCBrZWVwKQorICAgIGxzaGlmdGkgMywg
c3RhcnRPZmZzZXQKKyAgICBzdWJwIGNmciwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0CisgICAg
bmVnaSBkcm9wCisgICAgc3hpMnEgZHJvcCwgZHJvcAorCisuY29weUxvb3A6CisgICAgYnRpeiBr
ZWVwLCAuZG9uZQorICAgIGxvYWRxIFtzdGFydE9mZnNldCwgZHJvcCwgOF0sIHQ2CisgICAgc3Rv
cmVxIHQ2LCBbc3RhcnRPZmZzZXRdCisgICAgc3ViaSAxLCBrZWVwCisgICAgc3VicCA4LCBzdGFy
dE9mZnNldAorICAgIGptcCAuY29weUxvb3AKKworLmRvbmU6CitlbmQKKword2FzbU9wKGRyb3Bf
a2VlcCwgV2FzbURyb3BLZWVwLCBtYWNybyhjdHgpCisgICAgd2dldHUoY3R4LCBtX3N0YXJ0T2Zm
c2V0LCB0MCkKKyAgICB3Z2V0dShjdHgsIG1fZHJvcENvdW50LCB0MSkKKyAgICB3Z2V0dShjdHgs
IG1fa2VlcENvdW50LCB0MikKKworICAgIGRyb3BLZWVwKHQwLCB0MSwgdDIpCisKKyAgICBkaXNw
YXRjaChjdHgpCitlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmNwcAppbmRleCA5YzcwODYxNzMwZDI3ZWQ1OTc0YTQ0ZjhkNTc1ZmIyNjE2
ZDAxODU2Li5lZDdiOGRlOThmNTZlNDNjYmY3YTUzYzVlZGIyMjc1MDUyZmNmOGExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAg
LTI4NSw2ICsyODUsOCBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShD
b250cm9sRW50cnkmLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0geyB9KTsKIAorICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0
dXJlKSB7IHJldHVybiB7IH07IH0KKwogICAgIC8vIENhbGxzCiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2ln
bmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgVmVjdG9yPEV4cHJlc3Npb25U
eXBlLCAxPiYgcmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4mIHJl
c3VsdHMpOwpAQCAtMjk5LDYgKzMwMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoY29uc3Qg
VmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJlc3Np
b25TdGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0
b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAgdm9pZCBkaWRGaW5pc2hQ
YXJzaW5nTG9jYWxzKCkgeyB9CisgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgfQog
CiAgICAgc3RhdGljIFZlY3RvcjxUbXA+IHRvVG1wVmVjdG9yKGNvbnN0IFZlY3RvcjxUeXBlZFRt
cD4mIHZlY3RvcikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKaW5kZXggODY1YTczOTNhZGE5ZjlmMjE0NWIzOGNhNGQ1NDc2YjZl
MzY2ZDIxMy4uNjE5NjE5MzljNjVjZjE5ODQ2ZTNiZmU2MDViZDA0MThlMTkyZmUyMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAt
MjM1LDYgKzIzNSw4IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENv
bnRyb2xFbnRyeSYsIGNvbnN0IFN0YWNrJiA9IHsgfSk7CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBlbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSkgeyByZXR1cm4geyB9
OyB9CisKICAgICAvLyBDYWxscwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUlu
ZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1
bHRMaXN0JiByZXN1bHRzKTsKQEAgLTI0NCw2ICsyNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
dW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0YWNr
KiBleHByZXNzaW9uU3RhY2spOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPEIz
SVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAgdm9pZCBk
aWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9CisgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFj
aygpIHsgfQogCiAgICAgVmFsdWUqIGNvbnN0YW50KEIzOjpUeXBlLCB1aW50NjRfdCBiaXRzLCBP
cHRpb25hbDxPcmlnaW4+ID0gV1RGOjpudWxsb3B0KTsKICAgICBWYWx1ZSogZnJhbWVQb2ludGVy
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25D
b2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrLmNwcAppbmRleCBkMzUwNWMzMDA4MTllYWU0Y2E2OTQ4Zjk4ZDhmYmE3Y2EyM2ZjZGI5
Li4xNjJhMzcyMzA1NGY3ZDIzNWZkZjU0MGYzNDI5YTg4MDY1ZjgwNzEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5jcHAKQEAg
LTc1LDExICs3NSw3IEBAIGNvbnN0IFNpZ25hdHVyZSYgRnVuY3Rpb25Db2RlQmxvY2s6OnNpZ25h
dHVyZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIAogYXV0byBGdW5jdGlvbkNvZGVCbG9jazo6YWRk
SnVtcFRhYmxlKHNpemVfdCBudW1iZXJPZkVudHJpZXMpIC0+IEp1bXBUYWJsZSYKIHsKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgbV9qdW1wVGFibGVzLmFwcGVuZChKdW1wVGFibGUobnVtYmVy
T2ZFbnRyaWVzLCAwKSk7Ci0jZWxzZQogICAgIG1fanVtcFRhYmxlcy5hcHBlbmQoSnVtcFRhYmxl
KG51bWJlck9mRW50cmllcykpOwotI2VuZGlmCiAgICAgcmV0dXJuIG1fanVtcFRhYmxlcy5sYXN0
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9u
Q29kZUJsb2NrLmgKaW5kZXggZmVkNDQ3NWNhNWQ1Nzk3NjQ4YTlmN2IyOWM1MGE5NTc2YTRjYzEy
ZS4uZjY4OGE3YzllOTQyNmQ5ZTBiZWEzYWYwY2ZmYWYyYzI3ZGQ1YTU2NyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKQEAgLTEw
NSw3ICsxMDUsMTQgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFkZFNpZ25hdHVyZShjb25zdCBT
aWduYXR1cmUmKTsKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSh1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CiAKLSAgICB1c2luZyBKdW1wVGFibGUgPSBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldD47CisgICAgc3RydWN0IEp1bXBUYWJsZUVudHJ5IHsKKyAgICAgICAgaW50IHRh
cmdldCB7IDAgfTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7CisgICAgICAgIHVuc2ln
bmVkIGRyb3BDb3VudDsKKyAgICAgICAgdW5zaWduZWQga2VlcENvdW50OworICAgIH07CisKKyAg
ICB1c2luZyBKdW1wVGFibGUgPSBWZWN0b3I8SnVtcFRhYmxlRW50cnk+OwogICAgIEp1bXBUYWJs
ZSYgYWRkSnVtcFRhYmxlKHNpemVfdCBudW1iZXJPZkVudHJpZXMpOwogICAgIGNvbnN0IEp1bXBU
YWJsZSYganVtcFRhYmxlKHVuc2lnbmVkIHRhYmxlSW5kZXgpIGNvbnN0OwogICAgIHVuc2lnbmVk
IG51bWJlck9mSnVtcFRhYmxlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCBmNzcxNmE3MDFlNzcyMGI4ZjM2YWM5ODUz
NjAzODJmZmMyZjhjY2VhLi5kZTllZGY2OTJhODZiNDViY2Q5MmY5MjM2MmQxYjVmYjNjYWEzZDQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJz
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIu
aApAQCAtNzcsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQogCiAgICAgVmVjdG9yPENvbnRyb2xF
bnRyeT4mIGNvbnRyb2xTdGFjaygpIHsgcmV0dXJuIG1fY29udHJvbFN0YWNrOyB9CisgICAgU3Rh
Y2smIGV4cHJlc3Npb25TdGFjaygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvblN0YWNrOyB9CiAKIHBy
aXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTg5
LDYgKzkwLDcgQEAgcHJpdmF0ZToKICNkZWZpbmUgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RB
Q0tfSU5UTyhyZXN1bHQsIHdoYXQpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLmlzRW1wdHko
KSwgImNhbid0IHBvcCBlbXB0eSBzdGFjayBpbiAiIHdoYXQpOyBcCiAgICAgICAgIHJlc3VsdCA9
IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0
YWNrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIH0gd2hpbGUgKDApCiAKICAgICB0ZW1wbGF0ZTxPcFR5cGU+CkBAIC0xNzYsNiArMTc4
LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCb2R5KCkgLT4gUGFydGlh
bFJlc3VsdAogICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4cHJl
c3Npb24oKSk7CiAgICAgICAgIH0KICAgICB9CisgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhtX2NvbnRleHQuZW5kVG9wTGV2ZWwoJm1fc2lnbmF0dXJlKSk7CiAKICAgICBBU1NFUlQob3Ag
PT0gT3BUeXBlOjpFbmQpOwogICAgIHJldHVybiB7IH07CkBAIC00MzgsOCArNDQxLDEwIEBAIGF1
dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxS
ZXN1bHQKICAgICAgICAgc2l6ZV90IGZpcnN0QXJndW1lbnRJbmRleCA9IG1fZXhwcmVzc2lvblN0
YWNrLnNpemUoKSAtIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CiAgICAgICAgIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4gYXJnczsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
YXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSks
ICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBjYWxsJ3MgIiwgY2FsbGVlU2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytp
KQorICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBw
ZW5kKG1fZXhwcmVzc2lvblN0YWNrLmF0KGkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQ
b3BWYWx1ZUZyb21TdGFjaygpOworICAgICAgICB9CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNr
LnNocmluayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0
czsKQEAgLTQ2Nyw4ICs0NzIsMTAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+IGFyZ3M7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBm
b3IgIiwgYXJndW1lbnRDb3VudCwgIiBjYWxsX2luZGlyZWN0IGFyZ3VtZW50cyIpOwogICAgICAg
ICBzaXplX3QgZmlyc3RBcmd1bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0g
YXJndW1lbnRDb3VudDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRl
eDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQorICAgICAgICBmb3IgKHNpemVf
dCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVzc2lvblN0YWNr
LmF0KGkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21TdGFjaygpOwor
ICAgICAgICB9CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhmaXJzdEFyZ3VtZW50
SW5kZXgpOwogCiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKQEAgLTYwOCw2ICs2MTUsNyBA
QCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0
aWFsUmVzdWx0CiAgICAgY2FzZSBEcm9wOiB7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IW1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgImNhbid0IGRyb3Agb24gZW1wdHkgc3RhY2siKTsK
ICAgICAgICAgbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgbV9jb250ZXh0
LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApp
bmRleCBiYWVmNTA3MDM3Zjk2MTczNGE5YThiZWE0Mjc3NjY5NGZmMzc1YjQzLi5kMmY3MDZlYWMz
ZWJlZDE4OWJkMjIwNjg0OTAxOTQzZTBiMTY4YmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAgLTMyLDEzICszMiwxMyBAQAog
I2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uU3RyZWFt
LmgiCiAjaW5jbHVkZSAiTGFiZWwuaCIKLSNpbmNsdWRlICJSZWdpc3RlcklELmgiCiAjaW5jbHVk
ZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiV2FzbUZ1
bmN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbUdlbmVyYXRvclRyYWl0cy5oIgogI2luY2x1
ZGUgIldhc21UaHVua3MuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZFVub3JkZXJlZE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CkBAIC00Nyw5ICs0Nyw5IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIExMSW50R2VuZXJhdG9yIDogcHVibGljIEJ5dGVj
b2RlR2VuZXJhdG9yQmFzZTxHZW5lcmF0b3JUcmFpdHM+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBF
eHByZXNzaW9uVHlwZSA9IFJlZlB0cjxSZWdpc3RlcklEPjsKKyAgICB1c2luZyBFeHByZXNzaW9u
VHlwZSA9IFZpcnR1YWxSZWdpc3RlcjsKICAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZlY3Rv
cjxFeHByZXNzaW9uVHlwZSwgMT47Ci0gICAgdXNpbmcgU3RhY2sgPSBFeHByZXNzaW9uTGlzdDsK
KyAgICB1c2luZyBTdGFjayA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMTYsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PjsKIAogICAgIHN0cnVjdCBDb250cm9sTG9vcCAgewogICAgICAgICBSZWY8TGFi
ZWw+IG1fYm9keTsKQEAgLTczLDI0ICs3MywyNCBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBsb29wKEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMsIFJlZjxMYWJlbD4gYm9keSwg
UmVmUHRyPExhYmVsPiBjb250aW51YXRpb24pCisgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBs
b29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWY8TGFi
ZWw+JiYgYm9keSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgcmVzdWx0cywgV1RGTW92ZShj
b250aW51YXRpb24pLCBDb250cm9sTG9vcCB7IFdURk1vdmUoYm9keSkgfSk7CisgICAgICAgICAg
ICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFy
Z3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sTG9vcCB7IFdURk1v
dmUoYm9keSkgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgdG9w
TGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVz
dWx0cywgUmVmUHRyPExhYmVsPiBjb250aW51YXRpb24pCisgICAgICAgIHN0YXRpYyBDb250cm9s
VHlwZSB0b3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6
ZSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgcmVzdWx0cywgV1RGTW92ZShjb250aW51YXRp
b24pLCBDb250cm9sVG9wTGV2ZWwgeyB9KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlw
ZShzaWduYXR1cmUsIHN0YWNrU2l6ZSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sVG9w
TGV2ZWwgeyB9KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBibG9j
ayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRz
LCBSZWZQdHI8TGFiZWw+IGNvbnRpbnVhdGlvbikKKyAgICAgICAgc3RhdGljIENvbnRyb2xUeXBl
IGJsb2NrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWZQ
dHI8TGFiZWw+JiYgY29udGludWF0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Q29udHJvbFR5cGUoc2lnbmF0dXJlLCByZXN1bHRzLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENv
bnRyb2xCbG9jayB7IH0pOworICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVy
ZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGlu
dWF0aW9uKSwgQ29udHJvbEJsb2NrIHsgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMg
Q29udHJvbFR5cGUgaWZfKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJlc3VsdHMsIFJlZjxMYWJlbD4gYWx0ZXJuYXRlLCBSZWZQdHI8TGFiZWw+IGNvbnRp
bnVhdGlvbikKKyAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGlmXyhCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVsPiYmIGFsdGVybmF0ZSwgUmVm
UHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgcmVzdWx0cywgV1RGTW92ZShjb250aW51YXRpb24pLCBD
b250cm9sSWYgeyBXVEZNb3ZlKGFsdGVybmF0ZSkgfSk7CisgICAgICAgICAgICByZXR1cm4gQ29u
dHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQo
KSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sSWYgeyBXVEZNb3ZlKGFsdGVybmF0ZSkg
fSk7CiAgICAgICAgIH0KIAogICAgICAgICBSZWZQdHI8TGFiZWw+IHRhcmdldExhYmVsRm9yQnJh
bmNoKCkgY29uc3QKQEAgLTEwMCwxNiArMTAwLDI1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybiBtX2NvbnRpbnVhdGlvbjsKICAgICAgICAgfQogCisgICAgICAgIHVuc2lnbmVkIHRhcmdl
dEFyaXR5KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8Q29udHJvbExvb3A+KCp0aGlzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9z
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVy
ZS0+cmV0dXJuQ291bnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tTaXplOyB9CisKICAgICAgICAgQmxvY2tTaWduYXR1
cmUgbV9zaWduYXR1cmU7Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0IG1fcmVzdWx0czsKKyAgICAg
ICAgdW5zaWduZWQgbV9zdGFja1NpemU7CiAgICAgICAgIFJlZlB0cjxMYWJlbD4gbV9jb250aW51
YXRpb247CiAKICAgICBwcml2YXRlOgogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
ICAgICBDb250cm9sVHlwZShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIGNvbnN0IEV4cHJlc3Np
b25MaXN0JiByZXN1bHRzLCBSZWZQdHI8TGFiZWw+IGNvbnRpbnVhdGlvbiwgVCB0KQorICAgICAg
ICBDb250cm9sVHlwZShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6
ZSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbiwgVCYmIHQpCiAgICAgICAgICAgICA6IEJh
c2UoV1RGTW92ZSh0KSkKICAgICAgICAgICAgICwgbV9zaWduYXR1cmUoc2lnbmF0dXJlKQotICAg
ICAgICAgICAgLCBtX3Jlc3VsdHMocmVzdWx0cykKKyAgICAgICAgICAgICwgbV9zdGFja1NpemUo
c3RhY2tTaXplKQogICAgICAgICAgICAgLCBtX2NvbnRpbnVhdGlvbihXVEZNb3ZlKGNvbnRpbnVh
dGlvbikpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtMTM3LDE4ICsxNDYsMzEgQEAgcHVibGlj
OgogICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3RBJiBk
ZXN0aW5hdGlvbnMsIGNvbnN0IEV4cHJlc3Npb25MaXN0QiYgdmFsdWVzKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGRlc3RpbmF0aW9ucy5zaXplKCkgPD0gdmFsdWVzLnNpemUoKSk7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBkZXN0aW5hdGlvbnNbZGVzdGluYXRpb25zLnNpemUo
KSAtIGkgLSAxXSwgdmFsdWVzW3ZhbHVlcy5zaXplKCkgLSBpIC0gMV0pOworICAgICAgICBhdXRv
IG9mZnNldCA9IHZhbHVlcy5zaXplKCkgLSBkZXN0aW5hdGlvbnMuc2l6ZSgpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgYXV0byBkc3QgPSBkZXN0aW5hdGlvbnNbaV07CisgICAgICAgICAgICBhdXRvIHNyYyA9
IHZhbHVlc1tvZmZzZXQgKyBpXTsKKyAgICAgICAgICAgIGlmIChkc3QgPT0gc3JjKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBkc3Qs
IHNyYyk7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBFeHByZXNzaW9uVHlwZSBwdXNoKCkKKyAg
ICB7CisgICAgICAgIG1fbWF4U3RhY2tTaXplID0gc3RkOjptYXgobV9tYXhTdGFja1NpemUsICsr
bV9zdGFja1NpemUpOworICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9z
dGFja1NpemUgLSAxKTsKKyAgICB9CisKKyAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNrKCkg
eyAtLW1fc3RhY2tTaXplOyB9CiAKLSAgICBzdGF0aWMgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHBy
ZXNzaW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfTsKKyAgICBzdGF0aWMgRXhwcmVzc2lvblR5cGUg
ZW1wdHlFeHByZXNzaW9uKCkgeyByZXR1cm4gVmlydHVhbFJlZ2lzdGVyIHsgfTsgfTsKICAgICBT
dGFjayBjcmVhdGVTdGFjaygpIHsgcmV0dXJuIFN0YWNrKCk7IH0KICAgICBib29sIGlzQ29udHJv
bFR5cGVJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwot
ICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVpbnQ2NF90KTsKKyAgICBFeHBy
ZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCBpbnQ2NF90KTsKIAogICAgIC8vIFJlZmVyZW5j
ZXMKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZWZJc051bGwoRXhw
cmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwpAQCAtMTg3LDE0ICsy
MDksMTUgQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZEJsb2NrKEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBl
JiBuZXdCbG9jaywgU3RhY2smIG5ld1N0YWNrKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRMb29wKEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ss
IENvbnRyb2xUeXBlJiBibG9jaywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgp
OwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29u
dHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xUeXBlJiwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRy
b2xUeXBlJiwgU3RhY2smKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOwogCi0gICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xUeXBlJiwgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xUeXBlJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKLSAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBj
b25zdCBWZWN0b3I8Q29udHJvbFR5cGUqPiYgdGFyZ2V0cywgQ29udHJvbFR5cGUmIGRlZmF1bHRU
YXJnZXRzLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKLSAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHBy
ZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYsIGNvbnN0IFN0YWNr
JiBleHByZXNzaW9uU3RhY2sgPSB7IH0pOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sVHlwZSYsIFN0YWNrJiByZXR1cm5WYWx1ZXMp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9s
VHlwZSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgU3RhY2smIHJldHVyblZhbHVlcyk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlKj4mIHRhcmdldHMsIENvbnRy
b2xUeXBlJiBkZWZhdWx0VGFyZ2V0cywgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgU3Rh
Y2smIGV4cHJlc3Npb25TdGFjayk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmLCBjb25zdCBTdGFjayYgZXhwcmVz
c2lvblN0YWNrID0geyB9LCBib29sIHVucmVhY2hhYmxlID0gdHJ1ZSk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUpOwogCiAg
ICAgLy8gQ2FsbHMKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
KHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0cyk7CkBAIC0yMDUsNyArMjI4LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5l
cmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAKLSAgICB2b2lkIGR1bXAo
Y29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBFeHByZXNzaW9uTGlzdCopIHsgfQor
ICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNvbnN0IFN0YWNrKikg
eyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIEdlbmVyaWNMYWJlbDxXYXNtOjpHZW5lcmF0b3JU
cmFpdHM+OwpAQCAtMjE0LDEyICsyMzcsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQg
c3RhY2tPZmZzZXQ7CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tBcmd1bWVudHM7CiAg
ICAgICAgIEV4cHJlc3Npb25MaXN0IGFyZ3VtZW50czsKLSAgICAgICAgRXhwcmVzc2lvbkxpc3Qg
cmVzdWx0czsKKyAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHByZXNzaW9uTGlzdCYp
PiBjb21taXRSZXN1bHRzOwogICAgIH07CiAKLSAgICBMTEludENhbGxJbmZvcm1hdGlvbiBjYWxs
SW5mb3JtYXRpb25Gb3IoY29uc3QgU2lnbmF0dXJlJiwgQ2FsbFJvbGUgPSBDYWxsUm9sZTo6Q2Fs
bGVyKTsKKyAgICBMTEludENhbGxJbmZvcm1hdGlvbiBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIo
Y29uc3QgU2lnbmF0dXJlJik7CisgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4gY2FsbElu
Zm9ybWF0aW9uRm9yQ2FsbGVlKGNvbnN0IFNpZ25hdHVyZSYpOwogCi0gICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKHVpbnQzMl90IGluZGV4KQorICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JXYXNtTG9jYWwodWludDMyX3QgaW5kZXgpCiAgICAg
ewogICAgICAgICBpZiAoaW5kZXggPCBtX2NvZGVCbG9jay0+bV9udW1Bcmd1bWVudHMpCiAgICAg
ICAgICAgICByZXR1cm4gbV9ub3JtYWxpemVkQXJndW1lbnRzW2luZGV4XTsKQEAgLTIyNywyNyAr
MjUxLDgyIEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IGF1dG8mIGNhbGxpbmdDb252ZW50aW9u
ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7CiAgICAgICAgIGNvbnN0IHVpbnQzMl90IGdwckNv
dW50ID0gY2FsbGluZ0NvbnZlbnRpb24uZ3ByQXJncy5zaXplKCk7CiAgICAgICAgIGNvbnN0IHVp
bnQzMl90IGZwckNvdW50ID0gY2FsbGluZ0NvbnZlbnRpb24uZnByQXJncy5zaXplKCk7Ci0gICAg
ICAgIHJldHVybiA6OkpTQzo6dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBtX2NvZGVC
bG9jay0+bV9udW1Bcmd1bWVudHMgKyBncHJDb3VudCArIGZwckNvdW50ICsgbnVtYmVyT2ZMTElu
dENhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoaW5kZXggLSBtX2NvZGVCbG9jay0+bV9udW1Bcmd1bWVudHMgKyBncHJDb3VudCArIGZw
ckNvdW50ICsgbnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnMpOwogICAgIH0KIAotICAg
IEV4cHJlc3Npb25MaXN0IHRtcHNGb3JTaWduYXR1cmUoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJl
KQorICAgIEV4cHJlc3Npb25UeXBlIGpzTnVsbENvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIEV4
cHJlc3Npb25MaXN0IHJlc3VsdChzaWduYXR1cmUtPnJldHVybkNvdW50KCkpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpCi0g
ICAgICAgICAgICByZXN1bHRbaV0gPSBuZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX2pzTnVsbENvbnN0YW50LmlzVmFsaWQoKSkp
IHsKKyAgICAgICAgICAgIG1fanNOdWxsQ29uc3RhbnQgPSBWaXJ0dWFsUmVnaXN0ZXIoRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvZGVCbG9jay0+bV9jb25zdGFudHMuc2l6ZSgpKTsK
KyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5hcHBlbmQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEdl
bmVyYXRlZFdhc21CeXRlY29kZXMoKSkpCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1f
Y29uc3RhbnRUeXBlcy5hcHBlbmQoVHlwZTo6QW55cmVmKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbV9qc051bGxDb25zdGFudDsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uVHlwZSBqc051
bGxDb25zdGFudCgpCisgICAgRXhwcmVzc2lvblR5cGUgemVyb0NvbnN0YW50KCkKICAgICB7Ci0g
ICAgICAgIGlmICghbV9qc051bGxDb25zdGFudCkKLSAgICAgICAgICAgIG1fanNOdWxsQ29uc3Rh
bnQgPSBhZGRDb25zdGFudChUeXBlOjpBbnlyZWYsIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
OwotICAgICAgICByZXR1cm4gbV9qc051bGxDb25zdGFudDsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KCFtX3plcm9Db25zdGFudC5pc1ZhbGlkKCkpKSB7CisgICAgICAgICAgICBtX3plcm9Db25zdGFu
dCA9IFZpcnR1YWxSZWdpc3RlcihGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29kZUJs
b2NrLT5tX2NvbnN0YW50cy5zaXplKCkpOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fY29u
c3RhbnRzLmFwcGVuZCgwKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1w
R2VuZXJhdGVkV2FzbUJ5dGVjb2RlcygpKSkKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+
bV9jb25zdGFudFR5cGVzLmFwcGVuZChUeXBlOjpJMzIpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBtX3plcm9Db25zdGFudDsKKyAgICB9CisKKyAgICB2b2lkIGdldERyb3BLZWVwQ291bnQo
Y29uc3QgQ29udHJvbFR5cGUmIHRhcmdldCwgdW5zaWduZWQmIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCYgZHJvcCwgdW5zaWduZWQmIGtlZXApCisgICAgeworICAgICAgICBzdGFydE9mZnNldCA9IHRh
cmdldC5zdGFja1NpemUoKSArIDE7CisgICAgICAgIGtlZXAgPSB0YXJnZXQudGFyZ2V0QXJpdHko
KTsKKyAgICAgICAgZHJvcCA9IG1fc3RhY2tTaXplIC0gdGFyZ2V0LnN0YWNrU2l6ZSgpIC0gdGFy
Z2V0LnRhcmdldEFyaXR5KCk7CisgICAgfQorCisgICAgdm9pZCBkcm9wS2VlcChTdGFjayYgdmFs
dWVzLCBjb25zdCBDb250cm9sVHlwZSYgdGFyZ2V0LCBib29sIGRyb3BWYWx1ZXMpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldDsKKyAgICAgICAgdW5zaWduZWQga2VlcDsKKyAg
ICAgICAgdW5zaWduZWQgZHJvcDsKKworICAgICAgICBnZXREcm9wS2VlcENvdW50KHRhcmdldCwg
c3RhcnRPZmZzZXQsIGRyb3AsIGtlZXApOworCisgICAgICAgIGlmIChkcm9wVmFsdWVzKQorICAg
ICAgICAgICAgdmFsdWVzLnNocmluayhrZWVwKTsKKworICAgICAgICBpZiAoIWRyb3ApCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGtlZXApCisgICAgICAgICAgICBXYXNtRHJv
cEtlZXA6OmVtaXQodGhpcywgc3RhcnRPZmZzZXQsIGRyb3AsIGtlZXApOworICAgIH0KKworICAg
IHZvaWQgbWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMoU3RhY2smIGV4cHJlc3Npb25TdGFj
aykKKyAgICB7CisgICAgICAgIGlmIChleHByZXNzaW9uU3RhY2suaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGZvciAoaW50IGkgPSBleHByZXNzaW9uU3RhY2suc2l6
ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBhdXRvIGV4cHJlc3Npb24gPSBleHByZXNz
aW9uU3RhY2tbZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGldOworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHNsb3QgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX3N0YWNrU2l6ZSAtIGkp
OworICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24gIT0gc2xvdCkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChleHByZXNzaW9uLmlzQ29uc3RhbnQoKSB8fCBleHByZXNzaW9uLmlzQXJndW1lbnQo
KSB8fCBleHByZXNzaW9uLnRvTG9jYWwoKSA8IG1fY29kZUJsb2NrLT5tX251bVZhcnMpOworICAg
ICAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgc2xvdCwgZXhwcmVzc2lvbik7CisgICAg
ICAgICAgICAgICAgZXhwcmVzc2lvblN0YWNrW2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpXSA9
IHNsb3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBzdHJ1Y3QgU3dp
dGNoRW50cnkgewogICAgICAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldDsKLSAg
ICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCoganVtcFRhcmdldDsKKyAgICAgICAgaW50
KiBqdW1wVGFyZ2V0OworICAgIH07CisKKyAgICBzdHJ1Y3QgQ29uc3RhbnRNYXBIYXNoVHJhaXRz
IDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxFbmNvZGVkSlNWYWx1ZT4geworICAgICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworICAgICAgICBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgc3Rh
dGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEVuY29kZWRKU1ZhbHVlJiBzbG90KSB7IHNs
b3QgPSBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlz
RGVsZXRlZFZhbHVlKEVuY29kZWRKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpOyB9CiAgICAgfTsKIAogICAgIEZ1bmN0aW9uUGFyc2VyPExM
SW50R2VuZXJhdG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07CkBAIC0yNTYsOCArMzM1LDEzIEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gbV9ub3JtYWxpemVkQXJndW1l
bnRzOwogICAgIEhhc2hNYXA8TGFiZWwqLCBWZWN0b3I8U3dpdGNoRW50cnk+PiBtX3N3aXRjaGVz
OwogICAgIEV4cHJlc3Npb25UeXBlIG1fanNOdWxsQ29uc3RhbnQ7CisgICAgRXhwcmVzc2lvblR5
cGUgbV96ZXJvQ29uc3RhbnQ7CiAgICAgRXhwcmVzc2lvbkxpc3QgbV91bml0aWFsaXplZExvY2Fs
czsKLSAgICBTdGRVbm9yZGVyZWRNYXA8dWludDY0X3QsIFZpcnR1YWxSZWdpc3Rlcj4gbV9jb25z
dGFudE1hcDsKKyAgICBIYXNoTWFwPEVuY29kZWRKU1ZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIsIFdU
Rjo6SW50SGFzaDxFbmNvZGVkSlNWYWx1ZT4sIENvbnN0YW50TWFwSGFzaFRyYWl0cz4gbV9jb25z
dGFudE1hcDsKKyAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAyPiBtX3Jlc3VsdHM7CisgICAg
dW5zaWduZWQgbV9zdGFja1NpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9tYXhTdGFja1NpemUg
eyAwIH07CisgICAgdW5zaWduZWQgbV90b3BMZXZlbFN0YWNrU2l6ZTsKIH07CiAKIEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9u
TGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJv
d1dhc21FeGNlcHRpb24pCkBAIC0yNzAsMTAgKzM1NCwxNCBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2Rl
KGNvbgogfQogCiBMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRocm93V2FzbUV4Y2VwdGlv
biB0aHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYpCi0gICAgOiBCeXRlY29kZUdl
bmVyYXRvckJhc2UobWFrZVVuaXF1ZTxGdW5jdGlvbkNvZGVCbG9jaz4oZnVuY3Rpb25JbmRleCks
IG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzKQorICAgIDogQnl0ZWNvZGVHZW5lcmF0
b3JCYXNlKG1ha2VVbmlxdWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1bmN0aW9uSW5kZXgpLCAwKQog
ICAgICwgbV9pbmZvKGluZm8pCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkK
IHsKKyAgICBtX2NvZGVCbG9jay0+bV9udW1WYXJzID0gbnVtYmVyT2ZMTEludENhbGxlZVNhdmVS
ZWdpc3RlcnM7CisgICAgbV9zdGFja1NpemUgPSBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lz
dGVyczsKKyAgICBtX21heFN0YWNrU2l6ZSA9IG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0
ZXJzOworCiAgICAgaWYgKHRocm93V2FzbUV4Y2VwdGlvbikKICAgICAgICAgVGh1bmtzOjpzaW5n
bGV0b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKTsKIApAQCAt
MjgzLDYgKzM3MSw3IEBAIExMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcihjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25JCiBzdGQ6OnVuaXF1ZV9wdHI8
RnVuY3Rpb25Db2RlQmxvY2s+IExMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9jb2RlQmxvY2spOworICAgIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxv
Y2FscyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygp
LCBtX21heFN0YWNrU2l6ZSk7CiAgICAgbV9jb2RlQmxvY2stPnNldEluc3RydWN0aW9ucyhtX3dy
aXRlci5maW5hbGl6ZSgpKTsKICAgICByZXR1cm4gV1RGTW92ZShtX2NvZGVCbG9jayk7CiB9CkBA
IC0yOTAsOCArMzc5LDMyIEBAIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gTExJ
bnRHZW5lcmF0b3I6OmZpbmFsaXplKCkKIC8vIEdlbmVyYXRlZCBmcm9tIHdhc20uanNvbgogI2lu
Y2x1ZGUgIldhc21MTEludEdlbmVyYXRvcklubGluZXMuaCIKIAotYXV0byBMTEludEdlbmVyYXRv
cjo6Y2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDYWxsUm9s
ZSByb2xlKSAtPiBMTEludENhbGxJbmZvcm1hdGlvbgorYXV0byBMTEludEdlbmVyYXRvcjo6Y2Fs
bEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTElu
dENhbGxJbmZvcm1hdGlvbgogeworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgc2V0dXBzIHRoZSBz
dGFjayBsYXlvdXQgZm9yIGNhbGxzLiBUaGUgZGVzaXJlZCBzdGFjayBsYXlvdXQgaXM6CisKKyAg
ICAvLyBGUFJuCisgICAgLy8gLi4uCisgICAgLy8gRlBSMQorICAgIC8vIEZQUjAKKyAgICAvLyAt
LS0KKyAgICAvLyBHUFJuCisgICAgLy8gLi4uCisgICAgLy8gR1BSMQorICAgIC8vIEdQUjAKKyAg
ICAvLyAtLS0tCisgICAgLy8gc3RhY2tOCisgICAgLy8gLi4uCisgICAgLy8gc3RhY2sxCisgICAg
Ly8gc3RhY2swCisgICAgLy8gLS0tCisgICAgLy8gY2FsbCBmcmFtZSBoZWFkZXIKKworICAgIC8v
IFdlIG5lZWQgdG8gYWxsb2NhdGUgYXQgbGVhc3Qgc3BhY2UgZm9yIGFsbCBHUFJzIGFuZCBGUFJz
LgorICAgIC8vIFJldHVybiB2YWx1ZXMgdXNlIHRoZSBzYW1lIGFsbG9jYXRpb24gbGF5b3V0Lgor
CisgICAgY29uc3QgYXV0byBpbml0aWFsU3RhY2tTaXplID0gbV9zdGFja1NpemU7CisKICAgICBj
b25zdCBhdXRvJiBjYWxsaW5nQ29udmVudGlvbiA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpOwog
ICAgIGNvbnN0IHVpbnQzMl90IGdwckNvdW50ID0gY2FsbGluZ0NvbnZlbnRpb24uZ3ByQXJncy5z
aXplKCk7CiAgICAgY29uc3QgdWludDMyX3QgZnByQ291bnQgPSBjYWxsaW5nQ29udmVudGlvbi5m
cHJBcmdzLnNpemUoKTsKQEAgLTI5OSwxNCArNDEyLDkgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6
Y2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDYWxsUm9sZSBy
b2wKICAgICB1aW50MzJfdCBzdGFja0NvdW50ID0gMDsKICAgICB1aW50MzJfdCBncHJJbmRleCA9
IDA7CiAgICAgdWludDMyX3QgZnBySW5kZXggPSAwOwotCi0gICAgVmVjdG9yPFJlZlB0cjxSZWdp
c3RlcklEPiwgMTY+IHJlZ2lzdGVyczsKLQotICAgIEV4cHJlc3Npb25MaXN0IGFyZ3VtZW50cyhz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKLSAgICBFeHByZXNzaW9uTGlzdCByZXN1bHRzKHNp
Z25hdHVyZS5yZXR1cm5Db3VudCgpKTsKKyAgICB1aW50MzJfdCBzdGFja0luZGV4ID0gMDsKIAog
ICAgIGF1dG8gYWxsb2NhdGVTdGFja1JlZ2lzdGVyID0gWyZdKFR5cGUgdHlwZSkgewotICAgICAg
ICBBU1NFUlQocm9sZSA9PSBDYWxsUm9sZTo6Q2FsbGVyKTsKICAgICAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgICAgIGNhc2UgVHlwZTo6STMyOgogICAgICAgICBjYXNlIFR5cGU6Okk2NDoKQEAg
LTMxNCwxOSArNDIyLDE1IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZv
cihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ2FsbFJvbGUgcm9sCiAgICAgICAgIGNhc2Ug
VHlwZTo6RnVuY3JlZjoKICAgICAgICAgICAgIGlmIChncHJJbmRleCA8IGdwckNvdW50KQogICAg
ICAgICAgICAgICAgICsrZ3BySW5kZXg7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICByZWdpc3RlcnMuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHN0YWNrSW5kZXgrKyA+PSBzdGFja0NvdW50KQogICAgICAgICAgICAgICAgICsrc3RhY2tD
b3VudDsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFR5
cGU6OkYzMjoKICAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CiAgICAgICAgICAgICBpZiAoZnBySW5k
ZXggPCBmcHJDb3VudCkKICAgICAgICAgICAgICAgICArK2ZwckluZGV4OwotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJzLmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7
CisgICAgICAgICAgICBlbHNlIGlmIChzdGFja0luZGV4KysgPj0gc3RhY2tDb3VudCkKICAgICAg
ICAgICAgICAgICArK3N0YWNrQ291bnQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBWb2lkOgogICAgICAgICBjYXNlIEZ1bmM6CkBAIC0zMzUsOTIgKzQz
OSwxNDUgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBDYWxsUm9sZSByb2wKICAgICB9OwogCiAKLSAgICBpZiAocm9s
ZSA9PSBDYWxsUm9sZTo6Q2FsbGVlKSB7Ci0gICAgICAgIC8vIFJldXNlIHRoZSBzbG90cyB3ZSBh
bGxvY2F0ZWQgdG8gc3BpbGwgdGhlIHJlZ2lzdGVycyBpbiBhZGRBcmd1bWVudHMKLSAgICAgICAg
Zm9yICh1aW50MzJfdCBpID0gZ3ByQ291bnQgKyBmcHJDb3VudDsgaS0tOykKLSAgICAgICAgICAg
IHJlZ2lzdGVycy5hcHBlbmQobmV3IFJlZ2lzdGVySUQoOjpKU0M6OnZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzICsgaSkpKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZ3ByQ291bnQ7IGkrKykKLSAg
ICAgICAgICAgIHJlZ2lzdGVycy5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwotICAgICAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgZnByQ291bnQ7IGkrKykKLSAgICAgICAgICAgIHJlZ2lzdGVy
cy5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwotCi0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspCi0gICAgICAgICAgICBhbGxvY2F0
ZVN0YWNrUmVnaXN0ZXIoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKTsKLSAgICAgICAgZ3BySW5kZXgg
PSAwOwotICAgICAgICBmcHJJbmRleCA9IDA7Ci0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgaSsrKQotICAgICAgICAgICAgYWxsb2NhdGVT
dGFja1JlZ2lzdGVyKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpKTsKKyAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKQorICAgICAgICBhbGxv
Y2F0ZVN0YWNrUmVnaXN0ZXIoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKTsKKworICAgIGdwckluZGV4
ID0gMDsKKyAgICBmcHJJbmRleCA9IDA7CisgICAgc3RhY2tJbmRleCA9IDA7CisgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyBpKyspCisgICAgICAg
IGFsbG9jYXRlU3RhY2tSZWdpc3RlcihzaWduYXR1cmUucmV0dXJuVHlwZShpKSk7CisKKyAgICAv
LyBGSVhNRTogd2UgYXJlIGFsbG9jYXRpbmcgdGhlIGV4dHJhIHNwYWNlIGZvciB0aGUgYXJndW1l
bnQvcmV0dXJuIGNvdW50IGluIG9yZGVyIHRvIGF2b2lkIGludGVyZmVyZW5jZSwgYnV0IHdlIGNv
dWxkIGRvIGJldHRlcgorICAgIC8vIE5PVEU6IFdlIGluY3JlYXNlIGFyZyBjb3VudCBieSAxIGZv
ciB0aGUgY2FzZSBvZiBpbmRpcmVjdCBjYWxscworICAgIG1fc3RhY2tTaXplICs9IHN0ZDo6bWF4
KHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgKyAxLCBzaWduYXR1cmUucmV0dXJuQ291bnQoKSkg
KyBncHJDb3VudCArIGZwckNvdW50ICsgc3RhY2tDb3VudCArIENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzOworICAgIGlmIChtX3N0YWNrU2l6ZSAlIHN0YWNrQWxpZ25tZW50UmVnaXN0
ZXJzKCkpCisgICAgICAgICsrbV9zdGFja1NpemU7CisgICAgaWYgKG1fbWF4U3RhY2tTaXplIDwg
bV9zdGFja1NpemUpCisgICAgICAgIG1fbWF4U3RhY2tTaXplID0gbV9zdGFja1NpemU7CisKKwor
ICAgIEV4cHJlc3Npb25MaXN0IGFyZ3VtZW50cyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsK
KyAgICBFeHByZXNzaW9uTGlzdCB0ZW1wb3JhcnlSZXN1bHRzKHNpZ25hdHVyZS5yZXR1cm5Db3Vu
dCgpKTsKKworICAgIGNvbnN0IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gbV9zdGFja1NpemU7Cisg
ICAgY29uc3QgdW5zaWduZWQgYmFzZSA9IHN0YWNrT2Zmc2V0IC0gQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnM7CisKKyAgICBjb25zdCB1aW50MzJfdCBncHJMaW1pdCA9IGJhc2UgLSBz
dGFja0NvdW50IC0gZ3ByQ291bnQ7CisgICAgY29uc3QgdWludDMyX3QgZnByTGltaXQgPSBncHJM
aW1pdCAtIGZwckNvdW50OworCisgICAgc3RhY2tJbmRleCA9IGJhc2U7CisgICAgZ3BySW5kZXgg
PSBiYXNlIC0gc3RhY2tDb3VudDsKKyAgICBmcHJJbmRleCA9IGdwckluZGV4IC0gZ3ByQ291bnQ7
CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAg
ICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIGNhc2Ug
VHlwZTo6QW55cmVmOgorICAgICAgICBjYXNlIFR5cGU6OkZ1bmNyZWY6CisgICAgICAgICAgICBp
ZiAoZ3BySW5kZXggPiBncHJMaW1pdCkKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNbaV0gPSB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLWdwckluZGV4KTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLXN0
YWNrSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgor
ICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIGlmIChmcHJJbmRleCA+IGZwckxp
bWl0KQorICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKC0tZnBySW5kZXgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50c1tpXSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKC0tc3RhY2tJbmRleCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICBjYXNlIEZ1bmM6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgdW5zaWduZWQgc3RhY2tPZmZzZXQ7Ci0gICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNh
bGxlZSkKLSAgICAgICAgc3RhY2tPZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXJlZ2lz
dGVycy5sYXN0KCktPmluZGV4KCkpOwotICAgIGVsc2UgewotICAgICAgICAvLyBBbGlnbiB0aGUg
c3RhY2sKLSAgICAgICAgYXV0byBjb21wdXRlU3RhY2tPZmZzZXQgPSBbJl0gewotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtcmVnaXN0ZXJzLmxhc3QoKS0+aW5kZXgo
KSkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgfTsKLSAgICAg
ICAgd2hpbGUgKGNvbXB1dGVTdGFja09mZnNldCgpICUgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSkKLSAgICAgICAgICAgIHJlZ2lzdGVycy5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwotICAgICAg
ICBzdGFja09mZnNldCA9IGNvbXB1dGVTdGFja09mZnNldCgpOworICAgIHN0YWNrSW5kZXggPSBi
YXNlOworICAgIGdwckluZGV4ID0gYmFzZSAtIHN0YWNrQ291bnQ7CisgICAgZnBySW5kZXggPSBn
cHJJbmRleCAtIGdwckNvdW50OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1
cmUucmV0dXJuQ291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVy
blR5cGUoaSkpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6
STY0OgorICAgICAgICBjYXNlIFR5cGU6OkFueXJlZjoKKyAgICAgICAgY2FzZSBUeXBlOjpGdW5j
cmVmOgorICAgICAgICAgICAgaWYgKGdwckluZGV4ID4gZ3ByTGltaXQpCisgICAgICAgICAgICAg
ICAgdGVtcG9yYXJ5UmVzdWx0c1tpXSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKC0tZ3BySW5k
ZXgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRlbXBvcmFyeVJlc3VsdHNb
aV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLXN0YWNrSW5kZXgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoK
KyAgICAgICAgICAgIGlmIChmcHJJbmRleCA+IGZwckxpbWl0KQorICAgICAgICAgICAgICAgIHRl
bXBvcmFyeVJlc3VsdHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLWZwckluZGV4KTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0ZW1wb3JhcnlSZXN1bHRzW2ldID0g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1zdGFja0luZGV4KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NF
UlQocm9sZSA9PSBDYWxsUm9sZTo6Q2FsbGVyIHx8ICFzdGFja0NvdW50KTsKLSAgICBjb25zdCB1
aW50MzJfdCBtYXhHUFJJbmRleCA9IHN0YWNrQ291bnQgKyBncHJDb3VudDsKLSAgICBjb25zdCB1
aW50MzJfdCBtYXhGUFJJbmRleCA9IG1heEdQUkluZGV4ICsgZnByQ291bnQ7CisgICAgbV9zdGFj
a1NpemUgPSBpbml0aWFsU3RhY2tTaXplOworCisgICAgYXV0byBjb21taXRSZXN1bHRzID0gW3Ro
aXMsIHRlbXBvcmFyeVJlc3VsdHMgPSBXVEZNb3ZlKHRlbXBvcmFyeVJlc3VsdHMpXShFeHByZXNz
aW9uTGlzdCYgcmVzdWx0cykgeworICAgICAgICBmb3IgKGF1dG8gdGVtcG9yYXJ5UmVzdWx0IDog
dGVtcG9yYXJ5UmVzdWx0cykgeworICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0g
cHVzaCgpOworICAgICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCByZXN1bHQsIHRlbXBvcmFy
eVJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICB9
CisgICAgfTsKKworICAgIHJldHVybiBMTEludENhbGxJbmZvcm1hdGlvbiB7IHN0YWNrT2Zmc2V0
LCBzdGFja0NvdW50LCBXVEZNb3ZlKGFyZ3VtZW50cyksIFdURk1vdmUoY29tbWl0UmVzdWx0cykg
fTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAyPgor
eworICAgIGlmIChtX3Jlc3VsdHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbV9yZXN1bHRzOwor
CisgICAgbV9yZXN1bHRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2lnbmF0dXJlLnJldHVybkNv
dW50KCkpOworCisgICAgY29uc3QgYXV0byYgY2FsbGluZ0NvbnZlbnRpb24gPSB3YXNtQ2FsbGlu
Z0NvbnZlbnRpb24oKTsKKyAgICBjb25zdCB1aW50MzJfdCBncHJDb3VudCA9IGNhbGxpbmdDb252
ZW50aW9uLmdwckFyZ3Muc2l6ZSgpOworICAgIGNvbnN0IHVpbnQzMl90IGZwckNvdW50ID0gY2Fs
bGluZ0NvbnZlbnRpb24uZnByQXJncy5zaXplKCk7CisKKyAgICB1aW50MzJfdCBncHJJbmRleCA9
IDA7CisgICAgdWludDMyX3QgZnBySW5kZXggPSBncHJDb3VudDsKICAgICB1aW50MzJfdCBzdGFj
a0luZGV4ID0gMDsKLSAgICBhdXRvIGFwcGVuZEZvclR5cGUgPSBbJl0oVHlwZSB0eXBlLCB1bnNp
Z25lZCBpbmRleCwgYXV0byYgdmVjdG9yKSB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNvbnN0IHVpbnQzMl90IG1heEdQUkluZGV4ID0gZ3ByQ291bnQ7CisgICAgY29uc3QgdWludDMy
X3QgbWF4RlBSSW5kZXggPSBtYXhHUFJJbmRleCArIGZwckNvdW50OworCisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyBpKyspIHsKKyAgICAgICAg
c3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZShpKSkgewogICAgICAgICBjYXNlIFR5cGU6Okkz
MjoKICAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CiAgICAgICAgIGNhc2UgVHlwZTo6QW55cmVmOgog
ICAgICAgICBjYXNlIFR5cGU6OkZ1bmNyZWY6CiAgICAgICAgICAgICBpZiAoZ3BySW5kZXggPCBt
YXhHUFJJbmRleCkKLSAgICAgICAgICAgICAgICB2ZWN0b3JbaW5kZXhdID0gcmVnaXN0ZXJzW3Jl
Z2lzdGVycy5zaXplKCkgLSBncHJJbmRleCsrIC0gMV07Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBpZiAocm9sZSA9PSBDYWxsUm9sZTo6Q2FsbGVyKQotICAgICAgICAgICAg
ICAgICAgICB2ZWN0b3JbaW5kZXhdID0gcmVnaXN0ZXJzW3JlZ2lzdGVycy5zaXplKCkgLSBzdGFj
a0luZGV4KysgLSAxXTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHZlY3RvcltpbmRleF0gPSBuZXcgUmVnaXN0ZXJJRCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChzdGFja0luZGV4KyspKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3Jlc3Vs
dHMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG51bWJlck9mTExJbnRDYWxsZWVTYXZl
UmVnaXN0ZXJzICsgZ3BySW5kZXgrKykpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG1fcmVzdWx0cy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoc3RhY2tJbmRl
eCsrKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlOjpGMzI6CiAgICAg
ICAgIGNhc2UgVHlwZTo6RjY0OgogICAgICAgICAgICAgaWYgKGZwckluZGV4IDwgbWF4RlBSSW5k
ZXgpCi0gICAgICAgICAgICAgICAgdmVjdG9yW2luZGV4XSA9IHJlZ2lzdGVyc1tyZWdpc3RlcnMu
c2l6ZSgpIC0gZnBySW5kZXgrKyAtIDFdOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcikKLSAgICAgICAgICAgICAgICAgICAg
dmVjdG9yW2luZGV4XSA9IHJlZ2lzdGVyc1tyZWdpc3RlcnMuc2l6ZSgpIC0gc3RhY2tJbmRleCsr
IC0gMV07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB2ZWN0b3Jb
aW5kZXhdID0gbmV3IFJlZ2lzdGVySUQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoc3RhY2tJ
bmRleCsrKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVu
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVy
cyArIGZwckluZGV4KyspKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Jl
c3VsdHMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KHN0YWNrSW5kZXgrKykpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVm9pZDoKICAgICAgICAgY2FzZSBGdW5j
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQot
ICAgIH07Ci0KLSAgICBncHJJbmRleCA9IHN0YWNrQ291bnQ7Ci0gICAgZnBySW5kZXggPSBtYXhH
UFJJbmRleDsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgaSsrKQotICAgICAgICBhcHBlbmRGb3JUeXBlKHNpZ25hdHVyZS5hcmd1bWVudChp
KSwgaSwgYXJndW1lbnRzKTsKLSAgICBncHJJbmRleCA9IHN0YWNrQ291bnQ7Ci0gICAgZnBySW5k
ZXggPSBtYXhHUFJJbmRleDsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJl
LnJldHVybkNvdW50KCk7IGkrKykKLSAgICAgICAgYXBwZW5kRm9yVHlwZShzaWduYXR1cmUucmV0
dXJuVHlwZShpKSwgaSwgcmVzdWx0cyk7Ci0KLSAgICBpZiAocm9sZSA9PSBDYWxsUm9sZTo6Q2Fs
bGVyKSB7Ci0gICAgICAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIGNhbGwgZnJhbWUuCi0gICAgICAg
IFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJJRD4sIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0
ZXJzICsgMiwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IGNhbGxGcmFtZTsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsgKytpKQotICAg
ICAgICAgICAgY2FsbEZyYW1lLmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CiAgICAgfQogCi0gICAg
cmV0dXJuIExMSW50Q2FsbEluZm9ybWF0aW9uIHsgc3RhY2tPZmZzZXQsIHN0YWNrQ291bnQsIFdU
Rk1vdmUoYXJndW1lbnRzKSwgV1RGTW92ZShyZXN1bHRzKSB9OworICAgIHJldHVybiBtX3Jlc3Vs
dHM7CiB9CiAKKwogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgbV9jb2RlQmxvY2stPm1f
bnVtQXJndW1lbnRzID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKQEAgLTQzNSw5ICs1OTIs
OSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKICAgICB1aW50MzJfdCBmcHJJbmRleCA9IG1heEdQ
UkluZGV4OwogICAgIHVpbnQzMl90IHN0YWNrSW5kZXggPSAwOwogCi0gICAgVmVjdG9yPFJlZlB0
cjxSZWdpc3RlcklEPj4gcmVnaXN0ZXJBcmd1bWVudHMoZ3ByQ291bnQgKyBmcHJDb3VudCk7Cisg
ICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gcmVnaXN0ZXJBcmd1bWVudHMoZ3ByQ291bnQgKyBm
cHJDb3VudCk7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGdwckNvdW50ICsgZnByQ291
bnQ7IGkrKykKLSAgICAgICAgcmVnaXN0ZXJBcmd1bWVudHNbaV0gPSBhZGRWYXIoKTsKKyAgICAg
ICAgcmVnaXN0ZXJBcmd1bWVudHNbaV0gPSBwdXNoKCk7CiAKICAgICBjb25zdCBhdXRvIGFkZEFy
Z3VtZW50ID0gWyZdKHVpbnQzMl90IGluZGV4LCB1aW50MzJfdCYgY291bnQsIHVpbnQzMl90IG1h
eCkgewogICAgICAgICBpZiAoY291bnQgPCBtYXgpCkBAIC00NjQsMTMgKzYyMSwxNiBAQCBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgfQogICAgIH0KIAorICAgIG1fY29kZUJsb2NrLT5t
X251bVZhcnMgKz0gZ3ByQ291bnQgKyBmcHJDb3VudDsKKwogICAgIHJldHVybiB7IH07CiB9CiAK
IGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBtX2NvZGVCbG9jay0+bV9udW1WYXJzICs9IGNvdW50
OwogICAgIHdoaWxlIChjb3VudC0tKSB7Ci0gICAgICAgIGF1dG8gbG9jYWwgPSBhZGRWYXIoKTsK
KyAgICAgICAgYXV0byBsb2NhbCA9IHB1c2goKTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgICAgIGNhc2UgVHlwZTo6QW55cmVmOgogICAgICAgICBjYXNlIFR5cGU6OkZ1bmNyZWY6CkBA
IC00ODUsNDUgKzY0NSw2OSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5
cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiAKIHZvaWQgTExJbnRHZW5lcmF0
b3I6OmRpZEZpbmlzaFBhcnNpbmdMb2NhbHMoKQogeworICAgIGlmIChtX3VuaXRpYWxpemVkTG9j
YWxzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byBudWxsID0ganNOdWxs
Q29uc3RhbnQoKTsKICAgICBmb3IgKGF1dG8gbG9jYWwgOiBtX3VuaXRpYWxpemVkTG9jYWxzKQog
ICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGxvY2FsLCBudWxsKTsKICAgICBtX3VuaXRpYWxp
emVkTG9jYWxzLmNsZWFyKCk7CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENvbnN0YW50
KFR5cGUgdHlwZSwgdWludDY0X3QgdmFsdWUpIC0+IEV4cHJlc3Npb25UeXBlCithdXRvIExMSW50
R2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIGludDY0X3QgdmFsdWUpIC0+IEV4cHJl
c3Npb25UeXBlCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNvdXJjZShGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCArIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5zaXplKCkpOwotICAgIGF1dG8g
cmVzdWx0ID0gbV9jb25zdGFudE1hcC5lbXBsYWNlKHZhbHVlLCBzb3VyY2UpOwotICAgIGlmIChy
ZXN1bHQuc2Vjb25kKSB7CisgICAgYXV0byBjb25zdGFudCA9IFsmXSB7CisgICAgICAgIGlmICgh
dmFsdWUpCisgICAgICAgICAgICByZXR1cm4gemVyb0NvbnN0YW50KCk7CisKKyAgICAgICAgaWYg
KHZhbHVlID09IEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpCisgICAgICAgICAgICByZXR1cm4g
anNOdWxsQ29uc3RhbnQoKTsKKworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc291cmNlKEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb2RlQmxvY2stPm1fY29uc3RhbnRzLnNpemUoKSk7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9jb25zdGFudE1hcC5hZGQodmFsdWUsIHNvdXJjZSk7
CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgbV9jb2RlQmxvY2stPm1fY29uc3RhbnRzLmFw
cGVuZCh2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wR2VuZXJhdGVk
V2FzbUJ5dGVjb2RlcygpKSkKICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50VHlw
ZXMuYXBwZW5kKHR5cGUpOwotICAgIH0gZWxzZQotICAgICAgICBzb3VyY2UgPSByZXN1bHQuZmly
c3QtPnNlY29uZDsKLSAgICBhdXRvIHRhcmdldCA9IG5ld1RlbXBvcmFyeSgpOwotICAgIFdhc21N
b3Y6OmVtaXQodGhpcywgdGFyZ2V0LCBzb3VyY2UpOwotICAgIHJldHVybiB0YXJnZXQ7CisgICAg
ICAgIHJldHVybiBzb3VyY2U7CisgICAgfTsKKyAgICAvLyBsZWF2ZSBhIGhvbGUgaWYgd2UgbmVl
ZCB0byBtYXRlcmlhbGl6ZSB0aGUgY29uc3RhbnQKKyAgICBwdXNoKCk7CisgICAgcmV0dXJuIGNv
bnN0YW50KCk7CiB9CiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmdldExvY2FsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgLy8g
RklYTUU6IFJlbW92ZSB1bm5lY2Vzc2FyeSBtb3ZlcwotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM2NTcKLSAgICByZXN1bHQgPSBuZXdUZW1wb3Jhcnko
KTsKLSAgICBXYXNtTW92OjplbWl0KHRoaXMsIHJlc3VsdCwgdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoaW5kZXgpKTsKKyAgICAvLyBsZWF2ZSBhIGhvbGUgaWYgd2UgbmVlZCB0byBtYXRlcmlhbGl6
ZSB0aGUgbG9jYWwKKyAgICBwdXNoKCk7CisgICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9y
V2FzbUxvY2FsKGluZGV4KTsKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIExMSW50R2VuZXJh
dG9yOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKLSAgICBXYXNtTW92OjplbWl0KHRoaXMsIHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGluZGV4KSwgdmFsdWUpOworICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JXYXNtTG9jYWwoaW5kZXgpOworCisgICAgLy8gSWYgdGhpcyBsb2NhbCBp
cyBjdXJyZW50bHkgb24gdGhlIHN0YWNrIHdlIG5lZWQgdG8gbWF0ZXJpYWxpemUgaXQsIG90aGVy
d2lzZSBpdCdsbCBzZWUgdGhlIG5ldyB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSBvbGQgb25lCisgICAg
U3RhY2smIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5leHByZXNzaW9uU3RhY2soKTsKKyAg
ICBmb3IgKGludCBpID0gZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgaSA+IDA7IC0taSkgeworICAg
ICAgICBhdXRvIGV4cHJlc3Npb24gPSBleHByZXNzaW9uU3RhY2tbZXhwcmVzc2lvblN0YWNrLnNp
emUoKSAtIGldOworICAgICAgICBpZiAoZXhwcmVzc2lvbiA9PSB0YXJnZXQpIHsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBzbG90ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9zdGFj
a1NpemUgLSBpKTsKKyAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgc2xvdCwgZXhwcmVz
c2lvbik7CisgICAgICAgICAgICBleHByZXNzaW9uU3RhY2tbZXhwcmVzc2lvblN0YWNrLnNpemUo
KSAtIGldID0gc2xvdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFdhc21Nb3Y6OmVtaXQodGhp
cywgdGFyZ2V0LCB2YWx1ZSk7CisKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIExMSW50R2Vu
ZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICBy
ZXN1bHQgPSBwdXNoKCk7CiAgICAgV2FzbUdldEdsb2JhbDo6ZW1pdCh0aGlzLCByZXN1bHQsIGlu
ZGV4KTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNTQwLDExICs3MjQsMTMgQEAgYXV0byBMTElu
dEdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSkgLT4gUGFydGlhbFIKIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25h
dHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIGJsb2Nr
LCBTdGFjayYgbmV3U3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCkgLT4gUGFydGlhbFJlc3VsdAog
eworICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsK
KyAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhuZXdTdGFjayk7CisKICAgICBSZWY8
TGFiZWw+IGJvZHkgPSBuZXdFbWl0dGVkTGFiZWwoKTsKICAgICBSZWY8TGFiZWw+IGNvbnRpbnVh
dGlvbiA9IG5ld0xhYmVsKCk7CiAKLSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJl
LCBlbmNsb3NpbmdTdGFjayk7Ci0gICAgYmxvY2sgPSBDb250cm9sVHlwZTo6bG9vcChzaWduYXR1
cmUsIG5ld1N0YWNrLCBXVEZNb3ZlKGJvZHkpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbikpOworICAg
IGJsb2NrID0gQ29udHJvbFR5cGU6Omxvb3Aoc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwgV1RGTW92
ZShib2R5KSwgV1RGTW92ZShjb250aW51YXRpb24pKTsKIAogICAgIFZlY3RvcjxWaXJ0dWFsUmVn
aXN0ZXI+IG9zckVudHJ5RGF0YTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9jb2Rl
QmxvY2stPm1fbnVtQXJndW1lbnRzOyBpKyspCkBAIC01NTQsMTEgKzc0MCwxMSBAQCBhdXRvIExM
SW50R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVu
Y2xvc2luZ1N0YWNrLCBDbwogICAgIGNvbnN0IHVpbnQzMl90IGdwckNvdW50ID0gY2FsbGluZ0Nv
bnZlbnRpb24uZ3ByQXJncy5zaXplKCk7CiAgICAgY29uc3QgdWludDMyX3QgZnByQ291bnQgPSBj
YWxsaW5nQ29udmVudGlvbi5mcHJBcmdzLnNpemUoKTsKICAgICBmb3IgKGludDMyX3QgaSA9IGdw
ckNvdW50ICsgZnByQ291bnQgKyBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVyczsgaSA8
IG1fY29kZUJsb2NrLT5tX251bVZhcnM7IGkrKykKLSAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVu
ZCg6OkpTQzo6dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOworICAgICAgICBvc3JFbnRyeURh
dGEuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2so
KS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0JiBleHBy
ZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IG1f
cGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0
YWNrOwogICAgICAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCi0g
ICAgICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24tPnZpcnR1YWxSZWdpc3Rl
cigpKTsKKyAgICAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQoZXhwcmVzc2lvbik7CiAgICAg
fQogCiAgICAgV2FzbUxvb3BIaW50OjplbWl0KHRoaXMpOwpAQCAtNTcwLDEzICs3NTYsMTQgQEAg
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0
YWNrJiBlbmNsb3NpbmdTdGFjaywgQ28KIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVG9wTGV2
ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKSAtPiBDb250cm9sVHlwZQogewotICAgIHJldHVy
biBDb250cm9sVHlwZTo6dG9wTGV2ZWwoc2lnbmF0dXJlLCB0bXBzRm9yU2lnbmF0dXJlKHNpZ25h
dHVyZSksIG5ld0xhYmVsKCkpOworICAgIG1fdG9wTGV2ZWxTdGFja1NpemUgPSBtX3N0YWNrU2l6
ZTsKKyAgICByZXR1cm4gQ29udHJvbFR5cGU6OnRvcExldmVsKHNpZ25hdHVyZSwgbV9zdGFja1Np
emUsIG5ld0xhYmVsKCkpOwogfQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRCbG9jayhCbG9j
a1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUm
IG5ld0Jsb2NrLCBTdGFjayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBuZXdT
dGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7Ci0gICAgbmV3Qmxv
Y2sgPSBDb250cm9sVHlwZTo6YmxvY2soc2lnbmF0dXJlLCB0bXBzRm9yU2lnbmF0dXJlKHNpZ25h
dHVyZSksIG5ld0xhYmVsKCkpOworICAgIG5ld0Jsb2NrID0gQ29udHJvbFR5cGU6OmJsb2NrKHNp
Z25hdHVyZSwgbV9zdGFja1NpemUsIG5ld0xhYmVsKCkpOwogICAgIHJldHVybiB7IH07CiB9CiAK
QEAgLTU4OCwxMTQgKzc3NSwxNDkgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkSWYoRXhwcmVz
c2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFMKICAgICBXYXNt
SmZhbHNlOjplbWl0KHRoaXMsIGNvbmRpdGlvbiwgYWx0ZXJuYXRlLT5iaW5kKHRoaXMpKTsKIAog
ICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKLSAg
ICByZXN1bHQgPSBDb250cm9sVHlwZTo6aWZfKHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25hdHVyZShz
aWduYXR1cmUpLCBXVEZNb3ZlKGFsdGVybmF0ZSksIFdURk1vdmUoY29udGludWF0aW9uKSk7Cisg
ICAgcmVzdWx0ID0gQ29udHJvbFR5cGU6OmlmXyhzaWduYXR1cmUsIG1fc3RhY2tTaXplLCBXVEZN
b3ZlKGFsdGVybmF0ZSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9sVHlwZSYgZGF0YSwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIGN1cnJlbnRTdGFjaykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBM
TEludEdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9sVHlwZSYgZGF0YSwgU3RhY2smIGV4cHJlc3Np
b25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAogeworICAgIC8vIFRPRE86IGRvbid0IGVtaXQganVt
cCBmb3IgZW1wdHkgZWxzZQogICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRy
b2xJZj4oZGF0YSkpOwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGRhdGEubV9yZXN1bHRzLCBj
dXJyZW50U3RhY2spOworICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKGV4cHJlc3Np
b25TdGFjayk7CiAgICAgV2FzbUptcDo6ZW1pdCh0aGlzLCBkYXRhLm1fY29udGludWF0aW9uLT5i
aW5kKHRoaXMpKTsKICAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7CiB9CiAK
IGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBk
YXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6
ZSgpICsgZGF0YS5tX3NpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworCiAgICAgQ29udHJvbElm
JiBjb250cm9sID0gV1RGOjpnZXQ8Q29udHJvbElmPihkYXRhKTsKICAgICBlbWl0TGFiZWwoY29u
dHJvbC5tX2FsdGVybmF0ZS5nZXQoKSk7Ci0gICAgZGF0YSA9IENvbnRyb2xUeXBlOjpibG9jayhk
YXRhLm1fc2lnbmF0dXJlLCBXVEZNb3ZlKGRhdGEubV9yZXN1bHRzKSwgV1RGTW92ZShkYXRhLm1f
Y29udGludWF0aW9uKSk7CisgICAgZGF0YSA9IENvbnRyb2xUeXBlOjpibG9jayhkYXRhLm1fc2ln
bmF0dXJlLCBtX3N0YWNrU2l6ZSwgV1RGTW92ZShkYXRhLm1fY29udGludWF0aW9uKSk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENv
bnRyb2xUeXBlJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJv
bFR5cGUmIGRhdGEsIFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAg
ICBpZiAoIWRhdGEubV9zaWduYXR1cmUtPnJldHVybkNvdW50KCkpIHsKICAgICAgICAgV2FzbVJl
dFZvaWQ6OmVtaXQodGhpcyk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgTExJ
bnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvcigqZGF0YS5tX3NpZ25h
dHVyZSwgQ2FsbFJvbGU6OkNhbGxlZSk7Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soaW5mby5y
ZXN1bHRzLCByZXR1cm5WYWx1ZXMpOworICAgIC8vIG5vIG5lZWQgdG8gZHJvcCBrZWVwIGhlcmUs
IHNpbmNlIHdlIGhhdmUgdG8gbW92ZSBhbnl3YXkKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhj
YWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoKmRhdGEubV9zaWduYXR1cmUpLCByZXR1cm5WYWx1ZXMp
OwogICAgIFdhc21SZXQ6OmVtaXQodGhpcyk7CiAKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRv
IExMSW50R2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbFR5cGUmIGRhdGEsIEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiBk
YXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhkYXRhLm1fcmVzdWx0cywg
cmV0dXJuVmFsdWVzKTsKLQogICAgIFJlZlB0cjxMYWJlbD4gdGFyZ2V0ID0gZGF0YS50YXJnZXRM
YWJlbEZvckJyYW5jaCgpOwotICAgIGlmIChjb25kaXRpb24pCi0gICAgICAgIFdhc21KdHJ1ZTo6
ZW1pdCh0aGlzLCBjb25kaXRpb24sIHRhcmdldC0+YmluZCh0aGlzKSk7Ci0gICAgZWxzZQotICAg
ICAgICBXYXNtSm1wOjplbWl0KHRoaXMsIHRhcmdldC0+YmluZCh0aGlzKSk7CisgICAgUmVmUHRy
PExhYmVsPiBza2lwID0gbnVsbHB0cjsKKworICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9j
YWxzKHJldHVyblZhbHVlcyk7CisKKyAgICBpZiAoY29uZGl0aW9uLmlzVmFsaWQoKSkgeworICAg
ICAgICBza2lwID0gbmV3TGFiZWwoKTsKKyAgICAgICAgV2FzbUpmYWxzZTo6ZW1pdCh0aGlzLCBj
b25kaXRpb24sIHNraXAtPmJpbmQodGhpcykpOworICAgIH0KKworICAgIGRyb3BLZWVwKHJldHVy
blZhbHVlcywgZGF0YSwgIXNraXApOworICAgIFdhc21KbXA6OmVtaXQodGhpcywgdGFyZ2V0LT5i
aW5kKHRoaXMpKTsKKworICAgIGlmIChza2lwKQorICAgICAgICBlbWl0TGFiZWwoKnNraXApOwog
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlKj4mIHRhcmdl
dHMsIENvbnRyb2xUeXBlJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhw
cmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRT
d2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbFR5cGUq
PiYgdGFyZ2V0cywgQ29udHJvbFR5cGUmIGRlZmF1bHRUYXJnZXQsIFN0YWNrJiBleHByZXNzaW9u
U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gbV9j
b2RlQmxvY2stPm51bWJlck9mSnVtcFRhYmxlcygpOwotICAgIEZ1bmN0aW9uQ29kZUJsb2NrOjpK
dW1wVGFibGUmIGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRKdW1wVGFibGUodGFyZ2V0cy5z
aXplKCkpOworICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKGV4cHJlc3Npb25TdGFj
ayk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldHMpCi0gICAgICAgIHVu
aWZ5VmFsdWVzV2l0aEJsb2NrKHRhcmdldC0+bV9yZXN1bHRzLCBleHByZXNzaW9uU3RhY2spOwot
ICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGRlZmF1bHRUYXJnZXQubV9yZXN1bHRzLCBleHByZXNz
aW9uU3RhY2spOworICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZKdW1wVGFibGVzKCk7CisgICAgRnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJsZSYganVtcFRh
YmxlID0gbV9jb2RlQmxvY2stPmFkZEp1bXBUYWJsZSh0YXJnZXRzLnNpemUoKSArIDEpOwogCi0g
ICAgV2FzbVN3aXRjaDo6ZW1pdCh0aGlzLCBjb25kaXRpb24sIHRhYmxlSW5kZXgsIGRlZmF1bHRU
YXJnZXQudGFyZ2V0TGFiZWxGb3JCcmFuY2goKS0+YmluZCh0aGlzKSk7CisgICAgV2FzbVN3aXRj
aDo6ZW1pdCh0aGlzLCBjb25kaXRpb24sIHRhYmxlSW5kZXgpOwogCiAgICAgdW5zaWduZWQgaW5k
ZXggPSAwOwogICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0ID0gbV9sYXN0SW5z
dHJ1Y3Rpb24ub2Zmc2V0KCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0YXJnZXRz
KSB7Ci0gICAgICAgIFJlZlB0cjxMYWJlbD4gdGFyZ2V0TGFiZWwgPSB0YXJnZXQtPnRhcmdldExh
YmVsRm9yQnJhbmNoKCk7CisKKyAgICBhdXRvIGFkZFRhcmdldCA9IFsmXShDb250cm9sVHlwZSYg
dGFyZ2V0KSB7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gdGFyZ2V0TGFiZWwgPSB0YXJnZXQudGFy
Z2V0TGFiZWxGb3JCcmFuY2goKTsKKworICAgICAgICBnZXREcm9wS2VlcENvdW50KHRhcmdldCwg
anVtcFRhYmxlW2luZGV4XS5zdGFydE9mZnNldCwganVtcFRhYmxlW2luZGV4XS5kcm9wQ291bnQs
IGp1bXBUYWJsZVtpbmRleF0ua2VlcENvdW50KTsKKwogICAgICAgICBpZiAodGFyZ2V0TGFiZWwt
PmlzRm9yd2FyZCgpKSB7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fc3dpdGNoZXMuYWRk
KHRhcmdldExhYmVsLmdldCgpLCBWZWN0b3I8U3dpdGNoRW50cnk+KCkpOwotICAgICAgICAgICAg
QVNTRVJUKCFqdW1wVGFibGVbaW5kZXhdKTsKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKHsgb2Zmc2V0LCAmanVtcFRhYmxlW2luZGV4KytdIH0pOworICAgICAgICAg
ICAgQVNTRVJUKCFqdW1wVGFibGVbaW5kZXhdLnRhcmdldCk7CisgICAgICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChTd2l0Y2hFbnRyeSB7IG9mZnNldCwgJmp1bXBUYWJsZVtp
bmRleCsrXS50YXJnZXQgfSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQganVt
cFRhcmdldCA9IHRhcmdldExhYmVsLT5iaW5kKHRoaXMpLnRhcmdldCgpOworICAgICAgICAgICAg
aW50IGp1bXBUYXJnZXQgPSB0YXJnZXRMYWJlbC0+bG9jYXRpb24oKSAtIG9mZnNldDsKICAgICAg
ICAgICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKLSAgICAgICAgICAgIGp1bXBUYWJsZVtpbmRleCsr
XSA9IGp1bXBUYXJnZXQ7CisgICAgICAgICAgICBqdW1wVGFibGVbaW5kZXgrK10udGFyZ2V0ID0g
anVtcFRhcmdldDsKICAgICAgICAgfQotICAgIH0KKyAgICB9OwogCisgICAgZm9yIChjb25zdCBh
dXRvJiB0YXJnZXQgOiB0YXJnZXRzKQorICAgICAgICBhZGRUYXJnZXQoKnRhcmdldCk7CisgICAg
YWRkVGFyZ2V0KGRlZmF1bHRUYXJnZXQpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBM
TEludEdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxp
c3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRv
cjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4cHJlc3Npb25TdGFjaykg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIENvbnRyb2xUeXBlJiBkYXRhID0gZW50cnkuY29udHJv
bERhdGE7Ci0KLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KGRh
dGEpKQotICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhkYXRhLm1fcmVzdWx0cywgZXhwcmVz
c2lvblN0YWNrKTsKLQotICAgIHJldHVybiBhZGRFbmRUb1VucmVhY2hhYmxlKGVudHJ5LCBleHBy
ZXNzaW9uU3RhY2spOworICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKGV4cHJlc3Np
b25TdGFjayk7CisgICAgcmV0dXJuIGFkZEVuZFRvVW5yZWFjaGFibGUoZW50cnksIGV4cHJlc3Np
b25TdGFjaywgZmFsc2UpOwogfQogCiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5y
ZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFj
aykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNo
YWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBi
b29sIHVucmVhY2hhYmxlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisjaWYgQVNTRVJUX0RJU0FCTEVE
CisgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Npb25TdGFjayk7CisjZW5kaWYKKwogICAgIENvbnRy
b2xUeXBlJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CiAKLSAgICBlbWl0TGFiZWwoKmRhdGEu
bV9jb250aW51YXRpb24pOworICAgIFJFTEVBU0VfQVNTRVJUKHVucmVhY2hhYmxlIHx8IG1fc3Rh
Y2tTaXplID09IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3Vu
dCgpKTsKIAotICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sTG9vcD4oZGF0
YSkpCi0gICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZFZlY3Rvcihk
YXRhLm1fcmVzdWx0cyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKSkKLSAgICAgICAgICAgICAgICBlbnRyeS5l
bmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFj
ay5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwotICAgICAgICB9CisgICAgbV9zdGFja1NpemUgPSBk
YXRhLnN0YWNrU2l6ZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9z
aWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkgeworICAgICAgICBhdXRvIHRtcCA9IHB1c2go
KTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIEFTU0VSVCh1bnJlYWNoYWJsZSB8fCB0
bXAgPT0gZXhwcmVzc2lvblN0YWNrW2ldKTsKKyNlbmRpZgorICAgICAgICBlbnRyeS5lbmNsb3Nl
ZEV4cHJlc3Npb25TdGFjay5hcHBlbmQodG1wKTsKKyAgICB9CisKKyAgICBpZiAobV9sYXN0T3Bj
b2RlSUQgPT0gd2FzbV9qbXAgJiYgZGF0YS5tX2NvbnRpbnVhdGlvbi0+dW5yZXNvbHZlZEp1bXBz
KCkuc2l6ZSgpID09IDEgJiYgZGF0YS5tX2NvbnRpbnVhdGlvbi0+dW5yZXNvbHZlZEp1bXBzKClb
MF0gPT0gc3RhdGljX2Nhc3Q8aW50PihtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSkpIHsKKyAg
ICAgICAgbV9sYXN0T3Bjb2RlSUQgPSB3YXNtX3VucmVhY2hhYmxlOworICAgICAgICBtX3dyaXRl
ci5yZXdpbmQobV9sYXN0SW5zdHJ1Y3Rpb24pOworICAgIH0gZWxzZQorICAgICAgICBlbWl0TGFi
ZWwoKmRhdGEubV9jb250aW51YXRpb24pOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBM
TEludEdlbmVyYXRvcjo6ZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgaWYgKCFzaWduYXR1cmUtPnJldHVybkNvdW50KCkpIHsKKyAg
ICAgICAgV2FzbVJldFZvaWQ6OmVtaXQodGhpcyk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogCi0gICAgLy8gVG9wTGV2ZWwgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBhZnRlciB0aGlzIHNv
IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVtaXQgYSByZXR1cm4gaGVyZS4KLSAgICBpZiAoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sVG9wTGV2ZWw+KGRhdGEpKQotICAgICAgICByZXR1
cm4gYWRkUmV0dXJuKGRhdGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKKyAgICBt
X3N0YWNrU2l6ZSA9IG1fdG9wTGV2ZWxTdGFja1NpemU7CisgICAgVmVjdG9yPFZpcnR1YWxSZWdp
c3Rlcj4gcmV0dXJuVmFsdWVzKHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAg
ICByZXR1cm5WYWx1ZXNbaV0gPSBwdXNoKCk7CisKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhj
YWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoKnNpZ25hdHVyZSksIHJldHVyblZhbHVlcyk7CisgICAg
V2FzbVJldDo6ZW1pdCh0aGlzKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC03MDMsMTMgKzky
NSwxMyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xF
bnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZQogYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
Q2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9
PSBhcmdzLnNpemUoKSk7Ci0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJbmZv
cm1hdGlvbkZvcihzaWduYXR1cmUpOworICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBj
YWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoc2lnbmF0dXJlKTsKICAgICB1bmlmeVZhbHVlc1dpdGhC
bG9jayhpbmZvLmFyZ3VtZW50cywgYXJncyk7Ci0gICAgcmVzdWx0cyA9IFdURk1vdmUoaW5mby5y
ZXN1bHRzKTsKICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICBXYXNtQ2Fs
bDo6ZW1pdCh0aGlzLCBmdW5jdGlvbkluZGV4LCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJl
ck9mU3RhY2tBcmd1bWVudHMpOwogICAgIGVsc2UKICAgICAgICAgV2FzbUNhbGxOb1Rsczo6ZW1p
dCh0aGlzLCBmdW5jdGlvbkluZGV4LCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3Rh
Y2tBcmd1bWVudHMpOworICAgIGluZm8uY29tbWl0UmVzdWx0cyhyZXN1bHRzKTsKIAogICAgIHJl
dHVybiB7IH07CiB9CkBAIC03MjIsMjAgKzk0NCwyMCBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YQogICAgIEFTU0VSVChtX2luZm8udGFibGVDb3VudCgpID4gdGFibGVJbmRleCk7CiAgICAgQVNT
RVJUKG1faW5mby50YWJsZXNbdGFibGVJbmRleF0udHlwZSgpID09IFRhYmxlRWxlbWVudFR5cGU6
OkZ1bmNyZWYpOwogCi0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJbmZvcm1h
dGlvbkZvcihzaWduYXR1cmUpOworICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxs
SW5mb3JtYXRpb25Gb3JDYWxsZXIoc2lnbmF0dXJlKTsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhpbmZvLmFyZ3VtZW50cywgYXJncyk7Ci0gICAgcmVzdWx0cyA9IFdURk1vdmUoaW5mby5yZXN1
bHRzKTsKICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICBXYXNtQ2FsbElu
ZGlyZWN0OjplbWl0KHRoaXMsIGNhbGxlZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJl
KHNpZ25hdHVyZSksIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50
cywgdGFibGVJbmRleCk7CiAgICAgZWxzZQogICAgICAgICBXYXNtQ2FsbEluZGlyZWN0Tm9UbHM6
OmVtaXQodGhpcywgY2FsbGVlSW5kZXgsIG1fY29kZUJsb2NrLT5hZGRTaWduYXR1cmUoc2lnbmF0
dXJlKSwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNrQXJndW1lbnRzLCB0YWJs
ZUluZGV4KTsKKyAgICBpbmZvLmNvbW1pdFJlc3VsdHMocmVzdWx0cyk7CiAKICAgICByZXR1cm4g
eyB9OwogfQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRSZWZJc051bGwoRXhwcmVzc2lvblR5
cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAg
ICByZXN1bHQgPSB2YWx1ZTsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAgICAgV2FzbVJlZklzTnVs
bDo6ZW1pdCh0aGlzLCByZXN1bHQsIHZhbHVlKTsKIAogICAgIHJldHVybiB7IH07CkBAIC03NDMs
NyArOTY1LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25U
eXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQogCiBhdXRvIExMSW50R2VuZXJhdG9y
OjphZGRSZWZGdW5jKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgcmVzdWx0
ID0gcHVzaCgpOwogICAgIFdhc21SZWZGdW5jOjplbWl0KHRoaXMsIHJlc3VsdCwgaW5kZXgpOwog
CiAgICAgcmV0dXJuIHsgfTsKQEAgLTc1MSw3ICs5NzMsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9y
OjphZGRSZWZGdW5jKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUlu
ZGV4LCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IGluZGV4OworICAgIHJlc3VsdCA9IHB1c2goKTsK
ICAgICBXYXNtVGFibGVHZXQ6OmVtaXQodGhpcywgcmVzdWx0LCBpbmRleCwgdGFibGVJbmRleCk7
CiAKICAgICByZXR1cm4geyB9OwpAQCAtNzY2LDcgKzk4OCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0
b3I6OmFkZFRhYmxlU2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4
LCBFeHByCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSh1bnNpZ25lZCB0YWJs
ZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAg
cmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21U
YWJsZVNpemU6OmVtaXQodGhpcywgcmVzdWx0LCB0YWJsZUluZGV4KTsKIAogICAgIHJldHVybiB7
IH07CkBAIC03NzQsNyArOTk2LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVGFibGVTaXpl
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0KIAogYXV0byBM
TEludEdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Np
b25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gZmlsbDsKKyAgICByZXN1bHQgPSBw
dXNoKCk7CiAgICAgV2FzbVRhYmxlR3Jvdzo6ZW1pdCh0aGlzLCByZXN1bHQsIGZpbGwsIGRlbHRh
LCB0YWJsZUluZGV4KTsKIAogICAgIHJldHVybiB7IH07CkBAIC03OTYsNyArMTAxOCw3IEBAIGF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAogCiBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBuZXdUZW1wb3JhcnkoKTsKKyAg
ICByZXN1bHQgPSBwdXNoKCk7CiAgICAgV2FzbUN1cnJlbnRNZW1vcnk6OmVtaXQodGhpcywgcmVz
dWx0KTsKIAogICAgIHJldHVybiB7IH07CkBAIC04MDQsNyArMTAyNiw3IEBAIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Np
b25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7
Ci0gICAgcmVzdWx0ID0gZGVsdGE7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21Hcm93
TWVtb3J5OjplbWl0KHRoaXMsIHJlc3VsdCwgZGVsdGEpOwogCiAgICAgcmV0dXJuIHsgfTsKQEAg
LTgxMiw3ICsxMDM0LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHBy
ZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKIAogYXV0byBMTEludEdl
bmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5
cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IGNvbmRpdGlvbjsKKyAgICByZXN1bHQg
PSBwdXNoKCk7CiAgICAgV2FzbVNlbGVjdDo6ZW1pdCh0aGlzLCByZXN1bHQsIGNvbmRpdGlvbiwg
bm9uWmVybywgemVybyk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtODIwLDcgKzEwNDIsNyBAQCBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBF
eHByZXNzaW9uVHlwZSBub25aZXJvLAogCiBhdXRvIExMSW50R2VuZXJhdG9yOjpsb2FkKExvYWRP
cFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IHBvaW50
ZXI7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIExv
YWRPcFR5cGU6OkkzMkxvYWQ4UzoKICAgICAgICAgV2FzbUkzMkxvYWQ4Uzo6ZW1pdCh0aGlzLCBy
ZXN1bHQsIHBvaW50ZXIsIG9mZnNldCk7CkBAIC05MzIsMTYgKzExNTQsOCBAQCB2b2lkIEdlbmVy
aWNMYWJlbDxXYXNtOjpHZW5lcmF0b3JUcmFpdHM+OjpzZXRMb2NhdGlvbihCeXRlY29kZUdlbmVy
YXRvckJhc2U8V2FzbQogICAgICAgICBDQVNFKFdhc21KbXApCiAgICAgICAgIENBU0UoV2FzbUp0
cnVlKQogICAgICAgICBDQVNFKFdhc21KZmFsc2UpCi0gICAgICAgIGNhc2UgV2FzbVN3aXRjaDo6
b3Bjb2RlSUQ6IHsKLSAgICAgICAgICAgIEFTU0VSVCgoIWluc3RydWN0aW9uLT5hczxXYXNtU3dp
dGNoLCBXYXNtT3Bjb2RlVHJhaXRzPigpLm1fZGVmYXVsdFRhcmdldCkpOwotICAgICAgICAgICAg
aW5zdHJ1Y3Rpb24tPmNhc3Q8V2FzbVN3aXRjaCwgV2FzbU9wY29kZVRyYWl0cz4oKS0+c2V0RGVm
YXVsdFRhcmdldChCb3VuZExhYmVsKHRhcmdldCksIFsmXSgpIHsKLSAgICAgICAgICAgICAgICBn
ZW5lcmF0b3IubV9jb2RlQmxvY2stPmFkZE91dE9mTGluZUp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24u
b2Zmc2V0KCksIHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJvdW5kTGFiZWwoKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogI3VuZGVmIENBU0UKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCmluZGV4
IDc3MmI1MTk2NmU0NTdkMjk2OGJjNjViMzEwOTM4ZGRmYmMyYjEwZjYuLmJjZWViMjg2YmEzY2Iz
MTk3ZWJmYjgwYjRlNWVmNTE2ZmFiNGQ1OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21MTEludFBsYW4uY3BwCkBAIC04MCwxMCArODAsMTAgQEAgdm9pZCBMTEludFBsYW46
OmNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIG1fd2FzbUludGVy
bmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVz
dWx0KTsKIAogICAgIGlmIChtX2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0
aW9uSW5kZXgpIHx8IG1fbW9kdWxlSW5mb3JtYXRpb24tPnJlZmVyZW5jZWRGdW5jdGlvbnMoKS5j
b250YWlucyhmdW5jdGlvbkluZGV4KSkgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CiAgICAgICAgIEVtYmVkZXJUb1dhc21GdW5jdGlvbiBlbnRyeTsKICAgICAgICAg
ZW50cnkuaml0ID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgICAgIGVudHJ5LmZ1
bmN0aW9uID0gbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoKmVudHJ5LmppdCwgc2lnbmF0dXJlLCAm
bV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbnRyeSkpOwog
ICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCmluZGV4IGM1YTA4
MTU0NWQ0NTQzOTVjMGQwYmJkNGEzMDAzNjkyYTAxN2JjYzcuLjcyODMyZjI5NjhmZmI0Mzg1NDM3
ZTQ0NDM3NDFkOWE4NTdmZDIyZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21WYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVZhbGlkYXRlLmNwcApAQCAtMTYxLDYgKzE2MSw3IEBAIHB1YmxpYzoKICAgICBSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7
CiAKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCkgeyByZXR1
cm4geyB9OyB9CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRUb3BMZXZlbChCbG9j
a1NpZ25hdHVyZSkgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBDYWxscwogICAgIFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29uc3QgU2ln
bmF0dXJlJiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYp
OwpAQCAtMTc2LDYgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9y
PENvbnRyb2xFbnRyeT4mLCBjb25zdCBTdGFjayopOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0
aW9uUGFyc2VyPFZhbGlkYXRlPiopIHsgfQogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2Fs
cygpIHsgfQorICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KIAogcHJpdmF0ZToK
ICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5KGNvbnN0IFN0YWNrJiwgY29uc3Qg
Q29udHJvbERhdGEmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384127</attachid>
            <date>2019-11-21 23:44:09 -0800</date>
            <delta_ts>2019-11-22 13:28:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204092-20191121234408.patch</filename>
            <type>text/plain</type>
            <size>71510</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MWVjZjQ0MmU3YjA0ZGU1ZWQ3MWExMzBlNDk2NDAzZDhhZWJhYzkyLi43YjhjYThlNzFmYjBlNzY3
Y2YzMzYzZGUxZmUzZTUxNjJhNDY4Y2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDYgQEAKKzIwMTktMTEtMjEgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBJbXByb3ZlIFdhc206OkxMSW50R2VuZXJhdG9y
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQwOTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlt
cHJvdmVzIHRoZSBXYXNtOjpMTEludEdlbmVyYXRvciBieToKKyAgICAgICAgLSBDaGFuZ2luZyBM
TEludEdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgZnJvbSBSZWZQdHI8UmVnaXN0ZXJJRD4gdG8g
VmlydHVhbFJlZ2lzdGVyOiBJbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYW5kIHJldGFpbmluZworICAg
ICAgICAgIFJlZ2lzdGVySURzIHdlIHVzZSBWaXJ0dWFsUmVnaXN0ZXJzIGRpcmVjdGx5IGFuZCBl
bnN1cmUgdGhhdCB0aGV5IG1hdGNoIHRoZSBXZWJBc3NlbWJseSBzdGFjaywgaS5lLiB0aGUgcGFy
c2VyJ3MgZXhwcmVzc2lvbgorICAgICAgICAgIHN0YWNrIHNob3VsZCBtYXRjaCB0aGUgdmlydHVh
bCByZWdpc3RlcnMuCisgICAgICAgIC0gUmVtb3ZpbmcgcmVkdW5kYW50IG1vdmVzIHdoZW4gbWF0
ZXJpYWxpemluZyBjb25zdGFudHMgYW5kIHBlcmZvcm1pbmcgbG9jYWwuZ2V0OiBpbnN0ZWFkIG9m
IGNyZWF0aW5nIGEgbmV3IHRlbXBvcmFyeQorICAgICAgICAgIGZvciBlYWNoIGNvbnN0YW50IGFu
ZCBsb2NhbC5nZXQsIHdlIHJldHVybiB0aGUgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGUgY29uc3Rh
bnQvbG9jYWwgc2xvdCBkaXJlY3RseS4gSW4gb3JkZXIgZm9yIHRoaXMKKyAgICAgICAgICB0byB3
b3JrLCB3ZSBzdGlsbCBhbGxvY2F0ZSB0aGUgc3RhY2sgc2xvdCBmb3IgdGhlIHRlbXBvcmFyaWVz
LCBzaW5jZSB3ZSBoYXZlIHRvIG1hdGVyaWFsaXplIHRoZW0gYmVmb3JlIGxvb3BzIGFuZCBicmFu
Y2hlcy4KKyAgICAgICAgLSBBZGRpbmcgYSBjb25zdHJ1Y3RvciB0byBDb250cm9sVHlwZSB0aGF0
IHRha2VzIHRoZSByZXN1bHRzIEV4cHJlc3Npb25MaXN0IGFzIGFuIHJ2YWx1ZSBpbnN0ZWFkIG9m
IGNvcHlpbmcgaXQKKyAgICAgICAgLSBPcHRpbWl6aW5nIGNhbGxJbmZvcm1hdGlvbkZvciwgd2hp
Y2ggaXMgbm93IHNwbGl0IGludG8gdHdvIGZ1bmN0aW9ucy4gVGhlIGNhbGxlZSBkb2VzIG5vdCBj
YXJlIGFib3V0IGFyZ3VtZW50cywgYW5kIHNob3VsZAorICAgICAgICAgIG5ldmVyIGFsbG9jYXRl
IHRlbXBvcmFyaWVzLCBhbmQgdGhlIGNhbGxlciBjYXNlIHdhcyBvcHRpbWl6ZWQgYnkgYXZvaWRp
bmcgdW5uZWNlc3NhcnkgY2FsbHMgdG8gbmV3VGVtcG9yYXJ5CisgICAgICAgIC0gRGVsYXkgaG9s
ZGluZyB0aGUgbG9jayBpbiBMTGludFBsYW46OmNvbXBpbGVGdW5jdGlvbiwgc2luY2Ugd2UgZG8g
bm90IG5lZWQgdG8gaG9sZCBpdCB3aGlsZSBjb21waWxpbmcgdGhlIGpzLXRvLXdhc20gZW50cnlw
b2ludAorCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9MYWJlbC5oOgorICAgICAgICAoSlNDOjpHZW5lcmljTGFiZWw6OmxvY2F0aW9u
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0xhYmVsOjp1bnJlc29sdmVkSnVtcHMgY29u
c3QpOgorICAgICAgICAqIGdlbmVyYXRvci9XYXNtLnJiOgorICAgICAgICAqIGxsaW50L1dlYkFz
c2VtYmx5LmFzbToKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbmRUb3BMZXZlbCk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisgICAgICAg
ICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmVuZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2spOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmFkZEp1
bXBUYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5j
dGlvblBhcnNlcjo6ZXhwcmVzc2lvblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlQm9keSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20vV2Fz
bUxMSW50R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6
OkNvbnRyb2xUeXBlOjpsb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6
OkNvbnRyb2xUeXBlOjp0b3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjpDb250cm9sVHlwZTo6YmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVy
YXRvcjo6Q29udHJvbFR5cGU6OmlmXyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjpDb250cm9sVHlwZTo6dGFyZ2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnN0YWNrU2l6ZSBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Q29udHJvbFR5cGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2sp
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6cHVzaCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpkdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OnZpcnR1YWxSZWdpc3RlckZvcldhc21Mb2NhbCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpqc051bGxDb25zdGFudCk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjp6ZXJvQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6Z2V0RHJvcEtlZXBDb3VudCk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpkcm9wS2VlcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjp3YWxrRXhwcmVzc2lvblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OmNoZWNrQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6bWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6bWF0ZXJpYWxpemVMb2NhbHMpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6Q29uc3RhbnRNYXBIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxl
dGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29uc3RhbnRN
YXBIYXNoVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpj
YWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVy
YXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpk
aWRGaW5pc2hQYXJzaW5nTG9jYWxzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Omdl
dExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldExvY2FsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmdldEdsb2JhbCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRMb29wKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TExJbnRHZW5lcmF0b3I6OmFkZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OmFkZElmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEVsc2Up
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFi
bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkUmV0dXJuKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEJyYW5jaCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6ZW5kVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYWxs
SW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkUmVmSXNO
dWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFJlZkZ1bmMpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVGFibGVHZXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVGFibGVTaXplKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldh
c206OkxMSW50R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpM
TEludEdlbmVyYXRvcjo6YWRkU2VsZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OmxvYWQpOgorICAgICAgICAoSlNDOjpHZW5lcmljTGFiZWw8V2FzbTo6R2VuZXJhdG9y
VHJhaXRzPjo6c2V0TG9jYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkxMSW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAg
ICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRl
OjplbmRUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpkaWRQb3BWYWx1
ZUZyb21TdGFjayk6CisKIDIwMTktMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggaW5jb3JyZWN0IGFzc2VydGlvbgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggYzJl
YzljZjU3MmFiNmUxNmE4NDM3MmJmZjAwMzYwYjkzZmUxMzJjYy4uZjgyYmVkOTg5MjBlNzk1NWI1
MjI4Y2Q3Yjg0MzRhNmUwNDA5MjI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0xMjk3LDcgKzEyOTcsNiBAQCBvcCA6c3dpdGNoLAog
ICAgIGFyZ3M6IHsKICAgICAgICAgc2NydXRpbmVlOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAg
IHRhYmxlSW5kZXg6IHVuc2lnbmVkLAotICAgICAgICBkZWZhdWx0VGFyZ2V0OiBXYXNtQm91bmRM
YWJlbCwKICAgICB9CiAKICMgV2FzbSBzcGVjaWZpYyBieXRlY29kZXMKQEAgLTEzMDUsNiArMTMw
NCwxMyBAQCBvcCA6c3dpdGNoLAogb3AgOnVucmVhY2hhYmxlCiBvcCA6cmV0X3ZvaWQKIAorb3Ag
OmRyb3Bfa2VlcCwKKyAgICBhcmdzOiB7CisgICAgICAgIHN0YXJ0T2Zmc2V0OiB1bnNpZ25lZCwK
KyAgICAgICAgZHJvcENvdW50OiB1bnNpZ25lZCwKKyAgICAgICAga2VlcENvdW50OiB1bnNpZ25l
ZCwKKyAgICB9CisKIG9wIDpyZWZfaXNfbnVsbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDog
VmlydHVhbFJlZ2lzdGVyLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9MYWJlbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9MYWJl
bC5oCmluZGV4IDkwMzEzNjI2ZjhmYjNjOGRjN2QwMjk1Y2ZkMzI2ODBhZGEwMjBmNmQuLjhhOTRh
NjAwNDNkZTk2YjRlY2I0MmNjNWExMTdkZTgyNmZlODkxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTGFiZWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgKQEAgLTEyOCw2ICsxMjgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2VuZXJpY0xhYmVsKTsKICAgICAg
ICAgdXNpbmcgQnl0ZWNvZGVHZW5lcmF0b3IgPSBCeXRlY29kZUdlbmVyYXRvckJhc2U8VHJhaXRz
PjsKICAgICAgICAgdXNpbmcgQm91bmRMYWJlbCA9IEdlbmVyaWNCb3VuZExhYmVsPFRyYWl0cz47
CisgICAgICAgIHVzaW5nIEp1bXBWZWN0b3IgPSBWZWN0b3I8aW50LCA4PjsKIAogICAgIHB1Ymxp
YzoKICAgICAgICAgR2VuZXJpY0xhYmVsKCkgPSBkZWZhdWx0OwpAQCAtMTcwLDExICsxNzEsMTgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBib29sIGlzQm91bmQoKSBjb25z
dCB7IHJldHVybiBtX2JvdW5kOyB9CiAKKyAgICAgICAgdW5zaWduZWQgbG9jYXRpb24oKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWlzRm9yd2FyZCgpKTsKKyAgICAgICAg
ICAgIG1fYm91bmQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG1fbG9jYXRpb247CisgICAg
ICAgIH07CisKKyAgICAgICAgY29uc3QgSnVtcFZlY3RvciYgdW5yZXNvbHZlZEp1bXBzKCkgY29u
c3QgeyByZXR1cm4gIG1fdW5yZXNvbHZlZEp1bXBzOyB9CisKICAgICBwcml2YXRlOgogICAgICAg
ICBmcmllbmQgQm91bmRMYWJlbDsKIAotICAgICAgICB0eXBlZGVmIFZlY3RvcjxpbnQsIDg+IEp1
bXBWZWN0b3I7Ci0KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnZhbGlkTG9j
YXRpb24gPSBVSU5UX01BWDsKIAogICAgICAgICBpbnQgbV9yZWZDb3VudCB7IDAgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvV2FzbS5yYiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvV2FzbS5yYgppbmRleCBjMDBjNjI5ZGQwMzc2MzczMzky
ODBjMTUxYTg3OWMyYWIzYmE4ZGY0Li5jMTc4NTg2ZDUyMWZhZDdkYmI1MmI2NzdiYTUxZmFkNTIx
NjlmOWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1dhc20u
cmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9XYXNtLnJiCkBAIC01OCw3
ICs1OCw3IEBAIG1vZHVsZSBXYXNtCiB0ZW1wbGF0ZTw+CiBhdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRPcDwje29wX3R5cGUob3ApfT4oRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSBy
aHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1
bHQgPSBsaHM7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgICN7b3AuY2FwaXRhbGl6ZWRfbmFt
ZX06OmVtaXQodGhpcywgcmVzdWx0LCBsaHMsIHJocyk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAg
LTcwLDcgKzcwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkT3A8I3tvcF90eXBlKG9wKX0+
KEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmgKIHRlbXBsYXRlPD4KIGF1dG8g
TExJbnRHZW5lcmF0b3I6OmFkZE9wPCN7b3BfdHlwZShvcCl9PihFeHByZXNzaW9uVHlwZSBvcGVy
YW5kLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVz
dWx0ID0gb3BlcmFuZDsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAgICAgI3tvcC5jYXBpdGFsaXpl
ZF9uYW1lfTo6ZW1pdCh0aGlzLCByZXN1bHQsIG9wZXJhbmQpOwogICAgIHJldHVybiB7IH07CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNt
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbQppbmRleCAwYmI5
ZmZkMzUyYWI0NDI4ZjVjNmM2Nzk1OGJjY2ZkNmVhM2Y0ZmE2Li5hNWM3Yzg4MDI4OTg3Zjk4MWQy
ZGJlMzU3MmJlZTNiMTQ0MDFhMTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvV2ViQXNzZW1ibHkuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9X
ZWJBc3NlbWJseS5hc20KQEAgLTI5Nyw3ICsyOTcsNyBAQCBtYWNybyB3YXNtUHJvbG9ndWUoY29k
ZUJsb2NrR2V0dGVyLCBjb2RlQmxvY2tTZXR0ZXIsIGxvYWRXYXNtSW5zdGFuY2UpCiAgICAgYnRp
eiB3czEsIC56ZXJvSW5pdGlhbGl6ZUxvY2Fsc0RvbmUKICAgICBuZWdpIHdzMQogICAgIHN4aTJx
IHdzMSwgd3MxCi0gICAgbGVhcCAoTnVtYmVyT2ZXYXNtQXJndW1lbnRzICsgQ2FsbGVlU2F2ZVNw
YWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKSAqIC04W2Nmcl0sIHdzMAorICAgIGxlYXAgKE51bWJlck9m
V2FzbUFyZ3VtZW50cyArIENhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyArIDEpICog
LThbY2ZyXSwgd3MwCiAuemVyb0luaXRpYWxpemVMb2NhbHNMb29wOgogICAgIGFkZHEgMSwgd3Mx
CiAgICAgc3RvcmVxIDAsIFt3czAsIHdzMSwgOF0KQEAgLTU4OCwxNCArNTg4LDIzIEBAIHdhc21P
cChzd2l0Y2gsIFdhc21Td2l0Y2gsIG1hY3JvKGN0eCkKICAgICBhZGRwIHQxLCB0MgogCiAgICAg
bG9hZGkgVmVjdG9yU2l6ZU9mZnNldFt0Ml0sIHQzCi0gICAgYmlhZXEgdDAsIHQzLCAuZGVmYXVs
dAorICAgIGJpYiB0MCwgdDMsIC5pbkJvdW5kcworCisub3V0T2ZCb3VuZHM6CisgICAgc3ViaSB0
MywgMSwgdDAKKworLmluQm91bmRzOgogICAgIGxvYWRwIFZlY3RvckJ1ZmZlck9mZnNldFt0Ml0s
IHQyCi0gICAgbG9hZGkgW3QyLCB0MCwgNF0sIHQzCisgICAgbXVsaSBzaXplb2YgV2FzbTo6RnVu
Y3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5LCB0MAorCisgICAgbG9hZGkgV2FzbTo6RnVu
Y3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5OjpzdGFydE9mZnNldFt0MiwgdDBdLCB0MQor
ICAgIGxvYWRpIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFibGVFbnRyeTo6ZHJvcENv
dW50W3QyLCB0MF0sIHQzCisgICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBU
YWJsZUVudHJ5OjprZWVwQ291bnRbdDIsIHQwXSwgdDUKKyAgICBkcm9wS2VlcCh0MSwgdDMsIHQ1
KQorCisgICAgbG9hZGlzIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFibGVFbnRyeTo6
dGFyZ2V0W3QyLCB0MF0sIHQzCiAgICAgYXNzZXJ0KG1hY3JvKG9rKSBidGlueiB0MywgLm9rIGVu
ZCkKICAgICB3YXNtRGlzcGF0Y2hJbmRpcmVjdCh0MykKLQotLmRlZmF1bHQ6Ci0gICAganVtcChj
dHgsIG1fZGVmYXVsdFRhcmdldCkKIGVuZCkKIAogdW5wcmVmaXhlZFdhc21PcCh3YXNtX2ptcCwg
V2FzbUptcCwgbWFjcm8oY3R4KQpAQCAtMTk5MywzICsyMDAyLDMwIEBAIHdhc21PcChpNjRfcmVp
bnRlcnByZXRfZjY0LCBXYXNtSTY0UmVpbnRlcnByZXRGNjQsIG1hY3JvKGN0eCkKICAgICBmZDJx
IGZ0MCwgdDAKICAgICByZXR1cm5xKGN0eCwgdDApCiBlbmQpCisKK21hY3JvIGRyb3BLZWVwKHN0
YXJ0T2Zmc2V0LCBkcm9wLCBrZWVwKQorICAgIGxzaGlmdGkgMywgc3RhcnRPZmZzZXQKKyAgICBz
dWJwIGNmciwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0CisgICAgbmVnaSBkcm9wCisgICAgc3hp
MnEgZHJvcCwgZHJvcAorCisuY29weUxvb3A6CisgICAgYnRpeiBrZWVwLCAuZG9uZQorICAgIGxv
YWRxIFtzdGFydE9mZnNldCwgZHJvcCwgOF0sIHQ2CisgICAgc3RvcmVxIHQ2LCBbc3RhcnRPZmZz
ZXRdCisgICAgc3ViaSAxLCBrZWVwCisgICAgc3VicCA4LCBzdGFydE9mZnNldAorICAgIGptcCAu
Y29weUxvb3AKKworLmRvbmU6CitlbmQKKword2FzbU9wKGRyb3Bfa2VlcCwgV2FzbURyb3BLZWVw
LCBtYWNybyhjdHgpCisgICAgd2dldHUoY3R4LCBtX3N0YXJ0T2Zmc2V0LCB0MCkKKyAgICB3Z2V0
dShjdHgsIG1fZHJvcENvdW50LCB0MSkKKyAgICB3Z2V0dShjdHgsIG1fa2VlcENvdW50LCB0MikK
KworICAgIGRyb3BLZWVwKHQwLCB0MSwgdDIpCisKKyAgICBkaXNwYXRjaChjdHgpCitlbmQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApp
bmRleCA5YzcwODYxNzMwZDI3ZWQ1OTc0YTQ0ZjhkNTc1ZmIyNjE2ZDAxODU2Li42M2M2NjhmYWZh
NDA3NjU1MzMwMTVjMDE1YmRjMzI3YjFmZWE4M2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTI4NSw2ICsyODUsOCBAQCBw
dWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29u
dHJvbEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmLCBjb25z
dCBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0geyB9KTsKIAorICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlLCBjb25zdCBTdGFjayYp
IHsgcmV0dXJuIHsgfTsgfQorCiAgICAgLy8gQ2FsbHMKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBWZWN0b3I8RXhwcmVzc2lvblR5cGUs
IDE+JiByZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRD
YWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiYgcmVzdWx0
cyk7CkBAIC0yOTksNiArMzAxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0
b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFjayogZXhwcmVzc2lvblN0
YWNrKTsKICAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4q
IHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKICAgICB2b2lkIGRpZEZpbmlzaFBhcnNp
bmdMb2NhbHMoKSB7IH0KKyAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNrKCkgeyB9CiAKICAg
ICBzdGF0aWMgVmVjdG9yPFRtcD4gdG9UbXBWZWN0b3IoY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYg
dmVjdG9yKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAppbmRleCA4NjVhNzM5M2FkYTlmOWYyMTQ1YjM4Y2E0ZDU0NzZiNmUzNjZk
MjEzLi45MDRkNjk0YzVhZTZkZGI3ZjI3MTBlNzQxNGViOTJmNTU1MjMxZWZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0yMzUs
NiArMjM1LDggQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJv
bEVudHJ5JiwgY29uc3QgU3RhY2smID0geyB9KTsKIAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlLCBjb25zdCBTdGFjayYpIHsg
cmV0dXJuIHsgfTsgfQorCiAgICAgLy8gQ2FsbHMKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUm
LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWdu
ZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CkBAIC0yNDQsNiArMjQ2LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBj
b25zdCBTdGFjayogZXhwcmVzc2lvblN0YWNrKTsKICAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlv
blBhcnNlcjxCM0lSR2VuZXJhdG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9Owog
ICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpIHsgfQorICAgIHZvaWQgZGlkUG9wVmFs
dWVGcm9tU3RhY2soKSB7IH0KIAogICAgIFZhbHVlKiBjb25zdGFudChCMzo6VHlwZSwgdWludDY0
X3QgYml0cywgT3B0aW9uYWw8T3JpZ2luPiA9IFdURjo6bnVsbG9wdCk7CiAgICAgVmFsdWUqIGZy
YW1lUG9pbnRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvbkNvZGVCbG9jay5jcHAKaW5kZXggZDM1MDVjMzAwODE5ZWFlNGNhNjk0OGY5OGQ4ZmJh
N2NhMjNmY2RiOS4uMTYyYTM3MjMwNTRmN2QyMzVmZGY1NDBmMzQyOWE4ODA2NWY4MDcxMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suY3BwCkBAIC03NSwxMSArNzUsNyBAQCBjb25zdCBTaWduYXR1cmUmIEZ1bmN0aW9uQ29kZUJs
b2NrOjpzaWduYXR1cmUodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIGF1dG8gRnVuY3Rpb25Db2Rl
QmxvY2s6OmFkZEp1bXBUYWJsZShzaXplX3QgbnVtYmVyT2ZFbnRyaWVzKSAtPiBKdW1wVGFibGUm
CiB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIG1fanVtcFRhYmxlcy5hcHBlbmQoSnVtcFRh
YmxlKG51bWJlck9mRW50cmllcywgMCkpOwotI2Vsc2UKICAgICBtX2p1bXBUYWJsZXMuYXBwZW5k
KEp1bXBUYWJsZShudW1iZXJPZkVudHJpZXMpKTsKLSNlbmRpZgogICAgIHJldHVybiBtX2p1bXBU
YWJsZXMubGFzdCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GdW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IGZlZDQ0NzVjYTVkNTc5NzY0OGE5ZjdiMjljNTBh
OTU3NmE0Y2MxMmUuLmY2ODhhN2M5ZTk0MjZkOWUwYmVhM2FmMGNmZmFmMmMyN2RkNWE1NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9j
ay5oCkBAIC0xMDUsNyArMTA1LDE0IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBhZGRTaWduYXR1
cmUoY29uc3QgU2lnbmF0dXJlJik7CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUodW5z
aWduZWQgaW5kZXgpIGNvbnN0OwogCi0gICAgdXNpbmcgSnVtcFRhYmxlID0gVmVjdG9yPEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQ+OworICAgIHN0cnVjdCBKdW1wVGFibGVFbnRyeSB7CisgICAg
ICAgIGludCB0YXJnZXQgeyAwIH07CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0OworICAg
ICAgICB1bnNpZ25lZCBkcm9wQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIGtlZXBDb3VudDsKKyAg
ICB9OworCisgICAgdXNpbmcgSnVtcFRhYmxlID0gVmVjdG9yPEp1bXBUYWJsZUVudHJ5PjsKICAg
ICBKdW1wVGFibGUmIGFkZEp1bXBUYWJsZShzaXplX3QgbnVtYmVyT2ZFbnRyaWVzKTsKICAgICBj
b25zdCBKdW1wVGFibGUmIGp1bXBUYWJsZSh1bnNpZ25lZCB0YWJsZUluZGV4KSBjb25zdDsKICAg
ICB1bnNpZ25lZCBudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggZjc3MTZhNzAxZTc3MjBi
OGYzNmFjOTg1MzYwMzgyZmZjMmY4Y2NlYS4uY2NmYTE4NTQzNTQ5OTlmODJhOGFhNDI4ZThkNDhl
NWM0MWY0Nzg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0
aW9uUGFyc2VyLmgKQEAgLTc3LDYgKzc3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmU7IH0KIAogICAgIFZlY3Rv
cjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2soKSB7IHJldHVybiBtX2NvbnRyb2xTdGFjazsg
fQorICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2soKSB7IHJldHVybiBtX2V4cHJlc3Npb25TdGFj
azsgfQogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CkBAIC04OSw2ICs5MCw3IEBAIHByaXZhdGU6CiAjZGVmaW5lIFdBU01fVFJZX1BPUF9FWFBS
RVNTSU9OX1NUQUNLX0lOVE8ocmVzdWx0LCB3aGF0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFj
ay5pc0VtcHR5KCksICJjYW4ndCBwb3AgZW1wdHkgc3RhY2sgaW4gIiB3aGF0KTsgXAogICAgICAg
ICByZXN1bHQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1fY29udGV4dC5kaWRQb3BW
YWx1ZUZyb21TdGFjaygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCiAgICAgdGVtcGxhdGU8T3BUeXBlPgpAQCAt
MTc2LDYgKzE3OCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQm9keSgp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
cGFyc2VFeHByZXNzaW9uKCkpOwogICAgICAgICB9CiAgICAgfQorICAgIFdBU01fRkFJTF9JRl9I
RUxQRVJfRkFJTFMobV9jb250ZXh0LmVuZFRvcExldmVsKCZtX3NpZ25hdHVyZSwgbV9leHByZXNz
aW9uU3RhY2spKTsKIAogICAgIEFTU0VSVChvcCA9PSBPcFR5cGU6OkVuZCk7CiAgICAgcmV0dXJu
IHsgfTsKQEAgLTQzOCw4ICs0NDEsMTAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBzaXplX3QgZmlyc3RB
cmd1bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gY2FsbGVlU2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKTsKICAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOwog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShjYWxs
ZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1v
cnkgZm9yIGNhbGwncyAiLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3Vt
ZW50cyIpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwg
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBm
aXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQobV9leHByZXNzaW9uU3RhY2suYXQoaSkp
OworICAgICAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CisgICAgICAg
IH0KICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7
CiAKICAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOwpAQCAtNDY3LDggKzQ3MiwxMCBAQCBhdXRv
IEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVz
dWx0CiAgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gYXJnczsKICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJj
YW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBhcmd1bWVudENvdW50LCAiIGNhbGxf
aW5kaXJlY3QgYXJndW1lbnRzIik7CiAgICAgICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50SW5kZXgg
PSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBhcmd1bWVudENvdW50OwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6
ZSgpOyArK2kpCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkg
PCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgYXJncy51bmNo
ZWNrZWRBcHBlbmQobV9leHByZXNzaW9uU3RhY2suYXQoaSkpOworICAgICAgICAgICAgbV9jb250
ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CisgICAgICAgIH0KICAgICAgICAgbV9leHByZXNz
aW9uU3RhY2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7CiAKICAgICAgICAgUmVzdWx0TGlz
dCByZXN1bHRzOwpAQCAtNjA4LDYgKzYxNSw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBjYXNlIERyb3A6IHsK
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAi
Y2FuJ3QgZHJvcCBvbiBlbXB0eSBzdGFjayIpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay50
YWtlTGFzdCgpOworICAgICAgICBtX2NvbnRleHQuZGlkUG9wVmFsdWVGcm9tU3RhY2soKTsKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCmluZGV4IGJhZWY1MDcwMzdmOTYxNzM0YTlhOGJl
YTQyNzc2Njk0ZmYzNzViNDMuLjBlZmU0MjlkMTY4ZmY1MjJlZGIwOWI5NmZjNzBkZDA0N2ZjNzRl
Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVy
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJh
dG9yLmNwcApAQCAtMzIsMTMgKzMyLDEzIEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgi
CiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKICNpbmNsdWRlICJMYWJlbC5oIgotI2lu
Y2x1ZGUgIlJlZ2lzdGVySUQuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIK
ICNpbmNsdWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25D
b2RlQmxvY2suaCIKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJX
YXNtR2VuZXJhdG9yVHJhaXRzLmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgorI2luY2x1ZGUg
PHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvU3RkVW5vcmRlcmVkTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KQEAg
LTQ3LDkgKzQ3LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3Mg
TExJbnRHZW5lcmF0b3IgOiBwdWJsaWMgQnl0ZWNvZGVHZW5lcmF0b3JCYXNlPEdlbmVyYXRvclRy
YWl0cz4gewogcHVibGljOgotICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gUmVmUHRyPFJlZ2lz
dGVySUQ+OworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVmlydHVhbFJlZ2lzdGVyOwogICAg
IHVzaW5nIEV4cHJlc3Npb25MaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPjsKLSAgICB1
c2luZyBTdGFjayA9IEV4cHJlc3Npb25MaXN0OworICAgIHVzaW5nIFN0YWNrID0gVmVjdG9yPEV4
cHJlc3Npb25UeXBlLCAxNiwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+OwogCiAgICAgc3RydWN0IENv
bnRyb2xMb29wICB7CiAgICAgICAgIFJlZjxMYWJlbD4gbV9ib2R5OwpAQCAtNzMsMjQgKzczLDI0
IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvbnRy
b2xUeXBlIGxvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmVzdWx0cywgUmVmPExhYmVsPiBib2R5LCBSZWZQdHI8TGFiZWw+IGNvbnRpbnVhdGlvbikK
KyAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGxvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJl
LCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZjxMYWJlbD4mJiBib2R5LCBSZWZQdHI8TGFiZWw+JiYg
Y29udGludWF0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUo
c2lnbmF0dXJlLCByZXN1bHRzLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xMb29wIHsg
V1RGTW92ZShib2R5KSB9KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1
cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRp
bnVhdGlvbiksIENvbnRyb2xMb29wIHsgV1RGTW92ZShib2R5KSB9KTsKICAgICAgICAgfQogCi0g
ICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSB0b3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1
cmUsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRzLCBSZWZQdHI8TGFiZWw+IGNvbnRpbnVh
dGlvbikKKyAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIHRvcExldmVsKEJsb2NrU2lnbmF0dXJl
IHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0
aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJl
LCByZXN1bHRzLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xUb3BMZXZlbCB7IH0pOwor
ICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplLCBXVEZN
b3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xUb3BMZXZlbCB7IH0pOwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGJsb2NrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMsIFJlZlB0cjxMYWJlbD4gY29udGludWF0aW9u
KQorICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgYmxvY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0
dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHJlc3Vs
dHMsIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbEJsb2NrIHsgfSk7CisgICAgICAgICAg
ICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFy
Z3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sQmxvY2sgeyB9KTsK
ICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBpZl8oQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0cywgUmVmPExhYmVsPiBh
bHRlcm5hdGUsIFJlZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQorICAgICAgICBzdGF0aWMgQ29u
dHJvbFR5cGUgaWZfKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXpl
LCBSZWY8TGFiZWw+JiYgYWx0ZXJuYXRlLCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCByZXN1
bHRzLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xJZiB7IFdURk1vdmUoYWx0ZXJuYXRl
KSB9KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6
ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENv
bnRyb2xJZiB7IFdURk1vdmUoYWx0ZXJuYXRlKSB9KTsKICAgICAgICAgfQogCiAgICAgICAgIFJl
ZlB0cjxMYWJlbD4gdGFyZ2V0TGFiZWxGb3JCcmFuY2goKSBjb25zdApAQCAtMTAwLDE2ICsxMDAs
MjUgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIG1fY29udGludWF0aW9uOwogICAgICAg
ICB9CiAKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0QXJpdHkoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sTG9vcD4oKnRoaXMp
KQorICAgICAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOworICAgICAgICB9
CisKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1Np
emU7IH0KKwogICAgICAgICBCbG9ja1NpZ25hdHVyZSBtX3NpZ25hdHVyZTsKLSAgICAgICAgRXhw
cmVzc2lvbkxpc3QgbV9yZXN1bHRzOworICAgICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKICAg
ICAgICAgUmVmUHRyPExhYmVsPiBtX2NvbnRpbnVhdGlvbjsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIENvbnRyb2xUeXBlKEJsb2NrU2lnbmF0
dXJlIHNpZ25hdHVyZSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMsIFJlZlB0cjxMYWJl
bD4gY29udGludWF0aW9uLCBUIHQpCisgICAgICAgIENvbnRyb2xUeXBlKEJsb2NrU2lnbmF0dXJl
IHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0
aW9uLCBUJiYgdCkKICAgICAgICAgICAgIDogQmFzZShXVEZNb3ZlKHQpKQogICAgICAgICAgICAg
LCBtX3NpZ25hdHVyZShzaWduYXR1cmUpCi0gICAgICAgICAgICAsIG1fcmVzdWx0cyhyZXN1bHRz
KQorICAgICAgICAgICAgLCBtX3N0YWNrU2l6ZShzdGFja1NpemUpCiAgICAgICAgICAgICAsIG1f
Y29udGludWF0aW9uKFdURk1vdmUoY29udGludWF0aW9uKSkKICAgICAgICAgewogICAgICAgICB9
CkBAIC0xMzcsMTggKzE0NiwzMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhC
bG9jayhjb25zdCBFeHByZXNzaW9uTGlzdEEmIGRlc3RpbmF0aW9ucywgY29uc3QgRXhwcmVzc2lv
bkxpc3RCJiB2YWx1ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoZGVzdGluYXRpb25zLnNpemUo
KSA8PSB2YWx1ZXMuc2l6ZSgpKTsKKyAgICAgICAgYXV0byBvZmZzZXQgPSB2YWx1ZXMuc2l6ZSgp
IC0gZGVzdGluYXRpb25zLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBk
ZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMs
IGRlc3RpbmF0aW9uc1tkZXN0aW5hdGlvbnMuc2l6ZSgpIC0gaSAtIDFdLCB2YWx1ZXNbdmFsdWVz
LnNpemUoKSAtIGkgLSAxXSk7CisgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRlc3Rp
bmF0aW9uc1tpXSwgdmFsdWVzW29mZnNldCArIGldKTsKKyAgICB9CisKKyAgICBlbnVtIE5vQ29u
c2lzdGVuY3lDaGVja1RhZyB7IE5vQ29uc2lzdGVuY3lDaGVjayB9OworICAgIEV4cHJlc3Npb25U
eXBlIHB1c2goTm9Db25zaXN0ZW5jeUNoZWNrVGFnKQorICAgIHsKKyAgICAgICAgbV9tYXhTdGFj
a1NpemUgPSBzdGQ6Om1heChtX21heFN0YWNrU2l6ZSwgKyttX3N0YWNrU2l6ZSk7CisgICAgICAg
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX3N0YWNrU2l6ZSAtIDEpOworICAgIH0K
KworICAgIEV4cHJlc3Npb25UeXBlIHB1c2goKQorICAgIHsKKyAgICAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworICAgICAgICByZXR1cm4gcHVzaChOb0NvbnNpc3RlbmN5Q2hlY2spOwogICAgIH0K
IAorICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IC0tbV9zdGFja1NpemU7IH0KIAot
ICAgIHN0YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiBudWxs
cHRyOyB9OworICAgIHN0YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJl
dHVybiBWaXJ0dWFsUmVnaXN0ZXIgeyB9OyB9OwogICAgIFN0YWNrIGNyZWF0ZVN0YWNrKCkgeyBy
ZXR1cm4gU3RhY2soKTsgfQogICAgIGJvb2wgaXNDb250cm9sVHlwZUlmKGNvbnN0IENvbnRyb2xU
eXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xJZj4o
Y29udHJvbCk7IH0KIAogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFy
Z3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgYWRk
Q29uc3RhbnQoVHlwZSwgdWludDY0X3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50
KFR5cGUsIGludDY0X3QpOwogCiAgICAgLy8gUmVmZXJlbmNlcwogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CkBAIC0xODcsMTQgKzIxMSwxNSBAQCBwdWJsaWM6CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQmxvY2soQmxvY2tTaWduYXR1cmUs
IFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5ld0Jsb2NrLCBTdGFjayYgbmV3
U3RhY2spOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoQmxv
Y2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIGJsb2NrLCBT
dGFjayYgbmV3U3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCk7CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1Np
Z25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFj
ayYgbmV3U3RhY2spOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVs
c2UoQ29udHJvbFR5cGUmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbFR5cGUmLCBTdGFjayYpOwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENv
bnRyb2xUeXBlJik7CiAKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRS
ZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFs
dWVzKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29u
dHJvbFR5cGUmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0
JiByZXR1cm5WYWx1ZXMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlw
ZSo+JiB0YXJnZXRzLCBDb250cm9sVHlwZSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Np
b25MaXN0JiBleHByZXNzaW9uU3RhY2spOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9u
U3RhY2spOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5y
ZWFjaGFibGUoQ29udHJvbEVudHJ5JiwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IHsg
fSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0
IENvbnRyb2xUeXBlJiwgU3RhY2smIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xUeXBlJiwgRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBW
ZWN0b3I8Q29udHJvbFR5cGUqPiYgdGFyZ2V0cywgQ29udHJvbFR5cGUmIGRlZmF1bHRUYXJnZXRz
LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxl
KENvbnRyb2xFbnRyeSYsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSB7IH0sIGJvb2wg
dW5yZWFjaGFibGUgPSB0cnVlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBlbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSwgY29uc3QgU3RhY2smKTsKIAogICAgIC8vIENh
bGxzCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJf
dCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMpOwpAQCAtMjA1LDcgKzIzMCw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiog
cGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QqKSB7IH0KKyAgICB2b2lk
IGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBTdGFjayopIHsgfQogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBHZW5lcmljTGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjsK
QEAgLTIxNCwxMiArMjM5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zm
c2V0OwogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQXJndW1lbnRzOwogICAgICAgICBF
eHByZXNzaW9uTGlzdCBhcmd1bWVudHM7Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0IHJlc3VsdHM7
CisgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwcmVzc2lvbkxpc3QmKT4gY29tbWl0
UmVzdWx0czsKICAgICB9OwogCi0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0
aW9uRm9yKGNvbnN0IFNpZ25hdHVyZSYsIENhbGxSb2xlID0gQ2FsbFJvbGU6OkNhbGxlcik7Cisg
ICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNp
Z25hdHVyZSYpOworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IGNhbGxJbmZvcm1hdGlv
bkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmKTsKIAotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbCh1aW50MzJfdCBpbmRleCkKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yV2FzbUxvY2FsKHVpbnQzMl90IGluZGV4KQogICAgIHsKICAgICAg
ICAgaWYgKGluZGV4IDwgbV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzKQogICAgICAgICAgICAg
cmV0dXJuIG1fbm9ybWFsaXplZEFyZ3VtZW50c1tpbmRleF07CkBAIC0yMjcsMjcgKzI1MywxMzkg
QEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgYXV0byYgY2FsbGluZ0NvbnZlbnRpb24gPSB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKTsKICAgICAgICAgY29uc3QgdWludDMyX3QgZ3ByQ291bnQgPSBj
YWxsaW5nQ29udmVudGlvbi5ncHJBcmdzLnNpemUoKTsKICAgICAgICAgY29uc3QgdWludDMyX3Qg
ZnByQ291bnQgPSBjYWxsaW5nQ29udmVudGlvbi5mcHJBcmdzLnNpemUoKTsKLSAgICAgICAgcmV0
dXJuIDo6SlNDOjp2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG1fY29kZUJsb2NrLT5t
X251bUFyZ3VtZW50cyArIGdwckNvdW50ICsgZnByQ291bnQgKyBudW1iZXJPZkxMSW50Q2FsbGVl
U2F2ZVJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChp
bmRleCAtIG1fY29kZUJsb2NrLT5tX251bUFyZ3VtZW50cyArIGdwckNvdW50ICsgZnByQ291bnQg
KyBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycyk7CiAgICAgfQogCi0gICAgRXhwcmVz
c2lvbkxpc3QgdG1wc0ZvclNpZ25hdHVyZShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUpCisgICAg
RXhwcmVzc2lvblR5cGUganNOdWxsQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgRXhwcmVzc2lv
bkxpc3QgcmVzdWx0KHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkKLSAgICAgICAg
ICAgIHJlc3VsdFtpXSA9IG5ld1RlbXBvcmFyeSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICBpZiAoVU5MSUtFTFkoIW1fanNOdWxsQ29uc3RhbnQuaXNWYWxpZCgpKSkgeworICAg
ICAgICAgICAgbV9qc051bGxDb25zdGFudCA9IFZpcnR1YWxSZWdpc3RlcihGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCArIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5zaXplKCkpOworICAgICAg
ICAgICAgbV9jb2RlQmxvY2stPm1fY29uc3RhbnRzLmFwcGVuZChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wR2VuZXJhdGVk
V2FzbUJ5dGVjb2RlcygpKSkKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFu
dFR5cGVzLmFwcGVuZChUeXBlOjpBbnlyZWYpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBt
X2pzTnVsbENvbnN0YW50OwogICAgIH0KIAotICAgIEV4cHJlc3Npb25UeXBlIGpzTnVsbENvbnN0
YW50KCkKKyAgICBFeHByZXNzaW9uVHlwZSB6ZXJvQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAg
aWYgKCFtX2pzTnVsbENvbnN0YW50KQotICAgICAgICAgICAgbV9qc051bGxDb25zdGFudCA9IGFk
ZENvbnN0YW50KFR5cGU6OkFueXJlZiwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSk7Ci0gICAg
ICAgIHJldHVybiBtX2pzTnVsbENvbnN0YW50OworICAgICAgICBpZiAoVU5MSUtFTFkoIW1femVy
b0NvbnN0YW50LmlzVmFsaWQoKSkpIHsKKyAgICAgICAgICAgIG1femVyb0NvbnN0YW50ID0gVmly
dHVhbFJlZ2lzdGVyKEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb2RlQmxvY2stPm1f
Y29uc3RhbnRzLnNpemUoKSk7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudHMu
YXBwZW5kKDApOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBHZW5lcmF0
ZWRXYXNtQnl0ZWNvZGVzKCkpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0
YW50VHlwZXMuYXBwZW5kKFR5cGU6OkkzMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1f
emVyb0NvbnN0YW50OworICAgIH0KKworICAgIHZvaWQgZ2V0RHJvcEtlZXBDb3VudChjb25zdCBD
b250cm9sVHlwZSYgdGFyZ2V0LCB1bnNpZ25lZCYgc3RhcnRPZmZzZXQsIHVuc2lnbmVkJiBkcm9w
LCB1bnNpZ25lZCYga2VlcCkKKyAgICB7CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGFyZ2V0LnN0
YWNrU2l6ZSgpICsgMTsKKyAgICAgICAga2VlcCA9IHRhcmdldC50YXJnZXRBcml0eSgpOworICAg
ICAgICBkcm9wID0gbV9zdGFja1NpemUgLSB0YXJnZXQuc3RhY2tTaXplKCkgLSB0YXJnZXQudGFy
Z2V0QXJpdHkoKTsKKyAgICB9CisKKyAgICB2b2lkIGRyb3BLZWVwKFN0YWNrJiB2YWx1ZXMsIGNv
bnN0IENvbnRyb2xUeXBlJiB0YXJnZXQsIGJvb2wgZHJvcFZhbHVlcykKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0OworICAgICAgICB1bnNpZ25lZCBrZWVwOworICAgICAgICB1
bnNpZ25lZCBkcm9wOworCisgICAgICAgIGdldERyb3BLZWVwQ291bnQodGFyZ2V0LCBzdGFydE9m
ZnNldCwgZHJvcCwga2VlcCk7CisKKyAgICAgICAgaWYgKGRyb3BWYWx1ZXMpCisgICAgICAgICAg
ICB2YWx1ZXMuc2hyaW5rKGtlZXApOworCisgICAgICAgIGlmICghZHJvcCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAoa2VlcCkKKyAgICAgICAgICAgIFdhc21Ecm9wS2VlcDo6
ZW1pdCh0aGlzLCBzdGFydE9mZnNldCwgZHJvcCwga2VlcCk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHdhbGtFeHByZXNzaW9uU3RhY2soU3RhY2sm
IGV4cHJlc3Npb25TdGFjaywgdW5zaWduZWQgc3RhY2tTaXplLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZXhwcmVzc2lvblN0YWNrLnNp
emUoKTsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNsb3QgPSB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChzdGFja1NpemUgLSBpKTsKKyAgICAgICAgICAgIGZ1bmN0
b3IoZXhwcmVzc2lvblN0YWNrW2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpXSwgc2xvdCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgd2Fsa0V4cHJlc3Npb25TdGFjayhTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhleHByZXNz
aW9uU3RhY2ssIG1fc3RhY2tTaXplLCBmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgd2Fsa0V4cHJlc3Npb25TdGFjayhDb250cm9sRW50
cnkmIGVudHJ5LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgd2Fsa0V4
cHJlc3Npb25TdGFjayhlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjaywgZW50cnkuY29udHJv
bERhdGEuc3RhY2tTaXplKCksIGZ1bmN0b3IpOworICAgIH0KKworICAgIHZvaWQgY2hlY2tDb25z
aXN0ZW5jeSgpCisgICAgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLy8gVGhlIHJ1
bGVzIGZvciBsb2NhbHMgYW5kIGNvbnN0YW50cyBpbiB0aGUgc3RhY2sgYXJlOgorICAgICAgICAv
LyAxKSBMb2NhbHMgaGF2ZSB0byBiZSBtYXRlcmlhbGl6ZWQgd2hlbmV2ZXIgYSBjb250cm9sIGVu
dHJ5IGlzIHB1c2hlZCB0byB0aGUgY29udHJvbCBzdGFjayAoaS5lLiBldmVyeSB0aW1lIHdlIHNw
bGl0U3RhY2spCisgICAgICAgIC8vICAgIE5PVEU6IFRoaXMgaXMgYSB0cmFkZS1vZmYgc28gdGhh
dCBzZXRfbG9jYWwgZG9lcyBub3QgaGF2ZSB0byB3YWxrIHVwIHRoZSBjb250cm9sIHN0YWNrIGxv
b2tpbmcgZm9yIGRlbGF5ZWQgZ2V0X2xvY2FscworICAgICAgICAvLyAyKSBJZiB0aGUgY29udHJv
bCBlbnRyeSBpcyBhIGxvb3AsIHdlIGFsc28gbmVlZCB0byBtYXRlcmlhbGl6ZSBjb25zdGFudHMg
aW4gdGhlIG5ld1N0YWNrLCBzaW5jZSB0aG9zZSBzbG90cyB3aWxsIGJlIHdyaXR0ZW4KKyAgICAg
ICAgLy8gICAgdG8gZnJvbSBsb29wIGJhY2sgZWRnZXMKKyAgICAgICAgLy8gMykgQm90aCBsb2Nh
bHMgYW5kIGNvbnN0YW50cyBoYXZlIHRvIGJlIG1hdGVyaWFsaXplZCBiZWZvcmUgYnJhbmNoZXMs
IHNpbmNlIG11bHRpcGxlIGJyYW5jaGVzIG1pZ2h0IHNoYXJlIHRoZSBzYW1lIHRhcmdldCwKKyAg
ICAgICAgLy8gICAgd2UgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHN0YWNr
IHN0YXRlIGF0IHRoYXQgcG9pbnQsIHNvIHdlIG1hdGVyaWFsaXplIHRoZSBzdGFjay4KKyAgICAg
ICAgZm9yIChDb250cm9sRW50cnkmIGNvbnRyb2xFbnRyeSA6IG1fcGFyc2VyLT5jb250cm9sU3Rh
Y2soKSkgeworICAgICAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhjb250cm9sRW50cnksIFsm
XShWaXJ0dWFsUmVnaXN0ZXIgZXhwcmVzc2lvbiwgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoZXhwcmVzc2lvbiA9PSBzbG90IHx8IGV4cHJlc3Npb24uaXND
b25zdGFudCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHdhbGtFeHBy
ZXNzaW9uU3RhY2sobV9wYXJzZXItPmV4cHJlc3Npb25TdGFjaygpLCBbJl0oVmlydHVhbFJlZ2lz
dGVyIGV4cHJlc3Npb24sIFZpcnR1YWxSZWdpc3RlciBzbG90KSB7CisgICAgICAgICAgICBBU1NF
UlQoZXhwcmVzc2lvbiA9PSBzbG90IHx8IGV4cHJlc3Npb24uaXNDb25zdGFudCgpIHx8IGV4cHJl
c3Npb24uaXNBcmd1bWVudCgpIHx8IGV4cHJlc3Npb24udG9Mb2NhbCgpIDwgbV9jb2RlQmxvY2st
Pm1fbnVtVmFycyk7CisgICAgICAgIH0pOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBtYXRl
cmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhTdGFjayYgZXhwcmVzc2lvblN0YWNrKQorICAgIHsK
KyAgICAgICAgaWYgKGV4cHJlc3Npb25TdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB3YWxrRXhwcmVzc2lv
blN0YWNrKGV4cHJlc3Npb25TdGFjaywgWyZdKFZpcnR1YWxSZWdpc3RlciYgZXhwcmVzc2lvbiwg
VmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAgICAgICAgICAgIEFTU0VSVChleHByZXNzaW9uID09
IHNsb3QgfHwgZXhwcmVzc2lvbi5pc0NvbnN0YW50KCkgfHwgZXhwcmVzc2lvbi5pc0FyZ3VtZW50
KCkgfHwgZXhwcmVzc2lvbi50b0xvY2FsKCkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAg
ICAgICAgICAgIGlmIChleHByZXNzaW9uID09IHNsb3QpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBzbG90LCBleHByZXNzaW9uKTsKKyAg
ICAgICAgICAgIGV4cHJlc3Npb24gPSBzbG90OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICB2
b2lkIG1hdGVyaWFsaXplTG9jYWxzKFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIHNpemVfdCBuZXdT
dGFja1NpemUpCisgICAgeworICAgICAgICBpZiAoZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3N0YWNrU2l6ZSAtPSBuZXdTdGFja1Np
emU7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgd2Fsa0V4cHJlc3Npb25T
dGFjayhleHByZXNzaW9uU3RhY2ssIFsmXShWaXJ0dWFsUmVnaXN0ZXImIGV4cHJlc3Npb24sIFZp
cnR1YWxSZWdpc3RlciBzbG90KSB7CisgICAgICAgICAgICBBU1NFUlQoZXhwcmVzc2lvbiA9PSBz
bG90IHx8IGV4cHJlc3Npb24uaXNDb25zdGFudCgpIHx8IGV4cHJlc3Npb24uaXNBcmd1bWVudCgp
IHx8IGV4cHJlc3Npb24udG9Mb2NhbCgpIDwgbV9jb2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAg
ICAgICAgICBpZiAoZXhwcmVzc2lvbiA9PSBzbG90IHx8IGV4cHJlc3Npb24uaXNDb25zdGFudCgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhp
cywgc2xvdCwgZXhwcmVzc2lvbik7CisgICAgICAgICAgICBleHByZXNzaW9uID0gc2xvdDsKKyAg
ICAgICAgfSk7CisgICAgICAgIG1fc3RhY2tTaXplICs9IG5ld1N0YWNrU2l6ZTsKICAgICB9CiAK
ICAgICBzdHJ1Y3QgU3dpdGNoRW50cnkgewogICAgICAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zm
c2V0IG9mZnNldDsKLSAgICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCoganVtcFRhcmdl
dDsKKyAgICAgICAgaW50KiBqdW1wVGFyZ2V0OworICAgIH07CisKKyAgICBzdHJ1Y3QgQ29uc3Rh
bnRNYXBIYXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxFbmNvZGVkSlNWYWx1ZT4g
eworICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7
CisgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1
ZSYgc2xvdCkgeyBzbG90ID0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsgfQorICAgICAgICBz
dGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
dmFsdWUgPT0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsgfQogICAgIH07CiAKICAgICBGdW5j
dGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwpAQCAtMjU2
LDggKzM5NCwxMyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IG1fbm9y
bWFsaXplZEFyZ3VtZW50czsKICAgICBIYXNoTWFwPExhYmVsKiwgVmVjdG9yPFN3aXRjaEVudHJ5
Pj4gbV9zd2l0Y2hlczsKICAgICBFeHByZXNzaW9uVHlwZSBtX2pzTnVsbENvbnN0YW50OworICAg
IEV4cHJlc3Npb25UeXBlIG1femVyb0NvbnN0YW50OwogICAgIEV4cHJlc3Npb25MaXN0IG1fdW5p
dGlhbGl6ZWRMb2NhbHM7Ci0gICAgU3RkVW5vcmRlcmVkTWFwPHVpbnQ2NF90LCBWaXJ0dWFsUmVn
aXN0ZXI+IG1fY29uc3RhbnRNYXA7CisgICAgSGFzaE1hcDxFbmNvZGVkSlNWYWx1ZSwgVmlydHVh
bFJlZ2lzdGVyLCBXVEY6OkludEhhc2g8RW5jb2RlZEpTVmFsdWU+LCBDb25zdGFudE1hcEhhc2hU
cmFpdHM+IG1fY29uc3RhbnRNYXA7CisgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4gbV9y
ZXN1bHRzOworICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1f
bWF4U3RhY2tTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fdG9wTGV2ZWxTdGFja1NpemU7CiB9
OwogCiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNp
emVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaHJvd1dhc21F
eGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQpAQCAtMjcwLDEwICs0MTMsMTQgQEAgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGVCeXRlY29kZShjb24KIH0KIAogTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaHJv
d1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmKQotICAg
IDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1
bmN0aW9uSW5kZXgpLCBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycykKKyAgICA6IEJ5
dGVjb2RlR2VuZXJhdG9yQmFzZShtYWtlVW5pcXVlPEZ1bmN0aW9uQ29kZUJsb2NrPihmdW5jdGlv
bkluZGV4KSwgMCkKICAgICAsIG1faW5mbyhpbmZvKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1
bmN0aW9uSW5kZXgpCiB7CisgICAgbV9jb2RlQmxvY2stPm1fbnVtVmFycyA9IG51bWJlck9mTExJ
bnRDYWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIG1fc3RhY2tTaXplID0gbnVtYmVyT2ZMTEludENh
bGxlZVNhdmVSZWdpc3RlcnM7CisgICAgbV9tYXhTdGFja1NpemUgPSBudW1iZXJPZkxMSW50Q2Fs
bGVlU2F2ZVJlZ2lzdGVyczsKKwogICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgICAg
IFRodW5rczo6c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2Vw
dGlvbik7CiAKQEAgLTI4Myw2ICs0MzAsNyBAQCBMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0
b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSQogc3Rk
Ojp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxpemUo
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29kZUJsb2NrKTsKKyAgICBtX2NvZGVCbG9jay0+
bV9udW1DYWxsZWVMb2NhbHMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSwgbV9tYXhTdGFja1NpemUpOwogICAgIG1fY29kZUJsb2NrLT5zZXRJbnN0
cnVjdGlvbnMobV93cml0ZXIuZmluYWxpemUoKSk7CiAgICAgcmV0dXJuIFdURk1vdmUobV9jb2Rl
QmxvY2spOwogfQpAQCAtMjkwLDggKzQzOCwzMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25D
b2RlQmxvY2s+IExMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiAvLyBHZW5lcmF0ZWQgZnJvbSB3
YXNtLmpzb24KICNpbmNsdWRlICJXYXNtTExJbnRHZW5lcmF0b3JJbmxpbmVzLmgiCiAKLWF1dG8g
TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvcihjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgQ2FsbFJvbGUgcm9sZSkgLT4gTExJbnRDYWxsSW5mb3JtYXRpb24KK2F1dG8gTExJbnRH
ZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSkgLT4gTExJbnRDYWxsSW5mb3JtYXRpb24KIHsKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNl
dHMgdXAgdGhlIHN0YWNrIGxheW91dCBmb3IgY2FsbHMuIFRoZSBkZXNpcmVkIHN0YWNrIGxheW91
dCBpczoKKworICAgIC8vIEZQUm4KKyAgICAvLyAuLi4KKyAgICAvLyBGUFIxCisgICAgLy8gRlBS
MAorICAgIC8vIC0tLQorICAgIC8vIEdQUm4KKyAgICAvLyAuLi4KKyAgICAvLyBHUFIxCisgICAg
Ly8gR1BSMAorICAgIC8vIC0tLS0KKyAgICAvLyBzdGFja04KKyAgICAvLyAuLi4KKyAgICAvLyBz
dGFjazEKKyAgICAvLyBzdGFjazAKKyAgICAvLyAtLS0KKyAgICAvLyBjYWxsIGZyYW1lIGhlYWRl
cgorCisgICAgLy8gV2UgbmVlZCB0byBhbGxvY2F0ZSBhdCBsZWFzdCBzcGFjZSBmb3IgYWxsIEdQ
UnMgYW5kIEZQUnMuCisgICAgLy8gUmV0dXJuIHZhbHVlcyB1c2UgdGhlIHNhbWUgYWxsb2NhdGlv
biBsYXlvdXQuCisKKyAgICBjb25zdCBhdXRvIGluaXRpYWxTdGFja1NpemUgPSBtX3N0YWNrU2l6
ZTsKKwogICAgIGNvbnN0IGF1dG8mIGNhbGxpbmdDb252ZW50aW9uID0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCk7CiAgICAgY29uc3QgdWludDMyX3QgZ3ByQ291bnQgPSBjYWxsaW5nQ29udmVudGlv
bi5ncHJBcmdzLnNpemUoKTsKICAgICBjb25zdCB1aW50MzJfdCBmcHJDb3VudCA9IGNhbGxpbmdD
b252ZW50aW9uLmZwckFyZ3Muc2l6ZSgpOwpAQCAtMjk5LDE0ICs0NzEsOSBAQCBhdXRvIExMSW50
R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3IoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IENhbGxSb2xlIHJvbAogICAgIHVpbnQzMl90IHN0YWNrQ291bnQgPSAwOwogICAgIHVpbnQzMl90
IGdwckluZGV4ID0gMDsKICAgICB1aW50MzJfdCBmcHJJbmRleCA9IDA7Ci0KLSAgICBWZWN0b3I8
UmVmUHRyPFJlZ2lzdGVySUQ+LCAxNj4gcmVnaXN0ZXJzOwotCi0gICAgRXhwcmVzc2lvbkxpc3Qg
YXJndW1lbnRzKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOwotICAgIEV4cHJlc3Npb25MaXN0
IHJlc3VsdHMoc2lnbmF0dXJlLnJldHVybkNvdW50KCkpOworICAgIHVpbnQzMl90IHN0YWNrSW5k
ZXggPSAwOwogCiAgICAgYXV0byBhbGxvY2F0ZVN0YWNrUmVnaXN0ZXIgPSBbJl0oVHlwZSB0eXBl
KSB7Ci0gICAgICAgIEFTU0VSVChyb2xlID09IENhbGxSb2xlOjpDYWxsZXIpOwogICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBUeXBlOjpJMzI6CiAgICAgICAgIGNhc2UgVHlw
ZTo6STY0OgpAQCAtMzE0LDE5ICs0ODEsMTUgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbElu
Zm9ybWF0aW9uRm9yKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDYWxsUm9sZSByb2wKICAg
ICAgICAgY2FzZSBUeXBlOjpGdW5jcmVmOgogICAgICAgICAgICAgaWYgKGdwckluZGV4IDwgZ3By
Q291bnQpCiAgICAgICAgICAgICAgICAgKytncHJJbmRleDsKLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIHJlZ2lzdGVycy5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOworICAgICAg
ICAgICAgZWxzZSBpZiAoc3RhY2tJbmRleCsrID49IHN0YWNrQ291bnQpCiAgICAgICAgICAgICAg
ICAgKytzdGFja0NvdW50OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgVHlwZTo6RjMyOgogICAgICAgICBjYXNlIFR5cGU6OkY2NDoKICAgICAgICAgICAg
IGlmIChmcHJJbmRleCA8IGZwckNvdW50KQogICAgICAgICAgICAgICAgICsrZnBySW5kZXg7Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByZWdpc3RlcnMuYXBwZW5kKG5ld1Rl
bXBvcmFyeSgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YWNrSW5kZXgrKyA+PSBzdGFja0Nv
dW50KQogICAgICAgICAgICAgICAgICsrc3RhY2tDb3VudDsKLSAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZvaWQ6CiAgICAgICAgIGNhc2UgRnVuYzoKQEAg
LTMzNSw5MCArNDk4LDE0MiBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25G
b3IoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENhbGxSb2xlIHJvbAogICAgIH07CiAKIAot
ICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxsZWUpIHsKLSAgICAgICAgLy8gUmV1c2UgdGhl
IHNsb3RzIHdlIGFsbG9jYXRlZCB0byBzcGlsbCB0aGUgcmVnaXN0ZXJzIGluIGFkZEFyZ3VtZW50
cwotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBncHJDb3VudCArIGZwckNvdW50OyBpLS07KQot
ICAgICAgICAgICAgcmVnaXN0ZXJzLmFwcGVuZChuZXcgUmVnaXN0ZXJJRCg6OkpTQzo6dmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwobnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnMgKyBpKSkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBncHJDb3Vu
dDsgaSsrKQotICAgICAgICAgICAgcmVnaXN0ZXJzLmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7Ci0g
ICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBmcHJDb3VudDsgaSsrKQotICAgICAgICAg
ICAgcmVnaXN0ZXJzLmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7Ci0KLSAgICAgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykKLSAgICAgICAg
ICAgIGFsbG9jYXRlU3RhY2tSZWdpc3RlcihzaWduYXR1cmUuYXJndW1lbnQoaSkpOwotICAgICAg
ICBncHJJbmRleCA9IDA7Ci0gICAgICAgIGZwckluZGV4ID0gMDsKLSAgICAgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyBpKyspCi0gICAgICAgICAg
ICBhbGxvY2F0ZVN0YWNrUmVnaXN0ZXIoc2lnbmF0dXJlLnJldHVyblR5cGUoaSkpOworICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspCisg
ICAgICAgIGFsbG9jYXRlU3RhY2tSZWdpc3RlcihzaWduYXR1cmUuYXJndW1lbnQoaSkpOworCisg
ICAgZ3BySW5kZXggPSAwOworICAgIGZwckluZGV4ID0gMDsKKyAgICBzdGFja0luZGV4ID0gMDsK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7IGkr
KykKKyAgICAgICAgYWxsb2NhdGVTdGFja1JlZ2lzdGVyKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkp
KTsKKworICAgIC8vIEZJWE1FOiB3ZSBhcmUgYWxsb2NhdGluZyB0aGUgZXh0cmEgc3BhY2UgZm9y
IHRoZSBhcmd1bWVudC9yZXR1cm4gY291bnQgaW4gb3JkZXIgdG8gYXZvaWQgaW50ZXJmZXJlbmNl
LCBidXQgd2UgY291bGQgZG8gYmV0dGVyCisgICAgLy8gTk9URTogV2UgaW5jcmVhc2UgYXJnIGNv
dW50IGJ5IDEgZm9yIHRoZSBjYXNlIG9mIGluZGlyZWN0IGNhbGxzCisgICAgbV9zdGFja1NpemUg
Kz0gc3RkOjptYXgoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSArIDEsIHNpZ25hdHVyZS5yZXR1
cm5Db3VudCgpKSArIGdwckNvdW50ICsgZnByQ291bnQgKyBzdGFja0NvdW50ICsgQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7CisgICAgaWYgKG1fc3RhY2tTaXplICUgc3RhY2tBbGln
bm1lbnRSZWdpc3RlcnMoKSkKKyAgICAgICAgKyttX3N0YWNrU2l6ZTsKKyAgICBpZiAobV9tYXhT
dGFja1NpemUgPCBtX3N0YWNrU2l6ZSkKKyAgICAgICAgbV9tYXhTdGFja1NpemUgPSBtX3N0YWNr
U2l6ZTsKKworCisgICAgRXhwcmVzc2lvbkxpc3QgYXJndW1lbnRzKHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCkpOworICAgIEV4cHJlc3Npb25MaXN0IHRlbXBvcmFyeVJlc3VsdHMoc2lnbmF0dXJl
LnJldHVybkNvdW50KCkpOworCisgICAgY29uc3QgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBtX3N0
YWNrU2l6ZTsKKyAgICBjb25zdCB1bnNpZ25lZCBiYXNlID0gc3RhY2tPZmZzZXQgLSBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKKworICAgIGNvbnN0IHVpbnQzMl90IGdwckxpbWl0
ID0gYmFzZSAtIHN0YWNrQ291bnQgLSBncHJDb3VudDsKKyAgICBjb25zdCB1aW50MzJfdCBmcHJM
aW1pdCA9IGdwckxpbWl0IC0gZnByQ291bnQ7CisKKyAgICBzdGFja0luZGV4ID0gYmFzZTsKKyAg
ICBncHJJbmRleCA9IGJhc2UgLSBzdGFja0NvdW50OworICAgIGZwckluZGV4ID0gZ3BySW5kZXgg
LSBncHJDb3VudDsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkp
KSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAg
ICAgICAgY2FzZSBUeXBlOjpBbnlyZWY6CisgICAgICAgIGNhc2UgVHlwZTo6RnVuY3JlZjoKKyAg
ICAgICAgICAgIGlmIChncHJJbmRleCA+IGdwckxpbWl0KQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50c1tpXSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKC0tZ3BySW5kZXgpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKC0tc3RhY2tJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
eXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgaWYgKGZwcklu
ZGV4ID4gZnByTGltaXQpCisgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoLS1mcHJJbmRleCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRzW2ldID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1zdGFja0luZGV4
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgIGNhc2Ug
RnVuYzoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KICAgICB9CiAKLSAgICB1bnNpZ25lZCBzdGFja09mZnNldDsKLSAgICBpZiAocm9sZSA9PSBD
YWxsUm9sZTo6Q2FsbGVlKQotICAgICAgICBzdGFja09mZnNldCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPigtcmVnaXN0ZXJzLmxhc3QoKS0+aW5kZXgoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8v
IEFsaWduIHRoZSBzdGFjawotICAgICAgICBhdXRvIGNvbXB1dGVTdGFja09mZnNldCA9IFsmXSB7
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1yZWdpc3RlcnMubGFz
dCgpLT5pbmRleCgpKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwotICAgICAg
ICB9OwotICAgICAgICB3aGlsZSAoY29tcHV0ZVN0YWNrT2Zmc2V0KCkgJSBzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpKQotICAgICAgICAgICAgcmVnaXN0ZXJzLmFwcGVuZChuZXdUZW1wb3Jhcnko
KSk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gY29tcHV0ZVN0YWNrT2Zmc2V0KCk7CisgICAgc3Rh
Y2tJbmRleCA9IGJhc2U7CisgICAgZ3BySW5kZXggPSBiYXNlIC0gc3RhY2tDb3VudDsKKyAgICBm
cHJJbmRleCA9IGdwckluZGV4IC0gZ3ByQ291bnQ7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChzaWdu
YXR1cmUucmV0dXJuVHlwZShpKSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAg
Y2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIGNhc2UgVHlwZTo6QW55cmVmOgorICAgICAgICBjYXNl
IFR5cGU6OkZ1bmNyZWY6CisgICAgICAgICAgICBpZiAoZ3BySW5kZXggPiBncHJMaW1pdCkKKyAg
ICAgICAgICAgICAgICB0ZW1wb3JhcnlSZXN1bHRzW2ldID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoLS1ncHJJbmRleCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGVtcG9y
YXJ5UmVzdWx0c1tpXSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKC0tc3RhY2tJbmRleCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2Ug
VHlwZTo6RjY0OgorICAgICAgICAgICAgaWYgKGZwckluZGV4ID4gZnByTGltaXQpCisgICAgICAg
ICAgICAgICAgdGVtcG9yYXJ5UmVzdWx0c1tpXSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKC0t
ZnBySW5kZXgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRlbXBvcmFyeVJl
c3VsdHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLXN0YWNrSW5kZXgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgY2FzZSBGdW5jOgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogICAgIH0K
IAotICAgIEFTU0VSVChyb2xlID09IENhbGxSb2xlOjpDYWxsZXIgfHwgIXN0YWNrQ291bnQpOwot
ICAgIGNvbnN0IHVpbnQzMl90IG1heEdQUkluZGV4ID0gc3RhY2tDb3VudCArIGdwckNvdW50Owot
ICAgIGNvbnN0IHVpbnQzMl90IG1heEZQUkluZGV4ID0gbWF4R1BSSW5kZXggKyBmcHJDb3VudDsK
KyAgICBtX3N0YWNrU2l6ZSA9IGluaXRpYWxTdGFja1NpemU7CisKKyAgICBhdXRvIGNvbW1pdFJl
c3VsdHMgPSBbdGhpcywgdGVtcG9yYXJ5UmVzdWx0cyA9IFdURk1vdmUodGVtcG9yYXJ5UmVzdWx0
cyldKEV4cHJlc3Npb25MaXN0JiByZXN1bHRzKSB7CisgICAgICAgIGZvciAoYXV0byB0ZW1wb3Jh
cnlSZXN1bHQgOiB0ZW1wb3JhcnlSZXN1bHRzKSB7CisgICAgICAgICAgICBFeHByZXNzaW9uVHlw
ZSByZXN1bHQgPSBwdXNoKCk7CisgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIHJlc3Vs
dCwgdGVtcG9yYXJ5UmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIExMSW50Q2FsbEluZm9ybWF0aW9uIHsg
c3RhY2tPZmZzZXQsIHN0YWNrQ291bnQsIFdURk1vdmUoYXJndW1lbnRzKSwgV1RGTW92ZShjb21t
aXRSZXN1bHRzKSB9OworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25G
b3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFZlY3RvcjxWaXJ0dWFsUmVn
aXN0ZXIsIDI+Cit7CisgICAgaWYgKG1fcmVzdWx0cy5zaXplKCkpCisgICAgICAgIHJldHVybiBt
X3Jlc3VsdHM7CisKKyAgICBtX3Jlc3VsdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaWduYXR1
cmUucmV0dXJuQ291bnQoKSk7CisKKyAgICBjb25zdCBhdXRvJiBjYWxsaW5nQ29udmVudGlvbiA9
IHdhc21DYWxsaW5nQ29udmVudGlvbigpOworICAgIGNvbnN0IHVpbnQzMl90IGdwckNvdW50ID0g
Y2FsbGluZ0NvbnZlbnRpb24uZ3ByQXJncy5zaXplKCk7CisgICAgY29uc3QgdWludDMyX3QgZnBy
Q291bnQgPSBjYWxsaW5nQ29udmVudGlvbi5mcHJBcmdzLnNpemUoKTsKKworICAgIHVpbnQzMl90
IGdwckluZGV4ID0gMDsKKyAgICB1aW50MzJfdCBmcHJJbmRleCA9IGdwckNvdW50OwogICAgIHVp
bnQzMl90IHN0YWNrSW5kZXggPSAwOwotICAgIGF1dG8gYXBwZW5kRm9yVHlwZSA9IFsmXShUeXBl
IHR5cGUsIHVuc2lnbmVkIGluZGV4LCBhdXRvJiB2ZWN0b3IpIHsKLSAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY29uc3QgdWludDMyX3QgbWF4R1BSSW5kZXggPSBncHJDb3VudDsKKyAgICBj
b25zdCB1aW50MzJfdCBtYXhGUFJJbmRleCA9IG1heEdQUkluZGV4ICsgZnByQ291bnQ7CisKKyAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7IGkrKykg
eworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpKSB7CiAgICAgICAgIGNh
c2UgVHlwZTo6STMyOgogICAgICAgICBjYXNlIFR5cGU6Okk2NDoKICAgICAgICAgY2FzZSBUeXBl
OjpBbnlyZWY6CiAgICAgICAgIGNhc2UgVHlwZTo6RnVuY3JlZjoKICAgICAgICAgICAgIGlmIChn
cHJJbmRleCA8IG1heEdQUkluZGV4KQotICAgICAgICAgICAgICAgIHZlY3RvcltpbmRleF0gPSBy
ZWdpc3RlcnNbcmVnaXN0ZXJzLnNpemUoKSAtIGdwckluZGV4KysgLSAxXTsKLSAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxsZXIpCi0g
ICAgICAgICAgICAgICAgICAgIHZlY3RvcltpbmRleF0gPSByZWdpc3RlcnNbcmVnaXN0ZXJzLnNp
emUoKSAtIHN0YWNrSW5kZXgrKyAtIDFdOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgdmVjdG9yW2luZGV4XSA9IG5ldyBSZWdpc3RlcklEKHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KHN0YWNrSW5kZXgrKykpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIG1fcmVzdWx0cy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobnVtYmVyT2ZMTElu
dENhbGxlZVNhdmVSZWdpc3RlcnMgKyBncHJJbmRleCsrKSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChzdGFja0luZGV4KyspKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFR5cGU6
OkYzMjoKICAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CiAgICAgICAgICAgICBpZiAoZnBySW5kZXgg
PCBtYXhGUFJJbmRleCkKLSAgICAgICAgICAgICAgICB2ZWN0b3JbaW5kZXhdID0gcmVnaXN0ZXJz
W3JlZ2lzdGVycy5zaXplKCkgLSBmcHJJbmRleCsrIC0gMV07Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBDYWxsUm9sZTo6Q2FsbGVyKQotICAgICAgICAg
ICAgICAgICAgICB2ZWN0b3JbaW5kZXhdID0gcmVnaXN0ZXJzW3JlZ2lzdGVycy5zaXplKCkgLSBz
dGFja0luZGV4KysgLSAxXTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHZlY3RvcltpbmRleF0gPSBuZXcgUmVnaXN0ZXJJRCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChzdGFja0luZGV4KyspKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3Jl
c3VsdHMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG51bWJlck9mTExJbnRDYWxsZWVT
YXZlUmVnaXN0ZXJzICsgZnBySW5kZXgrKykpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fcmVzdWx0cy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoc3RhY2tJ
bmRleCsrKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWb2lkOgogICAgICAg
ICBjYXNlIEZ1bmM6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIGdwckluZGV4ID0gc3RhY2tDb3VudDsKLSAgICBmcHJJ
bmRleCA9IG1heEdQUkluZGV4OwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpOyBpKyspCi0gICAgICAgIGFwcGVuZEZvclR5cGUoc2lnbmF0dXJl
LmFyZ3VtZW50KGkpLCBpLCBhcmd1bWVudHMpOwotICAgIGdwckluZGV4ID0gc3RhY2tDb3VudDsK
LSAgICBmcHJJbmRleCA9IG1heEdQUkluZGV4OwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgaSsrKQotICAgICAgICBhcHBlbmRGb3JUeXBlKHNp
Z25hdHVyZS5yZXR1cm5UeXBlKGkpLCBpLCByZXN1bHRzKTsKLQotICAgIGlmIChyb2xlID09IENh
bGxSb2xlOjpDYWxsZXIpIHsKLSAgICAgICAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgY2FsbCBmcmFt
ZS4KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxSZWdpc3RlcklEPiwgQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMgKyAyLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gY2FsbEZyYW1lOwotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
OyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gTExJbnRDYWxsSW5mb3JtYXRpb24geyBzdGFja09mZnNldCwgc3Rh
Y2tDb3VudCwgV1RGTW92ZShhcmd1bWVudHMpLCBXVEZNb3ZlKHJlc3VsdHMpIH07CisgICAgcmV0
dXJuIG1fcmVzdWx0czsKIH0KIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CkBAIC00MzUsOSArNjUw
LDkgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgdWludDMyX3QgZnBySW5kZXggPSBtYXhH
UFJJbmRleDsKICAgICB1aW50MzJfdCBzdGFja0luZGV4ID0gMDsKIAotICAgIFZlY3RvcjxSZWZQ
dHI8UmVnaXN0ZXJJRD4+IHJlZ2lzdGVyQXJndW1lbnRzKGdwckNvdW50ICsgZnByQ291bnQpOwor
ICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IHJlZ2lzdGVyQXJndW1lbnRzKGdwckNvdW50ICsg
ZnByQ291bnQpOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBncHJDb3VudCArIGZwckNv
dW50OyBpKyspCi0gICAgICAgIHJlZ2lzdGVyQXJndW1lbnRzW2ldID0gYWRkVmFyKCk7CisgICAg
ICAgIHJlZ2lzdGVyQXJndW1lbnRzW2ldID0gcHVzaCgpOwogCiAgICAgY29uc3QgYXV0byBhZGRB
cmd1bWVudCA9IFsmXSh1aW50MzJfdCBpbmRleCwgdWludDMyX3QmIGNvdW50LCB1aW50MzJfdCBt
YXgpIHsKICAgICAgICAgaWYgKGNvdW50IDwgbWF4KQpAQCAtNDY0LDEzICs2NzksMTYgQEAgYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2NvZGVCbG9jay0+
bV9udW1WYXJzICs9IGdwckNvdW50ICsgZnByQ291bnQ7CisKICAgICByZXR1cm4geyB9OwogfQog
CiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgbV9jb2RlQmxvY2stPm1fbnVtVmFycyArPSBjb3Vu
dDsKICAgICB3aGlsZSAoY291bnQtLSkgewotICAgICAgICBhdXRvIGxvY2FsID0gYWRkVmFyKCk7
CisgICAgICAgIGF1dG8gbG9jYWwgPSBwdXNoKCk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewog
ICAgICAgICBjYXNlIFR5cGU6OkFueXJlZjoKICAgICAgICAgY2FzZSBUeXBlOjpGdW5jcmVmOgpA
QCAtNDg1LDQ1ICs3MDMsNjYgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0
eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogCiB2b2lkIExMSW50R2VuZXJh
dG9yOjpkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkKIHsKKyAgICBpZiAobV91bml0aWFsaXplZExv
Y2Fscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gbnVsbCA9IGpzTnVs
bENvbnN0YW50KCk7CiAgICAgZm9yIChhdXRvIGxvY2FsIDogbV91bml0aWFsaXplZExvY2FscykK
ICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBsb2NhbCwgbnVsbCk7CiAgICAgbV91bml0aWFs
aXplZExvY2Fscy5jbGVhcigpOwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDb25zdGFu
dChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKSAtPiBFeHByZXNzaW9uVHlwZQorYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKSAtPiBFeHBy
ZXNzaW9uVHlwZQogewotICAgIFZpcnR1YWxSZWdpc3RlciBzb3VyY2UoRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXggKyBtX2NvZGVCbG9jay0+bV9jb25zdGFudHMuc2l6ZSgpKTsKLSAgICBhdXRv
IHJlc3VsdCA9IG1fY29uc3RhbnRNYXAuZW1wbGFjZSh2YWx1ZSwgc291cmNlKTsKLSAgICBpZiAo
cmVzdWx0LnNlY29uZCkgeworICAgIGF1dG8gY29uc3RhbnQgPSBbJl0geworICAgICAgICBpZiAo
IXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHplcm9Db25zdGFudCgpOworCisgICAgICAgIGlm
ICh2YWx1ZSA9PSBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKQorICAgICAgICAgICAgcmV0dXJu
IGpzTnVsbENvbnN0YW50KCk7CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNvdXJjZShGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5zaXplKCkp
OworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fY29uc3RhbnRNYXAuYWRkKHZhbHVlLCBzb3VyY2Up
OworICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5h
cHBlbmQodmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEdlbmVyYXRl
ZFdhc21CeXRlY29kZXMoKSkpCiAgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudFR5
cGVzLmFwcGVuZCh0eXBlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291cmNlID0gcmVzdWx0LmZp
cnN0LT5zZWNvbmQ7Ci0gICAgYXV0byB0YXJnZXQgPSBuZXdUZW1wb3JhcnkoKTsKLSAgICBXYXNt
TW92OjplbWl0KHRoaXMsIHRhcmdldCwgc291cmNlKTsKLSAgICByZXR1cm4gdGFyZ2V0OworICAg
ICAgICByZXR1cm4gc291cmNlOworICAgIH07CisgICAgLy8gbGVhdmUgYSBob2xlIGlmIHdlIG5l
ZWQgdG8gbWF0ZXJpYWxpemUgdGhlIGNvbnN0YW50CisgICAgcHVzaCgpOworICAgIHJldHVybiBj
b25zdGFudCgpOwogfQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIC8v
IEZJWE1FOiBSZW1vdmUgdW5uZWNlc3NhcnkgbW92ZXMKLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNjU3Ci0gICAgcmVzdWx0ID0gbmV3VGVtcG9yYXJ5
KCk7Ci0gICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCByZXN1bHQsIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGluZGV4KSk7CisgICAgLy8gbGVhdmUgYSBob2xlIGlmIHdlIG5lZWQgdG8gbWF0ZXJpYWxp
emUgdGhlIGxvY2FsCisgICAgcHVzaCgpOworICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZv
cldhc21Mb2NhbChpbmRleCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBMTEludEdlbmVy
YXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0gICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChpbmRleCksIHZhbHVlKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0ID0gdmly
dHVhbFJlZ2lzdGVyRm9yV2FzbUxvY2FsKGluZGV4KTsKKworICAgIC8vIElmIHRoaXMgbG9jYWwg
aXMgY3VycmVudGx5IG9uIHRoZSBzdGFjayB3ZSBuZWVkIHRvIG1hdGVyaWFsaXplIGl0LCBvdGhl
cndpc2UgaXQnbGwgc2VlIHRoZSBuZXcgdmFsdWUgaW5zdGVhZCBvZiB0aGUgb2xkIG9uZQorICAg
IHdhbGtFeHByZXNzaW9uU3RhY2sobV9wYXJzZXItPmV4cHJlc3Npb25TdGFjaygpLCBbJl0oVmly
dHVhbFJlZ2lzdGVyJiBleHByZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgeworICAgICAg
ICBpZiAoZXhwcmVzc2lvbiAhPSB0YXJnZXQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IFdhc21Nb3Y6OmVtaXQodGhpcywgc2xvdCwgZXhwcmVzc2lvbik7CisgICAgICAgIGV4cHJlc3Np
b24gPSBzbG90OworICAgIH0pOworCisgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCB0YXJnZXQsIHZh
bHVlKTsKKwogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmdldEds
b2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogewotICAgIHJlc3VsdCA9IG5ld1RlbXBvcmFyeSgpOworICAgIHJlc3VsdCA9IHB1c2go
KTsKICAgICBXYXNtR2V0R2xvYmFsOjplbWl0KHRoaXMsIHJlc3VsdCwgaW5kZXgpOwogICAgIHJl
dHVybiB7IH07CiB9CkBAIC01NDAsMTEgKzc3OSwxNCBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpz
ZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFs
UgogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVy
ZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgYmxvY2ssIFN0YWNrJiBuZXdT
dGFjaywgdWludDMyX3QgbG9vcEluZGV4KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgbmV3U3Rh
Y2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworICAgIG1hdGVyaWFs
aXplTG9jYWxzKGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjay5zaXplKCkpOworICAgIG1hdGVyaWFs
aXplQ29uc3RhbnRzQW5kTG9jYWxzKG5ld1N0YWNrKTsKKwogICAgIFJlZjxMYWJlbD4gYm9keSA9
IG5ld0VtaXR0ZWRMYWJlbCgpOwogICAgIFJlZjxMYWJlbD4gY29udGludWF0aW9uID0gbmV3TGFi
ZWwoKTsKIAotICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0
YWNrKTsKLSAgICBibG9jayA9IENvbnRyb2xUeXBlOjpsb29wKHNpZ25hdHVyZSwgbmV3U3RhY2ss
IFdURk1vdmUoYm9keSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CisgICAgYmxvY2sgPSBDb250
cm9sVHlwZTo6bG9vcChzaWduYXR1cmUsIG1fc3RhY2tTaXplLCBXVEZNb3ZlKGJvZHkpLCBXVEZN
b3ZlKGNvbnRpbnVhdGlvbikpOwogCiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gb3NyRW50
cnlEYXRhOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV9udW1B
cmd1bWVudHM7IGkrKykKQEAgLTU1NCwxMSArNzk2LDExIEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6
OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ss
IENvCiAgICAgY29uc3QgdWludDMyX3QgZ3ByQ291bnQgPSBjYWxsaW5nQ29udmVudGlvbi5ncHJB
cmdzLnNpemUoKTsKICAgICBjb25zdCB1aW50MzJfdCBmcHJDb3VudCA9IGNhbGxpbmdDb252ZW50
aW9uLmZwckFyZ3Muc2l6ZSgpOwogICAgIGZvciAoaW50MzJfdCBpID0gZ3ByQ291bnQgKyBmcHJD
b3VudCArIG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzOyBpIDwgbV9jb2RlQmxvY2st
Pm1fbnVtVmFyczsgaSsrKQotICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKDo6SlNDOjp2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7CisgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOwogICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4
ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytj
b250cm9sSW5kZXgpIHsKLSAgICAgICAgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayA9
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lv
blN0YWNrOworICAgICAgICBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRy
b2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CiAgICAgICAg
IGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKLSAgICAgICAgICAgIG9z
ckVudHJ5RGF0YS5hcHBlbmQoZXhwcmVzc2lvbi0+dmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAg
ICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChleHByZXNzaW9uKTsKICAgICB9CiAKICAgICBXYXNt
TG9vcEhpbnQ6OmVtaXQodGhpcyk7CkBAIC01NzAsMTMgKzgxMiwxNSBAQCBhdXRvIExMSW50R2Vu
ZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2lu
Z1N0YWNrLCBDbwogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRUb3BMZXZlbChCbG9ja1NpZ25h
dHVyZSBzaWduYXR1cmUpIC0+IENvbnRyb2xUeXBlCiB7Ci0gICAgcmV0dXJuIENvbnRyb2xUeXBl
Ojp0b3BMZXZlbChzaWduYXR1cmUsIHRtcHNGb3JTaWduYXR1cmUoc2lnbmF0dXJlKSwgbmV3TGFi
ZWwoKSk7CisgICAgbV90b3BMZXZlbFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOworICAgIHJldHVy
biBDb250cm9sVHlwZTo6dG9wTGV2ZWwoc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwgbmV3TGFiZWwo
KSk7CiB9CiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEJsb2NrKEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgbmV3QmxvY2ssIFN0
YWNrJiBuZXdTdGFjaykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIG5ld1N0YWNrID0gc3BsaXRT
dGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKLSAgICBuZXdCbG9jayA9IENvbnRyb2xU
eXBlOjpibG9jayhzaWduYXR1cmUsIHRtcHNGb3JTaWduYXR1cmUoc2lnbmF0dXJlKSwgbmV3TGFi
ZWwoKSk7CisgICAgbWF0ZXJpYWxpemVMb2NhbHMoZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrLnNp
emUoKSk7CisgICAgbmV3QmxvY2sgPSBDb250cm9sVHlwZTo6YmxvY2soc2lnbmF0dXJlLCBtX3N0
YWNrU2l6ZSwgbmV3TGFiZWwoKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtNTg1LDExNyAr
ODI5LDE1OCBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24sIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgUwogICAgIFJlZjxMYWJlbD4gYWx0ZXJu
YXRlID0gbmV3TGFiZWwoKTsKICAgICBSZWY8TGFiZWw+IGNvbnRpbnVhdGlvbiA9IG5ld0xhYmVs
KCk7CiAKKyAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFj
ayk7CisgICAgbWF0ZXJpYWxpemVMb2NhbHMoZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrLnNpemUo
KSk7CisKICAgICBXYXNtSmZhbHNlOjplbWl0KHRoaXMsIGNvbmRpdGlvbiwgYWx0ZXJuYXRlLT5i
aW5kKHRoaXMpKTsKIAotICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xv
c2luZ1N0YWNrKTsKLSAgICByZXN1bHQgPSBDb250cm9sVHlwZTo6aWZfKHNpZ25hdHVyZSwgdG1w
c0ZvclNpZ25hdHVyZShzaWduYXR1cmUpLCBXVEZNb3ZlKGFsdGVybmF0ZSksIFdURk1vdmUoY29u
dGludWF0aW9uKSk7CisgICAgcmVzdWx0ID0gQ29udHJvbFR5cGU6OmlmXyhzaWduYXR1cmUsIG1f
c3RhY2tTaXplLCBXVEZNb3ZlKGFsdGVybmF0ZSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9s
VHlwZSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGN1cnJlbnRTdGFjaykgLT4gUGFydGlh
bFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9sVHlwZSYgZGF0YSwg
U3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xJZj4oZGF0YSkpOwotICAgIHVuaWZ5VmFsdWVz
V2l0aEJsb2NrKGRhdGEubV9yZXN1bHRzLCBjdXJyZW50U3RhY2spOworICAgIG1hdGVyaWFsaXpl
Q29uc3RhbnRzQW5kTG9jYWxzKGV4cHJlc3Npb25TdGFjayk7CiAgICAgV2FzbUptcDo6ZW1pdCh0
aGlzLCBkYXRhLm1fY29udGludWF0aW9uLT5iaW5kKHRoaXMpKTsKICAgICByZXR1cm4gYWRkRWxz
ZVRvVW5yZWFjaGFibGUoZGF0YSk7CiB9CiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2VU
b1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAg
bV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpICsgZGF0YS5tX3NpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOworCiAgICAgQ29udHJvbElmJiBjb250cm9sID0gV1RGOjpnZXQ8Q29udHJvbElm
PihkYXRhKTsKICAgICBlbWl0TGFiZWwoY29udHJvbC5tX2FsdGVybmF0ZS5nZXQoKSk7Ci0gICAg
ZGF0YSA9IENvbnRyb2xUeXBlOjpibG9jayhkYXRhLm1fc2lnbmF0dXJlLCBXVEZNb3ZlKGRhdGEu
bV9yZXN1bHRzKSwgV1RGTW92ZShkYXRhLm1fY29udGludWF0aW9uKSk7CisgICAgZGF0YSA9IENv
bnRyb2xUeXBlOjpibG9jayhkYXRhLm1fc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwgV1RGTW92ZShk
YXRhLm1fY29udGludWF0aW9uKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBMTEludEdl
bmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xUeXBlJiBkYXRhLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJh
dG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmIGRhdGEsIFN0YWNrJiByZXR1cm5WYWx1
ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBpZiAoIWRhdGEubV9zaWduYXR1cmUtPnJldHVy
bkNvdW50KCkpIHsKICAgICAgICAgV2FzbVJldFZvaWQ6OmVtaXQodGhpcyk7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCi0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJ
bmZvcm1hdGlvbkZvcigqZGF0YS5tX3NpZ25hdHVyZSwgQ2FsbFJvbGU6OkNhbGxlZSk7Ci0gICAg
dW5pZnlWYWx1ZXNXaXRoQmxvY2soaW5mby5yZXN1bHRzLCByZXR1cm5WYWx1ZXMpOworICAgIC8v
IG5vIG5lZWQgdG8gZHJvcCBrZWVwIGhlcmUsIHNpbmNlIHdlIGhhdmUgdG8gbW92ZSBhbnl3YXkK
KyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoKmRhdGEu
bV9zaWduYXR1cmUpLCByZXR1cm5WYWx1ZXMpOwogICAgIFdhc21SZXQ6OmVtaXQodGhpcyk7CiAK
ICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRCcmFuY2goQ29u
dHJvbFR5cGUmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRv
cjo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICB1bmlmeVZhbHVl
c1dpdGhCbG9jayhkYXRhLm1fcmVzdWx0cywgcmV0dXJuVmFsdWVzKTsKLQogICAgIFJlZlB0cjxM
YWJlbD4gdGFyZ2V0ID0gZGF0YS50YXJnZXRMYWJlbEZvckJyYW5jaCgpOwotICAgIGlmIChjb25k
aXRpb24pCi0gICAgICAgIFdhc21KdHJ1ZTo6ZW1pdCh0aGlzLCBjb25kaXRpb24sIHRhcmdldC0+
YmluZCh0aGlzKSk7Ci0gICAgZWxzZQotICAgICAgICBXYXNtSm1wOjplbWl0KHRoaXMsIHRhcmdl
dC0+YmluZCh0aGlzKSk7CisgICAgUmVmUHRyPExhYmVsPiBza2lwID0gbnVsbHB0cjsKKworICAg
IG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKHJldHVyblZhbHVlcyk7CisKKyAgICBpZiAo
Y29uZGl0aW9uLmlzVmFsaWQoKSkgeworICAgICAgICBza2lwID0gbmV3TGFiZWwoKTsKKyAgICAg
ICAgV2FzbUpmYWxzZTo6ZW1pdCh0aGlzLCBjb25kaXRpb24sIHNraXAtPmJpbmQodGhpcykpOwor
ICAgIH0KKworICAgIGRyb3BLZWVwKHJldHVyblZhbHVlcywgZGF0YSwgIXNraXApOworICAgIFdh
c21KbXA6OmVtaXQodGhpcywgdGFyZ2V0LT5iaW5kKHRoaXMpKTsKKworICAgIGlmIChza2lwKQor
ICAgICAgICBlbWl0TGFiZWwoKnNraXApOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBM
TEludEdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3Qg
VmVjdG9yPENvbnRyb2xUeXBlKj4mIHRhcmdldHMsIENvbnRyb2xUeXBlJiBkZWZhdWx0VGFyZ2V0
LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBjb25zdCBWZWN0b3I8Q29udHJvbFR5cGUqPiYgdGFyZ2V0cywgQ29udHJvbFR5cGUmIGRlZmF1
bHRUYXJnZXQsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAg
ICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gbV9jb2RlQmxvY2stPm51bWJlck9mSnVtcFRhYmxlcygp
OwotICAgIEZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFibGUmIGp1bXBUYWJsZSA9IG1fY29kZUJs
b2NrLT5hZGRKdW1wVGFibGUodGFyZ2V0cy5zaXplKCkpOworICAgIG1hdGVyaWFsaXplQ29uc3Rh
bnRzQW5kTG9jYWxzKGV4cHJlc3Npb25TdGFjayk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRh
cmdldCA6IHRhcmdldHMpCi0gICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHRhcmdldC0+bV9y
ZXN1bHRzLCBleHByZXNzaW9uU3RhY2spOwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGRlZmF1
bHRUYXJnZXQubV9yZXN1bHRzLCBleHByZXNzaW9uU3RhY2spOworICAgIHVuc2lnbmVkIHRhYmxl
SW5kZXggPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFibGVzKCk7CisgICAgRnVuY3Rpb25D
b2RlQmxvY2s6Okp1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPmFkZEp1bXBUYWJs
ZSh0YXJnZXRzLnNpemUoKSArIDEpOwogCi0gICAgV2FzbVN3aXRjaDo6ZW1pdCh0aGlzLCBjb25k
aXRpb24sIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQudGFyZ2V0TGFiZWxGb3JCcmFuY2goKS0+
YmluZCh0aGlzKSk7CisgICAgV2FzbVN3aXRjaDo6ZW1pdCh0aGlzLCBjb25kaXRpb24sIHRhYmxl
SW5kZXgpOwogCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIEluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQgb2Zmc2V0ID0gbV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCk7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiB0YXJnZXQgOiB0YXJnZXRzKSB7Ci0gICAgICAgIFJlZlB0cjxMYWJlbD4gdGFy
Z2V0TGFiZWwgPSB0YXJnZXQtPnRhcmdldExhYmVsRm9yQnJhbmNoKCk7CisKKyAgICBhdXRvIGFk
ZFRhcmdldCA9IFsmXShDb250cm9sVHlwZSYgdGFyZ2V0KSB7CisgICAgICAgIFJlZlB0cjxMYWJl
bD4gdGFyZ2V0TGFiZWwgPSB0YXJnZXQudGFyZ2V0TGFiZWxGb3JCcmFuY2goKTsKKworICAgICAg
ICBnZXREcm9wS2VlcENvdW50KHRhcmdldCwganVtcFRhYmxlW2luZGV4XS5zdGFydE9mZnNldCwg
anVtcFRhYmxlW2luZGV4XS5kcm9wQ291bnQsIGp1bXBUYWJsZVtpbmRleF0ua2VlcENvdW50KTsK
KwogICAgICAgICBpZiAodGFyZ2V0TGFiZWwtPmlzRm9yd2FyZCgpKSB7CiAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IG1fc3dpdGNoZXMuYWRkKHRhcmdldExhYmVsLmdldCgpLCBWZWN0b3I8U3dp
dGNoRW50cnk+KCkpOwotICAgICAgICAgICAgQVNTRVJUKCFqdW1wVGFibGVbaW5kZXhdKTsKLSAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHsgb2Zmc2V0LCAmanVtcFRh
YmxlW2luZGV4KytdIH0pOworICAgICAgICAgICAgQVNTRVJUKCFqdW1wVGFibGVbaW5kZXhdLnRh
cmdldCk7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChTd2l0Y2hF
bnRyeSB7IG9mZnNldCwgJmp1bXBUYWJsZVtpbmRleCsrXS50YXJnZXQgfSk7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpbnQganVtcFRhcmdldCA9IHRhcmdldExhYmVsLT5iaW5kKHRo
aXMpLnRhcmdldCgpOworICAgICAgICAgICAgaW50IGp1bXBUYXJnZXQgPSB0YXJnZXRMYWJlbC0+
bG9jYXRpb24oKSAtIG9mZnNldDsKICAgICAgICAgICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKLSAg
ICAgICAgICAgIGp1bXBUYWJsZVtpbmRleCsrXSA9IGp1bXBUYXJnZXQ7CisgICAgICAgICAgICBq
dW1wVGFibGVbaW5kZXgrK10udGFyZ2V0ID0ganVtcFRhcmdldDsKICAgICAgICAgfQotICAgIH0K
KyAgICB9OwogCisgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0YXJnZXRzKQorICAgICAg
ICBhZGRUYXJnZXQoKnRhcmdldCk7CisgICAgYWRkVGFyZ2V0KGRlZmF1bHRUYXJnZXQpOwogCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJv
bEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlh
bFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRy
eSwgU3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIENvbnRy
b2xUeXBlJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7Ci0KLSAgICBpZiAoIVdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KGRhdGEpKQotICAgICAgICB1bmlmeVZhbHVlc1dpdGhC
bG9jayhkYXRhLm1fcmVzdWx0cywgZXhwcmVzc2lvblN0YWNrKTsKLQotICAgIHJldHVybiBhZGRF
bmRUb1VucmVhY2hhYmxlKGVudHJ5LCBleHByZXNzaW9uU3RhY2spOworICAgIC8vIEZJWE1FOiBX
ZSBvbmx5IG5lZWQgdG8gbWF0ZXJpYWxpemUgY29uc3RhbnRzIGhlcmUgaWYgdGhlcmUgZXhpc3Rz
IGEganVtcCB0byB0aGlzIGxhYmVsCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMzY1NworICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKGV4
cHJlc3Npb25TdGFjayk7CisgICAgcmV0dXJuIGFkZEVuZFRvVW5yZWFjaGFibGUoZW50cnksIGV4
cHJlc3Npb25TdGFjaywgZmFsc2UpOwogfQogCiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVu
ZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlc3Np
b25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9V
bnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0
YWNrLCBib29sIHVucmVhY2hhYmxlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisjaWYgQVNTRVJUX0RJ
U0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Npb25TdGFjayk7CisjZW5kaWYKKwogICAg
IENvbnRyb2xUeXBlJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CiAKLSAgICBlbWl0TGFiZWwo
KmRhdGEubV9jb250aW51YXRpb24pOworICAgIFJFTEVBU0VfQVNTRVJUKHVucmVhY2hhYmxlIHx8
IG1fc3RhY2tTaXplID09IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1
cm5Db3VudCgpKTsKKworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgp
OyArK2kpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkbyBhIGNvbnNpc3RlbmN5IGNo
ZWNrIGhlcmUgYmVjYXVzZSB3ZSBqdXN0IHJlc2V0IHRoZSBzdGFjayBzaXplCisgICAgICAgIC8v
IGFyZSBwdXNoaW5nIG5ldyB2YWx1ZXMsIHdoaWxlIHdlIGFscmVhZHkgaGF2ZSB0aGUgc2FtZSB2
YWx1ZXMgaW4gdGhlIHN0YWNrLgorICAgICAgICAvLyBUaGUgb25seSByZWFzb24gd2UgZG8gdGhp
bmdzIHRoaXMgd2F5IGlzIHNvIHRoYXQgaXQgYWxzbyB3b3JrcyBmb3IgdW5yZWFjaGFibGUgYmxv
Y2tzLAorICAgICAgICAvLyBzaW5jZSB0aGV5IG1pZ2h0IG5vdCBoYXZlIHRoZSByaWdodCBudW1i
ZXIgb2YgdmFsdWVzIGluIHRoZSBleHByZXNzaW9uIHN0YWNrLgorICAgICAgICAvLyBJbnN0ZWFk
LCB3ZSBkbyBhIHN0cmljdGVyIGNvbnNpc3RlbmN5IGNoZWNrIGJlbG93LgorICAgICAgICBhdXRv
IHRtcCA9IHB1c2goTm9Db25zaXN0ZW5jeUNoZWNrKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgICAgIEFTU0VSVCh1bnJlYWNoYWJsZSB8fCB0bXAgPT0gZXhwcmVzc2lvblN0YWNrW2ldKTsK
KyNlbmRpZgorICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQodG1w
KTsKKyAgICB9CiAKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+
KGRhdGEpKQotICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmRWZWN0
b3IoZGF0YS5tX3Jlc3VsdHMpOwotICAgIGVsc2UgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBpZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpCi0gICAgICAgICAgICAgICAgZW50
cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4cHJlc3Npb25TdGFja1tpXSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9u
U3RhY2suYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAgfQorICAgIGlmIChtX2xhc3RP
cGNvZGVJRCA9PSB3YXNtX2ptcCAmJiBkYXRhLm1fY29udGludWF0aW9uLT51bnJlc29sdmVkSnVt
cHMoKS5zaXplKCkgPT0gMSAmJiBkYXRhLm1fY29udGludWF0aW9uLT51bnJlc29sdmVkSnVtcHMo
KVswXSA9PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpKSkgewor
ICAgICAgICBtX2xhc3RPcGNvZGVJRCA9IHdhc21fdW5yZWFjaGFibGU7CisgICAgICAgIG1fd3Jp
dGVyLnJld2luZChtX2xhc3RJbnN0cnVjdGlvbik7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRM
YWJlbCgqZGF0YS5tX2NvbnRpbnVhdGlvbik7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IExMSW50R2VuZXJhdG9yOjplbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIGNv
bnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09IHNpZ25hdHVyZS0+cmV0dXJuQ291
bnQoKSk7CisKKyAgICBpZiAoIXNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSkgeworICAgICAgICBX
YXNtUmV0Vm9pZDo6ZW1pdCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAg
ICAvLyBUb3BMZXZlbCBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVl
ZCB0byBtYWtlIHN1cmUgd2UgZW1pdCBhIHJldHVybiBoZXJlLgotICAgIGlmIChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPENvbnRyb2xUb3BMZXZlbD4oZGF0YSkpCi0gICAgICAgIHJldHVybiBhZGRS
ZXR1cm4oZGF0YSwgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOworICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjYWxsSW5mb3JtYXRpb25Gb3JD
YWxsZWUoKnNpZ25hdHVyZSksIGV4cHJlc3Npb25TdGFjayk7CisgICAgV2FzbVJldDo6ZW1pdCh0
aGlzKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC03MDMsMTMgKzk4OCwxMyBAQCBhdXRvIExM
SW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNv
bnN0IFN0YWNrJiBleHByZQogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7
Ci0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvcihzaWdu
YXR1cmUpOworICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25G
b3JDYWxsZXIoc2lnbmF0dXJlKTsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhpbmZvLmFyZ3Vt
ZW50cywgYXJncyk7Ci0gICAgcmVzdWx0cyA9IFdURk1vdmUoaW5mby5yZXN1bHRzKTsKICAgICBp
ZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICBXYXNtQ2FsbDo6ZW1pdCh0aGlzLCBm
dW5jdGlvbkluZGV4LCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVu
dHMpOwogICAgIGVsc2UKICAgICAgICAgV2FzbUNhbGxOb1Rsczo6ZW1pdCh0aGlzLCBmdW5jdGlv
bkluZGV4LCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVudHMpOwor
ICAgIGluZm8uY29tbWl0UmVzdWx0cyhyZXN1bHRzKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBA
IC03MjIsMjAgKzEwMDcsMjAgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKICAgICBBU1NFUlQo
bV9pbmZvLnRhYmxlQ291bnQoKSA+IHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChtX2luZm8udGFi
bGVzW3RhYmxlSW5kZXhdLnR5cGUoKSA9PSBUYWJsZUVsZW1lbnRUeXBlOjpGdW5jcmVmKTsKIAot
ICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3Ioc2lnbmF0
dXJlKTsKKyAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2FsbEluZm9ybWF0aW9uRm9y
Q2FsbGVyKHNpZ25hdHVyZSk7CiAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soaW5mby5hcmd1bWVu
dHMsIGFyZ3MpOwotICAgIHJlc3VsdHMgPSBXVEZNb3ZlKGluZm8ucmVzdWx0cyk7CiAgICAgaWYg
KENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgV2FzbUNhbGxJbmRpcmVjdDo6ZW1pdCh0
aGlzLCBjYWxsZWVJbmRleCwgbV9jb2RlQmxvY2stPmFkZFNpZ25hdHVyZShzaWduYXR1cmUpLCBp
bmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVudHMsIHRhYmxlSW5kZXgp
OwogICAgIGVsc2UKICAgICAgICAgV2FzbUNhbGxJbmRpcmVjdE5vVGxzOjplbWl0KHRoaXMsIGNh
bGxlZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKHNpZ25hdHVyZSksIGluZm8uc3Rh
Y2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50cywgdGFibGVJbmRleCk7CisgICAg
aW5mby5jb21taXRSZXN1bHRzKHJlc3VsdHMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gdmFs
dWU7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21SZWZJc051bGw6OmVtaXQodGhpcywg
cmVzdWx0LCB2YWx1ZSk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtNzQzLDcgKzEwMjgsNyBAQCBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRSZWZJc051bGwoRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJlZkZ1bmMo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKLSAgICByZXN1bHQgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAg
ICAgV2FzbVJlZkZ1bmM6OmVtaXQodGhpcywgcmVzdWx0LCBpbmRleCk7CiAKICAgICByZXR1cm4g
eyB9OwpAQCAtNzUxLDcgKzEwMzYsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRSZWZGdW5j
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aQogCiBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNz
aW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAog
ewotICAgIHJlc3VsdCA9IGluZGV4OworICAgIHJlc3VsdCA9IHB1c2goKTsKICAgICBXYXNtVGFi
bGVHZXQ6OmVtaXQodGhpcywgcmVzdWx0LCBpbmRleCwgdGFibGVJbmRleCk7CiAKICAgICByZXR1
cm4geyB9OwpAQCAtNzY2LDcgKzEwNTEsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRUYWJs
ZVNldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcgogCiBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRUYWJsZVNpemUodW5zaWduZWQgdGFibGVJbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG5l
d1RlbXBvcmFyeSgpOworICAgIHJlc3VsdCA9IHB1c2goKTsKICAgICBXYXNtVGFibGVTaXplOjpl
bWl0KHRoaXMsIHJlc3VsdCwgdGFibGVJbmRleCk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtNzc0
LDcgKzEwNTksNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRUYWJsZVNpemUodW5zaWduZWQg
dGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLQogCiBhdXRvIExMSW50R2VuZXJh
dG9yOjphZGRUYWJsZUdyb3codW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgZmls
bCwgRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBmaWxsOworICAgIHJlc3VsdCA9IHB1c2goKTsKICAg
ICBXYXNtVGFibGVHcm93OjplbWl0KHRoaXMsIHJlc3VsdCwgZmlsbCwgZGVsdGEsIHRhYmxlSW5k
ZXgpOwogCiAgICAgcmV0dXJuIHsgfTsKQEAgLTc5Niw3ICsxMDgxLDcgQEAgYXV0byBMTEludEdl
bmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG5ld1RlbXBvcmFyeSgpOworICAgIHJlc3VsdCA9
IHB1c2goKTsKICAgICBXYXNtQ3VycmVudE1lbW9yeTo6ZW1pdCh0aGlzLCByZXN1bHQpOwogCiAg
ICAgcmV0dXJuIHsgfTsKQEAgLTgwNCw3ICsxMDg5LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6
YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
CiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVs
dGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1
bHQgPSBkZWx0YTsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAgICAgV2FzbUdyb3dNZW1vcnk6OmVt
aXQodGhpcywgcmVzdWx0LCBkZWx0YSk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtODEyLDcgKzEw
OTcsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBl
IGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJv
LCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gY29uZGl0aW9uOworICAgIHJlc3VsdCA9IHB1c2goKTsK
ICAgICBXYXNtU2VsZWN0OjplbWl0KHRoaXMsIHJlc3VsdCwgY29uZGl0aW9uLCBub25aZXJvLCB6
ZXJvKTsKIAogICAgIHJldHVybiB7IH07CkBAIC04MjAsNyArMTEwNSw3IEBAIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25U
eXBlIG5vblplcm8sCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwg
RXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qg
b2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gcG9pbnRlcjsKKyAgICBy
ZXN1bHQgPSBwdXNoKCk7CiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDhTOgogICAgICAgICBXYXNtSTMyTG9hZDhTOjplbWl0KHRoaXMsIHJlc3VsdCwgcG9p
bnRlciwgb2Zmc2V0KTsKQEAgLTkzMiwxNiArMTIxNyw4IEBAIHZvaWQgR2VuZXJpY0xhYmVsPFdh
c206OkdlbmVyYXRvclRyYWl0cz46OnNldExvY2F0aW9uKEJ5dGVjb2RlR2VuZXJhdG9yQmFzZTxX
YXNtCiAgICAgICAgIENBU0UoV2FzbUptcCkKICAgICAgICAgQ0FTRShXYXNtSnRydWUpCiAgICAg
ICAgIENBU0UoV2FzbUpmYWxzZSkKLSAgICAgICAgY2FzZSBXYXNtU3dpdGNoOjpvcGNvZGVJRDog
ewotICAgICAgICAgICAgQVNTRVJUKCghaW5zdHJ1Y3Rpb24tPmFzPFdhc21Td2l0Y2gsIFdhc21P
cGNvZGVUcmFpdHM+KCkubV9kZWZhdWx0VGFyZ2V0KSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlv
bi0+Y2FzdDxXYXNtU3dpdGNoLCBXYXNtT3Bjb2RlVHJhaXRzPigpLT5zZXREZWZhdWx0VGFyZ2V0
KEJvdW5kTGFiZWwodGFyZ2V0KSwgWyZdKCkgewotICAgICAgICAgICAgICAgIGdlbmVyYXRvci5t
X2NvZGVCbG9jay0+YWRkT3V0T2ZMaW5lSnVtcFRhcmdldChpbnN0cnVjdGlvbi5vZmZzZXQoKSwg
dGFyZ2V0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQm91bmRMYWJlbCgpOwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAjdW5kZWYgQ0FTRQogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAKaW5kZXggNzcyYjUxOTY2
ZTQ1N2QyOTY4YmM2NWIzMTA5MzhkZGZiYzJiMTBmNi4uYmNlZWIyODZiYTNjYjMxOTdlYmZiODBi
NGU1ZWY1MTZmYWI0ZDU5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxM
SW50UGxhbi5jcHAKQEAgLTgwLDEwICs4MCwxMCBAQCB2b2lkIExMSW50UGxhbjo6Y29tcGlsZUZ1
bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlv
bnNbZnVuY3Rpb25JbmRleF0gPSBXVEZNb3ZlKCpwYXJzZUFuZENvbXBpbGVSZXN1bHQpOwogCiAg
ICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMuY29udGFpbnMoZnVuY3Rpb25JbmRleCkg
fHwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+cmVmZXJlbmNlZEZ1bmN0aW9ucygpLmNvbnRhaW5zKGZ1
bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
ICAgICAgICAgRW1iZWRlclRvV2FzbUZ1bmN0aW9uIGVudHJ5OwogICAgICAgICBlbnRyeS5qaXQg
PSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICAgICAgZW50cnkuZnVuY3Rpb24gPSBt
X2NyZWF0ZUVtYmVkZGVyV3JhcHBlcigqZW50cnkuaml0LCBzaWduYXR1cmUsICZtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpOworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFs
RnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVudHJ5KSk7CiAgICAgICAgIEFT
U0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKaW5kZXggYzVhMDgxNTQ1ZDQ1NDM5
NWMwZDBiYmQ0YTMwMDM2OTJhMDE3YmNjNy4uNWEzZjQzYzNiZDBhZDkyZTNhZWMxYWQ2NTM3Njc5
MzAwNjViOGVjOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZh
bGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUu
Y3BwCkBAIC0xNjEsNiArMTYxLDcgQEAgcHVibGljOgogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKSB7IHJldHVybiB7IH07IH0K
KyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJl
LCBjb25zdCBTdGFjayYpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQ2FsbHMKICAgICBSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExp
c3QmKTsKQEAgLTE3Niw2ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiwgY29uc3QgU3RhY2sqKTsKICAgICB2b2lkIHNldFBhcnNlcihG
dW5jdGlvblBhcnNlcjxWYWxpZGF0ZT4qKSB7IH0KICAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmdM
b2NhbHMoKSB7IH0KKyAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNrKCkgeyB9CiAKIHByaXZh
dGU6CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeShjb25zdCBTdGFjayYsIGNv
bnN0IENvbnRyb2xEYXRhJik7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDEzNmY1NTU2NmY4MjkwOGM4OGQ5ZDAwNjNkNjBiNDJkNzViMWUx
ZjcuLjY4MmJhYjRjZGMzZDIyZjUzZWZkMmU5YTFjYzdjNDA2YTNmOWUxMzYgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTktMTEtMjEgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgW1dlYkFzc2VtYmx5XSBJbXByb3ZlIFdhc206OkxMSW50R2VuZXJhdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQwOTIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vc3RyZXNzL3Nl
dC1sb2NhbC1lbmNsb3NlZC1zdGFjay5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQuZXEuaW5z
dGFuY2UuZXhwb3J0cy5mb28pOgorICAgICAgICAoYXNzZXJ0LmVxKToKKwogMjAxOS0xMS0xMSAg
Um9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgVVRDIG9m
ZnNldCBmb3IgU2Ftb2EgaXMgbWlzY2FsY3VsYXRlZCB3aGVuICFIQVZFKFRJTUVHTSkKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3Mvc2V0LWxvY2FsLWVuY2xvc2VkLXN0YWNrLmpzIGIv
SlNUZXN0cy93YXNtL3N0cmVzcy9zZXQtbG9jYWwtZW5jbG9zZWQtc3RhY2suanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYmU3ZjQ0MjhhNDBkNDIwNDUwMjNlYWVkMWU4MjZhZmM4ZjFiMmI0NAotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mvc2V0LWxvY2FsLWVuY2xvc2VkLXN0YWNrLmpzCkBA
IC0wLDAgKzEsNDIgQEAKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCitp
bXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gJy4uL3dhYnQtd3JhcHBlci5qcyc7CisKK3sKKyAg
ICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbnRpYXRlKGAKKyAgICAoZnVuYyAoZXhwb3J0ICJmb28i
KSAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAgKGxvY2FsLmdldCAwKQorICAgICAg
ICAgICAgKGJsb2NrCisgICAgICAgICAgICAgICAgKGxvY2FsLnNldCAwIChpMzIuY29uc3QgMHhi
YmFkYmVlZikpKSkKKyAgICBgKTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZv
bygzKSwgMyk7Cit9CisKK3sKKyAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbnRpYXRlKGAKKyAg
ICAoZnVuYyAkY29uc3QgKHJlc3VsdCBpMzIpCisgICAgICAgICAgKGkzMi5jb25zdCA0MikKKyAg
ICAgICAgICApCisKKyAgICAoZnVuYyAoZXhwb3J0ICJmb28iKSAocGFyYW0gaTMyKSAocmVzdWx0
IGkzMiBpMzIpCisgICAgICAgICAgICAoY2FsbCAkY29uc3QpCisgICAgICAgICAgICAobG9jYWwu
Z2V0IDApCisgICAgICAgICAgICAoYmxvY2sgKHBhcmFtIGkzMikgKHJlc3VsdCBpMzIpCisgICAg
ICAgICAgICAgICAgICAgICAgICApKQorICAgIGApOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNl
LmV4cG9ydHMuZm9vKDMpLCBbNDIsIDNdKTsKK30KKworeworICAgIGNvbnN0IGluc3RhbmNlID0g
aW5zdGFudGlhdGUoYAorICAgIChmdW5jIChleHBvcnQgImZvbyIpIChwYXJhbSBpMzIpIChyZXN1
bHQgaTMyKQorICAgICAgICAobG9jYWwuZ2V0IDApCisgICAgICAgIChpZiAobG9jYWwuZ2V0IDAp
CisgICAgICAgICAgICAgICh0aGVuIChsb2NhbC5zZXQgMCAoaTMyLmNvbnN0IDQyKSkpCisgICAg
ICAgICAgKGVsc2UgKGxvY2FsLnNldCAwIChpMzIuY29uc3QgMTMpKSkpKQorICAgIGApOworCisg
ICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDEpLCAxKTsKKyAgICBhc3NlcnQuZXEo
aW5zdGFuY2UuZXhwb3J0cy5mb28oMCksIDApOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384190</attachid>
            <date>2019-11-22 13:28:25 -0800</date>
            <delta_ts>2019-11-22 14:13:35 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-204092-20191122132823.patch</filename>
            <type>text/plain</type>
            <size>71251</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MWVjZjQ0MmU3YjA0ZGU1ZWQ3MWExMzBlNDk2NDAzZDhhZWJhYzkyLi5iYzY1ODFhYzhmYThiOWRi
NWY0MmY4MDEyZjkwOWI4N2E1MWQ2ZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDYgQEAKKzIwMTktMTEtMjEgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBJbXByb3ZlIFdhc206OkxMSW50R2VuZXJhdG9y
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQwOTIK
KworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBUaGlzIGltcHJv
dmVzIHRoZSBXYXNtOjpMTEludEdlbmVyYXRvciBieToKKyAgICAgICAgLSBDaGFuZ2luZyBMTElu
dEdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgZnJvbSBSZWZQdHI8UmVnaXN0ZXJJRD4gdG8gVmly
dHVhbFJlZ2lzdGVyOiBJbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYW5kIHJldGFpbmluZworICAgICAg
ICAgIFJlZ2lzdGVySURzIHdlIHVzZSBWaXJ0dWFsUmVnaXN0ZXJzIGRpcmVjdGx5IGFuZCBlbnN1
cmUgdGhhdCB0aGV5IG1hdGNoIHRoZSBXZWJBc3NlbWJseSBzdGFjaywgaS5lLiB0aGUgcGFyc2Vy
J3MgZXhwcmVzc2lvbgorICAgICAgICAgIHN0YWNrIHNob3VsZCBtYXRjaCB0aGUgdmlydHVhbCBy
ZWdpc3RlcnMuCisgICAgICAgIC0gUmVtb3ZpbmcgcmVkdW5kYW50IG1vdmVzIHdoZW4gbWF0ZXJp
YWxpemluZyBjb25zdGFudHMgYW5kIHBlcmZvcm1pbmcgbG9jYWwuZ2V0OiBpbnN0ZWFkIG9mIGNy
ZWF0aW5nIGEgbmV3IHRlbXBvcmFyeQorICAgICAgICAgIGZvciBlYWNoIGNvbnN0YW50IGFuZCBs
b2NhbC5nZXQsIHdlIHJldHVybiB0aGUgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGUgY29uc3RhbnQv
bG9jYWwgc2xvdCBkaXJlY3RseS4gSW4gb3JkZXIgZm9yIHRoaXMKKyAgICAgICAgICB0byB3b3Jr
LCB3ZSBzdGlsbCBhbGxvY2F0ZSB0aGUgc3RhY2sgc2xvdCBmb3IgdGhlIHRlbXBvcmFyaWVzLCBz
aW5jZSB3ZSBoYXZlIHRvIG1hdGVyaWFsaXplIHRoZW0gYmVmb3JlIGxvb3BzIGFuZCBicmFuY2hl
cy4KKyAgICAgICAgLSBBZGRpbmcgYSBjb25zdHJ1Y3RvciB0byBDb250cm9sVHlwZSB0aGF0IHRh
a2VzIHRoZSByZXN1bHRzIEV4cHJlc3Npb25MaXN0IGFzIGFuIHJ2YWx1ZSBpbnN0ZWFkIG9mIGNv
cHlpbmcgaXQKKyAgICAgICAgLSBPcHRpbWl6aW5nIGNhbGxJbmZvcm1hdGlvbkZvciwgd2hpY2gg
aXMgbm93IHNwbGl0IGludG8gdHdvIGZ1bmN0aW9ucy4gVGhlIGNhbGxlZSBkb2VzIG5vdCBjYXJl
IGFib3V0IGFyZ3VtZW50cywgYW5kIHNob3VsZAorICAgICAgICAgIG5ldmVyIGFsbG9jYXRlIHRl
bXBvcmFyaWVzLCBhbmQgdGhlIGNhbGxlciBjYXNlIHdhcyBvcHRpbWl6ZWQgYnkgYXZvaWRpbmcg
dW5uZWNlc3NhcnkgY2FsbHMgdG8gbmV3VGVtcG9yYXJ5CisgICAgICAgIC0gRGVsYXkgaG9sZGlu
ZyB0aGUgbG9jayBpbiBMTGludFBsYW46OmNvbXBpbGVGdW5jdGlvbiwgc2luY2Ugd2UgZG8gbm90
IG5lZWQgdG8gaG9sZCBpdCB3aGlsZSBjb21waWxpbmcgdGhlIGpzLXRvLXdhc20gZW50cnlwb2lu
dAorCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVj
b21waWxlci9MYWJlbC5oOgorICAgICAgICAoSlNDOjpHZW5lcmljTGFiZWw6OmxvY2F0aW9uIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0xhYmVsOjp1bnJlc29sdmVkSnVtcHMgY29uc3Qp
OgorICAgICAgICAqIGdlbmVyYXRvci9XYXNtLnJiOgorICAgICAgICAqIGxsaW50L1dlYkFzc2Vt
Ymx5LmFzbToKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbmRUb3BMZXZlbCk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisgICAgICAgICog
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmVuZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
ZGlkUG9wVmFsdWVGcm9tU3RhY2spOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmFkZEp1bXBU
YWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAg
KiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlv
blBhcnNlcjo6ZXhwcmVzc2lvblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OnBhcnNlQm9keSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20vV2FzbUxM
SW50R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNv
bnRyb2xUeXBlOjpsb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNv
bnRyb2xUeXBlOjp0b3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpDb250cm9sVHlwZTo6YmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6Q29udHJvbFR5cGU6OmlmXyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpDb250cm9sVHlwZTo6dGFyZ2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpM
TEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnN0YWNrU2l6ZSBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Q29udHJvbFR5cGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2spOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6cHVzaCk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjpkaWRQb3BWYWx1ZUZyb21TdGFjayk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAgICAoSlND
OjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpkdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OnZpcnR1YWxSZWdpc3RlckZvcldhc21Mb2NhbCk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjpqc051bGxDb25zdGFudCk6CisgICAgICAgIChKU0M6Oldh
c206OkxMSW50R2VuZXJhdG9yOjp6ZXJvQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpM
TEludEdlbmVyYXRvcjo6Z2V0RHJvcEtlZXBDb3VudCk6CisgICAgICAgIChKU0M6Oldhc206OkxM
SW50R2VuZXJhdG9yOjpkcm9wS2VlcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjp3YWxrRXhwcmVzc2lvblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OmNoZWNrQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVy
YXRvcjo6bWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6bWF0ZXJpYWxpemVMb2NhbHMpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6Q29uc3RhbnRNYXBIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVk
VmFsdWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29uc3RhbnRNYXBI
YXNoVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxs
SW5mb3JtYXRpb25Gb3JDYWxsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpkaWRG
aW5pc2hQYXJzaW5nTG9jYWxzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6
OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmdldExv
Y2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldExvY2FsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmdldEdsb2JhbCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRMb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OmFkZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6
OmFkZElmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEVsc2UpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkUmV0dXJuKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpM
TEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVy
YXRvcjo6ZW5kVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYWxsSW5k
aXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkUmVmSXNOdWxs
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFJlZkZ1bmMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVGFibGVHZXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVGFibGVTaXplKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTElu
dEdlbmVyYXRvcjo6YWRkU2VsZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OmxvYWQpOgorICAgICAgICAoSlNDOjpHZW5lcmljTGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJh
aXRzPjo6c2V0TG9jYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAg
KiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpl
bmRUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpkaWRQb3BWYWx1ZUZy
b21TdGFjayk6CisKIDIwMTktMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggaW5jb3JyZWN0IGFzc2VydGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggYzJlYzlj
ZjU3MmFiNmUxNmE4NDM3MmJmZjAwMzYwYjkzZmUxMzJjYy4uZjgyYmVkOTg5MjBlNzk1NWI1MjI4
Y2Q3Yjg0MzRhNmUwNDA5MjI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0xMjk3LDcgKzEyOTcsNiBAQCBvcCA6c3dpdGNoLAogICAg
IGFyZ3M6IHsKICAgICAgICAgc2NydXRpbmVlOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIHRh
YmxlSW5kZXg6IHVuc2lnbmVkLAotICAgICAgICBkZWZhdWx0VGFyZ2V0OiBXYXNtQm91bmRMYWJl
bCwKICAgICB9CiAKICMgV2FzbSBzcGVjaWZpYyBieXRlY29kZXMKQEAgLTEzMDUsNiArMTMwNCwx
MyBAQCBvcCA6c3dpdGNoLAogb3AgOnVucmVhY2hhYmxlCiBvcCA6cmV0X3ZvaWQKIAorb3AgOmRy
b3Bfa2VlcCwKKyAgICBhcmdzOiB7CisgICAgICAgIHN0YXJ0T2Zmc2V0OiB1bnNpZ25lZCwKKyAg
ICAgICAgZHJvcENvdW50OiB1bnNpZ25lZCwKKyAgICAgICAga2VlcENvdW50OiB1bnNpZ25lZCwK
KyAgICB9CisKIG9wIDpyZWZfaXNfbnVsbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmly
dHVhbFJlZ2lzdGVyLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9MYWJlbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9MYWJlbC5o
CmluZGV4IDkwMzEzNjI2ZjhmYjNjOGRjN2QwMjk1Y2ZkMzI2ODBhZGEwMjBmNmQuLjhhOTRhNjAw
NDNkZTk2YjRlY2I0MmNjNWExMTdkZTgyNmZlODkxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTGFiZWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgKQEAgLTEyOCw2ICsxMjgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2VuZXJpY0xhYmVsKTsKICAgICAgICAg
dXNpbmcgQnl0ZWNvZGVHZW5lcmF0b3IgPSBCeXRlY29kZUdlbmVyYXRvckJhc2U8VHJhaXRzPjsK
ICAgICAgICAgdXNpbmcgQm91bmRMYWJlbCA9IEdlbmVyaWNCb3VuZExhYmVsPFRyYWl0cz47Cisg
ICAgICAgIHVzaW5nIEp1bXBWZWN0b3IgPSBWZWN0b3I8aW50LCA4PjsKIAogICAgIHB1YmxpYzoK
ICAgICAgICAgR2VuZXJpY0xhYmVsKCkgPSBkZWZhdWx0OwpAQCAtMTcwLDExICsxNzEsMTggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBib29sIGlzQm91bmQoKSBjb25zdCB7
IHJldHVybiBtX2JvdW5kOyB9CiAKKyAgICAgICAgdW5zaWduZWQgbG9jYXRpb24oKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWlzRm9yd2FyZCgpKTsKKyAgICAgICAgICAg
IG1fYm91bmQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG1fbG9jYXRpb247CisgICAgICAg
IH07CisKKyAgICAgICAgY29uc3QgSnVtcFZlY3RvciYgdW5yZXNvbHZlZEp1bXBzKCkgY29uc3Qg
eyByZXR1cm4gIG1fdW5yZXNvbHZlZEp1bXBzOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBm
cmllbmQgQm91bmRMYWJlbDsKIAotICAgICAgICB0eXBlZGVmIFZlY3RvcjxpbnQsIDg+IEp1bXBW
ZWN0b3I7Ci0KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnZhbGlkTG9jYXRp
b24gPSBVSU5UX01BWDsKIAogICAgICAgICBpbnQgbV9yZWZDb3VudCB7IDAgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvV2FzbS5yYiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvV2FzbS5yYgppbmRleCBjMDBjNjI5ZGQwMzc2MzczMzkyODBj
MTUxYTg3OWMyYWIzYmE4ZGY0Li5jMTc4NTg2ZDUyMWZhZDdkYmI1MmI2NzdiYTUxZmFkNTIxNjlm
OWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1dhc20ucmIK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9XYXNtLnJiCkBAIC01OCw3ICs1
OCw3IEBAIG1vZHVsZSBXYXNtCiB0ZW1wbGF0ZTw+CiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRP
cDwje29wX3R5cGUob3ApfT4oRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQg
PSBsaHM7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgICN7b3AuY2FwaXRhbGl6ZWRfbmFtZX06
OmVtaXQodGhpcywgcmVzdWx0LCBsaHMsIHJocyk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTcw
LDcgKzcwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkT3A8I3tvcF90eXBlKG9wKX0+KEV4
cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmgKIHRlbXBsYXRlPD4KIGF1dG8gTExJ
bnRHZW5lcmF0b3I6OmFkZE9wPCN7b3BfdHlwZShvcCl9PihFeHByZXNzaW9uVHlwZSBvcGVyYW5k
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0
ID0gb3BlcmFuZDsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAgICAgI3tvcC5jYXBpdGFsaXplZF9u
YW1lfTo6ZW1pdCh0aGlzLCByZXN1bHQsIG9wZXJhbmQpOwogICAgIHJldHVybiB7IH07CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbQppbmRleCAwYmI5ZmZk
MzUyYWI0NDI4ZjVjNmM2Nzk1OGJjY2ZkNmVhM2Y0ZmE2Li5hNWM3Yzg4MDI4OTg3Zjk4MWQyZGJl
MzU3MmJlZTNiMTQ0MDFhMTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvV2ViQXNzZW1ibHkuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJB
c3NlbWJseS5hc20KQEAgLTI5Nyw3ICsyOTcsNyBAQCBtYWNybyB3YXNtUHJvbG9ndWUoY29kZUJs
b2NrR2V0dGVyLCBjb2RlQmxvY2tTZXR0ZXIsIGxvYWRXYXNtSW5zdGFuY2UpCiAgICAgYnRpeiB3
czEsIC56ZXJvSW5pdGlhbGl6ZUxvY2Fsc0RvbmUKICAgICBuZWdpIHdzMQogICAgIHN4aTJxIHdz
MSwgd3MxCi0gICAgbGVhcCAoTnVtYmVyT2ZXYXNtQXJndW1lbnRzICsgQ2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKSAqIC04W2Nmcl0sIHdzMAorICAgIGxlYXAgKE51bWJlck9mV2Fz
bUFyZ3VtZW50cyArIENhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyArIDEpICogLThb
Y2ZyXSwgd3MwCiAuemVyb0luaXRpYWxpemVMb2NhbHNMb29wOgogICAgIGFkZHEgMSwgd3MxCiAg
ICAgc3RvcmVxIDAsIFt3czAsIHdzMSwgOF0KQEAgLTU4OCwxNCArNTg4LDIzIEBAIHdhc21PcChz
d2l0Y2gsIFdhc21Td2l0Y2gsIG1hY3JvKGN0eCkKICAgICBhZGRwIHQxLCB0MgogCiAgICAgbG9h
ZGkgVmVjdG9yU2l6ZU9mZnNldFt0Ml0sIHQzCi0gICAgYmlhZXEgdDAsIHQzLCAuZGVmYXVsdAor
ICAgIGJpYiB0MCwgdDMsIC5pbkJvdW5kcworCisub3V0T2ZCb3VuZHM6CisgICAgc3ViaSB0Mywg
MSwgdDAKKworLmluQm91bmRzOgogICAgIGxvYWRwIFZlY3RvckJ1ZmZlck9mZnNldFt0Ml0sIHQy
Ci0gICAgbG9hZGkgW3QyLCB0MCwgNF0sIHQzCisgICAgbXVsaSBzaXplb2YgV2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5LCB0MAorCisgICAgbG9hZGkgV2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2s6Okp1bXBUYWJsZUVudHJ5OjpzdGFydE9mZnNldFt0MiwgdDBdLCB0MQorICAg
IGxvYWRpIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFibGVFbnRyeTo6ZHJvcENvdW50
W3QyLCB0MF0sIHQzCisgICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJs
ZUVudHJ5OjprZWVwQ291bnRbdDIsIHQwXSwgdDUKKyAgICBkcm9wS2VlcCh0MSwgdDMsIHQ1KQor
CisgICAgbG9hZGlzIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFibGVFbnRyeTo6dGFy
Z2V0W3QyLCB0MF0sIHQzCiAgICAgYXNzZXJ0KG1hY3JvKG9rKSBidGlueiB0MywgLm9rIGVuZCkK
ICAgICB3YXNtRGlzcGF0Y2hJbmRpcmVjdCh0MykKLQotLmRlZmF1bHQ6Ci0gICAganVtcChjdHgs
IG1fZGVmYXVsdFRhcmdldCkKIGVuZCkKIAogdW5wcmVmaXhlZFdhc21PcCh3YXNtX2ptcCwgV2Fz
bUptcCwgbWFjcm8oY3R4KQpAQCAtMTk5MywzICsyMDAyLDMwIEBAIHdhc21PcChpNjRfcmVpbnRl
cnByZXRfZjY0LCBXYXNtSTY0UmVpbnRlcnByZXRGNjQsIG1hY3JvKGN0eCkKICAgICBmZDJxIGZ0
MCwgdDAKICAgICByZXR1cm5xKGN0eCwgdDApCiBlbmQpCisKK21hY3JvIGRyb3BLZWVwKHN0YXJ0
T2Zmc2V0LCBkcm9wLCBrZWVwKQorICAgIGxzaGlmdGkgMywgc3RhcnRPZmZzZXQKKyAgICBzdWJw
IGNmciwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0CisgICAgbmVnaSBkcm9wCisgICAgc3hpMnEg
ZHJvcCwgZHJvcAorCisuY29weUxvb3A6CisgICAgYnRpeiBrZWVwLCAuZG9uZQorICAgIGxvYWRx
IFtzdGFydE9mZnNldCwgZHJvcCwgOF0sIHQ2CisgICAgc3RvcmVxIHQ2LCBbc3RhcnRPZmZzZXRd
CisgICAgc3ViaSAxLCBrZWVwCisgICAgc3VicCA4LCBzdGFydE9mZnNldAorICAgIGptcCAuY29w
eUxvb3AKKworLmRvbmU6CitlbmQKKword2FzbU9wKGRyb3Bfa2VlcCwgV2FzbURyb3BLZWVwLCBt
YWNybyhjdHgpCisgICAgd2dldHUoY3R4LCBtX3N0YXJ0T2Zmc2V0LCB0MCkKKyAgICB3Z2V0dShj
dHgsIG1fZHJvcENvdW50LCB0MSkKKyAgICB3Z2V0dShjdHgsIG1fa2VlcENvdW50LCB0MikKKwor
ICAgIGRyb3BLZWVwKHQwLCB0MSwgdDIpCisKKyAgICBkaXNwYXRjaChjdHgpCitlbmQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAppbmRl
eCA5YzcwODYxNzMwZDI3ZWQ1OTc0YTQ0ZjhkNTc1ZmIyNjE2ZDAxODU2Li42M2M2NjhmYWZhNDA3
NjU1MzMwMTVjMDE1YmRjMzI3YjFmZWE4M2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTI4NSw2ICsyODUsOCBAQCBwdWJs
aWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJv
bEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmLCBjb25zdCBT
dGFjayYgZXhwcmVzc2lvblN0YWNrID0geyB9KTsKIAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlLCBjb25zdCBTdGFjayYpIHsg
cmV0dXJuIHsgfTsgfQorCiAgICAgLy8gQ2FsbHMKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUm
LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+
JiByZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
SW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiYgcmVzdWx0cyk7
CkBAIC0yOTksNiArMzAxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8
Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFjayogZXhwcmVzc2lvblN0YWNr
KTsKICAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4qIHBh
cnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKICAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmdM
b2NhbHMoKSB7IH0KKyAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNrKCkgeyB9CiAKICAgICBz
dGF0aWMgVmVjdG9yPFRtcD4gdG9UbXBWZWN0b3IoY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgdmVj
dG9yKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAppbmRleCA4NjVhNzM5M2FkYTlmOWYyMTQ1YjM4Y2E0ZDU0NzZiNmUzNjZkMjEz
Li45MDRkNjk0YzVhZTZkZGI3ZjI3MTBlNzQxNGViOTJmNTU1MjMxZWZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0yMzUsNiAr
MjM1LDggQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVu
ZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVu
dHJ5JiwgY29uc3QgU3RhY2smID0geyB9KTsKIAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlLCBjb25zdCBTdGFjayYpIHsgcmV0
dXJuIHsgfTsgfQorCiAgICAgLy8gQ2FsbHMKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQg
dGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJn
cywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CkBAIC0yNDQsNiArMjQ2LDcgQEAgcHVibGljOgogICAg
IHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25z
dCBTdGFjayogZXhwcmVzc2lvblN0YWNrKTsKICAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBh
cnNlcjxCM0lSR2VuZXJhdG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogICAg
IHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpIHsgfQorICAgIHZvaWQgZGlkUG9wVmFsdWVG
cm9tU3RhY2soKSB7IH0KIAogICAgIFZhbHVlKiBjb25zdGFudChCMzo6VHlwZSwgdWludDY0X3Qg
Yml0cywgT3B0aW9uYWw8T3JpZ2luPiA9IFdURjo6bnVsbG9wdCk7CiAgICAgVmFsdWUqIGZyYW1l
UG9pbnRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvbkNvZGVCbG9jay5jcHAKaW5kZXggZDM1MDVjMzAwODE5ZWFlNGNhNjk0OGY5OGQ4ZmJhN2Nh
MjNmY2RiOS4uMTYyYTM3MjMwNTRmN2QyMzVmZGY1NDBmMzQyOWE4ODA2NWY4MDcxMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2su
Y3BwCkBAIC03NSwxMSArNzUsNyBAQCBjb25zdCBTaWduYXR1cmUmIEZ1bmN0aW9uQ29kZUJsb2Nr
OjpzaWduYXR1cmUodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIGF1dG8gRnVuY3Rpb25Db2RlQmxv
Y2s6OmFkZEp1bXBUYWJsZShzaXplX3QgbnVtYmVyT2ZFbnRyaWVzKSAtPiBKdW1wVGFibGUmCiB7
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIG1fanVtcFRhYmxlcy5hcHBlbmQoSnVtcFRhYmxl
KG51bWJlck9mRW50cmllcywgMCkpOwotI2Vsc2UKICAgICBtX2p1bXBUYWJsZXMuYXBwZW5kKEp1
bXBUYWJsZShudW1iZXJPZkVudHJpZXMpKTsKLSNlbmRpZgogICAgIHJldHVybiBtX2p1bXBUYWJs
ZXMubGFzdCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IGZlZDQ0NzVjYTVkNTc5NzY0OGE5ZjdiMjljNTBhOTU3
NmE0Y2MxMmUuLmY2ODhhN2M5ZTk0MjZkOWUwYmVhM2FmMGNmZmFmMmMyN2RkNWE1NjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5o
CkBAIC0xMDUsNyArMTA1LDE0IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBhZGRTaWduYXR1cmUo
Y29uc3QgU2lnbmF0dXJlJik7CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0OwogCi0gICAgdXNpbmcgSnVtcFRhYmxlID0gVmVjdG9yPEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQ+OworICAgIHN0cnVjdCBKdW1wVGFibGVFbnRyeSB7CisgICAgICAg
IGludCB0YXJnZXQgeyAwIH07CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0OworICAgICAg
ICB1bnNpZ25lZCBkcm9wQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIGtlZXBDb3VudDsKKyAgICB9
OworCisgICAgdXNpbmcgSnVtcFRhYmxlID0gVmVjdG9yPEp1bXBUYWJsZUVudHJ5PjsKICAgICBK
dW1wVGFibGUmIGFkZEp1bXBUYWJsZShzaXplX3QgbnVtYmVyT2ZFbnRyaWVzKTsKICAgICBjb25z
dCBKdW1wVGFibGUmIGp1bXBUYWJsZSh1bnNpZ25lZCB0YWJsZUluZGV4KSBjb25zdDsKICAgICB1
bnNpZ25lZCBudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggZjc3MTZhNzAxZTc3MjBiOGYz
NmFjOTg1MzYwMzgyZmZjMmY4Y2NlYS4uY2NmYTE4NTQzNTQ5OTlmODJhOGFhNDI4ZThkNDhlNWM0
MWY0Nzg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0
aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9u
UGFyc2VyLmgKQEAgLTc3LDYgKzc3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmU7IH0KIAogICAgIFZlY3RvcjxD
b250cm9sRW50cnk+JiBjb250cm9sU3RhY2soKSB7IHJldHVybiBtX2NvbnRyb2xTdGFjazsgfQor
ICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2soKSB7IHJldHVybiBtX2V4cHJlc3Npb25TdGFjazsg
fQogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CkBAIC04OSw2ICs5MCw3IEBAIHByaXZhdGU6CiAjZGVmaW5lIFdBU01fVFJZX1BPUF9FWFBSRVNT
SU9OX1NUQUNLX0lOVE8ocmVzdWx0LCB3aGF0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5p
c0VtcHR5KCksICJjYW4ndCBwb3AgZW1wdHkgc3RhY2sgaW4gIiB3aGF0KTsgXAogICAgICAgICBy
ZXN1bHQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1
ZUZyb21TdGFjaygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCiAgICAgdGVtcGxhdGU8T3BUeXBlPgpAQCAtMTc2
LDYgKzE3OCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQm9keSgpIC0+
IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VFeHByZXNzaW9uKCkpOwogICAgICAgICB9CiAgICAgfQorICAgIFdBU01fRkFJTF9JRl9IRUxQ
RVJfRkFJTFMobV9jb250ZXh0LmVuZFRvcExldmVsKCZtX3NpZ25hdHVyZSwgbV9leHByZXNzaW9u
U3RhY2spKTsKIAogICAgIEFTU0VSVChvcCA9PSBPcFR5cGU6OkVuZCk7CiAgICAgcmV0dXJuIHsg
fTsKQEAgLTQzOCw4ICs0NDEsMTAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBzaXplX3QgZmlyc3RBcmd1
bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gY2FsbGVlU2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKTsKICAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShjYWxsZWVT
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yIGNhbGwncyAiLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50
cyIpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9l
eHByZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJz
dEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQobV9leHByZXNzaW9uU3RhY2suYXQoaSkpOwor
ICAgICAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CisgICAgICAgIH0K
ICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7CiAK
ICAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOwpAQCAtNDY3LDggKzQ3MiwxMCBAQCBhdXRvIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0
CiAgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gYXJnczsKICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4n
dCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBhcmd1bWVudENvdW50LCAiIGNhbGxfaW5k
aXJlY3QgYXJndW1lbnRzIik7CiAgICAgICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50SW5kZXggPSBt
X2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBhcmd1bWVudENvdW50OwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgp
OyArK2kpCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBt
X2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgYXJncy51bmNoZWNr
ZWRBcHBlbmQobV9leHByZXNzaW9uU3RhY2suYXQoaSkpOworICAgICAgICAgICAgbV9jb250ZXh0
LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CisgICAgICAgIH0KICAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7CiAKICAgICAgICAgUmVzdWx0TGlzdCBy
ZXN1bHRzOwpAQCAtNjA4LDYgKzYxNSw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBjYXNlIERyb3A6IHsKICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2Fu
J3QgZHJvcCBvbiBlbXB0eSBzdGFjayIpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay50YWtl
TGFzdCgpOworICAgICAgICBtX2NvbnRleHQuZGlkUG9wVmFsdWVGcm9tU3RhY2soKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCmluZGV4IGJhZWY1MDcwMzdmOTYxNzM0YTlhOGJlYTQy
Nzc2Njk0ZmYzNzViNDMuLjlhNTNiMzM5ZDQ2NDU0ZmY1OWY0Yjg2MGM4MjQyNzEwYWZkMTc4Y2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9y
LmNwcApAQCAtMzIsMTMgKzMyLDEzIEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAj
aW5jbHVkZSAiSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKICNpbmNsdWRlICJMYWJlbC5oIgotI2luY2x1
ZGUgIlJlZ2lzdGVySUQuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKICNp
bmNsdWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2Rl
QmxvY2suaCIKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJXYXNt
R2VuZXJhdG9yVHJhaXRzLmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgorI2luY2x1ZGUgPHd0
Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvU3RkVW5vcmRlcmVkTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KQEAgLTQ3
LDkgKzQ3LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgTExJ
bnRHZW5lcmF0b3IgOiBwdWJsaWMgQnl0ZWNvZGVHZW5lcmF0b3JCYXNlPEdlbmVyYXRvclRyYWl0
cz4gewogcHVibGljOgotICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gUmVmUHRyPFJlZ2lzdGVy
SUQ+OworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVmlydHVhbFJlZ2lzdGVyOwogICAgIHVz
aW5nIEV4cHJlc3Npb25MaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPjsKLSAgICB1c2lu
ZyBTdGFjayA9IEV4cHJlc3Npb25MaXN0OworICAgIHVzaW5nIFN0YWNrID0gVmVjdG9yPEV4cHJl
c3Npb25UeXBlLCAxNiwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+OwogCiAgICAgc3RydWN0IENvbnRy
b2xMb29wICB7CiAgICAgICAgIFJlZjxMYWJlbD4gbV9ib2R5OwpAQCAtNzMsMjQgKzczLDI0IEBA
IHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvbnRyb2xU
eXBlIGxvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9uTGlzdCYg
cmVzdWx0cywgUmVmPExhYmVsPiBib2R5LCBSZWZQdHI8TGFiZWw+IGNvbnRpbnVhdGlvbikKKyAg
ICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGxvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1
bnNpZ25lZCBzdGFja1NpemUsIFJlZjxMYWJlbD4mJiBib2R5LCBSZWZQdHI8TGFiZWw+JiYgY29u
dGludWF0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2ln
bmF0dXJlLCByZXN1bHRzLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xMb29wIHsgV1RG
TW92ZShib2R5KSB9KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUs
IHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVh
dGlvbiksIENvbnRyb2xMb29wIHsgV1RGTW92ZShib2R5KSB9KTsKICAgICAgICAgfQogCi0gICAg
ICAgIHN0YXRpYyBDb250cm9sVHlwZSB0b3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUs
IGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRzLCBSZWZQdHI8TGFiZWw+IGNvbnRpbnVhdGlv
bikKKyAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIHRvcExldmVsKEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9u
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBy
ZXN1bHRzLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xUb3BMZXZlbCB7IH0pOworICAg
ICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplLCBXVEZNb3Zl
KGNvbnRpbnVhdGlvbiksIENvbnRyb2xUb3BMZXZlbCB7IH0pOwogICAgICAgICB9CiAKLSAgICAg
ICAgc3RhdGljIENvbnRyb2xUeXBlIGJsb2NrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMsIFJlZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQor
ICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgYmxvY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJl
LCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHJlc3VsdHMs
IFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbEJsb2NrIHsgfSk7CisgICAgICAgICAgICBy
ZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sQmxvY2sgeyB9KTsKICAg
ICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBpZl8oQmxvY2tTaWduYXR1cmUg
c2lnbmF0dXJlLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0cywgUmVmPExhYmVsPiBhbHRl
cm5hdGUsIFJlZlB0cjxMYWJlbD4gY29udGludWF0aW9uKQorICAgICAgICBzdGF0aWMgQ29udHJv
bFR5cGUgaWZfKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBS
ZWY8TGFiZWw+JiYgYWx0ZXJuYXRlLCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCByZXN1bHRz
LCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xJZiB7IFdURk1vdmUoYWx0ZXJuYXRlKSB9
KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAt
IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRy
b2xJZiB7IFdURk1vdmUoYWx0ZXJuYXRlKSB9KTsKICAgICAgICAgfQogCiAgICAgICAgIFJlZlB0
cjxMYWJlbD4gdGFyZ2V0TGFiZWxGb3JCcmFuY2goKSBjb25zdApAQCAtMTAwLDE2ICsxMDAsMjUg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIG1fY29udGludWF0aW9uOwogICAgICAgICB9
CiAKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0QXJpdHkoKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sTG9vcD4oKnRoaXMpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAg
ICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOworICAgICAgICB9CisK
KyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1NpemU7
IH0KKwogICAgICAgICBCbG9ja1NpZ25hdHVyZSBtX3NpZ25hdHVyZTsKLSAgICAgICAgRXhwcmVz
c2lvbkxpc3QgbV9yZXN1bHRzOworICAgICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKICAgICAg
ICAgUmVmUHRyPExhYmVsPiBtX2NvbnRpbnVhdGlvbjsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIENvbnRyb2xUeXBlKEJsb2NrU2lnbmF0dXJl
IHNpZ25hdHVyZSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMsIFJlZlB0cjxMYWJlbD4g
Y29udGludWF0aW9uLCBUIHQpCisgICAgICAgIENvbnRyb2xUeXBlKEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9u
LCBUJiYgdCkKICAgICAgICAgICAgIDogQmFzZShXVEZNb3ZlKHQpKQogICAgICAgICAgICAgLCBt
X3NpZ25hdHVyZShzaWduYXR1cmUpCi0gICAgICAgICAgICAsIG1fcmVzdWx0cyhyZXN1bHRzKQor
ICAgICAgICAgICAgLCBtX3N0YWNrU2l6ZShzdGFja1NpemUpCiAgICAgICAgICAgICAsIG1fY29u
dGludWF0aW9uKFdURk1vdmUoY29udGludWF0aW9uKSkKICAgICAgICAgewogICAgICAgICB9CkBA
IC0xMzcsMTggKzE0NiwzMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhjb25zdCBFeHByZXNzaW9uTGlzdEEmIGRlc3RpbmF0aW9ucywgY29uc3QgRXhwcmVzc2lvbkxp
c3RCJiB2YWx1ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoZGVzdGluYXRpb25zLnNpemUoKSA8
PSB2YWx1ZXMuc2l6ZSgpKTsKKyAgICAgICAgYXV0byBvZmZzZXQgPSB2YWx1ZXMuc2l6ZSgpIC0g
ZGVzdGluYXRpb25zLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXN0
aW5hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRl
c3RpbmF0aW9uc1tkZXN0aW5hdGlvbnMuc2l6ZSgpIC0gaSAtIDFdLCB2YWx1ZXNbdmFsdWVzLnNp
emUoKSAtIGkgLSAxXSk7CisgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRlc3RpbmF0
aW9uc1tpXSwgdmFsdWVzW29mZnNldCArIGldKTsKKyAgICB9CisKKyAgICBlbnVtIE5vQ29uc2lz
dGVuY3lDaGVja1RhZyB7IE5vQ29uc2lzdGVuY3lDaGVjayB9OworICAgIEV4cHJlc3Npb25UeXBl
IHB1c2goTm9Db25zaXN0ZW5jeUNoZWNrVGFnKQorICAgIHsKKyAgICAgICAgbV9tYXhTdGFja1Np
emUgPSBzdGQ6Om1heChtX21heFN0YWNrU2l6ZSwgKyttX3N0YWNrU2l6ZSk7CisgICAgICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX3N0YWNrU2l6ZSAtIDEpOworICAgIH0KKwor
ICAgIEV4cHJlc3Npb25UeXBlIHB1c2goKQorICAgIHsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgICAgICByZXR1cm4gcHVzaChOb0NvbnNpc3RlbmN5Q2hlY2spOwogICAgIH0KIAor
ICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IC0tbV9zdGFja1NpemU7IH0KIAotICAg
IHN0YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiBudWxscHRy
OyB9OworICAgIHN0YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIgeyB9OyB9OwogICAgIFN0YWNrIGNyZWF0ZVN0YWNrKCkgeyByZXR1
cm4gU3RhY2soKTsgfQogICAgIGJvb2wgaXNDb250cm9sVHlwZUlmKGNvbnN0IENvbnRyb2xUeXBl
JiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xJZj4oY29u
dHJvbCk7IH0KIAogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3Vt
ZW50cyhjb25zdCBTaWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgYWRkQ29u
c3RhbnQoVHlwZSwgdWludDY0X3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5
cGUsIGludDY0X3QpOwogCiAgICAgLy8gUmVmZXJlbmNlcwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CkBAIC0xODcsMTQgKzIxMSwxNSBAQCBwdWJsaWM6CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQmxvY2soQmxvY2tTaWduYXR1cmUsIFN0
YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5ld0Jsb2NrLCBTdGFjayYgbmV3U3Rh
Y2spOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoQmxvY2tT
aWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIGJsb2NrLCBTdGFj
ayYgbmV3U3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25h
dHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYg
bmV3U3RhY2spOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2Uo
Q29udHJvbFR5cGUmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbFR5cGUmLCBTdGFjayYpOwogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRy
b2xUeXBlJik7CiAKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1
cm4oY29uc3QgQ29udHJvbFR5cGUmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVz
KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJv
bFR5cGUmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBy
ZXR1cm5WYWx1ZXMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3
aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZSo+
JiB0YXJnZXRzLCBDb250cm9sVHlwZSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Npb25M
aXN0JiBleHByZXNzaW9uU3RhY2spOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3Rh
Y2spOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFj
aGFibGUoQ29udHJvbEVudHJ5JiwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IHsgfSk7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENv
bnRyb2xUeXBlJiwgU3RhY2smIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xUeXBlJiwgRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0
b3I8Q29udHJvbFR5cGUqPiYgdGFyZ2V0cywgQ29udHJvbFR5cGUmIGRlZmF1bHRUYXJnZXRzLCBT
dGFjayYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENv
bnRyb2xFbnRyeSYsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSB7IH0sIGJvb2wgdW5y
ZWFjaGFibGUgPSB0cnVlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBl
bmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSwgY29uc3QgU3RhY2smKTsKIAogICAgIC8vIENhbGxz
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBj
YWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJn
cywgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMpOwpAQCAtMjA1LDcgKzIzMCw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiogcGFy
c2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZlY3Rv
cjxDb250cm9sRW50cnk+JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QqKSB7IH0KKyAgICB2b2lkIGR1
bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBTdGFjayopIHsgfQogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBHZW5lcmljTGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjsKQEAg
LTIxNCwxMiArMjM5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0
OwogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQXJndW1lbnRzOwogICAgICAgICBFeHBy
ZXNzaW9uTGlzdCBhcmd1bWVudHM7Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0IHJlc3VsdHM7Cisg
ICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwcmVzc2lvbkxpc3QmKT4gY29tbWl0UmVz
dWx0czsKICAgICB9OwogCi0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9u
Rm9yKGNvbnN0IFNpZ25hdHVyZSYsIENhbGxSb2xlID0gQ2FsbFJvbGU6OkNhbGxlcik7CisgICAg
TExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25h
dHVyZSYpOworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IGNhbGxJbmZvcm1hdGlvbkZv
ckNhbGxlZShjb25zdCBTaWduYXR1cmUmKTsKIAotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbCh1aW50MzJfdCBpbmRleCkKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyRm9yV2FzbUxvY2FsKHVpbnQzMl90IGluZGV4KQogICAgIHsKICAgICAgICAg
aWYgKGluZGV4IDwgbV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzKQogICAgICAgICAgICAgcmV0
dXJuIG1fbm9ybWFsaXplZEFyZ3VtZW50c1tpbmRleF07CkBAIC0yMjcsMjcgKzI1MywxNDEgQEAg
cHJpdmF0ZToKICAgICAgICAgY29uc3QgYXV0byYgY2FsbGluZ0NvbnZlbnRpb24gPSB3YXNtQ2Fs
bGluZ0NvbnZlbnRpb24oKTsKICAgICAgICAgY29uc3QgdWludDMyX3QgZ3ByQ291bnQgPSBjYWxs
aW5nQ29udmVudGlvbi5ncHJBcmdzLnNpemUoKTsKICAgICAgICAgY29uc3QgdWludDMyX3QgZnBy
Q291bnQgPSBjYWxsaW5nQ29udmVudGlvbi5mcHJBcmdzLnNpemUoKTsKLSAgICAgICAgcmV0dXJu
IDo6SlNDOjp2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG1fY29kZUJsb2NrLT5tX251
bUFyZ3VtZW50cyArIGdwckNvdW50ICsgZnByQ291bnQgKyBudW1iZXJPZkxMSW50Q2FsbGVlU2F2
ZVJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRl
eCAtIG1fY29kZUJsb2NrLT5tX251bUFyZ3VtZW50cyArIGdwckNvdW50ICsgZnByQ291bnQgKyBu
dW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycyk7CiAgICAgfQogCi0gICAgRXhwcmVzc2lv
bkxpc3QgdG1wc0ZvclNpZ25hdHVyZShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUpCisgICAgRXhw
cmVzc2lvblR5cGUganNOdWxsQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgRXhwcmVzc2lvbkxp
c3QgcmVzdWx0KHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkKLSAgICAgICAgICAg
IHJlc3VsdFtpXSA9IG5ld1RlbXBvcmFyeSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICBpZiAoVU5MSUtFTFkoIW1fanNOdWxsQ29uc3RhbnQuaXNWYWxpZCgpKSkgeworICAgICAg
ICAgICAgbV9qc051bGxDb25zdGFudCA9IFZpcnR1YWxSZWdpc3RlcihGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCArIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50cy5zaXplKCkpOworICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPm1fY29uc3RhbnRzLmFwcGVuZChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2Fz
bUJ5dGVjb2RlcygpKSkKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudFR5
cGVzLmFwcGVuZChUeXBlOjpBbnlyZWYpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2pz
TnVsbENvbnN0YW50OwogICAgIH0KIAotICAgIEV4cHJlc3Npb25UeXBlIGpzTnVsbENvbnN0YW50
KCkKKyAgICBFeHByZXNzaW9uVHlwZSB6ZXJvQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgaWYg
KCFtX2pzTnVsbENvbnN0YW50KQotICAgICAgICAgICAgbV9qc051bGxDb25zdGFudCA9IGFkZENv
bnN0YW50KFR5cGU6OkFueXJlZiwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSk7Ci0gICAgICAg
IHJldHVybiBtX2pzTnVsbENvbnN0YW50OworICAgICAgICBpZiAoVU5MSUtFTFkoIW1femVyb0Nv
bnN0YW50LmlzVmFsaWQoKSkpIHsKKyAgICAgICAgICAgIG1femVyb0NvbnN0YW50ID0gVmlydHVh
bFJlZ2lzdGVyKEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb2RlQmxvY2stPm1fY29u
c3RhbnRzLnNpemUoKSk7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudHMuYXBw
ZW5kKDApOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRX
YXNtQnl0ZWNvZGVzKCkpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50
VHlwZXMuYXBwZW5kKFR5cGU6OkkzMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1femVy
b0NvbnN0YW50OworICAgIH0KKworICAgIHZvaWQgZ2V0RHJvcEtlZXBDb3VudChjb25zdCBDb250
cm9sVHlwZSYgdGFyZ2V0LCB1bnNpZ25lZCYgc3RhcnRPZmZzZXQsIHVuc2lnbmVkJiBkcm9wLCB1
bnNpZ25lZCYga2VlcCkKKyAgICB7CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGFyZ2V0LnN0YWNr
U2l6ZSgpICsgMTsKKyAgICAgICAga2VlcCA9IHRhcmdldC50YXJnZXRBcml0eSgpOworICAgICAg
ICBkcm9wID0gbV9zdGFja1NpemUgLSB0YXJnZXQuc3RhY2tTaXplKCkgLSB0YXJnZXQudGFyZ2V0
QXJpdHkoKTsKKyAgICB9CisKKyAgICB2b2lkIGRyb3BLZWVwKFN0YWNrJiB2YWx1ZXMsIGNvbnN0
IENvbnRyb2xUeXBlJiB0YXJnZXQsIGJvb2wgZHJvcFZhbHVlcykKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0OworICAgICAgICB1bnNpZ25lZCBrZWVwOworICAgICAgICB1bnNp
Z25lZCBkcm9wOworCisgICAgICAgIGdldERyb3BLZWVwQ291bnQodGFyZ2V0LCBzdGFydE9mZnNl
dCwgZHJvcCwga2VlcCk7CisKKyAgICAgICAgaWYgKGRyb3BWYWx1ZXMpCisgICAgICAgICAgICB2
YWx1ZXMuc2hyaW5rKGtlZXApOworCisgICAgICAgIGlmICghZHJvcCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAoa2VlcCkKKyAgICAgICAgICAgIFdhc21Ecm9wS2VlcDo6ZW1p
dCh0aGlzLCBzdGFydE9mZnNldCwgZHJvcCwga2VlcCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHdhbGtFeHByZXNzaW9uU3RhY2soU3RhY2smIGV4
cHJlc3Npb25TdGFjaywgdW5zaWduZWQgc3RhY2tTaXplLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZXhwcmVzc2lvblN0YWNrLnNpemUo
KTsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNsb3QgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChzdGFja1NpemUgLSBpKTsKKyAgICAgICAgICAgIGZ1bmN0b3Io
ZXhwcmVzc2lvblN0YWNrW2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpXSwgc2xvdCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
d2Fsa0V4cHJlc3Npb25TdGFjayhTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhleHByZXNzaW9u
U3RhY2ssIG1fc3RhY2tTaXplLCBmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgd2Fsa0V4cHJlc3Npb25TdGFjayhDb250cm9sRW50cnkm
IGVudHJ5LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgd2Fsa0V4cHJl
c3Npb25TdGFjayhlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjaywgZW50cnkuY29udHJvbERh
dGEuc3RhY2tTaXplKCksIGZ1bmN0b3IpOworICAgIH0KKworICAgIHZvaWQgY2hlY2tDb25zaXN0
ZW5jeSgpCisgICAgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLy8gVGhlIHJ1bGVz
IGZvciBsb2NhbHMgYW5kIGNvbnN0YW50cyBpbiB0aGUgc3RhY2sgYXJlOgorICAgICAgICAvLyAx
KSBMb2NhbHMgaGF2ZSB0byBiZSBtYXRlcmlhbGl6ZWQgd2hlbmV2ZXIgYSBjb250cm9sIGVudHJ5
IGlzIHB1c2hlZCB0byB0aGUgY29udHJvbCBzdGFjayAoaS5lLiBldmVyeSB0aW1lIHdlIHNwbGl0
U3RhY2spCisgICAgICAgIC8vICAgIE5PVEU6IFRoaXMgaXMgYSB0cmFkZS1vZmYgc28gdGhhdCBz
ZXRfbG9jYWwgZG9lcyBub3QgaGF2ZSB0byB3YWxrIHVwIHRoZSBjb250cm9sIHN0YWNrIGxvb2tp
bmcgZm9yIGRlbGF5ZWQgZ2V0X2xvY2FscworICAgICAgICAvLyAyKSBJZiB0aGUgY29udHJvbCBl
bnRyeSBpcyBhIGxvb3AsIHdlIGFsc28gbmVlZCB0byBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW4g
dGhlIG5ld1N0YWNrLCBzaW5jZSB0aG9zZSBzbG90cyB3aWxsIGJlIHdyaXR0ZW4KKyAgICAgICAg
Ly8gICAgdG8gZnJvbSBsb29wIGJhY2sgZWRnZXMKKyAgICAgICAgLy8gMykgQm90aCBsb2NhbHMg
YW5kIGNvbnN0YW50cyBoYXZlIHRvIGJlIG1hdGVyaWFsaXplZCBiZWZvcmUgYnJhbmNoZXMsIHNp
bmNlIG11bHRpcGxlIGJyYW5jaGVzIG1pZ2h0IHNoYXJlIHRoZSBzYW1lIHRhcmdldCwKKyAgICAg
ICAgLy8gICAgd2UgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHN0YWNrIHN0
YXRlIGF0IHRoYXQgcG9pbnQsIHNvIHdlIG1hdGVyaWFsaXplIHRoZSBzdGFjay4KKyAgICAgICAg
Zm9yIChDb250cm9sRW50cnkmIGNvbnRyb2xFbnRyeSA6IG1fcGFyc2VyLT5jb250cm9sU3RhY2so
KSkgeworICAgICAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhjb250cm9sRW50cnksIFsmXShW
aXJ0dWFsUmVnaXN0ZXIgZXhwcmVzc2lvbiwgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoZXhwcmVzc2lvbiA9PSBzbG90IHx8IGV4cHJlc3Npb24uaXNDb25z
dGFudCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHdhbGtFeHByZXNz
aW9uU3RhY2sobV9wYXJzZXItPmV4cHJlc3Npb25TdGFjaygpLCBbJl0oVmlydHVhbFJlZ2lzdGVy
IGV4cHJlc3Npb24sIFZpcnR1YWxSZWdpc3RlciBzbG90KSB7CisgICAgICAgICAgICBBU1NFUlQo
ZXhwcmVzc2lvbiA9PSBzbG90IHx8IGV4cHJlc3Npb24uaXNDb25zdGFudCgpIHx8IGV4cHJlc3Np
b24uaXNBcmd1bWVudCgpIHx8IGV4cHJlc3Npb24udG9Mb2NhbCgpIDwgbV9jb2RlQmxvY2stPm1f
bnVtVmFycyk7CisgICAgICAgIH0pOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBtYXRlcmlh
bGl6ZUNvbnN0YW50c0FuZExvY2FscyhTdGFjayYgZXhwcmVzc2lvblN0YWNrKQorICAgIHsKKyAg
ICAgICAgaWYgKGV4cHJlc3Npb25TdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB3YWxrRXhwcmVzc2lvblN0
YWNrKGV4cHJlc3Npb25TdGFjaywgWyZdKFZpcnR1YWxSZWdpc3RlciYgZXhwcmVzc2lvbiwgVmly
dHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAgICAgICAgICAgIEFTU0VSVChleHByZXNzaW9uID09IHNs
b3QgfHwgZXhwcmVzc2lvbi5pc0NvbnN0YW50KCkgfHwgZXhwcmVzc2lvbi5pc0FyZ3VtZW50KCkg
fHwgZXhwcmVzc2lvbi50b0xvY2FsKCkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICAg
ICAgICAgIGlmIChleHByZXNzaW9uID09IHNsb3QpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBzbG90LCBleHByZXNzaW9uKTsKKyAgICAg
ICAgICAgIGV4cHJlc3Npb24gPSBzbG90OworICAgICAgICB9KTsKKyAgICAgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOworICAgIH0KKworICAgIFN0YWNrIHNwbGl0U3RhY2soQmxvY2tTaWduYXR1cmUg
c2lnbmF0dXJlLCBTdGFjayYgc3RhY2spCisgICAgeworICAgICAgICBTdGFjayByZXN1bHQgPSBK
U0M6Oldhc206OnNwbGl0U3RhY2soc2lnbmF0dXJlLCBzdGFjayk7CisKKyAgICAgICAgbV9zdGFj
a1NpemUgLT0gcmVzdWx0LnNpemUoKTsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAg
ICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKHN0YWNrLCBbJl0oVmlydHVhbFJlZ2lzdGVyJiBleHBy
ZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgeworICAgICAgICAgICAgQVNTRVJUKGV4cHJl
c3Npb24gPT0gc2xvdCB8fCBleHByZXNzaW9uLmlzQ29uc3RhbnQoKSB8fCBleHByZXNzaW9uLmlz
QXJndW1lbnQoKSB8fCBleHByZXNzaW9uLnRvTG9jYWwoKSA8IG1fY29kZUJsb2NrLT5tX251bVZh
cnMpOworICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24gPT0gc2xvdCB8fCBleHByZXNzaW9uLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBXYXNtTW92
OjplbWl0KHRoaXMsIHNsb3QsIGV4cHJlc3Npb24pOworICAgICAgICAgICAgZXhwcmVzc2lvbiA9
IHNsb3Q7CisgICAgICAgIH0pOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAg
IG1fc3RhY2tTaXplICs9IHJlc3VsdC5zaXplKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogCiAgICAgc3RydWN0IFN3aXRjaEVudHJ5IHsKICAgICAgICAgSW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQqIGp1
bXBUYXJnZXQ7CisgICAgICAgIGludCoganVtcFRhcmdldDsKKyAgICB9OworCisgICAgc3RydWN0
IENvbnN0YW50TWFwSGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8RW5jb2RlZEpT
VmFsdWU+IHsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSB0cnVlOworICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRW5jb2Rl
ZEpTVmFsdWUmIHNsb3QpIHsgc2xvdCA9IEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7IH0KKyAg
ICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoRW5jb2RlZEpTVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIHZhbHVlID09IEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7IH0KICAgICB9OwogCiAg
ICAgRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+KiBtX3BhcnNlciB7IG51bGxwdHIgfTsK
QEAgLTI1Niw4ICszOTYsMTIgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVy
PiBtX25vcm1hbGl6ZWRBcmd1bWVudHM7CiAgICAgSGFzaE1hcDxMYWJlbCosIFZlY3RvcjxTd2l0
Y2hFbnRyeT4+IG1fc3dpdGNoZXM7CiAgICAgRXhwcmVzc2lvblR5cGUgbV9qc051bGxDb25zdGFu
dDsKKyAgICBFeHByZXNzaW9uVHlwZSBtX3plcm9Db25zdGFudDsKICAgICBFeHByZXNzaW9uTGlz
dCBtX3VuaXRpYWxpemVkTG9jYWxzOwotICAgIFN0ZFVub3JkZXJlZE1hcDx1aW50NjRfdCwgVmly
dHVhbFJlZ2lzdGVyPiBtX2NvbnN0YW50TWFwOworICAgIEhhc2hNYXA8RW5jb2RlZEpTVmFsdWUs
IFZpcnR1YWxSZWdpc3RlciwgV1RGOjpJbnRIYXNoPEVuY29kZWRKU1ZhbHVlPiwgQ29uc3RhbnRN
YXBIYXNoVHJhaXRzPiBtX2NvbnN0YW50TWFwOworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIs
IDI+IG1fcmVzdWx0czsKKyAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZSB7IDAgfTsKKyAgICB1bnNp
Z25lZCBtX21heFN0YWNrU2l6ZSB7IDAgfTsKIH07CiAKIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29u
c3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24p
CkBAIC0yNzAsMTAgKzQxNCwxNCBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25D
b2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbgogfQogCiBMTElu
dEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8s
IHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNl
cHRpb24sIGNvbnN0IFNpZ25hdHVyZSYpCi0gICAgOiBCeXRlY29kZUdlbmVyYXRvckJhc2UobWFr
ZVVuaXF1ZTxGdW5jdGlvbkNvZGVCbG9jaz4oZnVuY3Rpb25JbmRleCksIG51bWJlck9mTExJbnRD
YWxsZWVTYXZlUmVnaXN0ZXJzKQorICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlx
dWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1bmN0aW9uSW5kZXgpLCAwKQogICAgICwgbV9pbmZvKGlu
Zm8pCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKKyAgICBtX2NvZGVC
bG9jay0+bV9udW1WYXJzID0gbnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAg
bV9zdGFja1NpemUgPSBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVyczsKKyAgICBtX21h
eFN0YWNrU2l6ZSA9IG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzOworCiAgICAgaWYg
KHRocm93V2FzbUV4Y2VwdGlvbikKICAgICAgICAgVGh1bmtzOjpzaW5nbGV0b24oKS5zZXRUaHJv
d1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKTsKIApAQCAtMjgzLDYgKzQzMSw3IEBA
IExMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgdW5zaWduZWQgZnVuY3Rpb25JCiBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IExMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9j
b2RlQmxvY2spOworICAgIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2FscyA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBtX21heFN0YWNrU2l6
ZSk7CiAgICAgbV9jb2RlQmxvY2stPnNldEluc3RydWN0aW9ucyhtX3dyaXRlci5maW5hbGl6ZSgp
KTsKICAgICByZXR1cm4gV1RGTW92ZShtX2NvZGVCbG9jayk7CiB9CkBAIC0yOTAsOCArNDM5LDMy
IEBAIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gTExJbnRHZW5lcmF0b3I6OmZp
bmFsaXplKCkKIC8vIEdlbmVyYXRlZCBmcm9tIHdhc20uanNvbgogI2luY2x1ZGUgIldhc21MTElu
dEdlbmVyYXRvcklubGluZXMuaCIKIAotYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0
aW9uRm9yKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDYWxsUm9sZSByb2xlKSAtPiBMTElu
dENhbGxJbmZvcm1hdGlvbgorYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9y
Q2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTEludENhbGxJbmZvcm1hdGlv
bgogeworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgc3RhY2sgbGF5b3V0IGZvciBj
YWxscy4gVGhlIGRlc2lyZWQgc3RhY2sgbGF5b3V0IGlzOgorCisgICAgLy8gRlBSbgorICAgIC8v
IC4uLgorICAgIC8vIEZQUjEKKyAgICAvLyBGUFIwCisgICAgLy8gLS0tCisgICAgLy8gR1BSbgor
ICAgIC8vIC4uLgorICAgIC8vIEdQUjEKKyAgICAvLyBHUFIwCisgICAgLy8gLS0tLQorICAgIC8v
IHN0YWNrTgorICAgIC8vIC4uLgorICAgIC8vIHN0YWNrMQorICAgIC8vIHN0YWNrMAorICAgIC8v
IC0tLQorICAgIC8vIGNhbGwgZnJhbWUgaGVhZGVyCisKKyAgICAvLyBXZSBuZWVkIHRvIGFsbG9j
YXRlIGF0IGxlYXN0IHNwYWNlIGZvciBhbGwgR1BScyBhbmQgRlBScy4KKyAgICAvLyBSZXR1cm4g
dmFsdWVzIHVzZSB0aGUgc2FtZSBhbGxvY2F0aW9uIGxheW91dC4KKworICAgIGNvbnN0IGF1dG8g
aW5pdGlhbFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOworCiAgICAgY29uc3QgYXV0byYgY2FsbGlu
Z0NvbnZlbnRpb24gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKICAgICBjb25zdCB1aW50MzJf
dCBncHJDb3VudCA9IGNhbGxpbmdDb252ZW50aW9uLmdwckFyZ3Muc2l6ZSgpOwogICAgIGNvbnN0
IHVpbnQzMl90IGZwckNvdW50ID0gY2FsbGluZ0NvbnZlbnRpb24uZnByQXJncy5zaXplKCk7CkBA
IC0yOTksMTQgKzQ3Miw5IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZv
cihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ2FsbFJvbGUgcm9sCiAgICAgdWludDMyX3Qg
c3RhY2tDb3VudCA9IDA7CiAgICAgdWludDMyX3QgZ3BySW5kZXggPSAwOwogICAgIHVpbnQzMl90
IGZwckluZGV4ID0gMDsKLQotICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJJRD4sIDE2PiByZWdp
c3RlcnM7Ci0KLSAgICBFeHByZXNzaW9uTGlzdCBhcmd1bWVudHMoc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSk7Ci0gICAgRXhwcmVzc2lvbkxpc3QgcmVzdWx0cyhzaWduYXR1cmUucmV0dXJuQ291
bnQoKSk7CisgICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CiAKICAgICBhdXRvIGFsbG9jYXRl
U3RhY2tSZWdpc3RlciA9IFsmXShUeXBlIHR5cGUpIHsKLSAgICAgICAgQVNTRVJUKHJvbGUgPT0g
Q2FsbFJvbGU6OkNhbGxlcik7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNl
IFR5cGU6OkkzMjoKICAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CkBAIC0zMTQsMTkgKzQ4MiwxNSBA
QCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3IoY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsIENhbGxSb2xlIHJvbAogICAgICAgICBjYXNlIFR5cGU6OkZ1bmNyZWY6CiAg
ICAgICAgICAgICBpZiAoZ3BySW5kZXggPCBncHJDb3VudCkKICAgICAgICAgICAgICAgICArK2dw
ckluZGV4OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJzLmFw
cGVuZChuZXdUZW1wb3JhcnkoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGFja0luZGV4Kysg
Pj0gc3RhY2tDb3VudCkKICAgICAgICAgICAgICAgICArK3N0YWNrQ291bnQ7Ci0gICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlOjpGMzI6CiAgICAgICAg
IGNhc2UgVHlwZTo6RjY0OgogICAgICAgICAgICAgaWYgKGZwckluZGV4IDwgZnByQ291bnQpCiAg
ICAgICAgICAgICAgICAgKytmcHJJbmRleDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIHJlZ2lzdGVycy5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOworICAgICAgICAgICAgZWxz
ZSBpZiAoc3RhY2tJbmRleCsrID49IHN0YWNrQ291bnQpCiAgICAgICAgICAgICAgICAgKytzdGFj
a0NvdW50OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Vm9pZDoKICAgICAgICAgY2FzZSBGdW5jOgpAQCAtMzM1LDkwICs0OTksMTQyIEBAIGF1dG8gTExJ
bnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgQ2FsbFJvbGUgcm9sCiAgICAgfTsKIAogCi0gICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNh
bGxlZSkgewotICAgICAgICAvLyBSZXVzZSB0aGUgc2xvdHMgd2UgYWxsb2NhdGVkIHRvIHNwaWxs
IHRoZSByZWdpc3RlcnMgaW4gYWRkQXJndW1lbnRzCi0gICAgICAgIGZvciAodWludDMyX3QgaSA9
IGdwckNvdW50ICsgZnByQ291bnQ7IGktLTspCi0gICAgICAgICAgICByZWdpc3RlcnMuYXBwZW5k
KG5ldyBSZWdpc3RlcklEKDo6SlNDOjp2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChudW1iZXJPZkxM
SW50Q2FsbGVlU2F2ZVJlZ2lzdGVycyArIGkpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGdwckNvdW50OyBpKyspCi0gICAgICAgICAgICByZWdpc3Rl
cnMuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IGZwckNvdW50OyBpKyspCi0gICAgICAgICAgICByZWdpc3RlcnMuYXBwZW5kKG5ld1RlbXBv
cmFyeSgpKTsKLQotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKTsgaSsrKQotICAgICAgICAgICAgYWxsb2NhdGVTdGFja1JlZ2lzdGVyKHNp
Z25hdHVyZS5hcmd1bWVudChpKSk7Ci0gICAgICAgIGdwckluZGV4ID0gMDsKLSAgICAgICAgZnBy
SW5kZXggPSAwOwotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJl
dHVybkNvdW50KCk7IGkrKykKLSAgICAgICAgICAgIGFsbG9jYXRlU3RhY2tSZWdpc3RlcihzaWdu
YXR1cmUucmV0dXJuVHlwZShpKSk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykKKyAgICAgICAgYWxsb2NhdGVTdGFja1JlZ2lzdGVy
KHNpZ25hdHVyZS5hcmd1bWVudChpKSk7CisKKyAgICBncHJJbmRleCA9IDA7CisgICAgZnBySW5k
ZXggPSAwOworICAgIHN0YWNrSW5kZXggPSAwOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgaSsrKQorICAgICAgICBhbGxvY2F0ZVN0YWNrUmVn
aXN0ZXIoc2lnbmF0dXJlLnJldHVyblR5cGUoaSkpOworCisgICAgLy8gRklYTUU6IHdlIGFyZSBh
bGxvY2F0aW5nIHRoZSBleHRyYSBzcGFjZSBmb3IgdGhlIGFyZ3VtZW50L3JldHVybiBjb3VudCBp
biBvcmRlciB0byBhdm9pZCBpbnRlcmZlcmVuY2UsIGJ1dCB3ZSBjb3VsZCBkbyBiZXR0ZXIKKyAg
ICAvLyBOT1RFOiBXZSBpbmNyZWFzZSBhcmcgY291bnQgYnkgMSBmb3IgdGhlIGNhc2Ugb2YgaW5k
aXJlY3QgY2FsbHMKKyAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1heChzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpICsgMSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkpICsgZ3ByQ291bnQgKyBmcHJD
b3VudCArIHN0YWNrQ291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKKyAg
ICBpZiAobV9zdGFja1NpemUgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKQorICAgICAgICAr
K21fc3RhY2tTaXplOworICAgIGlmIChtX21heFN0YWNrU2l6ZSA8IG1fc3RhY2tTaXplKQorICAg
ICAgICBtX21heFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOworCisKKyAgICBFeHByZXNzaW9uTGlz
dCBhcmd1bWVudHMoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CisgICAgRXhwcmVzc2lvbkxp
c3QgdGVtcG9yYXJ5UmVzdWx0cyhzaWduYXR1cmUucmV0dXJuQ291bnQoKSk7CisKKyAgICBjb25z
dCB1bnNpZ25lZCBzdGFja09mZnNldCA9IG1fc3RhY2tTaXplOworICAgIGNvbnN0IHVuc2lnbmVk
IGJhc2UgPSBzdGFja09mZnNldCAtIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwor
CisgICAgY29uc3QgdWludDMyX3QgZ3ByTGltaXQgPSBiYXNlIC0gc3RhY2tDb3VudCAtIGdwckNv
dW50OworICAgIGNvbnN0IHVpbnQzMl90IGZwckxpbWl0ID0gZ3ByTGltaXQgLSBmcHJDb3VudDsK
KworICAgIHN0YWNrSW5kZXggPSBiYXNlOworICAgIGdwckluZGV4ID0gYmFzZSAtIHN0YWNrQ291
bnQ7CisgICAgZnBySW5kZXggPSBncHJJbmRleCAtIGdwckNvdW50OworICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKKyAgICAgICAg
c3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6
CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICBjYXNlIFR5cGU6OkFueXJlZjoKKyAg
ICAgICAgY2FzZSBUeXBlOjpGdW5jcmVmOgorICAgICAgICAgICAgaWYgKGdwckluZGV4ID4gZ3By
TGltaXQpCisgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoLS1ncHJJbmRleCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJn
dW1lbnRzW2ldID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1zdGFja0luZGV4KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBl
OjpGNjQ6CisgICAgICAgICAgICBpZiAoZnBySW5kZXggPiBmcHJMaW1pdCkKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLWZwckluZGV4KTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNbaV0gPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbCgtLXN0YWNrSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVm9pZDoKKyAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHVuc2lnbmVkIHN0
YWNrT2Zmc2V0OwotICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxsZWUpCi0gICAgICAgIHN0
YWNrT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1yZWdpc3RlcnMubGFzdCgpLT5pbmRl
eCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gQWxpZ24gdGhlIHN0YWNrCi0gICAgICAgIGF1
dG8gY29tcHV0ZVN0YWNrT2Zmc2V0ID0gWyZdIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oLXJlZ2lzdGVycy5sYXN0KCktPmluZGV4KCkpICsgQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIH07Ci0gICAgICAgIHdoaWxlIChjb21wdXRl
U3RhY2tPZmZzZXQoKSAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpCi0gICAgICAgICAgICBy
ZWdpc3RlcnMuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAgc3RhY2tPZmZzZXQgPSBj
b21wdXRlU3RhY2tPZmZzZXQoKTsKKyAgICBzdGFja0luZGV4ID0gYmFzZTsKKyAgICBncHJJbmRl
eCA9IGJhc2UgLSBzdGFja0NvdW50OworICAgIGZwckluZGV4ID0gZ3BySW5kZXggLSBncHJDb3Vu
dDsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7
IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpKSB7CisgICAg
ICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgY2Fz
ZSBUeXBlOjpBbnlyZWY6CisgICAgICAgIGNhc2UgVHlwZTo6RnVuY3JlZjoKKyAgICAgICAgICAg
IGlmIChncHJJbmRleCA+IGdwckxpbWl0KQorICAgICAgICAgICAgICAgIHRlbXBvcmFyeVJlc3Vs
dHNbaV0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgtLWdwckluZGV4KTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB0ZW1wb3JhcnlSZXN1bHRzW2ldID0gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoLS1zdGFja0luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBpZiAo
ZnBySW5kZXggPiBmcHJMaW1pdCkKKyAgICAgICAgICAgICAgICB0ZW1wb3JhcnlSZXN1bHRzW2ld
ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoLS1mcHJJbmRleCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVzdWx0c1tpXSA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKC0tc3RhY2tJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBW
b2lkOgorICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKHJvbGUgPT0gQ2FsbFJv
bGU6OkNhbGxlciB8fCAhc3RhY2tDb3VudCk7Ci0gICAgY29uc3QgdWludDMyX3QgbWF4R1BSSW5k
ZXggPSBzdGFja0NvdW50ICsgZ3ByQ291bnQ7Ci0gICAgY29uc3QgdWludDMyX3QgbWF4RlBSSW5k
ZXggPSBtYXhHUFJJbmRleCArIGZwckNvdW50OworICAgIG1fc3RhY2tTaXplID0gaW5pdGlhbFN0
YWNrU2l6ZTsKKworICAgIGF1dG8gY29tbWl0UmVzdWx0cyA9IFt0aGlzLCB0ZW1wb3JhcnlSZXN1
bHRzID0gV1RGTW92ZSh0ZW1wb3JhcnlSZXN1bHRzKV0oRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMp
IHsKKyAgICAgICAgZm9yIChhdXRvIHRlbXBvcmFyeVJlc3VsdCA6IHRlbXBvcmFyeVJlc3VsdHMp
IHsKKyAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IHB1c2goKTsKKyAgICAgICAg
ICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgcmVzdWx0LCB0ZW1wb3JhcnlSZXN1bHQpOworICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBy
ZXR1cm4gTExJbnRDYWxsSW5mb3JtYXRpb24geyBzdGFja09mZnNldCwgc3RhY2tDb3VudCwgV1RG
TW92ZShhcmd1bWVudHMpLCBXVEZNb3ZlKGNvbW1pdFJlc3VsdHMpIH07Cit9CisKK2F1dG8gTExJ
bnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSkgLT4gVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4KK3sKKyAgICBpZiAobV9yZXN1
bHRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0czsKKworICAgIG1fcmVzdWx0cy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKTsKKworICAgIGNv
bnN0IGF1dG8mIGNhbGxpbmdDb252ZW50aW9uID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7Cisg
ICAgY29uc3QgdWludDMyX3QgZ3ByQ291bnQgPSBjYWxsaW5nQ29udmVudGlvbi5ncHJBcmdzLnNp
emUoKTsKKyAgICBjb25zdCB1aW50MzJfdCBmcHJDb3VudCA9IGNhbGxpbmdDb252ZW50aW9uLmZw
ckFyZ3Muc2l6ZSgpOworCisgICAgdWludDMyX3QgZ3BySW5kZXggPSAwOworICAgIHVpbnQzMl90
IGZwckluZGV4ID0gZ3ByQ291bnQ7CiAgICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7Ci0gICAg
YXV0byBhcHBlbmRGb3JUeXBlID0gWyZdKFR5cGUgdHlwZSwgdW5zaWduZWQgaW5kZXgsIGF1dG8m
IHZlY3RvcikgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjb25zdCB1aW50MzJfdCBt
YXhHUFJJbmRleCA9IGdwckNvdW50OworICAgIGNvbnN0IHVpbnQzMl90IG1heEZQUkluZGV4ID0g
bWF4R1BSSW5kZXggKyBmcHJDb3VudDsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBz
aWduYXR1cmUucmV0dXJuQ291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJl
LnJldHVyblR5cGUoaSkpIHsKICAgICAgICAgY2FzZSBUeXBlOjpJMzI6CiAgICAgICAgIGNhc2Ug
VHlwZTo6STY0OgogICAgICAgICBjYXNlIFR5cGU6OkFueXJlZjoKICAgICAgICAgY2FzZSBUeXBl
OjpGdW5jcmVmOgogICAgICAgICAgICAgaWYgKGdwckluZGV4IDwgbWF4R1BSSW5kZXgpCi0gICAg
ICAgICAgICAgICAgdmVjdG9yW2luZGV4XSA9IHJlZ2lzdGVyc1tyZWdpc3RlcnMuc2l6ZSgpIC0g
Z3BySW5kZXgrKyAtIDFdOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcikKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2lu
ZGV4XSA9IHJlZ2lzdGVyc1tyZWdpc3RlcnMuc2l6ZSgpIC0gc3RhY2tJbmRleCsrIC0gMV07Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaW5kZXhdID0g
bmV3IFJlZ2lzdGVySUQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoc3RhY2tJbmRleCsrKSk7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCh2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycyArIGdwcklu
ZGV4KyspKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBw
ZW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KHN0YWNrSW5kZXgrKykpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZTo6RjMyOgogICAgICAgICBjYXNlIFR5cGU6OkY2
NDoKICAgICAgICAgICAgIGlmIChmcHJJbmRleCA8IG1heEZQUkluZGV4KQotICAgICAgICAgICAg
ICAgIHZlY3RvcltpbmRleF0gPSByZWdpc3RlcnNbcmVnaXN0ZXJzLnNpemUoKSAtIGZwckluZGV4
KysgLSAxXTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChyb2xlID09
IENhbGxSb2xlOjpDYWxsZXIpCi0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpbmRleF0gPSBy
ZWdpc3RlcnNbcmVnaXN0ZXJzLnNpemUoKSAtIHN0YWNrSW5kZXgrKyAtIDFdOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2luZGV4XSA9IG5ldyBSZWdp
c3RlcklEKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KHN0YWNrSW5kZXgrKykpOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQodmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwobnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnMgKyBmcHJJbmRleCsrKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChzdGFja0luZGV4KyspKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFZvaWQ6CiAgICAgICAgIGNhc2UgRnVuYzoKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KLSAgICB9OwotCi0gICAgZ3By
SW5kZXggPSBzdGFja0NvdW50OwotICAgIGZwckluZGV4ID0gbWF4R1BSSW5kZXg7Ci0gICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykKLSAg
ICAgICAgYXBwZW5kRm9yVHlwZShzaWduYXR1cmUuYXJndW1lbnQoaSksIGksIGFyZ3VtZW50cyk7
Ci0gICAgZ3BySW5kZXggPSBzdGFja0NvdW50OwotICAgIGZwckluZGV4ID0gbWF4R1BSSW5kZXg7
Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyBp
KyspCi0gICAgICAgIGFwcGVuZEZvclR5cGUoc2lnbmF0dXJlLnJldHVyblR5cGUoaSksIGksIHJl
c3VsdHMpOwotCi0gICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcikgewotICAgICAgICAv
LyBSZXNlcnZlIHNwYWNlIGZvciBjYWxsIGZyYW1lLgotICAgICAgICBWZWN0b3I8UmVmUHRyPFJl
Z2lzdGVySUQ+LCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIDIsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiBjYWxsRnJhbWU7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFt
ZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwogICAgIH0KIAotICAgIHJldHVybiBMTEludENhbGxJ
bmZvcm1hdGlvbiB7IHN0YWNrT2Zmc2V0LCBzdGFja0NvdW50LCBXVEZNb3ZlKGFyZ3VtZW50cyks
IFdURk1vdmUocmVzdWx0cykgfTsKKyAgICByZXR1cm4gbV9yZXN1bHRzOwogfQogCiBhdXRvIExM
SW50R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+
IFBhcnRpYWxSZXN1bHQKQEAgLTQzNSw5ICs2NTEsOSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQK
ICAgICB1aW50MzJfdCBmcHJJbmRleCA9IG1heEdQUkluZGV4OwogICAgIHVpbnQzMl90IHN0YWNr
SW5kZXggPSAwOwogCi0gICAgVmVjdG9yPFJlZlB0cjxSZWdpc3RlcklEPj4gcmVnaXN0ZXJBcmd1
bWVudHMoZ3ByQ291bnQgKyBmcHJDb3VudCk7CisgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4g
cmVnaXN0ZXJBcmd1bWVudHMoZ3ByQ291bnQgKyBmcHJDb3VudCk7CiAgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGdwckNvdW50ICsgZnByQ291bnQ7IGkrKykKLSAgICAgICAgcmVnaXN0ZXJB
cmd1bWVudHNbaV0gPSBhZGRWYXIoKTsKKyAgICAgICAgcmVnaXN0ZXJBcmd1bWVudHNbaV0gPSBw
dXNoKCk7CiAKICAgICBjb25zdCBhdXRvIGFkZEFyZ3VtZW50ID0gWyZdKHVpbnQzMl90IGluZGV4
LCB1aW50MzJfdCYgY291bnQsIHVpbnQzMl90IG1heCkgewogICAgICAgICBpZiAoY291bnQgPCBt
YXgpCkBAIC00NjQsMTMgKzY4MCwxNiBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRBcmd1bWVu
dHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAg
fQogICAgIH0KIAorICAgIG1fY29kZUJsb2NrLT5tX251bVZhcnMgKz0gZ3ByQ291bnQgKyBmcHJD
b3VudDsKKwogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExv
Y2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBt
X2NvZGVCbG9jay0+bV9udW1WYXJzICs9IGNvdW50OwogICAgIHdoaWxlIChjb3VudC0tKSB7Ci0g
ICAgICAgIGF1dG8gbG9jYWwgPSBhZGRWYXIoKTsKKyAgICAgICAgYXV0byBsb2NhbCA9IHB1c2go
KTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgVHlwZTo6QW55cmVmOgog
ICAgICAgICBjYXNlIFR5cGU6OkZ1bmNyZWY6CkBAIC00ODUsNDUgKzcwNCw2NiBAQCBhdXRvIExM
SW50R2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0
aWFsUmVzdWx0CiAKIHZvaWQgTExJbnRHZW5lcmF0b3I6OmRpZEZpbmlzaFBhcnNpbmdMb2NhbHMo
KQogeworICAgIGlmIChtX3VuaXRpYWxpemVkTG9jYWxzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgYXV0byBudWxsID0ganNOdWxsQ29uc3RhbnQoKTsKICAgICBmb3IgKGF1dG8g
bG9jYWwgOiBtX3VuaXRpYWxpemVkTG9jYWxzKQogICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMs
IGxvY2FsLCBudWxsKTsKICAgICBtX3VuaXRpYWxpemVkTG9jYWxzLmNsZWFyKCk7CiB9CiAKLWF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZENvbnN0YW50KFR5cGUgdHlwZSwgdWludDY0X3QgdmFsdWUp
IC0+IEV4cHJlc3Npb25UeXBlCithdXRvIExMSW50R2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBl
IHR5cGUsIGludDY0X3QgdmFsdWUpIC0+IEV4cHJlc3Npb25UeXBlCiB7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNvdXJjZShGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29kZUJsb2NrLT5t
X2NvbnN0YW50cy5zaXplKCkpOwotICAgIGF1dG8gcmVzdWx0ID0gbV9jb25zdGFudE1hcC5lbXBs
YWNlKHZhbHVlLCBzb3VyY2UpOwotICAgIGlmIChyZXN1bHQuc2Vjb25kKSB7CisgICAgYXV0byBj
b25zdGFudCA9IFsmXSB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4g
emVyb0NvbnN0YW50KCk7CisKKyAgICAgICAgaWYgKHZhbHVlID09IEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpCisgICAgICAgICAgICByZXR1cm4ganNOdWxsQ29uc3RhbnQoKTsKKworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc291cmNlKEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9j
b2RlQmxvY2stPm1fY29uc3RhbnRzLnNpemUoKSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9j
b25zdGFudE1hcC5hZGQodmFsdWUsIHNvdXJjZSk7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAg
ICAgbV9jb2RlQmxvY2stPm1fY29uc3RhbnRzLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVjb2RlcygpKSkKICAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50VHlwZXMuYXBwZW5kKHR5cGUpOwotICAgIH0gZWxz
ZQotICAgICAgICBzb3VyY2UgPSByZXN1bHQuZmlyc3QtPnNlY29uZDsKLSAgICBhdXRvIHRhcmdl
dCA9IG5ld1RlbXBvcmFyeSgpOwotICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgdGFyZ2V0LCBzb3Vy
Y2UpOwotICAgIHJldHVybiB0YXJnZXQ7CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfTsK
KyAgICAvLyBsZWF2ZSBhIGhvbGUgaWYgd2UgbmVlZCB0byBtYXRlcmlhbGl6ZSB0aGUgY29uc3Rh
bnQKKyAgICBwdXNoKCk7CisgICAgcmV0dXJuIGNvbnN0YW50KCk7CiB9CiAKIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB1bm5lY2Vzc2FyeSBt
b3ZlcwotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM2
NTcKLSAgICByZXN1bHQgPSBuZXdUZW1wb3JhcnkoKTsKLSAgICBXYXNtTW92OjplbWl0KHRoaXMs
IHJlc3VsdCwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXgpKTsKKyAgICAvLyBsZWF2ZSBh
IGhvbGUgaWYgd2UgbmVlZCB0byBtYXRlcmlhbGl6ZSB0aGUgbG9jYWwKKyAgICBwdXNoKCk7Cisg
ICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yV2FzbUxvY2FsKGluZGV4KTsKICAgICByZXR1
cm4geyB9OwogfQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBXYXNtTW92
OjplbWl0KHRoaXMsIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4KSwgdmFsdWUpOworICAg
IFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JXYXNtTG9jYWwoaW5k
ZXgpOworCisgICAgLy8gSWYgdGhpcyBsb2NhbCBpcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrIHdl
IG5lZWQgdG8gbWF0ZXJpYWxpemUgaXQsIG90aGVyd2lzZSBpdCdsbCBzZWUgdGhlIG5ldyB2YWx1
ZSBpbnN0ZWFkIG9mIHRoZSBvbGQgb25lCisgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhtX3BhcnNl
ci0+ZXhwcmVzc2lvblN0YWNrKCksIFsmXShWaXJ0dWFsUmVnaXN0ZXImIGV4cHJlc3Npb24sIFZp
cnR1YWxSZWdpc3RlciBzbG90KSB7CisgICAgICAgIGlmIChleHByZXNzaW9uICE9IHRhcmdldCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBzbG90LCBl
eHByZXNzaW9uKTsKKyAgICAgICAgZXhwcmVzc2lvbiA9IHNsb3Q7CisgICAgfSk7CisKKyAgICBX
YXNtTW92OjplbWl0KHRoaXMsIHRhcmdldCwgdmFsdWUpOworCiAgICAgcmV0dXJuIHsgfTsKIH0K
IAogYXV0byBMTEludEdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbmV3VGVt
cG9yYXJ5KCk7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21HZXRHbG9iYWw6OmVtaXQo
dGhpcywgcmVzdWx0LCBpbmRleCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTU0MCwxMSArNzgw
LDEzIEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFk
ZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENv
bnRyb2xUeXBlJiBibG9jaywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBl
bmNsb3NpbmdTdGFjayk7CisgICAgbWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMobmV3U3Rh
Y2spOworCiAgICAgUmVmPExhYmVsPiBib2R5ID0gbmV3RW1pdHRlZExhYmVsKCk7CiAgICAgUmVm
PExhYmVsPiBjb250aW51YXRpb24gPSBuZXdMYWJlbCgpOwogCi0gICAgbmV3U3RhY2sgPSBzcGxp
dFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOwotICAgIGJsb2NrID0gQ29udHJvbFR5
cGU6Omxvb3Aoc2lnbmF0dXJlLCBuZXdTdGFjaywgV1RGTW92ZShib2R5KSwgV1RGTW92ZShjb250
aW51YXRpb24pKTsKKyAgICBibG9jayA9IENvbnRyb2xUeXBlOjpsb29wKHNpZ25hdHVyZSwgbV9z
dGFja1NpemUsIFdURk1vdmUoYm9keSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CiAKICAgICBW
ZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBvc3JFbnRyeURhdGE7CiAgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG1fY29kZUJsb2NrLT5tX251bUFyZ3VtZW50czsgaSsrKQpAQCAtNTU0LDExICs3
OTYsMTEgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWdu
YXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ28KICAgICBjb25zdCB1aW50MzJfdCBncHJD
b3VudCA9IGNhbGxpbmdDb252ZW50aW9uLmdwckFyZ3Muc2l6ZSgpOwogICAgIGNvbnN0IHVpbnQz
Ml90IGZwckNvdW50ID0gY2FsbGluZ0NvbnZlbnRpb24uZnByQXJncy5zaXplKCk7CiAgICAgZm9y
IChpbnQzMl90IGkgPSBncHJDb3VudCArIGZwckNvdW50ICsgbnVtYmVyT2ZMTEludENhbGxlZVNh
dmVSZWdpc3RlcnM7IGkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzOyBpKyspCi0gICAgICAgIG9z
ckVudHJ5RGF0YS5hcHBlbmQoOjpKU0M6OnZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKKyAg
ICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7CiAg
ICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNl
ci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgewotICAgICAgICBFeHBy
ZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2Nv
bnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIFN0YWNrJiBleHBy
ZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjazsKICAgICAgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogZXhw
cmVzc2lvblN0YWNrKQotICAgICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChleHByZXNzaW9u
LT52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4
cHJlc3Npb24pOwogICAgIH0KIAogICAgIFdhc21Mb29wSGludDo6ZW1pdCh0aGlzKTsKQEAgLTU3
MCwxMyArODEyLDEzIEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvCiAKIGF1dG8gTExJbnRHZW5l
cmF0b3I6OmFkZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkgLT4gQ29udHJvbFR5
cGUKIHsKLSAgICByZXR1cm4gQ29udHJvbFR5cGU6OnRvcExldmVsKHNpZ25hdHVyZSwgdG1wc0Zv
clNpZ25hdHVyZShzaWduYXR1cmUpLCBuZXdMYWJlbCgpKTsKKyAgICByZXR1cm4gQ29udHJvbFR5
cGU6OnRvcExldmVsKHNpZ25hdHVyZSwgbV9zdGFja1NpemUsIG5ld0xhYmVsKCkpOwogfQogCiBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRCbG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0
YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5ld0Jsb2NrLCBTdGFjayYgbmV3U3Rh
Y2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0
dXJlLCBlbmNsb3NpbmdTdGFjayk7Ci0gICAgbmV3QmxvY2sgPSBDb250cm9sVHlwZTo6YmxvY2so
c2lnbmF0dXJlLCB0bXBzRm9yU2lnbmF0dXJlKHNpZ25hdHVyZSksIG5ld0xhYmVsKCkpOworICAg
IG5ld0Jsb2NrID0gQ29udHJvbFR5cGU6OmJsb2NrKHNpZ25hdHVyZSwgbV9zdGFja1NpemUsIG5l
d0xhYmVsKCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTU4NSwxMTcgKzgyNywxNTEgQEAg
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9j
a1NpZ25hdHVyZSBzaWduYXR1cmUsIFMKICAgICBSZWY8TGFiZWw+IGFsdGVybmF0ZSA9IG5ld0xh
YmVsKCk7CiAgICAgUmVmPExhYmVsPiBjb250aW51YXRpb24gPSBuZXdMYWJlbCgpOwogCisgICAg
bmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworCiAgICAg
V2FzbUpmYWxzZTo6ZW1pdCh0aGlzLCBjb25kaXRpb24sIGFsdGVybmF0ZS0+YmluZCh0aGlzKSk7
CiAKLSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7
Ci0gICAgcmVzdWx0ID0gQ29udHJvbFR5cGU6OmlmXyhzaWduYXR1cmUsIHRtcHNGb3JTaWduYXR1
cmUoc2lnbmF0dXJlKSwgV1RGTW92ZShhbHRlcm5hdGUpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbikp
OworICAgIHJlc3VsdCA9IENvbnRyb2xUeXBlOjppZl8oc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwg
V1RGTW92ZShhbHRlcm5hdGUpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbikpOwogICAgIHJldHVybiB7
IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbFR5cGUmIGRhdGEs
IGNvbnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbFR5cGUmIGRhdGEsIFN0YWNrJiBleHBy
ZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDb250cm9sSWY+KGRhdGEpKTsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhk
YXRhLm1fcmVzdWx0cywgY3VycmVudFN0YWNrKTsKKyAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0Fu
ZExvY2FscyhleHByZXNzaW9uU3RhY2spOwogICAgIFdhc21KbXA6OmVtaXQodGhpcywgZGF0YS5t
X2NvbnRpbnVhdGlvbi0+YmluZCh0aGlzKSk7CiAgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hh
YmxlKGRhdGEpOwogfQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJs
ZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIG1fc3RhY2tTaXpl
ID0gZGF0YS5zdGFja1NpemUoKSArIGRhdGEubV9zaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsK
KwogICAgIENvbnRyb2xJZiYgY29udHJvbCA9IFdURjo6Z2V0PENvbnRyb2xJZj4oZGF0YSk7CiAg
ICAgZW1pdExhYmVsKGNvbnRyb2wubV9hbHRlcm5hdGUuZ2V0KCkpOwotICAgIGRhdGEgPSBDb250
cm9sVHlwZTo6YmxvY2soZGF0YS5tX3NpZ25hdHVyZSwgV1RGTW92ZShkYXRhLm1fcmVzdWx0cyks
IFdURk1vdmUoZGF0YS5tX2NvbnRpbnVhdGlvbikpOworICAgIGRhdGEgPSBDb250cm9sVHlwZTo6
YmxvY2soZGF0YS5tX3NpZ25hdHVyZSwgbV9zdGFja1NpemUsIFdURk1vdmUoZGF0YS5tX2NvbnRp
bnVhdGlvbikpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFk
ZFJldHVybihjb25zdCBDb250cm9sVHlwZSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJl
dHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0
dXJuKGNvbnN0IENvbnRyb2xUeXBlJiBkYXRhLCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgaWYgKCFkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSB7
CiAgICAgICAgIFdhc21SZXRWb2lkOjplbWl0KHRoaXMpOwogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAotICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25G
b3IoKmRhdGEubV9zaWduYXR1cmUsIENhbGxSb2xlOjpDYWxsZWUpOwotICAgIHVuaWZ5VmFsdWVz
V2l0aEJsb2NrKGluZm8ucmVzdWx0cywgcmV0dXJuVmFsdWVzKTsKKyAgICAvLyBubyBuZWVkIHRv
IGRyb3Aga2VlcCBoZXJlLCBzaW5jZSB3ZSBoYXZlIHRvIG1vdmUgYW55d2F5CisgICAgdW5pZnlW
YWx1ZXNXaXRoQmxvY2soY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKCpkYXRhLm1fc2lnbmF0dXJl
KSwgcmV0dXJuVmFsdWVzKTsKICAgICBXYXNtUmV0OjplbWl0KHRoaXMpOwogCiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiBk
YXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1
cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEJyYW5j
aChDb250cm9sVHlwZSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBTdGFjayYgcmV0
dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
ZGF0YS5tX3Jlc3VsdHMsIHJldHVyblZhbHVlcyk7Ci0KICAgICBSZWZQdHI8TGFiZWw+IHRhcmdl
dCA9IGRhdGEudGFyZ2V0TGFiZWxGb3JCcmFuY2goKTsKLSAgICBpZiAoY29uZGl0aW9uKQotICAg
ICAgICBXYXNtSnRydWU6OmVtaXQodGhpcywgY29uZGl0aW9uLCB0YXJnZXQtPmJpbmQodGhpcykp
OwotICAgIGVsc2UKLSAgICAgICAgV2FzbUptcDo6ZW1pdCh0aGlzLCB0YXJnZXQtPmJpbmQodGhp
cykpOworICAgIFJlZlB0cjxMYWJlbD4gc2tpcCA9IG51bGxwdHI7CisKKyAgICBtYXRlcmlhbGl6
ZUNvbnN0YW50c0FuZExvY2FscyhyZXR1cm5WYWx1ZXMpOworCisgICAgaWYgKGNvbmRpdGlvbi5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgc2tpcCA9IG5ld0xhYmVsKCk7CisgICAgICAgIFdhc21KZmFs
c2U6OmVtaXQodGhpcywgY29uZGl0aW9uLCBza2lwLT5iaW5kKHRoaXMpKTsKKyAgICB9CisKKyAg
ICBkcm9wS2VlcChyZXR1cm5WYWx1ZXMsIGRhdGEsICFza2lwKTsKKyAgICBXYXNtSm1wOjplbWl0
KHRoaXMsIHRhcmdldC0+YmluZCh0aGlzKSk7CisKKyAgICBpZiAoc2tpcCkKKyAgICAgICAgZW1p
dExhYmVsKCpza2lwKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0
b3I6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250
cm9sVHlwZSo+JiB0YXJnZXRzLCBDb250cm9sVHlwZSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVj
dG9yPENvbnRyb2xUeXBlKj4mIHRhcmdldHMsIENvbnRyb2xUeXBlJiBkZWZhdWx0VGFyZ2V0LCBT
dGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgdW5zaWduZWQg
dGFibGVJbmRleCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYWJsZXMoKTsKLSAgICBGdW5j
dGlvbkNvZGVCbG9jazo6SnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkSnVt
cFRhYmxlKHRhcmdldHMuc2l6ZSgpKTsKKyAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2Fs
cyhleHByZXNzaW9uU3RhY2spOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0YXJn
ZXRzKQotICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayh0YXJnZXQtPm1fcmVzdWx0cywgZXhw
cmVzc2lvblN0YWNrKTsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhkZWZhdWx0VGFyZ2V0Lm1f
cmVzdWx0cywgZXhwcmVzc2lvblN0YWNrKTsKKyAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gbV9j
b2RlQmxvY2stPm51bWJlck9mSnVtcFRhYmxlcygpOworICAgIEZ1bmN0aW9uQ29kZUJsb2NrOjpK
dW1wVGFibGUmIGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRKdW1wVGFibGUodGFyZ2V0cy5z
aXplKCkgKyAxKTsKIAotICAgIFdhc21Td2l0Y2g6OmVtaXQodGhpcywgY29uZGl0aW9uLCB0YWJs
ZUluZGV4LCBkZWZhdWx0VGFyZ2V0LnRhcmdldExhYmVsRm9yQnJhbmNoKCktPmJpbmQodGhpcykp
OworICAgIFdhc21Td2l0Y2g6OmVtaXQodGhpcywgY29uZGl0aW9uLCB0YWJsZUluZGV4KTsKIAog
ICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9m
ZnNldCA9IG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwotICAgIGZvciAoY29uc3QgYXV0byYg
dGFyZ2V0IDogdGFyZ2V0cykgewotICAgICAgICBSZWZQdHI8TGFiZWw+IHRhcmdldExhYmVsID0g
dGFyZ2V0LT50YXJnZXRMYWJlbEZvckJyYW5jaCgpOworCisgICAgYXV0byBhZGRUYXJnZXQgPSBb
Jl0oQ29udHJvbFR5cGUmIHRhcmdldCkgeworICAgICAgICBSZWZQdHI8TGFiZWw+IHRhcmdldExh
YmVsID0gdGFyZ2V0LnRhcmdldExhYmVsRm9yQnJhbmNoKCk7CisKKyAgICAgICAgZ2V0RHJvcEtl
ZXBDb3VudCh0YXJnZXQsIGp1bXBUYWJsZVtpbmRleF0uc3RhcnRPZmZzZXQsIGp1bXBUYWJsZVtp
bmRleF0uZHJvcENvdW50LCBqdW1wVGFibGVbaW5kZXhdLmtlZXBDb3VudCk7CisKICAgICAgICAg
aWYgKHRhcmdldExhYmVsLT5pc0ZvcndhcmQoKSkgewogICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBtX3N3aXRjaGVzLmFkZCh0YXJnZXRMYWJlbC5nZXQoKSwgVmVjdG9yPFN3aXRjaEVudHJ5Pigp
KTsKLSAgICAgICAgICAgIEFTU0VSVCghanVtcFRhYmxlW2luZGV4XSk7Ci0gICAgICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh7IG9mZnNldCwgJmp1bXBUYWJsZVtpbmRleCsr
XSB9KTsKKyAgICAgICAgICAgIEFTU0VSVCghanVtcFRhYmxlW2luZGV4XS50YXJnZXQpOworICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoU3dpdGNoRW50cnkgeyBvZmZz
ZXQsICZqdW1wVGFibGVbaW5kZXgrK10udGFyZ2V0IH0pOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaW50IGp1bXBUYXJnZXQgPSB0YXJnZXRMYWJlbC0+YmluZCh0aGlzKS50YXJnZXQo
KTsKKyAgICAgICAgICAgIGludCBqdW1wVGFyZ2V0ID0gdGFyZ2V0TGFiZWwtPmxvY2F0aW9uKCkg
LSBvZmZzZXQ7CiAgICAgICAgICAgICBBU1NFUlQoanVtcFRhcmdldCk7Ci0gICAgICAgICAgICBq
dW1wVGFibGVbaW5kZXgrK10gPSBqdW1wVGFyZ2V0OworICAgICAgICAgICAganVtcFRhYmxlW2lu
ZGV4KytdLnRhcmdldCA9IGp1bXBUYXJnZXQ7CiAgICAgICAgIH0KLSAgICB9CisgICAgfTsKIAor
ICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykKKyAgICAgICAgYWRkVGFyZ2V0
KCp0YXJnZXQpOworICAgIGFkZFRhcmdldChkZWZhdWx0VGFyZ2V0KTsKIAogICAgIHJldHVybiB7
IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50
cnksIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gTExJbnRHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIFN0YWNrJiBl
eHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBDb250cm9sVHlwZSYgZGF0
YSA9IGVudHJ5LmNvbnRyb2xEYXRhOwotCi0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PENvbnRyb2xMb29wPihkYXRhKSkKLSAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZGF0YS5t
X3Jlc3VsdHMsIGV4cHJlc3Npb25TdGFjayk7Ci0KLSAgICByZXR1cm4gYWRkRW5kVG9VbnJlYWNo
YWJsZShlbnRyeSwgZXhwcmVzc2lvblN0YWNrKTsKKyAgICAvLyBGSVhNRTogV2Ugb25seSBuZWVk
IHRvIG1hdGVyaWFsaXplIGNvbnN0YW50cyBoZXJlIGlmIHRoZXJlIGV4aXN0cyBhIGp1bXAgdG8g
dGhpcyBsYWJlbAorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDM2NTcKKyAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNzaW9uU3Rh
Y2spOworICAgIHJldHVybiBhZGRFbmRUb1VucmVhY2hhYmxlKGVudHJ5LCBleHByZXNzaW9uU3Rh
Y2ssIGZhbHNlKTsKIH0KIAogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hh
YmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUo
Q29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgYm9vbCB1
bnJlYWNoYWJsZSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENvbnRyb2xUeXBlJiBkYXRhID0g
ZW50cnkuY29udHJvbERhdGE7CiAKLSAgICBlbWl0TGFiZWwoKmRhdGEubV9jb250aW51YXRpb24p
OworICAgIFJFTEVBU0VfQVNTRVJUKHVucmVhY2hhYmxlIHx8IG1fc3RhY2tTaXplID09IGRhdGEu
c3RhY2tTaXplKCkgKyBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKIAotICAgIGlm
ICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sTG9vcD4oZGF0YSkpCi0gICAgICAgIGVu
dHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZFZlY3RvcihkYXRhLm1fcmVzdWx0cyk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fc2ln
bmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpIDwgZXhwcmVz
c2lvblN0YWNrLnNpemUoKSkKLSAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Np
b25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQobmV3VGVt
cG9yYXJ5KCkpOwotICAgICAgICB9CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9zaWduYXR1cmUtPnJldHVy
bkNvdW50KCk7ICsraSkgeworICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvIGEgY29uc2lz
dGVuY3kgY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGp1c3QgcmVzZXQgdGhlIHN0YWNrIHNpemUKKyAg
ICAgICAgLy8gYXJlIHB1c2hpbmcgbmV3IHZhbHVlcywgd2hpbGUgd2UgYWxyZWFkeSBoYXZlIHRo
ZSBzYW1lIHZhbHVlcyBpbiB0aGUgc3RhY2suCisgICAgICAgIC8vIFRoZSBvbmx5IHJlYXNvbiB3
ZSBkbyB0aGluZ3MgdGhpcyB3YXkgaXMgc28gdGhhdCBpdCBhbHNvIHdvcmtzIGZvciB1bnJlYWNo
YWJsZSBibG9ja3MsCisgICAgICAgIC8vIHNpbmNlIHRoZXkgbWlnaHQgbm90IGhhdmUgdGhlIHJp
Z2h0IG51bWJlciBvZiB2YWx1ZXMgaW4gdGhlIGV4cHJlc3Npb24gc3RhY2suCisgICAgICAgIC8v
IEluc3RlYWQsIHdlIGRvIGEgc3RyaWN0ZXIgY29uc2lzdGVuY3kgY2hlY2sgYmVsb3cuCisgICAg
ICAgIGF1dG8gdG1wID0gcHVzaChOb0NvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICBBU1NFUlRf
VU5VU0VEKGV4cHJlc3Npb25TdGFjaywgdW5yZWFjaGFibGUgfHwgdG1wID09IGV4cHJlc3Npb25T
dGFja1tpXSk7CisgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZCh0
bXApOworICAgIH0KKworICAgIGlmIChtX2xhc3RPcGNvZGVJRCA9PSB3YXNtX2ptcCAmJiBkYXRh
Lm1fY29udGludWF0aW9uLT51bnJlc29sdmVkSnVtcHMoKS5zaXplKCkgPT0gMSAmJiBkYXRhLm1f
Y29udGludWF0aW9uLT51bnJlc29sdmVkSnVtcHMoKVswXSA9PSBzdGF0aWNfY2FzdDxpbnQ+KG1f
bGFzdEluc3RydWN0aW9uLm9mZnNldCgpKSkgeworICAgICAgICBtX2xhc3RPcGNvZGVJRCA9IHdh
c21fdW5yZWFjaGFibGU7CisgICAgICAgIG1fd3JpdGVyLnJld2luZChtX2xhc3RJbnN0cnVjdGlv
bik7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRMYWJlbCgqZGF0YS5tX2NvbnRpbnVhdGlvbik7
CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjplbmRUb3BMZXZl
bChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2sp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChleHByZXNzaW9uU3RhY2su
c2l6ZSgpID09IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CisKKyAgICBpZiAoIXNpZ25hdHVy
ZS0+cmV0dXJuQ291bnQoKSkgeworICAgICAgICBXYXNtUmV0Vm9pZDo6ZW1pdCh0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICAvLyBUb3BMZXZlbCBkb2VzIG5vdCBoYXZl
IGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZW1pdCBhIHJl
dHVybiBoZXJlLgotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUb3BMZXZl
bD4oZGF0YSkpCi0gICAgICAgIHJldHVybiBhZGRSZXR1cm4oZGF0YSwgZW50cnkuZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2spOworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB1bmlmeVZhbHVl
c1dpdGhCbG9jayhjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoKnNpZ25hdHVyZSksIGV4cHJlc3Np
b25TdGFjayk7CisgICAgV2FzbVJldDo6ZW1pdCh0aGlzKTsKIAogICAgIHJldHVybiB7IH07CiB9
CkBAIC03MDMsMTMgKzk3OSwxMyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVh
Y2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZQogYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvbkxp
c3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7Ci0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24g
aW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUpOworICAgIExMSW50Q2FsbEluZm9y
bWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoc2lnbmF0dXJlKTsKICAgICB1
bmlmeVZhbHVlc1dpdGhCbG9jayhpbmZvLmFyZ3VtZW50cywgYXJncyk7Ci0gICAgcmVzdWx0cyA9
IFdURk1vdmUoaW5mby5yZXN1bHRzKTsKICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQog
ICAgICAgICBXYXNtQ2FsbDo6ZW1pdCh0aGlzLCBmdW5jdGlvbkluZGV4LCBpbmZvLnN0YWNrT2Zm
c2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVudHMpOwogICAgIGVsc2UKICAgICAgICAgV2Fz
bUNhbGxOb1Rsczo6ZW1pdCh0aGlzLCBmdW5jdGlvbkluZGV4LCBpbmZvLnN0YWNrT2Zmc2V0LCBp
bmZvLm51bWJlck9mU3RhY2tBcmd1bWVudHMpOworICAgIGluZm8uY29tbWl0UmVzdWx0cyhyZXN1
bHRzKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC03MjIsMjAgKzk5OCwyMCBAQCBhdXRvIExM
SW50R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYQogICAgIEFTU0VSVChtX2luZm8udGFibGVDb3VudCgpID4gdGFibGVJ
bmRleCk7CiAgICAgQVNTRVJUKG1faW5mby50YWJsZXNbdGFibGVJbmRleF0udHlwZSgpID09IFRh
YmxlRWxlbWVudFR5cGU6OkZ1bmNyZWYpOwogCi0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5m
byA9IGNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUpOworICAgIExMSW50Q2FsbEluZm9ybWF0
aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoc2lnbmF0dXJlKTsKICAgICB1bmlm
eVZhbHVlc1dpdGhCbG9jayhpbmZvLmFyZ3VtZW50cywgYXJncyk7Ci0gICAgcmVzdWx0cyA9IFdU
Rk1vdmUoaW5mby5yZXN1bHRzKTsKICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQogICAg
ICAgICBXYXNtQ2FsbEluZGlyZWN0OjplbWl0KHRoaXMsIGNhbGxlZUluZGV4LCBtX2NvZGVCbG9j
ay0+YWRkU2lnbmF0dXJlKHNpZ25hdHVyZSksIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVy
T2ZTdGFja0FyZ3VtZW50cywgdGFibGVJbmRleCk7CiAgICAgZWxzZQogICAgICAgICBXYXNtQ2Fs
bEluZGlyZWN0Tm9UbHM6OmVtaXQodGhpcywgY2FsbGVlSW5kZXgsIG1fY29kZUJsb2NrLT5hZGRT
aWduYXR1cmUoc2lnbmF0dXJlKSwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNr
QXJndW1lbnRzLCB0YWJsZUluZGV4KTsKKyAgICBpbmZvLmNvbW1pdFJlc3VsdHMocmVzdWx0cyk7
CiAKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRSZWZJc051
bGwoRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSB2YWx1ZTsKKyAgICByZXN1bHQgPSBwdXNoKCk7CiAg
ICAgV2FzbVJlZklzTnVsbDo6ZW1pdCh0aGlzLCByZXN1bHQsIHZhbHVlKTsKIAogICAgIHJldHVy
biB7IH07CkBAIC03NDMsNyArMTAxOSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJlZklz
TnVsbChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKIAogYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG5ld1RlbXBvcmFy
eSgpOworICAgIHJlc3VsdCA9IHB1c2goKTsKICAgICBXYXNtUmVmRnVuYzo6ZW1pdCh0aGlzLCBy
ZXN1bHQsIGluZGV4KTsKIAogICAgIHJldHVybiB7IH07CkBAIC03NTEsNyArMTAyNyw3IEBAIGF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJlZkZ1bmModWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlR2V0
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gaW5kZXg7CisgICAg
cmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21UYWJsZUdldDo6ZW1pdCh0aGlzLCByZXN1bHQsIGlu
ZGV4LCB0YWJsZUluZGV4KTsKIAogICAgIHJldHVybiB7IH07CkBAIC03NjYsNyArMTA0Miw3IEBA
IGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4
cHJlc3Npb25UeXBlIGluZGV4LCBFeHByCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRhYmxl
U2l6ZSh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgcmVzdWx0ID0g
cHVzaCgpOwogICAgIFdhc21UYWJsZVNpemU6OmVtaXQodGhpcywgcmVzdWx0LCB0YWJsZUluZGV4
KTsKIAogICAgIHJldHVybiB7IH07CkBAIC03NzQsNyArMTA1MCw3IEBAIGF1dG8gTExJbnRHZW5l
cmF0b3I6OmFkZFRhYmxlU2l6ZSh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCB0
YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IGZp
bGw7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21UYWJsZUdyb3c6OmVtaXQodGhpcywg
cmVzdWx0LCBmaWxsLCBkZWx0YSwgdGFibGVJbmRleCk7CiAKICAgICByZXR1cm4geyB9OwpAQCAt
Nzk2LDcgKzEwNzIsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+
IFBhcnRpYWxSZXN1bHQKIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0g
bmV3VGVtcG9yYXJ5KCk7CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21DdXJyZW50TWVt
b3J5OjplbWl0KHRoaXMsIHJlc3VsdCk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtODA0LDcgKzEw
ODAsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
R3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IGRlbHRhOworICAgIHJlc3VsdCA9IHB1
c2goKTsKICAgICBXYXNtR3Jvd01lbW9yeTo6ZW1pdCh0aGlzLCByZXN1bHQsIGRlbHRhKTsKIAog
ICAgIHJldHVybiB7IH07CkBAIC04MTIsNyArMTA4OCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6
OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBjb25k
aXRpb247CisgICAgcmVzdWx0ID0gcHVzaCgpOwogICAgIFdhc21TZWxlY3Q6OmVtaXQodGhpcywg
cmVzdWx0LCBjb25kaXRpb24sIG5vblplcm8sIHplcm8pOwogCiAgICAgcmV0dXJuIHsgfTsKQEAg
LTgyMCw3ICsxMDk2LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywKIAogYXV0byBMTEludEdl
bmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
LSAgICByZXN1bHQgPSBwb2ludGVyOworICAgIHJlc3VsdCA9IHB1c2goKTsKICAgICBzd2l0Y2gg
KG9wKSB7CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6CiAgICAgICAgIFdhc21JMzJM
b2FkOFM6OmVtaXQodGhpcywgcmVzdWx0LCBwb2ludGVyLCBvZmZzZXQpOwpAQCAtOTMyLDE2ICsx
MjA4LDggQEAgdm9pZCBHZW5lcmljTGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjo6c2V0TG9j
YXRpb24oQnl0ZWNvZGVHZW5lcmF0b3JCYXNlPFdhc20KICAgICAgICAgQ0FTRShXYXNtSm1wKQog
ICAgICAgICBDQVNFKFdhc21KdHJ1ZSkKICAgICAgICAgQ0FTRShXYXNtSmZhbHNlKQotICAgICAg
ICBjYXNlIFdhc21Td2l0Y2g6Om9wY29kZUlEOiB7Ci0gICAgICAgICAgICBBU1NFUlQoKCFpbnN0
cnVjdGlvbi0+YXM8V2FzbVN3aXRjaCwgV2FzbU9wY29kZVRyYWl0cz4oKS5tX2RlZmF1bHRUYXJn
ZXQpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9uLT5jYXN0PFdhc21Td2l0Y2gsIFdhc21PcGNv
ZGVUcmFpdHM+KCktPnNldERlZmF1bHRUYXJnZXQoQm91bmRMYWJlbCh0YXJnZXQpLCBbJl0oKSB7
Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1fY29kZUJsb2NrLT5hZGRPdXRPZkxpbmVKdW1w
VGFyZ2V0KGluc3RydWN0aW9uLm9mZnNldCgpLCB0YXJnZXQpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBCb3VuZExhYmVsKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KICN1bmRlZiBDQVNFCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TExJbnRQbGFuLmNwcAppbmRleCA3NzJiNTE5NjZlNDU3ZDI5NjhiYzY1YjMxMDkzOGRkZmJjMmIx
MGY2Li5iY2VlYjI4NmJhM2NiMzE5N2ViZmI4MGI0ZTVlZjUxNmZhYjRkNTlhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcApAQCAtODAsMTAgKzgwLDEw
IEBAIHZvaWQgTExJbnRQbGFuOjpjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRl
eCkKICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUo
KnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7CiAKICAgICBpZiAobV9leHBvcnRlZEZ1bmN0aW9uSW5k
aWNlcy5jb250YWlucyhmdW5jdGlvbkluZGV4KSB8fCBtX21vZHVsZUluZm9ybWF0aW9uLT5yZWZl
cmVuY2VkRnVuY3Rpb25zKCkuY29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICBFbWJlZGVyVG9XYXNtRnVuY3Rp
b24gZW50cnk7CiAgICAgICAgIGVudHJ5LmppdCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigp
OwogICAgICAgICBlbnRyeS5mdW5jdGlvbiA9IG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKCplbnRy
eS5qaXQsIHNpZ25hdHVyZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRl
eF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCk7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgYXV0byByZXN1
bHQgPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuYWRkKGZ1bmN0aW9uSW5kZXgs
IFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5p
c05ld0VudHJ5KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlk
YXRlLmNwcAppbmRleCBjNWEwODE1NDVkNDU0Mzk1YzBkMGJiZDRhMzAwMzY5MmEwMTdiY2M3Li41
YTNmNDNjM2JkMGFkOTJlM2FlYzFhZDY1Mzc2NzkzMDA2NWI4ZWM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKQEAgLTE2MSw2ICsxNjEsNyBAQCBwdWJs
aWM6CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDdXJyZW50TWVtb3J5KEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOwogCiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRV
bnJlYWNoYWJsZSgpIHsgcmV0dXJuIHsgfTsgfQorICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUsIGNvbnN0IFN0YWNrJikgeyByZXR1cm4geyB9
OyB9CiAKICAgICAvLyBDYWxscwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2Fs
bCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYpOwpAQCAtMTc2LDYgKzE3Nyw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBT
dGFjayopOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiopIHsg
fQogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpIHsgfQorICAgIHZvaWQgZGlkUG9w
VmFsdWVGcm9tU3RhY2soKSB7IH0KIAogcHJpdmF0ZToKICAgICBSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHVuaWZ5KGNvbnN0IFN0YWNrJiwgY29uc3QgQ29udHJvbERhdGEmKTsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTM2ZjU1NTY2
ZjgyOTA4Yzg4ZDlkMDA2M2Q2MGI0MmQ3NWIxZTFmNy4uNmViMjkzZDUwMDI4NmYzYTExYzliZDE0
ZmJkZGI5OTFkYzU2MDk4ZSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0xMS0yMSAgVGFkZXUgWmFnYWxs
byAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViQXNzZW1ibHldIEltcHJvdmUg
V2FzbTo6TExJbnRHZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNDA5MgorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgor
CisgICAgICAgICogd2FzbS9zdHJlc3Mvc2V0LWxvY2FsLWVuY2xvc2VkLXN0YWNrLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydC5lcS5pbnN0YW5jZS5leHBvcnRzLmZvbyk6CisgICAgICAgIChh
c3NlcnQuZXEpOgorCiAyMDE5LTExLTExICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bz
b255LmNvbT4KIAogICAgICAgICBVVEMgb2Zmc2V0IGZvciBTYW1vYSBpcyBtaXNjYWxjdWxhdGVk
IHdoZW4gIUhBVkUoVElNRUdNKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9zZXQt
bG9jYWwtZW5jbG9zZWQtc3RhY2suanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3NldC1sb2NhbC1l
bmNsb3NlZC1zdGFjay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZTdmNDQyOGE0MGQ0MjA0NTAyM2VhZWQxZTgy
NmFmYzhmMWIyYjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9zZXQt
bG9jYWwtZW5jbG9zZWQtc3RhY2suanMKQEAgLTAsMCArMSw0MiBAQAoraW1wb3J0ICogYXMgYXNz
ZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKK2ltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSAnLi4v
d2FidC13cmFwcGVyLmpzJzsKKworeworICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFudGlhdGUo
YAorICAgIChmdW5jIChleHBvcnQgImZvbyIpIChwYXJhbSBpMzIpIChyZXN1bHQgaTMyKQorICAg
ICAgICAobG9jYWwuZ2V0IDApCisgICAgICAgICAgICAoYmxvY2sKKyAgICAgICAgICAgICAgICAo
bG9jYWwuc2V0IDAgKGkzMi5jb25zdCAweGJiYWRiZWVmKSkpKQorICAgIGApOworCisgICAgYXNz
ZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDMpLCAzKTsKK30KKworeworICAgIGNvbnN0IGlu
c3RhbmNlID0gaW5zdGFudGlhdGUoYAorICAgIChmdW5jICRjb25zdCAocmVzdWx0IGkzMikKKyAg
ICAgICAgICAoaTMyLmNvbnN0IDQyKQorICAgICAgICAgICkKKworICAgIChmdW5jIChleHBvcnQg
ImZvbyIpIChwYXJhbSBpMzIpIChyZXN1bHQgaTMyIGkzMikKKyAgICAgICAgICAgIChjYWxsICRj
b25zdCkKKyAgICAgICAgICAgIChsb2NhbC5nZXQgMCkKKyAgICAgICAgICAgIChibG9jayAocGFy
YW0gaTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAgICAgICAgICAgICAgICAgICkpCisgICAgYCk7
CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mb28oMyksIFs0MiwgM10pOworfQor
Cit7CisgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW50aWF0ZShgCisgICAgKGZ1bmMgKGV4cG9y
dCAiZm9vIikgKHBhcmFtIGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIChsb2NhbC5nZXQgMCkK
KyAgICAgICAgKGlmIChsb2NhbC5nZXQgMCkKKyAgICAgICAgICAgICAgKHRoZW4gKGxvY2FsLnNl
dCAwIChpMzIuY29uc3QgNDIpKSkKKyAgICAgICAgICAoZWxzZSAobG9jYWwuc2V0IDAgKGkzMi5j
b25zdCAxMykpKSkpCisgICAgYCk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5m
b28oMSksIDEpOworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygwKSwgMCk7Cit9
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>