<?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>165716</bug_id>
          
          <creation_ts>2016-12-09 20:25:46 -0800</creation_ts>
          <short_desc>WebAssembly: implement the table section and table import</short_desc>
          <delta_ts>2016-12-13 12:33:44 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1258557</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-09 20:25:46 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258948</commentid>
    <comment_count>1</comment_count>
      <attachid>296889</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-11 18:46:02 -0800</bug_when>
    <thetext>Created attachment 296889
WIP

Most of the JS API is implemented I think. I just need to write the JSWebAssemblyTablePrototype functions now.
I haven&apos;t tested anything yet, either, so it could be broken somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258990</commentid>
    <comment_count>2</comment_count>
      <attachid>296898</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-12 01:20:41 -0800</bug_when>
    <thetext>Created attachment 296898
WIP

More is done. Basically, the main API is done. I now need to teach call_indirect about tables, and then also teach our test builder about tables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259140</commentid>
    <comment_count>3</comment_count>
      <attachid>296942</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-12 11:45:56 -0800</bug_when>
    <thetext>Created attachment 296942
WIP

It turns out we misread the spec a bit on call_indirect. It only calls into the table index space. So I&apos;ve changed that to be the case here. I think the entire system is set up to use tables, I&apos;m going to implement testing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259186</commentid>
    <comment_count>4</comment_count>
      <attachid>296949</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-12 13:44:09 -0800</bug_when>
    <thetext>Created attachment 296949
WIP

Maybe everything is working. I&apos;ve written some basic table test. I now need to remove old call_indirect tests that were based on a misinterpretation of the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259265</commentid>
    <comment_count>5</comment_count>
      <attachid>296966</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-12 16:46:26 -0800</bug_when>
    <thetext>Created attachment 296966
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259269</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-12 16:48:54 -0800</bug_when>
    <thetext>Attachment 296966 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:674:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:679:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/wasm/WasmFunctionParser.h:395:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:237:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259271</commentid>
    <comment_count>7</comment_count>
      <attachid>296966</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-12 16:50:47 -0800</bug_when>
    <thetext>Comment on attachment 296966
patch

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

&gt; JSTests/wasm/Builder.js:329
&gt; +        } else {
&gt; +            assert.truthy(typeof signature === &quot;number&quot;);
&gt; +            const typeSection = builder._getSection(&quot;Type&quot;);
&gt; +            assert.truthy(!!typeSection);
&gt; +            assert.truthy(signature &lt; typeSection.data.length);
&gt; +            type = signature;
&gt; +            signature = typeSection.data[signature];
&gt; +            assert.hasObjectProperty(signature, &quot;params&quot;, `Expect function signature to be an object with a &quot;params&quot; field, got &quot;${signature}&quot;`);
&gt; +            params = signature.params;
&gt; +        }

This now allows us to provide an index into the type section instead of the {params: ..., ret: ...} object.

&gt; JSTests/wasm/Builder.js:429
&gt;                  // FIXME Implement table https://bugs.webkit.org/show_bug.cgi?id=164135

This should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259272</commentid>
    <comment_count>8</comment_count>
      <attachid>296969</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-12 16:52:38 -0800</bug_when>
    <thetext>Created attachment 296969
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259274</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-12 16:54:36 -0800</bug_when>
    <thetext>Attachment 296969 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:674:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:679:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/wasm/WasmFunctionParser.h:395:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:237:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259286</commentid>
    <comment_count>10</comment_count>
      <attachid>296966</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-12 17:29:55 -0800</bug_when>
    <thetext>Comment on attachment 296966
patch

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

&gt; JSTests/wasm/Builder.js:324
&gt; +            assert.truthy(signature &lt; typeSection.data.length);

The above two should only fire in checked mode: they&apos;re fundamentally a breakage of the Module binary format&apos;s invariants, but they&apos;re a well-formed Module which we can assemble in this builder. We therefore want to be able to assemble such an invalid Module, but only in unchecked mode.

&gt; JSTests/wasm/Builder_WebAssemblyBinary.js:32
&gt; +function putResizableLimits(bin, initial, maximum) {

Arrow-func *all* the things!

&gt; JSTests/wasm/function-tests/table-basic-2.js:19
&gt; +            .Function(&quot;foo&quot;, 0 /*[&apos;i32&apos;, &apos;i32&apos;] =&gt; &apos;i32&apos;*/)

Does this not get uniqued if you provide it explicitly?

&gt; JSTests/wasm/function-tests/table-basic.js:51
&gt; +// FIXME: make this work cross module. The reason it doesn&apos;t

https://bugs.webkit.org/show_bug.cgi?id=165511

&gt; JSTests/wasm/js-api/table.js:16
&gt; +}

That&apos;s:
assert.throws(() =&gt; new WebAssembly.Module(bin), WebAssembly.CompileError, `Expected message`);

&gt; Source/JavaScriptCore/wasm/WasmFormat.h:154
&gt; +        ASSERT(!*this);

Why?

&gt; Source/JavaScriptCore/wasm/WasmFormat.h:163
&gt; +        ASSERT(*this);

Why?

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:341
&gt; +    static constexpr int8_t anyfuncType = -16;

This should come from the auto-generated code.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyTable.cpp:60
&gt; +    m_jsFunctions = MallocPtr&lt;WriteBarrier&lt;WebAssemblyFunction&gt;&gt;::malloc(sizeof(WriteBarrier&lt;WebAssemblyFunction&gt;) * m_size);

What happens if allocation fails? We use the try* things elsewhere to fail gracefully if a silly user gives us huge numbers.
We should also check that these multiplications can&apos;t overflow beforehand (otherwise we&apos;d under-allocate, and then write over some other memory). That check should probably be elsewhere though (since e.g. grow needs it too).

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyTable.cpp:101
&gt; +    m_jsFunctions.realloc(sizeof(WriteBarrier&lt;WebAssemblyFunction&gt;) * newSize);

It aborts on failure?

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:144
&gt; +            // This should be specified in the JS API, but isn&apos;t.

Issue number on GitHub?

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyTableConstructor.cpp:63
&gt; +    // FIXME: this function is really close to WebAssembly.Memory construcotr, we could probably

Typo.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyTablePrototype.cpp:189
&gt; +    JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION(&quot;set&quot;, webAssemblyTableProtoFuncSet, DontEnum, 2);

Can&apos;t you register all of these using the .lut.h files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259295</commentid>
    <comment_count>11</comment_count>
      <attachid>296966</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-12 17:47:27 -0800</bug_when>
    <thetext>Comment on attachment 296966
patch

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

&gt;&gt; JSTests/wasm/Builder.js:324
&gt;&gt; +            assert.truthy(signature &lt; typeSection.data.length);
&gt; 
&gt; The above two should only fire in checked mode: they&apos;re fundamentally a breakage of the Module binary format&apos;s invariants, but they&apos;re a well-formed Module which we can assemble in this builder. We therefore want to be able to assemble such an invalid Module, but only in unchecked mode.

I agree with this, but it looks like we depend on this having real values below. I&apos;m not quite sure how to make the two things compatible.

&gt;&gt; JSTests/wasm/Builder_WebAssemblyBinary.js:32
&gt;&gt; +function putResizableLimits(bin, initial, maximum) {
&gt; 
&gt; Arrow-func *all* the things!

Why?

&gt;&gt; JSTests/wasm/function-tests/table-basic-2.js:19
&gt;&gt; +            .Function(&quot;foo&quot;, 0 /*[&apos;i32&apos;, &apos;i32&apos;] =&gt; &apos;i32&apos;*/)
&gt; 
&gt; Does this not get uniqued if you provide it explicitly?

It does.

&gt;&gt; JSTests/wasm/js-api/table.js:16
&gt;&gt; +}
&gt; 
&gt; That&apos;s:
&gt; assert.throws(() =&gt; new WebAssembly.Module(bin), WebAssembly.CompileError, `Expected message`);

I&apos;m using indexOf, so I don&apos;t think it&apos;s the same. I guess I could move to full error messages and use this.

&gt;&gt; Source/JavaScriptCore/wasm/WasmFormat.h:154
&gt;&gt; +        ASSERT(!*this);
&gt; 
&gt; Why?

To assert something we depend on.

&gt;&gt; Source/JavaScriptCore/wasm/WasmFormat.h:163
&gt;&gt; +        ASSERT(*this);
&gt; 
&gt; Why?

Ditto

&gt;&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:341
&gt;&gt; +    static constexpr int8_t anyfuncType = -16;
&gt; 
&gt; This should come from the auto-generated code.

Yeah I thought this might. How do I get this number from auto generated code?

&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyTable.cpp:60
&gt;&gt; +    m_jsFunctions = MallocPtr&lt;WriteBarrier&lt;WebAssemblyFunction&gt;&gt;::malloc(sizeof(WriteBarrier&lt;WebAssemblyFunction&gt;) * m_size);
&gt; 
&gt; What happens if allocation fails? We use the try* things elsewhere to fail gracefully if a silly user gives us huge numbers.
&gt; We should also check that these multiplications can&apos;t overflow beforehand (otherwise we&apos;d under-allocate, and then write over some other memory). That check should probably be elsewhere though (since e.g. grow needs it too).

I&apos;m pretty sure bmalloc will crash if its allocation is too large.

Yeah, I was assuming the multiplications won&apos;t overflow because this is only on 64 bit platforms. But I&apos;m actually not sure if the compiler will emit a 64bit or 32bit multiplication here.

&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyTable.cpp:101
&gt;&gt; +    m_jsFunctions.realloc(sizeof(WriteBarrier&lt;WebAssemblyFunction&gt;) * newSize);
&gt; 
&gt; It aborts on failure?

I think this crashes on failure.

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:144
&gt;&gt; +            // This should be specified in the JS API, but isn&apos;t.
&gt; 
&gt; Issue number on GitHub?

Sorry I should remove this FIXME. My question was answered. It should only the the current size, not the &quot;initial&quot; size. This also means we have a bug for Memory imports where we just check the initialization start size, not the dynamic size.

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyTableConstructor.cpp:63
&gt;&gt; +    // FIXME: this function is really close to WebAssembly.Memory construcotr, we could probably
&gt; 
&gt; Typo.

I&apos;m going to remove this FIXME, it&apos;s different enough to stay separate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259301</commentid>
    <comment_count>12</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-12 18:09:00 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 296966 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=296966&amp;action=review
&gt; 
&gt; &gt;&gt; JSTests/wasm/Builder.js:324
&gt; &gt;&gt; +            assert.truthy(signature &lt; typeSection.data.length);
&gt; &gt; 
&gt; &gt; The above two should only fire in checked mode: they&apos;re fundamentally a breakage of the Module binary format&apos;s invariants, but they&apos;re a well-formed Module which we can assemble in this builder. We therefore want to be able to assemble such an invalid Module, but only in unchecked mode.
&gt; 
&gt; I agree with this, but it looks like we depend on this having real values
&gt; below. I&apos;m not quite sure how to make the two things compatible.

Could you file a FIXME for it? I can do that later, agreed it&apos;s not the most important.


&gt; &gt;&gt; JSTests/wasm/Builder_WebAssemblyBinary.js:32
&gt; &gt;&gt; +function putResizableLimits(bin, initial, maximum) {
&gt; &gt; 
&gt; &gt; Arrow-func *all* the things!
&gt; 
&gt; Why?

Because that&apos;s the style around these files :=&gt;)
(that&apos;s an arrow fun smilie)

&gt; &gt;&gt; JSTests/wasm/function-tests/table-basic-2.js:19
&gt; &gt;&gt; +            .Function(&quot;foo&quot;, 0 /*[&apos;i32&apos;, &apos;i32&apos;] =&gt; &apos;i32&apos;*/)
&gt; &gt; 
&gt; &gt; Does this not get uniqued if you provide it explicitly?
&gt; 
&gt; It does.

I&apos;d use that syntax then, instead of explicit 0.


&gt; &gt;&gt; Source/JavaScriptCore/wasm/WasmFormat.h:154
&gt; &gt;&gt; +        ASSERT(!*this);
&gt; &gt; 
&gt; &gt; Why?

Ah sorry, I misread and thought it was an assert that this wasn&apos;t non-null! That would have been UB :-)


&gt; &gt;&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:341
&gt; &gt;&gt; +    static constexpr int8_t anyfuncType = -16;
&gt; &gt; 
&gt; &gt; This should come from the auto-generated code.
&gt; 
&gt; Yeah I thought this might. How do I get this number from auto generated code?

It&apos;s just &quot;Anyfunc&quot;, from the auto-gem WasmOps.h.


&gt; &gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyTable.cpp:60
&gt; &gt;&gt; +    m_jsFunctions = MallocPtr&lt;WriteBarrier&lt;WebAssemblyFunction&gt;&gt;::malloc(sizeof(WriteBarrier&lt;WebAssemblyFunction&gt;) * m_size);
&gt; &gt; 
&gt; &gt; What happens if allocation fails? We use the try* things elsewhere to fail gracefully if a silly user gives us huge numbers.
&gt; &gt; We should also check that these multiplications can&apos;t overflow beforehand (otherwise we&apos;d under-allocate, and then write over some other memory). That check should probably be elsewhere though (since e.g. grow needs it too).
&gt; 
&gt; I&apos;m pretty sure bmalloc will crash if its allocation is too large.

I&apos;d rather use the try* variants, or file a bug to do so.


&gt; Yeah, I was assuming the multiplications won&apos;t overflow because this is only
&gt; on 64 bit platforms. But I&apos;m actually not sure if the compiler will emit a
&gt; 64bit or 32bit multiplication here.

Yeah we should check that, overflow would be a Bad Thing, and it can&apos;t go above 32-bit in a useful way anyways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259318</commentid>
    <comment_count>13</comment_count>
      <attachid>296966</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-12 18:57:45 -0800</bug_when>
    <thetext>Comment on attachment 296966
patch

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

&gt;&gt;&gt;&gt; JSTests/wasm/Builder.js:324
&gt;&gt;&gt;&gt; +            assert.truthy(signature &lt; typeSection.data.length);
&gt;&gt;&gt; 
&gt;&gt;&gt; The above two should only fire in checked mode: they&apos;re fundamentally a breakage of the Module binary format&apos;s invariants, but they&apos;re a well-formed Module which we can assemble in this builder. We therefore want to be able to assemble such an invalid Module, but only in unchecked mode.
&gt;&gt; 
&gt;&gt; I agree with this, but it looks like we depend on this having real values below. I&apos;m not quite sure how to make the two things compatible.
&gt; 
&gt; Could you file a FIXME for it? I can do that later, agreed it&apos;s not the most important.

done.

&gt;&gt;&gt;&gt; JSTests/wasm/Builder_WebAssemblyBinary.js:32
&gt;&gt;&gt;&gt; +function putResizableLimits(bin, initial, maximum) {
&gt;&gt;&gt; 
&gt;&gt;&gt; Arrow-func *all* the things!
&gt;&gt; 
&gt;&gt; Why?
&gt; 
&gt; Because that&apos;s the style around these files :=&gt;)
&gt; (that&apos;s an arrow fun smilie)

ok.

&gt;&gt;&gt;&gt; JSTests/wasm/function-tests/table-basic-2.js:19
&gt;&gt;&gt;&gt; +            .Function(&quot;foo&quot;, 0 /*[&apos;i32&apos;, &apos;i32&apos;] =&gt; &apos;i32&apos;*/)
&gt;&gt;&gt; 
&gt;&gt;&gt; Does this not get uniqued if you provide it explicitly?
&gt;&gt; 
&gt;&gt; It does.
&gt; 
&gt; I&apos;d use that syntax then, instead of explicit 0.

I need to test my new code that handles indices.

&gt;&gt;&gt; JSTests/wasm/js-api/table.js:16
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; That&apos;s:
&gt;&gt; assert.throws(() =&gt; new WebAssembly.Module(bin), WebAssembly.CompileError, `Expected message`);
&gt; 
&gt; I&apos;m using indexOf, so I don&apos;t think it&apos;s the same. I guess I could move to full error messages and use this.

I&apos;m going to skip doing this since the error message I get is tied to the exact code evaluated that produces the error. That seems unnecessarily fragile to me. However, I&apos;ll strengthen my assertion here to test `e instanceof WebAssembly.CompileError`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259321</commentid>
    <comment_count>14</comment_count>
      <attachid>296981</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-12 19:03:22 -0800</bug_when>
    <thetext>Created attachment 296981
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259322</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-12 19:06:12 -0800</bug_when>
    <thetext>Attachment 296981 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmFunctionParser.h:395:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259404</commentid>
    <comment_count>16</comment_count>
      <attachid>296981</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 09:03:12 -0800</bug_when>
    <thetext>Comment on attachment 296981
patch

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

&gt; Source/JavaScriptCore/wasm/WasmFormat.h:224
&gt; +    explicit operator bool() const { return !code &amp;&amp; !signature; }

This is wrong. I&apos;ll remove this I don&apos;t think I use it anywhere.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyHelpers.h:34
&gt; +uint32_t ToNonWrappingUint32(ExecState*, JSValue);

I&apos;ll delete this line

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyTable.cpp:108
&gt; +    // FIXME: we should protect ourselves from crazy sizes here.

I&apos;ll remove this since we now protect ourselves

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:140
&gt; +                return JSValue::encode(throwException(exec, throwScope, createTypeError(exec, ASCIILiteral(&quot;Table import is not an instance of WebAssembly.Table&quot;))));

I&apos;ll add a test for this I don&apos;t think I have one.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:155
&gt; +                        throwException(exec, throwScope, createTypeError(exec, ASCIILiteral(&quot;Table imports &apos;maximum&apos; is larger than the module&apos;s expected &apos;maximum&apos;&quot;))));

Should be &quot;import&apos;s&quot; not &quot;imports&quot;

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:234
&gt; +            instance-&gt;setTable(vm,

This should be over two lines so we check the exception. Alternatively we can assert that this doesn&apos;t throw since we check that the initial size is valid during parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259424</commentid>
    <comment_count>17</comment_count>
      <attachid>296981</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-13 10:05:07 -0800</bug_when>
    <thetext>Comment on attachment 296981
patch

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

r=me.

&gt; JSTests/wasm/Builder.js:115
&gt; +    return (module, field, tableDescription) =&gt; {

I think we should start having a comment saying what properties we want in the tableDescription. If you&apos;re motivated, ditto for memory description above. Figuring out exactly what properties we need / can optionally have is a pain otherwise.

&gt; JSTests/wasm/Builder.js:326
&gt; +            // FIXME: we should allow indices that exceed this to be able to
&gt; +            // test JSCs validator is correct. https://bugs.webkit.org/show_bug.cgi?id=165786
&gt; +            assert.truthy(signature &lt; typeSection.data.length);

Can&apos;t you just do:

if (builder._checked)
    assert.truthy(signature &lt; typeSection.data.length);

&gt; JSTests/wasm/function-tests/table-basic-2.js:1
&gt; +import Builder from &apos;../Builder.js&apos;

I don&apos;t know if these tests should be in function-tests. Maybe we should have a different directory but function tests was originally just for the jsc.cpp testWasmFunction tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259483</commentid>
    <comment_count>18</comment_count>
      <attachid>296981</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 12:08:46 -0800</bug_when>
    <thetext>Comment on attachment 296981
patch

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

&gt;&gt; JSTests/wasm/Builder.js:115
&gt;&gt; +    return (module, field, tableDescription) =&gt; {
&gt; 
&gt; I think we should start having a comment saying what properties we want in the tableDescription. If you&apos;re motivated, ditto for memory description above. Figuring out exactly what properties we need / can optionally have is a pain otherwise.

I&apos;ll use destructuring to indicate which properties we&apos;re expecting and which properties we forward into a new object.

&gt;&gt; JSTests/wasm/Builder.js:326
&gt;&gt; +            assert.truthy(signature &lt; typeSection.data.length);
&gt; 
&gt; Can&apos;t you just do:
&gt; 
&gt; if (builder._checked)
&gt;     assert.truthy(signature &lt; typeSection.data.length);

No because the builder below expects type and params to be real things. In the future, we should make the code be able to just do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259497</commentid>
    <comment_count>19</comment_count>
      <attachid>297034</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 12:27:00 -0800</bug_when>
    <thetext>Created attachment 297034
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259502</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-13 12:29:49 -0800</bug_when>
    <thetext>Attachment 297034 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmFunctionParser.h:395:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259503</commentid>
    <comment_count>21</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 12:33:44 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/209771</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296889</attachid>
            <date>2016-12-11 18:46:02 -0800</date>
            <delta_ts>2016-12-12 01:20:41 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>21943</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHJldmlzaW9uIDIw
OTY4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ2LDYgKzE0NiwyOCBAQCBzdHJ1Y3QgU2VnbWVudCB7CiAgICAgfQogfTsK
IAorY2xhc3MgVGFibGVJbmZvcm1hdGlvbiB7CitwdWJsaWM6CisgICAgVGFibGVJbmZvcm1hdGlv
bigpID0gZGVmYXVsdDsKKyAgICBUYWJsZUluZm9ybWF0aW9uKHVpbnQzMl90IGluaXRpYWwsIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0sIGJvb2wgaXNJbXBvcnQpCisgICAgICAgIDog
bV9pbml0aWFsKGluaXRpYWwpCisgICAgICAgICwgbV9tYXhpbXVtKG1heGltdW0pCisgICAgICAg
ICwgbV9pc0ltcG9ydChpc0ltcG9ydCkKKyAgICAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyAgICB7
IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2lzVmFs
aWQ7IH0KKyAgICBib29sIGlzSW1wb3J0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ltcG9ydDsgfQor
ICAgIHVpbnQzMl90IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KKyAgICBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVt
OyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9pbml0aWFsOworICAgIHN0ZDo6b3B0aW9u
YWw8dWludDMyX3Q+IG1fbWF4aW11bTsKKyAgICBib29sIG1faXNJbXBvcnQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9pc1ZhbGlkIHsgZmFsc2UgfTsKK307CisKIHN0cnVjdCBNb2R1bGVJbmZvcm1h
dGlvbiB7CiAgICAgVmVjdG9yPFNpZ25hdHVyZT4gc2lnbmF0dXJlczsKICAgICBWZWN0b3I8SW1w
b3J0PiBpbXBvcnRzOwpAQCAtMTU3LDYgKzE3OSw3IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlv
biB7CiAgICAgVmVjdG9yPEV4cG9ydD4gZXhwb3J0czsKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZTsKICAgICBWZWN0b3I8U2VnbWVudDo6UHRyPiBk
YXRhOworICAgIFRhYmxlSW5mb3JtYXRpb24gdGFibGVJbmZvcm1hdGlvbjsKIAogICAgIH5Nb2R1
bGVJbmZvcm1hdGlvbigpOwogfTsKQEAgLTE3NywxMyArMjAwLDIwIEBAIHR5cGVkZWYgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIFdhc21Ub0pTU3QKIC8vIFdlYkFzc2VtYmx5IGRpcmVjdCBjYWxscyBh
bmQgY2FsbF9pbmRpcmVjdCB1c2UgaW5kaWNlcyBpbnRvICJmdW5jdGlvbiBpbmRleCBzcGFjZSIu
IFRoaXMgc3BhY2Ugc3RhcnRzIHdpdGggYWxsIGltcG9ydHMsIGFuZCB0aGVuIGFsbCBpbnRlcm5h
bCBmdW5jdGlvbnMuCiAvLyBDYWxsYWJsZUZ1bmN0aW9uIGFuZCBGdW5jdGlvbkluZGV4U3BhY2Ug
YXJlIG9ubHkgbWVhbnQgYXMgZmFzdCBsb29rdXAgdGFibGVzIGZvciB0aGVzZSBvcGNvZGVzLCBh
bmQgZG8gbm90IG93biBjb2RlLgogc3RydWN0IENhbGxhYmxlRnVuY3Rpb24geworICAgIENhbGxh
YmxlRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKICAgICBDYWxsYWJsZUZ1bmN0aW9uKFNpZ25hdHVy
ZSogc2lnbmF0dXJlKQogICAgICAgICA6IHNpZ25hdHVyZShzaWduYXR1cmUpCiAgICAgICAgICwg
Y29kZShudWxscHRyKQogICAgIHsKICAgICB9Ci0gICAgU2lnbmF0dXJlKiBzaWduYXR1cmU7IC8v
IEZJWE1FIHBhY2sgdGhpcyBpbnNpZGUgYSAodW5pcXVlZCkgaW50ZWdlciAoZm9yIGNvcnJlY3Ru
ZXNzIHRoZSBwYXJzZXIgc2hvdWxkIHVuaXF1ZSBTaWduYXR1cmVzKSwgYW5kIHRoZW4gcGFjayB0
aGF0IGludGVnZXIgaW50byB0aGUgY29kZSBwb2ludGVyLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTExCi0gICAgdm9pZCogY29kZTsKKworICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhY29kZSAmJiAhc2lnbmF0dXJlOyB9CisK
KyAgICAvLyBGSVhNRSBwYWNrIHRoaXMgaW5zaWRlIGEgKHVuaXF1ZWQpIGludGVnZXIgKGZvciBj
b3JyZWN0bmVzcyB0aGUgcGFyc2VyIHNob3VsZCB1bmlxdWUgU2lnbmF0dXJlcyksCisgICAgLy8g
YW5kIHRoZW4gcGFjayB0aGF0IGludGVnZXIgaW50byB0aGUgY29kZSBwb2ludGVyLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTExCisgICAgU2lnbmF0dXJlKiBz
aWduYXR1cmUgeyBudWxscHRyIH07IAorICAgIHZvaWQqIGNvZGUgeyBudWxscHRyIH07CiB9Owog
dHlwZWRlZiBWZWN0b3I8Q2FsbGFibGVGdW5jdGlvbj4gRnVuY3Rpb25JbmRleFNwYWNlOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNw
cAkocmV2aXNpb24gMjA5Njg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw3ICsyNTAsOSBAQCBib29sIE1v
ZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBFeHRlcm5hbDo6VGFibGU6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgICAg
IGJvb2wgaXNJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgaWYgKCFwYXJzZVRhYmxlSGVscGVy
KGlzSW1wb3J0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6IHsKQEAgLTMw
MCw0NSArMzAyLDk5IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKCkKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUoKQorYm9vbCBN
b2R1bGVQYXJzZXI6OnBhcnNlUmVzaXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4aW11bSkKIHsKLSAgICAvLyBGSVhNRSBpbXBsZW1lbnQg
dGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQotICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgQVNTRVJUKCFtYXhpbXVtKTsKKwor
ICAgIHVpbnQ4X3QgZmxhZ3M7CisgICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZsYWdzKSB7CisgICAgICAgIHVpbnQzMl90
IG1heGltdW1JbnQ7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIobWF4aW11bUludCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGluaXRpYWwgPiBtYXhpbXVt
SW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1heGltdW0gPSBtYXhp
bXVtSW50OworICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNl
cjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkKK2Jvb2wgTW9kdWxlUGFyc2VyOjpw
YXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQpCiB7Ci0gICAgLy8gV2UgZG9uJ3QgYWxsb3cg
cmVkZWNsYXJpbmcgbWVtb3J5LiBFaXRoZXIgdmlhIGltcG9ydCBvciBkZWZpbml0aW9uLgotICAg
IGlmIChtX21vZHVsZS0+bWVtb3J5KQorICAgIC8vIFdlJ3JlIG9ubHkgYWxsb3dlZCBhIHRvdGFs
IG9mIG9uZSBUYWJsZSBpbXBvcnQgb3IgZGVmaW5pdGlvbi4KKyAgICBpZiAobV9oYXNUYWJsZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdWludDhfdCBmbGFnczsKLSAgICBpZiAoIXBh
cnNlVmFyVUludDEoZmxhZ3MpKQorICAgIG1faGFzVGFibGUgPSB0cnVlOworCisgICAgdWludDMy
X3QgY291bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHVpbnQzMl90IGluaXRpYWw7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQz
Mihpbml0aWFsKSkKKyAgICAvLyBXZSBvbmx5IGFsbG93IG9uZSB0YWJsZSBmb3Igbm93LgorICAg
IGlmIChjb3VudCAhPSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIVBhZ2VD
b3VudDo6aXNWYWxpZChpbml0aWFsKSkKKyAgICBpbnQ4X3QgdHlwZTsKKyAgICBpZiAoIXBhcnNl
SW50Nyh0eXBlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50OF90IGFueWZ1bmNUeXBlID0gLTE2OworICAgIGlmICh0eXBlICE9IGFueWZ1bmNUeXBlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50MzJfdCBpbml0aWFsOworICAgIHN0ZDo6
b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07CisgICAgaWYgKCFwYXJzZVJlc2l6YWJsZUxpbWl0
cyhpbml0aWFsLCBtYXhpbXVtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJU
KCFtYXhpbXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOwogCi0gICAgUGFnZUNvdW50IGluaXRp
YWxQYWdlQ291bnQoaW5pdGlhbCk7CisgICAgbV9tb2R1bGUtPnRhYmxlSW5mb3JtYXRpb24gPSBU
YWJsZUluZm9ybWF0aW9uKGluaXRpYWwsIG1heGltdW0sIGlzSW1wb3J0KTsKIAorICAgIHJldHVy
biB0cnVlOworfQorCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSgpCit7CisgICAgYm9v
bCBpc0ltcG9ydCA9IGZhbHNlOworICAgIHJldHVybiBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0
KTsKK30KKworYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBv
cnQpCit7CisgICAgLy8gV2UgZG9uJ3QgYWxsb3cgcmVkZWNsYXJpbmcgbWVtb3J5LiBFaXRoZXIg
dmlhIGltcG9ydCBvciBkZWZpbml0aW9uLgorICAgIGlmIChtX21vZHVsZS0+bWVtb3J5KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3VudDsKICAg
ICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsKLSAgICBpZiAoZmxhZ3MpIHsKLSAgICAgICAg
dWludDMyX3QgbWF4aW11bTsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihtYXhpbXVtKSkK
KyAgICB7CisgICAgICAgIHVpbnQzMl90IGluaXRpYWw7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1heGltdW07CisgICAgICAgIGlmICghcGFyc2VSZXNpemFibGVMaW1pdHMoaW5p
dGlhbCwgbWF4aW11bSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYg
KCFQYWdlQ291bnQ6OmlzVmFsaWQobWF4aW11bSkpCisgICAgICAgIEFTU0VSVCghbWF4aW11bSB8
fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKKyAgICAgICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQo
aW5pdGlhbCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbWF4aW11bVBh
Z2VDb3VudCA9IFBhZ2VDb3VudChtYXhpbXVtKTsKLSAgICAgICAgaWYgKGluaXRpYWxQYWdlQ291
bnQgPiBtYXhpbXVtUGFnZUNvdW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpbml0aWFsUGFnZUNvdW50ID0gUGFnZUNvdW50KGluaXRpYWwpOworCisgICAgICAgIGlmICht
YXhpbXVtKSB7CisgICAgICAgICAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZCgqbWF4aW11bSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbWF4aW11bVBhZ2VD
b3VudCA9IFBhZ2VDb3VudCgqbWF4aW11bSk7CisgICAgICAgIH0KICAgICB9CisgICAgQVNTRVJU
KGluaXRpYWxQYWdlQ291bnQpOworICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhp
bXVtUGFnZUNvdW50ID49IGluaXRpYWxQYWdlQ291bnQpOwogCiAgICAgVmVjdG9yPHVuc2lnbmVk
PiBwaW5uZWRTaXplcyA9IHsgMCB9OwogICAgIG1fbW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZv
cm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBwaW5uZWRTaXplcywg
aXNJbXBvcnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuaAkocmV2aXNpb24gMjA5Njg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMiArNzksMTUgQEAg
cHJpdmF0ZToKICN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKIAogICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpOworICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCk7
CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VSZXNpemFibGVMaW1pdHModWludDMy
X3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKTsKIAogICAgIFZN
KiBtX3ZtOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGU7
CiAgICAgRnVuY3Rpb25JbmRleFNwYWNlIG1fZnVuY3Rpb25JbmRleFNwYWNlOwogICAgIFZlY3Rv
cjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5Owog
ICAgIGJvb2wgbV9mYWlsZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX2hhc1RhYmxlIHsgZmFsc2Ug
fTsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJ
KHJldmlzaW9uIDIwOTY4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZQogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX21vZHVsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9tZW1vcnkpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhYmxlKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5j
dGlvbnM7ICsraSkKICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVu
Y3Rpb24oaSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDIwOTY4NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3Qu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnku
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTcxLDYgKzcyLDkgQEAgcHVibGljOgogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9y
eSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9CiAgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZt
LCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpIHsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBt
ZW1vcnkpOyB9CiAKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90
YWJsZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0VGFibGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5VGFi
bGUqIHRhYmxlKSB7IG1fdGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7IH0KKwogICAgIHN0YXRp
YyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpCiAgICAgewogICAg
ICAgICByZXR1cm4gb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIHNpemVvZihXcml0ZUJhcnJp
ZXI8SlNDZWxsPikgKiBpZHg7CkBAIC05Niw2ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogICAgIFdy
aXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5PiBtX21lbW9yeTsKKyAgICBXcml0ZUJhcnJp
ZXI8SlNXZWJBc3NlbWJseVRhYmxlPiBtX3RhYmxlOwogICAgIHVuc2lnbmVkIG1fbnVtSW1wb3J0
RnVuY3Rpb25zOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCShyZXZpc2lvbiAyMDk2ODcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSwxMiArMjksMTUgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotSlNXZWJBc3NlbWJseVRhYmxlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFibGUiLCAmQmFzZTo6c19pbmZv
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlUYWJsZSkgfTsKKworSlNXZWJB
c3NlbWJseVRhYmxlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBt
YXhpbXVtKQogewotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNXZWJBc3NlbWJseVRhYmxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseVRhYmxlKHZtLCBz
dHJ1Y3R1cmUpOworICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNXZWJBc3NlbWJseVRhYmxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseVRhYmxlKHZtLCBz
dHJ1Y3R1cmUsIGluaXRpYWwsIG1heGltdW0pOwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtNDQsOSArNDcsMTkgQEAgU3RydWN0
dXJlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZVN0cgogICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotSlNXZWJBc3NlbWJseVRhYmxlOjpKU1dl
YkFzc2VtYmx5VGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0pTV2ViQXNzZW1i
bHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCiAgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiB7CisgICAgbV9pbml0aWFsID0gaW5pdGlhbDsKKyAgICBt
X3NpemUgPSBpbml0aWFsOworICAgIG1fbWF4aW11bSA9IG1heGltdW07CisgICAgQVNTRVJUKCFt
X21heGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOworCisgICAgLy8gRklYTUU6IEl0IG1p
Z2h0IGJlIHdvcnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3Bl
YyByZWNvbW1lbmRzIGRvaW5nIHNvLgorICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9p
bmcgdGhhdC4KKyAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0
aW9uPjo6bWFsbG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIG1fc2l6ZSk7Cisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQorICAgICAgICBuZXcgKCZt
X2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOwogfQogCiB2b2lk
IEpTV2ViQXNzZW1ibHlUYWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpAQCAtNjgsOCArODEs
NiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAotY29uc3QgQ2xhc3NJbmZv
IEpTV2ViQXNzZW1ibHlUYWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFibGUiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlUYWJsZSkgfTsK
LQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuaAkocmV2aXNpb24gMjA5Njg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDIzICsyOSwzNiBA
QAogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgorI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKK25h
bWVzcGFjZSBXYXNtIHsKK3N0cnVjdCBDYWxsYWJsZUZ1bmN0aW9uOworfQorCiBjbGFzcyBKU1dl
YkFzc2VtYmx5VGFibGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgog
ICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dl
YkFzc2VtYmx5VGFibGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU1dl
YkFzc2VtYmx5VGFibGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGluaXRpYWws
IHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBE
RUNMQVJFX0lORk87CiAKLXByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBT
dHJ1Y3R1cmUqKTsKKyAgICB1aW50MzJfdCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0
aWFsOyB9CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4aW11bTsgfQorCitwcml2YXRlOgorICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYs
IFN0cnVjdHVyZSosIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1h
eGltdW0pOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKworICAgIE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPiBt
X2Z1bmN0aW9uczsKKyAgICB1aW50MzJfdCBtX3NpemU7CisgICAgdWludDMyX3QgbV9pbml0aWFs
OworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1fbWF4aW11bTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMDk2ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAvLyBGSVhNRSBpbXBs
ZW1lbnQgR2xvYmFsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQx
MzMKIAogICAgIGJvb2wgaGFzTWVtb3J5SW1wb3J0ID0gZmFsc2U7CisgICAgYm9vbCBoYXNUYWJs
ZUltcG9ydCA9IGZhbHNlOwogICAgIC8vIEZvciBlYWNoIGltcG9ydCBpIGluIG1vZHVsZS5pbXBv
cnRzOgogICAgIGZvciAoYXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykg
ewogICAgICAgICAvLyAxLiBMZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1p
bmcgR2V0KGltcG9ydE9iamVjdCwgaS5tb2R1bGVfbmFtZSkuCkBAIC0xMzEsMTIgKzEzMiwzNiBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpUYWJsZTogewor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhpcyBzaG91
bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KICAgICAgICAgICAgIC8v
IDcuIE90aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6Ci0gICAgICAgICAgICAvLyBGSVhN
RSBpbXBsZW1lbnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDEzNQorICAgICAgICAgICAgaGFzVGFibGVJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAg
SlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRh
YmxlKj4odmFsdWUpOwogICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJs
eS5UYWJsZSBvYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAgICAgICAgaWYgKCF0YWJs
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlRh
YmxlIGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkpKTsK
KworICAgICAgICAgICAgdWludDMyX3QgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRp
b24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogZG8g
d2UgY2FyZSBhYm91dCB0aGUgYWN0dWFsIHN0YXJ0aW5nICJpbml0aWFsIiB2YWx1ZSwgb3IganVz
dCB0aGUgY3VycmVudCAic2l6ZSIgb2YgdGhlIHRhYmxlLCBzaW5jZSB0YWJsZXMgY2FuIGdyb3cu
CisgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gdGhlIEpTIEFQSSwg
YnV0IGlzbid0LgorICAgICAgICAgICAgdWludDMyX3QgYWN0dWFsSW5pdGlhbCA9IHRhYmxlLT5p
bml0aWFsKCk7CisgICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlh
bCkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlRh
YmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpKTsK
KworICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGV4cGVjdGVkTWF4aW11
bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7CisgICAg
ICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gYWN0dWFsTWF4aW11bSA9IHRhYmxl
LT5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgZGlkIG5vdCBoYXZlIGEgJ21heGltdW0n
IGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0ZWRNYXhp
bXVtKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnRzICdtYXhpbXVtJyBp
cyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0iKSkpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQg
diB0byB0YWJsZXMuCiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbVGFibGVdXSB0byBp
bXBvcnRzLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGluc3RhbmNlLT5zZXRUYWJsZSh2bSwgdGFibGUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7CkBAIC0x
ODUsNyArMjEwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwog
CiAgICAgewogICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNob3Vs
ZCBlaXRoZXIgaGF2ZSBhbiBpbXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2Vw
dGlvbi4KKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIE1lbW9yeSBpbXBv
cnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGhhc01lbW9yeUltcG9ydCk7CiAgICAgICAgIH0KIApAQCAtMTk4LDYgKzIy
MywyMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAg
IH0KICAgICB9CiAKKyAgICB7CisgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxl
SW5mb3JtYXRpb24gJiYgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9y
dCgpKSB7CisgICAgICAgICAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBUYWJsZSBpbXBv
cnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGhhc1RhYmxlSW1wb3J0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
IW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYgIWhhc1RhYmxlSW1wb3J0KSB7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZv
cm1hdGlvbi5pc0ltcG9ydCgpKTsKKyAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIFRhYmxlIHdo
ZW4gaXQncyBhIFRhYmxlIGRlZmluaXRpb24uCisgICAgICAgICAgICBpbnN0YW5jZS0+c2V0VGFi
bGUodm0sCisgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZSh2bSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBt
b2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3Jt
YXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpKTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVjLCBpbnN0YW5jZSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlmICh2ZXJib3NlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
ZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwOTY4NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnMKICAgICAgICAgICAgIEpTVmFsdWUgbWF4U2l6ZVZhbHVlID0gbWVtb3J5RGVzY3Jp
cHRvci0+Z2V0KGV4ZWMsIG1heGltdW0pOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSA9IGdldFVpbnQz
MihtYXhTaXplVmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgICAgICAgICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQoc2l6
ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
V2ViQXNzZW1ibHkuTWVtb3J5ICdtYXhpbXVtJyBwYWdlIGNvdW50IGlzIHRvbyBsYXJnZSIpKSkp
OwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
ICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFdhc206OlBhZ2VDb3VudChzaXplKTsKIAogICAg
ICAgICAgICAgaWYgKGluaXRpYWxQYWdlQ291bnQgPiBtYXhpbXVtUGFnZUNvdW50KSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwOTY4NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlU
YWJsZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIKIAogI2luY2x1
ZGUgIldlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCIKQEAgLTQzLDEyICs0NCw2NiBA
QCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjCiAgQGVuZAogICovCiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlUYWJsZShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDEzNQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
c3RhdGUsIHNjb3BlLCBjcmVhdGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJs
eSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlIFRhYmxlIGNvbnN0cnVjdG9yIHByb3BlcnR5Iikp
KSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8gZ2V0VWludDMyID0gWyZdIChKU1ZhbHVl
IHZhbHVlKSAtPiB1aW50MzJfdCB7CisgICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHZhbHVl
LnRvSW50ZWdlcihleGVjKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOworICAgICAgICBpZiAoZG91YmxlVmFsdWUgPCAwIHx8IGRvdWJsZVZhbHVlID4gVUlO
VF9NQVgpIHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisg
ICAgICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFz
c2VtYmx5LlRhYmxlIGV4cGVjdHMgdGhlICdpbml0aWFsJyBhbmQgJ21heGltdW0nIHByb3BlcnRp
ZXMgdG8gYmUgaW50ZWdlcnMgaW4gdGhlIHJhbmdlOiBbMCwgMl4zMiAtIDFdIikpKTsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oZG91YmxlVmFsdWUpOworICAgIH07CisKKyAgICAvLyBGSVhNRTogdGhpcyBmdW5j
dGlvbiBpcyByZWFsbHkgY2xvc2UgdG8gV2ViQXNzZW1ibHkuTWVtb3J5IGNvbnN0cnVjb3RyLCB3
ZSBjb3VsZCBwcm9iYWJseQorICAgIC8vIGZhY3RvciBvdXQgdGhlaXIgY29tbW9uIGJpdHMgaW50
byBhIHNpbmdsZSBmdW5jdGlvbi4KKworICAgIEpTT2JqZWN0KiBtZW1vcnlEZXNjcmlwdG9yOwor
ICAgIHsKKyAgICAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAg
ICAgICBpZiAoIWFyZ3VtZW50LmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlIGV4cGVjdHMgaXRzIGZpcnN0
IGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCIpKSkpOworICAgICAgICBtZW1vcnlEZXNjcmlwdG9y
ID0ganNDYXN0PEpTT2JqZWN0Kj4oYXJndW1lbnQpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
SWRlbnRpZmllciBlbGVtZW50SWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImVs
ZW1lbnQiKTsKKyAgICAgICAgSlNWYWx1ZSBlbGVtZW50VmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9y
LT5nZXQoZXhlYywgZWxlbWVudElkZW50KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOworICAgICAgICBTdHJpbmcgZWxlbWVudFN0cmluZyA9IGVsZW1lbnRW
YWx1ZS50b1dURlN0cmluZyhleGVjKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOworICAgICAgICBpZiAoZWxlbWVudFN0cmluZyAhPSAiYW55ZnVuYyIpCisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5
LlRhYmxlIGV4cGVjdHMgaXRzICdlbGVtZW50JyBmaWVsZCB0byBiZSB0aGUgc3RyaW5nICdhbnlm
dW5jJyIpKSkpOworICAgIH0KKworICAgIElkZW50aWZpZXIgaW5pdGlhbElkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJpbml0aWFsIik7CisgICAgSlNWYWx1ZSBpbml0aWFsU2l6
ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMsIGluaXRpYWxJZGVudCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHVpbnQzMl90IGluaXRp
YWwgPSBnZXRVaW50MzIoaW5pdGlhbFNpemVWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOworCisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11
bTsKKyAgICBJZGVudGlmaWVyIG1heGltdW1JZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAibWF4aW11bSIpOworICAgIGJvb2wgaGFzUHJvcGVydHkgPSBtZW1vcnlEZXNjcmlwdG9y
LT5oYXNQcm9wZXJ0eShleGVjLCBtYXhpbXVtSWRlbnQpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKKyAgICBpZiAoaGFzUHJvcGVydHkpIHsKKyAgICAgICAgSlNW
YWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhlYywgbWF4aW11bUlk
ZW50KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAg
ICAgICBtYXhpbXVtID0gZ2V0VWludDMyKG1heFNpemVWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKworICAgICAgICBpZiAoaW5pdGlhbCA+ICpt
YXhpbXVtKSB7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIidtYXhpbXVtJyBwcm9wZXJ0eSBtdXN0IGJlIGdyZWF0ZXIgdGhh
biBvciBlcXVhbCB0byB0aGUgJ2luaXRpYWwnIHByb3BlcnR5IikpKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3Jl
YXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1
Y3R1cmUoKSwgaW5pdGlhbCwgbWF4aW11bSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseVRhYmxlKEV4ZWNTdGF0ZSogc3RhdGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296898</attachid>
            <date>2016-12-12 01:20:41 -0800</date>
            <delta_ts>2016-12-12 11:45:56 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>39435</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHJldmlzaW9uIDIw
OTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3LDYgKzE0NywyOCBAQCBzdHJ1Y3QgU2VnbWVudCB7CiAgICAgfQogfTsK
IAorY2xhc3MgVGFibGVJbmZvcm1hdGlvbiB7CitwdWJsaWM6CisgICAgVGFibGVJbmZvcm1hdGlv
bigpID0gZGVmYXVsdDsKKyAgICBUYWJsZUluZm9ybWF0aW9uKHVpbnQzMl90IGluaXRpYWwsIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0sIGJvb2wgaXNJbXBvcnQpCisgICAgICAgIDog
bV9pbml0aWFsKGluaXRpYWwpCisgICAgICAgICwgbV9tYXhpbXVtKG1heGltdW0pCisgICAgICAg
ICwgbV9pc0ltcG9ydChpc0ltcG9ydCkKKyAgICAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyAgICB7
IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2lzVmFs
aWQ7IH0KKyAgICBib29sIGlzSW1wb3J0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ltcG9ydDsgfQor
ICAgIHVpbnQzMl90IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KKyAgICBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVt
OyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9pbml0aWFsOworICAgIHN0ZDo6b3B0aW9u
YWw8dWludDMyX3Q+IG1fbWF4aW11bTsKKyAgICBib29sIG1faXNJbXBvcnQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9pc1ZhbGlkIHsgZmFsc2UgfTsKK307CisKIHN0cnVjdCBNb2R1bGVJbmZvcm1h
dGlvbiB7CiAgICAgVmVjdG9yPFNpZ25hdHVyZT4gc2lnbmF0dXJlczsKICAgICBWZWN0b3I8SW1w
b3J0PiBpbXBvcnRzOwpAQCAtMTU4LDYgKzE4MCw3IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlv
biB7CiAgICAgVmVjdG9yPEV4cG9ydD4gZXhwb3J0czsKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZTsKICAgICBWZWN0b3I8U2VnbWVudDo6UHRyPiBk
YXRhOworICAgIFRhYmxlSW5mb3JtYXRpb24gdGFibGVJbmZvcm1hdGlvbjsKIAogICAgIH5Nb2R1
bGVJbmZvcm1hdGlvbigpOwogfTsKQEAgLTE4NSwxMyArMjA4LDIwIEBAIHR5cGVkZWYgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIFdhc21Ub0pTU3QKIC8vIFdlYkFzc2VtYmx5IGRpcmVjdCBjYWxscyBh
bmQgY2FsbF9pbmRpcmVjdCB1c2UgaW5kaWNlcyBpbnRvICJmdW5jdGlvbiBpbmRleCBzcGFjZSIu
IFRoaXMgc3BhY2Ugc3RhcnRzIHdpdGggYWxsIGltcG9ydHMsIGFuZCB0aGVuIGFsbCBpbnRlcm5h
bCBmdW5jdGlvbnMuCiAvLyBDYWxsYWJsZUZ1bmN0aW9uIGFuZCBGdW5jdGlvbkluZGV4U3BhY2Ug
YXJlIG9ubHkgbWVhbnQgYXMgZmFzdCBsb29rdXAgdGFibGVzIGZvciB0aGVzZSBvcGNvZGVzLCBh
bmQgZG8gbm90IG93biBjb2RlLgogc3RydWN0IENhbGxhYmxlRnVuY3Rpb24gewotICAgIENhbGxh
YmxlRnVuY3Rpb24oU2lnbmF0dXJlKiBzaWduYXR1cmUpCisgICAgQ2FsbGFibGVGdW5jdGlvbigp
ID0gZGVmYXVsdDsKKworICAgIENhbGxhYmxlRnVuY3Rpb24oU2lnbmF0dXJlKiBzaWduYXR1cmUs
IHZvaWQqIGNvZGUgPSBudWxscHRyKQogICAgICAgICA6IHNpZ25hdHVyZShzaWduYXR1cmUpCi0g
ICAgICAgICwgY29kZShudWxscHRyKQorICAgICAgICAsIGNvZGUoY29kZSkKICAgICB7CiAgICAg
fQotICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlOyAvLyBGSVhNRSBwYWNrIHRoaXMgaW5zaWRlIGEg
KHVuaXF1ZWQpIGludGVnZXIgKGZvciBjb3JyZWN0bmVzcyB0aGUgcGFyc2VyIHNob3VsZCB1bmlx
dWUgU2lnbmF0dXJlcyksIGFuZCB0aGVuIHBhY2sgdGhhdCBpbnRlZ2VyIGludG8gdGhlIGNvZGUg
cG9pbnRlci4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMQot
ICAgIHZvaWQqIGNvZGU7CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gIWNvZGUgJiYgIXNpZ25hdHVyZTsgfQorCisgICAgLy8gRklYTUUgcGFjayB0aGlzIGlu
c2lkZSBhICh1bmlxdWVkKSBpbnRlZ2VyIChmb3IgY29ycmVjdG5lc3MgdGhlIHBhcnNlciBzaG91
bGQgdW5pcXVlIFNpZ25hdHVyZXMpLAorICAgIC8vIGFuZCB0aGVuIHBhY2sgdGhhdCBpbnRlZ2Vy
IGludG8gdGhlIGNvZGUgcG9pbnRlci4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NTUxMQorICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlIHsgbnVsbHB0ciB9OyAKKyAg
ICB2b2lkKiBjb2RlIHsgbnVsbHB0ciB9OwogfTsKIHR5cGVkZWYgVmVjdG9yPENhbGxhYmxlRnVu
Y3Rpb24+IEZ1bmN0aW9uSW5kZXhTcGFjZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTAsNyArMjUwLDkgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRXh0ZXJuYWw6OlRh
YmxlOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAgICAgICAgICBib29sIGlzSW1wb3J0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGlmICghcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9ydCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBFeHRlcm5hbDo6TWVtb3J5OiB7CkBAIC0zMDAsNDUgKzMwMiw5OSBAQCBib29sIE1vZHVs
ZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTW9k
dWxlUGFyc2VyOjpwYXJzZVRhYmxlKCkKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVJlc2l6YWJs
ZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGlt
dW0pCiB7Ci0gICAgLy8gRklYTUUgaW1wbGVtZW50IHRhYmxlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIEFTU0VSVCghbWF4aW11bSk7CisKKyAgICB1aW50OF90IGZsYWdzOworICAgIGlm
ICghcGFyc2VWYXJVSW50MShmbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghcGFyc2VWYXJVSW50MzIoaW5pdGlhbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChmbGFncykgeworICAgICAgICB1aW50MzJfdCBtYXhpbXVtSW50OworICAgICAgICBpZiAo
IXBhcnNlVmFyVUludDMyKG1heGltdW1JbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGlmIChpbml0aWFsID4gbWF4aW11bUludCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBtYXhpbXVtID0gbWF4aW11bUludDsKKyAgICB9CisKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wg
aXNJbXBvcnQpCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1w
b3J0KQogewotICAgIC8vIFdlIGRvbid0IGFsbG93IHJlZGVjbGFyaW5nIG1lbW9yeS4gRWl0aGVy
IHZpYSBpbXBvcnQgb3IgZGVmaW5pdGlvbi4KLSAgICBpZiAobV9tb2R1bGUtPm1lbW9yeSkKKyAg
ICAvLyBXZSdyZSBvbmx5IGFsbG93ZWQgYSB0b3RhbCBvZiBvbmUgVGFibGUgaW1wb3J0IG9yIGRl
ZmluaXRpb24uCisgICAgaWYgKG1faGFzVGFibGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHVpbnQ4X3QgZmxhZ3M7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKKyAgICBt
X2hhc1RhYmxlID0gdHJ1ZTsKKworICAgIHVpbnQzMl90IGNvdW50OworICAgIGlmICghcGFyc2VW
YXJVSW50MzIoY291bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1aW50MzJfdCBp
bml0aWFsOwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5pdGlhbCkpCisgICAgLy8gV2Ugb25s
eSBhbGxvdyBvbmUgdGFibGUgZm9yIG5vdy4KKyAgICBpZiAoY291bnQgIT0gMSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQoaW5pdGlhbCkpCisg
ICAgaW50OF90IHR5cGU7CisgICAgaWYgKCFwYXJzZUludDcodHlwZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGludDhfdCBhbnlmdW5jVHlwZSA9IC0xNjsK
KyAgICBpZiAodHlwZSAhPSBhbnlmdW5jVHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgdWludDMyX3QgaW5pdGlhbDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVt
OworICAgIGlmICghcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBp
bml0aWFsKTsKIAotICAgIFBhZ2VDb3VudCBpbml0aWFsUGFnZUNvdW50KGluaXRpYWwpOworICAg
IG1fbW9kdWxlLT50YWJsZUluZm9ybWF0aW9uID0gVGFibGVJbmZvcm1hdGlvbihpbml0aWFsLCBt
YXhpbXVtLCBpc0ltcG9ydCk7CiAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNb2R1bGVQ
YXJzZXI6OnBhcnNlVGFibGUoKQoreworICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKKyAgICBy
ZXR1cm4gcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9ydCk7Cit9CisKK2Jvb2wgTW9kdWxlUGFyc2Vy
OjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KQoreworICAgIC8vIFdlIGRvbid0IGFs
bG93IHJlZGVjbGFyaW5nIG1lbW9yeS4gRWl0aGVyIHZpYSBpbXBvcnQgb3IgZGVmaW5pdGlvbi4K
KyAgICBpZiAobV9tb2R1bGUtPm1lbW9yeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
UGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7CiAgICAgUGFnZUNvdW50IG1heGltdW1QYWdlQ291
bnQ7Ci0gICAgaWYgKGZsYWdzKSB7Ci0gICAgICAgIHVpbnQzMl90IG1heGltdW07Ci0gICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIobWF4aW11bSkpCisgICAgeworICAgICAgICB1aW50MzJfdCBp
bml0aWFsOworICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgICAg
ICBpZiAoIXBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghUGFnZUNvdW50Ojppc1ZhbGlkKG1heGlt
dW0pKQorICAgICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7Cisg
ICAgICAgIGlmICghUGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQobWF4aW11
bSk7Ci0gICAgICAgIGlmIChpbml0aWFsUGFnZUNvdW50ID4gbWF4aW11bVBhZ2VDb3VudCkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5pdGlhbFBhZ2VDb3VudCA9IFBhZ2VD
b3VudChpbml0aWFsKTsKKworICAgICAgICBpZiAobWF4aW11bSkgeworICAgICAgICAgICAgaWYg
KCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGltdW0pKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0p
OworICAgICAgICB9CiAgICAgfQorICAgIEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKKyAgICBB
U1NFUlQoIW1heGltdW1QYWdlQ291bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFn
ZUNvdW50KTsKIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4gcGlubmVkU2l6ZXMgPSB7IDAgfTsKICAg
ICBtX21vZHVsZS0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3VudCwg
bWF4aW11bVBhZ2VDb3VudCwgcGlubmVkU2l6ZXMsIGlzSW1wb3J0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgJKHJldmlzaW9uIDIwOTcw
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNzksMTIgKzc5LDE1IEBAIHByaXZhdGU6CiAjdW5kZWYgV0FTTV9TRUNU
SU9OX0RFQ0xBUkVfUEFSU0VSCiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1l
bW9yeUhlbHBlcihib29sIGlzSW1wb3J0KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlUmVzaXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiYgbWF4aW11bSk7CiAKICAgICBWTSogbV92bTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlOwogICAgIEZ1bmN0aW9uSW5kZXhTcGFjZSBt
X2Z1bmN0aW9uSW5kZXhTcGFjZTsKICAgICBWZWN0b3I8RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
PiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKICAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9
OworICAgIGJvb2wgbV9oYXNUYWJsZSB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNz
YWdlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2
aXNpdENoaWxkcmUKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGUpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZU5hbWVzcGFjZU9iamVjdCk7
CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbWVtb3J5KTsKKyAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRoaXNPYmplY3QtPm1fbnVtSW1wb3J0RnVuY3Rpb25zOyArK2kpCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9uKGkpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eVRhYmxlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC03MSw2ICs3Miw5IEBAIHB1YmxpYzoK
ICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQo
KTsgfQogICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2bSwgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVt
b3J5KSB7IG1fbWVtb3J5LnNldCh2bSwgdGhpcywgbWVtb3J5KTsgfQogCisgICAgSlNXZWJBc3Nl
bWJseVRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KKyAgICB2b2lkIHNl
dFRhYmxlKFZNJiB2bSwgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSkgeyBtX3RhYmxlLnNldCh2
bSwgdGhpcywgdGFibGUpOyB9CisKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVu
Y3Rpb24odW5zaWduZWQgaWR4KQogICAgIHsKICAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0
RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICogaWR4OwpAQCAtOTYs
NiArMTAwLDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1vZHVs
ZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBt
X21vZHVsZU5hbWVzcGFjZU9iamVjdDsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1l
bW9yeT4gbV9tZW1vcnk7CisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlUYWJsZT4gbV90
YWJsZTsKICAgICB1bnNpZ25lZCBtX251bUltcG9ydEZ1bmN0aW9uczsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxl
LmNwcAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDE1IEBA
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIldhc21Gb3JtYXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTV2ViQXNzZW1ibHlU
YWJsZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5VGFibGU6OnNfaW5mbyA9IHsgIldl
YkFzc2VtYmx5LlRhYmxlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1dlYkFzc2VtYmx5VGFibGUpIH07CisKK0pTV2ViQXNzZW1ibHlUYWJsZSogSlNXZWJBc3NlbWJs
eVRhYmxlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgaW5p
dGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSkKIHsKLSAgICBhdXRvKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlUYWJsZT4odm0u
aGVhcCkpIEpTV2ViQXNzZW1ibHlUYWJsZSh2bSwgc3RydWN0dXJlKTsKKyAgICBhdXRvKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlUYWJsZT4odm0u
aGVhcCkpIEpTV2ViQXNzZW1ibHlUYWJsZSh2bSwgc3RydWN0dXJlLCBpbml0aWFsLCBtYXhpbXVt
KTsKICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBpbnN0YW5j
ZTsKIH0KQEAgLTQ0LDkgKzQ3LDIxIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseVRhYmxlOjpj
cmVhdGVTdHIKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiB9CiAKLUpTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNzZW1ibHlUYWJs
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9w
dGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQogewor
ICAgIG1fc2l6ZSA9IGluaXRpYWw7CisgICAgbV9tYXhpbXVtID0gbWF4aW11bTsKKyAgICBBU1NF
UlQoIW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49IG1fc2l6ZSk7CisKKyAgICAvLyBGSVhNRTog
SXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRo
ZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCisgICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5v
dCBkb2luZyB0aGF0LgorICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRyPFdhc206OkNhbGxhYmxl
RnVuY3Rpb24+OjptYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogbV9zaXpl
KTsKKyAgICBtX2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxXZWJBc3NlbWJs
eUZ1bmN0aW9uPj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rp
b24+KSAqIG1fc2l6ZSk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytp
KSB7CisgICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1
bmN0aW9uKCk7CisgICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pIFdyaXRlQmFy
cmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPigpOworICAgIH0KIH0KIAogdm9pZCBKU1dlYkFzc2Vt
Ymx5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTYyLDEzICs3Nyw0OSBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlUYWJsZTo6ZGVzdHJveShKU0NlbGwqCiAKIHZvaWQgSlNXZWJBc3NlbWJs
eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihj
ZWxsKTsKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJB
c3NlbWJseVRhYmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3Np
emU7ICsraSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fanNGdW5jdGlv
bnMuZ2V0KClbaV0pOwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseVRhYmxlOjpz
X2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWJsZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseVRhYmxlKSB9OworYm9vbCBKU1dlYkFzc2VtYmx5VGFi
bGU6Omdyb3codWludDMyX3QgbmV3U2l6ZSkKK3sKKyAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChuZXdTaXplID09IG1fc2l6ZSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gKm1heGltdW0o
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBwcm90
ZWN0IG91cnNlbHZlcyBmcm9tIGNyYXp5IHNpemVzIGhlcmUuCisgICAgbV9mdW5jdGlvbnMucmVh
bGxvYyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlvbikgKiBuZXdTaXplKTsKKyAgICBtX2pz
RnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9u
PikgKiBuZXdTaXplKTsKKworICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1Np
emU7ICsraSkgeworICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2Fs
bGFibGVGdW5jdGlvbigpOworICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBX
cml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4oKTsKKyAgICB9CisgICAgbV9zaXplID0g
bmV3U2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6
OmNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5k
ZXggPCBtX3NpemUpOworICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV3JpdGVCYXJy
aWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+KCk7CisgICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhd
ID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlUYWJs
ZTo6c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlGdW5jdGlv
biogZnVuY3Rpb24pCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAg
IG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOworICAg
IG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oZnVuY3Rp
b24tPnNpZ25hdHVyZSgpLCBmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQoKSk7Cit9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDIzICsyOSw0NSBAQAogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIK
KyNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCituYW1lc3Bh
Y2UgV2FzbSB7CitzdHJ1Y3QgQ2FsbGFibGVGdW5jdGlvbjsKK30KKwogY2xhc3MgSlNXZWJBc3Nl
bWJseVRhYmxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0
eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3Nl
bWJseVRhYmxlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNXZWJBc3Nl
bWJseVRhYmxlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFS
RV9JTkZPOwogCi1wcm90ZWN0ZWQ6Ci0gICAgSlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3RydWN0
dXJlKik7CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4aW11bTsgfQorICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KKyAgICBib29sIGdyb3codWludDMyX3QgbmV3U2l6ZSkgV0FSTl9VTlVTRURfUkVUVVJO
OworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGdldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQor
ICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICBy
ZXR1cm4gbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uZ2V0KCk7CisgICAgfQorICAgIHZvaWQg
Y2xlYXJGdW5jdGlvbih1aW50MzJfdCBpbmRleCk7CisgICAgdm9pZCBzZXRGdW5jdGlvbihWTSYs
IHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseUZ1bmN0aW9uKik7CisKK3ByaXZhdGU6CisgICAg
SlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgaW5pdGlhbCwgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgTWFsbG9jUHRyPFdh
c206OkNhbGxhYmxlRnVuY3Rpb24+IG1fZnVuY3Rpb25zOworICAgIE1hbGxvY1B0cjxXcml0ZUJh
cnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4+IG1fanNGdW5jdGlvbnM7CisgICAgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOworICAgIHVpbnQzMl90IG1fc2l6ZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgRW5jb2RlZEpTVmFsdWUgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6Y2FsbAogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogcHJldkpTV2ViQXNzZW1i
bHlJbnN0YW5jZSA9IHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKICAgICB2bS50b3BKU1dl
YkFzc2VtYmx5SW5zdGFuY2UgPSBpbnN0YW5jZSgpOwogICAgIEFTU0VSVChpbnN0YW5jZSgpKTsK
LSAgICBFbmNvZGVkSlNWYWx1ZSByYXdSZXN1bHQgPSB2bUVudHJ5VG9XYXNtKHdlYkFzc2VtYmx5
Q2FsbGVlKCktPmVudHJ5cG9pbnQoKSwgJnZtLCBwcm90b0NhbGxGcmFtZSk7CisgICAgRW5jb2Rl
ZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1FbnRyeVRvV2FzbShtX2pzRW50cnlwb2ludC0+ZW50cnlw
b2ludCgpLCAmdm0sIHByb3RvQ2FsbEZyYW1lKTsKICAgICB2bS50b3BKU1dlYkFzc2VtYmx5SW5z
dGFuY2UgPSBwcmV2SlNXZWJBc3NlbWJseUluc3RhbmNlOwogCiAgICAgLy8gRklYTUUgaXMgdGhp
cyBjb3JyZWN0PyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODc2
CkBAIC0xNDAsMTIgKzE0MCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBXZWJBc3NlbWJseUZ1bmN0aW9u
OjpjYWxsCiAgICAgcmV0dXJuIEVuY29kZWRKU1ZhbHVlKCk7CiB9CiAKLVdlYkFzc2VtYmx5RnVu
Y3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUs
IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKQorV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJB
c3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJl
KQogewogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rp
b24oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKTsKICAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdl
YkFzc2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBl
eGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUsIGluc3RhbmNlLCBjYWxsZWUsIHNpZ25hdHVyZSk7Cisg
ICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUs
IGluc3RhbmNlLCBqc0VudHJ5cG9pbnQsIHdhc21FbnRyeXBvaW50LCBzaWduYXR1cmUpOwogICAg
IHJldHVybiBmdW5jdGlvbjsKIH0KIApAQCAtMTY2LDE1ICsxNjYsMTggQEAgdm9pZCBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2luc3RhbmNl
KTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV93YXNtQ2FsbGVlKTsKKyAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9qc0VudHJ5cG9pbnQpOworICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3dhc21FbnRyeXBvaW50KTsKIH0KIAotdm9pZCBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtQ2FsbGVlLCBX
YXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50LCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCiB7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIG1faW5zdGFuY2Uuc2V0KHZtLCB0aGlzLCBp
bnN0YW5jZSk7Ci0gICAgbV93YXNtQ2FsbGVlLnNldCh2bSwgdGhpcywgd2FzbUNhbGxlZSk7Cisg
ICAgQVNTRVJUKGpzRW50cnlwb2ludCAhPSB3YXNtRW50cnlwb2ludCk7CisgICAgbV9qc0VudHJ5
cG9pbnQuc2V0KHZtLCB0aGlzLCBqc0VudHJ5cG9pbnQpOworICAgIG1fd2FzbUVudHJ5cG9pbnQu
c2V0KHZtLCB0aGlzLCB3YXNtRW50cnlwb2ludCk7CiAgICAgbV9zaWduYXR1cmUgPSBzaWduYXR1
cmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTIgKzI4LDEyIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNG
dW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTR2xvYmFsT2Jq
ZWN0OwotY2xhc3MgSlNXZWJBc3NlbWJseUNhbGxlZTsKIHN0cnVjdCBQcm90b0NhbGxGcmFtZTsK
IGNsYXNzIFdlYkFzc2VtYmx5SW5zdGFuY2U7CiAKQEAgLTUzLDI4ICs1MywyOSBAQCBwdWJsaWM6
CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIEpTV2ViQXNzZW1i
bHlDYWxsZWUqLCBXYXNtOjpTaWduYXR1cmUqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgSlNXZWJBc3NlbWJs
eUNhbGxlZSoganNFbnRyeXBvaW50LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2lu
dCwgV2FzbTo6U2lnbmF0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAotICAgIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIHdlYkFzc2VtYmx5Q2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV93YXNtQ2FsbGVlLmdl
dCgpOyB9CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5zdGFuY2UuZ2V0KCk7IH0KLSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25h
dHVyZSgpCisgICAgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUoKQogICAgIHsgCiAgICAgICAg
IEFTU0VSVChtX3NpZ25hdHVyZSk7CiAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZTsKICAgICB9
CiAgICAgRW5jb2RlZEpTVmFsdWUgY2FsbChWTSYsIFByb3RvQ2FsbEZyYW1lKik7CisgICAgdm9p
ZCogd2FzbUVudHJ5cG9pbnQoKSB7IHJldHVybiBtX3dhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50
KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVF
eGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqLCBXYXNtOjpTaWduYXR1cmUqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVk
IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21F
bnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmUqKTsKIAogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAogICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7Ci0gICAgV3JpdGVCYXJy
aWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+IG1fd2FzbUNhbGxlZTsKKyAgICBXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseUNhbGxlZT4gbV9qc0VudHJ5cG9pbnQ7CisgICAgV3JpdGVCYXJyaWVyPEpT
V2ViQXNzZW1ibHlDYWxsZWU+IG1fd2FzbUVudHJ5cG9pbnQ7CiAgICAgV2FzbTo6U2lnbmF0dXJl
KiBtX3NpZ25hdHVyZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiAr
OTIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgLy8g
RklYTUUgaW1wbGVtZW50IEdsb2JhbCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0MTMzCiAKICAgICBib29sIGhhc01lbW9yeUltcG9ydCA9IGZhbHNlOworICAgIGJv
b2wgaGFzVGFibGVJbXBvcnQgPSBmYWxzZTsKICAgICAvLyBGb3IgZWFjaCBpbXBvcnQgaSBpbiBt
b2R1bGUuaW1wb3J0czoKICAgICBmb3IgKGF1dG8mIGltcG9ydCA6IG1vZHVsZUluZm9ybWF0aW9u
LmltcG9ydHMpIHsKICAgICAgICAgLy8gMS4gTGV0IG8gYmUgdGhlIHJlc3VsdGFudCB2YWx1ZSBv
ZiBwZXJmb3JtaW5nIEdldChpbXBvcnRPYmplY3QsIGkubW9kdWxlX25hbWUpLgpAQCAtMTMxLDEy
ICsxMzIsMzYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6
VGFibGU6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNUYWJsZUltcG9ydCk7IC8v
IFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCiAgICAg
ICAgICAgICAvLyA3LiBPdGhlcndpc2UgKGkgaXMgYSB0YWJsZSBpbXBvcnQpOgotICAgICAgICAg
ICAgLy8gRklYTUUgaW1wbGVtZW50IFRhYmxlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgICAgIGhhc1RhYmxlSW1wb3J0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2Vi
QXNzZW1ibHlUYWJsZSo+KHZhbHVlKTsKICAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEg
V2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgICAg
IGlmICghdGFibGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJUYWJsZSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRh
YmxlIikpKSk7CisKKyAgICAgICAgICAgIHVpbnQzMl90IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVs
ZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpOworICAgICAgICAgICAgLy8g
RklYTUU6IGRvIHdlIGNhcmUgYWJvdXQgdGhlIGFjdHVhbCBzdGFydGluZyAiaW5pdGlhbCIgdmFs
dWUsIG9yIGp1c3QgdGhlIGN1cnJlbnQgInNpemUiIG9mIHRoZSB0YWJsZSwgc2luY2UgdGFibGVz
IGNhbiBncm93LgorICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHRo
ZSBKUyBBUEksIGJ1dCBpc24ndC4KKyAgICAgICAgICAgIHVpbnQzMl90IGFjdHVhbEluaXRpYWwg
PSB0YWJsZS0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3Rl
ZEluaXRpYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJUYWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxs
IikpKSk7CisKKyAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBleHBlY3Rl
ZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSkg
eworICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGFjdHVhbE1heGltdW0g
PSB0YWJsZS0+bWF4aW11bSgpOworICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdt
YXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCphY3R1YWxNYXhpbXVtID4gKmV4cGVj
dGVkTWF4aW11bSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KAorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0cyAnbWF4
aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtIikpKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBpaS4g
QXBwZW5kIHYgdG8gdGFibGVzLgogICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW1RhYmxl
XV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBpbnN0YW5jZS0+c2V0VGFibGUodm0sIHRhYmxlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Ok1lbW9yeTog
ewpAQCAtMTg1LDcgKzIxMCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnMKIAogICAgIHsKICAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYm
IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKSB7Ci0gICAgICAgICAgICAvLyBX
ZSBzaG91bGQgZWl0aGVyIGhhdmUgYW4gaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBh
biBleGNlcHRpb24uCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBNZW1v
cnkgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChoYXNNZW1vcnlJbXBvcnQpOwogICAgICAgICB9CiAKQEAgLTIw
MCw2ICsyMjUsMjAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwog
ICAgICAgICB9CiAgICAgfQogCisgICAgeworICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlv
bi50YWJsZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24u
aXNJbXBvcnQoKSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgVGFi
bGUgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJsZUlt
cG9ydCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLnRh
YmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7CisgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBU
YWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgorICAgICAgICAgICAgaW5zdGFuY2Ut
PnNldFRhYmxlKHZtLAorICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUo
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1vZHVs
ZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSk7CisgICAgICAgIH0KKyAg
ICB9CisKICAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgaW5zdGFuY2UpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpZiAodmVyYm9zZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICBKU1ZhbHVlIG1heFNpemVWYWx1ZSA9IG1lbW9y
eURlc2NyaXB0b3ItPmdldChleGVjLCBtYXhpbXVtKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgICAgIHVpbnQzMl90IHNpemUgPSBn
ZXRVaW50MzIobWF4U2l6ZVZhbHVlKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1Zh
bGlkKHNpemUpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSAnbWF4aW11bScgcGFnZSBjb3VudCBpcyB0b28gbGFy
Z2UiKSkpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICAgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBXYXNtOjpQYWdlQ291bnQoc2l6ZSk7
CiAKICAgICAgICAgICAgIGlmIChpbml0aWFsUGFnZUNvdW50ID4gbWF4aW11bVBhZ2VDb3VudCkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzYsOSArMTM2LDEwIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmxpbmsoRXhlY1MKICAgICAgICAgICAgIC8vICAgICBhLiBMZXQgZnVuYyBiZSBhbiBFeHBvcnRl
ZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0IGNyZWF0ZWQgZnJvbSBjLgogICAgICAgICAgICAgLy8g
ICAgIGIuIEFwcGVuZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgLy8gICAgIGMuIFJldHVy
biBmdW5jLgotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSA9IG1v
ZHVsZS0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAuZnVuY3Rp
b25JbmRleCk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRD
YWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
ZXhwLmZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2Fz
bUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShleHAuZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICBXYXNtOjpTaWdu
YXR1cmUqIHNpZ25hdHVyZSA9IG1vZHVsZS0+c2lnbmF0dXJlRm9yRnVuY3Rpb25JbmRleFNwYWNl
KGV4cC5mdW5jdGlvbkluZGV4KTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1
bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNp
Z25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwg
d2FzbUNhbGxlZSwgc2lnbmF0dXJlKTsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24q
IGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5j
ZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlKTsK
ICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBmdW5jdGlvbjsKICAgICAgICAgICAgIGlmICho
YXNTdGFydCAmJiBzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBleHAuZnVuY3Rpb25JbmRleCkK
ICAgICAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7
CkBAIC0xNzQsOCArMTc1LDkgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhF
eGVjUwogICAgICAgICAvLyBGSVhNRSBjYW4gc3RhcnQgY2FsbCBpbXBvcnRzIC8gdGFibGVzPyBU
aGlzIGFzc3VtZXMgbm90LiBodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2lz
c3Vlcy84OTYKICAgICAgICAgaWYgKCFtX3N0YXJ0RnVuY3Rpb24uZ2V0KCkpIHsKICAgICAgICAg
ICAgIC8vIFRoZSBzdGFydCBmdW5jdGlvbiB3YXNuJ3QgYWRkZWQgYWJvdmUuIEl0IG11c3QgYmUg
YSBwdXJlbHkgaW50ZXJuYWwgZnVuY3Rpb24uCi0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiB3YXNtQ2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSwgInN0YXJ0IiwgaW5zdGFu
Y2UsIHdhc21DYWxsZWUsIHNpZ25hdHVyZSk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21G
dW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAg
SlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPndhc21F
bnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFz
c2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3Vt
ZW50cy5zaXplKCksICJzdGFydCIsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21F
bnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmUpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9u
LnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRh
YmxlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIK
ICNpbmNsdWRlICJXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmgiCiAKICNpbmNsdWRlICJXZWJB
c3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmgiCkBAIC00MywxMiArNDQsNjYgQEAgY29uc3Qg
Q2xhc3NJbmZvIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1YwogIEBlbmQKICAqLwogCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUo
RXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQxMzUKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBz
Y29wZSwgY3JlYXRlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9lc24n
dCB5ZXQgaW1wbGVtZW50IHRoZSBUYWJsZSBjb25zdHJ1Y3RvciBwcm9wZXJ0eSIpKSkpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBhdXRvIGdldFVpbnQzMiA9IFsmXSAoSlNWYWx1ZSB2YWx1ZSkg
LT4gdWludDMyX3QgeworICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1ZS50b0ludGVn
ZXIoZXhlYyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
KyAgICAgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IFVJTlRfTUFYKSB7
CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAg
ICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5U
YWJsZSBleHBlY3RzIHRoZSAnaW5pdGlhbCcgYW5kICdtYXhpbXVtJyBwcm9wZXJ0aWVzIHRvIGJl
IGludGVnZXJzIGluIHRoZSByYW5nZTogWzAsIDJeMzIgLSAxXSIpKSk7CisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGRvdWJsZVZhbHVlKTsKKyAgICB9OworCisgICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMg
cmVhbGx5IGNsb3NlIHRvIFdlYkFzc2VtYmx5Lk1lbW9yeSBjb25zdHJ1Y290ciwgd2UgY291bGQg
cHJvYmFibHkKKyAgICAvLyBmYWN0b3Igb3V0IHRoZWlyIGNvbW1vbiBiaXRzIGludG8gYSBzaW5n
bGUgZnVuY3Rpb24uCisKKyAgICBKU09iamVjdCogbWVtb3J5RGVzY3JpcHRvcjsKKyAgICB7Cisg
ICAgICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICAgICAgaWYg
KCFhcmd1bWVudC5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZSBleHBlY3RzIGl0cyBmaXJzdCBhcmd1bWVu
dCB0byBiZSBhbiBvYmplY3QiKSkpKTsKKyAgICAgICAgbWVtb3J5RGVzY3JpcHRvciA9IGpzQ2Fz
dDxKU09iamVjdCo+KGFyZ3VtZW50KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIElkZW50aWZp
ZXIgZWxlbWVudElkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbGVtZW50Iik7
CisgICAgICAgIEpTVmFsdWUgZWxlbWVudFZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4
ZWMsIGVsZW1lbnRJZGVudCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnRTdHJpbmcgPSBlbGVtZW50VmFsdWUudG9X
VEZTdHJpbmcoZXhlYyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKKyAgICAgICAgaWYgKGVsZW1lbnRTdHJpbmcgIT0gImFueWZ1bmMiKQorICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZSBl
eHBlY3RzIGl0cyAnZWxlbWVudCcgZmllbGQgdG8gYmUgdGhlIHN0cmluZyAnYW55ZnVuYyciKSkp
KTsKKyAgICB9CisKKyAgICBJZGVudGlmaWVyIGluaXRpYWxJZGVudCA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiaW5pdGlhbCIpOworICAgIEpTVmFsdWUgaW5pdGlhbFNpemVWYWx1ZSA9
IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBpbml0aWFsSWRlbnQpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICB1aW50MzJfdCBpbml0aWFsID0gZ2V0
VWludDMyKGluaXRpYWxTaXplVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07CisgICAg
SWRlbnRpZmllciBtYXhpbXVtSWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1h
eGltdW0iKTsKKyAgICBib29sIGhhc1Byb3BlcnR5ID0gbWVtb3J5RGVzY3JpcHRvci0+aGFzUHJv
cGVydHkoZXhlYywgbWF4aW11bUlkZW50KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CisgICAgaWYgKGhhc1Byb3BlcnR5KSB7CisgICAgICAgIEpTVmFsdWUgbWF4
U2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMsIG1heGltdW1JZGVudCk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgbWF4
aW11bSA9IGdldFVpbnQzMihtYXhTaXplVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICAgICAgaWYgKGluaXRpYWwgPiAqbWF4aW11bSkg
eworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCInbWF4aW11bScgcHJvcGVydHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1
YWwgdG8gdGhlICdpbml0aWFsJyBwcm9wZXJ0eSIpKSkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZSh2bSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCks
IGluaXRpYWwsIG1heGltdW0pKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIHN0YXRlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlU
YWJsZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKIAog
I2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmgiCiAKQEAgLTQyLDEwICs0
MywxMzQgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cAogIEBlbmQK
ICAqLwogCi1XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90
eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNXZWJBc3NlbWJseVRhYmxlKiBnZXRUYWJsZShFeGVj
U3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSB2KQoreworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogcmVzdWx0
ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPih2KTsKKyAgICBpZiAoIXJlc3Vs
dCkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCAKKyAgICAgICAg
ICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImV4cGVjdGVkIHx0aGlzfCB2
YWx1ZSB0byBiZSBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSk7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNMZW5ndGgoRXhl
Y1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQ
cm90b0Z1bmNHcm93KEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3
ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSopOwor
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFz
c2VtYmx5VGFibGUqIHRhYmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0YWJsZS0+c2l6ZSgpKSk7Cit9CisKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dyb3coRXhlY1N0
YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUq
IHRhYmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICAvLyBGSVhNRTogbGV0cyBt
YWtlIGEgaGVscGVyIGZvciB0aGlzIGFzIHRoZSBzcGVjIGhhcyBkb25lLgorICAgIGRvdWJsZSBk
b3VibGVWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50ZWdlcihleGVjKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgaWYgKGRvdWJsZVZhbHVlIDwg
MCB8fCBkb3VibGVWYWx1ZSA+IFVJTlRfTUFYKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLmdyb3cgZXhwZWN0cyBhbiBpbnRl
Z2VyIGFyZ3VtZW50IGluIHRoZSByYW5nZTogWzAsIDJeMzIgLSAxXSIpKSk7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfQorCisgICAgaWYgKCF0YWJsZS0+Z3JvdyhzdGF0aWNfY2FzdDx1aW50
MzJfdD4oZG91YmxlVmFsdWUpKSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLAorICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
V2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLmdyb3cgY291bGQgbm90IGdyb3cgdGhlIHRhYmxl
IikpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHZXQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gZ2V0VGFibGUoZXhl
Yywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CisKKyAgICAvLyBGSVhNRTogbGV0cyBtYWtlIGEgaGVscGVyIGZvciB0aGlz
IGFzIHRoZSBzcGVjIGhhcyBkb25lLgorICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvSW50ZWdlcihleGVjKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CisgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IFVJ
TlRfTUFYKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAg
ICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHku
VGFibGUucHJvdG90eXBlLmdldCBleHBlY3RzIGFuIGludGVnZXIgYXJndW1lbnQgaW4gdGhlIHJh
bmdlOiBbMCwgMl4zMiAtIDFdIikpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICB1aW50MzJfdCBpbmRleCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihkb3VibGVWYWx1ZSk7Cisg
ICAgaWYgKGluZGV4ID49IHRhYmxlLT5zaXplKCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuZ2V0IGV4cGVjdHMgYW4gaW50
ZWdlciBsZXNzIHRoYW4gdGhlIHNpemUgb2YgdGhlIHRhYmxlIikpKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICBpZiAoV2ViQXNzZW1ibHlGdW5jdGlvbiogcmVzdWx0ID0gdGFi
bGUtPmdldEZ1bmN0aW9uKGluZGV4KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNTZXQoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFi
bGUqIHRhYmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24g
PSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2YWx1ZSk7CisgICAgaWYgKCF2
YWx1ZS5pc051bGwoKSAmJiAhZnVuY3Rpb24pIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5zZXQgZXhwZWN0cyB0aGUgc2Vjb25k
IGFyZ3VtZW50IHRvIGJlIG51bGwgb3IgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuRnVuY3Rp
b24iKSkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIC8vIEZJWE1FOiBsZXRz
IG1ha2UgYSBoZWxwZXIgZm9yIHRoaXMgYXMgdGhlIHNwZWMgaGFzIGRvbmUuCisgICAgZG91Ymxl
IGRvdWJsZVZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnRlZ2VyKGV4ZWMpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICBpZiAoZG91YmxlVmFsdWUg
PCAwIHx8IGRvdWJsZVZhbHVlID4gVUlOVF9NQVgpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuc2V0IGV4cGVjdHMgaXRzIGZp
cnN0IGFyZ3VtZW50IHRvIGJlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlOiBbMCwgMl4zMiAtIDFd
IikpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBpbmRleCA9
IHN0YXRpY19jYXN0PHVpbnQzMl90Pihkb3VibGVWYWx1ZSk7CisgICAgaWYgKGluZGV4ID49IHRh
YmxlLT5zaXplKCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwK
KyAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3Nl
bWJseS5UYWJsZS5wcm90b3R5cGUuZ2V0IGV4cGVjdHMgYW4gaW50ZWdlciBsZXNzIHRoYW4gdGhl
IHNpemUgb2YgdGhlIHRhYmxlIikpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBpZiAodmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHRhYmxlLT5jbGVhckZ1bmN0aW9uKGluZGV4
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCEhZnVuY3Rpb24pOworICAgICAgICB0YWJs
ZS0+c2V0RnVuY3Rpb24odm0sIGluZGV4LCBmdW5jdGlvbik7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK1dlYkFzc2VtYmx5VGFi
bGVQcm90b3R5cGUqIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAg
IGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5VGFi
bGVQcm90b3R5cGU+KHZtLmhlYXApKSBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKHZtLCBzdHJ1
Y3R1cmUpOwotICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG9iamVjdC0+Zmlu
aXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIApA
QCAtNTQsOSArMTc5LDE0IEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZTo6
Y3IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAK
LXZvaWQgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQor
dm9pZCBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworCisgICAgSlNDX05BVElWRV9HRVRURVIoImxlbmd0aCIsIHdlYkFzc2VtYmx5VGFibGVQ
cm90b0Z1bmNMZW5ndGgsIERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgIEpTQ19OQVRJVkVfRlVO
Q1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJncm93Iiwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVu
Y0dyb3csIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTigiZ2V0Iiwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dldCwgRG9udEVudW0sIDEp
OworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJzZXQiLCB3ZWJB
c3NlbWJseVRhYmxlUHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7CiB9CiAKIFdlYkFzc2VtYmx5
VGFibGVQcm90b3R5cGU6OldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmgJKHJldmlzaW9uIDIwOTcwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFS
RV9JTkZPOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwogCiBwcml2YXRlOgog
ICAgIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296942</attachid>
            <date>2016-12-12 11:45:56 -0800</date>
            <delta_ts>2016-12-12 13:44:09 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>46852</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwkocmV2aXNpb24gMjA5NzA0
KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwkod29ya2luZyBjb3B5
KQpAQCAtNzgsOCArNzgsOSBAQCBmb3IgKGNvbnN0IGMgaW4gY29uc3RydWN0b3JQcm9wZXJ0aWVz
KSB7CiAgICAgICAgIG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6IDIwfSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgIlRhYmxlIjoKLSAgICAgICAgLy8gRklYTUUgSW1wbGVtZW50
IGFuZCB0ZXN0IHRoZXNlIEFQSXMgZnVydGhlci4gRm9yIG5vdyB0aGV5IGp1c3QgdGhyb3cuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk3NzUKLSAgICAgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oKSwgRXJyb3IsIGBXZWJBc3NlbWJs
eSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlICR7Y30gY29uc3RydWN0b3IgcHJvcGVydHlgKTsK
KyAgICAgICAgbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAyMCwgZWxlbWVudDogImFu
eWZ1bmMifSk7CisgICAgICAgIG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDogMjAsIG1h
eGltdW06IDIwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KTsKKyAgICAgICAgbmV3IFdlYkFzc2VtYmx5
LlRhYmxlKHtpbml0aWFsOiAyMCwgbWF4aW11bTogMjUsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlICJDb21waWxlRXJyb3IiOgogICAgIGNhc2UgIlJ1bnRp
bWVFcnJvciI6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDYg
KzE4OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBF
eHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIFJlc3VsdExpc3QmIHN0YWNrKTsKICAgICBWYWx1
ZSogemVyb0ZvclR5cGUoVHlwZSk7CiAKKyAgICBWTSYgbV92bTsKICAgICBjb25zdCBJbW11dGFi
bGVGdW5jdGlvbkluZGV4U3BhY2UmIG1fZnVuY3Rpb25JbmRleFNwYWNlOwogICAgIFByb2NlZHVy
ZSYgbV9wcm9jOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwpAQCAtMTk5LDggKzIw
MCw5IEBAIHByaXZhdGU6CiAgICAgVmFsdWUqIG1fZnVuY3Rpb25JbmRleFNwYWNlVmFsdWU7CiB9
OwogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1lbW9yeUluZm9ybWF0aW9u
JiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29t
cGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRl
eFNwYWNlKQotICAgIDogbV9mdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKQor
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihWTSYgdm0sIGNvbnN0IE1lbW9yeUluZm9ybWF0
aW9uJiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiog
Y29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25J
bmRleFNwYWNlKQorICAgIDogbV92bSh2bSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXhTcGFjZSkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCiAgICAgLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQogewpAQCAtNjY5LDI3
ICs2NzEsNTIgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOwogICAgIEFTU0VS
VChzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgPT0gYXJncy5zaXplKCkpOwogCisgICAgIAor
ICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXI7CisgICAgRXhwcmVzc2lv
blR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemU7CisgICAgeworICAgICAgICBFeHByZXNz
aW9uVHlwZSB0b3BJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksCisgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwg
Jm1fdm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlKSk7CisgICAgICAgIEV4cHJlc3Npb25UeXBl
IHRhYmxlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHRvcEluc3RhbmNlLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSk7CisgICAgICAgIGNhbGxhYmxl
RnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUs
IEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSk7CisgICAgICAgIGNhbGxh
YmxlRnVuY3Rpb25CdWZmZXJTaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICB0YWJsZSwg
SlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZlNpemUoKSk7CisgICAgfQorCiAgICAgLy8gQ2hl
Y2sgdGhlIGluZGV4IHdlIGFyZSBsb29raW5nIGZvciBpcyB2YWxpZC4KICAgICB7Ci0gICAgICAg
IEV4cHJlc3Npb25UeXBlIG1heFZhbGlkSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kSW50
Q29uc3RhbnQobV9wcm9jLCBPcmlnaW4oKSwgSW50MzIsIG1fZnVuY3Rpb25JbmRleFNwYWNlLnNp
emUpOwogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgbV96
ZXJvVmFsdWVzW2xpbmVhcml6ZVR5cGUoSTMyKV0sCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgT3JpZ2luKCksIGNhbGxl
ZUluZGV4LCBtYXhWYWxpZEluZGV4KSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgY2FsbGVlSW5kZXgs
IGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVy
YXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CiAgICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgpOwogICAgICAgICB9KTsKICAg
ICB9CiAKLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIGZ1bmN0aW9uIGluZGV4IHNw
YWNlIHdlIGFyZSBsb29raW5nIGZvci4KKyAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhl
IHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KICAgICBFeHByZXNzaW9uVHlw
ZSBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwg
T3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgWkV4dDMyLCBPcmlnaW4oKSwgY2FsbGVlSW5kZXgpLAogICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9jLCBPcmlnaW4oKSwgcG9pbnRlclR5cGUoKSwgc2l6
ZW9mKENhbGxhYmxlRnVuY3Rpb24pKSk7Ci0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5j
dGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBPcmln
aW4oKSwgbV9mdW5jdGlvbkluZGV4U3BhY2VWYWx1ZSwgb2Zmc2V0KTsKKyAgICBFeHByZXNzaW9u
VHlwZSBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBBZGQsIE9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBvZmZzZXQpOwor
CisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgQ2FsbGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4g
V2UgdHJhcCBpZiBpdCBpc24ndC4gQSBudWxsIFNpZ25hdHVyZSogaW5kaWNhdGVzIGl0J3Mgbm90
IGluaXRpYWxpemVkLgorICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNpZ25hdHVyZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5
cGUoKSwgT3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIE9CSkVDVF9PRkZTRVRPRihDYWxsYWJs
ZUZ1bmN0aW9uLCBzaWduYXR1cmUpKTsKKyAgICB7CisgICAgICAgIC8vIElmIHRoZSBTaWduYXR1
cmUqIGlzIG51bGxwdHIsIHdlIHRyYXAuCisgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
RXF1YWwsIE9yaWdpbigpLCAKKyAgICAgICAgICAgICAgICBjYWxsZWVTaWduYXR1cmUsIAorICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9w
cm9jLCBPcmlnaW4oKSwgbnVsbHB0cikpKTsKKworICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9y
KFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgIH0pOworICAgIH0K
IAogICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyB0aGUgdmFsdWUgd2UgZXhwZWN0
LgogICAgIHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBPcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgT0JKRUNUX09GRlNFVE9GKENhbGxhYmxl
RnVuY3Rpb24sIHNpZ25hdHVyZSkpOwogICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNp
Z25hdHVyZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9j
LCBPcmlnaW4oKSwgc2lnbmF0dXJlKTsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigp
LAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBO
b3RFcXVhbCwgT3JpZ2luKCksIGNhbGxlZVNpZ25hdHVyZSwgZXhwZWN0ZWRTaWduYXR1cmUpKTsK
QEAgLTcxMyw2ICs3NDAsNyBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChj
b25zCiAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/
IDAgOiAxXS5ncHIoKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CisKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtODQ2LDcgKzg3NCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50
ZXJuYWxGdW5jdGlvbj4gcGEKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8V2Fz
bUludGVybmFsRnVuY3Rpb24+KCk7CiAKICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwotICAgIEIz
SVJHZW5lcmF0b3IgY29udGV4dChpbmZvLm1lbW9yeSwgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCks
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4U3BhY2UpOworICAgIEIzSVJH
ZW5lcmF0b3IgY29udGV4dCh2bSwgaW5mby5tZW1vcnksIHByb2NlZHVyZSwgcmVzdWx0LmdldCgp
LCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICBGdW5j
dGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgZnVuY3Rpb25TdGFydCwg
ZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgZnVuY3Rpb25JbmRleFNwYWNlLCBpbmZvKTsKICAg
ICBpZiAoIXBhcnNlci5wYXJzZSgpKQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2aXNp
b24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDI4IEBAIHN0cnVjdCBTZWdtZW50IHsKICAgICB9
CiB9OwogCitjbGFzcyBUYWJsZUluZm9ybWF0aW9uIHsKK3B1YmxpYzoKKyAgICBUYWJsZUluZm9y
bWF0aW9uKCkgPSBkZWZhdWx0OworICAgIFRhYmxlSW5mb3JtYXRpb24odWludDMyX3QgaW5pdGlh
bCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSwgYm9vbCBpc0ltcG9ydCkKKyAgICAg
ICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKKyAgICAgICAgLCBtX21heGltdW0obWF4aW11bSkKKyAg
ICAgICAgLCBtX2lzSW1wb3J0KGlzSW1wb3J0KQorICAgICAgICAsIG1faXNWYWxpZCh0cnVlKQor
ICAgIHsgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNWYWxpZDsgfQorICAgIGJvb2wgaXNJbXBvcnQoKSBjb25zdCB7IHJldHVybiBtX2lzSW1wb3J0
OyB9CisgICAgdWludDMyX3QgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsgfQor
ICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21h
eGltdW07IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2luaXRpYWw7CisgICAgc3RkOjpv
cHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOworICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZhbHNl
IH07CisgICAgYm9vbCBtX2lzVmFsaWQgeyBmYWxzZSB9OworfTsKKwogc3RydWN0IE1vZHVsZUlu
Zm9ybWF0aW9uIHsKICAgICBWZWN0b3I8U2lnbmF0dXJlPiBzaWduYXR1cmVzOwogICAgIFZlY3Rv
cjxJbXBvcnQ+IGltcG9ydHM7CkBAIC0xNTgsNiArMTgwLDcgQEAgc3RydWN0IE1vZHVsZUluZm9y
bWF0aW9uIHsKICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwogICAgIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlOwogICAgIFZlY3RvcjxTZWdtZW50OjpQ
dHI+IGRhdGE7CisgICAgVGFibGVJbmZvcm1hdGlvbiB0YWJsZUluZm9ybWF0aW9uOwogCiAgICAg
fk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwpAQCAtMTg1LDEzICsyMDgsMjAgQEAgdHlwZWRlZiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgV2FzbVRvSlNTdAogLy8gV2ViQXNzZW1ibHkgZGlyZWN0IGNh
bGxzIGFuZCBjYWxsX2luZGlyZWN0IHVzZSBpbmRpY2VzIGludG8gImZ1bmN0aW9uIGluZGV4IHNw
YWNlIi4gVGhpcyBzcGFjZSBzdGFydHMgd2l0aCBhbGwgaW1wb3J0cywgYW5kIHRoZW4gYWxsIGlu
dGVybmFsIGZ1bmN0aW9ucy4KIC8vIENhbGxhYmxlRnVuY3Rpb24gYW5kIEZ1bmN0aW9uSW5kZXhT
cGFjZSBhcmUgb25seSBtZWFudCBhcyBmYXN0IGxvb2t1cCB0YWJsZXMgZm9yIHRoZXNlIG9wY29k
ZXMsIGFuZCBkbyBub3Qgb3duIGNvZGUuCiBzdHJ1Y3QgQ2FsbGFibGVGdW5jdGlvbiB7Ci0gICAg
Q2FsbGFibGVGdW5jdGlvbihTaWduYXR1cmUqIHNpZ25hdHVyZSkKKyAgICBDYWxsYWJsZUZ1bmN0
aW9uKCkgPSBkZWZhdWx0OworCisgICAgQ2FsbGFibGVGdW5jdGlvbihTaWduYXR1cmUqIHNpZ25h
dHVyZSwgdm9pZCogY29kZSA9IG51bGxwdHIpCiAgICAgICAgIDogc2lnbmF0dXJlKHNpZ25hdHVy
ZSkKLSAgICAgICAgLCBjb2RlKG51bGxwdHIpCisgICAgICAgICwgY29kZShjb2RlKQogICAgIHsK
ICAgICB9Ci0gICAgU2lnbmF0dXJlKiBzaWduYXR1cmU7IC8vIEZJWE1FIHBhY2sgdGhpcyBpbnNp
ZGUgYSAodW5pcXVlZCkgaW50ZWdlciAoZm9yIGNvcnJlY3RuZXNzIHRoZSBwYXJzZXIgc2hvdWxk
IHVuaXF1ZSBTaWduYXR1cmVzKSwgYW5kIHRoZW4gcGFjayB0aGF0IGludGVnZXIgaW50byB0aGUg
Y29kZSBwb2ludGVyLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1
NTExCi0gICAgdm9pZCogY29kZTsKKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiAhY29kZSAmJiAhc2lnbmF0dXJlOyB9CisKKyAgICAvLyBGSVhNRSBwYWNrIHRo
aXMgaW5zaWRlIGEgKHVuaXF1ZWQpIGludGVnZXIgKGZvciBjb3JyZWN0bmVzcyB0aGUgcGFyc2Vy
IHNob3VsZCB1bmlxdWUgU2lnbmF0dXJlcyksCisgICAgLy8gYW5kIHRoZW4gcGFjayB0aGF0IGlu
dGVnZXIgaW50byB0aGUgY29kZSBwb2ludGVyLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1NTExCisgICAgU2lnbmF0dXJlKiBzaWduYXR1cmUgeyBudWxscHRyIH07
IAorICAgIHZvaWQqIGNvZGUgeyBudWxscHRyIH07CiB9OwogdHlwZWRlZiBWZWN0b3I8Q2FsbGFi
bGVGdW5jdGlvbj4gRnVuY3Rpb25JbmRleFNwYWNlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA5NzA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1MCw3ICsyNTAsOSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBv
cnQoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5h
bDo6VGFibGU6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVl
OworICAgICAgICAgICAgaWYgKCFwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6IHsKQEAgLTMwMCw0NSArMzAyLDk5IEBAIGJvb2wg
TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUoKQorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlUmVz
aXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiYg
bWF4aW11bSkKIHsKLSAgICAvLyBGSVhNRSBpbXBsZW1lbnQgdGFibGUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgQVNTRVJUKCFtYXhpbXVtKTsKKworICAgIHVpbnQ4X3QgZmxhZ3M7Cisg
ICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGZsYWdzKSB7CisgICAgICAgIHVpbnQzMl90IG1heGltdW1JbnQ7CisgICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIobWF4aW11bUludCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgaWYgKGluaXRpYWwgPiBtYXhpbXVtSW50KQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIG1heGltdW0gPSBtYXhpbXVtSW50OworICAgIH0KKwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIo
Ym9vbCBpc0ltcG9ydCkKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKGJvb2wg
aXNJbXBvcnQpCiB7Ci0gICAgLy8gV2UgZG9uJ3QgYWxsb3cgcmVkZWNsYXJpbmcgbWVtb3J5LiBF
aXRoZXIgdmlhIGltcG9ydCBvciBkZWZpbml0aW9uLgotICAgIGlmIChtX21vZHVsZS0+bWVtb3J5
KQorICAgIC8vIFdlJ3JlIG9ubHkgYWxsb3dlZCBhIHRvdGFsIG9mIG9uZSBUYWJsZSBpbXBvcnQg
b3IgZGVmaW5pdGlvbi4KKyAgICBpZiAobV9oYXNUYWJsZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgdWludDhfdCBmbGFnczsKLSAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxhZ3MpKQor
ICAgIG1faGFzVGFibGUgPSB0cnVlOworCisgICAgdWludDMyX3QgY291bnQ7CisgICAgaWYgKCFw
YXJzZVZhclVJbnQzMihjb3VudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVpbnQz
Ml90IGluaXRpYWw7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSkKKyAgICAvLyBX
ZSBvbmx5IGFsbG93IG9uZSB0YWJsZSBmb3Igbm93LgorICAgIGlmIChjb3VudCAhPSAxKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZChpbml0aWFs
KSkKKyAgICBpbnQ4X3QgdHlwZTsKKyAgICBpZiAoIXBhcnNlSW50Nyh0eXBlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50OF90IGFueWZ1bmNUeXBlID0g
LTE2OworICAgIGlmICh0eXBlICE9IGFueWZ1bmNUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICB1aW50MzJfdCBpbml0aWFsOworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1h
eGltdW07CisgICAgaWYgKCFwYXJzZVJlc2l6YWJsZUxpbWl0cyhpbml0aWFsLCBtYXhpbXVtKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKCFtYXhpbXVtIHx8ICptYXhpbXVt
ID49IGluaXRpYWwpOwogCi0gICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQoaW5pdGlhbCk7
CisgICAgbV9tb2R1bGUtPnRhYmxlSW5mb3JtYXRpb24gPSBUYWJsZUluZm9ybWF0aW9uKGluaXRp
YWwsIG1heGltdW0sIGlzSW1wb3J0KTsKIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1v
ZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSgpCit7CisgICAgYm9vbCBpc0ltcG9ydCA9IGZhbHNlOwor
ICAgIHJldHVybiBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKK30KKworYm9vbCBNb2R1bGVQ
YXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpCit7CisgICAgLy8gV2UgZG9u
J3QgYWxsb3cgcmVkZWNsYXJpbmcgbWVtb3J5LiBFaXRoZXIgdmlhIGltcG9ydCBvciBkZWZpbml0
aW9uLgorICAgIGlmIChtX21vZHVsZS0+bWVtb3J5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3VudDsKICAgICBQYWdlQ291bnQgbWF4aW11bVBh
Z2VDb3VudDsKLSAgICBpZiAoZmxhZ3MpIHsKLSAgICAgICAgdWludDMyX3QgbWF4aW11bTsKLSAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihtYXhpbXVtKSkKKyAgICB7CisgICAgICAgIHVpbnQz
Ml90IGluaXRpYWw7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Cisg
ICAgICAgIGlmICghcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQo
bWF4aW11bSkpCisgICAgICAgIEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFs
KTsKKyAgICAgICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQoaW5pdGlhbCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VDb3VudCht
YXhpbXVtKTsKLSAgICAgICAgaWYgKGluaXRpYWxQYWdlQ291bnQgPiBtYXhpbXVtUGFnZUNvdW50
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbml0aWFsUGFnZUNvdW50ID0g
UGFnZUNvdW50KGluaXRpYWwpOworCisgICAgICAgIGlmIChtYXhpbXVtKSB7CisgICAgICAgICAg
ICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZCgqbWF4aW11bSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VDb3VudCgqbWF4
aW11bSk7CisgICAgICAgIH0KICAgICB9CisgICAgQVNTRVJUKGluaXRpYWxQYWdlQ291bnQpOwor
ICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50ID49IGluaXRp
YWxQYWdlQ291bnQpOwogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9
OwogICAgIG1fbW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbihpbml0aWFsUGFnZUNv
dW50LCBtYXhpbXVtUGFnZUNvdW50LCBwaW5uZWRTaXplcywgaXNJbXBvcnQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAkocmV2aXNpb24g
MjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMiArNzksMTUgQEAgcHJpdmF0ZToKICN1bmRlZiBXQVNN
X1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CisgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKTsKIAogICAgIFZNKiBtX3ZtOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGU7CiAgICAgRnVuY3Rpb25JbmRleFNw
YWNlIG1fZnVuY3Rpb25JbmRleFNwYWNlOwogICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnk+IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OwogICAgIGJvb2wgbV9mYWlsZWQgeyB0
cnVlIH07CisgICAgYm9vbCBtX2hhc1RhYmxlIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9lcnJv
ck1lc3NhZ2U7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDIwOTcwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnZpc2l0Q2hpbGRyZQogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVs
ZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tZW1vcnkpOworICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhYmxlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKICAgICAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb24oaSkpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5VGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTcxLDExICs3MiwxNiBAQCBw
dWJsaWM6CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1v
cnkuZ2V0KCk7IH0KICAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1v
cnkqIG1lbW9yeSkgeyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7IH0KIAorICAgIEpT
V2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CisgICAg
dm9pZCBzZXRUYWJsZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUpIHsgbV90YWJs
ZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsgfQorCiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklt
cG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkKICAgICB7CiAgICAgICAgIHJldHVybiBvZmZzZXRP
ZkltcG9ydEZ1bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KSAqIGlkeDsK
ICAgICB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3RhYmxlKTsgfQorCiBwcm90
ZWN0ZWQ6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWdu
ZWQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwg
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqKTsKQEAgLTk2LDYgKzEwMiw3IEBAIHByaXZhdGU6CiAg
ICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRl
QmFycmllcjxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Q7
CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNZW1vcnk+IG1fbWVtb3J5OworICAgIFdy
aXRlQmFycmllcjxKU1dlYkFzc2VtYmx5VGFibGU+IG1fdGFibGU7CiAgICAgdW5zaWduZWQgbV9u
dW1JbXBvcnRGdW5jdGlvbnM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHJldmlzaW9uIDIwOTcwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCi1KU1dlYkFzc2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlUYWJs
ZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitjb25zdCBDbGFzc0luZm8g
SlNXZWJBc3NlbWJseVRhYmxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWJsZSIsICZCYXNl
OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseVRhYmxlKSB9Owor
CitKU1dlYkFzc2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IG1heGltdW0pCiB7Ci0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFibGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5VGFi
bGUodm0sIHN0cnVjdHVyZSk7CisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFibGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5VGFi
bGUodm0sIHN0cnVjdHVyZSwgaW5pdGlhbCwgbWF4aW11bSk7CiAgICAgaW5zdGFuY2UtPmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC00NCw5ICs0NywyMiBA
QCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlU3RyCiAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5VGFi
bGU6OkpTV2ViQXNzZW1ibHlUYWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNX
ZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11
bSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKIHsKKyAgICBtX3NpemUgPSBpbml0aWFsOwor
ICAgIG1fbWF4aW11bSA9IG1heGltdW07CisgICAgQVNTRVJUKCFtX21heGltdW0gfHwgKm1fbWF4
aW11bSA+PSBtX3NpemUpOworCisgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHdvcnRoIHRyeWlu
ZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3BlYyByZWNvbW1lbmRzIGRvaW5n
IHNvLgorICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9pbmcgdGhhdC4KKyAgICBtX2Z1
bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPjo6bWFsbG9jKHNpemVv
ZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIG1fc2l6ZSk7CisgICAgbV9qc0Z1bmN0aW9ucyA9
IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4+OjptYWxsb2Moc2l6
ZW9mKFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPikgKiBtX3NpemUpOworICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkgeworICAgICAgICBuZXcgKCZtX2Z1
bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOworICAgICAgICBBU1NF
UlQoIW1fZnVuY3Rpb25zLmdldCgpW2ldLnNpZ25hdHVyZSk7IC8vIFdlIHJlbHkgb24gdGhpcyBp
biBjb21waWxlZCBjb2RlLgorICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBX
cml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4oKTsKKyAgICB9CiB9CiAKIHZvaWQgSlNX
ZWJBc3NlbWJseVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC02MiwxMyArNzgsNTAg
QEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmRlc3Ryb3koSlNDZWxsKgogCiB2b2lkIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRh
YmxlKj4oY2VsbCk7CisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVj
dC0+bV9zaXplOyArK2kpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2pz
RnVuY3Rpb25zLmdldCgpW2ldKTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlU
YWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFibGUiLCAmQmFzZTo6c19pbmZvLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlUYWJsZSkgfTsKK2Jvb2wgSlNXZWJBc3Nl
bWJseVRhYmxlOjpncm93KHVpbnQzMl90IG5ld1NpemUpCit7CisgICAgaWYgKG5ld1NpemUgPCBt
X3NpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobmV3U2l6ZSA9PSBtX3NpemUp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+ICpt
YXhpbXVtKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiB3ZSBzaG91
bGQgcHJvdGVjdCBvdXJzZWx2ZXMgZnJvbSBjcmF6eSBzaXplcyBoZXJlLgorICAgIG1fZnVuY3Rp
b25zLnJlYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogbmV3U2l6ZSk7Cisg
ICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlG
dW5jdGlvbj4pICogbmV3U2l6ZSk7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkg
PCBuZXdTaXplOyArK2kpIHsKKyAgICAgICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdh
c206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICAgICAgbmV3ICgmbV9qc0Z1bmN0aW9ucy5nZXQo
KVtpXSkgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+KCk7CisgICAgfQorICAgIG1f
c2l6ZSA9IG5ld1NpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJs
eVRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQoreworICAgIFJFTEVBU0VfQVNT
RVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdy
aXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPigpOworICAgIG1fZnVuY3Rpb25zLmdldCgp
W2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICBBU1NFUlQoIW1fZnVuY3Rp
b25zLmdldCgpW2luZGV4XS5zaWduYXR1cmUpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGls
ZWQgY29kZS4KK30KKwordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKFZNJiB2
bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX2pzRnVuY3Rpb25zLmdldCgp
W2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtp
bmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKGZ1bmN0aW9uLT5zaWduYXR1cmUoKSwgZnVu
Y3Rpb24tPndhc21FbnRyeXBvaW50KCkpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmgJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyMyArMjksNDggQEAK
IAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL01hbGxv
Y1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdhc20geworc3RydWN0IENh
bGxhYmxlRnVuY3Rpb247Cit9CisKIGNsYXNzIEpTV2ViQXNzZW1ibHlUYWJsZSA6IHB1YmxpYyBK
U0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJs
ZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWJsZSogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWJsZSogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
bWF4aW11bSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotcHJvdGVjdGVk
OgotICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KKyAg
ICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgYm9vbCBncm93
KHVpbnQzMl90IG5ld1NpemUpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBXZWJBc3NlbWJseUZ1
bmN0aW9uKiBnZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKKyAgICB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMu
Z2V0KClbaW5kZXhdLmdldCgpOworICAgIH0KKyAgICB2b2lkIGNsZWFyRnVuY3Rpb24odWludDMy
X3QgaW5kZXgpOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2Vi
QXNzZW1ibHlGdW5jdGlvbiopOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxlLCBtX3NpemUpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZ1bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fZnVuY3Rpb25zKTsgfQorCitwcml2YXRl
OgorICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGluaXRp
YWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIE1hbGxv
Y1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICBNYWxsb2NQdHI8
V3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+PiBtX2pzRnVuY3Rpb25zOworICAgIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1fbWF4aW11bTsKKyAgICB1aW50MzJfdCBtX3NpemU7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDk3MDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIEVuY29kZWRKU1ZhbHVlIFdlYkFz
c2VtYmx5RnVuY3Rpb246OmNhbGwKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHByZXZKU1dl
YkFzc2VtYmx5SW5zdGFuY2UgPSB2bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiAgICAgdm0u
dG9wSlNXZWJBc3NlbWJseUluc3RhbmNlID0gaW5zdGFuY2UoKTsKICAgICBBU1NFUlQoaW5zdGFu
Y2UoKSk7Ci0gICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1FbnRyeVRvV2FzbSh3ZWJB
c3NlbWJseUNhbGxlZSgpLT5lbnRyeXBvaW50KCksICZ2bSwgcHJvdG9DYWxsRnJhbWUpOworICAg
IEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20obV9qc0VudHJ5cG9pbnQt
PmVudHJ5cG9pbnQoKSwgJnZtLCBwcm90b0NhbGxGcmFtZSk7CiAgICAgdm0udG9wSlNXZWJBc3Nl
bWJseUluc3RhbmNlID0gcHJldkpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKIAogICAgIC8vIEZJWE1F
IGlzIHRoaXMgY29ycmVjdD8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDg3NgpAQCAtMTQwLDEyICsxNDAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6Y2FsbAogICAgIHJldHVybiBFbmNvZGVkSlNWYWx1ZSgpOwogfQogCi1XZWJBc3Nl
bWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUNhbGxlZSog
Y2FsbGVlLCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKK1dlYkFzc2VtYmx5RnVuY3Rpb24q
IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQs
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmUqIHNp
Z25hdHVyZSkKIHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9z
dEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RG
dW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCk7CiAg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlGdW5jdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlv
bih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSwgY2FsbGVlLCBzaWduYXR1
cmUpOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3Ro
LCBuYW1lLCBpbnN0YW5jZSwganNFbnRyeXBvaW50LCB3YXNtRW50cnlwb2ludCwgc2lnbmF0dXJl
KTsKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CiAKQEAgLTE2NiwxNSArMTY2LDE4IEBAIHZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9p
bnN0YW5jZSk7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fd2FzbUNhbGxlZSk7
CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fanNFbnRyeXBvaW50KTsKKyAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV93YXNtRW50cnlwb2ludCk7CiB9CiAKLXZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRh
YmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNh
bGxlZSwgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rp
b246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwg
dW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKQog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUp
OwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBtX2luc3RhbmNlLnNldCh2bSwg
dGhpcywgaW5zdGFuY2UpOwotICAgIG1fd2FzbUNhbGxlZS5zZXQodm0sIHRoaXMsIHdhc21DYWxs
ZWUpOworICAgIEFTU0VSVChqc0VudHJ5cG9pbnQgIT0gd2FzbUVudHJ5cG9pbnQpOworICAgIG1f
anNFbnRyeXBvaW50LnNldCh2bSwgdGhpcywganNFbnRyeXBvaW50KTsKKyAgICBtX3dhc21FbnRy
eXBvaW50LnNldCh2bSwgdGhpcywgd2FzbUVudHJ5cG9pbnQpOwogICAgIG1fc2lnbmF0dXJlID0g
c2lnbmF0dXJlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDEyICsyOCwxMiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0ds
b2JhbE9iamVjdDsKLWNsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiBzdHJ1Y3QgUHJvdG9DYWxs
RnJhbWU7CiBjbGFzcyBXZWJBc3NlbWJseUluc3RhbmNlOwogCkBAIC01MywyOCArNTMsMjkgQEAg
cHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiwgV2FzbTo6U2lnbmF0dXJlKik7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKLSAgICBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiB3ZWJBc3NlbWJseUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUNh
bGxlZS5nZXQoKTsgfQogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UoKSBjb25z
dCB7IHJldHVybiBtX2luc3RhbmNlLmdldCgpOyB9Ci0gICAgY29uc3QgV2FzbTo6U2lnbmF0dXJl
KiBzaWduYXR1cmUoKQorICAgIFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKCkKICAgICB7IAog
ICAgICAgICBBU1NFUlQobV9zaWduYXR1cmUpOwogICAgICAgICByZXR1cm4gbV9zaWduYXR1cmU7
CiAgICAgfQogICAgIEVuY29kZWRKU1ZhbHVlIGNhbGwoVk0mLCBQcm90b0NhbGxGcmFtZSopOwor
ICAgIHZvaWQqIHdhc21FbnRyeXBvaW50KCkgeyByZXR1cm4gbV93YXNtRW50cnlwb2ludC0+ZW50
cnlwb2ludCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
TmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgV2FzbTo6U2lnbmF0
dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1
bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50LCBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlKik7CiAKIHByaXZhdGU6CiAgICAgV2Vi
QXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKICAg
ICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwotICAgIFdy
aXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX3dhc21DYWxsZWU7CisgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+IG1fanNFbnRyeXBvaW50OworICAgIFdyaXRlQmFy
cmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX3dhc21FbnRyeXBvaW50OwogICAgIFdhc206OlNp
Z25hdHVyZSogbV9zaWduYXR1cmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkyLDYgKzkyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwog
ICAgIC8vIEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NDEzMwogCiAgICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsK
KyAgICBib29sIGhhc1RhYmxlSW1wb3J0ID0gZmFsc2U7CiAgICAgLy8gRm9yIGVhY2ggaW1wb3J0
IGkgaW4gbW9kdWxlLmltcG9ydHM6CiAgICAgZm9yIChhdXRvJiBpbXBvcnQgOiBtb2R1bGVJbmZv
cm1hdGlvbi5pbXBvcnRzKSB7CiAgICAgICAgIC8vIDEuIExldCBvIGJlIHRoZSByZXN1bHRhbnQg
dmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVsZV9uYW1lKS4KQEAg
LTEzMSwxMiArMTMyLDM2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0
ZXJuYWw6OlRhYmxlOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzVGFibGVJbXBv
cnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFsaWRhdGlvbiBmYWlsdXJl
LgogICAgICAgICAgICAgLy8gNy4gT3RoZXJ3aXNlIChpIGlzIGEgdGFibGUgaW1wb3J0KToKLSAg
ICAgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBUYWJsZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAgICAgICAgICBoYXNUYWJsZUltcG9ydCA9IHRy
dWU7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNEeW5hbWljQ2Fz
dDxKU1dlYkFzc2VtYmx5VGFibGUqPih2YWx1ZSk7CiAgICAgICAgICAgICAvLyBpLiBJZiB2IGlz
IG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAg
ICAgICAgICBpZiAoIXRhYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3Nl
bWJseS5UYWJsZSIpKSkpOworCisgICAgICAgICAgICB1aW50MzJfdCBleHBlY3RlZEluaXRpYWwg
PSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKTsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBkbyB3ZSBjYXJlIGFib3V0IHRoZSBhY3R1YWwgc3RhcnRpbmcgImluaXRp
YWwiIHZhbHVlLCBvciBqdXN0IHRoZSBjdXJyZW50ICJzaXplIiBvZiB0aGUgdGFibGUsIHNpbmNl
IHRhYmxlcyBjYW4gZ3Jvdy4KKyAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHNwZWNpZmll
ZCBpbiB0aGUgSlMgQVBJLCBidXQgaXNuJ3QuCisgICAgICAgICAgICB1aW50MzJfdCBhY3R1YWxJ
bml0aWFsID0gdGFibGUtPnNpemUoKTsKKyAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwg
ZXhwZWN0ZWRJbml0aWFsKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRv
byBzbWFsbCIpKSkpOworCisgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
ZXhwZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhp
bXVtKCkpIHsKKyAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBhY3R1YWxN
YXhpbXVtID0gdGFibGUtPm1heGltdW0oKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1h
eGltdW0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBkaWQgbm90IGhh
dmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgqYWN0dWFsTWF4aW11bSA+
ICpleHBlY3RlZE1heGltdW0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9y
dHMgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11
bSIpKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAg
Ly8gaWkuIEFwcGVuZCB2IHRvIHRhYmxlcy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYu
W1tUYWJsZV1dIHRvIGltcG9ydHMuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgaW5zdGFuY2UtPnNldFRhYmxlKHZtLCB0YWJsZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpN
ZW1vcnk6IHsKQEAgLTE4NSw3ICsyMTAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zCiAKICAgICB7CiAgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLm1l
bW9yeSAmJiBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSkgewotICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGFuIGltcG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0
aHJvd24gYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZl
IGEgTWVtb3J5IGltcG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaGFzTWVtb3J5SW1wb3J0KTsKICAgICAgICAgfQog
CkBAIC0yMDAsNiArMjI1LDIwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnMKICAgICAgICAgfQogICAgIH0KIAorICAgIHsKKyAgICAgICAgaWYgKCEhbW9kdWxlSW5m
b3JtYXRpb24udGFibGVJbmZvcm1hdGlvbiAmJiBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9y
bWF0aW9uLmlzSW1wb3J0KCkpIHsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2
ZSBhIFRhYmxlIGltcG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaGFzVGFibGVJbXBvcnQpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbiAmJiAhaGFz
VGFibGVJbXBvcnQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1h
dGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0KCkpOworICAgICAgICAgICAgLy8gV2UgY3Jl
YXRlIGEgVGFibGUgd2hlbiBpdCdzIGEgVGFibGUgZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIGlu
c3RhbmNlLT5zZXRUYWJsZSh2bSwKKyAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZTo6
Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5
U3RydWN0dXJlKCksIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgp
LCBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSkpOworICAgICAg
ICB9CisgICAgfQorCiAgICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIGluc3RhbmNlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaWYgKHZlcmJvc2Up
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA5NzA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUg
PSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhlYywgbWF4aW11bSk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgICAgICB1aW50MzJfdCBz
aXplID0gZ2V0VWludDMyKG1heFNpemVWYWx1ZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgICAgICBpZiAoIVdhc206OlBhZ2VDb3Vu
dDo6aXNWYWxpZChzaXplKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgJ21heGltdW0nIHBhZ2UgY291bnQgaXMg
dG9vIGxhcmdlIikpKSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgICAgICAgICBtYXhpbXVtUGFnZUNvdW50ID0gV2FzbTo6UGFnZUNvdW50
KHNpemUpOwogCiAgICAgICAgICAgICBpZiAoaW5pdGlhbFBhZ2VDb3VudCA+IG1heGltdW1QYWdl
Q291bnQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM2LDkgKzEzNiwxMCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgICAgICAvLyAgICAgYS4gTGV0IGZ1bmMgYmUgYW4g
RXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdCBjcmVhdGVkIGZyb20gYy4KICAgICAgICAg
ICAgIC8vICAgICBiLiBBcHBlbmQgZnVuYyB0byBmdW5jcy4KICAgICAgICAgICAgIC8vICAgICBj
LiBSZXR1cm4gZnVuYy4KLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21DYWxs
ZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhw
LmZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRy
eXBvaW50Q2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGV4cC5mdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxs
ZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT53YXNtRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgV2Fz
bTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBtb2R1bGUtPnNpZ25hdHVyZUZvckZ1bmN0aW9uSW5k
ZXhTcGFjZShleHAuZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0
aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksIGV4cC5maWVsZC5zdHJpbmcoKSwgaW5z
dGFuY2UsIHdhc21DYWxsZWUsIHNpZ25hdHVyZSk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1
bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksIGV4cC5maWVsZC5zdHJpbmcoKSwg
aW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25h
dHVyZSk7CiAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gZnVuY3Rpb247CiAgICAgICAgICAg
ICBpZiAoaGFzU3RhcnQgJiYgc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPT0gZXhwLmZ1bmN0aW9u
SW5kZXgpCiAgICAgICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVu
Y3Rpb24pOwpAQCAtMTc0LDggKzE3NSw5IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmxpbmsoRXhlY1MKICAgICAgICAgLy8gRklYTUUgY2FuIHN0YXJ0IGNhbGwgaW1wb3J0cyAvIHRh
Ymxlcz8gVGhpcyBhc3N1bWVzIG5vdC4gaHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2Rl
c2lnbi9pc3N1ZXMvODk2CiAgICAgICAgIGlmICghbV9zdGFydEZ1bmN0aW9uLmdldCgpKSB7CiAg
ICAgICAgICAgICAvLyBUaGUgc3RhcnQgZnVuY3Rpb24gd2Fzbid0IGFkZGVkIGFib3ZlLiBJdCBt
dXN0IGJlIGEgcHVyZWx5IGludGVybmFsIGZ1bmN0aW9uLgotICAgICAgICAgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUNhbGxlZSA9IG1vZHVsZS0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksICJzdGFydCIs
IGluc3RhbmNlLCB3YXNtQ2FsbGVlLCBzaWduYXR1cmUpOworICAgICAgICAgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAg
ICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxl
LT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlv
bkluZGV4U3BhY2UpOworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24g
PSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJl
LT5hcmd1bWVudHMuc2l6ZSgpLCAic3RhcnQiLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVl
LCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlKTsKICAgICAgICAgICAgIG1fc3RhcnRG
dW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5
cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRh
YmxlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIgogCiAjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oIgpAQCAtNDMsMTIgKzQ0LDY2IEBA
IGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWMKICBAZW5kCiAgKi8KIAot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJs
eVRhYmxlKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0MTM1Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihz
dGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5
IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgVGFibGUgY29uc3RydWN0b3IgcHJvcGVydHkiKSkp
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byBnZXRVaW50MzIgPSBbJl0gKEpTVmFsdWUg
dmFsdWUpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUu
dG9JbnRlZ2VyKGV4ZWMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CisgICAgICAgIGlmIChkb3VibGVWYWx1ZSA8IDAgfHwgZG91YmxlVmFsdWUgPiBVSU5U
X01BWCkgeworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAg
ICAgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNz
ZW1ibHkuVGFibGUgZXhwZWN0cyB0aGUgJ2luaXRpYWwnIGFuZCAnbWF4aW11bScgcHJvcGVydGll
cyB0byBiZSBpbnRlZ2VycyBpbiB0aGUgcmFuZ2U6IFswLCAyXjMyIC0gMV0iKSkpOworICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVp
bnQzMl90Pihkb3VibGVWYWx1ZSk7CisgICAgfTsKKworICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0
aW9uIGlzIHJlYWxseSBjbG9zZSB0byBXZWJBc3NlbWJseS5NZW1vcnkgY29uc3RydWNvdHIsIHdl
IGNvdWxkIHByb2JhYmx5CisgICAgLy8gZmFjdG9yIG91dCB0aGVpciBjb21tb24gYml0cyBpbnRv
IGEgc2luZ2xlIGZ1bmN0aW9uLgorCisgICAgSlNPYmplY3QqIG1lbW9yeURlc2NyaXB0b3I7Cisg
ICAgeworICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAg
ICAgIGlmICghYXJndW1lbnQuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUgZXhwZWN0cyBpdHMgZmlyc3Qg
YXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IikpKSk7CisgICAgICAgIG1lbW9yeURlc2NyaXB0b3Ig
PSBqc0Nhc3Q8SlNPYmplY3QqPihhcmd1bWVudCk7CisgICAgfQorCisgICAgeworICAgICAgICBJ
ZGVudGlmaWVyIGVsZW1lbnRJZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZWxl
bWVudCIpOworICAgICAgICBKU1ZhbHVlIGVsZW1lbnRWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3It
PmdldChleGVjLCBlbGVtZW50SWRlbnQpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CisgICAgICAgIFN0cmluZyBlbGVtZW50U3RyaW5nID0gZWxlbWVudFZh
bHVlLnRvV1RGU3RyaW5nKGV4ZWMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CisgICAgICAgIGlmIChlbGVtZW50U3RyaW5nICE9ICJhbnlmdW5jIikKKyAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHku
VGFibGUgZXhwZWN0cyBpdHMgJ2VsZW1lbnQnIGZpZWxkIHRvIGJlIHRoZSBzdHJpbmcgJ2FueWZ1
bmMnIikpKSk7CisgICAgfQorCisgICAgSWRlbnRpZmllciBpbml0aWFsSWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgImluaXRpYWwiKTsKKyAgICBKU1ZhbHVlIGluaXRpYWxTaXpl
VmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhlYywgaW5pdGlhbElkZW50KTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgdWludDMyX3QgaW5pdGlh
bCA9IGdldFVpbnQzMihpbml0aWFsU2l6ZVZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVt
OworICAgIElkZW50aWZpZXIgbWF4aW11bUlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJtYXhpbXVtIik7CisgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IG1lbW9yeURlc2NyaXB0b3It
Pmhhc1Byb3BlcnR5KGV4ZWMsIG1heGltdW1JZGVudCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOworICAgIGlmIChoYXNQcm9wZXJ0eSkgeworICAgICAgICBKU1Zh
bHVlIG1heFNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBtYXhpbXVtSWRl
bnQpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAg
ICAgIG1heGltdW0gPSBnZXRVaW50MzIobWF4U2l6ZVZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworCisgICAgICAgIGlmIChpbml0aWFsID4gKm1h
eGltdW0pIHsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiJ21heGltdW0nIHByb3BlcnR5IG11c3QgYmUgZ3JlYXRlciB0aGFu
IG9yIGVxdWFsIHRvIHRoZSAnaW5pdGlhbCcgcHJvcGVydHkiKSkpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVh
dGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVj
dHVyZSgpLCBpbml0aWFsLCBtYXhpbXVtKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBzdGF0ZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxl
LmgiCiAKICNpbmNsdWRlICJXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oIgogCkBAIC00
MiwxMCArNDMsMTM0IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXAK
ICBAZW5kCiAgKi8KIAotV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZSogV2ViQXNzZW1ibHlUYWJs
ZVByb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTV2ViQXNzZW1ibHlUYWJsZSogZ2V0VGFi
bGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTVmFsdWUgdikKK3sKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUq
IHJlc3VsdCA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odik7CisgICAgaWYg
KCFyZXN1bHQpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgCisg
ICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJleHBlY3RlZCB8
dGhpc3wgdmFsdWUgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jTGVu
Z3RoKEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJs
eVRhYmxlUHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dldChFeGVjU3RhdGUqKTsKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldChFeGVjU3Rh
dGUqKTsKKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJv
dG9GdW5jTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
SlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGdldFRhYmxlKGV4ZWMsIHZtLCBleGVjLT50aGlz
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodGFibGUtPnNpemUoKSkpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHcm93
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNXZWJBc3NlbWJs
eVRhYmxlKiB0YWJsZSA9IGdldFRhYmxlKGV4ZWMsIHZtLCBleGVjLT50aGlzVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworCisgICAgLy8gRklYTUU6
IGxldHMgbWFrZSBhIGhlbHBlciBmb3IgdGhpcyBhcyB0aGUgc3BlYyBoYXMgZG9uZS4KKyAgICBk
b3VibGUgZG91YmxlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludGVnZXIoZXhlYyk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIGlmIChkb3VibGVW
YWx1ZSA8IDAgfHwgZG91YmxlVmFsdWUgPiBVSU5UX01BWCkgeworICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihleGVj
LCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5ncm93IGV4cGVjdHMg
YW4gaW50ZWdlciBhcmd1bWVudCBpbiB0aGUgcmFuZ2U6IFswLCAyXjMyIC0gMV0iKSkpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGlmICghdGFibGUtPmdyb3coc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGRvdWJsZVZhbHVlKSkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5ncm93IGNvdWxkIG5vdCBncm93IHRo
ZSB0YWJsZSIpKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGdldFRh
YmxlKGV4ZWMsIHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOworCisgICAgLy8gRklYTUU6IGxldHMgbWFrZSBhIGhlbHBlciBm
b3IgdGhpcyBhcyB0aGUgc3BlYyBoYXMgZG9uZS4KKyAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBl
eGVjLT5hcmd1bWVudCgwKS50b0ludGVnZXIoZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOworICAgIGlmIChkb3VibGVWYWx1ZSA8IDAgfHwgZG91YmxlVmFs
dWUgPiBVSU5UX01BWCkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LAorICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFz
c2VtYmx5LlRhYmxlLnByb3RvdHlwZS5nZXQgZXhwZWN0cyBhbiBpbnRlZ2VyIGFyZ3VtZW50IGlu
IHRoZSByYW5nZTogWzAsIDJeMzIgLSAxXSIpKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorCisgICAgdWludDMyX3QgaW5kZXggPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZG91YmxlVmFs
dWUpOworICAgIGlmIChpbmRleCA+PSB0YWJsZS0+c2l6ZSgpKSB7CisgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLmdldCBleHBlY3Rz
IGFuIGludGVnZXIgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSB0YWJsZSIpKSk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYgKFdlYkFzc2VtYmx5RnVuY3Rpb24qIHJlc3Vs
dCA9IHRhYmxlLT5nZXRGdW5jdGlvbihpbmRleCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5j
U2V0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNXZWJBc3Nl
bWJseVRhYmxlKiB0YWJsZSA9IGdldFRhYmxlKGV4ZWMsIHZtLCBleGVjLT50aGlzVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworCisgICAgSlNWYWx1
ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1
bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odmFsdWUpOworICAg
IGlmICghdmFsdWUuaXNOdWxsKCkgJiYgIWZ1bmN0aW9uKSB7CisgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuc2V0IGV4cGVjdHMgdGhl
IHNlY29uZCBhcmd1bWVudCB0byBiZSBudWxsIG9yIGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5
LkZ1bmN0aW9uIikpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICAvLyBGSVhN
RTogbGV0cyBtYWtlIGEgaGVscGVyIGZvciB0aGlzIGFzIHRoZSBzcGVjIGhhcyBkb25lLgorICAg
IGRvdWJsZSBkb3VibGVWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50ZWdlcihleGVjKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgaWYgKGRvdWJs
ZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IFVJTlRfTUFYKSB7CisgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLnNldCBleHBlY3Rz
IGl0cyBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZTogWzAsIDJe
MzIgLSAxXSIpKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgdWludDMyX3Qg
aW5kZXggPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZG91YmxlVmFsdWUpOworICAgIGlmIChpbmRl
eCA+PSB0YWJsZS0+c2l6ZSgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsCisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
V2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLmdldCBleHBlY3RzIGFuIGludGVnZXIgbGVzcyB0
aGFuIHRoZSBzaXplIG9mIHRoZSB0YWJsZSIpKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorCisgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQorICAgICAgICB0YWJsZS0+Y2xlYXJGdW5jdGlv
bihpbmRleCk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCghIWZ1bmN0aW9uKTsKKyAgICAg
ICAgdGFibGUtPnNldEZ1bmN0aW9uKHZtLCBpbmRleCwgZnVuY3Rpb24pOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitXZWJBc3Nl
bWJseVRhYmxlUHJvdG90eXBlKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlOjpjcmVhdGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
IHsKICAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3Nl
bWJseVRhYmxlUHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZSh2
bSwgc3RydWN0dXJlKTsKLSAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBvYmpl
Y3QtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBvYmplY3Q7
CiB9CiAKQEAgLTU0LDkgKzE3OSwxNCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5VGFibGVQcm90
b3R5cGU6OmNyCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogfQogCi12b2lkIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKK3ZvaWQgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKworICAgIEpTQ19OQVRJVkVfR0VUVEVSKCJsZW5ndGgiLCB3ZWJBc3NlbWJs
eVRhYmxlUHJvdG9GdW5jTGVuZ3RoLCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigiZ3JvdyIsIHdlYkFzc2VtYmx5VGFibGVQ
cm90b0Z1bmNHcm93LCBEb250RW51bSwgMSk7CisgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRI
T1VUX1RSQU5TSVRJT04oImdldCIsIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHZXQsIERvbnRF
bnVtLCAxKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigic2V0
Iiwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldCwgRG9udEVudW0sIDIpOwogfQogCiBXZWJB
c3NlbWJseVRhYmxlUHJvdG90eXBlOjpXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oCShyZXZpc2lvbiAy
MDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAg
IERFQ0xBUkVfSU5GTzsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIAogcHJp
dmF0ZToKICAgICBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296949</attachid>
            <date>2016-12-12 13:44:09 -0800</date>
            <delta_ts>2016-12-12 16:46:26 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>55309</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzCShyZXZpc2lvbiAyMDk3MDQpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTA0LDEzICsxMDQsMjIgQEAgY29uc3QgX2ltcG9ydEZ1bmN0
aW9uQ29udGludWF0aW9uID0gKGJ1aQogCiBjb25zdCBfaW1wb3J0TWVtb3J5Q29udGludWF0aW9u
ID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CiAgICAgcmV0dXJuIChtb2R1
bGUsIGZpZWxkLCBtZW1vcnlEZXNjcmlwdGlvbikgPT4gewotICAgICAgICBhc3NlcnQuaXNTdHJp
bmcobW9kdWxlLCBgSW1wb3J0IGZ1bmN0aW9uIG1vZHVsZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdv
dCAiJHttb2R1bGV9ImApOwotICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQg
ZnVuY3Rpb24gZmllbGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAg
ICAgICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IE1lbW9yeSBtb2R1bGUgc2hvdWxk
IGJlIGEgc3RyaW5nLCBnb3QgIiR7bW9kdWxlfSJgKTsKKyAgICAgICAgYXNzZXJ0LmlzU3RyaW5n
KGZpZWxkLCBgSW1wb3J0IE1lbW9yeSBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtm
aWVsZH0iYCk7CiAgICAgICAgIHNlY3Rpb24uZGF0YS5wdXNoKHttb2R1bGUsIGZpZWxkLCBraW5k
OiAiTWVtb3J5IiwgbWVtb3J5RGVzY3JpcHRpb259KTsKICAgICAgICAgcmV0dXJuIG5leHRCdWls
ZGVyOwogICAgIH07CiB9OwogCitjb25zdCBfaW1wb3J0VGFibGVDb250aW51YXRpb24gPSAoYnVp
bGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICByZXR1cm4gKG1vZHVsZSwgZmll
bGQsIHRhYmxlRGVzY3JpcHRpb24pID0+IHsKKyAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKG1vZHVs
ZSwgYEltcG9ydCBUYWJsZSBtb2R1bGUgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7bW9kdWxl
fSJgKTsKKyAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZpZWxkLCBgSW1wb3J0IFRhYmxlIGZpZWxk
IHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKKyAgICAgICAgc2VjdGlvbi5k
YXRhLnB1c2goe21vZHVsZSwgZmllbGQsIGtpbmQ6ICJUYWJsZSIsIHRhYmxlRGVzY3JpcHRpb259
KTsKKyAgICAgICAgcmV0dXJuIG5leHRCdWlsZGVyOworICAgIH07Cit9OworCiBjb25zdCBfZXhw
b3J0RnVuY3Rpb25Db250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIp
ID0+IHsKICAgICByZXR1cm4gKGZpZWxkLCBpbmRleCwgdHlwZSkgPT4gewogICAgICAgICBhc3Nl
cnQuaXNTdHJpbmcoZmllbGQsIGBFeHBvcnQgZnVuY3Rpb24gZmllbGQgc2hvdWxkIGJlIGEgc3Ry
aW5nLCBnb3QgIiR7ZmllbGR9ImApOwpAQCAtMjk5LDEyICszMDgsMjkgQEAgY29uc3QgX2NyZWF0
ZUZ1bmN0aW9uID0gKHNlY3Rpb24sIGJ1aWxkZQogCiAgICAgICAgIGlmICh0eXBlb2Yoc2lnbmF0
dXJlKSA9PT0gInVuZGVmaW5lZCIpCiAgICAgICAgICAgICBzaWduYXR1cmUgPSB7IHBhcmFtczog
W10gfTsKLSAgICAgICAgYXNzZXJ0Lmhhc09iamVjdFByb3BlcnR5KHNpZ25hdHVyZSwgInBhcmFt
cyIsIGBFeHBlY3QgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIGJlIGFuIG9iamVjdCB3aXRoIGEgInBh
cmFtcyIgZmllbGQsIGdvdCAiJHtzaWduYXR1cmV9ImApOwotICAgICAgICBjb25zdCBbcGFyYW1z
LCByZXRdID0gX25vcm1hbGl6ZUZ1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZS5wYXJhbXMsIHNp
Z25hdHVyZS5yZXQpOwotICAgICAgICBzaWduYXR1cmUgPSB7IHBhcmFtczogcGFyYW1zLCByZXQ6
IHJldCB9OworCisgICAgICAgIGxldCB0eXBlOworICAgICAgICBsZXQgcGFyYW1zOworICAgICAg
ICBpZiAodHlwZW9mIHNpZ25hdHVyZSA9PT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAgIGFzc2Vy
dC5oYXNPYmplY3RQcm9wZXJ0eShzaWduYXR1cmUsICJwYXJhbXMiLCBgRXhwZWN0IGZ1bmN0aW9u
IHNpZ25hdHVyZSB0byBiZSBhbiBvYmplY3Qgd2l0aCBhICJwYXJhbXMiIGZpZWxkLCBnb3QgIiR7
c2lnbmF0dXJlfSJgKTsKKyAgICAgICAgICAgIGxldCByZXQ7CisgICAgICAgICAgICAoW3BhcmFt
cywgcmV0XSA9IF9ub3JtYWxpemVGdW5jdGlvblNpZ25hdHVyZShzaWduYXR1cmUucGFyYW1zLCBz
aWduYXR1cmUucmV0KSk7CisgICAgICAgICAgICBzaWduYXR1cmUgPSB7cGFyYW1zLCByZXR9Owor
ICAgICAgICAgICAgdHlwZSA9IF9tYXliZVJlZ2lzdGVyVHlwZShidWlsZGVyLCBzaWduYXR1cmUp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSh0eXBlb2Ygc2ln
bmF0dXJlID09PSAibnVtYmVyIik7CisgICAgICAgICAgICBjb25zdCB0eXBlU2VjdGlvbiA9IGJ1
aWxkZXIuX2dldFNlY3Rpb24oIlR5cGUiKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoISF0
eXBlU2VjdGlvbik7CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KHNpZ25hdHVyZSA8IHR5cGVT
ZWN0aW9uLmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIHR5cGUgPSBzaWduYXR1cmU7CisgICAg
ICAgICAgICBzaWduYXR1cmUgPSB0eXBlU2VjdGlvbi5kYXRhW3NpZ25hdHVyZV07CisgICAgICAg
ICAgICBhc3NlcnQuaGFzT2JqZWN0UHJvcGVydHkoc2lnbmF0dXJlLCAicGFyYW1zIiwgYEV4cGVj
dCBmdW5jdGlvbiBzaWduYXR1cmUgdG8gYmUgYW4gb2JqZWN0IHdpdGggYSAicGFyYW1zIiBmaWVs
ZCwgZ290ICIke3NpZ25hdHVyZX0iYCk7CisgICAgICAgICAgICBwYXJhbXMgPSBzaWduYXR1cmUu
cGFyYW1zOworICAgICAgICB9CisKICAgICAgICAgY29uc3QgZnVuYyA9IHsKICAgICAgICAgICAg
IG5hbWU6IGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgIHR5cGU6IF9tYXliZVJlZ2lzdGVyVHlw
ZShidWlsZGVyLCBzaWduYXR1cmUpLAorICAgICAgICAgICAgdHlwZSwKICAgICAgICAgICAgIHNp
Z25hdHVyZTogc2lnbmF0dXJlLAogICAgICAgICAgICAgbG9jYWxzOiBwYXJhbXMuY29uY2F0KGxv
Y2FscyksIC8vIFBhcmFtZXRlcnMgYXJlIHRoZSBmaXJzdCBsb2NhbHMuCiAgICAgICAgICAgICBw
YXJhbWV0ZXJDb3VudDogcGFyYW1zLmxlbmd0aCwKQEAgLTM3OSwxMSArNDA1LDExIEBAIGV4cG9y
dCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0g
dGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1w
b3J0QnVpbGRlciA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gdGhpcywK
LSAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlOiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihg
VW5pbXBsZW1lbnRlZDogaW1wb3J0IHRhYmxlYCk7IH0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBHbG9iYWw6ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBpbXBvcnQg
Z2xvYmFsYCk7IH0sCiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAg
IGltcG9ydEJ1aWxkZXIuRnVuY3Rpb24gPSBfaW1wb3J0RnVuY3Rpb25Db250aW51YXRpb24odGhp
cywgcywgaW1wb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIu
TWVtb3J5ID0gX2ltcG9ydE1lbW9yeUNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVy
KTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5UYWJsZSA9IF9pbXBvcnRUYWJs
ZUNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGltcG9ydEJ1aWxkZXI7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAg
ICAgICBicmVhazsKSW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5
LmpzCShyZXZpc2lvbiAyMDk3MDQpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJs
eUJpbmFyeS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMjEgQEAgaW1wb3J0ICogYXMg
V0FTTSBmcm9tICdXQVNNLmpzJzsKIAogY29uc3QgcHV0ID0gKGJpbiwgdHlwZSwgdmFsdWUpID0+
IGJpblt0eXBlXSh2YWx1ZSk7CiAKK2Z1bmN0aW9uIHB1dFJlc2l6YWJsZUxpbWl0cyhiaW4sIGlu
aXRpYWwsIG1heGltdW0pIHsKKyAgICBhc3NlcnQudHJ1dGh5KHR5cGVvZiBpbml0aWFsID09PSAi
bnVtYmVyIiwgIldlIGV4cGVjdCAnaW5pdGlhbCcgdG8gYmUgYW4gaW50ZWdlciIpOworICAgIGxl
dCBoYXNNYXhpbXVtID0gMDsKKyAgICBpZiAodHlwZW9mIG1heGltdW0gPT09ICJudW1iZXIiKSB7
CisgICAgICAgIGhhc01heGltdW0gPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydC50
cnV0aHkodHlwZW9mIG1heGltdW0gPT09ICJ1bmRlZmluZWQiLCAiV2UgZXhwZWN0ICdtYXhpbXVt
JyB0byBiZSBhbiBpbnRlZ2VyIGlmIGl0J3MgZGVmaW5lZCIpOworICAgIH0KKworICAgIHB1dChi
aW4sICJ2YXJ1aW50MSIsIGhhc01heGltdW0pOworICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBp
bml0aWFsKTsKKyAgICBpZiAoaGFzTWF4aW11bSkKKyAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQz
MiIsIG1heGltdW0pOworfQorCiBjb25zdCBlbWl0dGVycyA9IHsKICAgICBUeXBlOiAoc2VjdGlv
biwgYmluKSA9PiB7CiAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBzZWN0aW9uLmRhdGEu
bGVuZ3RoKTsKQEAgLTU3LDIzICs3MiwxOCBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAgICAg
ICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkudHlwZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICJUYWJsZSI6IHRocm93
IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOworICAgICAgICAgICAgY2FzZSAiVGFi
bGUiOiB7CisgICAgICAgICAgICAgICAgbGV0IHtpbml0aWFsLCBtYXhpbXVtLCBlbGVtZW50fSA9
IGVudHJ5LnRhYmxlRGVzY3JpcHRpb247CisKKyAgICAgICAgICAgICAgICBhc3NlcnQudHJ1dGh5
KFdBU00uaXNWYWxpZFR5cGUoZWxlbWVudCksICJXZSBleHBlY3QgJ2VsZW1lbnQnIHRvIGJlIGEg
dmFsaWQgdHlwZSIpOworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJpbnQ3IiwgV0FTTS50
eXBlVmFsdWVbZWxlbWVudF0pOworCisgICAgICAgICAgICAgICAgcHV0UmVzaXphYmxlTGltaXRz
KGJpbiwgaW5pdGlhbCwgbWF4aW11bSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlICJNZW1vcnkiOiB7CiAgICAgICAgICAgICAgICAgbGV0
IHtpbml0aWFsLCBtYXhpbXVtfSA9IGVudHJ5Lm1lbW9yeURlc2NyaXB0aW9uOwotICAgICAgICAg
ICAgICAgIGFzc2VydC50cnV0aHkodHlwZW9mIGluaXRpYWwgPT09ICJudW1iZXIiLCAiV2UgZXhw
ZWN0ICdpbml0aWFsJyB0byBiZSBhIG51bWJlciIpOwotICAgICAgICAgICAgICAgIGluaXRpYWwg
fD0gMDsKLSAgICAgICAgICAgICAgICBsZXQgaGFzTWF4aW11bSA9IDA7Ci0gICAgICAgICAgICAg
ICAgaWYgKHR5cGVvZiBtYXhpbXVtID09PSAibnVtYmVyIikgewotICAgICAgICAgICAgICAgICAg
ICBtYXhpbXVtIHw9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGhhc01heGltdW0gPSAxOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydC50cnV0aHko
dHlwZW9mIG1heGltdW0gPT09ICJ1bmRlZmluZWQiLCAiV2UgZXhwZWN0ICdtYXhpbXVtJyB0byBi
ZSBhIG51bWJlciBpZiBpdCdzIGRlZmluZWQiKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBwdXQoYmluLCAidmFydWludDEiLCBoYXNNYXhpbXVtKTsKLSAgICAgICAgICAg
ICAgICBwdXQoYmluLCAidmFydWludDMyIiwgaW5pdGlhbCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGhhc01heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBt
YXhpbXVtKTsKKyAgICAgICAgICAgICAgICBwdXRSZXNpemFibGVMaW1pdHMoYmluLCBpbml0aWFs
LCBtYXhpbXVtKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH07CiAgICAg
ICAgICAgICBjYXNlICJHbG9iYWwiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50
ZWRgKTsKSW5kZXg6IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy90YWJsZS1iYXNpYy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFzaWMuanMJ
KG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2lj
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20g
Jy4uL0J1aWxkZXIuanMnCisKK2NvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgLlR5
cGUoKQorICAgICAgICAuRnVuYyhbImkzMiIsICJpMzIiXSwgImkzMiIpCisgICAgICAgIC5GdW5j
KFsiaTMyIl0sICJpMzIiKQorICAgIC5FbmQoKQorICAgIC5JbXBvcnQoKQorICAgICAgICAuVGFi
bGUoImltcCIsICJ0YWJsZSIsIHtpbml0aWFsOiAyMCwgZWxlbWVudDogImFueWZ1bmMifSkKKyAg
ICAuRW5kKCkKKyAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgIC5FeHBvcnQoKQorICAgICAgICAu
RnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5GdW5jdGlvbigiYmFyIikKKyAgICAuRW5kKCkKKyAg
ICAuQ29kZSgpCisgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgMCAvKlsnaTMyJywgJ2kzMiddID0+
ICdpMzInKi8pCisgICAgICAgICAgICAuR2V0TG9jYWwoMSkgLy8gcGFyYW1ldGVyIHRvIGNhbGwK
KyAgICAgICAgICAgIC5HZXRMb2NhbCgwKSAvLyBjYWxsIGluZGV4CisgICAgICAgICAgICAuQ2Fs
bEluZGlyZWN0KDEsIDApIC8vIGNhbGxpbmcgZnVuY3Rpb24gb2YgdHlwZSBbJ2kzMiddID0+ICdp
MzInCisgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigiYmFyIiwgMSAvKlsnaTMyJ10gPT4gJ2kzMicqLykKKyAgICAgICAgICAgIC5HZXRMb2Nh
bCgwKQorICAgICAgICAgICAgLkkzMkNvbnN0KDQyKQorICAgICAgICAgICAgLkkzMkFkZCgpCisg
ICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgLkVuZCgpCisgICAgLkVuZCgpOworCisKK2Nv
bnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKK2NvbnN0IG1vZHVsZSA9IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKK2NvbnN0IGltcCA9IHsKKyAgICBpbXA6IHsKKyAg
ICAgICAgdGFibGU6IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDogMjAsIGVsZW1lbnQ6
ICJhbnlmdW5jIn0pCisgICAgfQorfTsKKworY29uc3QgZXhwb3J0cyA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIGltcCkuZXhwb3J0czsKK2NvbnN0IGZvbyA9IGV4cG9ydHMuZm9v
OworaW1wLmltcC50YWJsZS5zZXQoMCwgZXhwb3J0cy5iYXIpOworCitmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDA7IGkrKykgeworICAgIGlmIChmb28oMCwgaSkgIT09IGkgKyA0MikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJCYWQgY2FsbCBpbmRpcmVjdCIpOworfQpJbmRleDogSlNUZXN0cy93
YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20v
anMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCShyZXZpc2lvbiAyMDk3MDQpCisrKyBKU1Rlc3RzL3dh
c20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03OCw4ICs3OCw5
IEBAIGZvciAoY29uc3QgYyBpbiBjb25zdHJ1Y3RvclByb3BlcnRpZXMpIHsKICAgICAgICAgbmV3
IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogMjB9KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSAiVGFibGUiOgotICAgICAgICAvLyBGSVhNRSBJbXBsZW1lbnQgYW5kIHRlc3QgdGhlc2Ug
QVBJcyBmdXJ0aGVyLiBGb3Igbm93IHRoZXkganVzdCB0aHJvdy4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTc3NQotICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseVtjXSgpLCBFcnJvciwgYFdlYkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGlt
cGxlbWVudCB0aGUgJHtjfSBjb25zdHJ1Y3RvciBwcm9wZXJ0eWApOworICAgICAgICBuZXcgV2Vi
QXNzZW1ibHkuVGFibGUoe2luaXRpYWw6IDIwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KTsKKyAgICAg
ICAgbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAyMCwgbWF4aW11bTogMjAsIGVsZW1l
bnQ6ICJhbnlmdW5jIn0pOworICAgICAgICBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6
IDIwLCBtYXhpbXVtOiAyNSwgZWxlbWVudDogImFueWZ1bmMifSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgIkNvbXBpbGVFcnJvciI6CiAgICAgY2FzZSAiUnVudGltZUVycm9yIjogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24g
PSBudWxscHRyOwogCi0gICAgQjNJUkdlbmVyYXRvcihjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYs
IFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiwgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJik7CisgICAgQjNJ
UkdlbmVyYXRvcihWTSYsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgV2Fz
bUludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25z
dCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmKTsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsKICAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CkBAIC0xODgsNiArMTg4LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Np
b25MaXN0JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgc3RhY2spOwogICAgIFZhbHVlKiB6ZXJv
Rm9yVHlwZShUeXBlKTsKIAorICAgIFZNJiBtX3ZtOwogICAgIGNvbnN0IEltbXV0YWJsZUZ1bmN0
aW9uSW5kZXhTcGFjZSYgbV9mdW5jdGlvbkluZGV4U3BhY2U7CiAgICAgUHJvY2VkdXJlJiBtX3By
b2M7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7CkBAIC0xOTksOCArMjAwLDkgQEAg
cHJpdmF0ZToKICAgICBWYWx1ZSogbV9mdW5jdGlvbkluZGV4U3BhY2VWYWx1ZTsKIH07CiAKLUIz
SVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9y
eSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlv
biwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2Up
Ci0gICAgOiBtX2Z1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpCitCM0lSR2Vu
ZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1l
bW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxh
dGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3Bh
Y2UpCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9mdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25J
bmRleFNwYWNlKQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKICAgICAsIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiB7CkBAIC02NjksMjcgKzY3MSw1
MiBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAgRXhwcmVz
c2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKHNpZ25h
dHVyZS0+YXJndW1lbnRzLnNpemUoKSA9PSBhcmdzLnNpemUoKSk7CiAKKyAgICAgCisgICAgRXhw
cmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsKKyAgICBFeHByZXNzaW9uVHlwZSBj
YWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZTsKKyAgICB7CisgICAgICAgIEV4cHJlc3Npb25UeXBl
IHRvcEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwKKyAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAmbV92bS50
b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UpKTsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIE9yaWdpbigpLAorICAgICAgICAgICAgdG9wSW5zdGFuY2UsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpKTsKKyAgICAgICAgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksCisgICAgICAgICAgICB0YWJsZSwgSlNXZWJB
c3NlbWJseVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKTsKKyAgICAgICAgY2FsbGFibGVGdW5j
dGlvbkJ1ZmZlclNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHRhYmxlLCBKU1dlYkFz
c2VtYmx5VGFibGU6Om9mZnNldE9mU2l6ZSgpKTsKKyAgICB9CisKICAgICAvLyBDaGVjayB0aGUg
aW5kZXggd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHZhbGlkLgogICAgIHsKLSAgICAgICAgRXhwcmVz
c2lvblR5cGUgbWF4VmFsaWRJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25zdGFu
dChtX3Byb2MsIE9yaWdpbigpLCBJbnQzMiwgbV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSk7CiAg
ICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVj
a1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBtX3plcm9WYWx1
ZXNbbGluZWFyaXplVHlwZShJMzIpXSwKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBPcmlnaW4oKSwgY2FsbGVlSW5kZXgs
IG1heFZhbGlkSW5kZXgpKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCBjYWxsZWVJbmRleCwgY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlclNpemUpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFtd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKICAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7CiAgICAgICAgIH0pOwogICAgIH0KIAot
ICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2Ugd2Ug
YXJlIGxvb2tpbmcgZm9yLgorICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUgdGFibGUg
aW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgogICAgIEV4cHJlc3Npb25UeXBlIG9mZnNl
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBPcmlnaW4o
KSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0
MzIsIE9yaWdpbigpLCBjYWxsZWVJbmRleCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmRJbnRDb25zdGFudChtX3Byb2MsIE9yaWdpbigpLCBwb2ludGVyVHlwZSgpLCBzaXplb2YoQ2Fs
bGFibGVGdW5jdGlvbikpKTsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIE9yaWdpbigpLCBt
X2Z1bmN0aW9uSW5kZXhTcGFjZVZhbHVlLCBvZmZzZXQpOworICAgIEV4cHJlc3Npb25UeXBlIGNh
bGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEFkZCwgT3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIG9mZnNldCk7CisKKyAgICAv
LyBDaGVjayB0aGF0IHRoZSBDYWxsYWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFw
IGlmIGl0IGlzbid0LiBBIG51bGwgU2lnbmF0dXJlKiBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlh
bGl6ZWQuCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBP
cmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgT0JKRUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rp
b24sIHNpZ25hdHVyZSkpOworICAgIHsKKyAgICAgICAgLy8gSWYgdGhlIFNpZ25hdHVyZSogaXMg
bnVsbHB0ciwgd2UgdHJhcC4KKyAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLAorICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwg
T3JpZ2luKCksIAorICAgICAgICAgICAgICAgIGNhbGxlZVNpZ25hdHVyZSwgCisgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9y
aWdpbigpLCAwKSkpOworCisgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgfSk7CisgICAgfQogCiAgICAgLy8gQ2hl
Y2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIHRoZSB2YWx1ZSB3ZSBleHBlY3QuCiAgICAgewotICAg
ICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigp
LCBjYWxsYWJsZUZ1bmN0aW9uLCBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2ln
bmF0dXJlKSk7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBz
aWduYXR1cmUpOwogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksCiAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBPcmln
aW4oKSwgY2FsbGVlU2lnbmF0dXJlLCBleHBlY3RlZFNpZ25hdHVyZSkpOwpAQCAtNzEzLDYgKzc0
MCw3IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnMKICAgICAgICAg
ICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigp
KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKKwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC04NDYsNyArODc0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9u
PiBwYQogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtSW50ZXJuYWxGdW5j
dGlvbj4oKTsKIAogICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7Ci0gICAgQjNJUkdlbmVyYXRvciBj
b250ZXh0KGluZm8ubWVtb3J5LCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgQjNJUkdlbmVyYXRvciBjb250
ZXh0KHZtLCBpbmZvLm1lbW9yeSwgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4U3BhY2UpOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIz
SVJHZW5lcmF0b3I+IHBhcnNlcihjb250ZXh0LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCBmdW5jdGlvbkluZGV4U3BhY2UsIGluZm8pOwogICAgIGlmICghcGFyc2Vy
LnBhcnNlKCkpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCShyZXZpc2lvbiAyMDk3MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0Nyw2ICsxNDcsMjggQEAgc3RydWN0IFNlZ21lbnQgewogICAgIH0KIH07CiAKK2NsYXNz
IFRhYmxlSW5mb3JtYXRpb24geworcHVibGljOgorICAgIFRhYmxlSW5mb3JtYXRpb24oKSA9IGRl
ZmF1bHQ7CisgICAgVGFibGVJbmZvcm1hdGlvbih1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiBtYXhpbXVtLCBib29sIGlzSW1wb3J0KQorICAgICAgICA6IG1faW5pdGlh
bChpbml0aWFsKQorICAgICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQorICAgICAgICAsIG1faXNJ
bXBvcnQoaXNJbXBvcnQpCisgICAgICAgICwgbV9pc1ZhbGlkKHRydWUpCisgICAgeyB9CisKKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9Cisg
ICAgYm9vbCBpc0ltcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbXBvcnQ7IH0KKyAgICB1aW50
MzJfdCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CisgICAgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQorCitw
cml2YXRlOgorICAgIHVpbnQzMl90IG1faW5pdGlhbDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBtX21heGltdW07CisgICAgYm9vbCBtX2lzSW1wb3J0IHsgZmFsc2UgfTsKKyAgICBib29s
IG1faXNWYWxpZCB7IGZhbHNlIH07Cit9OworCiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gewog
ICAgIFZlY3RvcjxTaWduYXR1cmU+IHNpZ25hdHVyZXM7CiAgICAgVmVjdG9yPEltcG9ydD4gaW1w
b3J0czsKQEAgLTE1OCw2ICsxODAsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gewogICAg
IFZlY3RvcjxFeHBvcnQ+IGV4cG9ydHM7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gc3Rh
cnRGdW5jdGlvbkluZGV4U3BhY2U7CiAgICAgVmVjdG9yPFNlZ21lbnQ6OlB0cj4gZGF0YTsKKyAg
ICBUYWJsZUluZm9ybWF0aW9uIHRhYmxlSW5mb3JtYXRpb247CiAKICAgICB+TW9kdWxlSW5mb3Jt
YXRpb24oKTsKIH07CkBAIC0xODUsMTMgKzIwOCwyMCBAQCB0eXBlZGVmIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBXYXNtVG9KU1N0CiAvLyBXZWJBc3NlbWJseSBkaXJlY3QgY2FsbHMgYW5kIGNhbGxf
aW5kaXJlY3QgdXNlIGluZGljZXMgaW50byAiZnVuY3Rpb24gaW5kZXggc3BhY2UiLiBUaGlzIHNw
YWNlIHN0YXJ0cyB3aXRoIGFsbCBpbXBvcnRzLCBhbmQgdGhlbiBhbGwgaW50ZXJuYWwgZnVuY3Rp
b25zLgogLy8gQ2FsbGFibGVGdW5jdGlvbiBhbmQgRnVuY3Rpb25JbmRleFNwYWNlIGFyZSBvbmx5
IG1lYW50IGFzIGZhc3QgbG9va3VwIHRhYmxlcyBmb3IgdGhlc2Ugb3Bjb2RlcywgYW5kIGRvIG5v
dCBvd24gY29kZS4KIHN0cnVjdCBDYWxsYWJsZUZ1bmN0aW9uIHsKLSAgICBDYWxsYWJsZUZ1bmN0
aW9uKFNpZ25hdHVyZSogc2lnbmF0dXJlKQorICAgIENhbGxhYmxlRnVuY3Rpb24oKSA9IGRlZmF1
bHQ7CisKKyAgICBDYWxsYWJsZUZ1bmN0aW9uKFNpZ25hdHVyZSogc2lnbmF0dXJlLCB2b2lkKiBj
b2RlID0gbnVsbHB0cikKICAgICAgICAgOiBzaWduYXR1cmUoc2lnbmF0dXJlKQotICAgICAgICAs
IGNvZGUobnVsbHB0cikKKyAgICAgICAgLCBjb2RlKGNvZGUpCiAgICAgewogICAgIH0KLSAgICBT
aWduYXR1cmUqIHNpZ25hdHVyZTsgLy8gRklYTUUgcGFjayB0aGlzIGluc2lkZSBhICh1bmlxdWVk
KSBpbnRlZ2VyIChmb3IgY29ycmVjdG5lc3MgdGhlIHBhcnNlciBzaG91bGQgdW5pcXVlIFNpZ25h
dHVyZXMpLCBhbmQgdGhlbiBwYWNrIHRoYXQgaW50ZWdlciBpbnRvIHRoZSBjb2RlIHBvaW50ZXIu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTEKLSAgICB2b2lk
KiBjb2RlOworCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICFj
b2RlICYmICFzaWduYXR1cmU7IH0KKworICAgIC8vIEZJWE1FIHBhY2sgdGhpcyBpbnNpZGUgYSAo
dW5pcXVlZCkgaW50ZWdlciAoZm9yIGNvcnJlY3RuZXNzIHRoZSBwYXJzZXIgc2hvdWxkIHVuaXF1
ZSBTaWduYXR1cmVzKSwKKyAgICAvLyBhbmQgdGhlbiBwYWNrIHRoYXQgaW50ZWdlciBpbnRvIHRo
ZSBjb2RlIHBvaW50ZXIuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjU1MTEKKyAgICBTaWduYXR1cmUqIHNpZ25hdHVyZSB7IG51bGxwdHIgfTsgCisgICAgdm9pZCog
Y29kZSB7IG51bGxwdHIgfTsKIH07CiB0eXBlZGVmIFZlY3RvcjxDYWxsYWJsZUZ1bmN0aW9uPiBG
dW5jdGlvbkluZGV4U3BhY2U7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUwLDcgKzI1MCw5IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4dGVybmFsOjpUYWJsZTogewot
ICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDEzNQorICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7CisgICAgICAgICAg
ICBpZiAoIXBhcnNlVGFibGVIZWxwZXIoaXNJbXBvcnQpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRXh0
ZXJuYWw6Ok1lbW9yeTogewpAQCAtMzAwLDQ1ICszMDIsOTkgQEAgYm9vbCBNb2R1bGVQYXJzZXI6
OnBhcnNlRnVuY3Rpb24oKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNl
cjo6cGFyc2VUYWJsZSgpCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1pdHMo
dWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKQogewot
ICAgIC8vIEZJWE1FIGltcGxlbWVudCB0YWJsZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0MTM1Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICBBU1NFUlQoIW1heGltdW0pOworCisgICAgdWludDhfdCBmbGFnczsKKyAgICBpZiAoIXBhcnNl
VmFyVUludDEoZmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXBhcnNl
VmFyVUludDMyKGluaXRpYWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZmxh
Z3MpIHsKKyAgICAgICAgdWludDMyX3QgbWF4aW11bUludDsKKyAgICAgICAgaWYgKCFwYXJzZVZh
clVJbnQzMihtYXhpbXVtSW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBpZiAoaW5pdGlhbCA+IG1heGltdW1JbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgbWF4aW11bSA9IG1heGltdW1JbnQ7CisgICAgfQorCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0
KQorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCkKIHsK
LSAgICAvLyBXZSBkb24ndCBhbGxvdyByZWRlY2xhcmluZyBtZW1vcnkuIEVpdGhlciB2aWEgaW1w
b3J0IG9yIGRlZmluaXRpb24uCi0gICAgaWYgKG1fbW9kdWxlLT5tZW1vcnkpCisgICAgLy8gV2Un
cmUgb25seSBhbGxvd2VkIGEgdG90YWwgb2Ygb25lIFRhYmxlIGltcG9ydCBvciBkZWZpbml0aW9u
LgorICAgIGlmIChtX2hhc1RhYmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1aW50
OF90IGZsYWdzOwotICAgIGlmICghcGFyc2VWYXJVSW50MShmbGFncykpCisgICAgbV9oYXNUYWJs
ZSA9IHRydWU7CisKKyAgICBpbnQ4X3QgdHlwZTsKKyAgICBpZiAoIXBhcnNlSW50Nyh0eXBlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50OF90IGFueWZ1
bmNUeXBlID0gLTE2OworICAgIGlmICh0eXBlICE9IGFueWZ1bmNUeXBlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICB1aW50MzJfdCBpbml0aWFsOwotICAgIGlmICghcGFyc2VWYXJVSW50
MzIoaW5pdGlhbCkpCisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKKyAgICBp
ZiAoIXBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZChpbml0aWFsKSkKKyAgICBB
U1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7CisKKyAgICBtX21vZHVsZS0+
dGFibGVJbmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJ
bXBvcnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJz
ZVRhYmxlKCkKK3sKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMy
KGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2Ugb25seSBhbGxvdyBv
bmUgdGFibGUgZm9yIG5vdy4KKyAgICBpZiAoY291bnQgIT0gMSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQoaW5pdGlhbCk7CisgICAgYm9v
bCBpc0ltcG9ydCA9IGZhbHNlOworICAgIHJldHVybiBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0
KTsKK30KKworYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBv
cnQpCit7CisgICAgLy8gV2UgZG9uJ3QgYWxsb3cgcmVkZWNsYXJpbmcgbWVtb3J5LiBFaXRoZXIg
dmlhIGltcG9ydCBvciBkZWZpbml0aW9uLgorICAgIGlmIChtX21vZHVsZS0+bWVtb3J5KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3VudDsKICAg
ICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsKLSAgICBpZiAoZmxhZ3MpIHsKLSAgICAgICAg
dWludDMyX3QgbWF4aW11bTsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihtYXhpbXVtKSkK
KyAgICB7CisgICAgICAgIHVpbnQzMl90IGluaXRpYWw7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1heGltdW07CisgICAgICAgIGlmICghcGFyc2VSZXNpemFibGVMaW1pdHMoaW5p
dGlhbCwgbWF4aW11bSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYg
KCFQYWdlQ291bnQ6OmlzVmFsaWQobWF4aW11bSkpCisgICAgICAgIEFTU0VSVCghbWF4aW11bSB8
fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKKyAgICAgICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQo
aW5pdGlhbCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbWF4aW11bVBh
Z2VDb3VudCA9IFBhZ2VDb3VudChtYXhpbXVtKTsKLSAgICAgICAgaWYgKGluaXRpYWxQYWdlQ291
bnQgPiBtYXhpbXVtUGFnZUNvdW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpbml0aWFsUGFnZUNvdW50ID0gUGFnZUNvdW50KGluaXRpYWwpOworCisgICAgICAgIGlmICht
YXhpbXVtKSB7CisgICAgICAgICAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZCgqbWF4aW11bSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbWF4aW11bVBhZ2VD
b3VudCA9IFBhZ2VDb3VudCgqbWF4aW11bSk7CisgICAgICAgIH0KICAgICB9CisgICAgQVNTRVJU
KGluaXRpYWxQYWdlQ291bnQpOworICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhp
bXVtUGFnZUNvdW50ID49IGluaXRpYWxQYWdlQ291bnQpOwogCiAgICAgVmVjdG9yPHVuc2lnbmVk
PiBwaW5uZWRTaXplcyA9IHsgMCB9OwogICAgIG1fbW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZv
cm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBwaW5uZWRTaXplcywg
aXNJbXBvcnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuaAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMiArNzksMTUgQEAg
cHJpdmF0ZToKICN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKIAogICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpOworICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCk7
CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VSZXNpemFibGVMaW1pdHModWludDMy
X3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKTsKIAogICAgIFZN
KiBtX3ZtOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGU7
CiAgICAgRnVuY3Rpb25JbmRleFNwYWNlIG1fZnVuY3Rpb25JbmRleFNwYWNlOwogICAgIFZlY3Rv
cjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5Owog
ICAgIGJvb2wgbV9mYWlsZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX2hhc1RhYmxlIHsgZmFsc2Ug
fTsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJ
KHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZQogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX21vZHVsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9tZW1vcnkpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhYmxlKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5j
dGlvbnM7ICsraSkKICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVu
Y3Rpb24oaSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3Qu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnku
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTcxLDExICs3MiwxNiBAQCBwdWJsaWM6CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVt
b3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICB2b2lkIHNldE1lbW9yeShWTSYg
dm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkgeyBtX21lbW9yeS5zZXQodm0sIHRoaXMs
IG1lbW9yeSk7IH0KIAorICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBt
X3RhYmxlLmdldCgpOyB9CisgICAgdm9pZCBzZXRUYWJsZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlU
YWJsZSogdGFibGUpIHsgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsgfQorCiAgICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRlQmFy
cmllcjxKU0NlbGw+KSAqIGlkeDsKICAgICB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNl
LCBtX3RhYmxlKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZN
JiwgU3RydWN0dXJlKiwgdW5zaWduZWQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBK
U1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqKTsKQEAgLTk2LDYg
KzEwMiw3IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+
IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4gbV9t
b2R1bGVOYW1lc3BhY2VPYmplY3Q7CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNZW1v
cnk+IG1fbWVtb3J5OworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5VGFibGU+IG1fdGFi
bGU7CiAgICAgdW5zaWduZWQgbV9udW1JbXBvcnRGdW5jdGlvbnM7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxNSBAQAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJXYXNtRm9ybWF0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU1dlYkFzc2VtYmx5VGFi
bGUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseVRhYmxlOjpzX2luZm8gPSB7ICJXZWJB
c3NlbWJseS5UYWJsZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNX
ZWJBc3NlbWJseVRhYmxlKSB9OworCitKU1dlYkFzc2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlU
YWJsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluaXRp
YWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCiB7Ci0gICAgYXV0byogaW5zdGFu
Y2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFibGU+KHZtLmhl
YXApKSBKU1dlYkFzc2VtYmx5VGFibGUodm0sIHN0cnVjdHVyZSk7CisgICAgYXV0byogaW5zdGFu
Y2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFibGU+KHZtLmhl
YXApKSBKU1dlYkFzc2VtYmx5VGFibGUodm0sIHN0cnVjdHVyZSwgaW5pdGlhbCwgbWF4aW11bSk7
CiAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gaW5zdGFuY2U7
CiB9CkBAIC00NCw5ICs0NywyMiBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3Jl
YXRlU3RyCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
fQogCi1KU1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNzZW1ibHlUYWJsZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorSlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4gbWF4aW11bSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKIHsKKyAg
ICBtX3NpemUgPSBpbml0aWFsOworICAgIG1fbWF4aW11bSA9IG1heGltdW07CisgICAgQVNTRVJU
KCFtX21heGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOworCisgICAgLy8gRklYTUU6IEl0
IG1pZ2h0IGJlIHdvcnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUg
c3BlYyByZWNvbW1lbmRzIGRvaW5nIHNvLgorICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3Qg
ZG9pbmcgdGhhdC4KKyAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1
bmN0aW9uPjo6bWFsbG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIG1fc2l6ZSk7
CisgICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlG
dW5jdGlvbj4+OjptYWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9u
PikgKiBtX3NpemUpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkg
eworICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5j
dGlvbigpOworICAgICAgICBBU1NFUlQoIW1fZnVuY3Rpb25zLmdldCgpW2ldLnNpZ25hdHVyZSk7
IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgICAgICBuZXcgKCZtX2pz
RnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4oKTsK
KyAgICB9CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCkBAIC02MiwxMyArNzgsNTAgQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmRlc3Ryb3ko
SlNDZWxsKgogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4oY2VsbCk7CisgICAgSlNXZWJBc3NlbWJseVRhYmxl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9zaXplOyArK2kpCisgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX2pzRnVuY3Rpb25zLmdldCgpW2ldKTsKIH0KIAotY29uc3QgQ2xh
c3NJbmZvIEpTV2ViQXNzZW1ibHlUYWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFibGUi
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlUYWJs
ZSkgfTsKK2Jvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IG5ld1NpemUpCit7
CisgICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobmV3U2l6ZSA9PSBtX3NpemUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtYXhp
bXVtKCkgJiYgbmV3U2l6ZSA+ICptYXhpbXVtKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgcHJvdGVjdCBvdXJzZWx2ZXMgZnJvbSBjcmF6eSBzaXpl
cyBoZXJlLgorICAgIG1fZnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVu
Y3Rpb24pICogbmV3U2l6ZSk7CisgICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0
ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4pICogbmV3U2l6ZSk7CisKKyAgICBmb3IgKHVp
bnQzMl90IGkgPSBtX3NpemU7IGkgPCBuZXdTaXplOyArK2kpIHsKKyAgICAgICAgbmV3ICgmbV9m
dW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICAgICAgbmV3
ICgmbV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rp
b24+KCk7CisgICAgfQorICAgIG1fc2l6ZSA9IG5ld1NpemU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX2pzRnVuY3Rp
b25zLmdldCgpW2luZGV4XSA9IFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPigpOwor
ICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsK
KyAgICBBU1NFUlQoIW1fZnVuY3Rpb25zLmdldCgpW2luZGV4XS5zaWduYXR1cmUpOyAvLyBXZSBy
ZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KK30KKwordm9pZCBKU1dlYkFzc2VtYmx5VGFi
bGU6OnNldEZ1bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIGZ1bmN0aW9uKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAg
ICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKKyAg
ICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKGZ1bmN0
aW9uLT5zaWduYXR1cmUoKSwgZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KCkpOworfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSwyMyArMjksNDggQEAKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgi
CisjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNw
YWNlIFdhc20geworc3RydWN0IENhbGxhYmxlRnVuY3Rpb247Cit9CisKIGNsYXNzIEpTV2ViQXNz
ZW1ibHlUYWJsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlUYWJsZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlUYWJsZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgaW5pdGlhbCwgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xB
UkVfSU5GTzsKIAotcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVj
dHVyZSopOworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJl
dHVybiBtX21heGltdW07IH0KKyAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CisgICAgYm9vbCBncm93KHVpbnQzMl90IG5ld1NpemUpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBnZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkK
KyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICAgICAg
cmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgpOworICAgIH0KKyAgICB2b2lk
IGNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0m
LCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlGdW5jdGlvbiopOworCisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3Nl
bWJseVRhYmxlLCBtX3NpemUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZ1bmN0
aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fZnVu
Y3Rpb25zKTsgfQorCitwcml2YXRlOgorICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVj
dHVyZSosIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0p
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKworICAgIE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0
aW9uczsKKyAgICBNYWxsb2NQdHI8V3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+PiBt
X2pzRnVuY3Rpb25zOworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1fbWF4aW11bTsKKyAg
ICB1aW50MzJfdCBtX3NpemU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBA
IEVuY29kZWRKU1ZhbHVlIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNhbGwKICAgICBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIHByZXZKU1dlYkFzc2VtYmx5SW5zdGFuY2UgPSB2bS50b3BKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U7CiAgICAgdm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlID0gaW5zdGFuY2Uo
KTsKICAgICBBU1NFUlQoaW5zdGFuY2UoKSk7Ci0gICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0
ID0gdm1FbnRyeVRvV2FzbSh3ZWJBc3NlbWJseUNhbGxlZSgpLT5lbnRyeXBvaW50KCksICZ2bSwg
cHJvdG9DYWxsRnJhbWUpOworICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlU
b1dhc20obV9qc0VudHJ5cG9pbnQtPmVudHJ5cG9pbnQoKSwgJnZtLCBwcm90b0NhbGxGcmFtZSk7
CiAgICAgdm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlID0gcHJldkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTsKIAogICAgIC8vIEZJWE1FIGlzIHRoaXMgY29ycmVjdD8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDg3NgpAQCAtMTQwLDEyICsxNDAsMTIgQEAgRW5jb2Rl
ZEpTVmFsdWUgV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y2FsbAogICAgIHJldHVybiBFbmNvZGVkSlNW
YWx1ZSgpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5n
dGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwg
SlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlLCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkK
K1dlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50
LCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKIHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCBO
b0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUp
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1
bmN0aW9uU3RydWN0dXJlKCk7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uPih2bS5oZWFwKSkg
V2ViQXNzZW1ibHlGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgIGZ1
bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0
YW5jZSwgY2FsbGVlLCBzaWduYXR1cmUpOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2
bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSwganNFbnRyeXBvaW50LCB3YXNt
RW50cnlwb2ludCwgc2lnbmF0dXJlKTsKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CiAKQEAgLTE2
NiwxNSArMTY2LDE4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbigK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9pbnN0YW5jZSk7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fd2FzbUNhbGxlZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
anNFbnRyeXBvaW50KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV93YXNtRW50
cnlwb2ludCk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNv
bnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJB
c3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSwgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCit2
b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpz
RW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQsIFdhc206OlNp
Z25hdHVyZSogc2lnbmF0dXJlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVj
dXRhYmxlLCBsZW5ndGgsIG5hbWUpOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAg
ICBtX2luc3RhbmNlLnNldCh2bSwgdGhpcywgaW5zdGFuY2UpOwotICAgIG1fd2FzbUNhbGxlZS5z
ZXQodm0sIHRoaXMsIHdhc21DYWxsZWUpOworICAgIEFTU0VSVChqc0VudHJ5cG9pbnQgIT0gd2Fz
bUVudHJ5cG9pbnQpOworICAgIG1fanNFbnRyeXBvaW50LnNldCh2bSwgdGhpcywganNFbnRyeXBv
aW50KTsKKyAgICBtX3dhc21FbnRyeXBvaW50LnNldCh2bSwgdGhpcywgd2FzbUVudHJ5cG9pbnQp
OwogICAgIG1fc2lnbmF0dXJlID0gc2lnbmF0dXJlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lv
biAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxMiBAQAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIEpTV2ViQXNzZW1ibHlDYWxs
ZWU7CiBzdHJ1Y3QgUHJvdG9DYWxsRnJhbWU7CiBjbGFzcyBXZWJBc3NlbWJseUluc3RhbmNlOwog
CkBAIC01MywyOCArNTMsMjkgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVh
dGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgV2FzbTo6U2lnbmF0dXJlKik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJB
c3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZSopOwogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3ZWJBc3NlbWJseUNhbGxlZSgpIGNv
bnN0IHsgcmV0dXJuIG1fd2FzbUNhbGxlZS5nZXQoKTsgfQogICAgIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlLmdldCgpOyB9Ci0gICAg
Y29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUoKQorICAgIFdhc206OlNpZ25hdHVyZSog
c2lnbmF0dXJlKCkKICAgICB7IAogICAgICAgICBBU1NFUlQobV9zaWduYXR1cmUpOwogICAgICAg
ICByZXR1cm4gbV9zaWduYXR1cmU7CiAgICAgfQogICAgIEVuY29kZWRKU1ZhbHVlIGNhbGwoVk0m
LCBQcm90b0NhbGxGcmFtZSopOworICAgIHZvaWQqIHdhc21FbnRyeXBvaW50KCkgeyByZXR1cm4g
bV93YXNtRW50cnlwb2ludC0+ZW50cnlwb2ludCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiwgV2FzbTo6U2lnbmF0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50
LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlKik7
CiAKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKik7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNl
PiBtX2luc3RhbmNlOwotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX3dh
c21DYWxsZWU7CisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+IG1fanNFbnRy
eXBvaW50OworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX3dhc21FbnRy
eXBvaW50OwogICAgIFdhc206OlNpZ25hdHVyZSogbV9zaWduYXR1cmU7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29ucwogICAgIC8vIEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMwogCiAgICAgYm9vbCBoYXNN
ZW1vcnlJbXBvcnQgPSBmYWxzZTsKKyAgICBib29sIGhhc1RhYmxlSW1wb3J0ID0gZmFsc2U7CiAg
ICAgLy8gRm9yIGVhY2ggaW1wb3J0IGkgaW4gbW9kdWxlLmltcG9ydHM6CiAgICAgZm9yIChhdXRv
JiBpbXBvcnQgOiBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzKSB7CiAgICAgICAgIC8vIDEuIExl
dCBvIGJlIHRoZSByZXN1bHRhbnQgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0
LCBpLm1vZHVsZV9uYW1lKS4KQEAgLTEzMSwxMiArMTMyLDM2IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6OlRhYmxlOiB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghaGFzVGFibGVJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5
IGEgdmFsaWRhdGlvbiBmYWlsdXJlLgogICAgICAgICAgICAgLy8gNy4gT3RoZXJ3aXNlIChpIGlz
IGEgdGFibGUgaW1wb3J0KToKLSAgICAgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBUYWJsZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAgICAgICAg
ICBoYXNUYWJsZUltcG9ydCA9IHRydWU7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUq
IHRhYmxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPih2YWx1ZSk7CiAgICAg
ICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhy
b3cgYSBUeXBlRXJyb3IuCisgICAgICAgICAgICBpZiAoIXRhYmxlKQorICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5vdCBh
biBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSkpOworCisgICAgICAgICAgICB1aW50
MzJfdCBleHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9u
LmluaXRpYWwoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBkbyB3ZSBjYXJlIGFib3V0IHRoZSBh
Y3R1YWwgc3RhcnRpbmcgImluaXRpYWwiIHZhbHVlLCBvciBqdXN0IHRoZSBjdXJyZW50ICJzaXpl
IiBvZiB0aGUgdGFibGUsIHNpbmNlIHRhYmxlcyBjYW4gZ3Jvdy4KKyAgICAgICAgICAgIC8vIFRo
aXMgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiB0aGUgSlMgQVBJLCBidXQgaXNuJ3QuCisgICAgICAg
ICAgICB1aW50MzJfdCBhY3R1YWxJbml0aWFsID0gdGFibGUtPnNpemUoKTsKKyAgICAgICAgICAg
IGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQorICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFu
ICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSkpOworCisgICAgICAgICAgICBpZiAoc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gZXhwZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24u
dGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpIHsKKyAgICAgICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiBhY3R1YWxNYXhpbXVtID0gdGFibGUtPm1heGltdW0oKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlRh
YmxlIGltcG9ydCBkaWQgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWly
ZXMgdGhhdCBpdCBkb2VzIikpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICgqYWN0dWFsTWF4aW11bSA+ICpleHBlY3RlZE1heGltdW0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIlRhYmxlIGltcG9ydHMgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1
bGUncyBleHBlY3RlZCAnbWF4aW11bSIpKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIHRhYmxlcy4KICAgICAgICAg
ICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9ydHMuCi0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgaW5zdGFuY2UtPnNldFRh
YmxlKHZtLCB0YWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIFdhc206OkV4dGVybmFsOjpNZW1vcnk6IHsKQEAgLTE4NSw3ICsyMTAsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICB7CiAgICAgICAgIGlmICgh
IW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJ
bXBvcnQoKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGFuIGltcG9y
dCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgLy8g
V2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgTWVtb3J5IGltcG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0
aHJvd24gYW4gZXhjZXB0aW9uLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaGFzTWVtb3J5
SW1wb3J0KTsKICAgICAgICAgfQogCkBAIC0yMDAsNiArMjI1LDIwIEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgfQogICAgIH0KIAorICAgIHsKKyAg
ICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbiAmJiBtb2R1bGVJ
bmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0KCkpIHsKKyAgICAgICAgICAgIC8v
IFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIFRhYmxlIGltcG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0
aHJvd24gYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaGFzVGFibGVJ
bXBvcnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24udGFi
bGVJbmZvcm1hdGlvbiAmJiAhaGFzVGFibGVJbXBvcnQpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0KCkpOwor
ICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgVGFibGUgd2hlbiBpdCdzIGEgVGFibGUgZGVmaW5p
dGlvbi4KKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRUYWJsZSh2bSwKKyAgICAgICAgICAgICAg
IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxl
SW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9u
Lm1heGltdW0oKSkpOworICAgICAgICB9CisgICAgfQorCiAgICAgbW9kdWxlUmVjb3JkLT5saW5r
KGV4ZWMsIGluc3RhbmNlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgaWYgKHZlcmJvc2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICAgICAg
SlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhlYywgbWF4aW11
bSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgICAgICAgICB1aW50MzJfdCBzaXplID0gZ2V0VWludDMyKG1heFNpemVWYWx1ZSk7CisgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgICAg
ICBpZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxpZChzaXplKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgJ21h
eGltdW0nIHBhZ2UgY291bnQgaXMgdG9vIGxhcmdlIikpKSk7Ci0gICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgICAgICBtYXhpbXVtUGFnZUNv
dW50ID0gV2FzbTo6UGFnZUNvdW50KHNpemUpOwogCiAgICAgICAgICAgICBpZiAoaW5pdGlhbFBh
Z2VDb3VudCA+IG1heGltdW1QYWdlQ291bnQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJl
dmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDkgKzEzNiwxMCBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgICAgICAvLyAg
ICAgYS4gTGV0IGZ1bmMgYmUgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdCBjcmVh
dGVkIGZyb20gYy4KICAgICAgICAgICAgIC8vICAgICBiLiBBcHBlbmQgZnVuYyB0byBmdW5jcy4K
ICAgICAgICAgICAgIC8vICAgICBjLiBSZXR1cm4gZnVuYy4KLSAgICAgICAgICAgIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIHdhc21DYWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21G
dW5jdGlvbkluZGV4U3BhY2UoZXhwLmZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgSlNXZWJB
c3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRD
YWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5mdW5jdGlvbkluZGV4KTsKKyAgICAgICAg
ICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT53
YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmZ1bmN0aW9uSW5k
ZXgpOwogICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBtb2R1bGUtPnNp
Z25hdHVyZUZvckZ1bmN0aW9uSW5kZXhTcGFjZShleHAuZnVuY3Rpb25JbmRleCk7Ci0gICAgICAg
ICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksIGV4
cC5maWVsZC5zdHJpbmcoKSwgaW5zdGFuY2UsIHdhc21DYWxsZWUsIHNpZ25hdHVyZSk7CisgICAg
ICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rp
b246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCks
IGV4cC5maWVsZC5zdHJpbmcoKSwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVu
dHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZSk7CiAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0g
ZnVuY3Rpb247CiAgICAgICAgICAgICBpZiAoaGFzU3RhcnQgJiYgc3RhcnRGdW5jdGlvbkluZGV4
U3BhY2UgPT0gZXhwLmZ1bmN0aW9uSW5kZXgpCiAgICAgICAgICAgICAgICAgbV9zdGFydEZ1bmN0
aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwpAQCAtMTc0LDggKzE3NSw5IEBAIHZvaWQgV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAgICAgLy8gRklYTUUgY2FuIHN0
YXJ0IGNhbGwgaW1wb3J0cyAvIHRhYmxlcz8gVGhpcyBhc3N1bWVzIG5vdC4gaHR0cHM6Ly9naXRo
dWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9pc3N1ZXMvODk2CiAgICAgICAgIGlmICghbV9zdGFy
dEZ1bmN0aW9uLmdldCgpKSB7CiAgICAgICAgICAgICAvLyBUaGUgc3RhcnQgZnVuY3Rpb24gd2Fz
bid0IGFkZGVkIGFib3ZlLiBJdCBtdXN0IGJlIGEgcHVyZWx5IGludGVybmFsIGZ1bmN0aW9uLgot
ICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSA9IG1vZHVsZS0+anNF
bnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFz
c2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3Vt
ZW50cy5zaXplKCksICJzdGFydCIsIGluc3RhbmNlLCB3YXNtQ2FsbGVlLCBzaWduYXR1cmUpOwor
ICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gbW9k
dWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rp
b25JbmRleFNwYWNlKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRy
eXBvaW50Q2FsbGVlID0gbW9kdWxlLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgV2ViQXNzZW1i
bHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpLCAic3RhcnQiLCBpbnN0YW5j
ZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlKTsK
ICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAg
ICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJs
ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZVBy
b3RvdHlwZS5oIgogCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5o
IgpAQCAtNDMsMTIgKzQ0LDY2IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseVRhYmxlQ29u
c3RydWMKICBAZW5kCiAgKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKHN0YXRlLCBBU0NJ
SUxpdGVyYWwoIldlYkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgVGFibGUgY29u
c3RydWN0b3IgcHJvcGVydHkiKSkpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byBnZXRV
aW50MzIgPSBbJl0gKEpTVmFsdWUgdmFsdWUpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgZG91Ymxl
IGRvdWJsZVZhbHVlID0gdmFsdWUudG9JbnRlZ2VyKGV4ZWMpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIGlmIChkb3VibGVWYWx1ZSA8IDAg
fHwgZG91YmxlVmFsdWUgPiBVSU5UX01BWCkgeworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUgZXhwZWN0cyB0aGUgJ2luaXRpYWwnIGFu
ZCAnbWF4aW11bScgcHJvcGVydGllcyB0byBiZSBpbnRlZ2VycyBpbiB0aGUgcmFuZ2U6IFswLCAy
XjMyIC0gMV0iKSkpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihkb3VibGVWYWx1ZSk7CisgICAgfTsKKworICAg
IC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIHJlYWxseSBjbG9zZSB0byBXZWJBc3NlbWJseS5N
ZW1vcnkgY29uc3RydWNvdHIsIHdlIGNvdWxkIHByb2JhYmx5CisgICAgLy8gZmFjdG9yIG91dCB0
aGVpciBjb21tb24gYml0cyBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uLgorCisgICAgSlNPYmplY3Qq
IG1lbW9yeURlc2NyaXB0b3I7CisgICAgeworICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gZXhl
Yy0+YXJndW1lbnQoMCk7CisgICAgICAgIGlmICghYXJndW1lbnQuaXNPYmplY3QoKSkKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFi
bGUgZXhwZWN0cyBpdHMgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IikpKSk7CisgICAg
ICAgIG1lbW9yeURlc2NyaXB0b3IgPSBqc0Nhc3Q8SlNPYmplY3QqPihhcmd1bWVudCk7CisgICAg
fQorCisgICAgeworICAgICAgICBJZGVudGlmaWVyIGVsZW1lbnRJZGVudCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiZWxlbWVudCIpOworICAgICAgICBKU1ZhbHVlIGVsZW1lbnRWYWx1
ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBlbGVtZW50SWRlbnQpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIFN0cmluZyBlbGVt
ZW50U3RyaW5nID0gZWxlbWVudFZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIGlmIChlbGVtZW50U3Ry
aW5nICE9ICJhbnlmdW5jIikKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUgZXhwZWN0cyBpdHMgJ2VsZW1lbnQnIGZpZWxkIHRv
IGJlIHRoZSBzdHJpbmcgJ2FueWZ1bmMnIikpKSk7CisgICAgfQorCisgICAgSWRlbnRpZmllciBp
bml0aWFsSWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImluaXRpYWwiKTsKKyAg
ICBKU1ZhbHVlIGluaXRpYWxTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhlYywg
aW5pdGlhbElkZW50KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CisgICAgdWludDMyX3QgaW5pdGlhbCA9IGdldFVpbnQzMihpbml0aWFsU2l6ZVZhbHVlKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgIElkZW50aWZpZXIgbWF4aW11bUlkZW50ID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtIik7CisgICAgYm9vbCBoYXNQcm9wZXJ0
eSA9IG1lbW9yeURlc2NyaXB0b3ItPmhhc1Byb3BlcnR5KGV4ZWMsIG1heGltdW1JZGVudCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIGlmIChoYXNQcm9w
ZXJ0eSkgeworICAgICAgICBKU1ZhbHVlIG1heFNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3It
PmdldChleGVjLCBtYXhpbXVtSWRlbnQpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CisgICAgICAgIG1heGltdW0gPSBnZXRVaW50MzIobWF4U2l6ZVZhbHVl
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworCisgICAg
ICAgIGlmIChpbml0aWFsID4gKm1heGltdW0pIHsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgICAg
ICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiJ21heGltdW0nIHByb3BlcnR5
IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSAnaW5pdGlhbCcgcHJvcGVydHki
KSkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNX
ZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLCBpbml0aWFsLCBtYXhpbXVtKSk7CiB9CiAKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5VGFibGUo
RXhlY1N0YXRlKiBzdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVk
ZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAKICNpbmNsdWRlICJXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmx1dC5oIgogCkBAIC00MiwxMCArNDMsMTM0IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJB
c3NlbWJseVRhYmxlUHJvdG90eXAKICBAZW5kCiAgKi8KIAotV2ViQXNzZW1ibHlUYWJsZVByb3Rv
dHlwZSogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTV2Vi
QXNzZW1ibHlUYWJsZSogZ2V0VGFibGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTVmFsdWUg
dikKK3sKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBKU1dlYkFzc2VtYmx5VGFibGUqIHJlc3VsdCA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJs
eVRhYmxlKj4odik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgCisgICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJleHBlY3RlZCB8dGhpc3wgdmFsdWUgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgV2Vi
QXNzZW1ibHkuVGFibGUiKSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3Nl
bWJseVRhYmxlUHJvdG9GdW5jTGVuZ3RoKEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqKTsKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dldChF
eGVjU3RhdGUqKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJs
ZVByb3RvRnVuY1NldChFeGVjU3RhdGUqKTsKKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGdldFRhYmxl
KGV4ZWMsIHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodGFi
bGUtPnNpemUoKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5VGFibGVQcm90b0Z1bmNHcm93KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGdldFRhYmxlKGV4ZWMsIHZtLCBl
eGVjLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOworCisgICAgLy8gRklYTUU6IGxldHMgbWFrZSBhIGhlbHBlciBmb3IgdGhpcyBhcyB0aGUg
c3BlYyBoYXMgZG9uZS4KKyAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgw
KS50b0ludGVnZXIoZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOworICAgIGlmIChkb3VibGVWYWx1ZSA8IDAgfHwgZG91YmxlVmFsdWUgPiBVSU5UX01BWCkg
eworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAg
Y3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnBy
b3RvdHlwZS5ncm93IGV4cGVjdHMgYW4gaW50ZWdlciBhcmd1bWVudCBpbiB0aGUgcmFuZ2U6IFsw
LCAyXjMyIC0gMV0iKSkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGlmICgh
dGFibGUtPmdyb3coc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRvdWJsZVZhbHVlKSkpIHsKKyAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5n
cm93IGNvdWxkIG5vdCBncm93IHRoZSB0YWJsZSIpKSk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNXZWJBc3NlbWJs
eVRhYmxlKiB0YWJsZSA9IGdldFRhYmxlKGV4ZWMsIHZtLCBleGVjLT50aGlzVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworCisgICAgLy8gRklYTUU6
IGxldHMgbWFrZSBhIGhlbHBlciBmb3IgdGhpcyBhcyB0aGUgc3BlYyBoYXMgZG9uZS4KKyAgICBk
b3VibGUgZG91YmxlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludGVnZXIoZXhlYyk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIGlmIChkb3VibGVW
YWx1ZSA8IDAgfHwgZG91YmxlVmFsdWUgPiBVSU5UX01BWCkgeworICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihleGVj
LCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5nZXQgZXhwZWN0cyBh
biBpbnRlZ2VyIGFyZ3VtZW50IGluIHRoZSByYW5nZTogWzAsIDJeMzIgLSAxXSIpKSk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgdWludDMyX3QgaW5kZXggPSBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oZG91YmxlVmFsdWUpOworICAgIGlmIChpbmRleCA+PSB0YWJsZS0+c2l6ZSgp
KSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAg
ICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUu
cHJvdG90eXBlLmdldCBleHBlY3RzIGFuIGludGVnZXIgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRo
ZSB0YWJsZSIpKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYgKFdlYkFz
c2VtYmx5RnVuY3Rpb24qIHJlc3VsdCA9IHRhYmxlLT5nZXRGdW5jdGlvbihpbmRleCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJB
c3NlbWJseVRhYmxlUHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGdldFRhYmxlKGV4ZWMsIHZt
LCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1
bmN0aW9uKj4odmFsdWUpOworICAgIGlmICghdmFsdWUuaXNOdWxsKCkgJiYgIWZ1bmN0aW9uKSB7
CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90
b3R5cGUuc2V0IGV4cGVjdHMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBiZSBudWxsIG9yIGFuIGlu
c3RhbmNlIG9mIFdlYkFzc2VtYmx5LkZ1bmN0aW9uIikpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogbGV0cyBtYWtlIGEgaGVscGVyIGZvciB0aGlzIGFzIHRo
ZSBzcGVjIGhhcyBkb25lLgorICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvSW50ZWdlcihleGVjKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CisgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IFVJTlRfTUFY
KSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAg
ICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUu
cHJvdG90eXBlLnNldCBleHBlY3RzIGl0cyBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBpbnRlZ2Vy
IGluIHRoZSByYW5nZTogWzAsIDJeMzIgLSAxXSIpKSk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgdWludDMyX3QgaW5kZXggPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZG91Ymxl
VmFsdWUpOworICAgIGlmIChpbmRleCA+PSB0YWJsZS0+c2l6ZSgpKSB7CisgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLmdldCBleHBl
Y3RzIGFuIGludGVnZXIgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSB0YWJsZSIpKSk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQorICAgICAg
ICB0YWJsZS0+Y2xlYXJGdW5jdGlvbihpbmRleCk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VS
VCghIWZ1bmN0aW9uKTsKKyAgICAgICAgdGFibGUtPnNldEZ1bmN0aW9uKHZtLCBpbmRleCwgZnVu
Y3Rpb24pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworfQorCitXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKiBXZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNz
ZW1ibHlUYWJsZVByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKLSAgICBvYmplY3QtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKQEAgLTU0LDkgKzE3OSwxNCBAQCBTdHJ1Y3R1cmUq
IFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6OmNyCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3ZvaWQgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAgIEpTQ19OQVRJVkVfR0VUVEVS
KCJsZW5ndGgiLCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jTGVuZ3RoLCBEb250RW51bSB8IEFj
Y2Vzc29yKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigiZ3Jv
dyIsIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHcm93LCBEb250RW51bSwgMSk7CisgICAgSlND
X05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oImdldCIsIHdlYkFzc2VtYmx5VGFi
bGVQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTigic2V0Iiwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldCwgRG9u
dEVudW0sIDIpOwogfQogCiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlOjpXZWJBc3NlbWJseVRh
YmxlUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVBy
b3RvdHlwZS5oCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcg
KzQzLDcgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogcHJvdGVjdGVkOgotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNH
bG9iYWxPYmplY3QqKTsKIAogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBl
KFZNJiwgU3RydWN0dXJlKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296966</attachid>
            <date>2016-12-12 16:46:26 -0800</date>
            <delta_ts>2016-12-12 16:52:38 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>83919</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk3NDYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDU2IEBACisyMDE2LTEyLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBpbXBsZW1lbnQgdGhlIHRhYmxlIHNlY3Rpb24g
YW5kIHRhYmxlIGltcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1NzE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3YXNtL0J1aWxkZXIuanM6CisgICAgICAgIChjb25zdC5faW1wb3J0TWVtb3J5
Q29udGludWF0aW9uKToKKyAgICAgICAgKGNvbnN0Ll9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbik6
CisgICAgICAgIChleHBvcnQuZGVmYXVsdC5CdWlsZGVyLnByb3RvdHlwZS5fcmVnaXN0ZXJTZWN0
aW9uQnVpbGRlcnMuc3dpdGNoLmNhc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUudGhpcy5zZWN0aW9u
KToKKyAgICAgICAgKGNvbnN0Ll9pbXBvcnRNZW1vcnlDb250aW51YXRpb24uc2VjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChjb25zdC5faW1wb3J0
TWVtb3J5Q29udGludWF0aW9uLmFzc2VydCk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9CdWls
ZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzOgorICAgICAgICAocHV0UmVzaXphYmxlTGltaXRzKToK
KyAgICAgICAgKHB1dFRhYmxlKToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLlR5cGUpOiBEZWxl
dGVkLgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuSW1wb3J0KTogRGVsZXRlZC4KKyAgICAgICAg
KGNvbnN0LmVtaXR0ZXJzLkZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0LmVtaXR0
ZXJzLlRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLk1lbW9yeSk6IERl
bGV0ZWQuCisgICAgICAgIChjb25zdC5lbWl0dGVycy5HbG9iYWwpOiBEZWxldGVkLgorICAgICAg
ICAoY29uc3QuZW1pdHRlcnMuRXhwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0LmVtaXR0
ZXJzLlN0YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkVsZW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuQ29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChjb25zdC5lbWl0dGVycy5EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKGV4cG9ydC5jb25zdC5C
aW5hcnkpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvY2FsbC1pbmRp
cmVjdC1wYXJhbXMuanM6IFJlbW92ZWQuCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9j
YWxsLWluZGlyZWN0LmpzOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMv
dGFibGUtYmFzaWMtMi5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0
cmluZ19hcHBlYXJlZF9oZXJlLm1ha2VJbnN0YW5jZSk6CisgICAgICAgIChmdW5jKToKKyAgICAg
ICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2ljLmpzOiBBZGRlZC4KKyAgICAgICAg
KGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUubWFrZUluc3RhbmNlKToK
KyAgICAgICAgKiB3YXNtL2pzLWFwaS9jYWxsLWluZGlyZWN0LXJlc3VsdHMuanM6IFJlbW92ZWQu
CisgICAgICAgICogd2FzbS9qcy1hcGkvY2FsbC1pbmRpcmVjdC5qczoKKyAgICAgICAgKGNvbnN0
Lndhc21Nb2R1bGVXaGljaEltcG9ydEpTKToKKyAgICAgICAgKGNvbnN0Lm1ha2VUYWJsZSk6Cisg
ICAgICAgIChQb2x5cGhpYzJJbXBvcnQpOgorICAgICAgICAoVmlydHVhbEltcG9ydCk6CisgICAg
ICAgIChNb25vbW9ycGhpY0ltcG9ydCk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy1hcGkv
dGFibGUuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0QmFkQmluYXJ5KToKKyAgICAgICAgKGFz
c2VydC50cnV0aHkpOgorICAgICAgICAoYXNzZXJ0QmFkVGFibGUpOgorICAgICAgICAoYXNzZXJ0
QmFkVGFibGVJbXBvcnQpOgorICAgICAgICAoYXNzZXJ0QmFkQmluYXJ5LmFzc2VydEJhZFRhYmxl
SW5zdGFuY2UpOgorICAgICAgICAoYXNzZXJ0QmFkVGFibGVJbnN0YW5jZSk6CisgICAgICAgICog
d2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanM6CisgICAgICAgIChjb25zdC5jLmluLmNvbnN0
cnVjdG9yUHJvcGVydGllcy5zd2l0Y2gpOgorCiAyMDE2LTEyLTEyICBNaWNoYWVsIFNhYm9mZiAg
PG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjIwOTY1Myk6IHNwZWVk
b21ldGVyIGNyYXNoZXMgbWFraW5nIHZpcnR1YWwgc2xvdyBwYXRoIHRhaWxjYWxscwpJbmRleDog
SlNUZXN0cy93YXNtL0J1aWxkZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL0J1aWxk
ZXIuanMJKHJldmlzaW9uIDIwOTcwNCkKKysrIEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwyMiBAQCBjb25zdCBfaW1wb3J0RnVuY3Rpb25Db250
aW51YXRpb24gPSAoYnVpCiAKIGNvbnN0IF9pbXBvcnRNZW1vcnlDb250aW51YXRpb24gPSAoYnVp
bGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKICAgICByZXR1cm4gKG1vZHVsZSwgZmll
bGQsIG1lbW9yeURlc2NyaXB0aW9uKSA9PiB7Ci0gICAgICAgIGFzc2VydC5pc1N0cmluZyhtb2R1
bGUsIGBJbXBvcnQgZnVuY3Rpb24gbW9kdWxlIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke21v
ZHVsZX0iYCk7Ci0gICAgICAgIGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEltcG9ydCBmdW5jdGlv
biBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CisgICAgICAgIGFz
c2VydC5pc1N0cmluZyhtb2R1bGUsIGBJbXBvcnQgTWVtb3J5IG1vZHVsZSBzaG91bGQgYmUgYSBz
dHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQs
IGBJbXBvcnQgTWVtb3J5IGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJg
KTsKICAgICAgICAgc2VjdGlvbi5kYXRhLnB1c2goe21vZHVsZSwgZmllbGQsIGtpbmQ6ICJNZW1v
cnkiLCBtZW1vcnlEZXNjcmlwdGlvbn0pOwogICAgICAgICByZXR1cm4gbmV4dEJ1aWxkZXI7CiAg
ICAgfTsKIH07CiAKK2NvbnN0IF9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBz
ZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4geworICAgIHJldHVybiAobW9kdWxlLCBmaWVsZCwgdGFi
bGVEZXNjcmlwdGlvbikgPT4geworICAgICAgICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1w
b3J0IFRhYmxlIG1vZHVsZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOwor
ICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQgVGFibGUgZmllbGQgc2hvdWxk
IGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAgICBzZWN0aW9uLmRhdGEucHVz
aCh7bW9kdWxlLCBmaWVsZCwga2luZDogIlRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbn0pOworICAg
ICAgICByZXR1cm4gbmV4dEJ1aWxkZXI7CisgICAgfTsKK307CisKIGNvbnN0IF9leHBvcnRGdW5j
dGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewog
ICAgIHJldHVybiAoZmllbGQsIGluZGV4LCB0eXBlKSA9PiB7CiAgICAgICAgIGFzc2VydC5pc1N0
cmluZyhmaWVsZCwgYEV4cG9ydCBmdW5jdGlvbiBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdv
dCAiJHtmaWVsZH0iYCk7CkBAIC0yOTksMTIgKzMwOCwyOSBAQCBjb25zdCBfY3JlYXRlRnVuY3Rp
b24gPSAoc2VjdGlvbiwgYnVpbGRlCiAKICAgICAgICAgaWYgKHR5cGVvZihzaWduYXR1cmUpID09
PSAidW5kZWZpbmVkIikKICAgICAgICAgICAgIHNpZ25hdHVyZSA9IHsgcGFyYW1zOiBbXSB9Owot
ICAgICAgICBhc3NlcnQuaGFzT2JqZWN0UHJvcGVydHkoc2lnbmF0dXJlLCAicGFyYW1zIiwgYEV4
cGVjdCBmdW5jdGlvbiBzaWduYXR1cmUgdG8gYmUgYW4gb2JqZWN0IHdpdGggYSAicGFyYW1zIiBm
aWVsZCwgZ290ICIke3NpZ25hdHVyZX0iYCk7Ci0gICAgICAgIGNvbnN0IFtwYXJhbXMsIHJldF0g
PSBfbm9ybWFsaXplRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlLnBhcmFtcywgc2lnbmF0dXJl
LnJldCk7Ci0gICAgICAgIHNpZ25hdHVyZSA9IHsgcGFyYW1zOiBwYXJhbXMsIHJldDogcmV0IH07
CisKKyAgICAgICAgbGV0IHR5cGU7CisgICAgICAgIGxldCBwYXJhbXM7CisgICAgICAgIGlmICh0
eXBlb2Ygc2lnbmF0dXJlID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgYXNzZXJ0Lmhhc09i
amVjdFByb3BlcnR5KHNpZ25hdHVyZSwgInBhcmFtcyIsIGBFeHBlY3QgZnVuY3Rpb24gc2lnbmF0
dXJlIHRvIGJlIGFuIG9iamVjdCB3aXRoIGEgInBhcmFtcyIgZmllbGQsIGdvdCAiJHtzaWduYXR1
cmV9ImApOworICAgICAgICAgICAgbGV0IHJldDsKKyAgICAgICAgICAgIChbcGFyYW1zLCByZXRd
ID0gX25vcm1hbGl6ZUZ1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZS5wYXJhbXMsIHNpZ25hdHVy
ZS5yZXQpKTsKKyAgICAgICAgICAgIHNpZ25hdHVyZSA9IHtwYXJhbXMsIHJldH07CisgICAgICAg
ICAgICB0eXBlID0gX21heWJlUmVnaXN0ZXJUeXBlKGJ1aWxkZXIsIHNpZ25hdHVyZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KHR5cGVvZiBzaWduYXR1cmUg
PT09ICJudW1iZXIiKTsKKyAgICAgICAgICAgIGNvbnN0IHR5cGVTZWN0aW9uID0gYnVpbGRlci5f
Z2V0U2VjdGlvbigiVHlwZSIpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSghIXR5cGVTZWN0
aW9uKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoc2lnbmF0dXJlIDwgdHlwZVNlY3Rpb24u
ZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgdHlwZSA9IHNpZ25hdHVyZTsKKyAgICAgICAgICAg
IHNpZ25hdHVyZSA9IHR5cGVTZWN0aW9uLmRhdGFbc2lnbmF0dXJlXTsKKyAgICAgICAgICAgIGFz
c2VydC5oYXNPYmplY3RQcm9wZXJ0eShzaWduYXR1cmUsICJwYXJhbXMiLCBgRXhwZWN0IGZ1bmN0
aW9uIHNpZ25hdHVyZSB0byBiZSBhbiBvYmplY3Qgd2l0aCBhICJwYXJhbXMiIGZpZWxkLCBnb3Qg
IiR7c2lnbmF0dXJlfSJgKTsKKyAgICAgICAgICAgIHBhcmFtcyA9IHNpZ25hdHVyZS5wYXJhbXM7
CisgICAgICAgIH0KKwogICAgICAgICBjb25zdCBmdW5jID0gewogICAgICAgICAgICAgbmFtZTog
ZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgdHlwZTogX21heWJlUmVnaXN0ZXJUeXBlKGJ1aWxk
ZXIsIHNpZ25hdHVyZSksCisgICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAgc2lnbmF0dXJl
OiBzaWduYXR1cmUsCiAgICAgICAgICAgICBsb2NhbHM6IHBhcmFtcy5jb25jYXQobG9jYWxzKSwg
Ly8gUGFyYW1ldGVycyBhcmUgdGhlIGZpcnN0IGxvY2Fscy4KICAgICAgICAgICAgIHBhcmFtZXRl
ckNvdW50OiBwYXJhbXMubGVuZ3RoLApAQCAtMzc5LDExICs0MDUsMTEgQEAgZXhwb3J0IGRlZmF1
bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9h
ZGRTZWN0aW9uKHNlY3Rpb24pOwogICAgICAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnRCdWls
ZGVyID0gewogICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgVGFibGU6ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxl
bWVudGVkOiBpbXBvcnQgdGFibGVgKTsgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIEdsb2Jh
bDogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9ydCBnbG9iYWxg
KTsgfSwKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0
QnVpbGRlci5GdW5jdGlvbiA9IF9pbXBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBp
bXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5NZW1vcnkg
PSBfaW1wb3J0TWVtb3J5Q29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOworICAg
ICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLlRhYmxlID0gX2ltcG9ydFRhYmxlQ29udGlu
dWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaW1wb3J0QnVpbGRlcjsKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNDAxLDcgKzQyNywxNyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsK
IAogICAgICAgICAgICAgY2FzZSAiVGFibGUiOgogICAgICAgICAgICAgICAgIC8vIEZJWE1FIElt
cGxlbWVudCB0YWJsZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
MTM1Ci0gICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9ICgpID0+IHsgdGhyb3cgbmV3IEVy
cm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbn0iYCk7IH07CisgICAg
ICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZXhwb3J0QnVpbGRlciA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVu
ZDogKCkgPT4gdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlOiAodGFibGVEZXNj
cmlwdGlvbikgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YS5wdXNoKHt0
YWJsZURlc2NyaXB0aW9ufSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4
cG9ydEJ1aWxkZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBvcnRCdWlsZGVyOworICAgICAg
ICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2Ug
Ik1lbW9yeSI6CkluZGV4OiBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5q
cwkocmV2aXNpb24gMjA5NzA0KQorKysgSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlC
aW5hcnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDI4IEBAIGltcG9ydCAqIGFzIFdB
U00gZnJvbSAnV0FTTS5qcyc7CiAKIGNvbnN0IHB1dCA9IChiaW4sIHR5cGUsIHZhbHVlKSA9PiBi
aW5bdHlwZV0odmFsdWUpOwogCitmdW5jdGlvbiBwdXRSZXNpemFibGVMaW1pdHMoYmluLCBpbml0
aWFsLCBtYXhpbXVtKSB7CisgICAgYXNzZXJ0LnRydXRoeSh0eXBlb2YgaW5pdGlhbCA9PT0gIm51
bWJlciIsICJXZSBleHBlY3QgJ2luaXRpYWwnIHRvIGJlIGFuIGludGVnZXIiKTsKKyAgICBsZXQg
aGFzTWF4aW11bSA9IDA7CisgICAgaWYgKHR5cGVvZiBtYXhpbXVtID09PSAibnVtYmVyIikgewor
ICAgICAgICBoYXNNYXhpbXVtID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NlcnQudHJ1
dGh5KHR5cGVvZiBtYXhpbXVtID09PSAidW5kZWZpbmVkIiwgIldlIGV4cGVjdCAnbWF4aW11bScg
dG8gYmUgYW4gaW50ZWdlciBpZiBpdCdzIGRlZmluZWQiKTsKKyAgICB9CisKKyAgICBwdXQoYmlu
LCAidmFydWludDEiLCBoYXNNYXhpbXVtKTsKKyAgICBwdXQoYmluLCAidmFydWludDMyIiwgaW5p
dGlhbCk7CisgICAgaWYgKGhhc01heGltdW0pCisgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIi
LCBtYXhpbXVtKTsKK30KKworZnVuY3Rpb24gcHV0VGFibGUoYmluLCB7aW5pdGlhbCwgbWF4aW11
bSwgZWxlbWVudH0pIHsKKyAgICBhc3NlcnQudHJ1dGh5KFdBU00uaXNWYWxpZFR5cGUoZWxlbWVu
dCksICJXZSBleHBlY3QgJ2VsZW1lbnQnIHRvIGJlIGEgdmFsaWQgdHlwZS4gSXQgd2FzOiAiICsg
ZWxlbWVudCk7CisgICAgcHV0KGJpbiwgInZhcmludDciLCBXQVNNLnR5cGVWYWx1ZVtlbGVtZW50
XSk7CisKKyAgICBwdXRSZXNpemFibGVMaW1pdHMoYmluLCBpbml0aWFsLCBtYXhpbXVtKTsKK30K
KwogY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgVHlwZTogKHNlY3Rpb24sIGJpbikgPT4gewogICAg
ICAgICBwdXQoYmluLCAidmFydWludDMyIiwgc2VjdGlvbi5kYXRhLmxlbmd0aCk7CkBAIC01Nywy
MyArNzksMTMgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgICAgICAgICAgICAgcHV0KGJpbiwg
InZhcnVpbnQzMiIsIGVudHJ5LnR5cGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY2FzZSAiVGFibGUiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5
ZXQgaW1wbGVtZW50ZWRgKTsKKyAgICAgICAgICAgIGNhc2UgIlRhYmxlIjogeworICAgICAgICAg
ICAgICAgIHB1dFRhYmxlKGJpbiwgZW50cnkudGFibGVEZXNjcmlwdGlvbik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlICJNZW1vcnkiOiB7
CiAgICAgICAgICAgICAgICAgbGV0IHtpbml0aWFsLCBtYXhpbXVtfSA9IGVudHJ5Lm1lbW9yeURl
c2NyaXB0aW9uOwotICAgICAgICAgICAgICAgIGFzc2VydC50cnV0aHkodHlwZW9mIGluaXRpYWwg
PT09ICJudW1iZXIiLCAiV2UgZXhwZWN0ICdpbml0aWFsJyB0byBiZSBhIG51bWJlciIpOwotICAg
ICAgICAgICAgICAgIGluaXRpYWwgfD0gMDsKLSAgICAgICAgICAgICAgICBsZXQgaGFzTWF4aW11
bSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXhpbXVtID09PSAibnVtYmVyIikg
ewotICAgICAgICAgICAgICAgICAgICBtYXhpbXVtIHw9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IGhhc01heGltdW0gPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGFzc2VydC50cnV0aHkodHlwZW9mIG1heGltdW0gPT09ICJ1bmRlZmluZWQiLCAiV2Ug
ZXhwZWN0ICdtYXhpbXVtJyB0byBiZSBhIG51bWJlciBpZiBpdCdzIGRlZmluZWQiKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDEiLCBoYXNN
YXhpbXVtKTsKLSAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgaW5pdGlhbCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGhhc01heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHB1
dChiaW4sICJ2YXJ1aW50MzIiLCBtYXhpbXVtKTsKKyAgICAgICAgICAgICAgICBwdXRSZXNpemFi
bGVMaW1pdHMoYmluLCBpbml0aWFsLCBtYXhpbXVtKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBjYXNlICJHbG9iYWwiOiB0aHJvdyBuZXcgRXJy
b3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsKQEAgLTg3LDcgKzk5LDEyIEBAIGNvbnN0IGVtaXR0
ZXJzID0gewogICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIHNpZ25hdHVyZSk7CiAg
ICAgfSwKIAotICAgIFRhYmxlOiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihg
Tm90IHlldCBpbXBsZW1lbnRlZGApOyB9LAorICAgIFRhYmxlOiAoc2VjdGlvbiwgYmluKSA9PiB7
CisgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBzZWN0aW9uLmRhdGEubGVuZ3RoKTsKKyAg
ICAgICAgZm9yIChjb25zdCB7dGFibGVEZXNjcmlwdGlvbn0gb2Ygc2VjdGlvbi5kYXRhKSB7Cisg
ICAgICAgICAgICBwdXRUYWJsZShiaW4sIHRhYmxlRGVzY3JpcHRpb24pOworICAgICAgICB9Cisg
ICAgfSwKIAogICAgIE1lbW9yeTogKHNlY3Rpb24sIGJpbikgPT4gewogICAgICAgICAvLyBGbGFn
cywgY3VycmVudGx5IGNhbiBvbmx5IGJlIFswLDFdCkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvY2FsbC1pbmRpcmVjdC1wYXJhbXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93
YXNtL2Z1bmN0aW9uLXRlc3RzL2NhbGwtaW5kaXJlY3QtcGFyYW1zLmpzCShyZXZpc2lvbiAyMDk3
MDQpCisrKyBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvY2FsbC1pbmRpcmVjdC1wYXJhbXMu
anMJKG5vbmV4aXN0ZW50KQpAQCAtMSwyOCArMCwwIEBACi1pbXBvcnQgQnVpbGRlciBmcm9tICcu
Li9CdWlsZGVyLmpzJwotCi1jb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKLWIuVHlwZSgpLkVuZCgp
Ci0gICAgLkZ1bmN0aW9uKCkuRW5kKCkKLSAgICAuQ29kZSgpCi0KLSAgICAuRnVuY3Rpb24oeyBw
YXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKLSAgICAuSTMyQ29uc3QoMSkKLSAgICAuRW5k
KCkKLQotICAgIC5GdW5jdGlvbih7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQotICAg
IC5HZXRMb2NhbCgwKQotICAgIC5FbmQoKQotCi0gICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBbImkz
MiIsICJpMzIiXSwgcmV0OiAiaTMyIiB9KQotICAgIC5HZXRMb2NhbCgxKQotICAgIC5HZXRMb2Nh
bCgwKQotICAgIC5DYWxsSW5kaXJlY3QoMCwgMCkKLSAgICAuRW5kKCkKLQotCi1jb25zdCBiaW4g
PSBiLldlYkFzc2VtYmx5KCkKLWJpbi50cmltKCk7Ci10ZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhi
aW4uZ2V0KCksIDMsIFtdLCBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFtbeyB0eXBlOiAi
aTMyIiwgdmFsdWU6IDEgfSwgW3sgdHlwZTogImkzMiIsIHZhbHVlOiAwIH0sIHsgdHlwZTogImkz
MiIsIHZhbHVlOiA0IH1dXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbeyB0eXBlOiAiaTMy
IiwgdmFsdWU6IDQgfSwgW3sgdHlwZTogImkzMiIsIHZhbHVlOiAxIH0sIHsgdHlwZTogImkzMiIs
IHZhbHVlOiA0IH1dXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF0pOwpJbmRleDogSlNUZXN0
cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NhbGwtaW5kaXJlY3QuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NhbGwtaW5kaXJlY3QuanMJKHJldmlzaW9uIDIwOTcw
NCkKKysrIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9jYWxsLWluZGlyZWN0LmpzCShub25l
eGlzdGVudCkKQEAgLTEsMjcgKzAsMCBAQAotaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRl
ci5qcycKLQotY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Ci1iLlR5cGUoKS5FbmQoKQotICAgIC5G
dW5jdGlvbigpLkVuZCgpCi0gICAgLkNvZGUoKQotCi0gICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBb
XSwgcmV0OiAiaTMyIiB9KQotICAgIC5JMzJDb25zdCgxKQotICAgIC5FbmQoKQotCi0gICAgLkZ1
bmN0aW9uKHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQotICAgIC5JMzJDb25zdCgyKQotICAg
IC5FbmQoKQotCi0gICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0p
Ci0gICAgLkdldExvY2FsKDApCi0gICAgLkNhbGxJbmRpcmVjdCgwLCAwKQotICAgIC5FbmQoKQot
Ci0KLWNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKQotYmluLnRyaW0oKTsKLXRlc3RXYXNtTW9k
dWxlRnVuY3Rpb25zKGJpbi5nZXQoKSwgMywgW10sIFtdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgW1t7IHR5cGU6ICJpMzIiLCB2YWx1ZTogMSB9LCBbeyB0eXBlOiAiaTMyIiwgdmFsdWU6IDAg
fV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgIFt7IHR5cGU6ICJpMzIiLCB2YWx1ZTogMSB9
LCBbeyB0eXBlOiAiaTMyIiwgdmFsdWU6IDAgfV1dLAotICAgICAgICAgICAgICAgICAgICAgICAg
XSk7CkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFzaWMtMi5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFzaWMtMi5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFz
aWMtMi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACitpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJworCitmdW5jdGlvbiBtYWtlSW5zdGFuY2UoZnVuYykgeworICAg
IGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkKKyAgICAgICAg
ICAgIC5GdW5jKFsiaTMyIiwgImkzMiJdLCAiaTMyIikKKyAgICAgICAgICAgIC5GdW5jKFsiaTMy
Il0sICJpMzIiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAg
ICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHtpbml0aWFsOiAyMCwgZWxlbWVudDogImFueWZ1bmMi
fSkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImZ1bmMiLCB7IHBhcmFtczogWyJpMzIi
XSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5k
KCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImJhciIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIDAgLypbJ2kzMicsICdpMzInXSA9PiAnaTMy
JyovKQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgxKSAvLyBwYXJhbWV0ZXIgdG8gY2FsbAor
ICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKSAvLyBjYWxsIGluZGV4CisgICAgICAgICAgICAg
ICAgLkNhbGxJbmRpcmVjdCgxLCAwKSAvLyBjYWxsaW5nIGZ1bmN0aW9uIG9mIHR5cGUgWydpMzIn
XSA9PiAnaTMyJworICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImJhciIsIDEgLypbJ2kzMiddID0+ICdpMzInKi8pCisg
ICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAg
ICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5k
KCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAg
ICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3Qg
dGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6IDIwLCBlbGVtZW50OiAiYW55
ZnVuYyJ9KTsKKyAgICByZXR1cm4ge2luc3RhbmNlOiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2Uo
bW9kdWxlLCB7aW1wOiB7dGFibGUsIGZ1bmN9fSksIHRhYmxlfTsKK30KKworeworICAgIGxldCBp
OworICAgIGZ1bmN0aW9uIGZ1bmMoeCkgeworICAgICAgICBpZiAoeCAhPT0gaSkKKyAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybiB4ICsg
NDQ7CisgICAgfQorICAgIGNvbnN0IHtpbnN0YW5jZSwgdGFibGV9ID0gbWFrZUluc3RhbmNlKGZ1
bmMpOworICAgIGNvbnN0IGV4cG9ydHMgPSBpbnN0YW5jZS5leHBvcnRzOworICAgIGNvbnN0IGZv
byA9IGV4cG9ydHMuZm9vOworICAgIHRhYmxlLnNldCgwLCBleHBvcnRzLmJhcik7CisKKyAgICBm
b3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBpZiAoZm9vKDAsIGkpICE9PSBp
ICsgNDQpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBjYWxsIGluZGlyZWN0Iik7
CisgICAgfQorfQpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2lj
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy90YWJsZS1iYXNp
Yy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUt
YmFzaWMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAoraW1wb3J0IEJ1aWxkZXIg
ZnJvbSAnLi4vQnVpbGRlci5qcycKKworZnVuY3Rpb24gbWFrZUluc3RhbmNlKCkgeworICAgIGNv
bnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAg
IC5GdW5jKFsiaTMyIiwgImkzMiJdLCAiaTMyIikKKyAgICAgICAgICAgIC5GdW5jKFsiaTMyIl0s
ICJpMzIiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAu
VGFibGUoImltcCIsICJ0YWJsZSIsIHtpbml0aWFsOiAyMCwgZWxlbWVudDogImFueWZ1bmMifSkK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJiYXIiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJmb28iLCAwIC8qWydpMzInLCAnaTMyJ10gPT4gJ2kzMicqLykKKyAgICAgICAgICAg
ICAgICAuR2V0TG9jYWwoMSkgLy8gcGFyYW1ldGVyIHRvIGNhbGwKKyAgICAgICAgICAgICAgICAu
R2V0TG9jYWwoMCkgLy8gY2FsbCBpbmRleAorICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3Qo
MSwgMCkgLy8gY2FsbGluZyBmdW5jdGlvbiBvZiB0eXBlIFsnaTMyJ10gPT4gJ2kzMicKKyAgICAg
ICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJiYXIiLCAxIC8qWydpMzInXSA9PiAnaTMyJyovKQorICAgICAgICAgICAgICAgIC5H
ZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0MikKKyAgICAgICAgICAgICAg
ICAuSTMyQWRkKCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJp
bik7CisgICAgY29uc3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6IDIw
LCBlbGVtZW50OiAiYW55ZnVuYyJ9KTsKKyAgICByZXR1cm4ge2luc3RhbmNlOiBuZXcgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7dGFibGV9fSksIHRhYmxlfTsKK30KKworewor
ICAgIGNvbnN0IHtpbnN0YW5jZSwgdGFibGV9ID0gbWFrZUluc3RhbmNlKCk7CisgICAgY29uc3Qg
ZXhwb3J0cyA9IGluc3RhbmNlLmV4cG9ydHM7CisgICAgY29uc3QgZm9vID0gZXhwb3J0cy5mb287
CisgICAgdGFibGUuc2V0KDAsIGV4cG9ydHMuYmFyKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgMTAwMDsgaSsrKSB7CisgICAgICAgIGlmIChmb28oMCwgaSkgIT09IGkgKyA0MikKKyAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGNhbGwgaW5kaXJlY3QiKTsKKyAgICB9Cit9CisK
Ky8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayBjcm9zcyBtb2R1bGUuIFRoZSByZWFzb24gaXQgZG9l
c24ndAorLy8gbm93IGlzIHRoYXQgd2UgZG9uJ3QgdW5pcXVlIFNpZ25hdHVyZSouCisvKgorewor
ICAgIGNvbnN0IHtpbnN0YW5jZSwgdGFibGV9ID0gbWFrZUluc3RhbmNlKCk7CisgICAgY29uc3Qg
Zm9vID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisgICAgLy90YWJsZS5zZXQoMCwgbWFrZUluc3Rh
bmNlKCkuaW5zdGFuY2UuZXhwb3J0cy5iYXIpOyAvLyBDcm9zcyBpbnN0YW5jZSBmdW5jdGlvbi4K
KworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAgIGlmIChmb28o
MCwgaSkgIT09IGkgKyA0MikKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGNhbGwg
aW5kaXJlY3QiKTsKKyAgICB9Cit9CisqLwpJbmRleDogSlNUZXN0cy93YXNtL2pzLWFwaS9jYWxs
LWluZGlyZWN0LXJlc3VsdHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2pzLWFwaS9j
YWxsLWluZGlyZWN0LXJlc3VsdHMuanMJKHJldmlzaW9uIDIwOTcwNCkKKysrIEpTVGVzdHMvd2Fz
bS9qcy1hcGkvY2FsbC1pbmRpcmVjdC1yZXN1bHRzLmpzCShub25leGlzdGVudCkKQEAgLTEsNDEg
KzAsMCBAQAotaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7Ci1pbXBvcnQg
QnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKLQotY29uc3Qgd2FzbU1vZHVsZVdoaWNoSW1w
b3J0SlMgPSAoKSA9PiB7Ci0gICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQotICAg
ICAgICAuVHlwZSgpLkVuZCgpCi0gICAgICAgIC5JbXBvcnQoKQotICAgICAgICAgICAgLkZ1bmN0
aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCi0gICAg
ICAgIC5FbmQoKQotICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQotICAgICAgICAuRXhwb3J0KCkK
LSAgICAgICAgICAgIC5GdW5jdGlvbigiY2hhbmdlQ291bnRlciIpCi0gICAgICAgIC5FbmQoKQot
ICAgICAgICAuQ29kZSgpCi0gICAgICAgICAgICAuRnVuY3Rpb24oImNoYW5nZUNvdW50ZXIiLCB7
IHBhcmFtczogWyJpMzIiLCAiaTMyIl0sIHJldDogImkzMiIgfSkKLSAgICAgICAgICAgICAgICAu
STMyQ29uc3QoNDIpCi0gICAgICAgICAgICAgICAgLkdldExvY2FsKDApCi0gICAgICAgICAgICAg
ICAgLkkzMkFkZCgpCi0gICAgICAgICAgICAgICAgLkdldExvY2FsKDEpCi0gICAgICAgICAgICAg
ICAgLkNhbGxJbmRpcmVjdCgwLCAwKSAvLyBDYWxscyBmdW5jKHBhcmFtWzBdICsgNDIpLgotICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgwKQotICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3Qo
MCwgMCkgLy8gQ2FsbHMgZnVuYyhwYXJhbVswXSArIDQyKS4KLSAgICAgICAgICAgIC5FbmQoKQot
ICAgICAgICAuRW5kKCk7Ci0gICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpOwotICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKLSAg
ICByZXR1cm4gbW9kdWxlOwotfTsKLQotCi0oZnVuY3Rpb24gTW9ub21vcnBoaWNJbXBvcnQoKSB7
Ci0gICAgbGV0IGNvdW50ZXIgPSAwOwotICAgIGNvbnN0IGNvdW50ZXJTZXR0ZXIgPSB2ID0+IGNv
dW50ZXIgPSB2OwotICAgIGNvbnN0IG1vZHVsZSA9IHdhc21Nb2R1bGVXaGljaEltcG9ydEpTKCk7
Ci0gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
IGltcDogeyBmdW5jOiBjb3VudGVyU2V0dGVyIH0gfSk7Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkg
PCA0MDk2OyArK2kpIHsKLSAgICAgICAgLy8gSW52b2tlIHRoaXMgYSBidW5jaCBvZiB0aW1lcyB0
byBtYWtlIHN1cmUgdGhlIElDIGluIHRoZSB3YXNtIC0+IEpTIHN0dWIgd29ya3MgY29ycmVjdGx5
LgotICAgICAgICBpbnN0YW5jZS5leHBvcnRzLmNoYW5nZUNvdW50ZXIoaSwgMCk7Ci0gICAgICAg
IGFzc2VydC5lcShjb3VudGVyLCBpICsgNDIpOwotICAgIH0KLX0pKCk7CkluZGV4OiBKU1Rlc3Rz
L3dhc20vanMtYXBpL2NhbGwtaW5kaXJlY3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNt
L2pzLWFwaS9jYWxsLWluZGlyZWN0LmpzCShyZXZpc2lvbiAyMDk3MDQpCisrKyBKU1Rlc3RzL3dh
c20vanMtYXBpL2NhbGwtaW5kaXJlY3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTYsMTAgKzYsMTIg
QEAgY29uc3Qgd2FzbU1vZHVsZVdoaWNoSW1wb3J0SlMgPSAoKSA9PiB7CiAgICAgICAgIC5UeXBl
KCkuRW5kKCkKICAgICAgICAgLkltcG9ydCgpCiAgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIs
ICJmdW5jIiwgeyBwYXJhbXM6IFsiaTMyIl0gfSkKKyAgICAgICAgICAgIC5UYWJsZSgiaW1wIiwg
InRhYmxlIiwgeyBpbml0aWFsOiAxLCBtYXhpbXVtOiAxLCBlbGVtZW50OiAiYW55ZnVuYyJ9KQog
ICAgICAgICAuRW5kKCkKICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKICAgICAgICAgLkV4cG9y
dCgpCiAgICAgICAgICAgICAuRnVuY3Rpb24oImNoYW5nZUNvdW50ZXIiKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjYWxsRnVuYyIpCiAgICAgICAgIC5FbmQoKQogICAgICAgICAuQ29kZSgpCiAg
ICAgICAgICAgICAuRnVuY3Rpb24oImNoYW5nZUNvdW50ZXIiLCB7IHBhcmFtczogWyJpMzIiLCAi
aTMyIl0gfSkKQEAgLTE3LDcgKzE5LDExIEBAIGNvbnN0IHdhc21Nb2R1bGVXaGljaEltcG9ydEpT
ID0gKCkgPT4gewogICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQogICAgICAgICAgICAgICAg
IC5JMzJBZGQoKQogICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgxKQotICAgICAgICAgICAgICAg
IC5DYWxsSW5kaXJlY3QoMCwgMCkgLy8gQ2FsbHMgZnVuYyhwYXJhbVswXSArIDQyKS4KKyAgICAg
ICAgICAgICAgICAuQ2FsbEluZGlyZWN0KDAsIDApIC8vIENhbGxzIHRhYmxlWzBdKHBhcmFtWzBd
ICsgNDIpLgorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGxG
dW5jIiwgeyBwYXJhbXM6IFsiaTMyIl0gfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkK
KyAgICAgICAgICAgICAgICAuQ2FsbCgwKSAvLyBDYWxscyBmdW5jKHBhcmFtWzBdICsgNDIpCiAg
ICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwogICAgIGNvbnN0IGJpbiA9IGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKQEAgLTI1LDEyICszMSwxNyBAQCBjb25zdCB3YXNtTW9k
dWxlV2hpY2hJbXBvcnRKUyA9ICgpID0+IHsKICAgICByZXR1cm4gbW9kdWxlOwogfTsKIAorY29u
c3QgbWFrZVRhYmxlID0gKCkgPT4geworICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuVGFibGUo
e2luaXRpYWw6IDEsIG1heGltdW06IDEsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pOworfTsKIAogKGZ1
bmN0aW9uIE1vbm9tb3JwaGljSW1wb3J0KCkgewogICAgIGxldCBjb3VudGVyID0gMDsKICAgICBj
b25zdCBjb3VudGVyU2V0dGVyID0gdiA9PiBjb3VudGVyID0gdjsKKyAgICBjb25zdCB0YWJsZSA9
IG1ha2VUYWJsZSgpOwogICAgIGNvbnN0IG1vZHVsZSA9IHdhc21Nb2R1bGVXaGljaEltcG9ydEpT
KCk7Ci0gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxl
LCB7IGltcDogeyBmdW5jOiBjb3VudGVyU2V0dGVyIH0gfSk7CisgICAgY29uc3QgaW5zdGFuY2Ug
PSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGltcDogeyBmdW5jOiBjb3VudGVy
U2V0dGVyLCB0YWJsZX0gfSk7CisgICAgdGFibGUuc2V0KDAsIGluc3RhbmNlLmV4cG9ydHMuY2Fs
bEZ1bmMpOwogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDA5NjsgKytpKSB7CiAgICAgICAgIC8v
IEludm9rZSB0aGlzIGEgYnVuY2ggb2YgdGltZXMgdG8gbWFrZSBzdXJlIHRoZSBJQyBpbiB0aGUg
d2FzbSAtPiBKUyBzdHViIHdvcmtzIGNvcnJlY3RseS4KICAgICAgICAgaW5zdGFuY2UuZXhwb3J0
cy5jaGFuZ2VDb3VudGVyKGksIDApOwpAQCAtNDQsOCArNTUsMTQgQEAgY29uc3Qgd2FzbU1vZHVs
ZVdoaWNoSW1wb3J0SlMgPSAoKSA9PiB7CiAgICAgY29uc3QgY291bnRlckFTZXR0ZXIgPSB2ID0+
IGNvdW50ZXJBID0gdjsKICAgICBjb25zdCBjb3VudGVyQlNldHRlciA9IHYgPT4gY291bnRlckIg
PSB7IHZhbHVlQjogdiB9OwogICAgIGNvbnN0IG1vZHVsZSA9IHdhc21Nb2R1bGVXaGljaEltcG9y
dEpTKCk7Ci0gICAgY29uc3QgaW5zdGFuY2VBID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1v
ZHVsZSwgeyBpbXA6IHsgZnVuYzogY291bnRlckFTZXR0ZXIgfSB9KTsKLSAgICBjb25zdCBpbnN0
YW5jZUIgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGltcDogeyBmdW5jOiBj
b3VudGVyQlNldHRlciB9IH0pOworCisgICAgY29uc3QgdGFibGVBID0gbWFrZVRhYmxlKCk7Cisg
ICAgY29uc3QgaW5zdGFuY2VBID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBp
bXA6IHsgZnVuYzogY291bnRlckFTZXR0ZXIsIHRhYmxlOiB0YWJsZUF9IH0pOworICAgIHRhYmxl
QS5zZXQoMCwgaW5zdGFuY2VBLmV4cG9ydHMuY2FsbEZ1bmMpOworCisgICAgY29uc3QgdGFibGVC
ID0gbWFrZVRhYmxlKCk7CisgICAgY29uc3QgaW5zdGFuY2VCID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsgZnVuYzogY291bnRlckJTZXR0ZXIsIHRhYmxlOiB0YWJs
ZUJ9IH0pOworICAgIHRhYmxlQi5zZXQoMCwgaW5zdGFuY2VCLmV4cG9ydHMuY2FsbEZ1bmMpOwog
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA0ODsgKytpKSB7CiAgICAgICAgIGluc3RhbmNlQS5l
eHBvcnRzLmNoYW5nZUNvdW50ZXIoaSwgMCk7CiAgICAgICAgIGFzc2VydC5pc0EoY291bnRlckEs
ICJudW1iZXIiKTsKQEAgLTU3LDggKzc0LDYgQEAgY29uc3Qgd2FzbU1vZHVsZVdoaWNoSW1wb3J0
SlMgPSAoKSA9PiB7CiB9KSgpOwogCiAoZnVuY3Rpb24gVmlydHVhbEltcG9ydCgpIHsKLSAgICBj
b25zdCBudW0gPSAxMDsgLy8gSXQncyBkZWZpbml0ZWx5IGdvaW5nIHZpcnR1YWwgYXQgMTAhCi0g
ICAgbGV0IGNvdW50ZXJzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdOwogICAgIGNv
bnN0IGNvdW50ZXJTZXR0ZXJzID0gWwogICAgICAgICB2ID0+IGNvdW50ZXJzWzBdID0gdiwKICAg
ICAgICAgdiA9PiBjb3VudGVyc1sxXSA9IHYgKyAxLApAQCAtNzEsMTIgKzg2LDE2IEBAIGNvbnN0
IHdhc21Nb2R1bGVXaGljaEltcG9ydEpTID0gKCkgPT4gewogICAgICAgICB2ID0+IGNvdW50ZXJz
WzhdID0gdiArIDgsCiAgICAgICAgIHYgPT4gY291bnRlcnNbOV0gPSB2ICsgOSwKICAgICBdOwor
ICAgIGNvbnN0IG51bSA9IGNvdW50ZXJTZXR0ZXJzLmxlbmd0aDsKKyAgICBsZXQgY291bnRlcnMg
PSBjb3VudGVyU2V0dGVycy5tYXAoKCkgPT4gMCk7CiAgICAgYXNzZXJ0LmVxKGNvdW50ZXJzLmxl
bmd0aCwgbnVtKTsKLSAgICBhc3NlcnQuZXEoY291bnRlclNldHRlcnMubGVuZ3RoLCBudW0pOwog
ICAgIGNvbnN0IG1vZHVsZSA9IHdhc21Nb2R1bGVXaGljaEltcG9ydEpTKCk7CiAgICAgbGV0IGlu
c3RhbmNlcyA9IFtdOwotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtOyArK2kpCi0gICAgICAg
IGluc3RhbmNlc1tpXSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgaW1wOiB7
IGZ1bmM6IGNvdW50ZXJTZXR0ZXJzW2ldIH0gfSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBu
dW07ICsraSkgeworICAgICAgICBsZXQgdGFibGUgPSBtYWtlVGFibGUoKTsKKyAgICAgICAgaW5z
dGFuY2VzW2ldID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsgZnVu
YzogY291bnRlclNldHRlcnNbaV0sIHRhYmxlfSB9KTsKKyAgICAgICAgdGFibGUuc2V0KDAsIGlu
c3RhbmNlc1tpXS5leHBvcnRzLmNhbGxGdW5jKTsKKyAgICB9CiAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAyMDQ4OyArK2kpIHsKICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW07ICsraikg
ewogICAgICAgICAgICAgaW5zdGFuY2VzW2pdLmV4cG9ydHMuY2hhbmdlQ291bnRlcihpLCAwKTsK
SW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0
cy93YXNtL2pzLWFwaS90YWJsZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vanMt
YXBpL3RhYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAzIEBACitpbXBvcnQgQnVp
bGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9h
c3NlcnQuanMnOworCitjb25zdCBiYWRUYWJsZVN0cmluZyA9ICJjb3VsZG4ndCBwYXJzZSBzZWN0
aW9uIFRhYmxlIjsKK2NvbnN0IGJhZEltcG9ydFN0cmluZyA9ICJjb3VsZG4ndCBwYXJzZSBzZWN0
aW9uIEltcG9ydCI7CitmdW5jdGlvbiBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgc3RyKSB7Cisg
ICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGxldCB0aHJl
dyA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmlu
KTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgdGhyZXcgPSB0cnVlOworICAgICAgICBhc3Nl
cnQudHJ1dGh5KGUudG9TdHJpbmcoKS5pbmRleE9mKHN0cikgIT09IC0xKTsKKyAgICB9CisgICAg
YXNzZXJ0LnRydXRoeSh0aHJldyk7Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1
aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAg
ICAgICAgLlRhYmxlKCJpbXAiLCAidGFibGUiLCB7aW5pdGlhbDogMjAsIGVsZW1lbnQ6ICJhbnlm
dW5jIn0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAuVGFibGUoKQorICAgICAgICAgICAgLlRhYmxlKHtpbml0aWFsOiAyMCwgbWF4aW11bTogMzAs
IGVsZW1lbnQ6ICJhbnlmdW5jIn0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgIC5FbmQoKTsKKyAgICBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgYmFkVGFibGVTdHJp
bmcpOworfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAg
LlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuVGFibGUo
KQorICAgICAgICAgICAgLlRhYmxlKHtpbml0aWFsOiAyMCwgbWF4aW11bTogMzAsIGVsZW1lbnQ6
ICJhbnlmdW5jIn0pCisgICAgICAgICAgICAuVGFibGUoe2luaXRpYWw6IDIwLCBtYXhpbXVtOiAz
MCwgZWxlbWVudDogImFueWZ1bmMifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgLkVuZCgpOworICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRUYWJsZVN0
cmluZyk7Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAg
ICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbImkzMiJd
fSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuQ2FsbElu
ZGlyZWN0KDAsIDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworICAgIGFz
c2VydEJhZEJpbmFyeShidWlsZGVyLCAiY2FsbF9pbmRpcmVjdCBpcyBvbmx5IHZhbGlkIHdoZW4g
YSB0YWJsZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkIik7Cit9CisKK3sKKyAgICBjb25zdCBidWls
ZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5UYWJsZSgpCisgICAgICAgICAgICAuVGFibGUoe2luaXRp
YWw6MjAsIGVsZW1lbnQ6ImFueWZ1bmMifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbImkzMiJd
fSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuQ2FsbElu
ZGlyZWN0KDAsIDEpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworICAgIGFz
c2VydEJhZEJpbmFyeShidWlsZGVyLCAiY2FsbF9pbmRpcmVjdCAncmVzZXJ2ZWQnIHZhcnVpbnQx
IG11c3QgYmUgMHgwIik7Cit9CisKK2Z1bmN0aW9uIGFzc2VydEJhZFRhYmxlKHRhYmxlRGVzY3Jp
cHRpb24pIHsKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5UYWJsZSgpCisg
ICAgICAgICAgICAuVGFibGUodGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgLkVuZCgpOworICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVy
LCBiYWRUYWJsZVN0cmluZyk7Cit9CisKK2Z1bmN0aW9uIGFzc2VydEJhZFRhYmxlSW1wb3J0KHRh
YmxlRGVzY3JpcHRpb24pIHsKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAg
ICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLlRhYmxl
KCJpbXAiLCAidGFibGUiLCB0YWJsZURlc2NyaXB0aW9uKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAuRW5kKCk7Cisg
ICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZEltcG9ydFN0cmluZyk7Cit9CisKK3sKKyAg
ICBsZXQgYmFkRGVzY3JpcHRpb25zID0gWworICAgICAgICB7aW5pdGlhbDogMTAsIGVsZW1lbnQ6
ICJpMzIifSwKKyAgICAgICAge2luaXRpYWw6IDEwLCBlbGVtZW50OiAiZjMyIn0sCisgICAgICAg
IHtpbml0aWFsOiAxMCwgZWxlbWVudDogImY2NCJ9LAorICAgICAgICB7aW5pdGlhbDogMTAsIGVs
ZW1lbnQ6ICJpNjQifSwKKyAgICAgICAge2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVu
dDogImkzMiJ9LAorICAgICAgICB7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAi
ZjMyIn0sCisgICAgICAgIHtpbml0aWFsOiAxMCwgbWF4aW11bTogMjAsIGVsZW1lbnQ6ICJmNjQi
fSwKKyAgICAgICAge2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImk2NCJ9LAor
CisgICAgICAgIHtpbml0aWFsOiAxMCwgbWF4aW11bTogOSwgZWxlbWVudDogImFueWZ1bmMifSwK
KyAgICAgICAge2luaXRpYWw6IDEsIG1heGltdW06IDAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCisg
ICAgICAgIHtpbml0aWFsOiAyKiozMiAtIDEsIG1heGltdW06IDIqKjMyIC0gMiwgZWxlbWVudDog
ImFueWZ1bmMifSwKKyAgICBdOworCisgICAgZm9yIChjb25zdCBkIG9mIGJhZERlc2NyaXB0aW9u
cykgeworICAgICAgICBhc3NlcnRCYWRUYWJsZShkKTsKKyAgICAgICAgYXNzZXJ0QmFkVGFibGVJ
bXBvcnQoZCk7CisgICAgfQorfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVy
KCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAg
IC5UYWJsZSgiaW1wIiwgInRhYmxlIiwge2luaXRpYWw6IDIwLCBlbGVtZW50OiAiYW55ZnVuYyJ9
KQorICAgICAgICAgICAgLlRhYmxlKCJpbXAiLCAidGFibGUiLCB7aW5pdGlhbDogMjAsIGVsZW1l
bnQ6ICJhbnlmdW5jIn0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgIC5FbmQoKTsKKyAgICBhc3NlcnRCYWRCaW5hcnko
YnVpbGRlciwgYmFkSW1wb3J0U3RyaW5nKTsKK30KKworCit7CisgICAgZnVuY3Rpb24gYXNzZXJ0
QmFkVGFibGVJbnN0YW5jZSh0YWJsZURlc2NyaXB0aW9uLCB0YWJsZSwgbWVzc2FnZSkgeworICAg
ICAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKS5F
bmQoKQorICAgICAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAgICAgLlRhYmxlKCJpbXAi
LCAidGFibGUiLCB0YWJsZURlc2NyaXB0aW9uKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkVuZCgpOworCisgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7
CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlLCB7aW1wOiB7dGFibGV9fSk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
IGFzc2VydC5lcShlLnRvU3RyaW5nKCksIG1lc3NhZ2UpOworICAgICAgICAgICAgdGhyZXcgPSB0
cnVlOworICAgICAgICB9CisgICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOworICAgIH0KKwor
ICAgIGNvbnN0IGJhZFRhYmxlcyA9IFsKKyAgICAgICAgW3tpbml0aWFsOiAxMDAsIG1heGltdW06
MTAwLCBlbGVtZW50OiJhbnlmdW5jIn0sIG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDox
MDAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pLCAiVHlwZUVycm9yOiBUYWJsZSBpbXBvcnQgZG9lcyBu
b3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMi
XSwKKyAgICAgICAgW3tpbml0aWFsOiAxMDAsIG1heGltdW06MTAwLCBlbGVtZW50OiJhbnlmdW5j
In0sIG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDoxMDAsIG1heGltdW06MTAxLCBlbGVt
ZW50OiAiYW55ZnVuYyJ9KSwgIlR5cGVFcnJvcjogVGFibGUgaW1wb3J0cyAnbWF4aW11bScgaXMg
bGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyJdLAorICAgICAgICBb
e2luaXRpYWw6IDEwMCwgZWxlbWVudDoiYW55ZnVuYyJ9LCBuZXcgV2ViQXNzZW1ibHkuVGFibGUo
e2luaXRpYWw6MTAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pLCAiVHlwZUVycm9yOiBUYWJsZSBpbXBv
cnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIl0sCisgICAgICAgIFt7
aW5pdGlhbDogMTAsIGVsZW1lbnQ6ImFueWZ1bmMifSwgbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtp
bml0aWFsOjksIGVsZW1lbnQ6ICJhbnlmdW5jIn0pLCAiVHlwZUVycm9yOiBUYWJsZSBpbXBvcnQg
cHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIl0sCisgICAgXTsKKyAgICBm
b3IgKGNvbnN0IFtkLCB0LCBtXSBvZiBiYWRUYWJsZXMpIHsKKyAgICAgICAgYXNzZXJ0QmFkVGFi
bGVJbnN0YW5jZShkLCB0LCBtKTsKKyAgICB9Cit9CisKK3sKKyAgICB7CisgICAgICAgIGNvbnN0
IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtlbGVtZW50OiAiYW55ZnVuYyIsIGluaXRp
YWw6IDIwLCBtYXhpbXVtOiAzMH0pOworICAgICAgICB0YWJsZS5ncm93KDMwKTsKKyAgICAgICAg
YXNzZXJ0LnRocm93cygoKSA9PiB0YWJsZS5ncm93KDMxKSwgVHlwZUVycm9yLCAiV2ViQXNzZW1i
bHkuVGFibGUucHJvdG90eXBlLmdyb3cgY291bGQgbm90IGdyb3cgdGhlIHRhYmxlIik7CisgICAg
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdGFibGUuZ3JvdygyOSksIFR5cGVFcnJvciwgIldlYkFz
c2VtYmx5LlRhYmxlLnByb3RvdHlwZS5ncm93IGNvdWxkIG5vdCBncm93IHRoZSB0YWJsZSIpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgY29uc3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFi
bGUoe2VsZW1lbnQ6ICJhbnlmdW5jIiwgaW5pdGlhbDogMjB9KTsKKyAgICAgICAgYXNzZXJ0LnRo
cm93cygoKSA9PiB0YWJsZS5ncm93KHt2YWx1ZU9mKCkgeyByZXR1cm4gMTk7IH19KSwgVHlwZUVy
cm9yLCAiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLmdyb3cgY291bGQgbm90IGdyb3cgdGhl
IHRhYmxlIik7CisgICAgICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICAgICAgdGFibGUuZ3Jv
dyh7dmFsdWVPZigpIHsgY2FsbGVkID0gdHJ1ZTsgcmV0dXJuIDIxOyB9fSk7CisgICAgICAgIGFz
c2VydC50cnV0aHkoY2FsbGVkKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGNvbnN0IHRhYmxl
ID0gbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtlbGVtZW50OiAiYW55ZnVuYyIsIGluaXRpYWw6IDIw
fSk7CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdGFibGUuZ2V0KDIwKSwgUmFuZ2VFcnJv
ciwgIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5nZXQgZXhwZWN0cyBhbiBpbnRlZ2VyIGxl
c3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgdGFibGUiKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAyMDsgaSsrKQorICAgICAgICAgICAgYXNzZXJ0LmVxKHRhYmxlLmdldChpKSwgbnVsbCk7
CisgICAgfQorCisgICAgeworICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBXZWJBc3NlbWJseS5U
YWJsZSh7ZWxlbWVudDogImFueWZ1bmMiLCBpbml0aWFsOiAyMH0pOworICAgICAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IHRhYmxlLnNldCgyMCwgbnVsbCksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJs
eS5UYWJsZS5wcm90b3R5cGUuc2V0IGV4cGVjdHMgYW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIHNp
emUgb2YgdGhlIHRhYmxlIik7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykK
KyAgICAgICAgICAgIHRhYmxlLnNldChpLCBudWxsKTsKKyAgICB9Cit9CkluZGV4OiBKU1Rlc3Rz
L3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2Fz
bS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMJKHJldmlzaW9uIDIwOTcwNCkKKysrIEpTVGVzdHMv
d2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4
LDkgQEAgZm9yIChjb25zdCBjIGluIGNvbnN0cnVjdG9yUHJvcGVydGllcykgewogICAgICAgICBu
ZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOiAyMH0pOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlICJUYWJsZSI6Ci0gICAgICAgIC8vIEZJWE1FIEltcGxlbWVudCBhbmQgdGVzdCB0aGVz
ZSBBUElzIGZ1cnRoZXIuIEZvciBub3cgdGhleSBqdXN0IHRocm93LiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Nzc1Ci0gICAgICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gbmV3IFdlYkFzc2VtYmx5W2NdKCksIEVycm9yLCBgV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQg
aW1wbGVtZW50IHRoZSAke2N9IGNvbnN0cnVjdG9yIHByb3BlcnR5YCk7CisgICAgICAgIG5ldyBX
ZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDogMjAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pOworICAg
ICAgICBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6IDIwLCBtYXhpbXVtOiAyMCwgZWxl
bWVudDogImFueWZ1bmMifSk7CisgICAgICAgIG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlh
bDogMjAsIG1heGltdW06IDI1LCBlbGVtZW50OiAiYW55ZnVuYyJ9KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSAiQ29tcGlsZUVycm9yIjoKICAgICBjYXNlICJSdW50aW1lRXJyb3IiOiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5MyBAQAor
MjAxNi0xMi0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBX
ZWJBc3NlbWJseTogaW1wbGVtZW50IHRoZSB0YWJsZSBzZWN0aW9uIGFuZCB0YWJsZSBpbXBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcxNgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaW1wbGVtZW50cyB0aGUgVGFibGUgc3BhY2UgZm9yIHdhc206CisgICAgICAgIGh0dHBzOi8v
Z2l0aHViLmNvbS9XZWJBc3NlbWJseS9kZXNpZ24vYmxvYi9tYXN0ZXIvQmluYXJ5RW5jb2Rpbmcu
bWQjdGFibGUtc2VjdGlvbgorCisgICAgICAgIEl0IG9ubHkgaW1wbGVtZW50cyBkZWZpbmluZyBh
bmQgaW1wb3J0aW5nIGEgdGFibGUuIFRoZSBidWxrCisgICAgICAgIG9mIHRoaXMgcGF0Y2ggaXMg
aW1wbGVtZW50aW5nIHRoZSB2YXJpb3VzIHdhc20gVGFibGUgcHJvdG90eXBlCisgICAgICAgIG1l
dGhvZHMgYW5kIHRoZSB1bmRlcmx5aW5nIFRhYmxlIG9iamVjdDoKKyAgICAgICAgaHR0cHM6Ly9n
aXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9ibG9iL21hc3Rlci9KUy5tZCN3ZWJhc3NlbWJs
eXRhYmxlLWNvbnN0cnVjdG9yCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgYnVn
IGluIG91ciBpbXBsZW1lbnRhdGlvbiB3aXRoIGNhbGxfaW5kaXJlY3QuCisgICAgICAgIFdlIGlu
aXRpYWxseSBpbXBsZW1lbnRlZCBjYWxsX2luZGlyZWN0IGFzIGEgd2F5IHRvIGNhbGwgZnVuY3Rp
b25zIHRoYXQKKyAgICAgICAgYXJlIGltcG9ydGVkIG9yIGRlZmluZWQgaW4gdGhlIG1vZHVsZS4g
VGhpcyB3YXMgdGhlIHdyb25nCisgICAgICAgIGludGVycHJldGF0aW9uIG9mIHRoZSBzcGVjLiBJ
bnN0ZWFkLCBjYWxsX2luZGlyZWN0IGNhbiBvbmx5IGluZGV4IGludG8KKyAgICAgICAgdGhlIHRh
YmxlIGluZGV4IHNwYWNlLgorCisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1h
dC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZUluZm9ybWF0aW9uOjpUYWJsZUluZm9ybWF0
aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGVJbmZvcm1hdGlvbjo6b3BlcmF0b3IgYm9v
bCk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlSW5mb3JtYXRpb246OmlzSW1wb3J0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VGFibGVJbmZvcm1hdGlvbjo6aW5pdGlhbCk6CisgICAgICAgIChK
U0M6Oldhc206OlRhYmxlSW5mb3JtYXRpb246Om1heGltdW0pOgorICAgICAgICAoSlNDOjpXYXNt
OjpDYWxsYWJsZUZ1bmN0aW9uOjpDYWxsYWJsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Q2FsbGFibGVGdW5jdGlvbjo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlRXhwcmVzc2lvbik6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1pdHMpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6CisgICAgICAgICogd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3Bw
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnNldFRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZlRhYmxlKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
VGFibGU6OmNsZWFyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6
OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Om1heGltdW0pOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5VGFibGU6OnNpemUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
VGFibGU6OmdldEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpv
ZmZzZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9m
RnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpjYWxsKToKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlG
dW5jdGlvbjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rp
b246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uaDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6c2lnbmF0dXJlKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6d2FzbUVudHJ5cG9pbnQpOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp3ZWJBc3NlbWJseUNhbGxlZSk6IERlbGV0ZWQu
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorICAgICAgICAq
IHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6
OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6bGluayk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUpOgorICAg
ICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OmdldFRhYmxlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0xl
bmd0aCk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHcm93KToKKyAg
ICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dldCk6CisgICAgICAgIChKU0M6
OndlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eVRhYmxlUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJs
eVRhYmxlUHJvdG90eXBlLmg6CisKIDIwMTYtMTItMTEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gVHJ5IHRvIGZpeCB0aGUgbGludXggYnVp
bGQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhw
cmVzc2lvbiA9IG51bGxwdHI7CiAKLSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1lbW9yeUluZm9y
bWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmKTsK
KyAgICBCM0lSR2VuZXJhdG9yKFZNJiwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBQcm9jZWR1
cmUmLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYsIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYpOwogCiAgICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYpOwogICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTE4OCw2
ICsxODgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3Qg
RXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBSZXN1bHRMaXN0JiBzdGFjayk7CiAgICAgVmFs
dWUqIHplcm9Gb3JUeXBlKFR5cGUpOwogCisgICAgVk0mIG1fdm07CiAgICAgY29uc3QgSW1tdXRh
YmxlRnVuY3Rpb25JbmRleFNwYWNlJiBtX2Z1bmN0aW9uSW5kZXhTcGFjZTsKICAgICBQcm9jZWR1
cmUmIG1fcHJvYzsKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKQEAgLTE5OSw4ICsy
MDAsOSBAQCBwcml2YXRlOgogICAgIFZhbHVlKiBtX2Z1bmN0aW9uSW5kZXhTcGFjZVZhbHVlOwog
fTsKIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNZW1vcnlJbmZvcm1hdGlv
biYgbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgV2FzbUludGVybmFsRnVuY3Rpb24qIGNv
bXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmIGZ1bmN0aW9uSW5k
ZXhTcGFjZSkKLSAgICA6IG1fZnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkK
K0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBjb25zdCBNZW1vcnlJbmZvcm1h
dGlvbiYgbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgV2FzbUludGVybmFsRnVuY3Rpb24q
IGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmIGZ1bmN0aW9u
SW5kZXhTcGFjZSkKKyAgICA6IG1fdm0odm0pCisgICAgLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4U3BhY2UpCiAgICAgLCBtX3Byb2MocHJvY2VkdXJlKQogICAgICwgbV91bmxp
bmtlZFdhc21Ub1dhc21DYWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKIHsKQEAgLTY2OSwy
NyArNjcxLDUyIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnMKICAg
ICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJbmRleCA9IGFyZ3MudGFrZUxhc3QoKTsKICAgICBBU1NF
UlQoc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpID09IGFyZ3Muc2l6ZSgpKTsKIAorICAgICAK
KyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOworICAgIEV4cHJlc3Np
b25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplOworICAgIHsKKyAgICAgICAgRXhwcmVz
c2lvblR5cGUgdG9wSW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLAorICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCks
ICZtX3ZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOworICAgICAgICBFeHByZXNzaW9uVHlw
ZSB0YWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksCisgICAgICAgICAgICB0b3BJbnN0YW5jZSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCkpOworICAgICAgICBjYWxsYWJs
ZUZ1bmN0aW9uQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHRhYmxl
LCBKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpOworICAgICAgICBjYWxs
YWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUs
IEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpOworICAgIH0KKwogICAgIC8vIENo
ZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCiAgICAgewotICAgICAg
ICBFeHByZXNzaW9uVHlwZSBtYXhWYWxpZEluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZElu
dENvbnN0YW50KG1fcHJvYywgT3JpZ2luKCksIEludDMyLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5z
aXplKTsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLAotICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIG1f
emVyb1ZhbHVlc1tsaW5lYXJpemVUeXBlKEkzMildLAotICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLCBjYWxs
ZWVJbmRleCwgbWF4VmFsaWRJbmRleCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWJvdmVFcXVhbCwgT3JpZ2luKCksIGNhbGxlZUluZGV4
LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZSkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5l
cmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewogICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKICAgICAgICAgfSk7CiAg
ICAgfQogCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0IGluIHRoZSBmdW5jdGlvbiBpbmRleCBz
cGFjZSB3ZSBhcmUgbG9va2luZyBmb3IuCisgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0IGluIHRo
ZSB0YWJsZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3IuCiAgICAgRXhwcmVzc2lvblR5
cGUgb2Zmc2V0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBNdWws
IE9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIFpFeHQzMiwgT3JpZ2luKCksIGNhbGxlZUluZGV4KSwKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXJUeXBlKCksIHNp
emVvZihDYWxsYWJsZUZ1bmN0aW9uKSkpOwotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVu
Y3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgT3Jp
Z2luKCksIG1fZnVuY3Rpb25JbmRleFNwYWNlVmFsdWUsIG9mZnNldCk7CisgICAgRXhwcmVzc2lv
blR5cGUgY2FsbGFibGVGdW5jdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQWRkLCBPcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgb2Zmc2V0KTsK
KworICAgIC8vIENoZWNrIHRoYXQgdGhlIENhbGxhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQu
IFdlIHRyYXAgaWYgaXQgaXNuJ3QuIEEgbnVsbCBTaWduYXR1cmUqIGluZGljYXRlcyBpdCdzIG5v
dCBpbml0aWFsaXplZC4KKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmUgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIE9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFi
bGVGdW5jdGlvbiwgc2lnbmF0dXJlKSk7CisgICAgeworICAgICAgICAvLyBJZiB0aGUgU2lnbmF0
dXJlKiBpcyBudWxscHRyLCB3ZSB0cmFwLgorICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2lu
KCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEVxdWFsLCBPcmlnaW4oKSwgCisgICAgICAgICAgICAgICAgY2FsbGVlU2lnbmF0dXJlLCAKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1f
cHJvYywgT3JpZ2luKCksIDApKSk7CisKKyAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CisgICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICB9KTsKKyAgICB9CiAKICAg
ICAvLyBDaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgdGhlIHZhbHVlIHdlIGV4cGVjdC4KICAg
ICB7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNpZ25hdHVyZSA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwg
T3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIE9CSkVDVF9PRkZTRVRPRihDYWxsYWJsZUZ1bmN0
aW9uLCBzaWduYXR1cmUpKTsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWRTaWduYXR1
cmUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgT3Jp
Z2luKCksIHNpZ25hdHVyZSk7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwKICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1
YWwsIE9yaWdpbigpLCBjYWxsZWVTaWduYXR1cmUsIGV4cGVjdGVkU2lnbmF0dXJlKSk7CkBAIC03
MTMsNiArNzQwLDcgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwog
ICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDog
MV0uZ3ByKCkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOworCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTg0Niw3ICs4NzQsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFs
RnVuY3Rpb24+IHBhCiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc21JbnRl
cm5hbEZ1bmN0aW9uPigpOwogCiAgICAgUHJvY2VkdXJlIHByb2NlZHVyZTsKLSAgICBCM0lSR2Vu
ZXJhdG9yIGNvbnRleHQoaW5mby5tZW1vcnksIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICBCM0lSR2VuZXJh
dG9yIGNvbnRleHQodm0sIGluZm8ubWVtb3J5LCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgRnVuY3Rpb25Q
YXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0
aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGZ1bmN0aW9uSW5kZXhTcGFjZSwgaW5mbyk7CiAgICAgaWYg
KCFwYXJzZXIucGFyc2UoKSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHJldmlzaW9uIDIw
OTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHN0cnVjdCBFeHBvcnQgewogICAgIEV4dGVybmFs
OjpLaW5kIGtpbmQ7CiAgICAgdW5pb24gewogICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4
OwotICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQorICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgVGFi
bGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTc4MgogICAgICAg
ICAvLyBGSVhNRSBpbXBsZW1lbnQgTWVtb3J5IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjU2NzEKICAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IEdsb2JhbCBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTMzCiAgICAgfTsKQEAgLTE0
NywxNyArMTQ3LDQ1IEBAIHN0cnVjdCBTZWdtZW50IHsKICAgICB9CiB9OwogCitjbGFzcyBUYWJs
ZUluZm9ybWF0aW9uIHsKK3B1YmxpYzoKKyAgICBUYWJsZUluZm9ybWF0aW9uKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghKnRoaXMpOworICAgIH0KKworICAgIFRhYmxlSW5mb3JtYXRpb24odWlu
dDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSwgYm9vbCBpc0lt
cG9ydCkKKyAgICAgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKKyAgICAgICAgLCBtX21heGltdW0o
bWF4aW11bSkKKyAgICAgICAgLCBtX2lzSW1wb3J0KGlzSW1wb3J0KQorICAgICAgICAsIG1faXNW
YWxpZCh0cnVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICB9CisKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CisgICAg
Ym9vbCBpc0ltcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbXBvcnQ7IH0KKyAgICB1aW50MzJf
dCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CisgICAgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQorCitwcml2
YXRlOgorICAgIHVpbnQzMl90IG1faW5pdGlhbDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90
PiBtX21heGltdW07CisgICAgYm9vbCBtX2lzSW1wb3J0IHsgZmFsc2UgfTsKKyAgICBib29sIG1f
aXNWYWxpZCB7IGZhbHNlIH07Cit9OworCiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gewogICAg
IFZlY3RvcjxTaWduYXR1cmU+IHNpZ25hdHVyZXM7CiAgICAgVmVjdG9yPEltcG9ydD4gaW1wb3J0
czsKICAgICBWZWN0b3I8U2lnbmF0dXJlKj4gaW1wb3J0RnVuY3Rpb25zOwotICAgIC8vIEZJWE1F
IGltcGxlbWVudCBpbXBvcnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDEzNQogICAgIC8vIEZJWE1FIGltcGxlbWVudCBpbXBvcnQgR2xvYmFsIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzMKICAgICBWZWN0b3I8U2ln
bmF0dXJlKj4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZXM7CiAgICAgTWVtb3J5SW5mb3JtYXRp
b24gbWVtb3J5OwogICAgIFZlY3RvcjxFeHBvcnQ+IGV4cG9ydHM7CiAgICAgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gc3RhcnRGdW5jdGlvbkluZGV4U3BhY2U7CiAgICAgVmVjdG9yPFNlZ21lbnQ6
OlB0cj4gZGF0YTsKKyAgICBUYWJsZUluZm9ybWF0aW9uIHRhYmxlSW5mb3JtYXRpb247CiAKICAg
ICB+TW9kdWxlSW5mb3JtYXRpb24oKTsKIH07CkBAIC0xODUsMTMgKzIxMywyMCBAQCB0eXBlZGVm
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBXYXNtVG9KU1N0CiAvLyBXZWJBc3NlbWJseSBkaXJlY3Qg
Y2FsbHMgYW5kIGNhbGxfaW5kaXJlY3QgdXNlIGluZGljZXMgaW50byAiZnVuY3Rpb24gaW5kZXgg
c3BhY2UiLiBUaGlzIHNwYWNlIHN0YXJ0cyB3aXRoIGFsbCBpbXBvcnRzLCBhbmQgdGhlbiBhbGwg
aW50ZXJuYWwgZnVuY3Rpb25zLgogLy8gQ2FsbGFibGVGdW5jdGlvbiBhbmQgRnVuY3Rpb25JbmRl
eFNwYWNlIGFyZSBvbmx5IG1lYW50IGFzIGZhc3QgbG9va3VwIHRhYmxlcyBmb3IgdGhlc2Ugb3Bj
b2RlcywgYW5kIGRvIG5vdCBvd24gY29kZS4KIHN0cnVjdCBDYWxsYWJsZUZ1bmN0aW9uIHsKLSAg
ICBDYWxsYWJsZUZ1bmN0aW9uKFNpZ25hdHVyZSogc2lnbmF0dXJlKQorICAgIENhbGxhYmxlRnVu
Y3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICBDYWxsYWJsZUZ1bmN0aW9uKFNpZ25hdHVyZSogc2ln
bmF0dXJlLCB2b2lkKiBjb2RlID0gbnVsbHB0cikKICAgICAgICAgOiBzaWduYXR1cmUoc2lnbmF0
dXJlKQotICAgICAgICAsIGNvZGUobnVsbHB0cikKKyAgICAgICAgLCBjb2RlKGNvZGUpCiAgICAg
ewogICAgIH0KLSAgICBTaWduYXR1cmUqIHNpZ25hdHVyZTsgLy8gRklYTUUgcGFjayB0aGlzIGlu
c2lkZSBhICh1bmlxdWVkKSBpbnRlZ2VyIChmb3IgY29ycmVjdG5lc3MgdGhlIHBhcnNlciBzaG91
bGQgdW5pcXVlIFNpZ25hdHVyZXMpLCBhbmQgdGhlbiBwYWNrIHRoYXQgaW50ZWdlciBpbnRvIHRo
ZSBjb2RlIHBvaW50ZXIuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjU1MTEKLSAgICB2b2lkKiBjb2RlOworCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICFjb2RlICYmICFzaWduYXR1cmU7IH0KKworICAgIC8vIEZJWE1FIHBhY2sg
dGhpcyBpbnNpZGUgYSAodW5pcXVlZCkgaW50ZWdlciAoZm9yIGNvcnJlY3RuZXNzIHRoZSBwYXJz
ZXIgc2hvdWxkIHVuaXF1ZSBTaWduYXR1cmVzKSwKKyAgICAvLyBhbmQgdGhlbiBwYWNrIHRoYXQg
aW50ZWdlciBpbnRvIHRoZSBjb2RlIHBvaW50ZXIuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjU1MTEKKyAgICBTaWduYXR1cmUqIHNpZ25hdHVyZSB7IG51bGxwdHIg
fTsgCisgICAgdm9pZCogY29kZSB7IG51bGxwdHIgfTsKIH07CiB0eXBlZGVmIFZlY3RvcjxDYWxs
YWJsZUZ1bmN0aW9uPiBGdW5jdGlvbkluZGV4U3BhY2U7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCShyZXZpc2lvbiAyMDk3MDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgyLDYgKzM4Miw4IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmUKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6Q2FsbEluZGlyZWN0OiB7
CisgICAgICAgIGlmICghbV9pbmZvLnRhYmxlSW5mb3JtYXRpb24pCisgICAgICAgICAgICByZXR1
cm4gc2V0RXJyb3JNZXNzYWdlKCJjYWxsX2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hlbiBhIHRh
YmxlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQiKTsKICAgICAgICAgdWludDMyX3Qgc2lnbmF0dXJl
SW5kZXg7CiAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2lnbmF0dXJlSW5kZXgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzkwLDYgKzM5Miw5IEBAIGJvb2wgRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmUKICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHJl
c2VydmVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpZiAocmVzZXJ2
ZWQgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiBzZXRFcnJvck1lc3NhZ2UoImNhbGxfaW5kaXJl
Y3QgJ3Jlc2VydmVkJyB2YXJ1aW50MSBtdXN0IGJlIDB4MCIpOworCiAgICAgICAgIGlmIChtX2lu
Zm8uc2lnbmF0dXJlcy5zaXplKCkgPD0gc2lnbmF0dXJlSW5kZXgpCiAgICAgICAgICAgICByZXR1
cm4gc2V0RXJyb3JNZXNzYWdlKCJUcmllZCB0byB1c2UgYSBzaWduYXR1cmUgb3V0c2lkZSB0aGUg
cmFuZ2Ugb2YgdmFsaWQgc2lnbmF0dXJlcyIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA5NzA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1MCw3ICsyNTAsOSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQo
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6
VGFibGU6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOwor
ICAgICAgICAgICAgaWYgKCFwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6IHsKQEAgLTMwMCw0NSArMzAyLDk5IEBAIGJvb2wgTW9k
dWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBN
b2R1bGVQYXJzZXI6OnBhcnNlVGFibGUoKQorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXph
YmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4
aW11bSkKIHsKLSAgICAvLyBGSVhNRSBpbXBsZW1lbnQgdGFibGUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgQVNTRVJUKCFtYXhpbXVtKTsKKworICAgIHVpbnQ4X3QgZmxhZ3M7CisgICAg
aWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGZsYWdzKSB7CisgICAgICAgIHVpbnQzMl90IG1heGltdW1JbnQ7CisgICAgICAgIGlm
ICghcGFyc2VWYXJVSW50MzIobWF4aW11bUludCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgaWYgKGluaXRpYWwgPiBtYXhpbXVtSW50KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIG1heGltdW0gPSBtYXhpbXVtSW50OworICAgIH0KKwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9v
bCBpc0ltcG9ydCkKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJ
bXBvcnQpCiB7Ci0gICAgLy8gV2UgZG9uJ3QgYWxsb3cgcmVkZWNsYXJpbmcgbWVtb3J5LiBFaXRo
ZXIgdmlhIGltcG9ydCBvciBkZWZpbml0aW9uLgotICAgIGlmIChtX21vZHVsZS0+bWVtb3J5KQor
ICAgIC8vIFdlJ3JlIG9ubHkgYWxsb3dlZCBhIHRvdGFsIG9mIG9uZSBUYWJsZSBpbXBvcnQgb3Ig
ZGVmaW5pdGlvbi4KKyAgICBpZiAobV9oYXNUYWJsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgdWludDhfdCBmbGFnczsKLSAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxhZ3MpKQorICAg
IG1faGFzVGFibGUgPSB0cnVlOworCisgICAgaW50OF90IHR5cGU7CisgICAgaWYgKCFwYXJzZUlu
dDcodHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGlu
dDhfdCBhbnlmdW5jVHlwZSA9IC0xNjsKKyAgICBpZiAodHlwZSAhPSBhbnlmdW5jVHlwZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdWludDMyX3QgaW5pdGlhbDsKLSAgICBpZiAoIXBh
cnNlVmFyVUludDMyKGluaXRpYWwpKQorICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGlt
dW07CisgICAgaWYgKCFwYXJzZVJlc2l6YWJsZUxpbWl0cyhpbml0aWFsLCBtYXhpbXVtKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQoaW5pdGlh
bCkpCisgICAgQVNTRVJUKCFtYXhpbXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOworCisgICAg
bV9tb2R1bGUtPnRhYmxlSW5mb3JtYXRpb24gPSBUYWJsZUluZm9ybWF0aW9uKGluaXRpYWwsIG1h
eGltdW0sIGlzSW1wb3J0KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZHVsZVBh
cnNlcjo6cGFyc2VUYWJsZSgpCit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAgaWYgKCFwYXJz
ZVZhclVJbnQzMihjb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIG9u
bHkgYWxsb3cgb25lIHRhYmxlIGZvciBub3cuCisgICAgaWYgKGNvdW50ICE9IDEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFBhZ2VDb3VudCBpbml0aWFsUGFnZUNvdW50KGluaXRpYWwp
OworICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKKyAgICByZXR1cm4gcGFyc2VUYWJsZUhlbHBl
cihpc0ltcG9ydCk7Cit9CisKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihi
b29sIGlzSW1wb3J0KQoreworICAgIC8vIFdlIGRvbid0IGFsbG93IHJlZGVjbGFyaW5nIG1lbW9y
eS4gRWl0aGVyIHZpYSBpbXBvcnQgb3IgZGVmaW5pdGlvbi4KKyAgICBpZiAobV9tb2R1bGUtPm1l
bW9yeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgUGFnZUNvdW50IGluaXRpYWxQYWdl
Q291bnQ7CiAgICAgUGFnZUNvdW50IG1heGltdW1QYWdlQ291bnQ7Ci0gICAgaWYgKGZsYWdzKSB7
Ci0gICAgICAgIHVpbnQzMl90IG1heGltdW07Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIo
bWF4aW11bSkpCisgICAgeworICAgICAgICB1aW50MzJfdCBpbml0aWFsOworICAgICAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgICAgICBpZiAoIXBhcnNlUmVzaXphYmxl
TGltaXRzKGluaXRpYWwsIG1heGltdW0pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGlmICghUGFnZUNvdW50Ojppc1ZhbGlkKG1heGltdW0pKQorICAgICAgICBBU1NFUlQo
IW1heGltdW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7CisgICAgICAgIGlmICghUGFnZUNvdW50
Ojppc1ZhbGlkKGluaXRpYWwpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
IG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQobWF4aW11bSk7Ci0gICAgICAgIGlmIChpbml0
aWFsUGFnZUNvdW50ID4gbWF4aW11bVBhZ2VDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaW5pdGlhbFBhZ2VDb3VudCA9IFBhZ2VDb3VudChpbml0aWFsKTsKKworICAg
ICAgICBpZiAobWF4aW11bSkgeworICAgICAgICAgICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQo
Km1heGltdW0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1h
eGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0pOworICAgICAgICB9CiAgICAgfQor
ICAgIEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKKyAgICBBU1NFUlQoIW1heGltdW1QYWdlQ291
bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNvdW50KTsKIAogICAgIFZlY3Rv
cjx1bnNpZ25lZD4gcGlubmVkU2l6ZXMgPSB7IDAgfTsKICAgICBtX21vZHVsZS0+bWVtb3J5ID0g
TWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgcGlu
bmVkU2l6ZXMsIGlzSW1wb3J0KTsKQEAgLTM5Nyw3ICs0NTMsNyBAQCBib29sIE1vZHVsZVBhcnNl
cjo6cGFyc2VFeHBvcnQoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBFeHRlcm5hbDo6VGFibGU6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgICAgIC8vIEZJWE1F
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3ODIKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRXh0ZXJuYWw6Ok1lbW9yeTogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAko
cmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMiArNzksMTUgQEAgcHJpdmF0ZToKICN1
bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKIAogICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpOworICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIHBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CisgICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWws
IHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKTsKIAogICAgIFZNKiBtX3ZtOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGU7CiAgICAgRnVuY3Rp
b25JbmRleFNwYWNlIG1fZnVuY3Rpb25JbmRleFNwYWNlOwogICAgIFZlY3RvcjxGdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnk+IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OwogICAgIGJvb2wgbV9m
YWlsZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX2hhc1RhYmxlIHsgZmFsc2UgfTsKICAgICBTdHJp
bmcgbV9lcnJvck1lc3NhZ2U7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDIw
OTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgdm9pZCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZQogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX21vZHVsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9kdWxlTmFt
ZXNwYWNlT2JqZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tZW1vcnkp
OworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhYmxlKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkK
ICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb24oaSkpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTcxLDExICs3
MiwxNiBAQCBwdWJsaWM6CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KCkgeyByZXR1
cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNz
ZW1ibHlNZW1vcnkqIG1lbW9yeSkgeyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7IH0K
IAorICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgp
OyB9CisgICAgdm9pZCBzZXRUYWJsZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUp
IHsgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsgfQorCiAgICAgc3RhdGljIHNpemVfdCBv
ZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkKICAgICB7CiAgICAgICAgIHJldHVy
biBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+
KSAqIGlkeDsKICAgICB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3RhYmxlKTsg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJl
KiwgdW5zaWduZWQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5
TW9kdWxlKiwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqKTsKQEAgLTk2LDYgKzEwMiw3IEBAIHBy
aXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOwog
ICAgIFdyaXRlQmFycmllcjxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q7CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNZW1vcnk+IG1fbWVtb3J5
OworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5VGFibGU+IG1fdGFibGU7CiAgICAgdW5z
aWduZWQgbV9udW1JbXBvcnRGdW5jdGlvbnM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHJldmlzaW9u
IDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlU
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtRm9y
bWF0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU1dlYkFzc2VtYmx5VGFibGUqIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitjb25zdCBD
bGFzc0luZm8gSlNXZWJBc3NlbWJseVRhYmxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWJs
ZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseVRh
YmxlKSB9OworCitKU1dlYkFzc2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCiB7Ci0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFibGU+KHZtLmhlYXApKSBKU1dlYkFz
c2VtYmx5VGFibGUodm0sIHN0cnVjdHVyZSk7CisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFibGU+KHZtLmhlYXApKSBKU1dlYkFz
c2VtYmx5VGFibGUodm0sIHN0cnVjdHVyZSwgaW5pdGlhbCwgbWF4aW11bSk7CiAgICAgaW5zdGFu
Y2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC00NCw5
ICs0NywyMiBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlU3RyCiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFz
c2VtYmx5VGFibGU6OkpTV2ViQXNzZW1ibHlUYWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorSlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJf
dD4gbWF4aW11bSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKIHsKKyAgICBtX3NpemUgPSBp
bml0aWFsOworICAgIG1fbWF4aW11bSA9IG1heGltdW07CisgICAgQVNTRVJUKCFtX21heGltdW0g
fHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOworCisgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHdv
cnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3BlYyByZWNvbW1l
bmRzIGRvaW5nIHNvLgorICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9pbmcgdGhhdC4K
KyAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPjo6bWFs
bG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIG1fc2l6ZSk7CisgICAgbV9qc0Z1
bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4+Ojpt
YWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPikgKiBtX3NpemUp
OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkgeworICAgICAgICBu
ZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOworICAg
ICAgICBBU1NFUlQoIW1fZnVuY3Rpb25zLmdldCgpW2ldLnNpZ25hdHVyZSk7IC8vIFdlIHJlbHkg
b24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdl
dCgpW2ldKSBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4oKTsKKyAgICB9CiB9CiAK
IHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC02Miwx
MyArNzgsNTAgQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmRlc3Ryb3koSlNDZWxsKgogCiB2
b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJB
c3NlbWJseVRhYmxlKj4oY2VsbCk7CisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGhpc09iamVjdC0+bV9zaXplOyArK2kpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2pzRnVuY3Rpb25zLmdldCgpW2ldKTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFibGUiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlUYWJsZSkgfTsKK2Jvb2wg
SlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IG5ld1NpemUpCit7CisgICAgaWYgKG5l
d1NpemUgPCBtX3NpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobmV3U2l6ZSA9
PSBtX3NpemUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3
U2l6ZSA+ICptYXhpbXVtKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1F
OiB3ZSBzaG91bGQgcHJvdGVjdCBvdXJzZWx2ZXMgZnJvbSBjcmF6eSBzaXplcyBoZXJlLgorICAg
IG1fZnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogbmV3
U2l6ZSk7CisgICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8V2Vi
QXNzZW1ibHlGdW5jdGlvbj4pICogbmV3U2l6ZSk7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSBt
X3NpemU7IGkgPCBuZXdTaXplOyArK2kpIHsKKyAgICAgICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0
KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICAgICAgbmV3ICgmbV9qc0Z1bmN0
aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+KCk7CisgICAg
fQorICAgIG1fc2l6ZSA9IG5ld1NpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNX
ZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQoreworICAgIFJF
TEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2lu
ZGV4XSA9IFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPigpOworICAgIG1fZnVuY3Rp
b25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICBBU1NFUlQo
IW1fZnVuY3Rpb25zLmdldCgpW2luZGV4XS5zaWduYXR1cmUpOyAvLyBXZSByZWx5IG9uIHRoaXMg
aW4gY29tcGlsZWQgY29kZS4KK30KKwordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0
aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9u
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX2pzRnVuY3Rp
b25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKKyAgICBtX2Z1bmN0aW9u
cy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKGZ1bmN0aW9uLT5zaWduYXR1
cmUoKSwgZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KCkpOworfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseVRhYmxlLmgJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyMyAr
MjksNDggQEAKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCisjaW5jbHVkZSA8
d3RmL01hbGxvY1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdhc20gewor
c3RydWN0IENhbGxhYmxlRnVuY3Rpb247Cit9CisKIGNsYXNzIEpTV2ViQXNzZW1ibHlUYWJsZSA6
IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rl
c3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWJsZSog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWJsZSog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4gbWF4aW11bSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAot
cHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSopOworICAg
IHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGlt
dW07IH0KKyAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
Ym9vbCBncm93KHVpbnQzMl90IG5ld1NpemUpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKiBnZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKKyAgICB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIG1fanNG
dW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgpOworICAgIH0KKyAgICB2b2lkIGNsZWFyRnVuY3Rp
b24odWludDMyX3QgaW5kZXgpOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBp
bmRleCwgV2ViQXNzZW1ibHlGdW5jdGlvbiopOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxlLCBt
X3NpemUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZ1bmN0aW9ucygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fZnVuY3Rpb25zKTsgfQor
Citwcml2YXRlOgorICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIHVpbnQz
Ml90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwog
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKwor
ICAgIE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICBN
YWxsb2NQdHI8V3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+PiBtX2pzRnVuY3Rpb25z
OworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1fbWF4aW11bTsKKyAgICB1aW50MzJfdCBt
X3NpemU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lv
biAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIEVuY29kZWRKU1Zh
bHVlIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNhbGwKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IHByZXZKU1dlYkFzc2VtYmx5SW5zdGFuY2UgPSB2bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2U7
CiAgICAgdm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlID0gaW5zdGFuY2UoKTsKICAgICBBU1NF
UlQoaW5zdGFuY2UoKSk7Ci0gICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1FbnRyeVRv
V2FzbSh3ZWJBc3NlbWJseUNhbGxlZSgpLT5lbnRyeXBvaW50KCksICZ2bSwgcHJvdG9DYWxsRnJh
bWUpOworICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20obV9qc0Vu
dHJ5cG9pbnQtPmVudHJ5cG9pbnQoKSwgJnZtLCBwcm90b0NhbGxGcmFtZSk7CiAgICAgdm0udG9w
SlNXZWJBc3NlbWJseUluc3RhbmNlID0gcHJldkpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKIAogICAg
IC8vIEZJWE1FIGlzIHRoaXMgY29ycmVjdD8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NDg3NgpAQCAtMTQwLDEyICsxNDAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6Y2FsbAogICAgIHJldHVybiBFbmNvZGVkSlNWYWx1ZSgpOwogfQog
Ci1XZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJs
eUNhbGxlZSogY2FsbGVlLCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKK1dlYkFzc2VtYmx5
RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0Vu
dHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWdu
YXR1cmUqIHNpZ25hdHVyZSkKIHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
dm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCBOb0ludHJpbnNpYywg
Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0
dXJlKCk7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlG
dW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgIGZ1bmN0aW9uLT5maW5p
c2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSwgY2FsbGVl
LCBzaWduYXR1cmUpOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJs
ZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSwganNFbnRyeXBvaW50LCB3YXNtRW50cnlwb2ludCwg
c2lnbmF0dXJlKTsKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CiAKQEAgLTE2NiwxNSArMTY2LDE4
IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9pbnN0YW5jZSk7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fd2Fz
bUNhbGxlZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fanNFbnRyeXBvaW50
KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV93YXNtRW50cnlwb2ludCk7CiB9
CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRp
dmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUNhbGxl
ZSogd2FzbUNhbGxlZSwgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCit2b2lkIFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwg
SlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZSogc2ln
bmF0dXJlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5n
dGgsIG5hbWUpOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBtX2luc3RhbmNl
LnNldCh2bSwgdGhpcywgaW5zdGFuY2UpOwotICAgIG1fd2FzbUNhbGxlZS5zZXQodm0sIHRoaXMs
IHdhc21DYWxsZWUpOworICAgIEFTU0VSVChqc0VudHJ5cG9pbnQgIT0gd2FzbUVudHJ5cG9pbnQp
OworICAgIG1fanNFbnRyeXBvaW50LnNldCh2bSwgdGhpcywganNFbnRyeXBvaW50KTsKKyAgICBt
X3dhc21FbnRyeXBvaW50LnNldCh2bSwgdGhpcywgd2FzbUVudHJ5cG9pbnQpOwogICAgIG1fc2ln
bmF0dXJlID0gc2lnbmF0dXJlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMDk3MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxMiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVl
LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiBzdHJ1Y3Qg
UHJvdG9DYWxsRnJhbWU7CiBjbGFzcyBXZWJBc3NlbWJseUluc3RhbmNlOwogCkBAIC01MywyOCAr
NTMsMjkgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgV2FzbTo6U2lnbmF0dXJlKik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxl
ZSogd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKLSAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3ZWJBc3NlbWJseUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJu
IG1fd2FzbUNhbGxlZS5nZXQoKTsgfQogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFu
Y2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlLmdldCgpOyB9Ci0gICAgY29uc3QgV2FzbTo6
U2lnbmF0dXJlKiBzaWduYXR1cmUoKQorICAgIFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKCkK
ICAgICB7IAogICAgICAgICBBU1NFUlQobV9zaWduYXR1cmUpOwogICAgICAgICByZXR1cm4gbV9z
aWduYXR1cmU7CiAgICAgfQogICAgIEVuY29kZWRKU1ZhbHVlIGNhbGwoVk0mLCBQcm90b0NhbGxG
cmFtZSopOworICAgIHZvaWQqIHdhc21FbnRyeXBvaW50KCkgeyByZXR1cm4gbV93YXNtRW50cnlw
b2ludC0+ZW50cnlwb2ludCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgV2Fz
bTo6U2lnbmF0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50LCBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlKik7CiAKIHByaXZhdGU6
CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
Kik7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNl
OwotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX3dhc21DYWxsZWU7Cisg
ICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+IG1fanNFbnRyeXBvaW50OworICAg
IFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX3dhc21FbnRyeXBvaW50OwogICAg
IFdhc206OlNpZ25hdHVyZSogbV9zaWduYXR1cmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFu
Y2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg4LDEwICs4OCwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAgICAgLy8gTGV0IGltcG9ydHMgYmUgYW4gaW5pdGlhbGx5LWVtcHR5IGxpc3Qg
b2YgZXh0ZXJuYWwgdmFsdWVzLgogICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucyA9IDA7
CiAKLSAgICAvLyBGSVhNRSBpbXBsZW1lbnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDEzNQogICAgIC8vIEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMwogCiAgICAgYm9vbCBo
YXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsKKyAgICBib29sIGhhc1RhYmxlSW1wb3J0ID0gZmFsc2U7
CiAgICAgLy8gRm9yIGVhY2ggaW1wb3J0IGkgaW4gbW9kdWxlLmltcG9ydHM6CiAgICAgZm9yIChh
dXRvJiBpbXBvcnQgOiBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzKSB7CiAgICAgICAgIC8vIDEu
IExldCBvIGJlIHRoZSByZXN1bHRhbnQgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2Jq
ZWN0LCBpLm1vZHVsZV9uYW1lKS4KQEAgLTEzMSwxMiArMTMxLDM2IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6OlRhYmxlOiB7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghaGFzVGFibGVJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVk
IGJ5IGEgdmFsaWRhdGlvbiBmYWlsdXJlLgogICAgICAgICAgICAgLy8gNy4gT3RoZXJ3aXNlIChp
IGlzIGEgdGFibGUgaW1wb3J0KToKLSAgICAgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBUYWJs
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAgICAg
ICAgICBoYXNUYWJsZUltcG9ydCA9IHRydWU7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFi
bGUqIHRhYmxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPih2YWx1ZSk7CiAg
ICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwg
dGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgICAgICBpZiAoIXRhYmxlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5v
dCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSkpOworCisgICAgICAgICAgICB1
aW50MzJfdCBleHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0
aW9uLmluaXRpYWwoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBkbyB3ZSBjYXJlIGFib3V0IHRo
ZSBhY3R1YWwgc3RhcnRpbmcgImluaXRpYWwiIHZhbHVlLCBvciBqdXN0IHRoZSBjdXJyZW50ICJz
aXplIiBvZiB0aGUgdGFibGUsIHNpbmNlIHRhYmxlcyBjYW4gZ3Jvdy4KKyAgICAgICAgICAgIC8v
IFRoaXMgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiB0aGUgSlMgQVBJLCBidXQgaXNuJ3QuCisgICAg
ICAgICAgICB1aW50MzJfdCBhY3R1YWxJbml0aWFsID0gdGFibGUtPnNpemUoKTsKKyAgICAgICAg
ICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQorICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IHByb3ZpZGVk
IGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSkpOworCisgICAgICAgICAgICBpZiAo
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gZXhwZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRp
b24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpIHsKKyAgICAgICAgICAgICAgICBzdGQ6Om9w
dGlvbmFsPHVpbnQzMl90PiBhY3R1YWxNYXhpbXVtID0gdGFibGUtPm1heGltdW0oKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
IlRhYmxlIGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJl
cXVpcmVzIHRoYXQgaXQgZG9lcyIpKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0ZWRNYXhpbXVtKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnRzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUg
bW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gdGFibGVzLgogICAg
ICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW1RhYmxlXV0gdG8gaW1wb3J0cy4KLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBpbnN0YW5jZS0+
c2V0VGFibGUodm0sIHRhYmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Ok1lbW9yeTogewpAQCAtMTg1LDcgKzIwOSw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogICAgIHsKICAgICAgICAg
aWYgKCEhbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eS5pc0ltcG9ydCgpKSB7Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYW4g
aW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAgICAgICAg
ICAvLyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBNZW1vcnkgaW1wb3J0IG9yIHdlIHNob3VsZCBo
YXZlIHRocm93biBhbiBleGNlcHRpb24uCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNN
ZW1vcnlJbXBvcnQpOwogICAgICAgICB9CiAKQEAgLTIwMCw2ICsyMjQsMjAgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB9CiAgICAgfQogCisgICAg
eworICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1v
ZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSkgeworICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgVGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBo
YXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNU
YWJsZUltcG9ydCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlv
bi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJsZUltcG9ydCkgeworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQo
KSk7CisgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBk
ZWZpbml0aW9uLgorICAgICAgICAgICAgaW5zdGFuY2UtPnNldFRhYmxlKHZtLAorICAgICAgICAg
ICAgICAgSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgbW9kdWxlSW5mb3JtYXRpb24u
dGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3Jt
YXRpb24ubWF4aW11bSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBtb2R1bGVSZWNvcmQt
PmxpbmsoZXhlYywgaW5zdGFuY2UpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBpZiAodmVyYm9zZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSAr
OTQsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAg
ICAgICBKU1ZhbHVlIG1heFNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBt
YXhpbXVtKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICAgICAgICAgIHVpbnQzMl90IHNpemUgPSBnZXRVaW50MzIobWF4U2l6ZVZhbHVlKTsK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAg
ICAgICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKHNpemUpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9y
eSAnbWF4aW11bScgcGFnZSBjb3VudCBpcyB0b28gbGFyZ2UiKSkpKTsKLSAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgICAgIG1heGltdW1Q
YWdlQ291bnQgPSBXYXNtOjpQYWdlQ291bnQoc2l6ZSk7CiAKICAgICAgICAgICAgIGlmIChpbml0
aWFsUGFnZUNvdW50ID4gbWF4aW11bVBhZ2VDb3VudCkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNw
cAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBA
IHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWEKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6OlRhYmxlOiB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0MTM1CisgICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1NzgyCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpNZW1vcnk6IHsKQEAgLTEzNiwxNiArMTM2LDE3IEBA
IHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAgICAgICAgIC8v
ICAgICBhLiBMZXQgZnVuYyBiZSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0IGNy
ZWF0ZWQgZnJvbSBjLgogICAgICAgICAgICAgLy8gICAgIGIuIEFwcGVuZCBmdW5jIHRvIGZ1bmNz
LgogICAgICAgICAgICAgLy8gICAgIGMuIFJldHVybiBmdW5jLgotICAgICAgICAgICAgSlNXZWJB
c3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSA9IG1vZHVsZS0+anNFbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShleHAuZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmZ1bmN0aW9uSW5kZXgpOworICAgICAg
ICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUt
Pndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAuZnVuY3Rpb25J
bmRleCk7CiAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1vZHVsZS0+
c2lnbmF0dXJlRm9yRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5mdW5jdGlvbkluZGV4KTsKLSAgICAg
ICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlv
bjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSwg
ZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwgd2FzbUNhbGxlZSwgc2lnbmF0dXJlKTsKKyAg
ICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5j
dGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUo
KSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNt
RW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlKTsKICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUg
PSBmdW5jdGlvbjsKICAgICAgICAgICAgIGlmIChoYXNTdGFydCAmJiBzdGFydEZ1bmN0aW9uSW5k
ZXhTcGFjZSA9PSBleHAuZnVuY3Rpb25JbmRleCkKICAgICAgICAgICAgICAgICBtX3N0YXJ0RnVu
Y3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpUYWJsZTogewotICAgICAgICAgICAg
Ly8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQor
ICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTc4MgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBX
YXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7CkBAIC0xNzQsOCArMTc1LDkgQEAgdm9pZCBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAvLyBGSVhNRSBjYW4gc3RhcnQg
Y2FsbCBpbXBvcnRzIC8gdGFibGVzPyBUaGlzIGFzc3VtZXMgbm90LiBodHRwczovL2dpdGh1Yi5j
b20vV2ViQXNzZW1ibHkvZGVzaWduL2lzc3Vlcy84OTYKICAgICAgICAgaWYgKCFtX3N0YXJ0RnVu
Y3Rpb24uZ2V0KCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBzdGFydCBmdW5jdGlvbiB3YXNuJ3Qg
YWRkZWQgYWJvdmUuIEl0IG11c3QgYmUgYSBwdXJlbHkgaW50ZXJuYWwgZnVuY3Rpb24uCi0gICAg
ICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtQ2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNl
KTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1i
bHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRz
LnNpemUoKSwgInN0YXJ0IiwgaW5zdGFuY2UsIHdhc21DYWxsZWUsIHNpZ25hdHVyZSk7CisgICAg
ICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUt
PmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbklu
ZGV4U3BhY2UpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9p
bnRDYWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1
bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksICJzdGFydCIsIGluc3RhbmNlLCBq
c0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmUpOwogICAg
ICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlUYWJsZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDk3
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRl
ICJGdW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseVRhYmxlUHJvdG90
eXBlLmgiCiAKICNpbmNsdWRlICJXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmgiCkBA
IC00MywxMiArNDQsNjYgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1
YwogIEBlbmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZShFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0
ZXJhbCgiV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSBUYWJsZSBjb25zdHJ1
Y3RvciBwcm9wZXJ0eSIpKSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvIGdldFVpbnQz
MiA9IFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4gdWludDMyX3QgeworICAgICAgICBkb3VibGUgZG91
YmxlVmFsdWUgPSB2YWx1ZS50b0ludGVnZXIoZXhlYyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBk
b3VibGVWYWx1ZSA+IFVJTlRfTUFYKSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZSBleHBlY3RzIHRoZSAnaW5pdGlhbCcgYW5kICdt
YXhpbXVtJyBwcm9wZXJ0aWVzIHRvIGJlIGludGVnZXJzIGluIHRoZSByYW5nZTogWzAsIDJeMzIg
LSAxXSIpKSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRvdWJsZVZhbHVlKTsKKyAgICB9OworCisgICAgLy8g
RklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgcmVhbGx5IGNsb3NlIHRvIFdlYkFzc2VtYmx5Lk1lbW9y
eSBjb25zdHJ1Y290ciwgd2UgY291bGQgcHJvYmFibHkKKyAgICAvLyBmYWN0b3Igb3V0IHRoZWly
IGNvbW1vbiBiaXRzIGludG8gYSBzaW5nbGUgZnVuY3Rpb24uCisKKyAgICBKU09iamVjdCogbWVt
b3J5RGVzY3JpcHRvcjsKKyAgICB7CisgICAgICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5h
cmd1bWVudCgwKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudC5pc09iamVjdCgpKQorICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZSBl
eHBlY3RzIGl0cyBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QiKSkpKTsKKyAgICAgICAg
bWVtb3J5RGVzY3JpcHRvciA9IGpzQ2FzdDxKU09iamVjdCo+KGFyZ3VtZW50KTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIElkZW50aWZpZXIgZWxlbWVudElkZW50ID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJlbGVtZW50Iik7CisgICAgICAgIEpTVmFsdWUgZWxlbWVudFZhbHVlID0g
bWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMsIGVsZW1lbnRJZGVudCk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnRT
dHJpbmcgPSBlbGVtZW50VmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgaWYgKGVsZW1lbnRTdHJpbmcg
IT0gImFueWZ1bmMiKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJXZWJBc3NlbWJseS5UYWJsZSBleHBlY3RzIGl0cyAnZWxlbWVudCcgZmllbGQgdG8gYmUg
dGhlIHN0cmluZyAnYW55ZnVuYyciKSkpKTsKKyAgICB9CisKKyAgICBJZGVudGlmaWVyIGluaXRp
YWxJZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5pdGlhbCIpOworICAgIEpT
VmFsdWUgaW5pdGlhbFNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBpbml0
aWFsSWRlbnQpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAg
ICB1aW50MzJfdCBpbml0aWFsID0gZ2V0VWludDMyKGluaXRpYWxTaXplVmFsdWUpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKworICAgIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1heGltdW07CisgICAgSWRlbnRpZmllciBtYXhpbXVtSWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW0iKTsKKyAgICBib29sIGhhc1Byb3BlcnR5ID0g
bWVtb3J5RGVzY3JpcHRvci0+aGFzUHJvcGVydHkoZXhlYywgbWF4aW11bUlkZW50KTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgaWYgKGhhc1Byb3BlcnR5
KSB7CisgICAgICAgIEpTVmFsdWUgbWF4U2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0
KGV4ZWMsIG1heGltdW1JZGVudCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKKyAgICAgICAgbWF4aW11bSA9IGdldFVpbnQzMihtYXhTaXplVmFsdWUpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICAgICAg
aWYgKGluaXRpYWwgPiAqbWF4aW11bSkgeworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgICAgIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCInbWF4aW11bScgcHJvcGVydHkgbXVz
dCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlICdpbml0aWFsJyBwcm9wZXJ0eSIpKSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFz
c2VtYmx5VGFibGU6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseVRhYmxlU3RydWN0dXJlKCksIGluaXRpYWwsIG1heGltdW0pKTsKIH0KIAogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlUYWJsZShFeGVj
U3RhdGUqIHN0YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwOTcw
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJG
dW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5VGFibGUuaCIKIAogI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVQcm90b3R5
cGUubHV0LmgiCiAKQEAgLTQyLDEwICs0MywxMzQgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2Vt
Ymx5VGFibGVQcm90b3R5cAogIEBlbmQKICAqLwogCi1XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBl
KiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSogc3RydWN0dXJlKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNXZWJBc3Nl
bWJseVRhYmxlKiBnZXRUYWJsZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSB2KQor
eworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpT
V2ViQXNzZW1ibHlUYWJsZSogcmVzdWx0ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFi
bGUqPih2KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCAKKyAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoImV4cGVjdGVkIHx0aGlzfCB2YWx1ZSB0byBiZSBhbiBpbnN0YW5jZSBvZiBXZWJBc3Nl
bWJseS5UYWJsZSIpKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5
VGFibGVQcm90b0Z1bmNMZW5ndGgoRXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHcm93KEV4ZWNTdGF0ZSopOworRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KEV4ZWNT
dGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJv
dG9GdW5jU2V0KEV4ZWNTdGF0ZSopOworCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdl
YkFzc2VtYmx5VGFibGVQcm90b0Z1bmNMZW5ndGgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gZ2V0VGFibGUoZXhl
Yywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0YWJsZS0+
c2l6ZSgpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlU
YWJsZVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMt
PnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CisKKyAgICAvLyBGSVhNRTogbGV0cyBtYWtlIGEgaGVscGVyIGZvciB0aGlzIGFzIHRoZSBzcGVj
IGhhcyBkb25lLgorICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
SW50ZWdlcihleGVjKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CisgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IFVJTlRfTUFYKSB7Cisg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90
eXBlLmdyb3cgZXhwZWN0cyBhbiBpbnRlZ2VyIGFyZ3VtZW50IGluIHRoZSByYW5nZTogWzAsIDJe
MzIgLSAxXSIpKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYgKCF0YWJs
ZS0+Z3JvdyhzdGF0aWNfY2FzdDx1aW50MzJfdD4oZG91YmxlVmFsdWUpKSkgeworICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLmdyb3cg
Y291bGQgbm90IGdyb3cgdGhlIHRhYmxlIikpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHZXQoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFi
bGUqIHRhYmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICAvLyBGSVhNRTogbGV0
cyBtYWtlIGEgaGVscGVyIGZvciB0aGlzIGFzIHRoZSBzcGVjIGhhcyBkb25lLgorICAgIGRvdWJs
ZSBkb3VibGVWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50ZWdlcihleGVjKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgaWYgKGRvdWJsZVZhbHVl
IDwgMCB8fCBkb3VibGVWYWx1ZSA+IFVJTlRfTUFYKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLmdldCBleHBlY3RzIGFuIGlu
dGVnZXIgYXJndW1lbnQgaW4gdGhlIHJhbmdlOiBbMCwgMl4zMiAtIDFdIikpKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBpbmRleCA9IHN0YXRpY19jYXN0PHVp
bnQzMl90Pihkb3VibGVWYWx1ZSk7CisgICAgaWYgKGluZGV4ID49IHRhYmxlLT5zaXplKCkpIHsK
KyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90
b3R5cGUuZ2V0IGV4cGVjdHMgYW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIHNpemUgb2YgdGhlIHRh
YmxlIikpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBpZiAoV2ViQXNzZW1i
bHlGdW5jdGlvbiogcmVzdWx0ID0gdGFibGUtPmdldEZ1bmN0aW9uKGluZGV4KSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5VGFibGVQcm90b0Z1bmNTZXQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4
ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgV2ViQXNz
ZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rp
b24qPih2YWx1ZSk7CisgICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiAhZnVuY3Rpb24pIHsKKyAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlw
ZS5zZXQgZXhwZWN0cyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIG51bGwgb3IgYW4gaW5zdGFu
Y2Ugb2YgV2ViQXNzZW1ibHkuRnVuY3Rpb24iKSkpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIC8vIEZJWE1FOiBsZXRzIG1ha2UgYSBoZWxwZXIgZm9yIHRoaXMgYXMgdGhlIHNw
ZWMgaGFzIGRvbmUuCisgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCku
dG9JbnRlZ2VyKGV4ZWMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKKyAgICBpZiAoZG91YmxlVmFsdWUgPCAwIHx8IGRvdWJsZVZhbHVlID4gVUlOVF9NQVgpIHsK
KyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90
b3R5cGUuc2V0IGV4cGVjdHMgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIGludGVnZXIgaW4g
dGhlIHJhbmdlOiBbMCwgMl4zMiAtIDFdIikpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICB1aW50MzJfdCBpbmRleCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihkb3VibGVWYWx1
ZSk7CisgICAgaWYgKGluZGV4ID49IHRhYmxlLT5zaXplKCkpIHsKKyAgICAgICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuc2V0IGV4cGVjdHMg
YW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIHNpemUgb2YgdGhlIHRhYmxlIikpKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBpZiAodmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHRh
YmxlLT5jbGVhckZ1bmN0aW9uKGluZGV4KTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCEh
ZnVuY3Rpb24pOworICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIGluZGV4LCBmdW5jdGlv
bik7CisgICAgfQorICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Cit9CisKK1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUqIFdlYkFzc2VtYmx5VGFibGVQcm90
b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU+KHZtLmhlYXApKSBXZWJBc3NlbWJs
eVRhYmxlUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOwotICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CiAg
ICAgcmV0dXJuIG9iamVjdDsKIH0KIApAQCAtNTQsOSArMTc5LDE0IEBAIFN0cnVjdHVyZSogV2Vi
QXNzZW1ibHlUYWJsZVByb3RvdHlwZTo6Y3IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQordm9pZCBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgSlNDX05BVElWRV9HRVRURVIoImxl
bmd0aCIsIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNMZW5ndGgsIERvbnRFbnVtIHwgQWNjZXNz
b3IpOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJncm93Iiwg
d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dyb3csIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigiZ2V0Iiwgd2ViQXNzZW1ibHlUYWJsZVBy
b3RvRnVuY0dldCwgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9V
VF9UUkFOU0lUSU9OKCJzZXQiLCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jU2V0LCBEb250RW51
bSwgMik7CiB9CiAKIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6OldlYkFzc2VtYmx5VGFibGVQ
cm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90
eXBlLmgJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMs
NyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2Jh
bE9iamVjdCopOwogCiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUoVk0m
LCBTdHJ1Y3R1cmUqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296969</attachid>
            <date>2016-12-12 16:52:38 -0800</date>
            <delta_ts>2016-12-12 19:03:22 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>84109</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk3NDYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDU2IEBACisyMDE2LTEyLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBpbXBsZW1lbnQgdGhlIHRhYmxlIHNlY3Rpb24g
YW5kIHRhYmxlIGltcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1NzE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3YXNtL0J1aWxkZXIuanM6CisgICAgICAgIChjb25zdC5faW1wb3J0TWVtb3J5
Q29udGludWF0aW9uKToKKyAgICAgICAgKGNvbnN0Ll9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbik6
CisgICAgICAgIChleHBvcnQuZGVmYXVsdC5CdWlsZGVyLnByb3RvdHlwZS5fcmVnaXN0ZXJTZWN0
aW9uQnVpbGRlcnMuc3dpdGNoLmNhc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUudGhpcy5zZWN0aW9u
KToKKyAgICAgICAgKGNvbnN0Ll9pbXBvcnRNZW1vcnlDb250aW51YXRpb24uc2VjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChjb25zdC5faW1wb3J0
TWVtb3J5Q29udGludWF0aW9uLmFzc2VydCk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9CdWls
ZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzOgorICAgICAgICAocHV0UmVzaXphYmxlTGltaXRzKToK
KyAgICAgICAgKHB1dFRhYmxlKToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLlR5cGUpOiBEZWxl
dGVkLgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuSW1wb3J0KTogRGVsZXRlZC4KKyAgICAgICAg
KGNvbnN0LmVtaXR0ZXJzLkZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0LmVtaXR0
ZXJzLlRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLk1lbW9yeSk6IERl
bGV0ZWQuCisgICAgICAgIChjb25zdC5lbWl0dGVycy5HbG9iYWwpOiBEZWxldGVkLgorICAgICAg
ICAoY29uc3QuZW1pdHRlcnMuRXhwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0LmVtaXR0
ZXJzLlN0YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkVsZW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuQ29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChjb25zdC5lbWl0dGVycy5EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKGV4cG9ydC5jb25zdC5C
aW5hcnkpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvY2FsbC1pbmRp
cmVjdC1wYXJhbXMuanM6IFJlbW92ZWQuCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9j
YWxsLWluZGlyZWN0LmpzOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMv
dGFibGUtYmFzaWMtMi5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0
cmluZ19hcHBlYXJlZF9oZXJlLm1ha2VJbnN0YW5jZSk6CisgICAgICAgIChmdW5jKToKKyAgICAg
ICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2ljLmpzOiBBZGRlZC4KKyAgICAgICAg
KGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUubWFrZUluc3RhbmNlKToK
KyAgICAgICAgKiB3YXNtL2pzLWFwaS9jYWxsLWluZGlyZWN0LXJlc3VsdHMuanM6IFJlbW92ZWQu
CisgICAgICAgICogd2FzbS9qcy1hcGkvY2FsbC1pbmRpcmVjdC5qczoKKyAgICAgICAgKGNvbnN0
Lndhc21Nb2R1bGVXaGljaEltcG9ydEpTKToKKyAgICAgICAgKGNvbnN0Lm1ha2VUYWJsZSk6Cisg
ICAgICAgIChQb2x5cGhpYzJJbXBvcnQpOgorICAgICAgICAoVmlydHVhbEltcG9ydCk6CisgICAg
ICAgIChNb25vbW9ycGhpY0ltcG9ydCk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy1hcGkv
dGFibGUuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0QmFkQmluYXJ5KToKKyAgICAgICAgKGFz
c2VydC50cnV0aHkpOgorICAgICAgICAoYXNzZXJ0QmFkVGFibGUpOgorICAgICAgICAoYXNzZXJ0
QmFkVGFibGVJbXBvcnQpOgorICAgICAgICAoYXNzZXJ0QmFkQmluYXJ5LmFzc2VydEJhZFRhYmxl
SW5zdGFuY2UpOgorICAgICAgICAoYXNzZXJ0QmFkVGFibGVJbnN0YW5jZSk6CisgICAgICAgICog
d2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanM6CisgICAgICAgIChjb25zdC5jLmluLmNvbnN0
cnVjdG9yUHJvcGVydGllcy5zd2l0Y2gpOgorCiAyMDE2LTEyLTEyICBNaWNoYWVsIFNhYm9mZiAg
PG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjIwOTY1Myk6IHNwZWVk
b21ldGVyIGNyYXNoZXMgbWFraW5nIHZpcnR1YWwgc2xvdyBwYXRoIHRhaWxjYWxscwpJbmRleDog
SlNUZXN0cy93YXNtL0J1aWxkZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL0J1aWxk
ZXIuanMJKHJldmlzaW9uIDIwOTcwNCkKKysrIEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwyMiBAQCBjb25zdCBfaW1wb3J0RnVuY3Rpb25Db250
aW51YXRpb24gPSAoYnVpCiAKIGNvbnN0IF9pbXBvcnRNZW1vcnlDb250aW51YXRpb24gPSAoYnVp
bGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKICAgICByZXR1cm4gKG1vZHVsZSwgZmll
bGQsIG1lbW9yeURlc2NyaXB0aW9uKSA9PiB7Ci0gICAgICAgIGFzc2VydC5pc1N0cmluZyhtb2R1
bGUsIGBJbXBvcnQgZnVuY3Rpb24gbW9kdWxlIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke21v
ZHVsZX0iYCk7Ci0gICAgICAgIGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEltcG9ydCBmdW5jdGlv
biBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CisgICAgICAgIGFz
c2VydC5pc1N0cmluZyhtb2R1bGUsIGBJbXBvcnQgTWVtb3J5IG1vZHVsZSBzaG91bGQgYmUgYSBz
dHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQs
IGBJbXBvcnQgTWVtb3J5IGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJg
KTsKICAgICAgICAgc2VjdGlvbi5kYXRhLnB1c2goe21vZHVsZSwgZmllbGQsIGtpbmQ6ICJNZW1v
cnkiLCBtZW1vcnlEZXNjcmlwdGlvbn0pOwogICAgICAgICByZXR1cm4gbmV4dEJ1aWxkZXI7CiAg
ICAgfTsKIH07CiAKK2NvbnN0IF9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBz
ZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4geworICAgIHJldHVybiAobW9kdWxlLCBmaWVsZCwgdGFi
bGVEZXNjcmlwdGlvbikgPT4geworICAgICAgICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1w
b3J0IFRhYmxlIG1vZHVsZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOwor
ICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQgVGFibGUgZmllbGQgc2hvdWxk
IGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAgICBzZWN0aW9uLmRhdGEucHVz
aCh7bW9kdWxlLCBmaWVsZCwga2luZDogIlRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbn0pOworICAg
ICAgICByZXR1cm4gbmV4dEJ1aWxkZXI7CisgICAgfTsKK307CisKIGNvbnN0IF9leHBvcnRGdW5j
dGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewog
ICAgIHJldHVybiAoZmllbGQsIGluZGV4LCB0eXBlKSA9PiB7CiAgICAgICAgIGFzc2VydC5pc1N0
cmluZyhmaWVsZCwgYEV4cG9ydCBmdW5jdGlvbiBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdv
dCAiJHtmaWVsZH0iYCk7CkBAIC0yOTksMTIgKzMwOCwyOSBAQCBjb25zdCBfY3JlYXRlRnVuY3Rp
b24gPSAoc2VjdGlvbiwgYnVpbGRlCiAKICAgICAgICAgaWYgKHR5cGVvZihzaWduYXR1cmUpID09
PSAidW5kZWZpbmVkIikKICAgICAgICAgICAgIHNpZ25hdHVyZSA9IHsgcGFyYW1zOiBbXSB9Owot
ICAgICAgICBhc3NlcnQuaGFzT2JqZWN0UHJvcGVydHkoc2lnbmF0dXJlLCAicGFyYW1zIiwgYEV4
cGVjdCBmdW5jdGlvbiBzaWduYXR1cmUgdG8gYmUgYW4gb2JqZWN0IHdpdGggYSAicGFyYW1zIiBm
aWVsZCwgZ290ICIke3NpZ25hdHVyZX0iYCk7Ci0gICAgICAgIGNvbnN0IFtwYXJhbXMsIHJldF0g
PSBfbm9ybWFsaXplRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlLnBhcmFtcywgc2lnbmF0dXJl
LnJldCk7Ci0gICAgICAgIHNpZ25hdHVyZSA9IHsgcGFyYW1zOiBwYXJhbXMsIHJldDogcmV0IH07
CisKKyAgICAgICAgbGV0IHR5cGU7CisgICAgICAgIGxldCBwYXJhbXM7CisgICAgICAgIGlmICh0
eXBlb2Ygc2lnbmF0dXJlID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgYXNzZXJ0Lmhhc09i
amVjdFByb3BlcnR5KHNpZ25hdHVyZSwgInBhcmFtcyIsIGBFeHBlY3QgZnVuY3Rpb24gc2lnbmF0
dXJlIHRvIGJlIGFuIG9iamVjdCB3aXRoIGEgInBhcmFtcyIgZmllbGQsIGdvdCAiJHtzaWduYXR1
cmV9ImApOworICAgICAgICAgICAgbGV0IHJldDsKKyAgICAgICAgICAgIChbcGFyYW1zLCByZXRd
ID0gX25vcm1hbGl6ZUZ1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZS5wYXJhbXMsIHNpZ25hdHVy
ZS5yZXQpKTsKKyAgICAgICAgICAgIHNpZ25hdHVyZSA9IHtwYXJhbXMsIHJldH07CisgICAgICAg
ICAgICB0eXBlID0gX21heWJlUmVnaXN0ZXJUeXBlKGJ1aWxkZXIsIHNpZ25hdHVyZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KHR5cGVvZiBzaWduYXR1cmUg
PT09ICJudW1iZXIiKTsKKyAgICAgICAgICAgIGNvbnN0IHR5cGVTZWN0aW9uID0gYnVpbGRlci5f
Z2V0U2VjdGlvbigiVHlwZSIpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSghIXR5cGVTZWN0
aW9uKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoc2lnbmF0dXJlIDwgdHlwZVNlY3Rpb24u
ZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgdHlwZSA9IHNpZ25hdHVyZTsKKyAgICAgICAgICAg
IHNpZ25hdHVyZSA9IHR5cGVTZWN0aW9uLmRhdGFbc2lnbmF0dXJlXTsKKyAgICAgICAgICAgIGFz
c2VydC5oYXNPYmplY3RQcm9wZXJ0eShzaWduYXR1cmUsICJwYXJhbXMiLCBgRXhwZWN0IGZ1bmN0
aW9uIHNpZ25hdHVyZSB0byBiZSBhbiBvYmplY3Qgd2l0aCBhICJwYXJhbXMiIGZpZWxkLCBnb3Qg
IiR7c2lnbmF0dXJlfSJgKTsKKyAgICAgICAgICAgIHBhcmFtcyA9IHNpZ25hdHVyZS5wYXJhbXM7
CisgICAgICAgIH0KKwogICAgICAgICBjb25zdCBmdW5jID0gewogICAgICAgICAgICAgbmFtZTog
ZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgdHlwZTogX21heWJlUmVnaXN0ZXJUeXBlKGJ1aWxk
ZXIsIHNpZ25hdHVyZSksCisgICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAgc2lnbmF0dXJl
OiBzaWduYXR1cmUsCiAgICAgICAgICAgICBsb2NhbHM6IHBhcmFtcy5jb25jYXQobG9jYWxzKSwg
Ly8gUGFyYW1ldGVycyBhcmUgdGhlIGZpcnN0IGxvY2Fscy4KICAgICAgICAgICAgIHBhcmFtZXRl
ckNvdW50OiBwYXJhbXMubGVuZ3RoLApAQCAtMzc5LDExICs0MDUsMTEgQEAgZXhwb3J0IGRlZmF1
bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9h
ZGRTZWN0aW9uKHNlY3Rpb24pOwogICAgICAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnRCdWls
ZGVyID0gewogICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgVGFibGU6ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxl
bWVudGVkOiBpbXBvcnQgdGFibGVgKTsgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIEdsb2Jh
bDogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9ydCBnbG9iYWxg
KTsgfSwKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0
QnVpbGRlci5GdW5jdGlvbiA9IF9pbXBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBp
bXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5NZW1vcnkg
PSBfaW1wb3J0TWVtb3J5Q29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOworICAg
ICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLlRhYmxlID0gX2ltcG9ydFRhYmxlQ29udGlu
dWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaW1wb3J0QnVpbGRlcjsKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNDAwLDggKzQyNiwxNyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsK
ICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAiVGFibGUiOgotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FIEltcGxlbWVudCB0YWJsZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1Ci0gICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9u
XSA9ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUg
IiR7c2VjdGlvbn0iYCk7IH07CisgICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihz
ZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwb3J0QnVpbGRlciA9IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gdGhpcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFRhYmxlOiAodGFibGVEZXNjcmlwdGlvbikgPT4geworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHMuZGF0YS5wdXNoKHt0YWJsZURlc2NyaXB0aW9ufSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydEJ1aWxkZXI7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBleHBvcnRCdWlsZGVyOworICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgIGNhc2UgIk1lbW9yeSI6CkluZGV4OiBKU1Rlc3RzL3dhc20vQnVp
bGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vQnVp
bGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwkocmV2aXNpb24gMjA5NzA0KQorKysgSlNUZXN0cy93
YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDI4IEBAIGltcG9ydCAqIGFzIFdBU00gZnJvbSAnV0FTTS5qcyc7CiAKIGNvbnN0IHB1dCA9
IChiaW4sIHR5cGUsIHZhbHVlKSA9PiBiaW5bdHlwZV0odmFsdWUpOwogCitmdW5jdGlvbiBwdXRS
ZXNpemFibGVMaW1pdHMoYmluLCBpbml0aWFsLCBtYXhpbXVtKSB7CisgICAgYXNzZXJ0LnRydXRo
eSh0eXBlb2YgaW5pdGlhbCA9PT0gIm51bWJlciIsICJXZSBleHBlY3QgJ2luaXRpYWwnIHRvIGJl
IGFuIGludGVnZXIiKTsKKyAgICBsZXQgaGFzTWF4aW11bSA9IDA7CisgICAgaWYgKHR5cGVvZiBt
YXhpbXVtID09PSAibnVtYmVyIikgeworICAgICAgICBoYXNNYXhpbXVtID0gMTsKKyAgICB9IGVs
c2UgeworICAgICAgICBhc3NlcnQudHJ1dGh5KHR5cGVvZiBtYXhpbXVtID09PSAidW5kZWZpbmVk
IiwgIldlIGV4cGVjdCAnbWF4aW11bScgdG8gYmUgYW4gaW50ZWdlciBpZiBpdCdzIGRlZmluZWQi
KTsKKyAgICB9CisKKyAgICBwdXQoYmluLCAidmFydWludDEiLCBoYXNNYXhpbXVtKTsKKyAgICBw
dXQoYmluLCAidmFydWludDMyIiwgaW5pdGlhbCk7CisgICAgaWYgKGhhc01heGltdW0pCisgICAg
ICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBtYXhpbXVtKTsKK30KKworZnVuY3Rpb24gcHV0VGFi
bGUoYmluLCB7aW5pdGlhbCwgbWF4aW11bSwgZWxlbWVudH0pIHsKKyAgICBhc3NlcnQudHJ1dGh5
KFdBU00uaXNWYWxpZFR5cGUoZWxlbWVudCksICJXZSBleHBlY3QgJ2VsZW1lbnQnIHRvIGJlIGEg
dmFsaWQgdHlwZS4gSXQgd2FzOiAiICsgZWxlbWVudCk7CisgICAgcHV0KGJpbiwgInZhcmludDci
LCBXQVNNLnR5cGVWYWx1ZVtlbGVtZW50XSk7CisKKyAgICBwdXRSZXNpemFibGVMaW1pdHMoYmlu
LCBpbml0aWFsLCBtYXhpbXVtKTsKK30KKwogY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgVHlwZTog
KHNlY3Rpb24sIGJpbikgPT4gewogICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgc2VjdGlv
bi5kYXRhLmxlbmd0aCk7CkBAIC01NywyMyArNzksMTMgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAg
ICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGVudHJ5LnR5cGUpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAiVGFibGUi
OiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsKKyAgICAgICAgICAgIGNh
c2UgIlRhYmxlIjogeworICAgICAgICAgICAgICAgIHB1dFRhYmxlKGJpbiwgZW50cnkudGFibGVE
ZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBjYXNlICJNZW1vcnkiOiB7CiAgICAgICAgICAgICAgICAgbGV0IHtpbml0aWFsLCBt
YXhpbXVtfSA9IGVudHJ5Lm1lbW9yeURlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAgIGFzc2Vy
dC50cnV0aHkodHlwZW9mIGluaXRpYWwgPT09ICJudW1iZXIiLCAiV2UgZXhwZWN0ICdpbml0aWFs
JyB0byBiZSBhIG51bWJlciIpOwotICAgICAgICAgICAgICAgIGluaXRpYWwgfD0gMDsKLSAgICAg
ICAgICAgICAgICBsZXQgaGFzTWF4aW11bSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVv
ZiBtYXhpbXVtID09PSAibnVtYmVyIikgewotICAgICAgICAgICAgICAgICAgICBtYXhpbXVtIHw9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIGhhc01heGltdW0gPSAxOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydC50cnV0aHkodHlwZW9mIG1heGlt
dW0gPT09ICJ1bmRlZmluZWQiLCAiV2UgZXhwZWN0ICdtYXhpbXVtJyB0byBiZSBhIG51bWJlciBp
ZiBpdCdzIGRlZmluZWQiKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBw
dXQoYmluLCAidmFydWludDEiLCBoYXNNYXhpbXVtKTsKLSAgICAgICAgICAgICAgICBwdXQoYmlu
LCAidmFydWludDMyIiwgaW5pdGlhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc01heGltdW0p
Ci0gICAgICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBtYXhpbXVtKTsKKyAg
ICAgICAgICAgICAgICBwdXRSZXNpemFibGVMaW1pdHMoYmluLCBpbml0aWFsLCBtYXhpbXVtKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBjYXNl
ICJHbG9iYWwiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsKQEAgLTg3
LDcgKzk5LDEyIEBAIGNvbnN0IGVtaXR0ZXJzID0gewogICAgICAgICAgICAgcHV0KGJpbiwgInZh
cnVpbnQzMiIsIHNpZ25hdHVyZSk7CiAgICAgfSwKIAotICAgIFRhYmxlOiAoc2VjdGlvbiwgYmlu
KSA9PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOyB9LAorICAgIFRh
YmxlOiAoc2VjdGlvbiwgYmluKSA9PiB7CisgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBz
ZWN0aW9uLmRhdGEubGVuZ3RoKTsKKyAgICAgICAgZm9yIChjb25zdCB7dGFibGVEZXNjcmlwdGlv
bn0gb2Ygc2VjdGlvbi5kYXRhKSB7CisgICAgICAgICAgICBwdXRUYWJsZShiaW4sIHRhYmxlRGVz
Y3JpcHRpb24pOworICAgICAgICB9CisgICAgfSwKIAogICAgIE1lbW9yeTogKHNlY3Rpb24sIGJp
bikgPT4gewogICAgICAgICAvLyBGbGFncywgY3VycmVudGx5IGNhbiBvbmx5IGJlIFswLDFdCklu
ZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvY2FsbC1pbmRpcmVjdC1wYXJhbXMuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NhbGwtaW5kaXJlY3Qt
cGFyYW1zLmpzCShyZXZpc2lvbiAyMDk3MDQpCisrKyBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVz
dHMvY2FsbC1pbmRpcmVjdC1wYXJhbXMuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwyOCArMCwwIEBA
Ci1pbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJwotCi1jb25zdCBiID0gbmV3IEJ1
aWxkZXIoKTsKLWIuVHlwZSgpLkVuZCgpCi0gICAgLkZ1bmN0aW9uKCkuRW5kKCkKLSAgICAuQ29k
ZSgpCi0KLSAgICAuRnVuY3Rpb24oeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKLSAg
ICAuSTMyQ29uc3QoMSkKLSAgICAuRW5kKCkKLQotICAgIC5GdW5jdGlvbih7IHBhcmFtczogWyJp
MzIiXSwgcmV0OiAiaTMyIiB9KQotICAgIC5HZXRMb2NhbCgwKQotICAgIC5FbmQoKQotCi0gICAg
LkZ1bmN0aW9uKHsgcGFyYW1zOiBbImkzMiIsICJpMzIiXSwgcmV0OiAiaTMyIiB9KQotICAgIC5H
ZXRMb2NhbCgxKQotICAgIC5HZXRMb2NhbCgwKQotICAgIC5DYWxsSW5kaXJlY3QoMCwgMCkKLSAg
ICAuRW5kKCkKLQotCi1jb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkKLWJpbi50cmltKCk7Ci10
ZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhiaW4uZ2V0KCksIDMsIFtdLCBbXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFtbeyB0eXBlOiAiaTMyIiwgdmFsdWU6IDEgfSwgW3sgdHlwZTogImkzMiIs
IHZhbHVlOiAwIH0sIHsgdHlwZTogImkzMiIsIHZhbHVlOiA0IH1dXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBbeyB0eXBlOiAiaTMyIiwgdmFsdWU6IDQgfSwgW3sgdHlwZTogImkzMiIsIHZh
bHVlOiAxIH0sIHsgdHlwZTogImkzMiIsIHZhbHVlOiA0IH1dXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIF0pOwpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NhbGwtaW5kaXJl
Y3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NhbGwtaW5k
aXJlY3QuanMJKHJldmlzaW9uIDIwOTcwNCkKKysrIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0
cy9jYWxsLWluZGlyZWN0LmpzCShub25leGlzdGVudCkKQEAgLTEsMjcgKzAsMCBAQAotaW1wb3J0
IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKLQotY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
Ci1iLlR5cGUoKS5FbmQoKQotICAgIC5GdW5jdGlvbigpLkVuZCgpCi0gICAgLkNvZGUoKQotCi0g
ICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQotICAgIC5JMzJDb25zdCgx
KQotICAgIC5FbmQoKQotCi0gICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9
KQotICAgIC5JMzJDb25zdCgyKQotICAgIC5FbmQoKQotCi0gICAgLkZ1bmN0aW9uKHsgcGFyYW1z
OiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCi0gICAgLkdldExvY2FsKDApCi0gICAgLkNhbGxJbmRp
cmVjdCgwLCAwKQotICAgIC5FbmQoKQotCi0KLWNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKQot
YmluLnRyaW0oKTsKLXRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zKGJpbi5nZXQoKSwgMywgW10sIFtd
LAotICAgICAgICAgICAgICAgICAgICAgICAgW1t7IHR5cGU6ICJpMzIiLCB2YWx1ZTogMSB9LCBb
eyB0eXBlOiAiaTMyIiwgdmFsdWU6IDAgfV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgIFt7
IHR5cGU6ICJpMzIiLCB2YWx1ZTogMSB9LCBbeyB0eXBlOiAiaTMyIiwgdmFsdWU6IDAgfV1dLAot
ICAgICAgICAgICAgICAgICAgICAgICAgXSk7CkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rpb24t
dGVzdHMvdGFibGUtYmFzaWMtMi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvdGFibGUtYmFzaWMtMi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFzaWMtMi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU3IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMg
YXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworZnVuY3Rpb24gbWFrZUluc3RhbmNlKGZ1bmMp
IHsKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpCisg
ICAgICAgICAgICAuRnVuYyhbImkzMiIsICJpMzIiXSwgImkzMiIpCisgICAgICAgICAgICAuRnVu
YyhbImkzMiJdLCAiaTMyIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAg
ICAgICAgICAgLlRhYmxlKCJpbXAiLCAidGFibGUiLCB7aW5pdGlhbDogMjAsIGVsZW1lbnQ6ICJh
bnlmdW5jIn0pCisgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmdW5jIiwgeyBwYXJhbXM6
IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlv
bigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28i
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCAwIC8qWydpMzInLCAnaTMyJ10g
PT4gJ2kzMicqLykKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkgLy8gcGFyYW1ldGVyIHRv
IGNhbGwKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkgLy8gY2FsbCBpbmRleAorICAgICAg
ICAgICAgICAgIC5DYWxsSW5kaXJlY3QoMSwgMCkgLy8gY2FsbGluZyBmdW5jdGlvbiBvZiB0eXBl
IFsnaTMyJ10gPT4gJ2kzMicKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIiLCAxIC8qWydpMzInXSA9PiAnaTMy
JyovKQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5DYWxs
KDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpOworCisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
IGNvbnN0IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAyMCwgZWxlbWVu
dDogImFueWZ1bmMifSk7CisgICAgcmV0dXJuIHtpbnN0YW5jZTogbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwge2ltcDoge3RhYmxlLCBmdW5jfX0pLCB0YWJsZX07Cit9CisKK3sKKyAg
ICBsZXQgaTsKKyAgICBmdW5jdGlvbiBmdW5jKHgpIHsKKyAgICAgICAgaWYgKHggIT09IGkpCisg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhcmd1bWVudCIpOworICAgICAgICByZXR1
cm4geCArIDQ0OworICAgIH0KKyAgICBjb25zdCB7aW5zdGFuY2UsIHRhYmxlfSA9IG1ha2VJbnN0
YW5jZShmdW5jKTsKKyAgICBjb25zdCBleHBvcnRzID0gaW5zdGFuY2UuZXhwb3J0czsKKyAgICBj
b25zdCBmb28gPSBleHBvcnRzLmZvbzsKKyAgICB0YWJsZS5zZXQoMCwgZXhwb3J0cy5iYXIpOwor
ICAgIGFzc2VydC5lcSh0YWJsZS5nZXQoMCksIGV4cG9ydHMuYmFyKTsKKworICAgIGZvciAoaSA9
IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgICAgIGlmIChmb28oMCwgaSkgIT09IGkgKyA0NCkK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGNhbGwgaW5kaXJlY3QiKTsKKyAgICB9
Cit9CkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFzaWMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2ljLmpzCShu
b25leGlzdGVudCkKKysrIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy90YWJsZS1iYXNpYy5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcu
Li9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKwor
ZnVuY3Rpb24gbWFrZUluc3RhbmNlKCkgeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRl
cigpCisgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAgIC5GdW5jKFsiaTMyIiwgImkzMiJdLCAi
aTMyIikKKyAgICAgICAgICAgIC5GdW5jKFsiaTMyIl0sICJpMzIiKQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHtp
bml0aWFsOiAyMCwgZWxlbWVudDogImFueWZ1bmMifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIiKQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCAwIC8qWydpMzIn
LCAnaTMyJ10gPT4gJ2kzMicqLykKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkgLy8gcGFy
YW1ldGVyIHRvIGNhbGwKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkgLy8gY2FsbCBpbmRl
eAorICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3QoMSwgMCkgLy8gY2FsbGluZyBmdW5jdGlv
biBvZiB0eXBlIFsnaTMyJ10gPT4gJ2kzMicKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIiLCAxIC8qWydpMzIn
XSA9PiAnaTMyJyovKQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAg
ICAgIC5JMzJDb25zdCg0MikKKyAgICAgICAgICAgICAgICAuSTMyQWRkKCkKKyAgICAgICAgICAg
ICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKwor
ICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBt
b2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgdGFibGUgPSBu
ZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6IDIwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KTsK
KyAgICByZXR1cm4ge2luc3RhbmNlOiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
aW1wOiB7dGFibGV9fSksIHRhYmxlfTsKK30KKworeworICAgIGNvbnN0IHtpbnN0YW5jZSwgdGFi
bGV9ID0gbWFrZUluc3RhbmNlKCk7CisgICAgY29uc3QgZXhwb3J0cyA9IGluc3RhbmNlLmV4cG9y
dHM7CisgICAgY29uc3QgZm9vID0gZXhwb3J0cy5mb287CisgICAgdGFibGUuc2V0KDAsIGV4cG9y
dHMuYmFyKTsKKyAgICBhc3NlcnQuZXEodGFibGUuZ2V0KDApLCBleHBvcnRzLmJhcik7CisKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICBpZiAoZm9vKDAsIGkp
ICE9PSBpICsgNDIpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBjYWxsIGluZGly
ZWN0Iik7CisgICAgfQorfQorCisvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgY3Jvc3MgbW9kdWxl
LiBUaGUgcmVhc29uIGl0IGRvZXNuJ3QKKy8vIG5vdyBpcyB0aGF0IHdlIGRvbid0IHVuaXF1ZSBT
aWduYXR1cmUqLgorLyoKK3sKKyAgICBjb25zdCB7aW5zdGFuY2UsIHRhYmxlfSA9IG1ha2VJbnN0
YW5jZSgpOworICAgIGNvbnN0IGZvbyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworICAgIC8vdGFi
bGUuc2V0KDAsIG1ha2VJbnN0YW5jZSgpLmluc3RhbmNlLmV4cG9ydHMuYmFyKTsgLy8gQ3Jvc3Mg
aW5zdGFuY2UgZnVuY3Rpb24uCisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykg
eworICAgICAgICBpZiAoZm9vKDAsIGkpICE9PSBpICsgNDIpCisgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkJhZCBjYWxsIGluZGlyZWN0Iik7CisgICAgfQorfQorKi8KSW5kZXg6IEpTVGVz
dHMvd2FzbS9qcy1hcGkvY2FsbC1pbmRpcmVjdC1yZXN1bHRzLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvd2FzbS9qcy1hcGkvY2FsbC1pbmRpcmVjdC1yZXN1bHRzLmpzCShyZXZpc2lvbiAyMDk3
MDQpCisrKyBKU1Rlc3RzL3dhc20vanMtYXBpL2NhbGwtaW5kaXJlY3QtcmVzdWx0cy5qcwkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQxICswLDAgQEAKLWltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9h
c3NlcnQuanMnOwotaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7Ci0KLWNvbnN0
IHdhc21Nb2R1bGVXaGljaEltcG9ydEpTID0gKCkgPT4gewotICAgIGNvbnN0IGJ1aWxkZXIgPSAo
bmV3IEJ1aWxkZXIoKSkKLSAgICAgICAgLlR5cGUoKS5FbmQoKQotICAgICAgICAuSW1wb3J0KCkK
LSAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImZ1bmMiLCB7IHBhcmFtczogWyJpMzIiXSwg
cmV0OiAiaTMyIiB9KQotICAgICAgICAuRW5kKCkKLSAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
LSAgICAgICAgLkV4cG9ydCgpCi0gICAgICAgICAgICAuRnVuY3Rpb24oImNoYW5nZUNvdW50ZXIi
KQotICAgICAgICAuRW5kKCkKLSAgICAgICAgLkNvZGUoKQotICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjaGFuZ2VDb3VudGVyIiwgeyBwYXJhbXM6IFsiaTMyIiwgImkzMiJdLCByZXQ6ICJpMzIiIH0p
Ci0gICAgICAgICAgICAgICAgLkkzMkNvbnN0KDQyKQotICAgICAgICAgICAgICAgIC5HZXRMb2Nh
bCgwKQotICAgICAgICAgICAgICAgIC5JMzJBZGQoKQotICAgICAgICAgICAgICAgIC5HZXRMb2Nh
bCgxKQotICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3QoMCwgMCkgLy8gQ2FsbHMgZnVuYyhw
YXJhbVswXSArIDQyKS4KLSAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKLSAgICAgICAgICAg
ICAgICAuQ2FsbEluZGlyZWN0KDAsIDApIC8vIENhbGxzIGZ1bmMocGFyYW1bMF0gKyA0MikuCi0g
ICAgICAgICAgICAuRW5kKCkKLSAgICAgICAgLkVuZCgpOwotICAgIGNvbnN0IGJpbiA9IGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKLSAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7Ci0gICAgcmV0dXJuIG1vZHVsZTsKLX07Ci0KLQotKGZ1bmN0aW9uIE1v
bm9tb3JwaGljSW1wb3J0KCkgewotICAgIGxldCBjb3VudGVyID0gMDsKLSAgICBjb25zdCBjb3Vu
dGVyU2V0dGVyID0gdiA9PiBjb3VudGVyID0gdjsKLSAgICBjb25zdCBtb2R1bGUgPSB3YXNtTW9k
dWxlV2hpY2hJbXBvcnRKUygpOwotICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5
Lkluc3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsgZnVuYzogY291bnRlclNldHRlciB9IH0pOwotICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgNDA5NjsgKytpKSB7Ci0gICAgICAgIC8vIEludm9rZSB0aGlz
IGEgYnVuY2ggb2YgdGltZXMgdG8gbWFrZSBzdXJlIHRoZSBJQyBpbiB0aGUgd2FzbSAtPiBKUyBz
dHViIHdvcmtzIGNvcnJlY3RseS4KLSAgICAgICAgaW5zdGFuY2UuZXhwb3J0cy5jaGFuZ2VDb3Vu
dGVyKGksIDApOwotICAgICAgICBhc3NlcnQuZXEoY291bnRlciwgaSArIDQyKTsKLSAgICB9Ci19
KSgpOwpJbmRleDogSlNUZXN0cy93YXNtL2pzLWFwaS9jYWxsLWluZGlyZWN0LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkvY2FsbC1pbmRpcmVjdC5qcwkocmV2aXNpb24gMjA5
NzA0KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS9jYWxsLWluZGlyZWN0LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC02LDEwICs2LDEyIEBAIGNvbnN0IHdhc21Nb2R1bGVXaGljaEltcG9ydEpTID0gKCkg
PT4gewogICAgICAgICAuVHlwZSgpLkVuZCgpCiAgICAgICAgIC5JbXBvcnQoKQogICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbImkzMiJdIH0pCisgICAgICAg
ICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHsgaW5pdGlhbDogMSwgbWF4aW11bTogMSwgZWxl
bWVudDogImFueWZ1bmMifSkKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5GdW5jdGlvbigpLkVu
ZCgpCiAgICAgICAgIC5FeHBvcnQoKQogICAgICAgICAgICAgLkZ1bmN0aW9uKCJjaGFuZ2VDb3Vu
dGVyIikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbEZ1bmMiKQogICAgICAgICAuRW5kKCkK
ICAgICAgICAgLkNvZGUoKQogICAgICAgICAgICAgLkZ1bmN0aW9uKCJjaGFuZ2VDb3VudGVyIiwg
eyBwYXJhbXM6IFsiaTMyIiwgImkzMiJdIH0pCkBAIC0xNyw3ICsxOSwxMSBAQCBjb25zdCB3YXNt
TW9kdWxlV2hpY2hJbXBvcnRKUyA9ICgpID0+IHsKICAgICAgICAgICAgICAgICAuR2V0TG9jYWwo
MCkKICAgICAgICAgICAgICAgICAuSTMyQWRkKCkKICAgICAgICAgICAgICAgICAuR2V0TG9jYWwo
MSkKLSAgICAgICAgICAgICAgICAuQ2FsbEluZGlyZWN0KDAsIDApIC8vIENhbGxzIGZ1bmMocGFy
YW1bMF0gKyA0MikuCisgICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAwKSAvLyBDYWxs
cyB0YWJsZVswXShwYXJhbVswXSArIDQyKS4KKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsRnVuYyIsIHsgcGFyYW1zOiBbImkzMiJdIH0pCisgICAgICAgICAg
ICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkNhbGwoMCkgLy8gQ2FsbHMgZnVu
YyhwYXJhbVswXSArIDQyKQogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKICAg
ICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CkBAIC0yNSwxMiArMzEs
MTcgQEAgY29uc3Qgd2FzbU1vZHVsZVdoaWNoSW1wb3J0SlMgPSAoKSA9PiB7CiAgICAgcmV0dXJu
IG1vZHVsZTsKIH07CiAKK2NvbnN0IG1ha2VUYWJsZSA9ICgpID0+IHsKKyAgICByZXR1cm4gbmV3
IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAxLCBtYXhpbXVtOiAxLCBlbGVtZW50OiAiYW55
ZnVuYyJ9KTsKK307CiAKIChmdW5jdGlvbiBNb25vbW9ycGhpY0ltcG9ydCgpIHsKICAgICBsZXQg
Y291bnRlciA9IDA7CiAgICAgY29uc3QgY291bnRlclNldHRlciA9IHYgPT4gY291bnRlciA9IHY7
CisgICAgY29uc3QgdGFibGUgPSBtYWtlVGFibGUoKTsKICAgICBjb25zdCBtb2R1bGUgPSB3YXNt
TW9kdWxlV2hpY2hJbXBvcnRKUygpOwotICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsgZnVuYzogY291bnRlclNldHRlciB9IH0pOwor
ICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBp
bXA6IHsgZnVuYzogY291bnRlclNldHRlciwgdGFibGV9IH0pOworICAgIHRhYmxlLnNldCgwLCBp
bnN0YW5jZS5leHBvcnRzLmNhbGxGdW5jKTsKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwOTY7
ICsraSkgewogICAgICAgICAvLyBJbnZva2UgdGhpcyBhIGJ1bmNoIG9mIHRpbWVzIHRvIG1ha2Ug
c3VyZSB0aGUgSUMgaW4gdGhlIHdhc20gLT4gSlMgc3R1YiB3b3JrcyBjb3JyZWN0bHkuCiAgICAg
ICAgIGluc3RhbmNlLmV4cG9ydHMuY2hhbmdlQ291bnRlcihpLCAwKTsKQEAgLTQ0LDggKzU1LDE0
IEBAIGNvbnN0IHdhc21Nb2R1bGVXaGljaEltcG9ydEpTID0gKCkgPT4gewogICAgIGNvbnN0IGNv
dW50ZXJBU2V0dGVyID0gdiA9PiBjb3VudGVyQSA9IHY7CiAgICAgY29uc3QgY291bnRlckJTZXR0
ZXIgPSB2ID0+IGNvdW50ZXJCID0geyB2YWx1ZUI6IHYgfTsKICAgICBjb25zdCBtb2R1bGUgPSB3
YXNtTW9kdWxlV2hpY2hJbXBvcnRKUygpOwotICAgIGNvbnN0IGluc3RhbmNlQSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgaW1wOiB7IGZ1bmM6IGNvdW50ZXJBU2V0dGVyIH0g
fSk7Ci0gICAgY29uc3QgaW5zdGFuY2VCID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSwgeyBpbXA6IHsgZnVuYzogY291bnRlckJTZXR0ZXIgfSB9KTsKKworICAgIGNvbnN0IHRhYmxl
QSA9IG1ha2VUYWJsZSgpOworICAgIGNvbnN0IGluc3RhbmNlQSA9IG5ldyBXZWJBc3NlbWJseS5J
bnN0YW5jZShtb2R1bGUsIHsgaW1wOiB7IGZ1bmM6IGNvdW50ZXJBU2V0dGVyLCB0YWJsZTogdGFi
bGVBfSB9KTsKKyAgICB0YWJsZUEuc2V0KDAsIGluc3RhbmNlQS5leHBvcnRzLmNhbGxGdW5jKTsK
KworICAgIGNvbnN0IHRhYmxlQiA9IG1ha2VUYWJsZSgpOworICAgIGNvbnN0IGluc3RhbmNlQiA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgaW1wOiB7IGZ1bmM6IGNvdW50ZXJC
U2V0dGVyLCB0YWJsZTogdGFibGVCfSB9KTsKKyAgICB0YWJsZUIuc2V0KDAsIGluc3RhbmNlQi5l
eHBvcnRzLmNhbGxGdW5jKTsKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwNDg7ICsraSkgewog
ICAgICAgICBpbnN0YW5jZUEuZXhwb3J0cy5jaGFuZ2VDb3VudGVyKGksIDApOwogICAgICAgICBh
c3NlcnQuaXNBKGNvdW50ZXJBLCAibnVtYmVyIik7CkBAIC01Nyw4ICs3NCw2IEBAIGNvbnN0IHdh
c21Nb2R1bGVXaGljaEltcG9ydEpTID0gKCkgPT4gewogfSkoKTsKIAogKGZ1bmN0aW9uIFZpcnR1
YWxJbXBvcnQoKSB7Ci0gICAgY29uc3QgbnVtID0gMTA7IC8vIEl0J3MgZGVmaW5pdGVseSBnb2lu
ZyB2aXJ0dWFsIGF0IDEwIQotICAgIGxldCBjb3VudGVycyA9IFswLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwXTsKICAgICBjb25zdCBjb3VudGVyU2V0dGVycyA9IFsKICAgICAgICAgdiA9PiBj
b3VudGVyc1swXSA9IHYsCiAgICAgICAgIHYgPT4gY291bnRlcnNbMV0gPSB2ICsgMSwKQEAgLTcx
LDEyICs4NiwxNiBAQCBjb25zdCB3YXNtTW9kdWxlV2hpY2hJbXBvcnRKUyA9ICgpID0+IHsKICAg
ICAgICAgdiA9PiBjb3VudGVyc1s4XSA9IHYgKyA4LAogICAgICAgICB2ID0+IGNvdW50ZXJzWzld
ID0gdiArIDksCiAgICAgXTsKKyAgICBjb25zdCBudW0gPSBjb3VudGVyU2V0dGVycy5sZW5ndGg7
CisgICAgbGV0IGNvdW50ZXJzID0gY291bnRlclNldHRlcnMubWFwKCgpID0+IDApOwogICAgIGFz
c2VydC5lcShjb3VudGVycy5sZW5ndGgsIG51bSk7Ci0gICAgYXNzZXJ0LmVxKGNvdW50ZXJTZXR0
ZXJzLmxlbmd0aCwgbnVtKTsKICAgICBjb25zdCBtb2R1bGUgPSB3YXNtTW9kdWxlV2hpY2hJbXBv
cnRKUygpOwogICAgIGxldCBpbnN0YW5jZXMgPSBbXTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8
IG51bTsgKytpKQotICAgICAgICBpbnN0YW5jZXNbaV0gPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7IGltcDogeyBmdW5jOiBjb3VudGVyU2V0dGVyc1tpXSB9IH0pOworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKKyAgICAgICAgbGV0IHRhYmxlID0gbWFrZVRh
YmxlKCk7CisgICAgICAgIGluc3RhbmNlc1tpXSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSht
b2R1bGUsIHsgaW1wOiB7IGZ1bmM6IGNvdW50ZXJTZXR0ZXJzW2ldLCB0YWJsZX0gfSk7CisgICAg
ICAgIHRhYmxlLnNldCgwLCBpbnN0YW5jZXNbaV0uZXhwb3J0cy5jYWxsRnVuYyk7CisgICAgfQog
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA0ODsgKytpKSB7CiAgICAgICAgIGZvciAobGV0IGog
PSAwOyBqIDwgbnVtOyArK2opIHsKICAgICAgICAgICAgIGluc3RhbmNlc1tqXS5leHBvcnRzLmNo
YW5nZUNvdW50ZXIoaSwgMCk7CkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIwMyBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CitpbXBvcnQgKiBh
cyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKKworY29uc3QgYmFkVGFibGVTdHJpbmcgPSAi
Y291bGRuJ3QgcGFyc2Ugc2VjdGlvbiBUYWJsZSI7Citjb25zdCBiYWRJbXBvcnRTdHJpbmcgPSAi
Y291bGRuJ3QgcGFyc2Ugc2VjdGlvbiBJbXBvcnQiOworZnVuY3Rpb24gYXNzZXJ0QmFkQmluYXJ5
KGJ1aWxkZXIsIHN0cikgeworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKKyAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIHRocmV3ID0g
dHJ1ZTsKKyAgICAgICAgYXNzZXJ0LnRydXRoeShlLnRvU3RyaW5nKCkuaW5kZXhPZihzdHIpICE9
PSAtMSk7CisgICAgfQorICAgIGFzc2VydC50cnV0aHkodGhyZXcpOworfQorCit7CisgICAgY29u
c3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAg
ICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwge2luaXRpYWw6
IDIwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLlRhYmxlKCkKKyAgICAgICAgICAgIC5UYWJsZSh7aW5pdGlh
bDogMjAsIG1heGltdW06IDMwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkNvZGUoKQorICAgICAgICAuRW5kKCk7CisgICAgYXNzZXJ0QmFkQmluYXJ5KGJ1
aWxkZXIsIGJhZFRhYmxlU3RyaW5nKTsKK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcg
QnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5k
KCkKKyAgICAgICAgLlRhYmxlKCkKKyAgICAgICAgICAgIC5UYWJsZSh7aW5pdGlhbDogMjAsIG1h
eGltdW06IDMwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KQorICAgICAgICAgICAgLlRhYmxlKHtpbml0
aWFsOiAyMCwgbWF4aW11bTogMzAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgIC5FbmQoKTsKKyAgICBhc3NlcnRCYWRCaW5hcnko
YnVpbGRlciwgYmFkVGFibGVTdHJpbmcpOworfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IG5l
dyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9v
Iiwge3BhcmFtczogWyJpMzIiXX0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAg
ICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAwKQorICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5FbmQoKTsKKyAgICBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgImNhbGxfaW5kaXJlY3Qg
aXMgb25seSB2YWxpZCB3aGVuIGEgdGFibGUgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIpOworfQor
Cit7CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5F
bmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuVGFibGUoKQorICAgICAg
ICAgICAgLlRhYmxlKHtpbml0aWFsOjIwLCBlbGVtZW50OiJhbnlmdW5jIn0pCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9v
Iiwge3BhcmFtczogWyJpMzIiXX0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAg
ICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAxKQorICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5FbmQoKTsKKyAgICBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgImNhbGxfaW5kaXJlY3Qg
J3Jlc2VydmVkJyB2YXJ1aW50MSBtdXN0IGJlIDB4MCIpOworfQorCitmdW5jdGlvbiBhc3NlcnRC
YWRUYWJsZSh0YWJsZURlc2NyaXB0aW9uKSB7CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWls
ZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQor
ICAgICAgICAuVGFibGUoKQorICAgICAgICAgICAgLlRhYmxlKHRhYmxlRGVzY3JpcHRpb24pCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgIC5FbmQoKTsKKyAgICBhc3Nl
cnRCYWRCaW5hcnkoYnVpbGRlciwgYmFkVGFibGVTdHJpbmcpOworfQorCitmdW5jdGlvbiBhc3Nl
cnRCYWRUYWJsZUltcG9ydCh0YWJsZURlc2NyaXB0aW9uKSB7CisgICAgY29uc3QgYnVpbGRlciA9
IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkK
KyAgICAgICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbikKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgLkVuZCgpOworICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRJbXBvcnRT
dHJpbmcpOworfQorCit7CisgICAgbGV0IGJhZERlc2NyaXB0aW9ucyA9IFsKKyAgICAgICAge2lu
aXRpYWw6IDEwLCBlbGVtZW50OiAiaTMyIn0sCisgICAgICAgIHtpbml0aWFsOiAxMCwgZWxlbWVu
dDogImYzMiJ9LAorICAgICAgICB7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJmNjQifSwKKyAgICAg
ICAge2luaXRpYWw6IDEwLCBlbGVtZW50OiAiaTY0In0sCisgICAgICAgIHtpbml0aWFsOiAxMCwg
bWF4aW11bTogMjAsIGVsZW1lbnQ6ICJpMzIifSwKKyAgICAgICAge2luaXRpYWw6IDEwLCBtYXhp
bXVtOiAyMCwgZWxlbWVudDogImYzMiJ9LAorICAgICAgICB7aW5pdGlhbDogMTAsIG1heGltdW06
IDIwLCBlbGVtZW50OiAiZjY0In0sCisgICAgICAgIHtpbml0aWFsOiAxMCwgbWF4aW11bTogMjAs
IGVsZW1lbnQ6ICJpNjQifSwKKworICAgICAgICB7aW5pdGlhbDogMTAsIG1heGltdW06IDksIGVs
ZW1lbnQ6ICJhbnlmdW5jIn0sCisgICAgICAgIHtpbml0aWFsOiAxLCBtYXhpbXVtOiAwLCBlbGVt
ZW50OiAiYW55ZnVuYyJ9LAorICAgICAgICB7aW5pdGlhbDogMioqMzIgLSAxLCBtYXhpbXVtOiAy
KiozMiAtIDIsIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCisgICAgXTsKKworICAgIGZvciAoY29uc3Qg
ZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKKyAgICAgICAgYXNzZXJ0QmFkVGFibGUoZCk7CisgICAg
ICAgIGFzc2VydEJhZFRhYmxlSW1wb3J0KGQpOworICAgIH0KK30KKworeworICAgIGNvbnN0IGJ1
aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLklt
cG9ydCgpCisgICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHtpbml0aWFsOiAyMCwg
ZWxlbWVudDogImFueWZ1bmMifSkKKyAgICAgICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwg
e2luaXRpYWw6IDIwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAuRW5kKCk7Cisg
ICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZEltcG9ydFN0cmluZyk7Cit9CisKKworewor
ICAgIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlSW5zdGFuY2UodGFibGVEZXNjcmlwdGlvbiwgdGFi
bGUsIG1lc3NhZ2UpIHsKKyAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAg
ICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5FbmQoKTsKKworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsK
KyAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge3RhYmxlfX0pOworICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICBhc3NlcnQuZXEoZS50b1N0cmluZygpLCBtZXNzYWdlKTsKKyAg
ICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQudHJ1dGh5
KHRocmV3KTsKKyAgICB9CisKKyAgICBjb25zdCBiYWRUYWJsZXMgPSBbCisgICAgICAgIFt7aW5p
dGlhbDogMTAwLCBtYXhpbXVtOjEwMCwgZWxlbWVudDoiYW55ZnVuYyJ9LCBuZXcgV2ViQXNzZW1i
bHkuVGFibGUoe2luaXRpYWw6MTAwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KSwgIlR5cGVFcnJvcjog
VGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVx
dWlyZXMgdGhhdCBpdCBkb2VzIl0sCisgICAgICAgIFt7aW5pdGlhbDogMTAwLCBtYXhpbXVtOjEw
MCwgZWxlbWVudDoiYW55ZnVuYyJ9LCBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6MTAw
LCBtYXhpbXVtOjEwMSwgZWxlbWVudDogImFueWZ1bmMifSksICJUeXBlRXJyb3I6IFRhYmxlIGlt
cG9ydHMgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4
aW11bSciXSwKKyAgICAgICAgW3tpbml0aWFsOiAxMDAsIGVsZW1lbnQ6ImFueWZ1bmMifSwgbmV3
IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOjEwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KSwgIlR5
cGVFcnJvcjogVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBz
bWFsbCJdLAorICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiJhbnlmdW5jIn0sIG5ldyBX
ZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDo5LCBlbGVtZW50OiAiYW55ZnVuYyJ9KSwgIlR5cGVF
cnJvcjogVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFs
bCJdLAorICAgIF07CisgICAgZm9yIChjb25zdCBbZCwgdCwgbV0gb2YgYmFkVGFibGVzKSB7Cisg
ICAgICAgIGFzc2VydEJhZFRhYmxlSW5zdGFuY2UoZCwgdCwgbSk7CisgICAgfQorfQorCit7Cisg
ICAgeworICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7ZWxlbWVu
dDogImFueWZ1bmMiLCBpbml0aWFsOiAyMCwgbWF4aW11bTogMzB9KTsKKyAgICAgICAgdGFibGUu
Z3JvdygzMCk7CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdGFibGUuZ3JvdygzMSksIFR5
cGVFcnJvciwgIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5ncm93IGNvdWxkIG5vdCBncm93
IHRoZSB0YWJsZSIpOworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHRhYmxlLmdyb3coMjkp
LCBUeXBlRXJyb3IsICJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuZ3JvdyBjb3VsZCBub3Qg
Z3JvdyB0aGUgdGFibGUiKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGNvbnN0IHRhYmxlID0g
bmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtlbGVtZW50OiAiYW55ZnVuYyIsIGluaXRpYWw6IDIwfSk7
CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdGFibGUuZ3Jvdyh7dmFsdWVPZigpIHsgcmV0
dXJuIDE5OyB9fSksIFR5cGVFcnJvciwgIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5ncm93
IGNvdWxkIG5vdCBncm93IHRoZSB0YWJsZSIpOworICAgICAgICBsZXQgY2FsbGVkID0gZmFsc2U7
CisgICAgICAgIHRhYmxlLmdyb3coe3ZhbHVlT2YoKSB7IGNhbGxlZCA9IHRydWU7IHJldHVybiAy
MTsgfX0pOworICAgICAgICBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7CisgICAgfQorCisgICAgewor
ICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7ZWxlbWVudDogImFu
eWZ1bmMiLCBpbml0aWFsOiAyMH0pOworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHRhYmxl
LmdldCgyMCksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuZ2V0IGV4
cGVjdHMgYW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIHNpemUgb2YgdGhlIHRhYmxlIik7CisgICAg
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykKKyAgICAgICAgICAgIGFzc2VydC5lcSh0
YWJsZS5nZXQoaSksIG51bGwpOworICAgIH0KKworICAgIHsKKyAgICAgICAgY29uc3QgdGFibGUg
PSBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2VsZW1lbnQ6ICJhbnlmdW5jIiwgaW5pdGlhbDogMjB9
KTsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB0YWJsZS5zZXQoMjAsIG51bGwpLCBSYW5n
ZUVycm9yLCAiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLnNldCBleHBlY3RzIGFuIGludGVn
ZXIgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSB0YWJsZSIpOworICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDIwOyBpKyspCisgICAgICAgICAgICB0YWJsZS5zZXQoaSwgbnVsbCk7CisgICAg
fQorfQpJbmRleDogSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCShyZXZpc2lvbiAy
MDk3MDQpCisrKyBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw4ICs3OCw5IEBAIGZvciAoY29uc3QgYyBpbiBjb25zdHJ1Y3RvclByb3Bl
cnRpZXMpIHsKICAgICAgICAgbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogMjB9KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAiVGFibGUiOgotICAgICAgICAvLyBGSVhNRSBJbXBs
ZW1lbnQgYW5kIHRlc3QgdGhlc2UgQVBJcyBmdXJ0aGVyLiBGb3Igbm93IHRoZXkganVzdCB0aHJv
dy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTc3NQotICAgICAg
ICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseVtjXSgpLCBFcnJvciwgYFdlYkFz
c2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgJHtjfSBjb25zdHJ1Y3RvciBwcm9wZXJ0
eWApOworICAgICAgICBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6IDIwLCBlbGVtZW50
OiAiYW55ZnVuYyJ9KTsKKyAgICAgICAgbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAy
MCwgbWF4aW11bTogMjAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pOworICAgICAgICBuZXcgV2ViQXNz
ZW1ibHkuVGFibGUoe2luaXRpYWw6IDIwLCBtYXhpbXVtOiAyNSwgZWxlbWVudDogImFueWZ1bmMi
fSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgIkNvbXBpbGVFcnJvciI6CiAgICAgY2FzZSAi
UnVudGltZUVycm9yIjogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsOTMgQEAKKzIwMTYtMTItMTIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IGltcGxlbWVudCB0aGUgdGFibGUgc2VjdGlv
biBhbmQgdGFibGUgaW1wb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjU3MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhlIFRhYmxlIHNwYWNlIGZvciB3YXNt
OgorICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2Jsb2IvbWFz
dGVyL0JpbmFyeUVuY29kaW5nLm1kI3RhYmxlLXNlY3Rpb24KKworICAgICAgICBJdCBvbmx5IGlt
cGxlbWVudHMgZGVmaW5pbmcgYW5kIGltcG9ydGluZyBhIHRhYmxlLiBUaGUgYnVsaworICAgICAg
ICBvZiB0aGlzIHBhdGNoIGlzIGltcGxlbWVudGluZyB0aGUgdmFyaW91cyB3YXNtIFRhYmxlIHBy
b3RvdHlwZQorICAgICAgICBtZXRob2RzIGFuZCB0aGUgdW5kZXJseWluZyBUYWJsZSBvYmplY3Q6
CisgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9kZXNpZ24vYmxvYi9tYXN0
ZXIvSlMubWQjd2ViYXNzZW1ibHl0YWJsZS1jb25zdHJ1Y3RvcgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWxzbyBmaXhlcyBhIGJ1ZyBpbiBvdXIgaW1wbGVtZW50YXRpb24gd2l0aCBjYWxsX2luZGly
ZWN0LgorICAgICAgICBXZSBpbml0aWFsbHkgaW1wbGVtZW50ZWQgY2FsbF9pbmRpcmVjdCBhcyBh
IHdheSB0byBjYWxsIGZ1bmN0aW9ucyB0aGF0CisgICAgICAgIGFyZSBpbXBvcnRlZCBvciBkZWZp
bmVkIGluIHRoZSBtb2R1bGUuIFRoaXMgd2FzIHRoZSB3cm9uZworICAgICAgICBpbnRlcnByZXRh
dGlvbiBvZiB0aGUgc3BlYy4gSW5zdGVhZCwgY2FsbF9pbmRpcmVjdCBjYW4gb25seSBpbmRleCBp
bnRvCisgICAgICAgIHRoZSB0YWJsZSBpbmRleCBzcGFjZS4KKworICAgICAgICAqIHdhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpC
M0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAg
ICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGVJbmZvcm1h
dGlvbjo6VGFibGVJbmZvcm1hdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlSW5mb3Jt
YXRpb246Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZUluZm9ybWF0
aW9uOjppc0ltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlSW5mb3JtYXRpb246Omlu
aXRpYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZUluZm9ybWF0aW9uOjptYXhpbXVtKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGFibGVGdW5jdGlvbjo6Q2FsbGFibGVGdW5jdGlvbik6
CisgICAgICAgIChKU0M6Oldhc206OkNhbGxhYmxlRnVuY3Rpb246Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206
OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdh
c20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNl
cjo6cGFyc2VJbXBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNl
UmVzaXphYmxlTGltaXRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJz
ZVRhYmxlSGVscGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZVRh
YmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBl
cik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnQpOgorICAg
ICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNl
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRhYmxlKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRUYWJsZSk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSk6CisgICAgICAgICogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFi
bGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3Nl
bWJseVRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpncm93KToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjptYXhp
bXVtKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpzaXplKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpnZXRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y2Fs
bCk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rp
b246OnNpZ25hdHVyZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246Ondhc21F
bnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6d2ViQXNzZW1i
bHlDYWxsZWUpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUlu
c3RhbmNlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJB
c3NlbWJseVRhYmxlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRUYWJsZSk6CisgICAgICAgIChKU0M6OndlYkFzc2Vt
Ymx5VGFibGVQcm90b0Z1bmNMZW5ndGgpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRhYmxl
UHJvdG9GdW5jR3Jvdyk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNH
ZXQpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jU2V0KToKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAq
IHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oOgorCiAyMDE2LTEyLTExICBTYWFt
IEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFRyeSB0
byBmaXggdGhlIGxpbnV4IGJ1aWxkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcsNyArMTM3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBFeHBy
ZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxscHRyOwogCi0gICAgQjNJUkdlbmVyYXRv
cihjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0
aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgSW1tdXRhYmxlRnVu
Y3Rpb25JbmRleFNwYWNlJik7CisgICAgQjNJUkdlbmVyYXRvcihWTSYsIGNvbnN0IE1lbW9yeUlu
Zm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2Um
KTsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBWZWN0
b3I8VHlwZT4mKTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1
aW50MzJfdCk7CkBAIC0xODgsNiArMTg4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVuaWZ5VmFs
dWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgUmVzdWx0TGlz
dCYgc3RhY2spOwogICAgIFZhbHVlKiB6ZXJvRm9yVHlwZShUeXBlKTsKIAorICAgIFZNJiBtX3Zt
OwogICAgIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYgbV9mdW5jdGlvbkluZGV4
U3BhY2U7CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50
QmxvY2s7CkBAIC0xOTksOCArMjAwLDkgQEAgcHJpdmF0ZToKICAgICBWYWx1ZSogbV9mdW5jdGlv
bkluZGV4U3BhY2VWYWx1ZTsKIH07CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29u
c3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21J
bnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRl
eFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgOiBtX2Z1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4U3BhY2UpCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwg
Y29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdh
c21JbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25J
bmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9m
dW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKQogICAgICwgbV9wcm9jKHByb2Nl
ZHVyZSkKICAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMpCiB7CkBAIC02NjksMjcgKzY3MSw1MiBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGxJbmRpcmVjdChjb25zCiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRh
a2VMYXN0KCk7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSA9PSBhcmdz
LnNpemUoKSk7CiAKKyAgICAgCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1
ZmZlcjsKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZTsKKyAg
ICB7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIHRvcEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmln
aW4oKSwKKyAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
PihtX3Byb2MsIE9yaWdpbigpLCAmbV92bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UpKTsKKyAg
ICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLAorICAgICAg
ICAgICAgdG9wSW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgp
KTsKKyAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCks
CisgICAgICAgICAgICB0YWJsZSwgSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9u
cygpKTsKKyAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwK
KyAgICAgICAgICAgIHRhYmxlLCBKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9mU2l6ZSgpKTsK
KyAgICB9CisKICAgICAvLyBDaGVjayB0aGUgaW5kZXggd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHZh
bGlkLgogICAgIHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgbWF4VmFsaWRJbmRleCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIE9yaWdpbigpLCBJbnQzMiwgbV9m
dW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSk7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4o
KSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
RXF1YWwsIE9yaWdpbigpLCBtX3plcm9WYWx1ZXNbbGluZWFyaXplVHlwZShJMzIpXSwKLSAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NU
aGFuLCBPcmlnaW4oKSwgY2FsbGVlSW5kZXgsIG1heFZhbGlkSW5kZXgpKSk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFib3ZlRXF1YWwsIE9y
aWdpbigpLCBjYWxsZWVJbmRleCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemUpKTsKIAogICAg
ICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIGppdC5icmVha3BvaW50
KCk7CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0
aGUgZnVuY3Rpb24gaW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgorICAgIC8vIENvbXB1
dGUgdGhlIG9mZnNldCBpbiB0aGUgdGFibGUgaW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9y
LgogICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgTXVsLCBPcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIE9yaWdpbigpLCBjYWxsZWVJbmRleCksCiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIE9yaWdpbigp
LCBwb2ludGVyVHlwZSgpLCBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbikpKTsKLSAgICBFeHByZXNz
aW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBBZGQsIE9yaWdpbigpLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZVZhbHVlLCBvZmZz
ZXQpOworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgT3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXIsIG9mZnNldCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBDYWxsYWJsZUZ1bmN0
aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBIG51bGwgU2lnbmF0dXJl
KiBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlhbGl6ZWQuCisgICAgRXhwcmVzc2lvblR5cGUgY2Fs
bGVlU2lnbmF0dXJlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgT0JK
RUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rpb24sIHNpZ25hdHVyZSkpOworICAgIHsKKyAgICAg
ICAgLy8gSWYgdGhlIFNpZ25hdHVyZSogaXMgbnVsbHB0ciwgd2UgdHJhcC4KKyAgICAgICAgQ2hl
Y2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1f
cHJvYywgQ2hlY2ssIE9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIAorICAgICAgICAgICAgICAgIGNh
bGxlZVNpZ25hdHVyZSwgCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAwKSkpOworCisgICAgICAgIGNoZWNr
LT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAg
ICAgfSk7CisgICAgfQogCiAgICAgLy8gQ2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIHRoZSB2
YWx1ZSB3ZSBleHBlY3QuCiAgICAgewotICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWdu
YXR1cmUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBPQkpFQ1RfT0ZG
U0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2lnbmF0dXJlKSk7CiAgICAgICAgIEV4cHJlc3Npb25U
eXBlIGV4cGVjdGVkU2lnbmF0dXJlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBzaWduYXR1cmUpOwogICAgICAgICBDaGVja1ZhbHVl
KiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBD
aGVjaywgT3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIE5vdEVxdWFsLCBPcmlnaW4oKSwgY2FsbGVlU2lnbmF0dXJlLCBleHBlY3Rl
ZFNpZ25hdHVyZSkpOwpAQCAtNzEzLDYgKzc0MCw3IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KGNvbnMKICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJu
VHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9
KTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04NDYsNyArODc0LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYQogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjpt
YWtlX3VuaXF1ZTxXYXNtSW50ZXJuYWxGdW5jdGlvbj4oKTsKIAogICAgIFByb2NlZHVyZSBwcm9j
ZWR1cmU7Ci0gICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KGluZm8ubWVtb3J5LCBwcm9jZWR1cmUs
IHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhTcGFj
ZSk7CisgICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KHZtLCBpbmZvLm1lbW9yeSwgcHJvY2VkdXJl
LCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4U3Bh
Y2UpOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihjb250ZXh0LCBm
dW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBmdW5jdGlvbkluZGV4U3Bh
Y2UsIGluZm8pOwogICAgIGlmICghcGFyc2VyLnBhcnNlKCkpCiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Rm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdHJ1Y3QgRXhw
b3J0IHsKICAgICBFeHRlcm5hbDo6S2luZCBraW5kOwogICAgIHVuaW9uIHsKICAgICAgICAgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleDsKLSAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IFRhYmxlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgLy8g
RklYTUUgaW1wbGVtZW50IFRhYmxlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU3ODIKICAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IE1lbW9yeSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NjcxCiAgICAgICAgIC8vIEZJWE1FIGlt
cGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDEzMwogICAgIH07CkBAIC0xNDcsMTcgKzE0Nyw0NSBAQCBzdHJ1Y3QgU2VnbWVudCB7CiAgICAg
fQogfTsKIAorY2xhc3MgVGFibGVJbmZvcm1hdGlvbiB7CitwdWJsaWM6CisgICAgVGFibGVJbmZv
cm1hdGlvbigpCisgICAgeworICAgICAgICBBU1NFUlQoISp0aGlzKTsKKyAgICB9CisKKyAgICBU
YWJsZUluZm9ybWF0aW9uKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
IG1heGltdW0sIGJvb2wgaXNJbXBvcnQpCisgICAgICAgIDogbV9pbml0aWFsKGluaXRpYWwpCisg
ICAgICAgICwgbV9tYXhpbXVtKG1heGltdW0pCisgICAgICAgICwgbV9pc0ltcG9ydChpc0ltcG9y
dCkKKyAgICAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhp
cyk7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNWYWxpZDsgfQorICAgIGJvb2wgaXNJbXBvcnQoKSBjb25zdCB7IHJldHVybiBtX2lzSW1w
b3J0OyB9CisgICAgdWludDMyX3QgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsg
fQorICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBt
X21heGltdW07IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2luaXRpYWw7CisgICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOworICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2lzVmFsaWQgeyBmYWxzZSB9OworfTsKKwogc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uIHsKICAgICBWZWN0b3I8U2lnbmF0dXJlPiBzaWduYXR1cmVzOwogICAgIFZl
Y3RvcjxJbXBvcnQ+IGltcG9ydHM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZSo+IGltcG9ydEZ1bmN0
aW9uczsKLSAgICAvLyBGSVhNRSBpbXBsZW1lbnQgaW1wb3J0IFRhYmxlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKICAgICAvLyBGSVhNRSBpbXBsZW1lbnQg
aW1wb3J0IEdsb2JhbCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
MTMzCiAgICAgVmVjdG9yPFNpZ25hdHVyZSo+IGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVzOwog
ICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRz
OwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlOwog
ICAgIFZlY3RvcjxTZWdtZW50OjpQdHI+IGRhdGE7CisgICAgVGFibGVJbmZvcm1hdGlvbiB0YWJs
ZUluZm9ybWF0aW9uOwogCiAgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwpAQCAtMTg1LDEz
ICsyMTMsMjAgQEAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgV2FzbVRvSlNTdAogLy8g
V2ViQXNzZW1ibHkgZGlyZWN0IGNhbGxzIGFuZCBjYWxsX2luZGlyZWN0IHVzZSBpbmRpY2VzIGlu
dG8gImZ1bmN0aW9uIGluZGV4IHNwYWNlIi4gVGhpcyBzcGFjZSBzdGFydHMgd2l0aCBhbGwgaW1w
b3J0cywgYW5kIHRoZW4gYWxsIGludGVybmFsIGZ1bmN0aW9ucy4KIC8vIENhbGxhYmxlRnVuY3Rp
b24gYW5kIEZ1bmN0aW9uSW5kZXhTcGFjZSBhcmUgb25seSBtZWFudCBhcyBmYXN0IGxvb2t1cCB0
YWJsZXMgZm9yIHRoZXNlIG9wY29kZXMsIGFuZCBkbyBub3Qgb3duIGNvZGUuCiBzdHJ1Y3QgQ2Fs
bGFibGVGdW5jdGlvbiB7Ci0gICAgQ2FsbGFibGVGdW5jdGlvbihTaWduYXR1cmUqIHNpZ25hdHVy
ZSkKKyAgICBDYWxsYWJsZUZ1bmN0aW9uKCkgPSBkZWZhdWx0OworCisgICAgQ2FsbGFibGVGdW5j
dGlvbihTaWduYXR1cmUqIHNpZ25hdHVyZSwgdm9pZCogY29kZSA9IG51bGxwdHIpCiAgICAgICAg
IDogc2lnbmF0dXJlKHNpZ25hdHVyZSkKLSAgICAgICAgLCBjb2RlKG51bGxwdHIpCisgICAgICAg
ICwgY29kZShjb2RlKQogICAgIHsKICAgICB9Ci0gICAgU2lnbmF0dXJlKiBzaWduYXR1cmU7IC8v
IEZJWE1FIHBhY2sgdGhpcyBpbnNpZGUgYSAodW5pcXVlZCkgaW50ZWdlciAoZm9yIGNvcnJlY3Ru
ZXNzIHRoZSBwYXJzZXIgc2hvdWxkIHVuaXF1ZSBTaWduYXR1cmVzKSwgYW5kIHRoZW4gcGFjayB0
aGF0IGludGVnZXIgaW50byB0aGUgY29kZSBwb2ludGVyLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTExCi0gICAgdm9pZCogY29kZTsKKworICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhY29kZSAmJiAhc2lnbmF0dXJlOyB9CisK
KyAgICAvLyBGSVhNRSBwYWNrIHRoaXMgaW5zaWRlIGEgKHVuaXF1ZWQpIGludGVnZXIgKGZvciBj
b3JyZWN0bmVzcyB0aGUgcGFyc2VyIHNob3VsZCB1bmlxdWUgU2lnbmF0dXJlcyksCisgICAgLy8g
YW5kIHRoZW4gcGFjayB0aGF0IGludGVnZXIgaW50byB0aGUgY29kZSBwb2ludGVyLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTExCisgICAgU2lnbmF0dXJlKiBz
aWduYXR1cmUgeyBudWxscHRyIH07IAorICAgIHZvaWQqIGNvZGUgeyBudWxscHRyIH07CiB9Owog
dHlwZWRlZiBWZWN0b3I8Q2FsbGFibGVGdW5jdGlvbj4gRnVuY3Rpb25JbmRleFNwYWNlOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIu
aAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4Miw2ICszODIsOCBAQCBib29sIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgfQogCiAgICAgY2FzZSBPcFR5
cGU6OkNhbGxJbmRpcmVjdDogeworICAgICAgICBpZiAoIW1faW5mby50YWJsZUluZm9ybWF0aW9u
KQorICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yTWVzc2FnZSgiY2FsbF9pbmRpcmVjdCBpcyBv
bmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkIik7CiAgICAgICAg
IHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OwogICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNp
Z25hdHVyZUluZGV4KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM5MCw2ICszOTIs
OSBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgIGlm
ICghcGFyc2VWYXJVSW50MShyZXNlcnZlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICAgICAgaWYgKHJlc2VydmVkICE9IDApCisgICAgICAgICAgICByZXR1cm4gc2V0RXJyb3JN
ZXNzYWdlKCJjYWxsX2luZGlyZWN0ICdyZXNlcnZlZCcgdmFydWludDEgbXVzdCBiZSAweDAiKTsK
KwogICAgICAgICBpZiAobV9pbmZvLnNpZ25hdHVyZXMuc2l6ZSgpIDw9IHNpZ25hdHVyZUluZGV4
KQogICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yTWVzc2FnZSgiVHJpZWQgdG8gdXNlIGEgc2ln
bmF0dXJlIG91dHNpZGUgdGhlIHJhbmdlIG9mIHZhbGlkIHNpZ25hdHVyZXMiKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDkgQEAgYm9vbCBNb2R1bGVQ
YXJzZXI6OnBhcnNlSW1wb3J0KCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgRXh0ZXJuYWw6OlRhYmxlOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAgICAgICAgICBib29s
IGlzSW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICghcGFyc2VUYWJsZUhlbHBlcihpc0lt
cG9ydCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5OiB7CkBAIC0zMDAsNDUg
KzMwMiw5OSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlKCkKK2Jvb2wgTW9kdWxl
UGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4mIG1heGltdW0pCiB7Ci0gICAgLy8gRklYTUUgaW1wbGVtZW50IHRhYmxl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKLSAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIEFTU0VSVCghbWF4aW11bSk7CisKKyAgICB1
aW50OF90IGZsYWdzOworICAgIGlmICghcGFyc2VWYXJVSW50MShmbGFncykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5pdGlhbCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChmbGFncykgeworICAgICAgICB1aW50MzJfdCBtYXhp
bXVtSW50OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG1heGltdW1JbnQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChpbml0aWFsID4gbWF4aW11bUludCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtYXhpbXVtID0gbWF4aW11bUlu
dDsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBh
cnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VU
YWJsZUhlbHBlcihib29sIGlzSW1wb3J0KQogewotICAgIC8vIFdlIGRvbid0IGFsbG93IHJlZGVj
bGFyaW5nIG1lbW9yeS4gRWl0aGVyIHZpYSBpbXBvcnQgb3IgZGVmaW5pdGlvbi4KLSAgICBpZiAo
bV9tb2R1bGUtPm1lbW9yeSkKKyAgICAvLyBXZSdyZSBvbmx5IGFsbG93ZWQgYSB0b3RhbCBvZiBv
bmUgVGFibGUgaW1wb3J0IG9yIGRlZmluaXRpb24uCisgICAgaWYgKG1faGFzVGFibGUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVpbnQ4X3QgZmxhZ3M7Ci0gICAgaWYgKCFwYXJzZVZh
clVJbnQxKGZsYWdzKSkKKyAgICBtX2hhc1RhYmxlID0gdHJ1ZTsKKworICAgIGludDhfdCB0eXBl
OworICAgIGlmICghcGFyc2VJbnQ3KHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQ4X3QgYW55ZnVuY1R5cGUgPSAtMTY7CisgICAgaWYgKHR5cGUg
IT0gYW55ZnVuY1R5cGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHVpbnQzMl90IGlu
aXRpYWw7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSkKKyAgICBzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgIGlmICghcGFyc2VSZXNpemFibGVMaW1pdHMoaW5p
dGlhbCwgbWF4aW11bSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghUGFnZUNv
dW50Ojppc1ZhbGlkKGluaXRpYWwpKQorICAgIEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+
PSBpbml0aWFsKTsKKworICAgIG1fbW9kdWxlLT50YWJsZUluZm9ybWF0aW9uID0gVGFibGVJbmZv
cm1hdGlvbihpbml0aWFsLCBtYXhpbXVtLCBpc0ltcG9ydCk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUoKQoreworICAgIHVpbnQzMl90IGNv
dW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBXZSBvbmx5IGFsbG93IG9uZSB0YWJsZSBmb3Igbm93LgorICAgIGlmIChj
b3VudCAhPSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQYWdlQ291bnQgaW5pdGlh
bFBhZ2VDb3VudChpbml0aWFsKTsKKyAgICBib29sIGlzSW1wb3J0ID0gZmFsc2U7CisgICAgcmV0
dXJuIHBhcnNlVGFibGVIZWxwZXIoaXNJbXBvcnQpOworfQorCitib29sIE1vZHVsZVBhcnNlcjo6
cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkKK3sKKyAgICAvLyBXZSBkb24ndCBhbGxv
dyByZWRlY2xhcmluZyBtZW1vcnkuIEVpdGhlciB2aWEgaW1wb3J0IG9yIGRlZmluaXRpb24uCisg
ICAgaWYgKG1fbW9kdWxlLT5tZW1vcnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFBh
Z2VDb3VudCBpbml0aWFsUGFnZUNvdW50OwogICAgIFBhZ2VDb3VudCBtYXhpbXVtUGFnZUNvdW50
OwotICAgIGlmIChmbGFncykgewotICAgICAgICB1aW50MzJfdCBtYXhpbXVtOwotICAgICAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKG1heGltdW0pKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgaW5p
dGlhbDsKKyAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKKyAgICAgICAg
aWYgKCFwYXJzZVJlc2l6YWJsZUxpbWl0cyhpbml0aWFsLCBtYXhpbXVtKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZChtYXhpbXVt
KSkKKyAgICAgICAgQVNTRVJUKCFtYXhpbXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOworICAg
ICAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZChpbml0aWFsKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICBtYXhpbXVtUGFnZUNvdW50ID0gUGFnZUNvdW50KG1heGltdW0p
OwotICAgICAgICBpZiAoaW5pdGlhbFBhZ2VDb3VudCA+IG1heGltdW1QYWdlQ291bnQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGluaXRpYWxQYWdlQ291bnQgPSBQYWdlQ291
bnQoaW5pdGlhbCk7CisKKyAgICAgICAgaWYgKG1heGltdW0pIHsKKyAgICAgICAgICAgIGlmICgh
UGFnZUNvdW50Ojppc1ZhbGlkKCptYXhpbXVtKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBtYXhpbXVtUGFnZUNvdW50ID0gUGFnZUNvdW50KCptYXhpbXVtKTsK
KyAgICAgICAgfQogICAgIH0KKyAgICBBU1NFUlQoaW5pdGlhbFBhZ2VDb3VudCk7CisgICAgQVNT
RVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VD
b3VudCk7CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0geyAwIH07CiAgICAg
bV9tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1h
eGltdW1QYWdlQ291bnQsIHBpbm5lZFNpemVzLCBpc0ltcG9ydCk7CkBAIC0zOTcsNyArNDUzLDcg
QEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgRXh0ZXJuYWw6OlRhYmxlOiB7Ci0gICAgICAgICAgICAv
LyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1Cisg
ICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NzgyCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4
dGVybmFsOjpNZW1vcnk6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmgJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzksMTIgKzc5
LDE1IEBAIHByaXZhdGU6CiAjdW5kZWYgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSCiAKICAg
ICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0
KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJ
bXBvcnQpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlUmVzaXphYmxlTGltaXRz
KHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4aW11bSk7CiAK
ICAgICBWTSogbV92bTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+IG1f
bW9kdWxlOwogICAgIEZ1bmN0aW9uSW5kZXhTcGFjZSBtX2Z1bmN0aW9uSW5kZXhTcGFjZTsKICAg
ICBWZWN0b3I8RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5PiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJp
bmFyeTsKICAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9oYXNUYWJsZSB7
IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuY3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3
IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmUKICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX21vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fbWVtb3J5KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90
YWJsZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbnVtSW1w
b3J0RnVuY3Rpb25zOyArK2kpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmlt
cG9ydEZ1bmN0aW9uKGkpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyMDk3MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
TWVtb3J5LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC03MSwxMSArNzIsMTYgQEAgcHVibGljOgogICAgIEpTV2ViQXNzZW1ibHlNZW1v
cnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9CiAgICAgdm9pZCBzZXRNZW1v
cnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpIHsgbV9tZW1vcnkuc2V0KHZt
LCB0aGlzLCBtZW1vcnkpOyB9CiAKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKCkgeyBy
ZXR1cm4gbV90YWJsZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0VGFibGUoVk0mIHZtLCBKU1dlYkFz
c2VtYmx5VGFibGUqIHRhYmxlKSB7IG1fdGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7IH0KKwog
ICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpCiAg
ICAgewogICAgICAgICByZXR1cm4gb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIHNpemVvZihX
cml0ZUJhcnJpZXI8SlNDZWxsPikgKiBpZHg7CiAgICAgfQogCisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSwgbV90YWJsZSk7IH0KKwogcHJvdGVjdGVkOgogICAgIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CkBA
IC05Niw2ICsxMDIsNyBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5
TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2Vt
Ymx5TWVtb3J5PiBtX21lbW9yeTsKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRhYmxl
PiBtX3RhYmxlOwogICAgIHVuc2lnbmVkIG1fbnVtSW1wb3J0RnVuY3Rpb25zOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuY3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjks
MTUgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNXZWJBc3Nl
bWJseVRhYmxlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlUYWJsZTo6c19pbmZvID0g
eyAiV2ViQXNzZW1ibHkuVGFibGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTV2ViQXNzZW1ibHlUYWJsZSkgfTsKKworSlNXZWJBc3NlbWJseVRhYmxlKiBKU1dlYkFz
c2VtYmx5VGFibGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJf
dCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQogewotICAgIGF1dG8q
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseVRhYmxl
Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseVRhYmxlKHZtLCBzdHJ1Y3R1cmUpOworICAgIGF1dG8q
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseVRhYmxl
Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseVRhYmxlKHZtLCBzdHJ1Y3R1cmUsIGluaXRpYWwsIG1h
eGltdW0pOwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGlu
c3RhbmNlOwogfQpAQCAtNDQsOSArNDcsMjIgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5VGFi
bGU6OmNyZWF0ZVN0cgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKIH0KIAotSlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJs
eVRhYmxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluaXRpYWwsIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUp
CiB7CisgICAgbV9zaXplID0gaW5pdGlhbDsKKyAgICBtX21heGltdW0gPSBtYXhpbXVtOworICAg
IEFTU0VSVCghbV9tYXhpbXVtIHx8ICptX21heGltdW0gPj0gbV9zaXplKTsKKworICAgIC8vIEZJ
WE1FOiBJdCBtaWdodCBiZSB3b3J0aCB0cnlpbmcgdG8gcHJlLWFsbG9jYXRlIG1heGltdW0gaGVy
ZS4gVGhlIHNwZWMgcmVjb21tZW5kcyBkb2luZyBzby4KKyAgICAvLyBCdXQgZm9yIG5vdywgd2Un
cmUgbm90IGRvaW5nIHRoYXQuCisgICAgbV9mdW5jdGlvbnMgPSBNYWxsb2NQdHI8V2FzbTo6Q2Fs
bGFibGVGdW5jdGlvbj46Om1hbGxvYyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlvbikgKiBt
X3NpemUpOworICAgIG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQdHI8V3JpdGVCYXJyaWVyPFdlYkFz
c2VtYmx5RnVuY3Rpb24+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlG
dW5jdGlvbj4pICogbV9zaXplKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXpl
OyArK2kpIHsKKyAgICAgICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxh
YmxlRnVuY3Rpb24oKTsKKyAgICAgICAgQVNTRVJUKCFtX2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWdu
YXR1cmUpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KKyAgICAgICAgbmV3
ICgmbV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rp
b24+KCk7CisgICAgfQogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQpAQCAtNjIsMTMgKzc4LDUwIEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpk
ZXN0cm95KEpTQ2VsbCoKIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KGNlbGwpOworICAgIEpTV2ViQXNzZW1i
bHlUYWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fc2l6ZTsgKytpKQorICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSk7CiB9CiAKLWNv
bnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5VGFibGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5
LlRhYmxlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2Vt
Ymx5VGFibGUpIH07Citib29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJfdCBuZXdT
aXplKQoreworICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG5ld1NpemUgPT0gbV9zaXplKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiAqbWF4aW11bSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHByb3RlY3Qgb3Vyc2VsdmVzIGZyb20gY3Jh
enkgc2l6ZXMgaGVyZS4KKyAgICBtX2Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXYXNtOjpDYWxs
YWJsZUZ1bmN0aW9uKSAqIG5ld1NpemUpOworICAgIG1fanNGdW5jdGlvbnMucmVhbGxvYyhzaXpl
b2YoV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+KSAqIG5ld1NpemUpOworCisgICAg
Zm9yICh1aW50MzJfdCBpID0gbV9zaXplOyBpIDwgbmV3U2l6ZTsgKytpKSB7CisgICAgICAgIG5l
dyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAg
ICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pIFdyaXRlQmFycmllcjxXZWJBc3NlbWJs
eUZ1bmN0aW9uPigpOworICAgIH0KKyAgICBtX3NpemUgPSBuZXdTaXplOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y2xlYXJGdW5jdGlvbih1aW50MzJf
dCBpbmRleCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV9q
c0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlv
bj4oKTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0
aW9uKCk7CisgICAgQVNTRVJUKCFtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uc2lnbmF0dXJlKTsg
Ly8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCit9CisKK3ZvaWQgSlNXZWJBc3Nl
bWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJs
eUZ1bmN0aW9uKiBmdW5jdGlvbikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6
ZSk7CisgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uc2V0KHZtLCB0aGlzLCBmdW5jdGlv
bik7CisgICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlv
bihmdW5jdGlvbi0+c2lnbmF0dXJlKCksIGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCgpKTsKK30K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCShyZXZpc2lvbiAyMDk3MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMjMgKzI5LDQ4IEBACiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9i
amVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5j
dGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
K25hbWVzcGFjZSBXYXNtIHsKK3N0cnVjdCBDYWxsYWJsZUZ1bmN0aW9uOworfQorCiBjbGFzcyBK
U1dlYkFzc2VtYmx5VGFibGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGlj
OgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBK
U1dlYkFzc2VtYmx5VGFibGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBK
U1dlYkFzc2VtYmx5VGFibGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGluaXRp
YWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pOwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAg
ICBERUNMQVJFX0lORk87CiAKLXByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0m
LCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9CisgICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQorICAgIGJvb2wgZ3Jvdyh1aW50MzJfdCBuZXdTaXplKSBXQVJOX1VOVVNF
RF9SRVRVUk47CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZ2V0RnVuY3Rpb24odWludDMyX3Qg
aW5kZXgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7Cisg
ICAgICAgIHJldHVybiBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5nZXQoKTsKKyAgICB9Cisg
ICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KTsKKyAgICB2b2lkIHNldEZ1bmN0
aW9uKFZNJiwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5RnVuY3Rpb24qKTsKKworICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
V2ViQXNzZW1ibHlUYWJsZSwgbV9zaXplKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxl
LCBtX2Z1bmN0aW9ucyk7IH0KKworcHJpdmF0ZToKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0m
LCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBt
YXhpbXVtKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisKKyAgICBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVGdW5jdGlvbj4g
bV9mdW5jdGlvbnM7CisgICAgTWFsbG9jUHRyPFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0
aW9uPj4gbV9qc0Z1bmN0aW9uczsKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtX21heGlt
dW07CisgICAgdWludDMyX3QgbV9zaXplOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsx
MTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjYWxsCiAgICAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBwcmV2SlNXZWJBc3NlbWJseUluc3RhbmNlID0gdm0udG9wSlNX
ZWJBc3NlbWJseUluc3RhbmNlOwogICAgIHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZSA9IGlu
c3RhbmNlKCk7CiAgICAgQVNTRVJUKGluc3RhbmNlKCkpOwotICAgIEVuY29kZWRKU1ZhbHVlIHJh
d1Jlc3VsdCA9IHZtRW50cnlUb1dhc20od2ViQXNzZW1ibHlDYWxsZWUoKS0+ZW50cnlwb2ludCgp
LCAmdm0sIHByb3RvQ2FsbEZyYW1lKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSByYXdSZXN1bHQgPSB2
bUVudHJ5VG9XYXNtKG1fanNFbnRyeXBvaW50LT5lbnRyeXBvaW50KCksICZ2bSwgcHJvdG9DYWxs
RnJhbWUpOwogICAgIHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZSA9IHByZXZKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U7CiAKICAgICAvLyBGSVhNRSBpcyB0aGlzIGNvcnJlY3Q/IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4NzYKQEAgLTE0MCwxMiArMTQwLDEyIEBA
IEVuY29kZWRKU1ZhbHVlIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNhbGwKICAgICByZXR1cm4gRW5j
b2RlZEpTVmFsdWUoKTsKIH0KIAotV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5j
dGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5z
dGFuY2UsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSwgV2FzbTo6U2lnbmF0dXJlKiBzaWdu
YXR1cmUpCitXZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5ndGgsIGNv
bnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJB
c3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50
cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCiB7CiAgICAgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRy
LCBuYW1lKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+d2ViQXNz
ZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0
aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0u
aGVhcCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
LSAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFt
ZSwgaW5zdGFuY2UsIGNhbGxlZSwgc2lnbmF0dXJlKTsKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3Jl
YXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSwgaW5zdGFuY2UsIGpzRW50cnlwb2lu
dCwgd2FzbUVudHJ5cG9pbnQsIHNpZ25hdHVyZSk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQog
CkBAIC0xNjYsMTUgKzE2NiwxOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hp
bGRyZW4oCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwotICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3dhc21DYWxsZWUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2pzRW50cnlwb2ludCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
d2FzbUVudHJ5cG9pbnQpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVu
Z3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2Us
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21DYWxsZWUsIFdhc206OlNpZ25hdHVyZSogc2lnbmF0
dXJlKQordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5h
dGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBX
YXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygp
KSk7CiAgICAgbV9pbnN0YW5jZS5zZXQodm0sIHRoaXMsIGluc3RhbmNlKTsKLSAgICBtX3dhc21D
YWxsZWUuc2V0KHZtLCB0aGlzLCB3YXNtQ2FsbGVlKTsKKyAgICBBU1NFUlQoanNFbnRyeXBvaW50
ICE9IHdhc21FbnRyeXBvaW50KTsKKyAgICBtX2pzRW50cnlwb2ludC5zZXQodm0sIHRoaXMsIGpz
RW50cnlwb2ludCk7CisgICAgbV93YXNtRW50cnlwb2ludC5zZXQodm0sIHRoaXMsIHdhc21FbnRy
eXBvaW50KTsKICAgICBtX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAko
cmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMiArMjgsMTIgQEAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUNhbGxlZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlOwogc3RydWN0IFByb3RvQ2FsbEZyYW1lOwogY2xhc3MgV2ViQXNzZW1ibHlJbnN0
YW5jZTsKIApAQCAtNTMsMjggKzUzLDI5IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlv
biogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSosIFdhc206OlNpZ25h
dHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQs
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmUqKTsK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUpOwogCi0gICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2ViQXNzZW1ibHlDYWxs
ZWUoKSBjb25zdCB7IHJldHVybiBtX3dhc21DYWxsZWUuZ2V0KCk7IH0KICAgICBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsg
fQotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKCkKKyAgICBXYXNtOjpTaWdu
YXR1cmUqIHNpZ25hdHVyZSgpCiAgICAgeyAKICAgICAgICAgQVNTRVJUKG1fc2lnbmF0dXJlKTsK
ICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlOwogICAgIH0KICAgICBFbmNvZGVkSlNWYWx1ZSBj
YWxsKFZNJiwgUHJvdG9DYWxsRnJhbWUqKTsKKyAgICB2b2lkKiB3YXNtRW50cnlwb2ludCgpIHsg
cmV0dXJuIG1fd2FzbUVudHJ5cG9pbnQtPmVudHJ5cG9pbnQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBs
ZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgSlNXZWJB
c3NlbWJseUNhbGxlZSosIFdhc206OlNpZ25hdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50
cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25h
dHVyZSopOwogCiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSopOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZT4gbV9pbnN0YW5jZTsKLSAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxl
ZT4gbV93YXNtQ2FsbGVlOworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBt
X2pzRW50cnlwb2ludDsKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4gbV93
YXNtRW50cnlwb2ludDsKICAgICBXYXNtOjpTaWduYXR1cmUqIG1fc2lnbmF0dXJlOwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDk3MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMCArODgsMTAgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIC8vIExldCBpbXBvcnRzIGJlIGFuIGlu
aXRpYWxseS1lbXB0eSBsaXN0IG9mIGV4dGVybmFsIHZhbHVlcy4KICAgICB1bnNpZ25lZCBudW1J
bXBvcnRGdW5jdGlvbnMgPSAwOwogCi0gICAgLy8gRklYTUUgaW1wbGVtZW50IFRhYmxlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKICAgICAvLyBGSVhNRSBp
bXBsZW1lbnQgR2xvYmFsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQxMzMKIAogICAgIGJvb2wgaGFzTWVtb3J5SW1wb3J0ID0gZmFsc2U7CisgICAgYm9vbCBoYXNU
YWJsZUltcG9ydCA9IGZhbHNlOwogICAgIC8vIEZvciBlYWNoIGltcG9ydCBpIGluIG1vZHVsZS5p
bXBvcnRzOgogICAgIGZvciAoYXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0
cykgewogICAgICAgICAvLyAxLiBMZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZv
cm1pbmcgR2V0KGltcG9ydE9iamVjdCwgaS5tb2R1bGVfbmFtZSkuCkBAIC0xMzEsMTIgKzEzMSwz
NiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpUYWJsZTog
eworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhpcyBz
aG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KICAgICAgICAgICAg
IC8vIDcuIE90aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6Ci0gICAgICAgICAgICAvLyBG
SVhNRSBpbXBsZW1lbnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDEzNQorICAgICAgICAgICAgaGFzVGFibGVJbXBvcnQgPSB0cnVlOworICAgICAgICAg
ICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJs
eVRhYmxlKj4odmFsdWUpOwogICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3Nl
bWJseS5UYWJsZSBvYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAgICAgICAgaWYgKCF0
YWJsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
IlRhYmxlIGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkp
KTsKKworICAgICAgICAgICAgdWludDMyX3QgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3Jt
YXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCk7CisgICAgICAgICAgICAvLyBGSVhNRTog
ZG8gd2UgY2FyZSBhYm91dCB0aGUgYWN0dWFsIHN0YXJ0aW5nICJpbml0aWFsIiB2YWx1ZSwgb3Ig
anVzdCB0aGUgY3VycmVudCAic2l6ZSIgb2YgdGhlIHRhYmxlLCBzaW5jZSB0YWJsZXMgY2FuIGdy
b3cuCisgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gdGhlIEpTIEFQ
SSwgYnV0IGlzbid0LgorICAgICAgICAgICAgdWludDMyX3QgYWN0dWFsSW5pdGlhbCA9IHRhYmxl
LT5zaXplKCk7CisgICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlh
bCkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlRh
YmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpKTsK
KworICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGV4cGVjdGVkTWF4aW11
bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7CisgICAg
ICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gYWN0dWFsTWF4aW11bSA9IHRhYmxl
LT5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgZG9lcyBub3QgaGF2ZSBhICdtYXhpbXVt
JyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCphY3R1YWxNYXhpbXVtID4gKmV4cGVjdGVkTWF4
aW11bSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0cyAnbWF4aW11bScg
aXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gaWkuIEFwcGVu
ZCB2IHRvIHRhYmxlcy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRv
IGltcG9ydHMuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgaW5zdGFuY2UtPnNldFRhYmxlKHZtLCB0YWJsZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpNZW1vcnk6IHsKQEAg
LTE4NSw3ICsyMDksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiAKICAgICB7CiAgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiBtb2R1
bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hv
dWxkIGVpdGhlciBoYXZlIGFuIGltcG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhj
ZXB0aW9uLgorICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgTWVtb3J5IGlt
cG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaGFzTWVtb3J5SW1wb3J0KTsKICAgICAgICAgfQogCkBAIC0yMDAsNiAr
MjI0LDIwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAg
ICAgfQogICAgIH0KIAorICAgIHsKKyAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24udGFi
bGVJbmZvcm1hdGlvbiAmJiBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1w
b3J0KCkpIHsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIFRhYmxlIGlt
cG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaGFzVGFibGVJbXBvcnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCEhbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbiAmJiAhaGFzVGFibGVJbXBvcnQp
IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUlu
Zm9ybWF0aW9uLmlzSW1wb3J0KCkpOworICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgVGFibGUg
d2hlbiBpdCdzIGEgVGFibGUgZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRU
YWJsZSh2bSwKKyAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCks
IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZv
cm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSkpOworICAgICAgICB9CisgICAgfQor
CiAgICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIGluc3RhbmNlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaWYgKHZlcmJvc2UpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29ucwogICAgICAgICAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlEZXNj
cmlwdG9yLT5nZXQoZXhlYywgbWF4aW11bSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgICAgICB1aW50MzJfdCBzaXplID0gZ2V0VWlu
dDMyKG1heFNpemVWYWx1ZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgICAgICAgICBpZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxpZChz
aXplKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJXZWJBc3NlbWJseS5NZW1vcnkgJ21heGltdW0nIHBhZ2UgY291bnQgaXMgdG9vIGxhcmdlIikp
KSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgICAgICAgICBtYXhpbXVtUGFnZUNvdW50ID0gV2FzbTo6UGFnZUNvdW50KHNpemUpOwogCiAg
ICAgICAgICAgICBpZiAoaW5pdGlhbFBhZ2VDb3VudCA+IG1heGltdW1QYWdlQ291bnQpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5pc2hD
cmVhCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdhc206OkV4
dGVybmFsOjpUYWJsZTogewotICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQorICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTc4MgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7CkBA
IC0xMzYsMTYgKzEzNiwxNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4
ZWNTCiAgICAgICAgICAgICAvLyAgICAgYS4gTGV0IGZ1bmMgYmUgYW4gRXhwb3J0ZWQgRnVuY3Rp
b24gRXhvdGljIE9iamVjdCBjcmVhdGVkIGZyb20gYy4KICAgICAgICAgICAgIC8vICAgICBiLiBB
cHBlbmQgZnVuYyB0byBmdW5jcy4KICAgICAgICAgICAgIC8vICAgICBjLiBSZXR1cm4gZnVuYy4K
LSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21DYWxsZWUgPSBtb2R1bGUtPmpz
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmZ1bmN0aW9uSW5kZXgp
OworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0g
bW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5mdW5j
dGlvbkluZGV4KTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBv
aW50Q2FsbGVlID0gbW9kdWxlLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZXhwLmZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlKiBz
aWduYXR1cmUgPSBtb2R1bGUtPnNpZ25hdHVyZUZvckZ1bmN0aW9uSW5kZXhTcGFjZShleHAuZnVu
Y3Rpb25JbmRleCk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9
IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUt
PmFyZ3VtZW50cy5zaXplKCksIGV4cC5maWVsZC5zdHJpbmcoKSwgaW5zdGFuY2UsIHdhc21DYWxs
ZWUsIHNpZ25hdHVyZSk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlv
biA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1
cmUtPmFyZ3VtZW50cy5zaXplKCksIGV4cC5maWVsZC5zdHJpbmcoKSwgaW5zdGFuY2UsIGpzRW50
cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZSk7CiAgICAgICAg
ICAgICBleHBvcnRlZFZhbHVlID0gZnVuY3Rpb247CiAgICAgICAgICAgICBpZiAoaGFzU3RhcnQg
JiYgc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPT0gZXhwLmZ1bmN0aW9uSW5kZXgpCiAgICAgICAg
ICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6VGFi
bGU6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3ODIKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Ok1lbW9yeTogewpAQCAtMTc0LDggKzE3
NSw5IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAgICAg
Ly8gRklYTUUgY2FuIHN0YXJ0IGNhbGwgaW1wb3J0cyAvIHRhYmxlcz8gVGhpcyBhc3N1bWVzIG5v
dC4gaHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9pc3N1ZXMvODk2CiAgICAg
ICAgIGlmICghbV9zdGFydEZ1bmN0aW9uLmdldCgpKSB7CiAgICAgICAgICAgICAvLyBUaGUgc3Rh
cnQgZnVuY3Rpb24gd2Fzbid0IGFkZGVkIGFib3ZlLiBJdCBtdXN0IGJlIGEgcHVyZWx5IGludGVy
bmFsIGZ1bmN0aW9uLgotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxl
ZSA9IG1vZHVsZS0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFy
dEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
dW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
aWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksICJzdGFydCIsIGluc3RhbmNlLCB3YXNtQ2FsbGVl
LCBzaWduYXR1cmUpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBv
aW50Q2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT53YXNtRW50cnlwb2ludENhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAg
ICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpLCAi
c3RhcnQiLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxl
ZSwgc2lnbmF0dXJlKTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMs
IGZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIgogCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmx1dC5oIgpAQCAtNDMsMTIgKzQ0LDY2IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJB
c3NlbWJseVRhYmxlQ29uc3RydWMKICBAZW5kCiAgKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKEV4ZWNTdGF0ZSogc3Rh
dGUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFz
c2VtYmx5VGFibGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAvLyBGSVhN
RSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVy
cm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVu
dCB0aGUgVGFibGUgY29uc3RydWN0b3IgcHJvcGVydHkiKSkpKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgYXV0byBnZXRVaW50MzIgPSBbJl0gKEpTVmFsdWUgdmFsdWUpIC0+IHVpbnQzMl90IHsK
KyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUudG9JbnRlZ2VyKGV4ZWMpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIGlmIChk
b3VibGVWYWx1ZSA8IDAgfHwgZG91YmxlVmFsdWUgPiBVSU5UX01BWCkgeworICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgICAgICBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUgZXhwZWN0cyB0
aGUgJ2luaXRpYWwnIGFuZCAnbWF4aW11bScgcHJvcGVydGllcyB0byBiZSBpbnRlZ2VycyBpbiB0
aGUgcmFuZ2U6IFswLCAyXjMyIC0gMV0iKSkpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihkb3VibGVWYWx1ZSk7
CisgICAgfTsKKworICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIHJlYWxseSBjbG9zZSB0
byBXZWJBc3NlbWJseS5NZW1vcnkgY29uc3RydWNvdHIsIHdlIGNvdWxkIHByb2JhYmx5CisgICAg
Ly8gZmFjdG9yIG91dCB0aGVpciBjb21tb24gYml0cyBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uLgor
CisgICAgSlNPYmplY3QqIG1lbW9yeURlc2NyaXB0b3I7CisgICAgeworICAgICAgICBKU1ZhbHVl
IGFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgICAgIGlmICghYXJndW1lbnQuaXNP
YmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
V2ViQXNzZW1ibHkuVGFibGUgZXhwZWN0cyBpdHMgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2Jq
ZWN0IikpKSk7CisgICAgICAgIG1lbW9yeURlc2NyaXB0b3IgPSBqc0Nhc3Q8SlNPYmplY3QqPihh
cmd1bWVudCk7CisgICAgfQorCisgICAgeworICAgICAgICBJZGVudGlmaWVyIGVsZW1lbnRJZGVu
dCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZWxlbWVudCIpOworICAgICAgICBKU1Zh
bHVlIGVsZW1lbnRWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBlbGVtZW50SWRl
bnQpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAg
ICAgIFN0cmluZyBlbGVtZW50U3RyaW5nID0gZWxlbWVudFZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAg
IGlmIChlbGVtZW50U3RyaW5nICE9ICJhbnlmdW5jIikKKyAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUgZXhwZWN0cyBpdHMgJ2Vs
ZW1lbnQnIGZpZWxkIHRvIGJlIHRoZSBzdHJpbmcgJ2FueWZ1bmMnIikpKSk7CisgICAgfQorCisg
ICAgSWRlbnRpZmllciBpbml0aWFsSWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
ImluaXRpYWwiKTsKKyAgICBKU1ZhbHVlIGluaXRpYWxTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlw
dG9yLT5nZXQoZXhlYywgaW5pdGlhbElkZW50KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CisgICAgdWludDMyX3QgaW5pdGlhbCA9IGdldFVpbnQzMihpbml0aWFs
U2l6ZVZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisK
KyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgIElkZW50aWZpZXIgbWF4
aW11bUlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtIik7CisgICAg
Ym9vbCBoYXNQcm9wZXJ0eSA9IG1lbW9yeURlc2NyaXB0b3ItPmhhc1Byb3BlcnR5KGV4ZWMsIG1h
eGltdW1JZGVudCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwor
ICAgIGlmIChoYXNQcm9wZXJ0eSkgeworICAgICAgICBKU1ZhbHVlIG1heFNpemVWYWx1ZSA9IG1l
bW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBtYXhpbXVtSWRlbnQpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIG1heGltdW0gPSBnZXRVaW50
MzIobWF4U2l6ZVZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOworCisgICAgICAgIGlmIChpbml0aWFsID4gKm1heGltdW0pIHsKKyAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwK
KyAgICAgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiJ21h
eGltdW0nIHByb3BlcnR5IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSAnaW5p
dGlhbCcgcHJvcGVydHkiKSkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLCBpbml0aWFsLCBtYXhp
bXVtKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dl
YkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBzdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAKICNpbmNsdWRlICJXZWJB
c3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oIgogCkBAIC00MiwxMCArNDMsMTM0IEBAIGNvbnN0
IENsYXNzSW5mbyBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXAKICBAZW5kCiAgKi8KIAotV2ViQXNz
ZW1ibHlUYWJsZVByb3RvdHlwZSogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZTo6Y3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3N0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTV2ViQXNzZW1ibHlUYWJsZSogZ2V0VGFibGUoRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0sIEpTVmFsdWUgdikKK3sKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHJlc3VsdCA9IGpzRHluYW1pY0Nh
c3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgCisgICAgICAgICAgICBjcmVhdGVUeXBl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJleHBlY3RlZCB8dGhpc3wgdmFsdWUgdG8gYmUgYW4g
aW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jTGVuZ3RoKEV4ZWNTdGF0ZSopOworRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR3JvdyhF
eGVjU3RhdGUqKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJs
ZVByb3RvRnVuY0dldChFeGVjU3RhdGUqKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldChFeGVjU3RhdGUqKTsKKworRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jTGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0
YWJsZSA9IGdldFRhYmxlKGV4ZWMsIHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIodGFibGUtPnNpemUoKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHcm93KEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGdldFRh
YmxlKGV4ZWMsIHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOworCisgICAgLy8gRklYTUU6IGxldHMgbWFrZSBhIGhlbHBlciBm
b3IgdGhpcyBhcyB0aGUgc3BlYyBoYXMgZG9uZS4KKyAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBl
eGVjLT5hcmd1bWVudCgwKS50b0ludGVnZXIoZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOworICAgIGlmIChkb3VibGVWYWx1ZSA8IDAgfHwgZG91YmxlVmFs
dWUgPiBVSU5UX01BWCkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LAorICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFz
c2VtYmx5LlRhYmxlLnByb3RvdHlwZS5ncm93IGV4cGVjdHMgYW4gaW50ZWdlciBhcmd1bWVudCBp
biB0aGUgcmFuZ2U6IFswLCAyXjMyIC0gMV0iKSkpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIGlmICghdGFibGUtPmdyb3coc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRvdWJsZVZh
bHVlKSkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAg
ICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRh
YmxlLnByb3RvdHlwZS5ncm93IGNvdWxkIG5vdCBncm93IHRoZSB0YWJsZSIpKSk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRh
YmxlUHJvdG9GdW5jR2V0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGdldFRhYmxlKGV4ZWMsIHZtLCBleGVjLT50
aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwor
CisgICAgLy8gRklYTUU6IGxldHMgbWFrZSBhIGhlbHBlciBmb3IgdGhpcyBhcyB0aGUgc3BlYyBo
YXMgZG9uZS4KKyAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKS50b0lu
dGVnZXIoZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwor
ICAgIGlmIChkb3VibGVWYWx1ZSA8IDAgfHwgZG91YmxlVmFsdWUgPiBVSU5UX01BWCkgeworICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlw
ZS5nZXQgZXhwZWN0cyBhbiBpbnRlZ2VyIGFyZ3VtZW50IGluIHRoZSByYW5nZTogWzAsIDJeMzIg
LSAxXSIpKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgdWludDMyX3QgaW5k
ZXggPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZG91YmxlVmFsdWUpOworICAgIGlmIChpbmRleCA+
PSB0YWJsZS0+c2l6ZSgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsCisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2Vi
QXNzZW1ibHkuVGFibGUucHJvdG90eXBlLmdldCBleHBlY3RzIGFuIGludGVnZXIgbGVzcyB0aGFu
IHRoZSBzaXplIG9mIHRoZSB0YWJsZSIpKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgaWYgKFdlYkFzc2VtYmx5RnVuY3Rpb24qIHJlc3VsdCA9IHRhYmxlLT5nZXRGdW5jdGlv
bihpbmRleCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGdl
dFRhYmxlKGV4ZWMsIHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2Fz
dDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odmFsdWUpOworICAgIGlmICghdmFsdWUuaXNOdWxsKCkg
JiYgIWZ1bmN0aW9uKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
CisgICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3Nl
bWJseS5UYWJsZS5wcm90b3R5cGUuc2V0IGV4cGVjdHMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBi
ZSBudWxsIG9yIGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LkZ1bmN0aW9uIikpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogbGV0cyBtYWtlIGEgaGVscGVy
IGZvciB0aGlzIGFzIHRoZSBzcGVjIGhhcyBkb25lLgorICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50ZWdlcihleGVjKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBkb3VibGVW
YWx1ZSA+IFVJTlRfTUFYKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsCisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2Vi
QXNzZW1ibHkuVGFibGUucHJvdG90eXBlLnNldCBleHBlY3RzIGl0cyBmaXJzdCBhcmd1bWVudCB0
byBiZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZTogWzAsIDJeMzIgLSAxXSIpKSk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgdWludDMyX3QgaW5kZXggPSBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oZG91YmxlVmFsdWUpOworICAgIGlmIChpbmRleCA+PSB0YWJsZS0+c2l6ZSgpKSB7
CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUucHJv
dG90eXBlLnNldCBleHBlY3RzIGFuIGludGVnZXIgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSB0
YWJsZSIpKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYgKHZhbHVlLmlz
TnVsbCgpKQorICAgICAgICB0YWJsZS0+Y2xlYXJGdW5jdGlvbihpbmRleCk7CisgICAgZWxzZSB7
CisgICAgICAgIEFTU0VSVCghIWZ1bmN0aW9uKTsKKyAgICAgICAgdGFibGUtPnNldEZ1bmN0aW9u
KHZtLCBpbmRleCwgZnVuY3Rpb24pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKiBX
ZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBhdXRvKiBvYmplY3Qg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlPih2
bS5oZWFwKSkgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKLSAgICBv
YmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZt
LCBnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKQEAgLTU0LDkgKzE3OSwx
NCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6OmNyCiAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2Vt
Ymx5VGFibGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3ZvaWQgV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAgIEpT
Q19OQVRJVkVfR0VUVEVSKCJsZW5ndGgiLCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jTGVuZ3Ro
LCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTigiZ3JvdyIsIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHcm93LCBEb250RW51
bSwgMSk7CisgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oImdldCIs
IHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigic2V0Iiwgd2ViQXNzZW1ibHlUYWJsZVBy
b3RvRnVuY1NldCwgRG9udEVudW0sIDIpOwogfQogCiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBl
OjpXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogcHJv
dGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIAogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJs
eVRhYmxlUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296981</attachid>
            <date>2016-12-12 19:03:22 -0800</date>
            <delta_ts>2016-12-13 12:27:00 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>91591</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk3NDYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDU2IEBACisyMDE2LTEyLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBpbXBsZW1lbnQgdGhlIHRhYmxlIHNlY3Rpb24g
YW5kIHRhYmxlIGltcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1NzE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3YXNtL0J1aWxkZXIuanM6CisgICAgICAgIChjb25zdC5faW1wb3J0TWVtb3J5
Q29udGludWF0aW9uKToKKyAgICAgICAgKGNvbnN0Ll9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbik6
CisgICAgICAgIChleHBvcnQuZGVmYXVsdC5CdWlsZGVyLnByb3RvdHlwZS5fcmVnaXN0ZXJTZWN0
aW9uQnVpbGRlcnMuc3dpdGNoLmNhc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUudGhpcy5zZWN0aW9u
KToKKyAgICAgICAgKGNvbnN0Ll9pbXBvcnRNZW1vcnlDb250aW51YXRpb24uc2VjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChjb25zdC5faW1wb3J0
TWVtb3J5Q29udGludWF0aW9uLmFzc2VydCk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9CdWls
ZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzOgorICAgICAgICAocHV0UmVzaXphYmxlTGltaXRzKToK
KyAgICAgICAgKHB1dFRhYmxlKToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLlR5cGUpOiBEZWxl
dGVkLgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuSW1wb3J0KTogRGVsZXRlZC4KKyAgICAgICAg
KGNvbnN0LmVtaXR0ZXJzLkZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0LmVtaXR0
ZXJzLlRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLk1lbW9yeSk6IERl
bGV0ZWQuCisgICAgICAgIChjb25zdC5lbWl0dGVycy5HbG9iYWwpOiBEZWxldGVkLgorICAgICAg
ICAoY29uc3QuZW1pdHRlcnMuRXhwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0LmVtaXR0
ZXJzLlN0YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkVsZW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuQ29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChjb25zdC5lbWl0dGVycy5EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKGV4cG9ydC5jb25zdC5C
aW5hcnkpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvY2FsbC1pbmRp
cmVjdC1wYXJhbXMuanM6IFJlbW92ZWQuCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9j
YWxsLWluZGlyZWN0LmpzOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMv
dGFibGUtYmFzaWMtMi5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0
cmluZ19hcHBlYXJlZF9oZXJlLm1ha2VJbnN0YW5jZSk6CisgICAgICAgIChmdW5jKToKKyAgICAg
ICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2ljLmpzOiBBZGRlZC4KKyAgICAgICAg
KGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUubWFrZUluc3RhbmNlKToK
KyAgICAgICAgKiB3YXNtL2pzLWFwaS9jYWxsLWluZGlyZWN0LXJlc3VsdHMuanM6IFJlbW92ZWQu
CisgICAgICAgICogd2FzbS9qcy1hcGkvY2FsbC1pbmRpcmVjdC5qczoKKyAgICAgICAgKGNvbnN0
Lndhc21Nb2R1bGVXaGljaEltcG9ydEpTKToKKyAgICAgICAgKGNvbnN0Lm1ha2VUYWJsZSk6Cisg
ICAgICAgIChQb2x5cGhpYzJJbXBvcnQpOgorICAgICAgICAoVmlydHVhbEltcG9ydCk6CisgICAg
ICAgIChNb25vbW9ycGhpY0ltcG9ydCk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy1hcGkv
dGFibGUuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0QmFkQmluYXJ5KToKKyAgICAgICAgKGFz
c2VydC50cnV0aHkpOgorICAgICAgICAoYXNzZXJ0QmFkVGFibGUpOgorICAgICAgICAoYXNzZXJ0
QmFkVGFibGVJbXBvcnQpOgorICAgICAgICAoYXNzZXJ0QmFkQmluYXJ5LmFzc2VydEJhZFRhYmxl
SW5zdGFuY2UpOgorICAgICAgICAoYXNzZXJ0QmFkVGFibGVJbnN0YW5jZSk6CisgICAgICAgICog
d2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanM6CisgICAgICAgIChjb25zdC5jLmluLmNvbnN0
cnVjdG9yUHJvcGVydGllcy5zd2l0Y2gpOgorCiAyMDE2LTEyLTEyICBNaWNoYWVsIFNhYm9mZiAg
PG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjIwOTY1Myk6IHNwZWVk
b21ldGVyIGNyYXNoZXMgbWFraW5nIHZpcnR1YWwgc2xvdyBwYXRoIHRhaWxjYWxscwpJbmRleDog
SlNUZXN0cy93YXNtL0J1aWxkZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL0J1aWxk
ZXIuanMJKHJldmlzaW9uIDIwOTcwNCkKKysrIEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwyMiBAQCBjb25zdCBfaW1wb3J0RnVuY3Rpb25Db250
aW51YXRpb24gPSAoYnVpCiAKIGNvbnN0IF9pbXBvcnRNZW1vcnlDb250aW51YXRpb24gPSAoYnVp
bGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKICAgICByZXR1cm4gKG1vZHVsZSwgZmll
bGQsIG1lbW9yeURlc2NyaXB0aW9uKSA9PiB7Ci0gICAgICAgIGFzc2VydC5pc1N0cmluZyhtb2R1
bGUsIGBJbXBvcnQgZnVuY3Rpb24gbW9kdWxlIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke21v
ZHVsZX0iYCk7Ci0gICAgICAgIGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEltcG9ydCBmdW5jdGlv
biBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CisgICAgICAgIGFz
c2VydC5pc1N0cmluZyhtb2R1bGUsIGBJbXBvcnQgTWVtb3J5IG1vZHVsZSBzaG91bGQgYmUgYSBz
dHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQs
IGBJbXBvcnQgTWVtb3J5IGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJg
KTsKICAgICAgICAgc2VjdGlvbi5kYXRhLnB1c2goe21vZHVsZSwgZmllbGQsIGtpbmQ6ICJNZW1v
cnkiLCBtZW1vcnlEZXNjcmlwdGlvbn0pOwogICAgICAgICByZXR1cm4gbmV4dEJ1aWxkZXI7CiAg
ICAgfTsKIH07CiAKK2NvbnN0IF9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBz
ZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4geworICAgIHJldHVybiAobW9kdWxlLCBmaWVsZCwgdGFi
bGVEZXNjcmlwdGlvbikgPT4geworICAgICAgICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1w
b3J0IFRhYmxlIG1vZHVsZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOwor
ICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQgVGFibGUgZmllbGQgc2hvdWxk
IGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAgICBzZWN0aW9uLmRhdGEucHVz
aCh7bW9kdWxlLCBmaWVsZCwga2luZDogIlRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbn0pOworICAg
ICAgICByZXR1cm4gbmV4dEJ1aWxkZXI7CisgICAgfTsKK307CisKIGNvbnN0IF9leHBvcnRGdW5j
dGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewog
ICAgIHJldHVybiAoZmllbGQsIGluZGV4LCB0eXBlKSA9PiB7CiAgICAgICAgIGFzc2VydC5pc1N0
cmluZyhmaWVsZCwgYEV4cG9ydCBmdW5jdGlvbiBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdv
dCAiJHtmaWVsZH0iYCk7CkBAIC0yOTksMTIgKzMwOCwzMSBAQCBjb25zdCBfY3JlYXRlRnVuY3Rp
b24gPSAoc2VjdGlvbiwgYnVpbGRlCiAKICAgICAgICAgaWYgKHR5cGVvZihzaWduYXR1cmUpID09
PSAidW5kZWZpbmVkIikKICAgICAgICAgICAgIHNpZ25hdHVyZSA9IHsgcGFyYW1zOiBbXSB9Owot
ICAgICAgICBhc3NlcnQuaGFzT2JqZWN0UHJvcGVydHkoc2lnbmF0dXJlLCAicGFyYW1zIiwgYEV4
cGVjdCBmdW5jdGlvbiBzaWduYXR1cmUgdG8gYmUgYW4gb2JqZWN0IHdpdGggYSAicGFyYW1zIiBm
aWVsZCwgZ290ICIke3NpZ25hdHVyZX0iYCk7Ci0gICAgICAgIGNvbnN0IFtwYXJhbXMsIHJldF0g
PSBfbm9ybWFsaXplRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlLnBhcmFtcywgc2lnbmF0dXJl
LnJldCk7Ci0gICAgICAgIHNpZ25hdHVyZSA9IHsgcGFyYW1zOiBwYXJhbXMsIHJldDogcmV0IH07
CisKKyAgICAgICAgbGV0IHR5cGU7CisgICAgICAgIGxldCBwYXJhbXM7CisgICAgICAgIGlmICh0
eXBlb2Ygc2lnbmF0dXJlID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgYXNzZXJ0Lmhhc09i
amVjdFByb3BlcnR5KHNpZ25hdHVyZSwgInBhcmFtcyIsIGBFeHBlY3QgZnVuY3Rpb24gc2lnbmF0
dXJlIHRvIGJlIGFuIG9iamVjdCB3aXRoIGEgInBhcmFtcyIgZmllbGQsIGdvdCAiJHtzaWduYXR1
cmV9ImApOworICAgICAgICAgICAgbGV0IHJldDsKKyAgICAgICAgICAgIChbcGFyYW1zLCByZXRd
ID0gX25vcm1hbGl6ZUZ1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZS5wYXJhbXMsIHNpZ25hdHVy
ZS5yZXQpKTsKKyAgICAgICAgICAgIHNpZ25hdHVyZSA9IHtwYXJhbXMsIHJldH07CisgICAgICAg
ICAgICB0eXBlID0gX21heWJlUmVnaXN0ZXJUeXBlKGJ1aWxkZXIsIHNpZ25hdHVyZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KHR5cGVvZiBzaWduYXR1cmUg
PT09ICJudW1iZXIiKTsKKyAgICAgICAgICAgIGNvbnN0IHR5cGVTZWN0aW9uID0gYnVpbGRlci5f
Z2V0U2VjdGlvbigiVHlwZSIpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSghIXR5cGVTZWN0
aW9uKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgYWxsb3cgaW5kaWNlcyB0aGF0
IGV4Y2VlZCB0aGlzIHRvIGJlIGFibGUgdG8KKyAgICAgICAgICAgIC8vIHRlc3QgSlNDcyB2YWxp
ZGF0b3IgaXMgY29ycmVjdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTc4NgorICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShzaWduYXR1cmUgPCB0eXBlU2VjdGlv
bi5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICB0eXBlID0gc2lnbmF0dXJlOworICAgICAgICAg
ICAgc2lnbmF0dXJlID0gdHlwZVNlY3Rpb24uZGF0YVtzaWduYXR1cmVdOworICAgICAgICAgICAg
YXNzZXJ0Lmhhc09iamVjdFByb3BlcnR5KHNpZ25hdHVyZSwgInBhcmFtcyIsIGBFeHBlY3QgZnVu
Y3Rpb24gc2lnbmF0dXJlIHRvIGJlIGFuIG9iamVjdCB3aXRoIGEgInBhcmFtcyIgZmllbGQsIGdv
dCAiJHtzaWduYXR1cmV9ImApOworICAgICAgICAgICAgcGFyYW1zID0gc2lnbmF0dXJlLnBhcmFt
czsKKyAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IGZ1bmMgPSB7CiAgICAgICAgICAgICBuYW1l
OiBmdW5jdGlvbk5hbWUsCi0gICAgICAgICAgICB0eXBlOiBfbWF5YmVSZWdpc3RlclR5cGUoYnVp
bGRlciwgc2lnbmF0dXJlKSwKKyAgICAgICAgICAgIHR5cGUsCiAgICAgICAgICAgICBzaWduYXR1
cmU6IHNpZ25hdHVyZSwKICAgICAgICAgICAgIGxvY2FsczogcGFyYW1zLmNvbmNhdChsb2NhbHMp
LCAvLyBQYXJhbWV0ZXJzIGFyZSB0aGUgZmlyc3QgbG9jYWxzLgogICAgICAgICAgICAgcGFyYW1l
dGVyQ291bnQ6IHBhcmFtcy5sZW5ndGgsCkBAIC0zNzksMTEgKzQwNywxMSBAQCBleHBvcnQgZGVm
YXVsdCBjbGFzcyBCdWlsZGVyIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMu
X2FkZFNlY3Rpb24oc2VjdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltcG9ydEJ1
aWxkZXIgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHRoaXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBUYWJsZTogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1w
bGVtZW50ZWQ6IGltcG9ydCB0YWJsZWApOyB9LAogICAgICAgICAgICAgICAgICAgICAgICAgR2xv
YmFsOiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1wb3J0IGdsb2Jh
bGApOyB9LAogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBpbXBv
cnRCdWlsZGVyLkZ1bmN0aW9uID0gX2ltcG9ydEZ1bmN0aW9uQ29udGludWF0aW9uKHRoaXMsIHMs
IGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLk1lbW9y
eSA9IF9pbXBvcnRNZW1vcnlDb250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7Cisg
ICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuVGFibGUgPSBfaW1wb3J0VGFibGVDb250
aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBpbXBvcnRCdWlsZGVyOwogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC00MDAsOCArNDI4LDE3IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIg
ewogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlICJUYWJsZSI6Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUUgSW1wbGVtZW50IHRhYmxlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKLSAgICAgICAgICAgICAgICB0aGlzW3NlY3Rp
b25dID0gKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlw
ZSAiJHtzZWN0aW9ufSJgKTsgfTsKKyAgICAgICAgICAgICAgICB0aGlzW3NlY3Rpb25dID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9hZGRTZWN0aW9u
KHNlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBvcnRCdWlsZGVyID0gewor
ICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgVGFibGU6ICh0YWJsZURlc2NyaXB0aW9uKSA9PiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcy5kYXRhLnB1c2goe3RhYmxlRGVzY3JpcHRpb259KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXhwb3J0QnVpbGRlcjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGV4cG9ydEJ1aWxkZXI7CisgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjoKSW5kZXg6IEpTVGVzdHMvd2FzbS9C
dWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9C
dWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCShyZXZpc2lvbiAyMDk3MDQpCisrKyBKU1Rlc3Rz
L3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksMjggQEAgaW1wb3J0ICogYXMgV0FTTSBmcm9tICdXQVNNLmpzJzsKIAogY29uc3QgcHV0
ID0gKGJpbiwgdHlwZSwgdmFsdWUpID0+IGJpblt0eXBlXSh2YWx1ZSk7CiAKK2NvbnN0IHB1dFJl
c2l6YWJsZUxpbWl0cyA9IChiaW4sIGluaXRpYWwsIG1heGltdW0pID0+IHsKKyAgICBhc3NlcnQu
dHJ1dGh5KHR5cGVvZiBpbml0aWFsID09PSAibnVtYmVyIiwgIldlIGV4cGVjdCAnaW5pdGlhbCcg
dG8gYmUgYW4gaW50ZWdlciIpOworICAgIGxldCBoYXNNYXhpbXVtID0gMDsKKyAgICBpZiAodHlw
ZW9mIG1heGltdW0gPT09ICJudW1iZXIiKSB7CisgICAgICAgIGhhc01heGltdW0gPSAxOworICAg
IH0gZWxzZSB7CisgICAgICAgIGFzc2VydC50cnV0aHkodHlwZW9mIG1heGltdW0gPT09ICJ1bmRl
ZmluZWQiLCAiV2UgZXhwZWN0ICdtYXhpbXVtJyB0byBiZSBhbiBpbnRlZ2VyIGlmIGl0J3MgZGVm
aW5lZCIpOworICAgIH0KKworICAgIHB1dChiaW4sICJ2YXJ1aW50MSIsIGhhc01heGltdW0pOwor
ICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBpbml0aWFsKTsKKyAgICBpZiAoaGFzTWF4aW11bSkK
KyAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIG1heGltdW0pOworfTsKKworY29uc3QgcHV0
VGFibGUgPSAoYmluLCB7aW5pdGlhbCwgbWF4aW11bSwgZWxlbWVudH0pID0+IHsKKyAgICBhc3Nl
cnQudHJ1dGh5KFdBU00uaXNWYWxpZFR5cGUoZWxlbWVudCksICJXZSBleHBlY3QgJ2VsZW1lbnQn
IHRvIGJlIGEgdmFsaWQgdHlwZS4gSXQgd2FzOiAiICsgZWxlbWVudCk7CisgICAgcHV0KGJpbiwg
InZhcmludDciLCBXQVNNLnR5cGVWYWx1ZVtlbGVtZW50XSk7CisKKyAgICBwdXRSZXNpemFibGVM
aW1pdHMoYmluLCBpbml0aWFsLCBtYXhpbXVtKTsKK307CisKIGNvbnN0IGVtaXR0ZXJzID0gewog
ICAgIFR5cGU6IChzZWN0aW9uLCBiaW4pID0+IHsKICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQz
MiIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOwpAQCAtNTcsMjMgKzc5LDEzIEBAIGNvbnN0IGVtaXR0
ZXJzID0gewogICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBlbnRyeS50eXBl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
c2UgIlRhYmxlIjogdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7CisgICAg
ICAgICAgICBjYXNlICJUYWJsZSI6IHsKKyAgICAgICAgICAgICAgICBwdXRUYWJsZShiaW4sIGVu
dHJ5LnRhYmxlRGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjogewogICAgICAgICAgICAgICAgIGxldCB7
aW5pdGlhbCwgbWF4aW11bX0gPSBlbnRyeS5tZW1vcnlEZXNjcmlwdGlvbjsKLSAgICAgICAgICAg
ICAgICBhc3NlcnQudHJ1dGh5KHR5cGVvZiBpbml0aWFsID09PSAibnVtYmVyIiwgIldlIGV4cGVj
dCAnaW5pdGlhbCcgdG8gYmUgYSBudW1iZXIiKTsKLSAgICAgICAgICAgICAgICBpbml0aWFsIHw9
IDA7Ci0gICAgICAgICAgICAgICAgbGV0IGhhc01heGltdW0gPSAwOwotICAgICAgICAgICAgICAg
IGlmICh0eXBlb2YgbWF4aW11bSA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgICAgICAgICAg
bWF4aW11bSB8PSAwOwotICAgICAgICAgICAgICAgICAgICBoYXNNYXhpbXVtID0gMTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KHR5
cGVvZiBtYXhpbXVtID09PSAidW5kZWZpbmVkIiwgIldlIGV4cGVjdCAnbWF4aW11bScgdG8gYmUg
YSBudW1iZXIgaWYgaXQncyBkZWZpbmVkIik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQxIiwgaGFzTWF4aW11bSk7Ci0gICAgICAgICAgICAg
ICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGluaXRpYWwpOwotICAgICAgICAgICAgICAgIGlmICho
YXNNYXhpbXVtKQotICAgICAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgbWF4
aW11bSk7CisgICAgICAgICAgICAgICAgcHV0UmVzaXphYmxlTGltaXRzKGJpbiwgaW5pdGlhbCwg
bWF4aW11bSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgY2FzZSAiR2xvYmFsIjogdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVk
YCk7CkBAIC04Nyw3ICs5OSwxMiBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAgICAgICAgIHB1
dChiaW4sICJ2YXJ1aW50MzIiLCBzaWduYXR1cmUpOwogICAgIH0sCiAKLSAgICBUYWJsZTogKHNl
Y3Rpb24sIGJpbikgPT4geyB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsg
fSwKKyAgICBUYWJsZTogKHNlY3Rpb24sIGJpbikgPT4geworICAgICAgICBwdXQoYmluLCAidmFy
dWludDMyIiwgc2VjdGlvbi5kYXRhLmxlbmd0aCk7CisgICAgICAgIGZvciAoY29uc3Qge3RhYmxl
RGVzY3JpcHRpb259IG9mIHNlY3Rpb24uZGF0YSkgeworICAgICAgICAgICAgcHV0VGFibGUoYmlu
LCB0YWJsZURlc2NyaXB0aW9uKTsKKyAgICAgICAgfQorICAgIH0sCiAKICAgICBNZW1vcnk6IChz
ZWN0aW9uLCBiaW4pID0+IHsKICAgICAgICAgLy8gRmxhZ3MsIGN1cnJlbnRseSBjYW4gb25seSBi
ZSBbMCwxXQpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NhbGwtaW5kaXJlY3Qt
cGFyYW1zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9jYWxs
LWluZGlyZWN0LXBhcmFtcy5qcwkocmV2aXNpb24gMjA5NzA0KQorKysgSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL2NhbGwtaW5kaXJlY3QtcGFyYW1zLmpzCShub25leGlzdGVudCkKQEAgLTEs
MjggKzAsMCBAQAotaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKLQotY29uc3Qg
YiA9IG5ldyBCdWlsZGVyKCk7Ci1iLlR5cGUoKS5FbmQoKQotICAgIC5GdW5jdGlvbigpLkVuZCgp
Ci0gICAgLkNvZGUoKQotCi0gICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJp
MzIiIH0pCi0gICAgLkkzMkNvbnN0KDEpCi0gICAgLkVuZCgpCi0KLSAgICAuRnVuY3Rpb24oeyBw
YXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKLSAgICAuR2V0TG9jYWwoMCkKLSAgICAuRW5k
KCkKLQotICAgIC5GdW5jdGlvbih7IHBhcmFtczogWyJpMzIiLCAiaTMyIl0sIHJldDogImkzMiIg
fSkKLSAgICAuR2V0TG9jYWwoMSkKLSAgICAuR2V0TG9jYWwoMCkKLSAgICAuQ2FsbEluZGlyZWN0
KDAsIDApCi0gICAgLkVuZCgpCi0KLQotY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpCi1iaW4u
dHJpbSgpOwotdGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMoYmluLmdldCgpLCAzLCBbXSwgW10sCi0g
ICAgICAgICAgICAgICAgICAgICAgICBbW3sgdHlwZTogImkzMiIsIHZhbHVlOiAxIH0sIFt7IHR5
cGU6ICJpMzIiLCB2YWx1ZTogMCB9LCB7IHR5cGU6ICJpMzIiLCB2YWx1ZTogNCB9XV0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgW3sgdHlwZTogImkzMiIsIHZhbHVlOiA0IH0sIFt7IHR5cGU6
ICJpMzIiLCB2YWx1ZTogMSB9LCB7IHR5cGU6ICJpMzIiLCB2YWx1ZTogNCB9XV0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICBdKTsKSW5kZXg6IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9j
YWxsLWluZGlyZWN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0
cy9jYWxsLWluZGlyZWN0LmpzCShyZXZpc2lvbiAyMDk3MDQpCisrKyBKU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvY2FsbC1pbmRpcmVjdC5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDI3ICswLDAg
QEAKLWltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCi0KLWNvbnN0IGIgPSBuZXcg
QnVpbGRlcigpOwotYi5UeXBlKCkuRW5kKCkKLSAgICAuRnVuY3Rpb24oKS5FbmQoKQotICAgIC5D
b2RlKCkKLQotICAgIC5GdW5jdGlvbih7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKLSAgICAu
STMyQ29uc3QoMSkKLSAgICAuRW5kKCkKLQotICAgIC5GdW5jdGlvbih7IHBhcmFtczogW10sIHJl
dDogImkzMiIgfSkKLSAgICAuSTMyQ29uc3QoMikKLSAgICAuRW5kKCkKLQotICAgIC5GdW5jdGlv
bih7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQotICAgIC5HZXRMb2NhbCgwKQotICAg
IC5DYWxsSW5kaXJlY3QoMCwgMCkKLSAgICAuRW5kKCkKLQotCi1jb25zdCBiaW4gPSBiLldlYkFz
c2VtYmx5KCkKLWJpbi50cmltKCk7Ci10ZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhiaW4uZ2V0KCks
IDMsIFtdLCBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFtbeyB0eXBlOiAiaTMyIiwgdmFs
dWU6IDEgfSwgW3sgdHlwZTogImkzMiIsIHZhbHVlOiAwIH1dXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBbeyB0eXBlOiAiaTMyIiwgdmFsdWU6IDEgfSwgW3sgdHlwZTogImkzMiIsIHZhbHVl
OiAwIH1dXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF0pOwpJbmRleDogSlNUZXN0cy93YXNt
L2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2ljLTIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93
YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2ljLTIuanMJKG5vbmV4aXN0ZW50KQorKysgSlNU
ZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2ljLTIuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NyBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2lt
cG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK2Z1bmN0aW9uIG1ha2VJbnN0
YW5jZShmdW5jKSB7CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAg
LlR5cGUoKQorICAgICAgICAgICAgLkZ1bmMoWyJpMzIiLCAiaTMyIl0sICJpMzIiKQorICAgICAg
ICAgICAgLkZ1bmMoWyJpMzIiXSwgImkzMiIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuSW1w
b3J0KCkKKyAgICAgICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwge2luaXRpYWw6IDIwLCBl
bGVtZW50OiAiYW55ZnVuYyJ9KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIs
IHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5j
dGlvbigiZm9vIikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFyIikKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgMCAvKlsnaTMy
JywgJ2kzMiddID0+ICdpMzInKi8pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDEpIC8vIHBh
cmFtZXRlciB0byBjYWxsCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApIC8vIGNhbGwgaW5k
ZXgKKyAgICAgICAgICAgICAgICAuQ2FsbEluZGlyZWN0KDEsIDApIC8vIGNhbGxpbmcgZnVuY3Rp
b24gb2YgdHlwZSBbJ2kzMiddID0+ICdpMzInCisgICAgICAgICAgICAgICAgLlJldHVybigpCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFyIiwgMSAvKlsnaTMy
J10gPT4gJ2kzMicqLykKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAg
ICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FbmQoKTsKKworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluKTsKKyAgICBjb25zdCB0YWJsZSA9IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDog
MjAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pOworICAgIHJldHVybiB7aW5zdGFuY2U6IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHt0YWJsZSwgZnVuY319KSwgdGFibGV9Owor
fQorCit7CisgICAgbGV0IGk7CisgICAgZnVuY3Rpb24gZnVuYyh4KSB7CisgICAgICAgIGlmICh4
ICE9PSBpKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXJndW1lbnQiKTsKKyAg
ICAgICAgcmV0dXJuIHggKyA0NDsKKyAgICB9CisgICAgY29uc3Qge2luc3RhbmNlLCB0YWJsZX0g
PSBtYWtlSW5zdGFuY2UoZnVuYyk7CisgICAgY29uc3QgZXhwb3J0cyA9IGluc3RhbmNlLmV4cG9y
dHM7CisgICAgY29uc3QgZm9vID0gZXhwb3J0cy5mb287CisgICAgdGFibGUuc2V0KDAsIGV4cG9y
dHMuYmFyKTsKKyAgICBhc3NlcnQuZXEodGFibGUuZ2V0KDApLCBleHBvcnRzLmJhcik7CisKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBpZiAoZm9vKDAsIGkpICE9
PSBpICsgNDQpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBjYWxsIGluZGlyZWN0
Iik7CisgICAgfQorfQpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJh
c2ljLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy90YWJsZS1i
YXNpYy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdGFi
bGUtYmFzaWMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAoraW1wb3J0IEJ1aWxk
ZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3Nl
cnQuanMnCisKK2Z1bmN0aW9uIG1ha2VJbnN0YW5jZSgpIHsKKyAgICBjb25zdCBidWlsZGVyID0g
bmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpCisgICAgICAgICAgICAuRnVuYyhbImkzMiIs
ICJpMzIiXSwgImkzMiIpCisgICAgICAgICAgICAuRnVuYyhbImkzMiJdLCAiaTMyIikKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLlRhYmxlKCJpbXAiLCAi
dGFibGUiLCB7aW5pdGlhbDogMjAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFyIikKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwg
MCAvKlsnaTMyJywgJ2kzMiddID0+ICdpMzInKi8pCisgICAgICAgICAgICAgICAgLkdldExvY2Fs
KDEpIC8vIHBhcmFtZXRlciB0byBjYWxsCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApIC8v
IGNhbGwgaW5kZXgKKyAgICAgICAgICAgICAgICAuQ2FsbEluZGlyZWN0KDEsIDApIC8vIGNhbGxp
bmcgZnVuY3Rpb24gb2YgdHlwZSBbJ2kzMiddID0+ICdpMzInCisgICAgICAgICAgICAgICAgLlJl
dHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFyIiwg
MSAvKlsnaTMyJ10gPT4gJ2kzMicqLykKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoNDIpCisgICAgICAgICAgICAgICAgLkkzMkFkZCgpCisg
ICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpOworCisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7Cisg
ICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0
IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAyMCwgZWxlbWVudDogImFu
eWZ1bmMifSk7CisgICAgcmV0dXJuIHtpbnN0YW5jZTogbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNl
KG1vZHVsZSwge2ltcDoge3RhYmxlfX0pLCB0YWJsZX07Cit9CisKK3sKKyAgICBjb25zdCB7aW5z
dGFuY2UsIHRhYmxlfSA9IG1ha2VJbnN0YW5jZSgpOworICAgIGNvbnN0IGV4cG9ydHMgPSBpbnN0
YW5jZS5leHBvcnRzOworICAgIGNvbnN0IGZvbyA9IGV4cG9ydHMuZm9vOworICAgIHRhYmxlLnNl
dCgwLCBleHBvcnRzLmJhcik7CisgICAgYXNzZXJ0LmVxKHRhYmxlLmdldCgwKSwgZXhwb3J0cy5i
YXIpOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgaWYg
KGZvbygwLCBpKSAhPT0gaSArIDQyKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQg
Y2FsbCBpbmRpcmVjdCIpOworICAgIH0KK30KKworLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIGNy
b3NzIG1vZHVsZS4gVGhlIHJlYXNvbiBpdCBkb2Vzbid0CisvLyBub3cgaXMgdGhhdCB3ZSBkb24n
dCB1bmlxdWUgU2lnbmF0dXJlKi4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjU1MTEKKy8qCit7CisgICAgY29uc3Qge2luc3RhbmNlLCB0YWJsZX0gPSBtYWtl
SW5zdGFuY2UoKTsKKyAgICBjb25zdCBmb28gPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICAv
L3RhYmxlLnNldCgwLCBtYWtlSW5zdGFuY2UoKS5pbnN0YW5jZS5leHBvcnRzLmJhcik7IC8vIENy
b3NzIGluc3RhbmNlIGZ1bmN0aW9uLgorCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBp
KyspIHsKKyAgICAgICAgaWYgKGZvbygwLCBpKSAhPT0gaSArIDQyKQorICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJCYWQgY2FsbCBpbmRpcmVjdCIpOworICAgIH0KK30KKyovCkluZGV4OiBK
U1Rlc3RzL3dhc20vanMtYXBpL2NhbGwtaW5kaXJlY3QtcmVzdWx0cy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3dhc20vanMtYXBpL2NhbGwtaW5kaXJlY3QtcmVzdWx0cy5qcwkocmV2aXNpb24g
MjA5NzA0KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS9jYWxsLWluZGlyZWN0LXJlc3VsdHMuanMJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0MSArMCwwIEBACi1pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAn
Li4vYXNzZXJ0LmpzJzsKLWltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwotCi1j
b25zdCB3YXNtTW9kdWxlV2hpY2hJbXBvcnRKUyA9ICgpID0+IHsKLSAgICBjb25zdCBidWlsZGVy
ID0gKG5ldyBCdWlsZGVyKCkpCi0gICAgICAgIC5UeXBlKCkuRW5kKCkKLSAgICAgICAgLkltcG9y
dCgpCi0gICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmdW5jIiwgeyBwYXJhbXM6IFsiaTMy
Il0sIHJldDogImkzMiIgfSkKLSAgICAgICAgLkVuZCgpCi0gICAgICAgIC5GdW5jdGlvbigpLkVu
ZCgpCi0gICAgICAgIC5FeHBvcnQoKQotICAgICAgICAgICAgLkZ1bmN0aW9uKCJjaGFuZ2VDb3Vu
dGVyIikKLSAgICAgICAgLkVuZCgpCi0gICAgICAgIC5Db2RlKCkKLSAgICAgICAgICAgIC5GdW5j
dGlvbigiY2hhbmdlQ291bnRlciIsIHsgcGFyYW1zOiBbImkzMiIsICJpMzIiXSwgcmV0OiAiaTMy
IiB9KQotICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0MikKLSAgICAgICAgICAgICAgICAuR2V0
TG9jYWwoMCkKLSAgICAgICAgICAgICAgICAuSTMyQWRkKCkKLSAgICAgICAgICAgICAgICAuR2V0
TG9jYWwoMSkKLSAgICAgICAgICAgICAgICAuQ2FsbEluZGlyZWN0KDAsIDApIC8vIENhbGxzIGZ1
bmMocGFyYW1bMF0gKyA0MikuCi0gICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCi0gICAgICAg
ICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAwKSAvLyBDYWxscyBmdW5jKHBhcmFtWzBdICsgNDIp
LgotICAgICAgICAgICAgLkVuZCgpCi0gICAgICAgIC5FbmQoKTsKLSAgICBjb25zdCBiaW4gPSBi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7Ci0gICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOwotICAgIHJldHVybiBtb2R1bGU7Ci19OwotCi0KLShmdW5jdGlv
biBNb25vbW9ycGhpY0ltcG9ydCgpIHsKLSAgICBsZXQgY291bnRlciA9IDA7Ci0gICAgY29uc3Qg
Y291bnRlclNldHRlciA9IHYgPT4gY291bnRlciA9IHY7Ci0gICAgY29uc3QgbW9kdWxlID0gd2Fz
bU1vZHVsZVdoaWNoSW1wb3J0SlMoKTsKLSAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3Nl
bWJseS5JbnN0YW5jZShtb2R1bGUsIHsgaW1wOiB7IGZ1bmM6IGNvdW50ZXJTZXR0ZXIgfSB9KTsK
LSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwOTY7ICsraSkgewotICAgICAgICAvLyBJbnZva2Ug
dGhpcyBhIGJ1bmNoIG9mIHRpbWVzIHRvIG1ha2Ugc3VyZSB0aGUgSUMgaW4gdGhlIHdhc20gLT4g
SlMgc3R1YiB3b3JrcyBjb3JyZWN0bHkuCi0gICAgICAgIGluc3RhbmNlLmV4cG9ydHMuY2hhbmdl
Q291bnRlcihpLCAwKTsKLSAgICAgICAgYXNzZXJ0LmVxKGNvdW50ZXIsIGkgKyA0Mik7Ci0gICAg
fQotfSkoKTsKSW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvY2FsbC1pbmRpcmVjdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vanMtYXBpL2NhbGwtaW5kaXJlY3QuanMJKHJldmlzaW9u
IDIwOTcwNCkKKysrIEpTVGVzdHMvd2FzbS9qcy1hcGkvY2FsbC1pbmRpcmVjdC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNiwxMCArNiwxMiBAQCBjb25zdCB3YXNtTW9kdWxlV2hpY2hJbXBvcnRKUyA9
ICgpID0+IHsKICAgICAgICAgLlR5cGUoKS5FbmQoKQogICAgICAgICAuSW1wb3J0KCkKICAgICAg
ICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImZ1bmMiLCB7IHBhcmFtczogWyJpMzIiXSB9KQorICAg
ICAgICAgICAgLlRhYmxlKCJpbXAiLCAidGFibGUiLCB7IGluaXRpYWw6IDEsIG1heGltdW06IDEs
IGVsZW1lbnQ6ICJhbnlmdW5jIn0pCiAgICAgICAgIC5FbmQoKQogICAgICAgICAuRnVuY3Rpb24o
KS5FbmQoKQogICAgICAgICAuRXhwb3J0KCkKICAgICAgICAgICAgIC5GdW5jdGlvbigiY2hhbmdl
Q291bnRlciIpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGxGdW5jIikKICAgICAgICAgLkVu
ZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAgICAgIC5GdW5jdGlvbigiY2hhbmdlQ291bnRl
ciIsIHsgcGFyYW1zOiBbImkzMiIsICJpMzIiXSB9KQpAQCAtMTcsNyArMTksMTEgQEAgY29uc3Qg
d2FzbU1vZHVsZVdoaWNoSW1wb3J0SlMgPSAoKSA9PiB7CiAgICAgICAgICAgICAgICAgLkdldExv
Y2FsKDApCiAgICAgICAgICAgICAgICAgLkkzMkFkZCgpCiAgICAgICAgICAgICAgICAgLkdldExv
Y2FsKDEpCi0gICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAwKSAvLyBDYWxscyBmdW5j
KHBhcmFtWzBdICsgNDIpLgorICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3QoMCwgMCkgLy8g
Q2FsbHMgdGFibGVbMF0ocGFyYW1bMF0gKyA0MikuCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiY2FsbEZ1bmMiLCB7IHBhcmFtczogWyJpMzIiXSB9KQorICAgICAg
ICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5DYWxsKDApIC8vIENhbGxz
IGZ1bmMocGFyYW1bMF0gKyA0MikKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7
CiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwpAQCAtMjUsMTIg
KzMxLDE3IEBAIGNvbnN0IHdhc21Nb2R1bGVXaGljaEltcG9ydEpTID0gKCkgPT4gewogICAgIHJl
dHVybiBtb2R1bGU7CiB9OwogCitjb25zdCBtYWtlVGFibGUgPSAoKSA9PiB7CisgICAgcmV0dXJu
IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDogMSwgbWF4aW11bTogMSwgZWxlbWVudDog
ImFueWZ1bmMifSk7Cit9OwogCiAoZnVuY3Rpb24gTW9ub21vcnBoaWNJbXBvcnQoKSB7CiAgICAg
bGV0IGNvdW50ZXIgPSAwOwogICAgIGNvbnN0IGNvdW50ZXJTZXR0ZXIgPSB2ID0+IGNvdW50ZXIg
PSB2OworICAgIGNvbnN0IHRhYmxlID0gbWFrZVRhYmxlKCk7CiAgICAgY29uc3QgbW9kdWxlID0g
d2FzbU1vZHVsZVdoaWNoSW1wb3J0SlMoKTsKLSAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgaW1wOiB7IGZ1bmM6IGNvdW50ZXJTZXR0ZXIgfSB9
KTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUs
IHsgaW1wOiB7IGZ1bmM6IGNvdW50ZXJTZXR0ZXIsIHRhYmxlfSB9KTsKKyAgICB0YWJsZS5zZXQo
MCwgaW5zdGFuY2UuZXhwb3J0cy5jYWxsRnVuYyk7CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0
MDk2OyArK2kpIHsKICAgICAgICAgLy8gSW52b2tlIHRoaXMgYSBidW5jaCBvZiB0aW1lcyB0byBt
YWtlIHN1cmUgdGhlIElDIGluIHRoZSB3YXNtIC0+IEpTIHN0dWIgd29ya3MgY29ycmVjdGx5Lgog
ICAgICAgICBpbnN0YW5jZS5leHBvcnRzLmNoYW5nZUNvdW50ZXIoaSwgMCk7CkBAIC00NCw4ICs1
NSwxNCBAQCBjb25zdCB3YXNtTW9kdWxlV2hpY2hJbXBvcnRKUyA9ICgpID0+IHsKICAgICBjb25z
dCBjb3VudGVyQVNldHRlciA9IHYgPT4gY291bnRlckEgPSB2OwogICAgIGNvbnN0IGNvdW50ZXJC
U2V0dGVyID0gdiA9PiBjb3VudGVyQiA9IHsgdmFsdWVCOiB2IH07CiAgICAgY29uc3QgbW9kdWxl
ID0gd2FzbU1vZHVsZVdoaWNoSW1wb3J0SlMoKTsKLSAgICBjb25zdCBpbnN0YW5jZUEgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGltcDogeyBmdW5jOiBjb3VudGVyQVNldHRl
ciB9IH0pOwotICAgIGNvbnN0IGluc3RhbmNlQiA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSht
b2R1bGUsIHsgaW1wOiB7IGZ1bmM6IGNvdW50ZXJCU2V0dGVyIH0gfSk7CisKKyAgICBjb25zdCB0
YWJsZUEgPSBtYWtlVGFibGUoKTsKKyAgICBjb25zdCBpbnN0YW5jZUEgPSBuZXcgV2ViQXNzZW1i
bHkuSW5zdGFuY2UobW9kdWxlLCB7IGltcDogeyBmdW5jOiBjb3VudGVyQVNldHRlciwgdGFibGU6
IHRhYmxlQX0gfSk7CisgICAgdGFibGVBLnNldCgwLCBpbnN0YW5jZUEuZXhwb3J0cy5jYWxsRnVu
Yyk7CisKKyAgICBjb25zdCB0YWJsZUIgPSBtYWtlVGFibGUoKTsKKyAgICBjb25zdCBpbnN0YW5j
ZUIgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGltcDogeyBmdW5jOiBjb3Vu
dGVyQlNldHRlciwgdGFibGU6IHRhYmxlQn0gfSk7CisgICAgdGFibGVCLnNldCgwLCBpbnN0YW5j
ZUIuZXhwb3J0cy5jYWxsRnVuYyk7CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDQ4OyArK2kp
IHsKICAgICAgICAgaW5zdGFuY2VBLmV4cG9ydHMuY2hhbmdlQ291bnRlcihpLCAwKTsKICAgICAg
ICAgYXNzZXJ0LmlzQShjb3VudGVyQSwgIm51bWJlciIpOwpAQCAtNTcsOCArNzQsNiBAQCBjb25z
dCB3YXNtTW9kdWxlV2hpY2hJbXBvcnRKUyA9ICgpID0+IHsKIH0pKCk7CiAKIChmdW5jdGlvbiBW
aXJ0dWFsSW1wb3J0KCkgewotICAgIGNvbnN0IG51bSA9IDEwOyAvLyBJdCdzIGRlZmluaXRlbHkg
Z29pbmcgdmlydHVhbCBhdCAxMCEKLSAgICBsZXQgY291bnRlcnMgPSBbMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMF07CiAgICAgY29uc3QgY291bnRlclNldHRlcnMgPSBbCiAgICAgICAgIHYg
PT4gY291bnRlcnNbMF0gPSB2LAogICAgICAgICB2ID0+IGNvdW50ZXJzWzFdID0gdiArIDEsCkBA
IC03MSwxMiArODYsMTYgQEAgY29uc3Qgd2FzbU1vZHVsZVdoaWNoSW1wb3J0SlMgPSAoKSA9PiB7
CiAgICAgICAgIHYgPT4gY291bnRlcnNbOF0gPSB2ICsgOCwKICAgICAgICAgdiA9PiBjb3VudGVy
c1s5XSA9IHYgKyA5LAogICAgIF07CisgICAgY29uc3QgbnVtID0gY291bnRlclNldHRlcnMubGVu
Z3RoOworICAgIGxldCBjb3VudGVycyA9IGNvdW50ZXJTZXR0ZXJzLm1hcCgoKSA9PiAwKTsKICAg
ICBhc3NlcnQuZXEoY291bnRlcnMubGVuZ3RoLCBudW0pOwotICAgIGFzc2VydC5lcShjb3VudGVy
U2V0dGVycy5sZW5ndGgsIG51bSk7CiAgICAgY29uc3QgbW9kdWxlID0gd2FzbU1vZHVsZVdoaWNo
SW1wb3J0SlMoKTsKICAgICBsZXQgaW5zdGFuY2VzID0gW107Ci0gICAgZm9yIChsZXQgaSA9IDA7
IGkgPCBudW07ICsraSkKLSAgICAgICAgaW5zdGFuY2VzW2ldID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsgZnVuYzogY291bnRlclNldHRlcnNbaV0gfSB9KTsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IG51bTsgKytpKSB7CisgICAgICAgIGxldCB0YWJsZSA9IG1h
a2VUYWJsZSgpOworICAgICAgICBpbnN0YW5jZXNbaV0gPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7IGltcDogeyBmdW5jOiBjb3VudGVyU2V0dGVyc1tpXSwgdGFibGV9IH0pOwor
ICAgICAgICB0YWJsZS5zZXQoMCwgaW5zdGFuY2VzW2ldLmV4cG9ydHMuY2FsbEZ1bmMpOworICAg
IH0KICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwNDg7ICsraSkgewogICAgICAgICBmb3IgKGxl
dCBqID0gMDsgaiA8IG51bTsgKytqKSB7CiAgICAgICAgICAgICBpbnN0YW5jZXNbal0uZXhwb3J0
cy5jaGFuZ2VDb3VudGVyKGksIDApOwpJbmRleDogSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzCShub25leGlzdGVu
dCkKKysrIEpTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMTEgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOworaW1wb3J0
ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CisKK2NvbnN0IGJhZFRhYmxlU3RyaW5n
ID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gVGFibGUiOworY29uc3QgYmFkSW1wb3J0U3RyaW5n
ID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gSW1wb3J0IjsKK2Z1bmN0aW9uIGFzc2VydEJhZEJp
bmFyeShidWlsZGVyLCBzdHIpIHsKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICB0aHJl
dyA9IHRydWU7CisgICAgICAgIGFzc2VydC50cnV0aHkoZS50b1N0cmluZygpLmluZGV4T2Yoc3Ry
KSAhPT0gLTEpOworICAgICAgICBhc3NlcnQudHJ1dGh5KGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJs
eS5Db21waWxlRXJyb3IpOworICAgIH0KKyAgICBhc3NlcnQudHJ1dGh5KHRocmV3KTsKK30KKwor
eworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5k
KCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIs
IHtpbml0aWFsOiAyMCwgZWxlbWVudDogImFueWZ1bmMifSkKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5UYWJsZSgpCisgICAgICAgICAgICAuVGFi
bGUoe2luaXRpYWw6IDIwLCBtYXhpbXVtOiAzMCwgZWxlbWVudDogImFueWZ1bmMifSkKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgLkVuZCgpOworICAgIGFzc2VydEJh
ZEJpbmFyeShidWlsZGVyLCBiYWRUYWJsZVN0cmluZyk7Cit9CisKK3sKKyAgICBjb25zdCBidWls
ZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5UYWJsZSgpCisgICAgICAgICAgICAuVGFibGUoe2luaXRp
YWw6IDIwLCBtYXhpbXVtOiAzMCwgZWxlbWVudDogImFueWZ1bmMifSkKKyAgICAgICAgICAgIC5U
YWJsZSh7aW5pdGlhbDogMjAsIG1heGltdW06IDMwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KQorICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAuRW5kKCk7CisgICAgYXNzZXJ0
QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZFRhYmxlU3RyaW5nKTsKK30KKworeworICAgIGNvbnN0IGJ1
aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImZvbyIsIHtwYXJhbXM6IFsiaTMyIl19KQorICAgICAgICAgICAgICAgIC5HZXRMb2Nh
bCgwKQorICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3QoMCwgMCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCk7CisgICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsICJjYWxs
X2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hlbiBhIHRhYmxlIGlzIGRlZmluZWQgb3IgaW1wb3J0
ZWQiKTsKK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAg
IC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLlRhYmxl
KCkKKyAgICAgICAgICAgIC5UYWJsZSh7aW5pdGlhbDoyMCwgZWxlbWVudDoiYW55ZnVuYyJ9KQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImZvbyIsIHtwYXJhbXM6IFsiaTMyIl19KQorICAgICAgICAgICAgICAgIC5HZXRMb2Nh
bCgwKQorICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3QoMCwgMSkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCk7CisgICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsICJjYWxs
X2luZGlyZWN0ICdyZXNlcnZlZCcgdmFydWludDEgbXVzdCBiZSAweDAiKTsKK30KKworZnVuY3Rp
b24gYXNzZXJ0QmFkVGFibGUodGFibGVEZXNjcmlwdGlvbikgeworICAgIGNvbnN0IGJ1aWxkZXIg
PSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9u
KCkuRW5kKCkKKyAgICAgICAgLlRhYmxlKCkKKyAgICAgICAgICAgIC5UYWJsZSh0YWJsZURlc2Ny
aXB0aW9uKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAuRW5kKCk7
CisgICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZFRhYmxlU3RyaW5nKTsKK30KKworZnVu
Y3Rpb24gYXNzZXJ0QmFkVGFibGVJbXBvcnQodGFibGVEZXNjcmlwdGlvbikgeworICAgIGNvbnN0
IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAg
LkltcG9ydCgpCisgICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHRhYmxlRGVzY3Jp
cHRpb24pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAuQ29kZSgpCisgICAgICAgIC5FbmQoKTsKKyAgICBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwg
YmFkSW1wb3J0U3RyaW5nKTsKK30KKworeworICAgIGxldCBiYWREZXNjcmlwdGlvbnMgPSBbCisg
ICAgICAgIHtpbml0aWFsOiAxMCwgZWxlbWVudDogImkzMiJ9LAorICAgICAgICB7aW5pdGlhbDog
MTAsIGVsZW1lbnQ6ICJmMzIifSwKKyAgICAgICAge2luaXRpYWw6IDEwLCBlbGVtZW50OiAiZjY0
In0sCisgICAgICAgIHtpbml0aWFsOiAxMCwgZWxlbWVudDogImk2NCJ9LAorICAgICAgICB7aW5p
dGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiaTMyIn0sCisgICAgICAgIHtpbml0aWFs
OiAxMCwgbWF4aW11bTogMjAsIGVsZW1lbnQ6ICJmMzIifSwKKyAgICAgICAge2luaXRpYWw6IDEw
LCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImY2NCJ9LAorICAgICAgICB7aW5pdGlhbDogMTAsIG1h
eGltdW06IDIwLCBlbGVtZW50OiAiaTY0In0sCisKKyAgICAgICAge2luaXRpYWw6IDEwLCBtYXhp
bXVtOiA5LCBlbGVtZW50OiAiYW55ZnVuYyJ9LAorICAgICAgICB7aW5pdGlhbDogMSwgbWF4aW11
bTogMCwgZWxlbWVudDogImFueWZ1bmMifSwKKyAgICAgICAge2luaXRpYWw6IDIqKjMyIC0gMSwg
bWF4aW11bTogMioqMzIgLSAyLCBlbGVtZW50OiAiYW55ZnVuYyJ9LAorICAgICAgICB7aW5pdGlh
bDogMioqMzEsIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCisgICAgXTsKKworICAgIGZvciAoY29uc3Qg
ZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKKyAgICAgICAgYXNzZXJ0QmFkVGFibGUoZCk7CisgICAg
ICAgIGFzc2VydEJhZFRhYmxlSW1wb3J0KGQpOworICAgIH0KK30KKworeworICAgIGNvbnN0IGJ1
aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLklt
cG9ydCgpCisgICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHtpbml0aWFsOiAyMCwg
ZWxlbWVudDogImFueWZ1bmMifSkKKyAgICAgICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwg
e2luaXRpYWw6IDIwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAuRW5kKCk7Cisg
ICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZEltcG9ydFN0cmluZyk7Cit9CisKKworewor
ICAgIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlSW5zdGFuY2UodGFibGVEZXNjcmlwdGlvbiwgdGFi
bGUsIG1lc3NhZ2UpIHsKKyAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAg
ICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5FbmQoKTsKKworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsK
KyAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge3RhYmxlfX0pOworICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICBhc3NlcnQuZXEoZS50b1N0cmluZygpLCBtZXNzYWdlKTsKKyAg
ICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQudHJ1dGh5
KHRocmV3KTsKKyAgICB9CisKKyAgICBjb25zdCBiYWRUYWJsZXMgPSBbCisgICAgICAgIFt7aW5p
dGlhbDogMTAwLCBtYXhpbXVtOjEwMCwgZWxlbWVudDoiYW55ZnVuYyJ9LCBuZXcgV2ViQXNzZW1i
bHkuVGFibGUoe2luaXRpYWw6MTAwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KSwgIlR5cGVFcnJvcjog
VGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVx
dWlyZXMgdGhhdCBpdCBkb2VzIl0sCisgICAgICAgIFt7aW5pdGlhbDogMTAwLCBtYXhpbXVtOjEw
MCwgZWxlbWVudDoiYW55ZnVuYyJ9LCBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6MTAw
LCBtYXhpbXVtOjEwMSwgZWxlbWVudDogImFueWZ1bmMifSksICJUeXBlRXJyb3I6IFRhYmxlIGlt
cG9ydHMgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4
aW11bSciXSwKKyAgICAgICAgW3tpbml0aWFsOiAxMDAsIGVsZW1lbnQ6ImFueWZ1bmMifSwgbmV3
IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOjEwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KSwgIlR5
cGVFcnJvcjogVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBz
bWFsbCJdLAorICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiJhbnlmdW5jIn0sIG5ldyBX
ZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDo5LCBlbGVtZW50OiAiYW55ZnVuYyJ9KSwgIlR5cGVF
cnJvcjogVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFs
bCJdLAorICAgIF07CisgICAgZm9yIChjb25zdCBbZCwgdCwgbV0gb2YgYmFkVGFibGVzKSB7Cisg
ICAgICAgIGFzc2VydEJhZFRhYmxlSW5zdGFuY2UoZCwgdCwgbSk7CisgICAgfQorfQorCit7Cisg
ICAgeworICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7ZWxlbWVu
dDogImFueWZ1bmMiLCBpbml0aWFsOiAyMCwgbWF4aW11bTogMzB9KTsKKyAgICAgICAgdGFibGUu
Z3JvdygzMCk7CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdGFibGUuZ3JvdygzMSksIFR5
cGVFcnJvciwgIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5ncm93IGNvdWxkIG5vdCBncm93
IHRoZSB0YWJsZSIpOworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHRhYmxlLmdyb3coMjkp
LCBUeXBlRXJyb3IsICJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuZ3JvdyBjb3VsZCBub3Qg
Z3JvdyB0aGUgdGFibGUiKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGNvbnN0IHRhYmxlID0g
bmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtlbGVtZW50OiAiYW55ZnVuYyIsIGluaXRpYWw6IDIwfSk7
CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdGFibGUuZ3Jvdyh7dmFsdWVPZigpIHsgcmV0
dXJuIDE5OyB9fSksIFR5cGVFcnJvciwgIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5ncm93
IGNvdWxkIG5vdCBncm93IHRoZSB0YWJsZSIpOworICAgICAgICBsZXQgY2FsbGVkID0gZmFsc2U7
CisgICAgICAgIHRhYmxlLmdyb3coe3ZhbHVlT2YoKSB7IGNhbGxlZCA9IHRydWU7IHJldHVybiAy
MTsgfX0pOworICAgICAgICBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7CisgICAgfQorCisgICAgewor
ICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7ZWxlbWVudDogImFu
eWZ1bmMiLCBpbml0aWFsOiAyMH0pOworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHRhYmxl
LmdldCgyMCksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuZ2V0IGV4
cGVjdHMgYW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIHNpemUgb2YgdGhlIHRhYmxlIik7CisgICAg
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykKKyAgICAgICAgICAgIGFzc2VydC5lcSh0
YWJsZS5nZXQoaSksIG51bGwpOworICAgIH0KKworICAgIHsKKyAgICAgICAgY29uc3QgdGFibGUg
PSBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2VsZW1lbnQ6ICJhbnlmdW5jIiwgaW5pdGlhbDogMjB9
KTsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB0YWJsZS5zZXQoMjAsIG51bGwpLCBSYW5n
ZUVycm9yLCAiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLnNldCBleHBlY3RzIGFuIGludGVn
ZXIgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSB0YWJsZSIpOworICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDIwOyBpKyspCisgICAgICAgICAgICB0YWJsZS5zZXQoaSwgbnVsbCk7CisgICAg
fQorCisgICAgeworICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgdGhyb3cKKyAgICAgICAgbmV3
IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAyKioyMCwgbWF4aW11bTogMioqMzIgLSAxLCBl
bGVtZW50OiAiYW55ZnVuYyJ9KTsKKyAgICB9Cit9CisKSW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1h
cGkvdGVzdF9iYXNpY19hcGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2pzLWFwaS90
ZXN0X2Jhc2ljX2FwaS5qcwkocmV2aXNpb24gMjA5NzA0KQorKysgSlNUZXN0cy93YXNtL2pzLWFw
aS90ZXN0X2Jhc2ljX2FwaS5qcwkod29ya2luZyBjb3B5KQpAQCAtNzgsOCArNzgsOSBAQCBmb3Ig
KGNvbnN0IGMgaW4gY29uc3RydWN0b3JQcm9wZXJ0aWVzKSB7CiAgICAgICAgIG5ldyBXZWJBc3Nl
bWJseS5NZW1vcnkoe2luaXRpYWw6IDIwfSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgIlRh
YmxlIjoKLSAgICAgICAgLy8gRklYTUUgSW1wbGVtZW50IGFuZCB0ZXN0IHRoZXNlIEFQSXMgZnVy
dGhlci4gRm9yIG5vdyB0aGV5IGp1c3QgdGhyb3cuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTk3NzUKLSAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHlbY10oKSwgRXJyb3IsIGBXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQg
dGhlICR7Y30gY29uc3RydWN0b3IgcHJvcGVydHlgKTsKKyAgICAgICAgbmV3IFdlYkFzc2VtYmx5
LlRhYmxlKHtpbml0aWFsOiAyMCwgZWxlbWVudDogImFueWZ1bmMifSk7CisgICAgICAgIG5ldyBX
ZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDogMjAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiYW55
ZnVuYyJ9KTsKKyAgICAgICAgbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAyMCwgbWF4
aW11bTogMjUsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pOwogICAgICAgICBicmVhazsKICAgICBjYXNl
ICJDb21waWxlRXJyb3IiOgogICAgIGNhc2UgIlJ1bnRpbWVFcnJvciI6IHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDE2LTEyLTEy
ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5
OiBpbXBsZW1lbnQgdGhlIHRhYmxlIHNlY3Rpb24gYW5kIHRhYmxlIGltcG9ydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzE2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1l
bnRzIHRoZSBUYWJsZSBzcGFjZSBmb3Igd2FzbToKKyAgICAgICAgaHR0cHM6Ly9naXRodWIuY29t
L1dlYkFzc2VtYmx5L2Rlc2lnbi9ibG9iL21hc3Rlci9CaW5hcnlFbmNvZGluZy5tZCN0YWJsZS1z
ZWN0aW9uCisKKyAgICAgICAgSXQgb25seSBpbXBsZW1lbnRzIGRlZmluaW5nIGFuZCBpbXBvcnRp
bmcgYSB0YWJsZS4gVGhlIGJ1bGsKKyAgICAgICAgb2YgdGhpcyBwYXRjaCBpcyBpbXBsZW1lbnRp
bmcgdGhlIHZhcmlvdXMgd2FzbSBUYWJsZSBwcm90b3R5cGUKKyAgICAgICAgbWV0aG9kcyBhbmQg
dGhlIHVuZGVybHlpbmcgVGFibGUgb2JqZWN0OgorICAgICAgICBodHRwczovL2dpdGh1Yi5jb20v
V2ViQXNzZW1ibHkvZGVzaWduL2Jsb2IvbWFzdGVyL0pTLm1kI3dlYmFzc2VtYmx5dGFibGUtY29u
c3RydWN0b3IKKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSBidWcgaW4gb3VyIGlt
cGxlbWVudGF0aW9uIHdpdGggY2FsbF9pbmRpcmVjdC4KKyAgICAgICAgV2UgaW5pdGlhbGx5IGlt
cGxlbWVudGVkIGNhbGxfaW5kaXJlY3QgYXMgYSB3YXkgdG8gY2FsbCBmdW5jdGlvbnMgdGhhdAor
ICAgICAgICBhcmUgaW1wb3J0ZWQgb3IgZGVmaW5lZCBpbiB0aGUgbW9kdWxlLiBUaGlzIHdhcyB0
aGUgd3JvbmcKKyAgICAgICAgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHNwZWMuIEluc3RlYWQsIGNh
bGxfaW5kaXJlY3QgY2FuIG9ubHkgaW5kZXggaW50bworICAgICAgICB0aGUgdGFibGUgaW5kZXgg
c3BhY2UuCisKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldh
c206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6CisgICAg
ICAgIChKU0M6Oldhc206OlRhYmxlSW5mb3JtYXRpb246OlRhYmxlSW5mb3JtYXRpb24pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpUYWJsZUluZm9ybWF0aW9uOjpvcGVyYXRvciBib29sKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VGFibGVJbmZvcm1hdGlvbjo6aXNJbXBvcnQpOgorICAgICAgICAoSlND
OjpXYXNtOjpUYWJsZUluZm9ybWF0aW9uOjppbml0aWFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
VGFibGVJbmZvcm1hdGlvbjo6bWF4aW11bSk6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxhYmxl
RnVuY3Rpb246OkNhbGxhYmxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsYWJs
ZUZ1bmN0aW9uOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VFeHByZXNzaW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyk6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcik6CisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1
bGVQYXJzZXI6OnBhcnNlRXhwb3J0KToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIu
aDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseUluc3RhbmNlOjp0YWJsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6c2V0VGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mVGFibGUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNzZW1ibHlUYWJsZSk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlUYWJsZTo6Z3Jvdyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Y2xl
YXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rp
b24pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmg6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6bWF4aW11bSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlUYWJsZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Z2V0
RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9mU2l6
ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMp
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChK
U0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmNhbGwpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpzaWduYXR1cmUpOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp3YXNtRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5RnVuY3Rpb246OndlYkFzc2VtYmx5Q2FsbGVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9X
ZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5r
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZSk6CisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0VGFi
bGUpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dyb3cpOgorICAgICAgICAoSlND
Ojp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1i
bHlUYWJsZVByb3RvRnVuY1NldCk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFibGVQcm90
b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90
b3R5cGUuaDoKKwogMjAxNi0xMi0xMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLiBUcnkgdG8gZml4IHRoZSBsaW51eCBidWlsZC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTQxMSw2ICsxNDExLDcgQEAKIAkJNzk1QjE5OTcxRDc4QkUzNTAw
MjYyRkEwIC8qIE1hcEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwICovOyB9
OwogCQk3OTVCMTk5ODFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk1QjE5OTYxRDc4QkUzNTAwMjYyRkEw
IC8qIE1hcEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NDY1NjgxQjk1MkZGMDAw
MzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJs
eUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4
RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4
NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdB
QTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkw
MDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5ODkzNzc4MURDQUI1NzMwMEY4RDRG
QiAvKiBKU0ZpeGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzk4OTM3NzYxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5jcHAg
Ki87IH07CkBAIC0zODM4LDYgKzM4MzksNyBAQAogCQk3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAg
LyogTWFwQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBC
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk1QjE5OTYxRDc4QkUzNTAw
MjYyRkEwIC8qIE1hcEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFw
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTY0NjU2ODFCOTUyRkYwMDAz
MDU5RUUgLyogR2V0UHV0SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
ZXRQdXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5NkZCNDM5MURGRjhD
M0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5SGVscGVycy5oOyBwYXRoID0ganMvSlNXZWJBc3Nl
bWJseUhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTcxQjhG
Q0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJB
IC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaXhlZEFycmF5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc1ODAsNiArNzU4Miw3IEBACiAJCQkJNzlF
NDIzRTExREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLywKIAkJCQlB
RDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAg
Ki8sCiAJCQkJQUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxl
RXJyb3IuaCAqLywKKwkJCQk3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJs
eUhlbHBlcnMuaCAqLywKIAkJCQlBRDJGQ0JBODFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcCAqLywKIAkJCQlBRDJGQ0JBOTFEQjU4REE0MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmggKi8sCiAJCQkJQUQyRkNCQUExREI1OERBNDAwQjNFNzM2IC8q
IEpTV2ViQXNzZW1ibHlNZW1vcnkuY3BwICovLApAQCAtODY4OCw2ICs4NjkxLDcgQEAKIAkJCQk0
MzQyMkE2NzFDMTYyNjc4MDBFMkVCOTggLyogQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjA3MEE0QjFENTQzQTk4MDA2RTcyMzIgLyogTGFyZ2VBbGxvY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9B
c3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAorCQkJCTc5NkZCNDNBMURGRjhDM0YwMDM5Qzk1
RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFBMDA5QzAx
ODMxQTIyRDAwQ0Y4NzExIC8qIE1hY3JvQXNzZW1ibGVyQVJNNjQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2QUREMTQ2MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIwOTcwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
RXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0gbnVsbHB0cjsKIAotICAgIEIzSVJHZW5l
cmF0b3IoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBXYXNtSW50ZXJuYWxG
dW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IEltbXV0YWJs
ZUZ1bmN0aW9uSW5kZXhTcGFjZSYpOworICAgIEIzSVJHZW5lcmF0b3IoVk0mLCBjb25zdCBNZW1v
cnlJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNw
YWNlJik7CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3Qg
VmVjdG9yPFR5cGU+Jik7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlw
ZSwgdWludDMyX3QpOwpAQCAtMTg4LDYgKzE4OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1bmlm
eVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIFJlc3Vs
dExpc3QmIHN0YWNrKTsKICAgICBWYWx1ZSogemVyb0ZvclR5cGUoVHlwZSk7CiAKKyAgICBWTSYg
bV92bTsKICAgICBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmIG1fZnVuY3Rpb25J
bmRleFNwYWNlOwogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIEJhc2ljQmxvY2sqIG1fY3Vy
cmVudEJsb2NrOwpAQCAtMTk5LDggKzIwMCw5IEBAIHByaXZhdGU6CiAgICAgVmFsdWUqIG1fZnVu
Y3Rpb25JbmRleFNwYWNlVmFsdWU7CiB9OwogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9y
KGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBX
YXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9u
SW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlKQotICAgIDogbV9mdW5jdGlvbkluZGV4U3Bh
Y2UoZnVuY3Rpb25JbmRleFNwYWNlKQorQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihWTSYg
dm0sIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJl
LCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IEltbXV0YWJsZUZ1bmN0
aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIDogbV92bSh2bSkKKyAgICAs
IG1fZnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICAsIG1fcHJvYyhw
cm9jZWR1cmUpCiAgICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzKQogewpAQCAtNjY5LDI3ICs2NzEsNTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QoY29ucwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJn
cy50YWtlTGFzdCgpOwogICAgIEFTU0VSVChzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgPT0g
YXJncy5zaXplKCkpOwogCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
cjsKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZTsKKyAgICB7
CisgICAgICAgIEV4cHJlc3Npb25UeXBlIHRvcEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
bV9wcm9jLCBPcmlnaW4oKSwgJm1fdm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlKSk7CisgICAg
ICAgIEV4cHJlc3Npb25UeXBlIHRhYmxlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIHRvcEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSk7
CisgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLAor
ICAgICAgICAgICAgdGFibGUsIEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMo
KSk7CisgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisg
ICAgICAgICAgICB0YWJsZSwgSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZlNpemUoKSk7Cisg
ICAgfQorCiAgICAgLy8gQ2hlY2sgdGhlIGluZGV4IHdlIGFyZSBsb29raW5nIGZvciBpcyB2YWxp
ZC4KICAgICB7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIG1heFZhbGlkSW5kZXggPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9jLCBPcmlnaW4oKSwgSW50MzIsIG1fZnVu
Y3Rpb25JbmRleFNwYWNlLnNpemUpOwogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCks
Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVx
dWFsLCBPcmlnaW4oKSwgbV96ZXJvVmFsdWVzW2xpbmVhcml6ZVR5cGUoSTMyKV0sCi0gICAgICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhh
biwgT3JpZ2luKCksIGNhbGxlZUluZGV4LCBtYXhWYWxpZEluZGV4KSkpOworICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBYm92ZUVxdWFsLCBPcmln
aW4oKSwgY2FsbGVlSW5kZXgsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplKSk7CiAKICAgICAg
ICAgY2hlY2stPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgp
OwogICAgICAgICB9KTsKICAgICB9CiAKLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhl
IGZ1bmN0aW9uIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KKyAgICAvLyBDb21wdXRl
IHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4K
ICAgICBFeHByZXNzaW9uVHlwZSBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIE11bCwgT3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBPcmlnaW4oKSwgY2FsbGVlSW5kZXgpLAogICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9jLCBPcmlnaW4oKSwg
cG9pbnRlclR5cGUoKSwgc2l6ZW9mKENhbGxhYmxlRnVuY3Rpb24pKSk7Ci0gICAgRXhwcmVzc2lv
blR5cGUgY2FsbGFibGVGdW5jdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQWRkLCBPcmlnaW4oKSwgbV9mdW5jdGlvbkluZGV4U3BhY2VWYWx1ZSwgb2Zmc2V0
KTsKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIE9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9u
QnVmZmVyLCBvZmZzZXQpOworCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgQ2FsbGFibGVGdW5jdGlv
biBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQSBudWxsIFNpZ25hdHVyZSog
aW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgorICAgIEV4cHJlc3Npb25UeXBlIGNhbGxl
ZVNpZ25hdHVyZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIE9CSkVD
VF9PRkZTRVRPRihDYWxsYWJsZUZ1bmN0aW9uLCBzaWduYXR1cmUpKTsKKyAgICB7CisgICAgICAg
IC8vIElmIHRoZSBTaWduYXR1cmUqIGlzIG51bGxwdHIsIHdlIHRyYXAuCisgICAgICAgIENoZWNr
VmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3By
b2MsIENoZWNrLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCAKKyAgICAgICAgICAgICAgICBjYWxs
ZWVTaWduYXR1cmUsIAorICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgMCkpKTsKKworICAgICAgICBjaGVjay0+
c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAg
IH0pOworICAgIH0KIAogICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyB0aGUgdmFs
dWUgd2UgZXhwZWN0LgogICAgIHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0
dXJlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgT0JKRUNUX09GRlNF
VE9GKENhbGxhYmxlRnVuY3Rpb24sIHNpZ25hdHVyZSkpOwogICAgICAgICBFeHByZXNzaW9uVHlw
ZSBleHBlY3RlZFNpZ25hdHVyZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc2lnbmF0dXJlKTsKICAgICAgICAgQ2hlY2tWYWx1ZSog
Y2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hl
Y2ssIE9yaWdpbigpLAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBOb3RFcXVhbCwgT3JpZ2luKCksIGNhbGxlZVNpZ25hdHVyZSwgZXhwZWN0ZWRT
aWduYXR1cmUpKTsKQEAgLTcxMyw2ICs3MzksNyBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGxJbmRpcmVjdChjb25zCiAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5
cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODQ2LDcgKzg3Myw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4gcGEKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFr
ZV91bmlxdWU8V2FzbUludGVybmFsRnVuY3Rpb24+KCk7CiAKICAgICBQcm9jZWR1cmUgcHJvY2Vk
dXJlOwotICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dChpbmZvLm1lbW9yeSwgcHJvY2VkdXJlLCBy
ZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4U3BhY2Up
OworICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dCh2bSwgaW5mby5tZW1vcnksIHByb2NlZHVyZSwg
cmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleFNwYWNl
KTsKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgZnVu
Y3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgZnVuY3Rpb25JbmRleFNwYWNl
LCBpbmZvKTsKICAgICBpZiAoIXBhcnNlci5wYXJzZSgpKQogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaAkocmV2aXNpb24gMjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgc3RydWN0IEV4cG9y
dCB7CiAgICAgRXh0ZXJuYWw6OktpbmQga2luZDsKICAgICB1bmlvbiB7CiAgICAgICAgIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBUYWJsZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAgICAgIC8vIEZJ
WE1FIGltcGxlbWVudCBUYWJsZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NzgyCiAgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBNZW1vcnkgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTY3MQogICAgICAgICAvLyBGSVhNRSBpbXBs
ZW1lbnQgR2xvYmFsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQx
MzMKICAgICB9OwpAQCAtMTQ3LDE3ICsxNDcsNDUgQEAgc3RydWN0IFNlZ21lbnQgewogICAgIH0K
IH07CiAKK2NsYXNzIFRhYmxlSW5mb3JtYXRpb24geworcHVibGljOgorICAgIFRhYmxlSW5mb3Jt
YXRpb24oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEqdGhpcyk7CisgICAgfQorCisgICAgVGFi
bGVJbmZvcm1hdGlvbih1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBt
YXhpbXVtLCBib29sIGlzSW1wb3J0KQorICAgICAgICA6IG1faW5pdGlhbChpbml0aWFsKQorICAg
ICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQorICAgICAgICAsIG1faXNJbXBvcnQoaXNJbXBvcnQp
CisgICAgICAgICwgbV9pc1ZhbGlkKHRydWUpCisgICAgeworICAgICAgICBBU1NFUlQoKnRoaXMp
OworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBt
X2lzVmFsaWQ7IH0KKyAgICBib29sIGlzSW1wb3J0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ltcG9y
dDsgfQorICAgIHVpbnQzMl90IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0K
KyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9t
YXhpbXVtOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9pbml0aWFsOworICAgIHN0ZDo6
b3B0aW9uYWw8dWludDMyX3Q+IG1fbWF4aW11bTsKKyAgICBib29sIG1faXNJbXBvcnQgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9pc1ZhbGlkIHsgZmFsc2UgfTsKK307CisKIHN0cnVjdCBNb2R1bGVJ
bmZvcm1hdGlvbiB7CiAgICAgVmVjdG9yPFNpZ25hdHVyZT4gc2lnbmF0dXJlczsKICAgICBWZWN0
b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmUqPiBpbXBvcnRGdW5jdGlv
bnM7Ci0gICAgLy8gRklYTUUgaW1wbGVtZW50IGltcG9ydCBUYWJsZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CiAgICAgLy8gRklYTUUgaW1wbGVtZW50IGlt
cG9ydCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEz
MwogICAgIFZlY3RvcjxTaWduYXR1cmUqPiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlczsKICAg
ICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7CiAgICAgVmVjdG9yPEV4cG9ydD4gZXhwb3J0czsK
ICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZTsKICAg
ICBWZWN0b3I8U2VnbWVudDo6UHRyPiBkYXRhOworICAgIFRhYmxlSW5mb3JtYXRpb24gdGFibGVJ
bmZvcm1hdGlvbjsKIAogICAgIH5Nb2R1bGVJbmZvcm1hdGlvbigpOwogfTsKQEAgLTE4NSwxMyAr
MjEzLDIwIEBAIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIFdhc21Ub0pTU3QKIC8vIFdl
YkFzc2VtYmx5IGRpcmVjdCBjYWxscyBhbmQgY2FsbF9pbmRpcmVjdCB1c2UgaW5kaWNlcyBpbnRv
ICJmdW5jdGlvbiBpbmRleCBzcGFjZSIuIFRoaXMgc3BhY2Ugc3RhcnRzIHdpdGggYWxsIGltcG9y
dHMsIGFuZCB0aGVuIGFsbCBpbnRlcm5hbCBmdW5jdGlvbnMuCiAvLyBDYWxsYWJsZUZ1bmN0aW9u
IGFuZCBGdW5jdGlvbkluZGV4U3BhY2UgYXJlIG9ubHkgbWVhbnQgYXMgZmFzdCBsb29rdXAgdGFi
bGVzIGZvciB0aGVzZSBvcGNvZGVzLCBhbmQgZG8gbm90IG93biBjb2RlLgogc3RydWN0IENhbGxh
YmxlRnVuY3Rpb24gewotICAgIENhbGxhYmxlRnVuY3Rpb24oU2lnbmF0dXJlKiBzaWduYXR1cmUp
CisgICAgQ2FsbGFibGVGdW5jdGlvbigpID0gZGVmYXVsdDsKKworICAgIENhbGxhYmxlRnVuY3Rp
b24oU2lnbmF0dXJlKiBzaWduYXR1cmUsIHZvaWQqIGNvZGUgPSBudWxscHRyKQogICAgICAgICA6
IHNpZ25hdHVyZShzaWduYXR1cmUpCi0gICAgICAgICwgY29kZShudWxscHRyKQorICAgICAgICAs
IGNvZGUoY29kZSkKICAgICB7CiAgICAgfQotICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlOyAvLyBG
SVhNRSBwYWNrIHRoaXMgaW5zaWRlIGEgKHVuaXF1ZWQpIGludGVnZXIgKGZvciBjb3JyZWN0bmVz
cyB0aGUgcGFyc2VyIHNob3VsZCB1bmlxdWUgU2lnbmF0dXJlcyksIGFuZCB0aGVuIHBhY2sgdGhh
dCBpbnRlZ2VyIGludG8gdGhlIGNvZGUgcG9pbnRlci4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NTUxMQotICAgIHZvaWQqIGNvZGU7CisKKyAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gIWNvZGUgJiYgIXNpZ25hdHVyZTsgfQorCisg
ICAgLy8gRklYTUUgcGFjayB0aGlzIGluc2lkZSBhICh1bmlxdWVkKSBpbnRlZ2VyIChmb3IgY29y
cmVjdG5lc3MgdGhlIHBhcnNlciBzaG91bGQgdW5pcXVlIFNpZ25hdHVyZXMpLAorICAgIC8vIGFu
ZCB0aGVuIHBhY2sgdGhhdCBpbnRlZ2VyIGludG8gdGhlIGNvZGUgcG9pbnRlci4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMQorICAgIFNpZ25hdHVyZSogc2ln
bmF0dXJlIHsgbnVsbHB0ciB9OyAKKyAgICB2b2lkKiBjb2RlIHsgbnVsbHB0ciB9OwogfTsKIHR5
cGVkZWYgVmVjdG9yPENhbGxhYmxlRnVuY3Rpb24+IEZ1bmN0aW9uSW5kZXhTcGFjZTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJ
KHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvblBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsNiArMzgyLDggQEAgYm9vbCBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZQogICAgIH0KIAogICAgIGNhc2UgT3BUeXBl
OjpDYWxsSW5kaXJlY3Q6IHsKKyAgICAgICAgaWYgKCFtX2luZm8udGFibGVJbmZvcm1hdGlvbikK
KyAgICAgICAgICAgIHJldHVybiBzZXRFcnJvck1lc3NhZ2UoImNhbGxfaW5kaXJlY3QgaXMgb25s
eSB2YWxpZCB3aGVuIGEgdGFibGUgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIpOwogICAgICAgICB1
aW50MzJfdCBzaWduYXR1cmVJbmRleDsKICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihzaWdu
YXR1cmVJbmRleCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zOTAsNiArMzkyLDkg
QEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZQogICAgICAgICBpZiAo
IXBhcnNlVmFyVUludDEocmVzZXJ2ZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgICAgIGlmIChyZXNlcnZlZCAhPSAwKQorICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yTWVz
c2FnZSgiY2FsbF9pbmRpcmVjdCAncmVzZXJ2ZWQnIHZhcnVpbnQxIG11c3QgYmUgMHgwIik7CisK
ICAgICAgICAgaWYgKG1faW5mby5zaWduYXR1cmVzLnNpemUoKSA8PSBzaWduYXR1cmVJbmRleCkK
ICAgICAgICAgICAgIHJldHVybiBzZXRFcnJvck1lc3NhZ2UoIlRyaWVkIHRvIHVzZSBhIHNpZ25h
dHVyZSBvdXRzaWRlIHRoZSByYW5nZSBvZiB2YWxpZCBzaWduYXR1cmVzIik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseVRhYmxlLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldh
c21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKQEAgLTI1MCw3ICsy
NTEsOSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6VGFibGU6IHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQx
MzUKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgaWYgKCFw
YXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4dGVybmFsOjpN
ZW1vcnk6IHsKQEAgLTMwMCw0NSArMzAzLDEwMSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VG
dW5jdGlvbigpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJz
ZVRhYmxlKCkKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJf
dCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGltdW0pCiB7Ci0gICAgLy8g
RklYTUUgaW1wbGVtZW50IHRhYmxlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjQxMzUKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIEFTU0VS
VCghbWF4aW11bSk7CisKKyAgICB1aW50OF90IGZsYWdzOworICAgIGlmICghcGFyc2VWYXJVSW50
MShmbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcGFyc2VWYXJVSW50
MzIoaW5pdGlhbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChmbGFncykgewor
ICAgICAgICB1aW50MzJfdCBtYXhpbXVtSW50OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMy
KG1heGltdW1JbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChp
bml0aWFsID4gbWF4aW11bUludCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBtYXhpbXVtID0gbWF4aW11bUludDsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpCitib29s
IE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1wb3J0KQogewotICAgIC8v
IFdlIGRvbid0IGFsbG93IHJlZGVjbGFyaW5nIG1lbW9yeS4gRWl0aGVyIHZpYSBpbXBvcnQgb3Ig
ZGVmaW5pdGlvbi4KLSAgICBpZiAobV9tb2R1bGUtPm1lbW9yeSkKKyAgICAvLyBXZSdyZSBvbmx5
IGFsbG93ZWQgYSB0b3RhbCBvZiBvbmUgVGFibGUgaW1wb3J0IG9yIGRlZmluaXRpb24uCisgICAg
aWYgKG1faGFzVGFibGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVpbnQ4X3QgZmxh
Z3M7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKKyAgICBtX2hhc1RhYmxlID0gdHJ1
ZTsKKworICAgIGludDhfdCB0eXBlOworICAgIGlmICghcGFyc2VJbnQ3KHR5cGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHR5cGUgIT0gV2FzbTo6QW55ZnVuYykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgdWludDMyX3QgaW5pdGlhbDsKLSAgICBpZiAoIXBhcnNlVmFy
VUludDMyKGluaXRpYWwpKQorICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Cisg
ICAgaWYgKCFwYXJzZVJlc2l6YWJsZUxpbWl0cyhpbml0aWFsLCBtYXhpbXVtKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQoaW5pdGlhbCkpCisg
ICAgaWYgKCFKU1dlYkFzc2VtYmx5VGFibGU6OmlzVmFsaWRTaXplKGluaXRpYWwpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3VudChpbml0aWFs
KTsKKyAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7CiAKKyAgICBt
X21vZHVsZS0+dGFibGVJbmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4
aW11bSwgaXNJbXBvcnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTW9kdWxlUGFy
c2VyOjpwYXJzZVRhYmxlKCkKK3sKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICBpZiAoIXBhcnNl
VmFyVUludDMyKGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2Ugb25s
eSBhbGxvdyBvbmUgdGFibGUgZm9yIG5vdy4KKyAgICBpZiAoY291bnQgIT0gMSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBpc0ltcG9ydCA9IGZhbHNlOworICAgIHJldHVybiBw
YXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKK30KKworYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNl
TWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpCit7CisgICAgLy8gV2UgZG9uJ3QgYWxsb3cgcmVk
ZWNsYXJpbmcgbWVtb3J5LiBFaXRoZXIgdmlhIGltcG9ydCBvciBkZWZpbml0aW9uLgorICAgIGlm
IChtX21vZHVsZS0+bWVtb3J5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQYWdlQ291
bnQgaW5pdGlhbFBhZ2VDb3VudDsKICAgICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsKLSAg
ICBpZiAoZmxhZ3MpIHsKLSAgICAgICAgdWludDMyX3QgbWF4aW11bTsKLSAgICAgICAgaWYgKCFw
YXJzZVZhclVJbnQzMihtYXhpbXVtKSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGluaXRpYWw7
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07CisgICAgICAgIGlmICgh
cGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQobWF4aW11bSkpCisg
ICAgICAgIEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKKyAgICAgICAg
aWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQoaW5pdGlhbCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VDb3VudChtYXhpbXVtKTsKLSAg
ICAgICAgaWYgKGluaXRpYWxQYWdlQ291bnQgPiBtYXhpbXVtUGFnZUNvdW50KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbml0aWFsUGFnZUNvdW50ID0gUGFnZUNvdW50KGlu
aXRpYWwpOworCisgICAgICAgIGlmIChtYXhpbXVtKSB7CisgICAgICAgICAgICBpZiAoIVBhZ2VD
b3VudDo6aXNWYWxpZCgqbWF4aW11bSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VDb3VudCgqbWF4aW11bSk7CisgICAg
ICAgIH0KICAgICB9CisgICAgQVNTRVJUKGluaXRpYWxQYWdlQ291bnQpOworICAgIEFTU0VSVCgh
bWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50ID49IGluaXRpYWxQYWdlQ291bnQp
OwogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9OwogICAgIG1fbW9k
dWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVt
UGFnZUNvdW50LCBwaW5uZWRTaXplcywgaXNJbXBvcnQpOwpAQCAtMzk3LDcgKzQ1Niw3IEBAIGJv
b2wgTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCgpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEV4dGVybmFsOjpUYWJsZTogewotICAgICAgICAgICAgLy8gRklY
TUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQorICAgICAg
ICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTc4MgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5h
bDo6TWVtb3J5OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5oCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEyICs3OSwxNSBA
QCBwcml2YXRlOgogI3VuZGVmIFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUgogCiAgICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCk7Cisg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1wb3J0
KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50
MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGltdW0pOwogCiAgICAg
Vk0qIG1fdm07CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVs
ZTsKICAgICBGdW5jdGlvbkluZGV4U3BhY2UgbV9mdW5jdGlvbkluZGV4U3BhY2U7CiAgICAgVmVj
dG9yPEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeT4gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7
CiAgICAgYm9vbCBtX2ZhaWxlZCB7IHRydWUgfTsKKyAgICBib29sIG1faGFzVGFibGUgeyBmYWxz
ZSB9OwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3VpbnQzMl90IFRvTm9uV3JhcHBpbmdVaW50MzIoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7
CisKK0FMV0FZU19JTkxJTkUgdWludDMyX3QgdG9Ob25XcmFwcGluZ1VpbnQzMihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBkb3VibGUgZG91
YmxlVmFsdWUgPSB2YWx1ZS50b0ludGVnZXIoZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOworICAgIGlmIChkb3VibGVWYWx1ZSA8IDAgfHwgZG91YmxlVmFs
dWUgPiBVSU5UX01BWCkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LAorICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkV4cGVj
dCBhbiBpbnRlZ2VyIGFyZ3VtZW50IGluIHRoZSByYW5nZTogWzAsIDJeMzIgLSAxXSIpKSk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQz
Ml90Pihkb3VibGVWYWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyMDk3MDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjp2aXNpdENoaWxkcmUKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9t
b2R1bGUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZU5hbWVzcGFj
ZU9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbWVtb3J5KTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbnVtSW1wb3J0RnVuY3Rpb25zOyArK2kpCiAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9uKGkpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNP
YmplY3QuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCisjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseVRhYmxlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC03MSwxMSArNzIsMTYg
QEAgcHVibGljOgogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1f
bWVtb3J5LmdldCgpOyB9CiAgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5
TWVtb3J5KiBtZW1vcnkpIHsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBtZW1vcnkpOyB9CiAKKyAg
ICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZS5nZXQoKTsgfQor
ICAgIHZvaWQgc2V0VGFibGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKSB7IG1f
dGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7IH0KKwogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0
T2ZJbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpCiAgICAgewogICAgICAgICByZXR1cm4gb2Zm
c2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPikgKiBp
ZHg7CiAgICAgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRhYmxlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV90YWJsZSk7IH0KKwog
cHJvdGVjdGVkOgogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVu
c2lnbmVkKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVs
ZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CkBAIC05Niw2ICsxMDIsNyBAQCBwcml2YXRl
OgogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKICAgICBX
cml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5PiBtX21lbW9yeTsKKyAg
ICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRhYmxlPiBtX3RhYmxlOwogICAgIHVuc2lnbmVk
IG1fbnVtSW1wb3J0RnVuY3Rpb25zOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCShyZXZpc2lvbiAyMDk3
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMjEgQEAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNXZWJBc3NlbWJseVRhYmxlKiBKU1dlYkFzc2VtYmx5
VGFibGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorY29uc3QgQ2xhc3NJ
bmZvIEpTV2ViQXNzZW1ibHlUYWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFibGUiLCAm
QmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlUYWJsZSkg
fTsKKworSlNXZWJBc3NlbWJseVRhYmxlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluaXRp
YWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCiB7Ci0gICAgYXV0byogaW5zdGFu
Y2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFibGU+KHZtLmhl
YXApKSBKU1dlYkFzc2VtYmx5VGFibGUodm0sIHN0cnVjdHVyZSk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0
aWFsKSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFz
c2VtYmx5VGFibGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5VGFibGUodm0sIHN0cnVjdHVyZSwg
aW5pdGlhbCwgbWF4aW11bSk7CiAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC00NCw5ICs1MywyMyBAQCBTdHJ1Y3R1cmUqIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6Y3JlYXRlU3RyCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNzZW1ibHlU
YWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNXZWJBc3NlbWJseVRhYmxlOjpK
U1dlYkFzc2VtYmx5VGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3Qg
aW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSkKICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSkKIHsKKyAgICBtX3NpemUgPSBpbml0aWFsOworICAgIEFTU0VSVChpc1ZhbGlk
U2l6ZShtX3NpemUpKTsKKyAgICBtX21heGltdW0gPSBtYXhpbXVtOworICAgIEFTU0VSVCghbV9t
YXhpbXVtIHx8ICptX21heGltdW0gPj0gbV9zaXplKTsKKworICAgIC8vIEZJWE1FOiBJdCBtaWdo
dCBiZSB3b3J0aCB0cnlpbmcgdG8gcHJlLWFsbG9jYXRlIG1heGltdW0gaGVyZS4gVGhlIHNwZWMg
cmVjb21tZW5kcyBkb2luZyBzby4KKyAgICAvLyBCdXQgZm9yIG5vdywgd2UncmUgbm90IGRvaW5n
IHRoYXQuCisgICAgbV9mdW5jdGlvbnMgPSBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVGdW5jdGlv
bj46Om1hbGxvYyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlvbikgKiBzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fc2l6ZSkpOworICAgIG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQdHI8V3JpdGVCYXJy
aWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8V2Vi
QXNzZW1ibHlGdW5jdGlvbj4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpKTsKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpIHsKKyAgICAgICAgbmV3ICgmbV9m
dW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICAgICAgQVNT
RVJUKCFtX2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmUpOyAvLyBXZSByZWx5IG9uIHRoaXMg
aW4gY29tcGlsZWQgY29kZS4KKyAgICAgICAgbmV3ICgmbV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkg
V3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+KCk7CisgICAgfQogfQogCiB2b2lkIEpT
V2ViQXNzZW1ibHlUYWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpAQCAtNjIsMTMgKzg1LDUy
IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKIAogdm9pZCBKU1dl
YkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlU
YWJsZSo+KGNlbGwpOworICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmpl
Y3QtPm1fc2l6ZTsgKytpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9q
c0Z1bmN0aW9ucy5nZXQoKVtpXSk7CiB9CiAKLWNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5
VGFibGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LlRhYmxlIiwgJkJhc2U6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5VGFibGUpIH07Citib29sIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJfdCBuZXdTaXplKQoreworICAgIGlmIChuZXdTaXplIDwg
bV9zaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG5ld1NpemUgPT0gbV9zaXpl
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiAq
bWF4aW11bSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpc1ZhbGlkU2l6ZShu
ZXdTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IHdlIHNob3Vs
ZCBwcm90ZWN0IG91cnNlbHZlcyBmcm9tIGNyYXp5IHNpemVzIGhlcmUuCisgICAgbV9mdW5jdGlv
bnMucmVhbGxvYyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlvbikgKiBzdGF0aWNfY2FzdDxz
aXplX3Q+KG5ld1NpemUpKTsKKyAgICBtX2pzRnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdyaXRl
QmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG5ld1Np
emUpKTsKKworICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsraSkg
eworICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5j
dGlvbigpOworICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJp
ZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4oKTsKKyAgICB9CisgICAgbV9zaXplID0gbmV3U2l6ZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmNsZWFyRnVu
Y3Rpb24odWludDMyX3QgaW5kZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3Np
emUpOworICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV3JpdGVCYXJyaWVyPFdlYkFz
c2VtYmx5RnVuY3Rpb24+KCk7CisgICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV2FzbTo6
Q2FsbGFibGVGdW5jdGlvbigpOworICAgIEFTU0VSVCghbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhd
LnNpZ25hdHVyZSk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorfQorCit2
b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50MzJfdCBpbmRl
eCwgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24pCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
aW5kZXggPCBtX3NpemUpOworICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNldCh2bSwg
dGhpcywgZnVuY3Rpb24pOworICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNh
bGxhYmxlRnVuY3Rpb24oZnVuY3Rpb24tPnNpZ25hdHVyZSgpLCBmdW5jdGlvbi0+d2FzbUVudHJ5
cG9pbnQoKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24g
MjA5NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDIzICsyOSw1NCBAQAogCiAjaW5jbHVkZSAiSlNE
ZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5RnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCituYW1lc3BhY2UgV2FzbSB7CitzdHJ1Y3QgQ2FsbGFibGVGdW5jdGlvbjsK
K30KKwogY2xhc3MgSlNXZWJBc3NlbWJseVRhYmxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAK
LSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseVRhYmxlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsK
KyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseVRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBT
dHJ1Y3R1cmUqLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhp
bXVtKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi1wcm90ZWN0ZWQ6Ci0g
ICAgSlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQorICAgIHVp
bnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBib29sIGdyb3codWlu
dDMyX3QgbmV3U2l6ZSkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIGdldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9qc0Z1bmN0aW9ucy5nZXQo
KVtpbmRleF0uZ2V0KCk7CisgICAgfQorICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1aW50MzJfdCBp
bmRleCk7CisgICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90IGluZGV4LCBXZWJBc3Nl
bWJseUZ1bmN0aW9uKik7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fc2l6ZSk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnVuY3Rpb25zKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9mdW5jdGlvbnMpOyB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB0
b3BzIG91dCBhdCB+Mzg0IE1CIHdvcnRoIG9mIGRhdGEgaW4gdGhpcyBjbGFzcy4KKyAgICAgICAg
cmV0dXJuIHNpemUgPCAoMSA8PCAyNCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTV2ViQXNz
ZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9u
YWw8dWludDMyX3Q+IG1heGltdW0pOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIE1hbGxvY1B0cjxXYXNtOjpDYWxs
YWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICBNYWxsb2NQdHI8V3JpdGVCYXJyaWVyPFdl
YkFzc2VtYmx5RnVuY3Rpb24+PiBtX2pzRnVuY3Rpb25zOworICAgIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IG1fbWF4aW11bTsKKyAgICB1aW50MzJfdCBtX3NpemU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE3LDcgKzExNyw3IEBAIEVuY29kZWRKU1ZhbHVlIFdlYkFzc2VtYmx5RnVuY3Rpb246
OmNhbGwKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHByZXZKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UgPSB2bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiAgICAgdm0udG9wSlNXZWJBc3NlbWJs
eUluc3RhbmNlID0gaW5zdGFuY2UoKTsKICAgICBBU1NFUlQoaW5zdGFuY2UoKSk7Ci0gICAgRW5j
b2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1FbnRyeVRvV2FzbSh3ZWJBc3NlbWJseUNhbGxlZSgp
LT5lbnRyeXBvaW50KCksICZ2bSwgcHJvdG9DYWxsRnJhbWUpOworICAgIEVuY29kZWRKU1ZhbHVl
IHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20obV9qc0VudHJ5cG9pbnQtPmVudHJ5cG9pbnQoKSwg
JnZtLCBwcm90b0NhbGxGcmFtZSk7CiAgICAgdm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlID0g
cHJldkpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKIAogICAgIC8vIEZJWE1FIGlzIHRoaXMgY29ycmVj
dD8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDg3NgpAQCAtMTQw
LDEyICsxNDAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y2FsbAog
ICAgIHJldHVybiBFbmNvZGVkSlNWYWx1ZSgpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uKiBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlLCBXYXNtOjpT
aWduYXR1cmUqIHNpZ25hdHVyZSkKK1dlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVu
Y3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKIHsKICAg
ICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxX
ZWJBc3NlbWJseUZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3Ry
dWN0b3IsIG51bGxwdHIsIG5hbWUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFs
T2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCk7CiAgICAgV2ViQXNzZW1ibHlG
dW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJs
eUZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpOwotICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJs
ZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSwgY2FsbGVlLCBzaWduYXR1cmUpOworICAgIGZ1bmN0
aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5j
ZSwganNFbnRyeXBvaW50LCB3YXNtRW50cnlwb2ludCwgc2lnbmF0dXJlKTsKICAgICByZXR1cm4g
ZnVuY3Rpb247CiB9CiAKQEAgLTE2NiwxNSArMTY2LDE4IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbnN0YW5jZSk7Ci0gICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fd2FzbUNhbGxlZSk7CisgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fanNFbnRyeXBvaW50KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV93YXNtRW50cnlwb2ludCk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5j
dGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxl
LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSwgV2FzbTo6U2ln
bmF0dXJlKiBzaWduYXR1cmUpCit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3Ro
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2Fz
bUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwogICAgIEFTU0VSVChp
bmhlcml0cyhpbmZvKCkpKTsKICAgICBtX2luc3RhbmNlLnNldCh2bSwgdGhpcywgaW5zdGFuY2Up
OwotICAgIG1fd2FzbUNhbGxlZS5zZXQodm0sIHRoaXMsIHdhc21DYWxsZWUpOworICAgIEFTU0VS
VChqc0VudHJ5cG9pbnQgIT0gd2FzbUVudHJ5cG9pbnQpOworICAgIG1fanNFbnRyeXBvaW50LnNl
dCh2bSwgdGhpcywganNFbnRyeXBvaW50KTsKKyAgICBtX3dhc21FbnRyeXBvaW50LnNldCh2bSwg
dGhpcywgd2FzbUVudHJ5cG9pbnQpOwogICAgIG1fc2lnbmF0dXJlID0gc2lnbmF0dXJlOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsy
OCwxMiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNs
YXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiBzdHJ1Y3QgUHJvdG9DYWxsRnJhbWU7CiBjbGFzcyBX
ZWJBc3NlbWJseUluc3RhbmNlOwogCkBAIC01MywyOCArNTMsMjkgQEAgcHVibGljOgogCiAgICAg
REVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJB
c3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBj
b25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiwgV2FzbTo6U2lnbmF0dXJlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIGNv
bnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IGpzRW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQsIFdhc206
OlNpZ25hdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3
ZWJBc3NlbWJseUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUNhbGxlZS5nZXQoKTsgfQog
ICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2lu
c3RhbmNlLmdldCgpOyB9Ci0gICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUoKQor
ICAgIFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKCkKICAgICB7IAogICAgICAgICBBU1NFUlQo
bV9zaWduYXR1cmUpOwogICAgICAgICByZXR1cm4gbV9zaWduYXR1cmU7CiAgICAgfQogICAgIEVu
Y29kZWRKU1ZhbHVlIGNhbGwoVk0mLCBQcm90b0NhbGxGcmFtZSopOworICAgIHZvaWQqIHdhc21F
bnRyeXBvaW50KCkgeyByZXR1cm4gbV93YXNtRW50cnlwb2ludC0+ZW50cnlwb2ludCgpOyB9CiAK
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJs
ZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgV2FzbTo6U2lnbmF0dXJlKik7CisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgSlNXZWJBc3NlbWJs
eUNhbGxlZSoganNFbnRyeXBvaW50LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2lu
dCwgV2FzbTo6U2lnbmF0dXJlKik7CiAKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlv
bihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKICAgICBXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwotICAgIFdyaXRlQmFycmllcjxKU1dl
YkFzc2VtYmx5Q2FsbGVlPiBtX3dhc21DYWxsZWU7CisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlDYWxsZWU+IG1fanNFbnRyeXBvaW50OworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2Vt
Ymx5Q2FsbGVlPiBtX3dhc21FbnRyeXBvaW50OwogICAgIFdhc206OlNpZ25hdHVyZSogbV9zaWdu
YXR1cmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDEwICs4OCwxMCBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgLy8gTGV0IGlt
cG9ydHMgYmUgYW4gaW5pdGlhbGx5LWVtcHR5IGxpc3Qgb2YgZXh0ZXJuYWwgdmFsdWVzLgogICAg
IHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucyA9IDA7CiAKLSAgICAvLyBGSVhNRSBpbXBsZW1l
bnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQog
ICAgIC8vIEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NDEzMwogCiAgICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsK
KyAgICBib29sIGhhc1RhYmxlSW1wb3J0ID0gZmFsc2U7CiAgICAgLy8gRm9yIGVhY2ggaW1wb3J0
IGkgaW4gbW9kdWxlLmltcG9ydHM6CiAgICAgZm9yIChhdXRvJiBpbXBvcnQgOiBtb2R1bGVJbmZv
cm1hdGlvbi5pbXBvcnRzKSB7CiAgICAgICAgIC8vIDEuIExldCBvIGJlIHRoZSByZXN1bHRhbnQg
dmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVsZV9uYW1lKS4KQEAg
LTEzMSwxMiArMTMxLDM0IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0
ZXJuYWw6OlRhYmxlOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzVGFibGVJbXBv
cnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFsaWRhdGlvbiBmYWlsdXJl
LgogICAgICAgICAgICAgLy8gNy4gT3RoZXJ3aXNlIChpIGlzIGEgdGFibGUgaW1wb3J0KToKLSAg
ICAgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBUYWJsZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAgICAgICAgICBoYXNUYWJsZUltcG9ydCA9IHRy
dWU7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNEeW5hbWljQ2Fz
dDxKU1dlYkFzc2VtYmx5VGFibGUqPih2YWx1ZSk7CiAgICAgICAgICAgICAvLyBpLiBJZiB2IGlz
IG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAg
ICAgICAgICBpZiAoIXRhYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3Nl
bWJseS5UYWJsZSIpKSkpOworCisgICAgICAgICAgICB1aW50MzJfdCBleHBlY3RlZEluaXRpYWwg
PSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKTsKKyAgICAgICAg
ICAgIHVpbnQzMl90IGFjdHVhbEluaXRpYWwgPSB0YWJsZS0+c2l6ZSgpOworICAgICAgICAgICAg
aWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4g
J2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKSk7CisKKyAgICAgICAgICAgIGlmIChzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi50
YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSkgeworICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9u
YWw8dWludDMyX3Q+IGFjdHVhbE1heGltdW0gPSB0YWJsZS0+bWF4aW11bSgpOworICAgICAgICAg
ICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiVGFi
bGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWly
ZXMgdGhhdCBpdCBkb2VzIikpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICgqYWN0dWFsTWF4aW11bSA+ICpleHBlY3RlZE1heGltdW0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIlRhYmxlIGltcG9ydHMgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1
bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byB0YWJsZXMuCiAgICAgICAg
ICAgICAvLyBpaWkuIEFwcGVuZCB2LltbVGFibGVdXSB0byBpbXBvcnRzLgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRU
YWJsZSh2bSwgdGFibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7CkBAIC0xODUsNyArMjA3LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgewogICAgICAgICBpZiAo
ISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lmlz
SW1wb3J0KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhbiBpbXBv
cnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIC8v
IFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIE1lbW9yeSBpbXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUg
dGhyb3duIGFuIGV4Y2VwdGlvbi4KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhhc01lbW9y
eUltcG9ydCk7CiAgICAgICAgIH0KIApAQCAtMjAwLDYgKzIyMiwyMSBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB7Cisg
ICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYgbW9kdWxl
SW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKSB7CisgICAgICAgICAgICAv
LyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBUYWJsZSBpbXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUg
dGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhhc1RhYmxl
SW1wb3J0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRh
YmxlSW5mb3JtYXRpb24gJiYgIWhhc1RhYmxlSW1wb3J0KSB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKTsK
KyAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIFRhYmxlIHdoZW4gaXQncyBhIFRhYmxlIGRlZmlu
aXRpb24uCisgICAgICAgICAgICBpbnN0YW5jZS0+c2V0VGFibGUodm0sCisgICAgICAgICAgICAg
ICAgSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgbW9kdWxlSW5mb3JtYXRp
b24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5m
b3JtYXRpb24ubWF4aW11bSgpKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBtb2R1bGVSZWNvcmQtPmxp
bmsoZXhlYywgaW5zdGFuY2UpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpZiAodmVyYm9zZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldh
c21QYWdlQ291bnQuaCIKQEAgLTU0LDE3ICs1NSw2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDEpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVt
b3J5IGV4cGVjdHMgZXhhY3RseSBvbmUgYXJndW1lbnQiKSkpKTsKIAotICAgIGF1dG8gZ2V0VWlu
dDMyID0gWyZdIChKU1ZhbHVlIHZhbHVlKSAtPiB1aW50MzJfdCB7Ci0gICAgICAgIGRvdWJsZSBk
b3VibGVWYWx1ZSA9IHZhbHVlLnRvSW50ZWdlcihleGVjKTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwotICAgICAgICBpZiAoZG91YmxlVmFsdWUgPCAwIHx8
IGRvdWJsZVZhbHVlID4gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsCi0gICAgICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIHRoZSAnaW5pdGlhbCcgYW5k
ICdtYXhpbXVtJyBwcm9wZXJ0aWVzIHRvIGJlIGludGVnZXJzIGluIHRoZSByYW5nZTogWzAsIDJe
MzIgLSAxXSIpKSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRvdWJsZVZhbHVlKTsKLSAgICB9OwotCiAgICAg
SlNPYmplY3QqIG1lbW9yeURlc2NyaXB0b3I7CiAgICAgewogICAgICAgICBKU1ZhbHVlIGFyZ3Vt
ZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC03OCw3ICs2OCw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgSWRlbnRpZmllciBpbml0aWFsID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpbml0aWFsIik7CiAgICAgICAgIEpTVmFsdWUg
bWluU2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMsIGluaXRpYWwpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7Ci0gICAgICAgIHVpbnQz
Ml90IHNpemUgPSBnZXRVaW50MzIobWluU2l6ZVZhbHVlKTsKKyAgICAgICAgdWludDMyX3Qgc2l6
ZSA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywgbWluU2l6ZVZhbHVlKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgICAgICBpZiAoIVdhc206OlBh
Z2VDb3VudDo6aXNWYWxpZChzaXplKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVj
LCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSAnaW5pdGlhbCcgcGFnZSBjb3VudCBp
cyB0b28gbGFyZ2UiKSkpKTsKQEAgLTkzLDEwICs4MywxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIGlmIChoYXNQcm9wZXJ0eSkgewogICAgICAg
ICAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhlYywg
bWF4aW11bSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7Ci0gICAgICAgICAgICB1aW50MzJfdCBzaXplID0gZ2V0VWludDMyKG1heFNpemVWYWx1ZSk7
CisgICAgICAgICAgICB1aW50MzJfdCBzaXplID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBt
YXhTaXplVmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgICAgICAgICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQoc2l6ZSkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2Vi
QXNzZW1ibHkuTWVtb3J5ICdtYXhpbXVtJyBwYWdlIGNvdW50IGlzIHRvbyBsYXJnZSIpKSkpOwot
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgICAg
ICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFdhc206OlBhZ2VDb3VudChzaXplKTsKIAogICAgICAg
ICAgICAgaWYgKGluaXRpYWxQYWdlQ291bnQgPiBtYXhpbXVtUGFnZUNvdW50KSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDk3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDcgKzc3LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5h
bDo6VGFibGU6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3ODIKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Ok1lbW9yeTogewpAQCAtMTM2
LDE2ICsxMzYsMTcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwog
ICAgICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4
b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCiAgICAgICAgICAgICAvLyAgICAgYi4gQXBwZW5k
IGZ1bmMgdG8gZnVuY3MuCiAgICAgICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCi0gICAg
ICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtQ2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5mdW5jdGlvbkluZGV4KTsKKyAg
ICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IG1vZHVs
ZS0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAuZnVuY3Rpb25J
bmRleCk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENh
bGxlZSA9IG1vZHVsZS0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGV4cC5mdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZSogc2lnbmF0
dXJlID0gbW9kdWxlLT5zaWduYXR1cmVGb3JGdW5jdGlvbkluZGV4U3BhY2UoZXhwLmZ1bmN0aW9u
SW5kZXgpOwotICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJB
c3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1
bWVudHMuc2l6ZSgpLCBleHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCB3YXNtQ2FsbGVlLCBz
aWduYXR1cmUpOworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5h
cmd1bWVudHMuc2l6ZSgpLCBleHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCBqc0VudHJ5cG9p
bnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmUpOwogICAgICAgICAgICAg
ZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgaWYgKGhhc1N0YXJ0ICYmIHN0
YXJ0RnVuY3Rpb25JbmRleFNwYWNlID09IGV4cC5mdW5jdGlvbkluZGV4KQogICAgICAgICAgICAg
ICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6OlRhYmxlOiB7
Ci0gICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0MTM1CisgICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzgyCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpNZW1vcnk6IHsKQEAgLTE3NCw4ICsxNzUsOSBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgIC8vIEZJ
WE1FIGNhbiBzdGFydCBjYWxsIGltcG9ydHMgLyB0YWJsZXM/IFRoaXMgYXNzdW1lcyBub3QuIGh0
dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9kZXNpZ24vaXNzdWVzLzg5NgogICAgICAgICBp
ZiAoIW1fc3RhcnRGdW5jdGlvbi5nZXQoKSkgewogICAgICAgICAgICAgLy8gVGhlIHN0YXJ0IGZ1
bmN0aW9uIHdhc24ndCBhZGRlZCBhYm92ZS4gSXQgbXVzdCBiZSBhIHB1cmVseSBpbnRlcm5hbCBm
dW5jdGlvbi4KLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21DYWxsZWUgPSBt
b2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5j
dGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rp
b24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0
dXJlLT5hcmd1bWVudHMuc2l6ZSgpLCAic3RhcnQiLCBpbnN0YW5jZSwgd2FzbUNhbGxlZSwgc2ln
bmF0dXJlKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENh
bGxlZSA9IG1vZHVsZS0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShz
dGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiB3YXNtRW50cnlwb2ludENhbGxlZSA9IG1vZHVsZS0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAg
IFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSwgInN0YXJ0
IiwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNp
Z25hdHVyZSk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5j
dGlvbik7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDIwOTcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDgg
QEAKIAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseVRhYmxlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIgog
CiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oIgpAQCAtNDMsMTIg
KzQ1LDUzIEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWMKICBAZW5k
CiAgKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNX
ZWJBc3NlbWJseVRhYmxlKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY0MTM1Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIldl
YkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgVGFibGUgY29uc3RydWN0b3IgcHJv
cGVydHkiKSkpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIG1lbW9yeURlc2Ny
aXB0b3I7CisgICAgeworICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQo
MCk7CisgICAgICAgIGlmICghYXJndW1lbnQuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUgZXhwZWN0cyBp
dHMgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IikpKSk7CisgICAgICAgIG1lbW9yeURl
c2NyaXB0b3IgPSBqc0Nhc3Q8SlNPYmplY3QqPihhcmd1bWVudCk7CisgICAgfQorCisgICAgewor
ICAgICAgICBJZGVudGlmaWVyIGVsZW1lbnRJZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAiZWxlbWVudCIpOworICAgICAgICBKU1ZhbHVlIGVsZW1lbnRWYWx1ZSA9IG1lbW9yeURl
c2NyaXB0b3ItPmdldChleGVjLCBlbGVtZW50SWRlbnQpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIFN0cmluZyBlbGVtZW50U3RyaW5nID0g
ZWxlbWVudFZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIGlmIChlbGVtZW50U3RyaW5nICE9ICJhbnlm
dW5jIikKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2Vi
QXNzZW1ibHkuVGFibGUgZXhwZWN0cyBpdHMgJ2VsZW1lbnQnIGZpZWxkIHRvIGJlIHRoZSBzdHJp
bmcgJ2FueWZ1bmMnIikpKSk7CisgICAgfQorCisgICAgSWRlbnRpZmllciBpbml0aWFsSWRlbnQg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImluaXRpYWwiKTsKKyAgICBKU1ZhbHVlIGlu
aXRpYWxTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhlYywgaW5pdGlhbElkZW50
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgdWludDMy
X3QgaW5pdGlhbCA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywgaW5pdGlhbFNpemVWYWx1ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworCisgICAgc3RkOjpv
cHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKKyAgICBJZGVudGlmaWVyIG1heGltdW1JZGVudCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bSIpOworICAgIGJvb2wgaGFzUHJv
cGVydHkgPSBtZW1vcnlEZXNjcmlwdG9yLT5oYXNQcm9wZXJ0eShleGVjLCBtYXhpbXVtSWRlbnQp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICBpZiAoaGFz
UHJvcGVydHkpIHsKKyAgICAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlw
dG9yLT5nZXQoZXhlYywgbWF4aW11bUlkZW50KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICBtYXhpbXVtID0gdG9Ob25XcmFwcGluZ1VpbnQz
MihleGVjLCBtYXhTaXplVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CisKKyAgICAgICAgaWYgKGluaXRpYWwgPiAqbWF4aW11bSkgeworICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLAorICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCInbWF4aW11bScgcHJvcGVydHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhl
ICdpbml0aWFsJyBwcm9wZXJ0eSIpKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgdGhyb3dT
Y29wZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5
VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseVRhYmxlU3RydWN0dXJlKCksIGluaXRpYWwsIG1heGltdW0pKTsKIH0KIAogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlUYWJsZShFeGVj
U3RhdGUqIHN0YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwOTcw
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJG
dW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5SGVscGVycy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJsZS5oIgog
CiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCIKIApAQCAtNDIsMTAg
KzQ0LDExMiBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwCiAgQGVu
ZAogICovCiAKLVdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUqIFdlYkFzc2VtYmx5VGFibGVQcm90
b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCitzdGF0aWMgQUxXQVlTX0lOTElORSBKU1dlYkFzc2VtYmx5VGFibGUqIGdldFRhYmxlKEV4
ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU1ZhbHVlIHYpCit7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiByZXN1
bHQgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KHYpOworICAgIGlmICghcmVz
dWx0KSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIAorICAgICAg
ICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiZXhwZWN0ZWQgfHRoaXN8
IHZhbHVlIHRvIGJlIGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhYmxlIikpKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0xlbmd0aChF
eGVjU3RhdGUqKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJs
ZVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHZXQoRXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNTZXQoRXhlY1N0YXRlKik7
CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVu
Y0xlbmd0aChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTV2Vi
QXNzZW1ibHlUYWJsZSogdGFibGUgPSBnZXRUYWJsZShleGVjLCB2bSwgZXhlYy0+dGhpc1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRhYmxlLT5zaXplKCkpKTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR3JvdyhFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTV2ViQXNzZW1ibHlUYWJs
ZSogdGFibGUgPSBnZXRUYWJsZShleGVjLCB2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKworICAgIHVpbnQzMl90IGluZGV4
ID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIGlmICghdGFibGUtPmdyb3co
aW5kZXgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAg
ICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5U
YWJsZS5wcm90b3R5cGUuZ3JvdyBjb3VsZCBub3QgZ3JvdyB0aGUgdGFibGUiKSkpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlU
YWJsZVByb3RvRnVuY0dldChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBnZXRUYWJsZShleGVjLCB2bSwgZXhlYy0+
dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
KworICAgIHVpbnQzMl90IGluZGV4ID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBleGVjLT5h
cmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwor
ICAgIGlmIChpbmRleCA+PSB0YWJsZS0+c2l6ZSgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLmdldCBleHBlY3RzIGFuIGlu
dGVnZXIgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSB0YWJsZSIpKSk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorCisgICAgaWYgKFdlYkFzc2VtYmx5RnVuY3Rpb24qIHJlc3VsdCA9IHRh
YmxlLT5nZXRGdW5jdGlvbihpbmRleCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKK30KKworRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jU2V0KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNXZWJBc3NlbWJseVRh
YmxlKiB0YWJsZSA9IGdldFRhYmxlKGV4ZWMsIHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworCisgICAgSlNWYWx1ZSB2YWx1
ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9u
ID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odmFsdWUpOworICAgIGlmICgh
dmFsdWUuaXNOdWxsKCkgJiYgIWZ1bmN0aW9uKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuc2V0IGV4cGVjdHMgdGhlIHNlY29u
ZCBhcmd1bWVudCB0byBiZSBudWxsIG9yIGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LkZ1bmN0
aW9uIikpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBpbmRl
eCA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKworICAgIGlmIChpbmRleCA+PSB0
YWJsZS0+c2l6ZSgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
CisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNz
ZW1ibHkuVGFibGUucHJvdG90eXBlLnNldCBleHBlY3RzIGFuIGludGVnZXIgbGVzcyB0aGFuIHRo
ZSBzaXplIG9mIHRoZSB0YWJsZSIpKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgaWYgKHZhbHVlLmlzTnVsbCgpKQorICAgICAgICB0YWJsZS0+Y2xlYXJGdW5jdGlvbihpbmRl
eCk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCghIWZ1bmN0aW9uKTsKKyAgICAgICAgdGFi
bGUtPnNldEZ1bmN0aW9uKHZtLCBpbmRleCwgZnVuY3Rpb24pOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitXZWJBc3NlbWJseVRh
YmxlUHJvdG90eXBlKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAg
ICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRh
YmxlUHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZSh2bSwgc3Ry
dWN0dXJlKTsKLSAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBvYmplY3QtPmZp
bmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAK
QEAgLTU0LDkgKzE1OCwxNCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6
OmNyCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQog
Ci12b2lkIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
K3ZvaWQgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKKworICAgIEpTQ19OQVRJVkVfR0VUVEVSKCJsZW5ndGgiLCB3ZWJBc3NlbWJseVRhYmxl
UHJvdG9GdW5jTGVuZ3RoLCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICBKU0NfTkFUSVZFX0ZV
TkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigiZ3JvdyIsIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1
bmNHcm93LCBEb250RW51bSwgMSk7CisgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04oImdldCIsIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAx
KTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigic2V0Iiwgd2Vi
QXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldCwgRG9udEVudW0sIDIpOwogfQogCiBXZWJBc3NlbWJs
eVRhYmxlUHJvdG90eXBlOjpXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVRhYmxlUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyMDk3MDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIERFQ0xB
UkVfSU5GTzsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIAogcHJpdmF0ZToK
ICAgICBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Cg==
</data>
<flag name="review"
          id="319341"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297034</attachid>
            <date>2016-12-13 12:27:00 -0800</date>
            <delta_ts>2016-12-13 12:27:00 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>92219</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk3NzApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDQ5IEBACisyMDE2LTEyLTEzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBpbXBsZW1lbnQgdGhlIHRhYmxlIHNlY3Rpb24g
YW5kIHRhYmxlIGltcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1NzE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgorCisg
ICAgICAgICogd2FzbS9CdWlsZGVyLmpzOgorICAgICAgICAoY29uc3QuX2ltcG9ydE1lbW9yeUNv
bnRpbnVhdGlvbik6CisgICAgICAgIChjb25zdC5faW1wb3J0VGFibGVDb250aW51YXRpb24pOgor
ICAgICAgICAoZXhwb3J0LmRlZmF1bHQuQnVpbGRlci5wcm90b3R5cGUuX3JlZ2lzdGVyU2VjdGlv
bkJ1aWxkZXJzLnN3aXRjaC5jYXNlLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRoaXMuc2VjdGlvbik6
CisgICAgICAgIChjb25zdC5faW1wb3J0TWVtb3J5Q29udGludWF0aW9uLnNlY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoY29uc3QuX2ltcG9ydE1l
bW9yeUNvbnRpbnVhdGlvbi5hc3NlcnQpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vQnVpbGRl
cl9XZWJBc3NlbWJseUJpbmFyeS5qczoKKyAgICAgICAgKGNvbnN0LnB1dFJlc2l6YWJsZUxpbWl0
cyk6CisgICAgICAgIChjb25zdC5wdXRUYWJsZSk6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5J
bXBvcnQpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuVGFibGUpOgorICAgICAgICAqIHdhc20v
ZnVuY3Rpb24tdGVzdHMvY2FsbC1pbmRpcmVjdC1wYXJhbXMuanM6CisgICAgICAgICogd2FzbS9m
dW5jdGlvbi10ZXN0cy9jYWxsLWluZGlyZWN0LmpzOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24t
dGVzdHMvdGFibGUtYmFzaWMtMi5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5m
cm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBw
ZWFyZWRfaGVyZS5tYWtlSW5zdGFuY2UpOgorICAgICAgICAoZnVuYyk6CisgICAgICAgICogd2Fz
bS9mdW5jdGlvbi10ZXN0cy90YWJsZS1iYXNpYy5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQu
QnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5z
dHJpbmdfYXBwZWFyZWRfaGVyZS5tYWtlSW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vanMtYXBp
L2NhbGwtaW5kaXJlY3QtcmVzdWx0cy5qczoKKyAgICAgICAgKGNvbnN0Lndhc21Nb2R1bGVXaGlj
aEltcG9ydEpTKTogRGVsZXRlZC4KKyAgICAgICAgKE1vbm9tb3JwaGljSW1wb3J0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiB3YXNtL2pzLWFwaS9jYWxsLWluZGlyZWN0LmpzOgorICAgICAgICAoY29u
c3Qud2FzbU1vZHVsZVdoaWNoSW1wb3J0SlMpOgorICAgICAgICAoY29uc3QubWFrZVRhYmxlKToK
KyAgICAgICAgKFBvbHlwaGljMkltcG9ydCk6CisgICAgICAgIChWaXJ0dWFsSW1wb3J0KToKKyAg
ICAgICAgKE1vbm9tb3JwaGljSW1wb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzLWFw
aS90YWJsZS5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnRCYWRCaW5hcnkpOgorICAgICAgICAo
YXNzZXJ0LnRydXRoeSk6CisgICAgICAgIChhc3NlcnRCYWRUYWJsZSk6CisgICAgICAgIChhc3Nl
cnRCYWRUYWJsZUltcG9ydCk6CisgICAgICAgIChhc3NlcnRCYWRCaW5hcnkuYXNzZXJ0QmFkVGFi
bGVJbnN0YW5jZSk6CisgICAgICAgIChhc3NlcnRCYWRUYWJsZUluc3RhbmNlKToKKyAgICAgICAg
KG5ldy5XZWJBc3NlbWJseS5UYWJsZSk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVzdF9iYXNp
Y19hcGkuanM6CisgICAgICAgIChjb25zdC5jLmluLmNvbnN0cnVjdG9yUHJvcGVydGllcy5zd2l0
Y2gpOgorCiAyMDE2LTEyLTEzICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjA5NzI1LgpJbmRleDogSlNU
ZXN0cy93YXNtL0J1aWxkZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL0J1aWxkZXIu
anMJKHJldmlzaW9uIDIwOTc2NikKKysrIEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDMsMTAgKzEwMywxOSBAQCBjb25zdCBfaW1wb3J0RnVuY3Rpb25Db250aW51
YXRpb24gPSAoYnVpCiB9OwogCiBjb25zdCBfaW1wb3J0TWVtb3J5Q29udGludWF0aW9uID0gKGJ1
aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7Ci0gICAgcmV0dXJuIChtb2R1bGUsIGZp
ZWxkLCBtZW1vcnlEZXNjcmlwdGlvbikgPT4gewotICAgICAgICBhc3NlcnQuaXNTdHJpbmcobW9k
dWxlLCBgSW1wb3J0IGZ1bmN0aW9uIG1vZHVsZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtt
b2R1bGV9ImApOwotICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQgZnVuY3Rp
b24gZmllbGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOwotICAgICAgICBz
ZWN0aW9uLmRhdGEucHVzaCh7bW9kdWxlLCBmaWVsZCwga2luZDogIk1lbW9yeSIsIG1lbW9yeURl
c2NyaXB0aW9ufSk7CisgICAgcmV0dXJuIChtb2R1bGUsIGZpZWxkLCB7aW5pdGlhbCwgbWF4aW11
bX0pID0+IHsKKyAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKG1vZHVsZSwgYEltcG9ydCBNZW1vcnkg
bW9kdWxlIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke21vZHVsZX0iYCk7CisgICAgICAgIGFz
c2VydC5pc1N0cmluZyhmaWVsZCwgYEltcG9ydCBNZW1vcnkgZmllbGQgc2hvdWxkIGJlIGEgc3Ry
aW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAgICBzZWN0aW9uLmRhdGEucHVzaCh7bW9kdWxl
LCBmaWVsZCwga2luZDogIk1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uOiB7aW5pdGlhbCwgbWF4
aW11bX19KTsKKyAgICAgICAgcmV0dXJuIG5leHRCdWlsZGVyOworICAgIH07Cit9OworCitjb25z
dCBfaW1wb3J0VGFibGVDb250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxk
ZXIpID0+IHsKKyAgICByZXR1cm4gKG1vZHVsZSwgZmllbGQsIHtpbml0aWFsLCBtYXhpbXVtLCBl
bGVtZW50fSkgPT4geworICAgICAgICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IFRh
YmxlIG1vZHVsZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAg
ICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQgVGFibGUgZmllbGQgc2hvdWxkIGJlIGEg
c3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAgICBzZWN0aW9uLmRhdGEucHVzaCh7bW9k
dWxlLCBmaWVsZCwga2luZDogIlRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbjoge2luaXRpYWwsIG1h
eGltdW0sIGVsZW1lbnR9fSk7CiAgICAgICAgIHJldHVybiBuZXh0QnVpbGRlcjsKICAgICB9Owog
fTsKQEAgLTI5OSwxMiArMzA4LDMxIEBAIGNvbnN0IF9jcmVhdGVGdW5jdGlvbiA9IChzZWN0aW9u
LCBidWlsZGUKIAogICAgICAgICBpZiAodHlwZW9mKHNpZ25hdHVyZSkgPT09ICJ1bmRlZmluZWQi
KQogICAgICAgICAgICAgc2lnbmF0dXJlID0geyBwYXJhbXM6IFtdIH07Ci0gICAgICAgIGFzc2Vy
dC5oYXNPYmplY3RQcm9wZXJ0eShzaWduYXR1cmUsICJwYXJhbXMiLCBgRXhwZWN0IGZ1bmN0aW9u
IHNpZ25hdHVyZSB0byBiZSBhbiBvYmplY3Qgd2l0aCBhICJwYXJhbXMiIGZpZWxkLCBnb3QgIiR7
c2lnbmF0dXJlfSJgKTsKLSAgICAgICAgY29uc3QgW3BhcmFtcywgcmV0XSA9IF9ub3JtYWxpemVG
dW5jdGlvblNpZ25hdHVyZShzaWduYXR1cmUucGFyYW1zLCBzaWduYXR1cmUucmV0KTsKLSAgICAg
ICAgc2lnbmF0dXJlID0geyBwYXJhbXM6IHBhcmFtcywgcmV0OiByZXQgfTsKKworICAgICAgICBs
ZXQgdHlwZTsKKyAgICAgICAgbGV0IHBhcmFtczsKKyAgICAgICAgaWYgKHR5cGVvZiBzaWduYXR1
cmUgPT09ICJvYmplY3QiKSB7CisgICAgICAgICAgICBhc3NlcnQuaGFzT2JqZWN0UHJvcGVydHko
c2lnbmF0dXJlLCAicGFyYW1zIiwgYEV4cGVjdCBmdW5jdGlvbiBzaWduYXR1cmUgdG8gYmUgYW4g
b2JqZWN0IHdpdGggYSAicGFyYW1zIiBmaWVsZCwgZ290ICIke3NpZ25hdHVyZX0iYCk7CisgICAg
ICAgICAgICBsZXQgcmV0OworICAgICAgICAgICAgKFtwYXJhbXMsIHJldF0gPSBfbm9ybWFsaXpl
RnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlLnBhcmFtcywgc2lnbmF0dXJlLnJldCkpOworICAg
ICAgICAgICAgc2lnbmF0dXJlID0ge3BhcmFtcywgcmV0fTsKKyAgICAgICAgICAgIHR5cGUgPSBf
bWF5YmVSZWdpc3RlclR5cGUoYnVpbGRlciwgc2lnbmF0dXJlKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGFzc2VydC50cnV0aHkodHlwZW9mIHNpZ25hdHVyZSA9PT0gIm51bWJlciIp
OworICAgICAgICAgICAgY29uc3QgdHlwZVNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJU
eXBlIik7CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KCEhdHlwZVNlY3Rpb24pOworICAgICAg
ICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBhbGxvdyBpbmRpY2VzIHRoYXQgZXhjZWVkIHRoaXMg
dG8gYmUgYWJsZSB0bworICAgICAgICAgICAgLy8gdGVzdCBKU0NzIHZhbGlkYXRvciBpcyBjb3Jy
ZWN0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1Nzg2CisgICAg
ICAgICAgICBhc3NlcnQudHJ1dGh5KHNpZ25hdHVyZSA8IHR5cGVTZWN0aW9uLmRhdGEubGVuZ3Ro
KTsKKyAgICAgICAgICAgIHR5cGUgPSBzaWduYXR1cmU7CisgICAgICAgICAgICBzaWduYXR1cmUg
PSB0eXBlU2VjdGlvbi5kYXRhW3NpZ25hdHVyZV07CisgICAgICAgICAgICBhc3NlcnQuaGFzT2Jq
ZWN0UHJvcGVydHkoc2lnbmF0dXJlLCAicGFyYW1zIiwgYEV4cGVjdCBmdW5jdGlvbiBzaWduYXR1
cmUgdG8gYmUgYW4gb2JqZWN0IHdpdGggYSAicGFyYW1zIiBmaWVsZCwgZ290ICIke3NpZ25hdHVy
ZX0iYCk7CisgICAgICAgICAgICBwYXJhbXMgPSBzaWduYXR1cmUucGFyYW1zOworICAgICAgICB9
CisKICAgICAgICAgY29uc3QgZnVuYyA9IHsKICAgICAgICAgICAgIG5hbWU6IGZ1bmN0aW9uTmFt
ZSwKLSAgICAgICAgICAgIHR5cGU6IF9tYXliZVJlZ2lzdGVyVHlwZShidWlsZGVyLCBzaWduYXR1
cmUpLAorICAgICAgICAgICAgdHlwZSwKICAgICAgICAgICAgIHNpZ25hdHVyZTogc2lnbmF0dXJl
LAogICAgICAgICAgICAgbG9jYWxzOiBwYXJhbXMuY29uY2F0KGxvY2FscyksIC8vIFBhcmFtZXRl
cnMgYXJlIHRoZSBmaXJzdCBsb2NhbHMuCiAgICAgICAgICAgICBwYXJhbWV0ZXJDb3VudDogcGFy
YW1zLmxlbmd0aCwKQEAgLTM3OSwxMSArNDA3LDExIEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1
aWxkZXIgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihz
ZWN0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1wb3J0QnVpbGRlciA9IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gdGhpcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFRhYmxlOiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1w
b3J0IHRhYmxlYCk7IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWw6ICgpID0+IHsg
dGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBpbXBvcnQgZ2xvYmFsYCk7IH0sCiAgICAg
ICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuRnVu
Y3Rpb24gPSBfaW1wb3J0RnVuY3Rpb25Db250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRl
cik7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuTWVtb3J5ID0gX2ltcG9ydE1l
bW9yeUNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgaW1wb3J0QnVpbGRlci5UYWJsZSA9IF9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbih0aGlz
LCBzLCBpbXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltcG9ydEJ1
aWxkZXI7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQw
MCw4ICs0MjgsMTcgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgIlRhYmxlIjoKLSAgICAgICAgICAgICAg
ICAvLyBGSVhNRSBJbXBsZW1lbnQgdGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NDEzNQotICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSAoKSA9PiB7
IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb259
ImApOyB9OworICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cG9ydEJ1aWxkZXIgPSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBFbmQ6ICgpID0+IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBUYWJs
ZTogKHtpbml0aWFsLCBtYXhpbXVtLCBlbGVtZW50fSkgPT4geworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHMuZGF0YS5wdXNoKHt0YWJsZURlc2NyaXB0aW9uOiB7aW5pdGlhbCwgbWF4aW11
bSwgZWxlbWVudH19KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwb3J0
QnVpbGRlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydEJ1aWxkZXI7CisgICAgICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAiTWVt
b3J5IjoKSW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCShy
ZXZpc2lvbiAyMDk3NjYpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFy
eS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMjggQEAgaW1wb3J0ICogYXMgV0FTTSBm
cm9tICdXQVNNLmpzJzsKIAogY29uc3QgcHV0ID0gKGJpbiwgdHlwZSwgdmFsdWUpID0+IGJpblt0
eXBlXSh2YWx1ZSk7CiAKK2NvbnN0IHB1dFJlc2l6YWJsZUxpbWl0cyA9IChiaW4sIGluaXRpYWws
IG1heGltdW0pID0+IHsKKyAgICBhc3NlcnQudHJ1dGh5KHR5cGVvZiBpbml0aWFsID09PSAibnVt
YmVyIiwgIldlIGV4cGVjdCAnaW5pdGlhbCcgdG8gYmUgYW4gaW50ZWdlciIpOworICAgIGxldCBo
YXNNYXhpbXVtID0gMDsKKyAgICBpZiAodHlwZW9mIG1heGltdW0gPT09ICJudW1iZXIiKSB7Cisg
ICAgICAgIGhhc01heGltdW0gPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydC50cnV0
aHkodHlwZW9mIG1heGltdW0gPT09ICJ1bmRlZmluZWQiLCAiV2UgZXhwZWN0ICdtYXhpbXVtJyB0
byBiZSBhbiBpbnRlZ2VyIGlmIGl0J3MgZGVmaW5lZCIpOworICAgIH0KKworICAgIHB1dChiaW4s
ICJ2YXJ1aW50MSIsIGhhc01heGltdW0pOworICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBpbml0
aWFsKTsKKyAgICBpZiAoaGFzTWF4aW11bSkKKyAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIs
IG1heGltdW0pOworfTsKKworY29uc3QgcHV0VGFibGUgPSAoYmluLCB7aW5pdGlhbCwgbWF4aW11
bSwgZWxlbWVudH0pID0+IHsKKyAgICBhc3NlcnQudHJ1dGh5KFdBU00uaXNWYWxpZFR5cGUoZWxl
bWVudCksICJXZSBleHBlY3QgJ2VsZW1lbnQnIHRvIGJlIGEgdmFsaWQgdHlwZS4gSXQgd2FzOiAi
ICsgZWxlbWVudCk7CisgICAgcHV0KGJpbiwgInZhcmludDciLCBXQVNNLnR5cGVWYWx1ZVtlbGVt
ZW50XSk7CisKKyAgICBwdXRSZXNpemFibGVMaW1pdHMoYmluLCBpbml0aWFsLCBtYXhpbXVtKTsK
K307CisKIGNvbnN0IGVtaXR0ZXJzID0gewogICAgIFR5cGU6IChzZWN0aW9uLCBiaW4pID0+IHsK
ICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOwpAQCAt
NTcsMjMgKzc5LDEzIEBAIGNvbnN0IGVtaXR0ZXJzID0gewogICAgICAgICAgICAgICAgIHB1dChi
aW4sICJ2YXJ1aW50MzIiLCBlbnRyeS50eXBlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgIlRhYmxlIjogdGhyb3cgbmV3IEVycm9yKGBO
b3QgeWV0IGltcGxlbWVudGVkYCk7CisgICAgICAgICAgICBjYXNlICJUYWJsZSI6IHsKKyAgICAg
ICAgICAgICAgICBwdXRUYWJsZShiaW4sIGVudHJ5LnRhYmxlRGVzY3JpcHRpb24pOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSAiTWVtb3J5
IjogewogICAgICAgICAgICAgICAgIGxldCB7aW5pdGlhbCwgbWF4aW11bX0gPSBlbnRyeS5tZW1v
cnlEZXNjcmlwdGlvbjsKLSAgICAgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KHR5cGVvZiBpbml0
aWFsID09PSAibnVtYmVyIiwgIldlIGV4cGVjdCAnaW5pdGlhbCcgdG8gYmUgYSBudW1iZXIiKTsK
LSAgICAgICAgICAgICAgICBpbml0aWFsIHw9IDA7Ci0gICAgICAgICAgICAgICAgbGV0IGhhc01h
eGltdW0gPSAwOwotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWF4aW11bSA9PT0gIm51bWJl
ciIpIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4aW11bSB8PSAwOwotICAgICAgICAgICAgICAg
ICAgICBoYXNNYXhpbXVtID0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBhc3NlcnQudHJ1dGh5KHR5cGVvZiBtYXhpbXVtID09PSAidW5kZWZpbmVkIiwg
IldlIGV4cGVjdCAnbWF4aW11bScgdG8gYmUgYSBudW1iZXIgaWYgaXQncyBkZWZpbmVkIik7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQxIiwg
aGFzTWF4aW11bSk7Ci0gICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGluaXRp
YWwpOwotICAgICAgICAgICAgICAgIGlmIChoYXNNYXhpbXVtKQotICAgICAgICAgICAgICAgICAg
ICBwdXQoYmluLCAidmFydWludDMyIiwgbWF4aW11bSk7CisgICAgICAgICAgICAgICAgcHV0UmVz
aXphYmxlTGltaXRzKGJpbiwgaW5pdGlhbCwgbWF4aW11bSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgY2FzZSAiR2xvYmFsIjogdGhyb3cgbmV3
IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7CkBAIC04Nyw3ICs5OSwxMiBAQCBjb25zdCBl
bWl0dGVycyA9IHsKICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBzaWduYXR1cmUp
OwogICAgIH0sCiAKLSAgICBUYWJsZTogKHNlY3Rpb24sIGJpbikgPT4geyB0aHJvdyBuZXcgRXJy
b3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsgfSwKKyAgICBUYWJsZTogKHNlY3Rpb24sIGJpbikg
PT4geworICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgc2VjdGlvbi5kYXRhLmxlbmd0aCk7
CisgICAgICAgIGZvciAoY29uc3Qge3RhYmxlRGVzY3JpcHRpb259IG9mIHNlY3Rpb24uZGF0YSkg
eworICAgICAgICAgICAgcHV0VGFibGUoYmluLCB0YWJsZURlc2NyaXB0aW9uKTsKKyAgICAgICAg
fQorICAgIH0sCiAKICAgICBNZW1vcnk6IChzZWN0aW9uLCBiaW4pID0+IHsKICAgICAgICAgLy8g
RmxhZ3MsIGN1cnJlbnRseSBjYW4gb25seSBiZSBbMCwxXQpJbmRleDogSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL2NhbGwtaW5kaXJlY3QtcGFyYW1zLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9jYWxsLWluZGlyZWN0LXBhcmFtcy5qcwkocmV2aXNpb24g
MjA5NzY2KQorKysgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NhbGwtaW5kaXJlY3QtcGFy
YW1zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4ICswLDAgQEAKLWltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnCi0KLWNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOwotYi5UeXBlKCku
RW5kKCkKLSAgICAuRnVuY3Rpb24oKS5FbmQoKQotICAgIC5Db2RlKCkKLQotICAgIC5GdW5jdGlv
bih7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQotICAgIC5JMzJDb25zdCgxKQotICAg
IC5FbmQoKQotCi0gICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0p
Ci0gICAgLkdldExvY2FsKDApCi0gICAgLkVuZCgpCi0KLSAgICAuRnVuY3Rpb24oeyBwYXJhbXM6
IFsiaTMyIiwgImkzMiJdLCByZXQ6ICJpMzIiIH0pCi0gICAgLkdldExvY2FsKDEpCi0gICAgLkdl
dExvY2FsKDApCi0gICAgLkNhbGxJbmRpcmVjdCgwLCAwKQotICAgIC5FbmQoKQotCi0KLWNvbnN0
IGJpbiA9IGIuV2ViQXNzZW1ibHkoKQotYmluLnRyaW0oKTsKLXRlc3RXYXNtTW9kdWxlRnVuY3Rp
b25zKGJpbi5nZXQoKSwgMywgW10sIFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgW1t7IHR5
cGU6ICJpMzIiLCB2YWx1ZTogMSB9LCBbeyB0eXBlOiAiaTMyIiwgdmFsdWU6IDAgfSwgeyB0eXBl
OiAiaTMyIiwgdmFsdWU6IDQgfV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgIFt7IHR5cGU6
ICJpMzIiLCB2YWx1ZTogNCB9LCBbeyB0eXBlOiAiaTMyIiwgdmFsdWU6IDEgfSwgeyB0eXBlOiAi
aTMyIiwgdmFsdWU6IDQgfV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgXSk7CkluZGV4OiBK
U1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvY2FsbC1pbmRpcmVjdC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvY2FsbC1pbmRpcmVjdC5qcwkocmV2aXNpb24g
MjA5NzY2KQorKysgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NhbGwtaW5kaXJlY3QuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMjcgKzAsMCBAQAotaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4v
QnVpbGRlci5qcycKLQotY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Ci1iLlR5cGUoKS5FbmQoKQot
ICAgIC5GdW5jdGlvbigpLkVuZCgpCi0gICAgLkNvZGUoKQotCi0gICAgLkZ1bmN0aW9uKHsgcGFy
YW1zOiBbXSwgcmV0OiAiaTMyIiB9KQotICAgIC5JMzJDb25zdCgxKQotICAgIC5FbmQoKQotCi0g
ICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQotICAgIC5JMzJDb25zdCgy
KQotICAgIC5FbmQoKQotCi0gICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJp
MzIiIH0pCi0gICAgLkdldExvY2FsKDApCi0gICAgLkNhbGxJbmRpcmVjdCgwLCAwKQotICAgIC5F
bmQoKQotCi0KLWNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKQotYmluLnRyaW0oKTsKLXRlc3RX
YXNtTW9kdWxlRnVuY3Rpb25zKGJpbi5nZXQoKSwgMywgW10sIFtdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgW1t7IHR5cGU6ICJpMzIiLCB2YWx1ZTogMSB9LCBbeyB0eXBlOiAiaTMyIiwgdmFs
dWU6IDAgfV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgIFt7IHR5cGU6ICJpMzIiLCB2YWx1
ZTogMSB9LCBbeyB0eXBlOiAiaTMyIiwgdmFsdWU6IDAgfV1dLAotICAgICAgICAgICAgICAgICAg
ICAgICAgXSk7CkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFzaWMt
Mi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFz
aWMtMi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdGFi
bGUtYmFzaWMtMi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACitpbXBvcnQgQnVp
bGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fz
c2VydC5qcycKKworZnVuY3Rpb24gbWFrZUluc3RhbmNlKGZ1bmMpIHsKKyAgICBjb25zdCBidWls
ZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpCisgICAgICAgICAgICAuRnVuYyhb
ImkzMiIsICJpMzIiXSwgImkzMiIpCisgICAgICAgICAgICAuRnVuYyhbImkzMiJdLCAiaTMyIikK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLlRhYmxlKCJp
bXAiLCAidGFibGUiLCB7aW5pdGlhbDogMjAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pCisgICAgICAg
ICAgICAuRnVuY3Rpb24oImltcCIsICJmdW5jIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkz
MiIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJiYXIiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJmb28iLCAwIC8qWydpMzInLCAnaTMyJ10gPT4gJ2kzMicqLykKKyAgICAg
ICAgICAgICAgICAuR2V0TG9jYWwoMSkgLy8gcGFyYW1ldGVyIHRvIGNhbGwKKyAgICAgICAgICAg
ICAgICAuR2V0TG9jYWwoMCkgLy8gY2FsbCBpbmRleAorICAgICAgICAgICAgICAgIC5DYWxsSW5k
aXJlY3QoMSwgMCkgLy8gY2FsbGluZyBmdW5jdGlvbiBvZiB0eXBlIFsnaTMyJ10gPT4gJ2kzMicK
KyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJiYXIiLCAxIC8qWydpMzInXSA9PiAnaTMyJyovKQorICAgICAgICAgICAg
ICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAg
ICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisKKyAg
ICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9k
dWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IHRhYmxlID0gbmV3
IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAyMCwgZWxlbWVudDogImFueWZ1bmMifSk7Cisg
ICAgcmV0dXJuIHtpbnN0YW5jZTogbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2lt
cDoge3RhYmxlLCBmdW5jfX0pLCB0YWJsZX07Cit9CisKK3sKKyAgICBsZXQgaTsKKyAgICBmdW5j
dGlvbiBmdW5jKHgpIHsKKyAgICAgICAgaWYgKHggIT09IGkpCisgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkJhZCBhcmd1bWVudCIpOworICAgICAgICByZXR1cm4geCArIDQ0OworICAgIH0K
KyAgICBjb25zdCB7aW5zdGFuY2UsIHRhYmxlfSA9IG1ha2VJbnN0YW5jZShmdW5jKTsKKyAgICBj
b25zdCBleHBvcnRzID0gaW5zdGFuY2UuZXhwb3J0czsKKyAgICBjb25zdCBmb28gPSBleHBvcnRz
LmZvbzsKKyAgICB0YWJsZS5zZXQoMCwgZXhwb3J0cy5iYXIpOworICAgIGFzc2VydC5lcSh0YWJs
ZS5nZXQoMCksIGV4cG9ydHMuYmFyKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsr
KSB7CisgICAgICAgIGlmIChmb28oMCwgaSkgIT09IGkgKyA0NCkKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQmFkIGNhbGwgaW5kaXJlY3QiKTsKKyAgICB9Cit9CkluZGV4OiBKU1Rlc3Rz
L3dhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFzaWMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0
cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2ljLmpzCShub25leGlzdGVudCkKKysrIEpT
VGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy90YWJsZS1iYXNpYy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY3IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1w
b3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworZnVuY3Rpb24gbWFrZUluc3Rh
bmNlKCkgeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBl
KCkKKyAgICAgICAgICAgIC5GdW5jKFsiaTMyIiwgImkzMiJdLCAiaTMyIikKKyAgICAgICAgICAg
IC5GdW5jKFsiaTMyIl0sICJpMzIiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkltcG9ydCgp
CisgICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHtpbml0aWFsOiAyMCwgZWxlbWVu
dDogImFueWZ1bmMifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgp
CisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJiYXIiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCAwIC8qWydpMzInLCAnaTMyJ10gPT4gJ2kzMicq
LykKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkgLy8gcGFyYW1ldGVyIHRvIGNhbGwKKyAg
ICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkgLy8gY2FsbCBpbmRleAorICAgICAgICAgICAgICAg
IC5DYWxsSW5kaXJlY3QoMSwgMCkgLy8gY2FsbGluZyBmdW5jdGlvbiBvZiB0eXBlIFsnaTMyJ10g
PT4gJ2kzMicKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIiLCAxIC8qWydpMzInXSA9PiAnaTMyJyovKQorICAg
ICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0MikK
KyAgICAgICAgICAgICAgICAuSTMyQWRkKCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFi
bGUoe2luaXRpYWw6IDIwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KTsKKyAgICByZXR1cm4ge2luc3Rh
bmNlOiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7dGFibGV9fSksIHRh
YmxlfTsKK30KKworeworICAgIGNvbnN0IHtpbnN0YW5jZSwgdGFibGV9ID0gbWFrZUluc3RhbmNl
KCk7CisgICAgY29uc3QgZXhwb3J0cyA9IGluc3RhbmNlLmV4cG9ydHM7CisgICAgY29uc3QgZm9v
ID0gZXhwb3J0cy5mb287CisgICAgdGFibGUuc2V0KDAsIGV4cG9ydHMuYmFyKTsKKyAgICBhc3Nl
cnQuZXEodGFibGUuZ2V0KDApLCBleHBvcnRzLmJhcik7CisKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDA7IGkrKykgeworICAgICAgICBpZiAoZm9vKDAsIGkpICE9PSBpICsgNDIpCisgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBjYWxsIGluZGlyZWN0Iik7CisgICAgfQorfQor
CisvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgY3Jvc3MgbW9kdWxlLiBUaGUgcmVhc29uIGl0IGRv
ZXNuJ3QKKy8vIG5vdyBpcyB0aGF0IHdlIGRvbid0IHVuaXF1ZSBTaWduYXR1cmUqLgorLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMQorLyoKK3sKKyAgICBj
b25zdCB7aW5zdGFuY2UsIHRhYmxlfSA9IG1ha2VJbnN0YW5jZSgpOworICAgIGNvbnN0IGZvbyA9
IGluc3RhbmNlLmV4cG9ydHMuZm9vOworICAgIC8vdGFibGUuc2V0KDAsIG1ha2VJbnN0YW5jZSgp
Lmluc3RhbmNlLmV4cG9ydHMuYmFyKTsgLy8gQ3Jvc3MgaW5zdGFuY2UgZnVuY3Rpb24uCisKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICBpZiAoZm9vKDAsIGkp
ICE9PSBpICsgNDIpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBjYWxsIGluZGly
ZWN0Iik7CisgICAgfQorfQorKi8KSW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvY2FsbC1pbmRp
cmVjdC1yZXN1bHRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkvY2FsbC1p
bmRpcmVjdC1yZXN1bHRzLmpzCShyZXZpc2lvbiAyMDk3NjYpCisrKyBKU1Rlc3RzL3dhc20vanMt
YXBpL2NhbGwtaW5kaXJlY3QtcmVzdWx0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw0MSArMCww
IEBACi1pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKLWltcG9ydCBCdWls
ZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwotCi1jb25zdCB3YXNtTW9kdWxlV2hpY2hJbXBvcnRK
UyA9ICgpID0+IHsKLSAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCi0gICAgICAg
IC5UeXBlKCkuRW5kKCkKLSAgICAgICAgLkltcG9ydCgpCi0gICAgICAgICAgICAuRnVuY3Rpb24o
ImltcCIsICJmdW5jIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKLSAgICAgICAg
LkVuZCgpCi0gICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCi0gICAgICAgIC5FeHBvcnQoKQotICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJjaGFuZ2VDb3VudGVyIikKLSAgICAgICAgLkVuZCgpCi0gICAg
ICAgIC5Db2RlKCkKLSAgICAgICAgICAgIC5GdW5jdGlvbigiY2hhbmdlQ291bnRlciIsIHsgcGFy
YW1zOiBbImkzMiIsICJpMzIiXSwgcmV0OiAiaTMyIiB9KQotICAgICAgICAgICAgICAgIC5JMzJD
b25zdCg0MikKLSAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKLSAgICAgICAgICAgICAgICAu
STMyQWRkKCkKLSAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkKLSAgICAgICAgICAgICAgICAu
Q2FsbEluZGlyZWN0KDAsIDApIC8vIENhbGxzIGZ1bmMocGFyYW1bMF0gKyA0MikuCi0gICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDApCi0gICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAw
KSAvLyBDYWxscyBmdW5jKHBhcmFtWzBdICsgNDIpLgotICAgICAgICAgICAgLkVuZCgpCi0gICAg
ICAgIC5FbmQoKTsKLSAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7
Ci0gICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwotICAgIHJl
dHVybiBtb2R1bGU7Ci19OwotCi0KLShmdW5jdGlvbiBNb25vbW9ycGhpY0ltcG9ydCgpIHsKLSAg
ICBsZXQgY291bnRlciA9IDA7Ci0gICAgY29uc3QgY291bnRlclNldHRlciA9IHYgPT4gY291bnRl
ciA9IHY7Ci0gICAgY29uc3QgbW9kdWxlID0gd2FzbU1vZHVsZVdoaWNoSW1wb3J0SlMoKTsKLSAg
ICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgaW1w
OiB7IGZ1bmM6IGNvdW50ZXJTZXR0ZXIgfSB9KTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQw
OTY7ICsraSkgewotICAgICAgICAvLyBJbnZva2UgdGhpcyBhIGJ1bmNoIG9mIHRpbWVzIHRvIG1h
a2Ugc3VyZSB0aGUgSUMgaW4gdGhlIHdhc20gLT4gSlMgc3R1YiB3b3JrcyBjb3JyZWN0bHkuCi0g
ICAgICAgIGluc3RhbmNlLmV4cG9ydHMuY2hhbmdlQ291bnRlcihpLCAwKTsKLSAgICAgICAgYXNz
ZXJ0LmVxKGNvdW50ZXIsIGkgKyA0Mik7Ci0gICAgfQotfSkoKTsKSW5kZXg6IEpTVGVzdHMvd2Fz
bS9qcy1hcGkvY2FsbC1pbmRpcmVjdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vanMt
YXBpL2NhbGwtaW5kaXJlY3QuanMJKHJldmlzaW9uIDIwOTc2NikKKysrIEpTVGVzdHMvd2FzbS9q
cy1hcGkvY2FsbC1pbmRpcmVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtNiwxMCArNiwxMiBAQCBj
b25zdCB3YXNtTW9kdWxlV2hpY2hJbXBvcnRKUyA9ICgpID0+IHsKICAgICAgICAgLlR5cGUoKS5F
bmQoKQogICAgICAgICAuSW1wb3J0KCkKICAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImZ1
bmMiLCB7IHBhcmFtczogWyJpMzIiXSB9KQorICAgICAgICAgICAgLlRhYmxlKCJpbXAiLCAidGFi
bGUiLCB7IGluaXRpYWw6IDEsIG1heGltdW06IDEsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pCiAgICAg
ICAgIC5FbmQoKQogICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQogICAgICAgICAuRXhwb3J0KCkK
ICAgICAgICAgICAgIC5GdW5jdGlvbigiY2hhbmdlQ291bnRlciIpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImNhbGxGdW5jIikKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAg
ICAgICAgIC5GdW5jdGlvbigiY2hhbmdlQ291bnRlciIsIHsgcGFyYW1zOiBbImkzMiIsICJpMzIi
XSB9KQpAQCAtMTcsNyArMTksMTEgQEAgY29uc3Qgd2FzbU1vZHVsZVdoaWNoSW1wb3J0SlMgPSAo
KSA9PiB7CiAgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCiAgICAgICAgICAgICAgICAgLkkz
MkFkZCgpCiAgICAgICAgICAgICAgICAgLkdldExvY2FsKDEpCi0gICAgICAgICAgICAgICAgLkNh
bGxJbmRpcmVjdCgwLCAwKSAvLyBDYWxscyBmdW5jKHBhcmFtWzBdICsgNDIpLgorICAgICAgICAg
ICAgICAgIC5DYWxsSW5kaXJlY3QoMCwgMCkgLy8gQ2FsbHMgdGFibGVbMF0ocGFyYW1bMF0gKyA0
MikuCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbEZ1bmMi
LCB7IHBhcmFtczogWyJpMzIiXSB9KQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAg
ICAgICAgICAgICAgIC5DYWxsKDApIC8vIENhbGxzIGZ1bmMocGFyYW1bMF0gKyA0MikKICAgICAg
ICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7CiAgICAgY29uc3QgYmluID0gYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpOwpAQCAtMjUsMTIgKzMxLDE3IEBAIGNvbnN0IHdhc21Nb2R1bGVX
aGljaEltcG9ydEpTID0gKCkgPT4gewogICAgIHJldHVybiBtb2R1bGU7CiB9OwogCitjb25zdCBt
YWtlVGFibGUgPSAoKSA9PiB7CisgICAgcmV0dXJuIG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5p
dGlhbDogMSwgbWF4aW11bTogMSwgZWxlbWVudDogImFueWZ1bmMifSk7Cit9OwogCiAoZnVuY3Rp
b24gTW9ub21vcnBoaWNJbXBvcnQoKSB7CiAgICAgbGV0IGNvdW50ZXIgPSAwOwogICAgIGNvbnN0
IGNvdW50ZXJTZXR0ZXIgPSB2ID0+IGNvdW50ZXIgPSB2OworICAgIGNvbnN0IHRhYmxlID0gbWFr
ZVRhYmxlKCk7CiAgICAgY29uc3QgbW9kdWxlID0gd2FzbU1vZHVsZVdoaWNoSW1wb3J0SlMoKTsK
LSAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsg
aW1wOiB7IGZ1bmM6IGNvdW50ZXJTZXR0ZXIgfSB9KTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5l
dyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgaW1wOiB7IGZ1bmM6IGNvdW50ZXJTZXR0
ZXIsIHRhYmxlfSB9KTsKKyAgICB0YWJsZS5zZXQoMCwgaW5zdGFuY2UuZXhwb3J0cy5jYWxsRnVu
Yyk7CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDk2OyArK2kpIHsKICAgICAgICAgLy8gSW52
b2tlIHRoaXMgYSBidW5jaCBvZiB0aW1lcyB0byBtYWtlIHN1cmUgdGhlIElDIGluIHRoZSB3YXNt
IC0+IEpTIHN0dWIgd29ya3MgY29ycmVjdGx5LgogICAgICAgICBpbnN0YW5jZS5leHBvcnRzLmNo
YW5nZUNvdW50ZXIoaSwgMCk7CkBAIC00NCw4ICs1NSwxNCBAQCBjb25zdCB3YXNtTW9kdWxlV2hp
Y2hJbXBvcnRKUyA9ICgpID0+IHsKICAgICBjb25zdCBjb3VudGVyQVNldHRlciA9IHYgPT4gY291
bnRlckEgPSB2OwogICAgIGNvbnN0IGNvdW50ZXJCU2V0dGVyID0gdiA9PiBjb3VudGVyQiA9IHsg
dmFsdWVCOiB2IH07CiAgICAgY29uc3QgbW9kdWxlID0gd2FzbU1vZHVsZVdoaWNoSW1wb3J0SlMo
KTsKLSAgICBjb25zdCBpbnN0YW5jZUEgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxl
LCB7IGltcDogeyBmdW5jOiBjb3VudGVyQVNldHRlciB9IH0pOwotICAgIGNvbnN0IGluc3RhbmNl
QiA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgaW1wOiB7IGZ1bmM6IGNvdW50
ZXJCU2V0dGVyIH0gfSk7CisKKyAgICBjb25zdCB0YWJsZUEgPSBtYWtlVGFibGUoKTsKKyAgICBj
b25zdCBpbnN0YW5jZUEgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGltcDog
eyBmdW5jOiBjb3VudGVyQVNldHRlciwgdGFibGU6IHRhYmxlQX0gfSk7CisgICAgdGFibGVBLnNl
dCgwLCBpbnN0YW5jZUEuZXhwb3J0cy5jYWxsRnVuYyk7CisKKyAgICBjb25zdCB0YWJsZUIgPSBt
YWtlVGFibGUoKTsKKyAgICBjb25zdCBpbnN0YW5jZUIgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7IGltcDogeyBmdW5jOiBjb3VudGVyQlNldHRlciwgdGFibGU6IHRhYmxlQn0g
fSk7CisgICAgdGFibGVCLnNldCgwLCBpbnN0YW5jZUIuZXhwb3J0cy5jYWxsRnVuYyk7CiAgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCAyMDQ4OyArK2kpIHsKICAgICAgICAgaW5zdGFuY2VBLmV4cG9y
dHMuY2hhbmdlQ291bnRlcihpLCAwKTsKICAgICAgICAgYXNzZXJ0LmlzQShjb3VudGVyQSwgIm51
bWJlciIpOwpAQCAtNTcsOCArNzQsNiBAQCBjb25zdCB3YXNtTW9kdWxlV2hpY2hJbXBvcnRKUyA9
ICgpID0+IHsKIH0pKCk7CiAKIChmdW5jdGlvbiBWaXJ0dWFsSW1wb3J0KCkgewotICAgIGNvbnN0
IG51bSA9IDEwOyAvLyBJdCdzIGRlZmluaXRlbHkgZ29pbmcgdmlydHVhbCBhdCAxMCEKLSAgICBs
ZXQgY291bnRlcnMgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07CiAgICAgY29uc3Qg
Y291bnRlclNldHRlcnMgPSBbCiAgICAgICAgIHYgPT4gY291bnRlcnNbMF0gPSB2LAogICAgICAg
ICB2ID0+IGNvdW50ZXJzWzFdID0gdiArIDEsCkBAIC03MSwxMiArODYsMTYgQEAgY29uc3Qgd2Fz
bU1vZHVsZVdoaWNoSW1wb3J0SlMgPSAoKSA9PiB7CiAgICAgICAgIHYgPT4gY291bnRlcnNbOF0g
PSB2ICsgOCwKICAgICAgICAgdiA9PiBjb3VudGVyc1s5XSA9IHYgKyA5LAogICAgIF07CisgICAg
Y29uc3QgbnVtID0gY291bnRlclNldHRlcnMubGVuZ3RoOworICAgIGxldCBjb3VudGVycyA9IGNv
dW50ZXJTZXR0ZXJzLm1hcCgoKSA9PiAwKTsKICAgICBhc3NlcnQuZXEoY291bnRlcnMubGVuZ3Ro
LCBudW0pOwotICAgIGFzc2VydC5lcShjb3VudGVyU2V0dGVycy5sZW5ndGgsIG51bSk7CiAgICAg
Y29uc3QgbW9kdWxlID0gd2FzbU1vZHVsZVdoaWNoSW1wb3J0SlMoKTsKICAgICBsZXQgaW5zdGFu
Y2VzID0gW107Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07ICsraSkKLSAgICAgICAgaW5z
dGFuY2VzW2ldID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsgZnVu
YzogY291bnRlclNldHRlcnNbaV0gfSB9KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bTsg
KytpKSB7CisgICAgICAgIGxldCB0YWJsZSA9IG1ha2VUYWJsZSgpOworICAgICAgICBpbnN0YW5j
ZXNbaV0gPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGltcDogeyBmdW5jOiBj
b3VudGVyU2V0dGVyc1tpXSwgdGFibGV9IH0pOworICAgICAgICB0YWJsZS5zZXQoMCwgaW5zdGFu
Y2VzW2ldLmV4cG9ydHMuY2FsbEZ1bmMpOworICAgIH0KICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDIwNDg7ICsraSkgewogICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgKytqKSB7CiAg
ICAgICAgICAgICBpbnN0YW5jZXNbal0uZXhwb3J0cy5jaGFuZ2VDb3VudGVyKGksIDApOwpJbmRl
eDogSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dh
c20vanMtYXBpL3RhYmxlLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvd2FzbS9qcy1hcGkv
dGFibGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzAgQEAKK2ltcG9ydCBCdWlsZGVy
IGZyb20gJy4uL0J1aWxkZXIuanMnOworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2Vy
dC5qcyc7CisKK2NvbnN0IGJhZFRhYmxlU3RyaW5nID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24g
VGFibGUiOworY29uc3QgYmFkSW1wb3J0U3RyaW5nID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24g
SW1wb3J0IjsKK2Z1bmN0aW9uIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBzdHIpIHsKKyAgICBj
b25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgbGV0IHRocmV3ID0g
ZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwor
ICAgIH0gY2F0Y2goZSkgeworICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgIGFzc2VydC50
cnV0aHkoZS50b1N0cmluZygpLmluZGV4T2Yoc3RyKSAhPT0gLTEpOworICAgICAgICBhc3NlcnQu
dHJ1dGh5KGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IpOworICAgIH0KKyAg
ICBhc3NlcnQudHJ1dGh5KHRocmV3KTsKK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcg
QnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAg
ICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHtpbml0aWFsOiAyMCwgZWxlbWVudDogImFu
eWZ1bmMifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5UYWJsZSgpCisgICAgICAgICAgICAuVGFibGUoe2luaXRpYWw6IDIwLCBtYXhpbXVtOiAz
MCwgZWxlbWVudDogImFueWZ1bmMifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgLkVuZCgpOworICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRUYWJsZVN0
cmluZyk7Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAg
ICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5UYWJs
ZSgpCisgICAgICAgICAgICAuVGFibGUoe2luaXRpYWw6IDIwLCBtYXhpbXVtOiAzMCwgZWxlbWVu
dDogImFueWZ1bmMifSkKKyAgICAgICAgICAgIC5UYWJsZSh7aW5pdGlhbDogMjAsIG1heGltdW06
IDMwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUo
KQorICAgICAgICAuRW5kKCk7CisgICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZFRhYmxl
U3RyaW5nKTsKK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAg
ICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFsiaTMy
Il19KQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5DYWxs
SW5kaXJlY3QoMCwgMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisgICAg
YXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsICJjYWxsX2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hl
biBhIHRhYmxlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQiKTsKK30KKworeworICAgIGNvbnN0IGJ1
aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLlRhYmxlKCkKKyAgICAgICAgICAgIC5UYWJsZSh7aW5p
dGlhbDoyMCwgZWxlbWVudDoiYW55ZnVuYyJ9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFsiaTMy
Il19KQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5DYWxs
SW5kaXJlY3QoMCwgMSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisgICAg
YXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsICJjYWxsX2luZGlyZWN0ICdyZXNlcnZlZCcgdmFydWlu
dDEgbXVzdCBiZSAweDAiKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGUodGFibGVEZXNj
cmlwdGlvbikgeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLlRhYmxlKCkK
KyAgICAgICAgICAgIC5UYWJsZSh0YWJsZURlc2NyaXB0aW9uKQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkNvZGUoKQorICAgICAgICAuRW5kKCk7CisgICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxk
ZXIsIGJhZFRhYmxlU3RyaW5nKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGVJbXBvcnQo
dGFibGVEZXNjcmlwdGlvbikgeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisg
ICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuVGFi
bGUoImltcCIsICJ0YWJsZSIsIHRhYmxlRGVzY3JpcHRpb24pCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgIC5FbmQoKTsK
KyAgICBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgYmFkSW1wb3J0U3RyaW5nKTsKK30KKworewor
ICAgIGxldCBiYWREZXNjcmlwdGlvbnMgPSBbCisgICAgICAgIHtpbml0aWFsOiAxMCwgZWxlbWVu
dDogImkzMiJ9LAorICAgICAgICB7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJmMzIifSwKKyAgICAg
ICAge2luaXRpYWw6IDEwLCBlbGVtZW50OiAiZjY0In0sCisgICAgICAgIHtpbml0aWFsOiAxMCwg
ZWxlbWVudDogImk2NCJ9LAorICAgICAgICB7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVt
ZW50OiAiaTMyIn0sCisgICAgICAgIHtpbml0aWFsOiAxMCwgbWF4aW11bTogMjAsIGVsZW1lbnQ6
ICJmMzIifSwKKyAgICAgICAge2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImY2
NCJ9LAorICAgICAgICB7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiaTY0In0s
CisKKyAgICAgICAge2luaXRpYWw6IDEwLCBtYXhpbXVtOiA5LCBlbGVtZW50OiAiYW55ZnVuYyJ9
LAorICAgICAgICB7aW5pdGlhbDogMSwgbWF4aW11bTogMCwgZWxlbWVudDogImFueWZ1bmMifSwK
KyAgICAgICAge2luaXRpYWw6IDIqKjMyIC0gMSwgbWF4aW11bTogMioqMzIgLSAyLCBlbGVtZW50
OiAiYW55ZnVuYyJ9LAorICAgICAgICB7aW5pdGlhbDogMioqMzEsIGVsZW1lbnQ6ICJhbnlmdW5j
In0sCisgICAgXTsKKworICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKKyAg
ICAgICAgYXNzZXJ0QmFkVGFibGUoZCk7CisgICAgICAgIGFzc2VydEJhZFRhYmxlSW1wb3J0KGQp
OworICAgIH0KK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAg
ICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuVGFibGUo
ImltcCIsICJ0YWJsZSIsIHtpbml0aWFsOiAyMCwgZWxlbWVudDogImFueWZ1bmMifSkKKyAgICAg
ICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwge2luaXRpYWw6IDIwLCBlbGVtZW50OiAiYW55
ZnVuYyJ9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAuRW5kKCk7CisgICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIs
IGJhZEltcG9ydFN0cmluZyk7Cit9CisKKworeworICAgIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxl
SW5zdGFuY2UodGFibGVEZXNjcmlwdGlvbiwgdGFibGUsIG1lc3NhZ2UpIHsKKyAgICAgICAgY29u
c3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAg
ICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxl
IiwgdGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5FbmQoKTsK
KworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOworICAgICAg
ICB0cnkgeworICAgICAgICAgICAgbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2lt
cDoge3RhYmxlfX0pOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBhc3NlcnQu
ZXEoZS50b1N0cmluZygpLCBtZXNzYWdlKTsKKyAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBhc3NlcnQudHJ1dGh5KHRocmV3KTsKKyAgICB9CisKKyAgICBjb25z
dCBiYWRUYWJsZXMgPSBbCisgICAgICAgIFt7aW5pdGlhbDogMTAwLCBtYXhpbXVtOjEwMCwgZWxl
bWVudDoiYW55ZnVuYyJ9LCBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6MTAwLCBlbGVt
ZW50OiAiYW55ZnVuYyJ9KSwgIlR5cGVFcnJvcjogVGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUg
YSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIl0sCisgICAg
ICAgIFt7aW5pdGlhbDogMTAwLCBtYXhpbXVtOjEwMCwgZWxlbWVudDoiYW55ZnVuYyJ9LCBuZXcg
V2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6MTAwLCBtYXhpbXVtOjEwMSwgZWxlbWVudDogImFu
eWZ1bmMifSksICJUeXBlRXJyb3I6IEltcG9ydGVkIFRhYmxlJ3MgJ21heGltdW0nIGlzIGxhcmdl
ciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciXSwKKyAgICAgICAgW3tpbml0
aWFsOiAxMDAsIGVsZW1lbnQ6ImFueWZ1bmMifSwgbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0
aWFsOjEwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KSwgIlR5cGVFcnJvcjogVGFibGUgaW1wb3J0IHBy
b3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCJdLAorICAgICAgICBbe2luaXRp
YWw6IDEwLCBlbGVtZW50OiJhbnlmdW5jIn0sIG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlh
bDo5LCBlbGVtZW50OiAiYW55ZnVuYyJ9KSwgIlR5cGVFcnJvcjogVGFibGUgaW1wb3J0IHByb3Zp
ZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCJdLAorICAgIF07CisgICAgZm9yIChj
b25zdCBbZCwgdCwgbV0gb2YgYmFkVGFibGVzKSB7CisgICAgICAgIGFzc2VydEJhZFRhYmxlSW5z
dGFuY2UoZCwgdCwgbSk7CisgICAgfQorfQorCit7CisgICAgeworICAgICAgICBjb25zdCB0YWJs
ZSA9IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7ZWxlbWVudDogImFueWZ1bmMiLCBpbml0aWFsOiAy
MCwgbWF4aW11bTogMzB9KTsKKyAgICAgICAgdGFibGUuZ3JvdygzMCk7CisgICAgICAgIGFzc2Vy
dC50aHJvd3MoKCkgPT4gdGFibGUuZ3JvdygzMSksIFR5cGVFcnJvciwgIldlYkFzc2VtYmx5LlRh
YmxlLnByb3RvdHlwZS5ncm93IGNvdWxkIG5vdCBncm93IHRoZSB0YWJsZSIpOworICAgICAgICBh
c3NlcnQudGhyb3dzKCgpID0+IHRhYmxlLmdyb3coMjkpLCBUeXBlRXJyb3IsICJXZWJBc3NlbWJs
eS5UYWJsZS5wcm90b3R5cGUuZ3JvdyBjb3VsZCBub3QgZ3JvdyB0aGUgdGFibGUiKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtl
bGVtZW50OiAiYW55ZnVuYyIsIGluaXRpYWw6IDIwfSk7CisgICAgICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gdGFibGUuZ3Jvdyh7dmFsdWVPZigpIHsgcmV0dXJuIDE5OyB9fSksIFR5cGVFcnJvciwg
IldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5ncm93IGNvdWxkIG5vdCBncm93IHRoZSB0YWJs
ZSIpOworICAgICAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgICAgIHRhYmxlLmdyb3coe3Zh
bHVlT2YoKSB7IGNhbGxlZCA9IHRydWU7IHJldHVybiAyMTsgfX0pOworICAgICAgICBhc3NlcnQu
dHJ1dGh5KGNhbGxlZCk7CisgICAgfQorCisgICAgeworICAgICAgICBjb25zdCB0YWJsZSA9IG5l
dyBXZWJBc3NlbWJseS5UYWJsZSh7ZWxlbWVudDogImFueWZ1bmMiLCBpbml0aWFsOiAyMH0pOwor
ICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHRhYmxlLmdldCgyMCksIFJhbmdlRXJyb3IsICJX
ZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuZ2V0IGV4cGVjdHMgYW4gaW50ZWdlciBsZXNzIHRo
YW4gdGhlIHNpemUgb2YgdGhlIHRhYmxlIik7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
MjA7IGkrKykKKyAgICAgICAgICAgIGFzc2VydC5lcSh0YWJsZS5nZXQoaSksIG51bGwpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgY29uc3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUo
e2VsZW1lbnQ6ICJhbnlmdW5jIiwgaW5pdGlhbDogMjB9KTsKKyAgICAgICAgYXNzZXJ0LnRocm93
cygoKSA9PiB0YWJsZS5zZXQoMjAsIG51bGwpLCBSYW5nZUVycm9yLCAiV2ViQXNzZW1ibHkuVGFi
bGUucHJvdG90eXBlLnNldCBleHBlY3RzIGFuIGludGVnZXIgbGVzcyB0aGFuIHRoZSBzaXplIG9m
IHRoZSB0YWJsZSIpOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspCisgICAg
ICAgICAgICB0YWJsZS5zZXQoaSwgbnVsbCk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBU
aGlzIHNob3VsZCBub3QgdGhyb3cKKyAgICAgICAgbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0
aWFsOiAyKioyMCwgbWF4aW11bTogMioqMzIgLSAxLCBlbGVtZW50OiAiYW55ZnVuYyJ9KTsKKyAg
ICB9Cit9CisKK3sKKworICAgIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlKHRhYmxlKSB7CisgICAg
ICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgICAgICAuVHlwZSgpLkVu
ZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgICAgICAuVGFibGUoImltcCIs
ICJ0YWJsZSIsIHtpbml0aWFsOiAyNSwgZWxlbWVudDogImFueWZ1bmMifSkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5Db2Rl
KCkKKyAgICAgICAgICAgIC5FbmQoKTsKKyAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOworICAgICAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHt0
YWJsZX19KSwgVHlwZUVycm9yLCAiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBX
ZWJBc3NlbWJseS5UYWJsZSIpOworICAgIH0KKyAgICBhc3NlcnRCYWRUYWJsZSgyNSk7CisgICAg
YXNzZXJ0QmFkVGFibGUobmV3IE9iamVjdCk7CisgICAgYXNzZXJ0QmFkVGFibGUoW10pOworICAg
IGFzc2VydEJhZFRhYmxlKG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6MX0pKTsKK30K
SW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwkocmV2aXNpb24gMjA5NzY2
KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwkod29ya2luZyBjb3B5
KQpAQCAtNzgsOCArNzgsOSBAQCBmb3IgKGNvbnN0IGMgaW4gY29uc3RydWN0b3JQcm9wZXJ0aWVz
KSB7CiAgICAgICAgIG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6IDIwfSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgIlRhYmxlIjoKLSAgICAgICAgLy8gRklYTUUgSW1wbGVtZW50
IGFuZCB0ZXN0IHRoZXNlIEFQSXMgZnVydGhlci4gRm9yIG5vdyB0aGV5IGp1c3QgdGhyb3cuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk3NzUKLSAgICAgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oKSwgRXJyb3IsIGBXZWJBc3NlbWJs
eSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlICR7Y30gY29uc3RydWN0b3IgcHJvcGVydHlgKTsK
KyAgICAgICAgbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAyMCwgZWxlbWVudDogImFu
eWZ1bmMifSk7CisgICAgICAgIG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDogMjAsIG1h
eGltdW06IDIwLCBlbGVtZW50OiAiYW55ZnVuYyJ9KTsKKyAgICAgICAgbmV3IFdlYkFzc2VtYmx5
LlRhYmxlKHtpbml0aWFsOiAyMCwgbWF4aW11bTogMjUsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlICJDb21waWxlRXJyb3IiOgogICAgIGNhc2UgIlJ1bnRp
bWVFcnJvciI6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5NzY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDk2IEBACisyMDE2LTEyLTEzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBpbXBsZW1lbnQgdGhlIHRhYmxlIHNlY3Rpb24gYW5k
IHRhYmxlIGltcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY1NzE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUgVGFibGUgc3BhY2UgZm9yIHdhc206CisgICAg
ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9kZXNpZ24vYmxvYi9tYXN0ZXIvQmlu
YXJ5RW5jb2RpbmcubWQjdGFibGUtc2VjdGlvbgorCisgICAgICAgIEl0IG9ubHkgaW1wbGVtZW50
cyBkZWZpbmluZyBhbmQgaW1wb3J0aW5nIGEgdGFibGUuIFRoZSBidWxrCisgICAgICAgIG9mIHRo
aXMgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIHRoZSB2YXJpb3VzIHdhc20gVGFibGUgcHJvdG90eXBl
CisgICAgICAgIG1ldGhvZHMgYW5kIHRoZSB1bmRlcmx5aW5nIFRhYmxlIG9iamVjdDoKKyAgICAg
ICAgaHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9ibG9iL21hc3Rlci9KUy5t
ZCN3ZWJhc3NlbWJseXRhYmxlLWNvbnN0cnVjdG9yCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IGZpeGVzIGEgYnVnIGluIG91ciBpbXBsZW1lbnRhdGlvbiB3aXRoIGNhbGxfaW5kaXJlY3QuCisg
ICAgICAgIFdlIGluaXRpYWxseSBpbXBsZW1lbnRlZCBjYWxsX2luZGlyZWN0IGFzIGEgd2F5IHRv
IGNhbGwgZnVuY3Rpb25zIHRoYXQKKyAgICAgICAgYXJlIGltcG9ydGVkIG9yIGRlZmluZWQgaW4g
dGhlIG1vZHVsZS4gVGhpcyB3YXMgdGhlIHdyb25nCisgICAgICAgIGludGVycHJldGF0aW9uIG9m
IHRoZSBzcGVjLiBJbnN0ZWFkLCBjYWxsX2luZGlyZWN0IGNhbiBvbmx5IGluZGV4IGludG8KKyAg
ICAgICAgdGhlIHRhYmxlIGluZGV4IHNwYWNlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6
CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgICogd2FzbS9X
YXNtRm9ybWF0Lmg6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlSW5mb3JtYXRpb246OlRhYmxl
SW5mb3JtYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZUluZm9ybWF0aW9uOjpvcGVy
YXRvciBib29sKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGVJbmZvcm1hdGlvbjo6aXNJbXBv
cnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZUluZm9ybWF0aW9uOjppbml0aWFsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VGFibGVJbmZvcm1hdGlvbjo6bWF4aW11bSk6CisgICAgICAgIChK
U0M6Oldhc206OkNhbGxhYmxlRnVuY3Rpb246OkNhbGxhYmxlRnVuY3Rpb24pOgorICAgICAgICAq
IHdhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VJ
bXBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXphYmxl
TGltaXRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVs
cGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcik6CisgICAg
ICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAqIHdh
c20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUhl
bHBlcnMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OnRvTm9uV3JhcHBpbmdVaW50MzIpOgorICAg
ICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRU
YWJsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJs
ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRh
YmxlOjpncm93KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbik6Cisg
ICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaDoKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseVRhYmxlOjptYXhpbXVtKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRh
YmxlOjpzaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpnZXRGdW5jdGlv
bik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZTaXplKToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucyk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6aXNWYWxpZFNpemUpOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5
RnVuY3Rpb246OmNhbGwpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpXZWJB
c3NlbWJseUZ1bmN0aW9uOjpzaWduYXR1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1
bmN0aW9uOjp3YXNtRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rp
b246OndlYkFzc2VtYmx5Q2FsbGVlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1l
bW9yeSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJs
eVRhYmxlUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0VGFibGUpOgorICAgICAgICAo
SlNDOjp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6d2Vi
QXNzZW1ibHlUYWJsZVByb3RvRnVuY0dyb3cpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRh
YmxlUHJvdG9GdW5jR2V0KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVu
Y1NldCk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaDoKKwogMjAx
Ni0xMi0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2Ug
b3BhcXVlIHJvb3Qgc2Nhbm5pbmcgdHJ1bHkgY29uc3RyYWludC1iYXNlZApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTc2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDEzLDYgKzE0MTMsNyBAQAogCQk3OTVCMTk5NzFENzhCRTM1MDAyNjJGQTAg
LyogTWFwQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgKi87IH07CiAJCTc5
NUIxOTk4MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5NjFENzhCRTM1MDAyNjJGQTAgLyogTWFw
QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5NjQ2NTZBMUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUg
LyogR2V0UHV0SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTc5NkZCNDNBMURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVy
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2RkI0
MzkxREZGOEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk3RTA3QTkxQjhGQ0ZCOTAw
ODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAv
KiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTc5N0UwN0FBMUI4RkNG
QjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJB
IC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk4OTM3NzgxRENBQjU3MzAwRjhENEZCIC8qIEpT
Rml4ZWRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OTg5Mzc3NjFEQ0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmNwcCAqLzsgfTsK
QEAgLTM4NDIsNiArMzg0Myw3IEBACiAJCTc5NUIxOTk1MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBC
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcEJhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTVCMTk5NjFENzhCRTM1MDAyNjJGQTAg
LyogTWFwQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBCYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NjQ2NTY4MUI5NTJGRjAwMDMwNTlFRSAv
KiBHZXRQdXRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldFB1dElu
Zm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk2RkI0MzkxREZGOEMzRjAwMzlD
OTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEpTV2ViQXNzZW1ibHlIZWxwZXJzLmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5SGVs
cGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4
NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzk4OTM3NzYxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpeGVkQXJyYXkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzU4Niw2ICs3NTg4LDcgQEAKIAkJCQk3OUU0MjNFMTFE
RUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5oICovLAogCQkJCUFEMkZDQkE2
MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcCAqLywKIAkJ
CQlBRDJGQ0JBNzFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5o
ICovLAorCQkJCTc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVy
cy5oICovLAogCQkJCUFEMkZDQkE4MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UuY3BwICovLAogCQkJCUFEMkZDQkE5MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaCAqLywKIAkJCQlBRDJGQ0JBQTFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseU1lbW9yeS5jcHAgKi8sCkBAIC04Njk1LDYgKzg2OTgsNyBAQAogCQkJCTQzNDIyQTY3
MUMxNjI2NzgwMEUyRUI5OCAvKiBCM1JlZHVjZURvdWJsZVRvRmxvYXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMDcwQTRCMUQ1NDNBOTgwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RDNCMkM2MTAxNTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxl
ckFSTS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk2RkI0M0ExREZGOEMzRjAwMzlDOTVEIC8qIEpT
V2ViQXNzZW1ibHlIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJE
MDBDRjg3MTEgLyogTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZB
REQxNDYwRkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2M0IyM0UwMEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjA5NzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzcsNyArMTM3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNz
aW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxscHRyOwogCi0gICAgQjNJUkdlbmVyYXRvcihj
b25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9u
KiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgSW1tdXRhYmxlRnVuY3Rp
b25JbmRleFNwYWNlJik7CisgICAgQjNJUkdlbmVyYXRvcihWTSYsIGNvbnN0IE1lbW9yeUluZm9y
bWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmKTsK
IAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8
VHlwZT4mKTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50
MzJfdCk7CkBAIC0xODgsNiArMTg4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVuaWZ5VmFsdWVz
V2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYg
c3RhY2spOwogICAgIFZhbHVlKiB6ZXJvRm9yVHlwZShUeXBlKTsKIAorICAgIFZNJiBtX3ZtOwog
ICAgIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYgbV9mdW5jdGlvbkluZGV4U3Bh
Y2U7CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50Qmxv
Y2s7CkBAIC0xOTksOCArMjAwLDkgQEAgcHJpdmF0ZToKICAgICBWYWx1ZSogbV9mdW5jdGlvbklu
ZGV4U3BhY2VWYWx1ZTsKIH07CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3Qg
TWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21JbnRl
cm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNw
YWNlJiBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgOiBtX2Z1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4U3BhY2UpCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29u
c3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21J
bnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRl
eFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9mdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKQogICAgICwgbV9wcm9jKHByb2NlZHVy
ZSkKICAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMpCiB7CkBAIC02NjksMjcgKzY3MSw1MSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJ
bmRpcmVjdChjb25zCiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VM
YXN0KCk7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSA9PSBhcmdzLnNp
emUoKSk7CiAKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOworICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplOworICAgIHsKKyAgICAg
ICAgRXhwcmVzc2lvblR5cGUgdG9wSW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLAorICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2Ms
IE9yaWdpbigpLCAmbV92bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UpKTsKKyAgICAgICAgRXhw
cmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLAorICAgICAgICAgICAgdG9w
SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpKTsKKyAgICAg
ICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksCisgICAgICAg
ICAgICB0YWJsZSwgSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKTsKKyAg
ICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIHRhYmxlLCBKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9mU2l6ZSgpKTsKKyAgICB9CisK
ICAgICAvLyBDaGVjayB0aGUgaW5kZXggd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHZhbGlkLgogICAg
IHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgbWF4VmFsaWRJbmRleCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIE9yaWdpbigpLCBJbnQzMiwgbV9mdW5jdGlvbklu
ZGV4U3BhY2Uuc2l6ZSk7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwKLSAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9y
aWdpbigpLCBtX3plcm9WYWx1ZXNbbGluZWFyaXplVHlwZShJMzIpXSwKLSAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBPcmln
aW4oKSwgY2FsbGVlSW5kZXgsIG1heFZhbGlkSW5kZXgpKSk7CisgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCBj
YWxsZWVJbmRleCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemUpKTsKIAogICAgICAgICBjaGVj
ay0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7CiAgICAg
ICAgIH0pOwogICAgIH0KIAotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUgZnVuY3Rp
b24gaW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgorICAgIC8vIENvbXB1dGUgdGhlIG9m
ZnNldCBpbiB0aGUgdGFibGUgaW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgogICAgIEV4
cHJlc3Npb25UeXBlIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgTXVsLCBPcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBaRXh0MzIsIE9yaWdpbigpLCBjYWxsZWVJbmRleCksCiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIE9yaWdpbigpLCBwb2ludGVy
VHlwZSgpLCBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbikpKTsKLSAgICBFeHByZXNzaW9uVHlwZSBj
YWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBBZGQsIE9yaWdpbigpLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZVZhbHVlLCBvZmZzZXQpOworICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgT3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIs
IG9mZnNldCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBDYWxsYWJsZUZ1bmN0aW9uIGlzIGlu
aXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBIG51bGwgU2lnbmF0dXJlKiBpbmRpY2F0
ZXMgaXQncyBub3QgaW5pdGlhbGl6ZWQuCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0
dXJlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgT0JKRUNUX09GRlNF
VE9GKENhbGxhYmxlRnVuY3Rpb24sIHNpZ25hdHVyZSkpOworICAgIHsKKyAgICAgICAgLy8gSWYg
dGhlIFNpZ25hdHVyZSogaXMgbnVsbHB0ciwgd2UgdHJhcC4KKyAgICAgICAgQ2hlY2tWYWx1ZSog
Y2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hl
Y2ssIE9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIAorICAgICAgICAgICAgICAgIGNhbGxlZVNpZ25h
dHVyZSwgCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAwKSkpOworCisgICAgICAgIGNoZWNrLT5zZXRHZW5l
cmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgfSk7Cisg
ICAgfQogCiAgICAgLy8gQ2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIHRoZSB2YWx1ZSB3ZSBl
eHBlY3QuCiAgICAgewotICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmUgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50
ZXJUeXBlKCksIE9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBPQkpFQ1RfT0ZGU0VUT0YoQ2Fs
bGFibGVGdW5jdGlvbiwgc2lnbmF0dXJlKSk7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVj
dGVkU2lnbmF0dXJlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPiht
X3Byb2MsIE9yaWdpbigpLCBzaWduYXR1cmUpOwogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3Jp
Z2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIE5vdEVxdWFsLCBPcmlnaW4oKSwgY2FsbGVlU2lnbmF0dXJlLCBleHBlY3RlZFNpZ25hdHVy
ZSkpOwpAQCAtNzEzLDYgKzczOSw3IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGly
ZWN0KGNvbnMKICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBW
b2lkID8gMCA6IDFdLmdwcigpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKKwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC04NDYsNyArODczLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFdh
c21JbnRlcm5hbEZ1bmN0aW9uPiBwYQogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1
ZTxXYXNtSW50ZXJuYWxGdW5jdGlvbj4oKTsKIAogICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7Ci0g
ICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KGluZm8ubWVtb3J5LCBwcm9jZWR1cmUsIHJlc3VsdC5n
ZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAg
QjNJUkdlbmVyYXRvciBjb250ZXh0KHZtLCBpbmZvLm1lbW9yeSwgcHJvY2VkdXJlLCByZXN1bHQu
Z2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4U3BhY2UpOwogICAg
IEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihjb250ZXh0LCBmdW5jdGlvblN0
YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBmdW5jdGlvbkluZGV4U3BhY2UsIGluZm8p
OwogICAgIGlmICghcGFyc2VyLnBhcnNlKCkpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCShy
ZXZpc2lvbiAyMDk3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdHJ1Y3QgRXhwb3J0IHsKICAg
ICBFeHRlcm5hbDo6S2luZCBraW5kOwogICAgIHVuaW9uIHsKICAgICAgICAgdWludDMyX3QgZnVu
Y3Rpb25JbmRleDsKLSAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IFRhYmxlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgLy8gRklYTUUgaW1w
bGVtZW50IFRhYmxlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3
ODIKICAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IE1lbW9yeSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NjcxCiAgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBH
bG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMwogICAg
IH07CkBAIC0xNDcsMTcgKzE0Nyw0NSBAQCBzdHJ1Y3QgU2VnbWVudCB7CiAgICAgfQogfTsKIAor
Y2xhc3MgVGFibGVJbmZvcm1hdGlvbiB7CitwdWJsaWM6CisgICAgVGFibGVJbmZvcm1hdGlvbigp
CisgICAgeworICAgICAgICBBU1NFUlQoISp0aGlzKTsKKyAgICB9CisKKyAgICBUYWJsZUluZm9y
bWF0aW9uKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0s
IGJvb2wgaXNJbXBvcnQpCisgICAgICAgIDogbV9pbml0aWFsKGluaXRpYWwpCisgICAgICAgICwg
bV9tYXhpbXVtKG1heGltdW0pCisgICAgICAgICwgbV9pc0ltcG9ydChpc0ltcG9ydCkKKyAgICAg
ICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAg
fQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxp
ZDsgfQorICAgIGJvb2wgaXNJbXBvcnQoKSBjb25zdCB7IHJldHVybiBtX2lzSW1wb3J0OyB9Cisg
ICAgdWludDMyX3QgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsgfQorICAgIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07
IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2luaXRpYWw7CisgICAgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gbV9tYXhpbXVtOworICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2lzVmFsaWQgeyBmYWxzZSB9OworfTsKKwogc3RydWN0IE1vZHVsZUluZm9ybWF0
aW9uIHsKICAgICBWZWN0b3I8U2lnbmF0dXJlPiBzaWduYXR1cmVzOwogICAgIFZlY3RvcjxJbXBv
cnQ+IGltcG9ydHM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZSo+IGltcG9ydEZ1bmN0aW9uczsKLSAg
ICAvLyBGSVhNRSBpbXBsZW1lbnQgaW1wb3J0IFRhYmxlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgaW1wb3J0IEds
b2JhbCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTMzCiAgICAg
VmVjdG9yPFNpZ25hdHVyZSo+IGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVzOwogICAgIE1lbW9y
eUluZm9ybWF0aW9uIG1lbW9yeTsKICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwogICAgIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlOwogICAgIFZlY3Rv
cjxTZWdtZW50OjpQdHI+IGRhdGE7CisgICAgVGFibGVJbmZvcm1hdGlvbiB0YWJsZUluZm9ybWF0
aW9uOwogCiAgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwpAQCAtMTg1LDEzICsyMTMsMTgg
QEAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgV2FzbVRvSlNTdAogLy8gV2ViQXNzZW1i
bHkgZGlyZWN0IGNhbGxzIGFuZCBjYWxsX2luZGlyZWN0IHVzZSBpbmRpY2VzIGludG8gImZ1bmN0
aW9uIGluZGV4IHNwYWNlIi4gVGhpcyBzcGFjZSBzdGFydHMgd2l0aCBhbGwgaW1wb3J0cywgYW5k
IHRoZW4gYWxsIGludGVybmFsIGZ1bmN0aW9ucy4KIC8vIENhbGxhYmxlRnVuY3Rpb24gYW5kIEZ1
bmN0aW9uSW5kZXhTcGFjZSBhcmUgb25seSBtZWFudCBhcyBmYXN0IGxvb2t1cCB0YWJsZXMgZm9y
IHRoZXNlIG9wY29kZXMsIGFuZCBkbyBub3Qgb3duIGNvZGUuCiBzdHJ1Y3QgQ2FsbGFibGVGdW5j
dGlvbiB7Ci0gICAgQ2FsbGFibGVGdW5jdGlvbihTaWduYXR1cmUqIHNpZ25hdHVyZSkKKyAgICBD
YWxsYWJsZUZ1bmN0aW9uKCkgPSBkZWZhdWx0OworCisgICAgQ2FsbGFibGVGdW5jdGlvbihTaWdu
YXR1cmUqIHNpZ25hdHVyZSwgdm9pZCogY29kZSA9IG51bGxwdHIpCiAgICAgICAgIDogc2lnbmF0
dXJlKHNpZ25hdHVyZSkKLSAgICAgICAgLCBjb2RlKG51bGxwdHIpCisgICAgICAgICwgY29kZShj
b2RlKQogICAgIHsKICAgICB9Ci0gICAgU2lnbmF0dXJlKiBzaWduYXR1cmU7IC8vIEZJWE1FIHBh
Y2sgdGhpcyBpbnNpZGUgYSAodW5pcXVlZCkgaW50ZWdlciAoZm9yIGNvcnJlY3RuZXNzIHRoZSBw
YXJzZXIgc2hvdWxkIHVuaXF1ZSBTaWduYXR1cmVzKSwgYW5kIHRoZW4gcGFjayB0aGF0IGludGVn
ZXIgaW50byB0aGUgY29kZSBwb2ludGVyLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1NTExCi0gICAgdm9pZCogY29kZTsKKworICAgIC8vIEZJWE1FIHBhY2sgdGhp
cyBpbnNpZGUgYSAodW5pcXVlZCkgaW50ZWdlciAoZm9yIGNvcnJlY3RuZXNzIHRoZSBwYXJzZXIg
c2hvdWxkIHVuaXF1ZSBTaWduYXR1cmVzKSwKKyAgICAvLyBhbmQgdGhlbiBwYWNrIHRoYXQgaW50
ZWdlciBpbnRvIHRoZSBjb2RlIHBvaW50ZXIuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjU1MTEKKyAgICBTaWduYXR1cmUqIHNpZ25hdHVyZSB7IG51bGxwdHIgfTsg
CisgICAgdm9pZCogY29kZSB7IG51bGxwdHIgfTsKIH07CiB0eXBlZGVmIFZlY3RvcjxDYWxsYWJs
ZUZ1bmN0aW9uPiBGdW5jdGlvbkluZGV4U3BhY2U7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCShyZXZpc2lvbiAyMDk3NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgyLDYgKzM4Miw4IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmUKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6Q2FsbEluZGlyZWN0OiB7Cisg
ICAgICAgIGlmICghbV9pbmZvLnRhYmxlSW5mb3JtYXRpb24pCisgICAgICAgICAgICByZXR1cm4g
c2V0RXJyb3JNZXNzYWdlKCJjYWxsX2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hlbiBhIHRhYmxl
IGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQiKTsKICAgICAgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5k
ZXg7CiAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2lnbmF0dXJlSW5kZXgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzkwLDYgKzM5Miw5IEBAIGJvb2wgRnVuY3Rpb25QYXJz
ZXI8Q29udGV4dD46OnBhcnNlRXhwcmUKICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHJlc2Vy
dmVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpZiAocmVzZXJ2ZWQg
IT0gMCkKKyAgICAgICAgICAgIHJldHVybiBzZXRFcnJvck1lc3NhZ2UoImNhbGxfaW5kaXJlY3Qg
J3Jlc2VydmVkJyB2YXJ1aW50MSBtdXN0IGJlIDB4MCIpOworCiAgICAgICAgIGlmIChtX2luZm8u
c2lnbmF0dXJlcy5zaXplKCkgPD0gc2lnbmF0dXJlSW5kZXgpCiAgICAgICAgICAgICByZXR1cm4g
c2V0RXJyb3JNZXNzYWdlKCJUcmllZCB0byB1c2UgYSBzaWduYXR1cmUgb3V0c2lkZSB0aGUgcmFu
Z2Ugb2YgdmFsaWQgc2lnbmF0dXJlcyIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA5NzY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRl
ICJJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJsZS5oIgog
I2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24u
aCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCkBAIC0yNTAsNyArMjUxLDkgQEAgYm9vbCBNb2R1bGVQ
YXJzZXI6OnBhcnNlSW1wb3J0KCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgRXh0ZXJuYWw6OlRhYmxlOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAgICAgICAgICBib29s
IGlzSW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICghcGFyc2VUYWJsZUhlbHBlcihpc0lt
cG9ydCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5OiB7CkBAIC0zMDAsNDUg
KzMwMywxMDEgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24oKQogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSgpCitib29sIE1vZHVs
ZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKQogewotICAgIC8vIEZJWE1FIGltcGxlbWVudCB0YWJs
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1Ci0gICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBBU1NFUlQoIW1heGltdW0pOworCisgICAg
dWludDhfdCBmbGFnczsKKyAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxhZ3MpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluaXRpYWwpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZmxhZ3MpIHsKKyAgICAgICAgdWludDMyX3QgbWF4
aW11bUludDsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihtYXhpbXVtSW50KSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaW5pdGlhbCA+IG1heGltdW1JbnQp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbWF4aW11bSA9IG1heGltdW1J
bnQ7CisgICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpw
YXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KQorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNl
VGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCkKIHsKLSAgICAvLyBXZSBkb24ndCBhbGxvdyByZWRl
Y2xhcmluZyBtZW1vcnkuIEVpdGhlciB2aWEgaW1wb3J0IG9yIGRlZmluaXRpb24uCi0gICAgaWYg
KG1fbW9kdWxlLT5tZW1vcnkpCisgICAgLy8gV2UncmUgb25seSBhbGxvd2VkIGEgdG90YWwgb2Yg
b25lIFRhYmxlIGltcG9ydCBvciBkZWZpbml0aW9uLgorICAgIGlmIChtX2hhc1RhYmxlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1aW50OF90IGZsYWdzOwotICAgIGlmICghcGFyc2VW
YXJVSW50MShmbGFncykpCisgICAgbV9oYXNUYWJsZSA9IHRydWU7CisKKyAgICBpbnQ4X3QgdHlw
ZTsKKyAgICBpZiAoIXBhcnNlSW50Nyh0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICh0eXBlICE9IFdhc206OkFueWZ1bmMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHVpbnQzMl90IGluaXRpYWw7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSkKKyAg
ICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgIGlmICghcGFyc2VSZXNpemFi
bGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmICghUGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpKQorICAgIGlmICghSlNXZWJBc3NlbWJs
eVRhYmxlOjppc1ZhbGlkU2l6ZShpbml0aWFsKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQoaW5pdGlhbCk7CisgICAgQVNTRVJUKCFtYXhp
bXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOwogCisgICAgbV9tb2R1bGUtPnRhYmxlSW5mb3Jt
YXRpb24gPSBUYWJsZUluZm9ybWF0aW9uKGluaXRpYWwsIG1heGltdW0sIGlzSW1wb3J0KTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSgpCit7
CisgICAgdWludDMyX3QgY291bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIG9ubHkgYWxsb3cgb25lIHRhYmxlIGZv
ciBub3cuCisgICAgaWYgKGNvdW50ICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKKyAgICByZXR1cm4gcGFyc2VUYWJsZUhlbHBlcihpc0lt
cG9ydCk7Cit9CisKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlz
SW1wb3J0KQoreworICAgIC8vIFdlIGRvbid0IGFsbG93IHJlZGVjbGFyaW5nIG1lbW9yeS4gRWl0
aGVyIHZpYSBpbXBvcnQgb3IgZGVmaW5pdGlvbi4KKyAgICBpZiAobV9tb2R1bGUtPm1lbW9yeSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7
CiAgICAgUGFnZUNvdW50IG1heGltdW1QYWdlQ291bnQ7Ci0gICAgaWYgKGZsYWdzKSB7Ci0gICAg
ICAgIHVpbnQzMl90IG1heGltdW07Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIobWF4aW11
bSkpCisgICAgeworICAgICAgICB1aW50MzJfdCBpbml0aWFsOworICAgICAgICBzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgICAgICBpZiAoIXBhcnNlUmVzaXphYmxlTGltaXRz
KGluaXRpYWwsIG1heGltdW0pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IGlmICghUGFnZUNvdW50Ojppc1ZhbGlkKG1heGltdW0pKQorICAgICAgICBBU1NFUlQoIW1heGlt
dW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7CisgICAgICAgIGlmICghUGFnZUNvdW50Ojppc1Zh
bGlkKGluaXRpYWwpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1heGlt
dW1QYWdlQ291bnQgPSBQYWdlQ291bnQobWF4aW11bSk7Ci0gICAgICAgIGlmIChpbml0aWFsUGFn
ZUNvdW50ID4gbWF4aW11bVBhZ2VDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaW5pdGlhbFBhZ2VDb3VudCA9IFBhZ2VDb3VudChpbml0aWFsKTsKKworICAgICAgICBp
ZiAobWF4aW11bSkgeworICAgICAgICAgICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGlt
dW0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1heGltdW1Q
YWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0pOworICAgICAgICB9CiAgICAgfQorICAgIEFT
U0VSVChpbml0aWFsUGFnZUNvdW50KTsKKyAgICBBU1NFUlQoIW1heGltdW1QYWdlQ291bnQgfHwg
bWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNvdW50KTsKIAogICAgIFZlY3Rvcjx1bnNp
Z25lZD4gcGlubmVkU2l6ZXMgPSB7IDAgfTsKICAgICBtX21vZHVsZS0+bWVtb3J5ID0gTWVtb3J5
SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgcGlubmVkU2l6
ZXMsIGlzSW1wb3J0KTsKQEAgLTM5Nyw3ICs0NTYsNyBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFy
c2VFeHBvcnQoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBF
eHRlcm5hbDo6VGFibGU6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3ODIKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRXh0ZXJuYWw6Ok1lbW9yeTogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAkocmV2aXNp
b24gMjA5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMiArNzksMTUgQEAgcHJpdmF0ZToKICN1bmRlZiBX
QVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpOworICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CisgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6
b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKTsKIAogICAgIFZNKiBtX3ZtOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGU7CiAgICAgRnVuY3Rpb25JbmRl
eFNwYWNlIG1fZnVuY3Rpb25JbmRleFNwYWNlOwogICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnk+IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OwogICAgIGJvb2wgbV9mYWlsZWQg
eyB0cnVlIH07CisgICAgYm9vbCBtX2hhc1RhYmxlIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9l
cnJvck1lc3NhZ2U7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNp
bmNsdWRlICJKU0NKU1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitBTFdBWVNfSU5MSU5F
IHVpbnQzMl90IHRvTm9uV3JhcHBpbmdVaW50MzIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUu
dG9JbnRlZ2VyKGV4ZWMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKKyAgICBpZiAoZG91YmxlVmFsdWUgPCAwIHx8IGRvdWJsZVZhbHVlID4gVUlOVF9NQVgpIHsK
KyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJFeHBlY3QgYW4gaW50ZWdlciBhcmd1
bWVudCBpbiB0aGUgcmFuZ2U6IFswLCAyXjMyIC0gMV0iKSkpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZG91YmxlVmFsdWUp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjA5NzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODAsNiArODAsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGls
ZHJlCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9kdWxlKTsKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGVOYW1lc3BhY2VPYmplY3QpOwogICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21lbW9yeSk7CisgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fdGFibGUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlz
T2JqZWN0LT5tX251bUltcG9ydEZ1bmN0aW9uczsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlvbihpKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2
aXNpb24gMjA5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJsZS5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNzEsMTEgKzcyLDE2IEBAIHB1YmxpYzoKICAgICBK
U1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQog
ICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2bSwgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KSB7
IG1fbWVtb3J5LnNldCh2bSwgdGhpcywgbWVtb3J5KTsgfQogCisgICAgSlNXZWJBc3NlbWJseVRh
YmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFRhYmxl
KFZNJiB2bSwgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSkgeyBtX3RhYmxlLnNldCh2bSwgdGhp
cywgdGFibGUpOyB9CisKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24o
dW5zaWduZWQgaWR4KQogICAgIHsKICAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rp
b25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICogaWR4OwogICAgIH0KIAorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fdGFibGUpOyB9CisKIHByb3RlY3RlZDoKICAgICBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCk7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU01vZHVsZU5hbWVz
cGFjZU9iamVjdCopOwpAQCAtOTYsNiArMTAyLDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJp
ZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdDsKICAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9tZW1vcnk7CisgICAgV3JpdGVCYXJyaWVyPEpT
V2ViQXNzZW1ibHlUYWJsZT4gbV90YWJsZTsKICAgICB1bnNpZ25lZCBtX251bUltcG9ydEZ1bmN0
aW9uczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkocmV2aXNpb24gMjA5NzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksMTIgKzI5LDIxIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLUpTV2ViQXNzZW1ibHlUYWJsZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5
VGFibGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LlRhYmxlIiwgJkJhc2U6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5VGFibGUpIH07CisKK0pTV2ViQXNzZW1i
bHlUYWJsZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBtYXhpbXVtKQogewotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseVRhYmxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJs
eVRhYmxlKHZtLCBzdHJ1Y3R1cmUpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmICghaXNWYWxpZFNpemUoaW5pdGlhbCkpIHsKKyAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihl
eGVjKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8qIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseVRhYmxlPih2bS5o
ZWFwKSkgSlNXZWJBc3NlbWJseVRhYmxlKHZtLCBzdHJ1Y3R1cmUsIGluaXRpYWwsIG1heGltdW0p
OwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGluc3RhbmNl
OwogfQpAQCAtNDQsOSArNTMsMjMgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNy
ZWF0ZVN0cgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
IH0KIAotSlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiB7Cisg
ICAgbV9zaXplID0gaW5pdGlhbDsKKyAgICBBU1NFUlQoaXNWYWxpZFNpemUobV9zaXplKSk7Cisg
ICAgbV9tYXhpbXVtID0gbWF4aW11bTsKKyAgICBBU1NFUlQoIW1fbWF4aW11bSB8fCAqbV9tYXhp
bXVtID49IG1fc2l6ZSk7CisKKyAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgd29ydGggdHJ5aW5n
IHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcg
c28uCisgICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0LgorICAgIG1fZnVu
Y3Rpb25zID0gTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxsb2Moc2l6ZW9m
KFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpKTsK
KyAgICBtX2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1
bmN0aW9uPj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+
KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7CisgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IG1fc2l6ZTsgKytpKSB7CisgICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ld
KSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VSVCghbV9mdW5jdGlvbnMu
Z2V0KClbaV0uc2lnbmF0dXJlKTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUu
CisgICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pIFdyaXRlQmFycmllcjxXZWJB
c3NlbWJseUZ1bmN0aW9uPigpOworICAgIH0KIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTYyLDEzICs4NSw1MSBAQCB2b2lkIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6ZGVzdHJveShKU0NlbGwqCiAKIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPihjZWxsKTsKKyAg
ICBKU1dlYkFzc2VtYmx5VGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseVRh
YmxlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3NpemU7ICsraSkK
KyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fanNGdW5jdGlvbnMuZ2V0KClb
aV0pOwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseVRhYmxlOjpzX2luZm8gPSB7
ICJXZWJBc3NlbWJseS5UYWJsZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNXZWJBc3NlbWJseVRhYmxlKSB9OworYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3co
dWludDMyX3QgbmV3U2l6ZSkKK3sKKyAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChuZXdTaXplID09IG1fc2l6ZSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gKm1heGltdW0oKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIG1fZnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdhc206OkNh
bGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7CisgICAgbV9q
c0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlv
bj4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7CisKKyAgICBmb3IgKHVpbnQzMl90
IGkgPSBtX3NpemU7IGkgPCBuZXdTaXplOyArK2kpIHsKKyAgICAgICAgbmV3ICgmbV9mdW5jdGlv
bnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICAgICAgbmV3ICgmbV9q
c0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+KCk7
CisgICAgfQorICAgIG1fc2l6ZSA9IG5ld1NpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgSlNXZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX2pzRnVuY3Rpb25zLmdl
dCgpW2luZGV4XSA9IFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPigpOworICAgIG1f
ZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICBB
U1NFUlQoIW1fZnVuY3Rpb25zLmdldCgpW2luZGV4XS5zaWduYXR1cmUpOyAvLyBXZSByZWx5IG9u
IHRoaXMgaW4gY29tcGlsZWQgY29kZS4KK30KKwordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNl
dEZ1bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1
bmN0aW9uKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX2pz
RnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKKyAgICBtX2Z1
bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKGZ1bmN0aW9uLT5z
aWduYXR1cmUoKSwgZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KCkpOworfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseVRhYmxlLmgJKHJldmlzaW9uIDIwOTc2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwyMyArMjksNTQgQEAKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCisjaW5j
bHVkZSA8d3RmL01hbGxvY1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdh
c20geworc3RydWN0IENhbGxhYmxlRnVuY3Rpb247Cit9CisKIGNsYXNzIEpTV2ViQXNzZW1ibHlU
YWJsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlU
YWJsZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlU
YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgaW5pdGlh
bCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAg
IERFQ0xBUkVfSU5GTzsKIAotcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYs
IFN0cnVjdHVyZSopOworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25z
dCB7IHJldHVybiBtX21heGltdW07IH0KKyAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CisgICAgYm9vbCBncm93KHVpbnQzMl90IG5ld1NpemUpIFdBUk5fVU5VU0VE
X1JFVFVSTjsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBnZXRGdW5jdGlvbih1aW50MzJfdCBp
bmRleCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAg
ICAgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgpOworICAgIH0KKyAg
ICB2b2lkIGNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpOworICAgIHZvaWQgc2V0RnVuY3Rp
b24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlGdW5jdGlvbiopOworCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseVRhYmxlLCBtX3NpemUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkZ1bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUs
IG1fZnVuY3Rpb25zKTsgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMyX3Qg
c2l6ZSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgdG9wcyBvdXQgYXQgfjM4NCBNQiB3b3J0aCBv
ZiBkYXRhIGluIHRoaXMgY2xhc3MuCisgICAgICAgIHJldHVybiBzaXplIDwgKDEgPDwgMjQpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUq
LCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisKKyAgICBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVGdW5jdGlvbj4gbV9mdW5jdGlvbnM7
CisgICAgTWFsbG9jUHRyPFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPj4gbV9qc0Z1
bmN0aW9uczsKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtX21heGltdW07CisgICAgdWlu
dDMyX3QgbV9zaXplOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAko
cmV2aXNpb24gMjA5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjYWxsCiAgICAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBwcmV2SlNXZWJBc3NlbWJseUluc3RhbmNlID0gdm0udG9wSlNXZWJBc3NlbWJseUlu
c3RhbmNlOwogICAgIHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZSA9IGluc3RhbmNlKCk7CiAg
ICAgQVNTRVJUKGluc3RhbmNlKCkpOwotICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZt
RW50cnlUb1dhc20od2ViQXNzZW1ibHlDYWxsZWUoKS0+ZW50cnlwb2ludCgpLCAmdm0sIHByb3Rv
Q2FsbEZyYW1lKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSByYXdSZXN1bHQgPSB2bUVudHJ5VG9XYXNt
KG1fanNFbnRyeXBvaW50LT5lbnRyeXBvaW50KCksICZ2bSwgcHJvdG9DYWxsRnJhbWUpOwogICAg
IHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZSA9IHByZXZKU1dlYkFzc2VtYmx5SW5zdGFuY2U7
CiAKICAgICAvLyBGSVhNRSBpcyB0aGlzIGNvcnJlY3Q/IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjQ4NzYKQEAgLTE0MCwxMiArMTQwLDEyIEBAIEVuY29kZWRKU1Zh
bHVlIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNhbGwKICAgICByZXR1cm4gRW5jb2RlZEpTVmFsdWUo
KTsKIH0KIAotV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIGNhbGxlZSwgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCitXZWJB
c3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUNhbGxl
ZSoganNFbnRyeXBvaW50LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwgV2Fz
bTo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgTm9JbnRy
aW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlv
blN0cnVjdHVyZSgpOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFz
c2VtYmx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICBmdW5jdGlv
bi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSwgaW5zdGFuY2Us
IGNhbGxlZSwgc2lnbmF0dXJlKTsKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4
ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSwgaW5zdGFuY2UsIGpzRW50cnlwb2ludCwgd2FzbUVudHJ5
cG9pbnQsIHNpZ25hdHVyZSk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCkBAIC0xNjYsMTUg
KzE2NiwxOCBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oCiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX3dhc21DYWxsZWUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2pzRW50
cnlwb2ludCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fd2FzbUVudHJ5cG9p
bnQpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBT
dHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIHdhc21DYWxsZWUsIFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKQordm9pZCBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5
cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1
cmUqIHNpZ25hdHVyZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJs
ZSwgbGVuZ3RoLCBuYW1lKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgbV9p
bnN0YW5jZS5zZXQodm0sIHRoaXMsIGluc3RhbmNlKTsKLSAgICBtX3dhc21DYWxsZWUuc2V0KHZt
LCB0aGlzLCB3YXNtQ2FsbGVlKTsKKyAgICBBU1NFUlQoanNFbnRyeXBvaW50ICE9IHdhc21FbnRy
eXBvaW50KTsKKyAgICBtX2pzRW50cnlwb2ludC5zZXQodm0sIHRoaXMsIGpzRW50cnlwb2ludCk7
CisgICAgbV93YXNtRW50cnlwb2ludC5zZXQodm0sIHRoaXMsIHdhc21FbnRyeXBvaW50KTsKICAg
ICBtX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjA5
NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMiArMjgsMTIgQEAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUNhbGxlZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOwog
c3RydWN0IFByb3RvQ2FsbEZyYW1lOwogY2xhc3MgV2ViQXNzZW1ibHlJbnN0YW5jZTsKIApAQCAt
NTMsMjggKzUzLDI5IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSosIFdhc206OlNpZ25hdHVyZSopOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmUqKTsKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUp
OwogCi0gICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2ViQXNzZW1ibHlDYWxsZWUoKSBjb25zdCB7
IHJldHVybiBtX3dhc21DYWxsZWUuZ2V0KCk7IH0KICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQotICAgIGNvbnN0
IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKCkKKyAgICBXYXNtOjpTaWduYXR1cmUqIHNpZ25h
dHVyZSgpCiAgICAgeyAKICAgICAgICAgQVNTRVJUKG1fc2lnbmF0dXJlKTsKICAgICAgICAgcmV0
dXJuIG1fc2lnbmF0dXJlOwogICAgIH0KICAgICBFbmNvZGVkSlNWYWx1ZSBjYWxsKFZNJiwgUHJv
dG9DYWxsRnJhbWUqKTsKKyAgICB2b2lkKiB3YXNtRW50cnlwb2ludCgpIHsgcmV0dXJuIG1fd2Fz
bUVudHJ5cG9pbnQtPmVudHJ5cG9pbnQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0
IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgSlNXZWJBc3NlbWJseUNhbGxl
ZSosIFdhc206OlNpZ25hdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRp
dmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNX
ZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZSopOwogCiBw
cml2YXRlOgogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSopOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9p
bnN0YW5jZTsKLSAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4gbV93YXNtQ2Fs
bGVlOworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX2pzRW50cnlwb2lu
dDsKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4gbV93YXNtRW50cnlwb2lu
dDsKICAgICBXYXNtOjpTaWduYXR1cmUqIG1fc2lnbmF0dXJlOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDk3NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCwxMCArODgsMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29ucwogICAgIC8vIExldCBpbXBvcnRzIGJlIGFuIGluaXRpYWxseS1lbXB0
eSBsaXN0IG9mIGV4dGVybmFsIHZhbHVlcy4KICAgICB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlv
bnMgPSAwOwogCi0gICAgLy8gRklYTUUgaW1wbGVtZW50IFRhYmxlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgR2xv
YmFsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzMKIAogICAg
IGJvb2wgaGFzTWVtb3J5SW1wb3J0ID0gZmFsc2U7CisgICAgYm9vbCBoYXNUYWJsZUltcG9ydCA9
IGZhbHNlOwogICAgIC8vIEZvciBlYWNoIGltcG9ydCBpIGluIG1vZHVsZS5pbXBvcnRzOgogICAg
IGZvciAoYXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykgewogICAgICAg
ICAvLyAxLiBMZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGlt
cG9ydE9iamVjdCwgaS5tb2R1bGVfbmFtZSkuCkBAIC0xMzEsMTIgKzEzMSwzNCBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpUYWJsZTogeworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3Vh
cmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KICAgICAgICAgICAgIC8vIDcuIE90aGVy
d2lzZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6Ci0gICAgICAgICAgICAvLyBGSVhNRSBpbXBsZW1l
bnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQor
ICAgICAgICAgICAgaGFzVGFibGVJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgSlNXZWJBc3Nl
bWJseVRhYmxlKiB0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odmFs
dWUpOwogICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5UYWJsZSBv
YmplY3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAgICAgICAgaWYgKCF0YWJsZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9y
dCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkpKTsKKworICAgICAg
ICAgICAgdWludDMyX3QgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJ
bmZvcm1hdGlvbi5pbml0aWFsKCk7CisgICAgICAgICAgICB1aW50MzJfdCBhY3R1YWxJbml0aWFs
ID0gdGFibGUtPnNpemUoKTsKKyAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0
ZWRJbml0aWFsKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0
ZXJhbCgiVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFs
bCIpKSkpOworCisgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gZXhwZWN0
ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkp
IHsKKyAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBhY3R1YWxNYXhpbXVt
ID0gdGFibGUtPm1heGltdW0oKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0p
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBkb2VzIG5vdCBoYXZlIGEg
J21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKmFjdHVhbE1heGltdW0gPiAqZXhw
ZWN0ZWRNYXhpbXVtKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbXBvcnRlZCBUYWJsZSdz
ICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0n
IikpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAv
LyBpaS4gQXBwZW5kIHYgdG8gdGFibGVzLgogICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5b
W1RhYmxlXV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBpbnN0YW5jZS0+c2V0VGFibGUodm0sIHRhYmxlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Ok1l
bW9yeTogewpAQCAtMTg1LDcgKzIwNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnMKIAogICAgIHsKICAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24ubWVt
b3J5ICYmIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKSB7Ci0gICAgICAgICAg
ICAvLyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYW4gaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRo
cm93biBhbiBleGNlcHRpb24uCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGhhdmUg
YSBNZW1vcnkgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNNZW1vcnlJbXBvcnQpOwogICAgICAgICB9CiAK
QEAgLTIwMCw2ICsyMjIsMjUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgICAgICB9CiAgICAgfQogCisgICAgeworICAgICAgICBpZiAoISFtb2R1bGVJbmZv
cm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3Jt
YXRpb24uaXNJbXBvcnQoKSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZl
IGEgVGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNU
YWJsZUltcG9ydCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0
aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7CisgICAgICAgICAgICAvLyBXZSBjcmVh
dGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgorICAgICAgICAgICAgSlNX
ZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMs
IHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0
dXJlKCksCisgICAgICAgICAgICAgICAgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlv
bi5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgp
KTsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZSBh
IEpTV2ViQXNzZW1ibHlUYWJsZSB3ZSd2ZSBkZWZpbmVkLgorICAgICAgICAgICAgLy8gSWYgaXQn
cyBkZWZpbmVkIHRvIGJlIHRvbyBsYXJnZSwgd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGEgdmFsaWRh
dGlvbiBlcnJvci4KKyAgICAgICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7
CisgICAgICAgICAgICBBU1NFUlQodGFibGUpOyAKKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRU
YWJsZSh2bSwgdGFibGUpOworICAgICAgICB9CisgICAgfQorCiAgICAgbW9kdWxlUmVjb3JkLT5s
aW5rKGV4ZWMsIGluc3RhbmNlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgaWYgKHZlcmJvc2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMjA5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJX
YXNtUGFnZUNvdW50LmgiCkBAIC01NCwxNyArNTUsNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAxKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1l
bW9yeSBleHBlY3RzIGV4YWN0bHkgb25lIGFyZ3VtZW50IikpKSk7CiAKLSAgICBhdXRvIGdldFVp
bnQzMiA9IFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4gdWludDMyX3QgewotICAgICAgICBkb3VibGUg
ZG91YmxlVmFsdWUgPSB2YWx1ZS50b0ludGVnZXIoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKLSAgICAgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8
fCBkb3VibGVWYWx1ZSA+IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLAotICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgZXhwZWN0cyB0aGUgJ2luaXRpYWwnIGFu
ZCAnbWF4aW11bScgcHJvcGVydGllcyB0byBiZSBpbnRlZ2VycyBpbiB0aGUgcmFuZ2U6IFswLCAy
XjMyIC0gMV0iKSkpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihkb3VibGVWYWx1ZSk7Ci0gICAgfTsKLQogICAg
IEpTT2JqZWN0KiBtZW1vcnlEZXNjcmlwdG9yOwogICAgIHsKICAgICAgICAgSlNWYWx1ZSBhcmd1
bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtNzgsNyArNjgsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIElkZW50aWZpZXIgaW5pdGlhbCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5pdGlhbCIpOwogICAgICAgICBKU1ZhbHVl
IG1pblNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBpbml0aWFsKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwotICAgICAgICB1aW50
MzJfdCBzaXplID0gZ2V0VWludDMyKG1pblNpemVWYWx1ZSk7CisgICAgICAgIHVpbnQzMl90IHNp
emUgPSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIG1pblNpemVWYWx1ZSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgaWYgKCFXYXNtOjpQ
YWdlQ291bnQ6OmlzVmFsaWQoc2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgJ2luaXRpYWwnIHBhZ2UgY291bnQg
aXMgdG9vIGxhcmdlIikpKSk7CkBAIC05MywxMCArODMsMTAgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICBpZiAoaGFzUHJvcGVydHkpIHsKICAgICAg
ICAgICAgIEpTVmFsdWUgbWF4U2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMs
IG1heGltdW0pOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwotICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSA9IGdldFVpbnQzMihtYXhTaXplVmFsdWUp
OworICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywg
bWF4U2l6ZVZhbHVlKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICAgICAgICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKHNpemUp
KQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldl
YkFzc2VtYmx5Lk1lbW9yeSAnbWF4aW11bScgcGFnZSBjb3VudCBpcyB0b28gbGFyZ2UiKSkpKTsK
LSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAg
ICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBXYXNtOjpQYWdlQ291bnQoc2l6ZSk7CiAKICAgICAg
ICAgICAgIGlmIChpbml0aWFsUGFnZUNvdW50ID4gbWF4aW11bVBhZ2VDb3VudCkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Nyw3ICs3Nyw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWEK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWw6OlRhYmxlOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzgyCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpNZW1vcnk6IHsKQEAgLTEz
NiwxNiArMTM2LDE3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MK
ICAgICAgICAgICAgIC8vICAgICBhLiBMZXQgZnVuYyBiZSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBF
eG90aWMgT2JqZWN0IGNyZWF0ZWQgZnJvbSBjLgogICAgICAgICAgICAgLy8gICAgIGIuIEFwcGVu
ZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgLy8gICAgIGMuIFJldHVybiBmdW5jLgotICAg
ICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSA9IG1vZHVsZS0+anNFbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAuZnVuY3Rpb25JbmRleCk7Cisg
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1
bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmZ1bmN0aW9u
SW5kZXgpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRD
YWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShleHAuZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmUqIHNpZ25h
dHVyZSA9IG1vZHVsZS0+c2lnbmF0dXJlRm9yRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5mdW5jdGlv
bkluZGV4KTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJn
dW1lbnRzLnNpemUoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwgd2FzbUNhbGxlZSwg
c2lnbmF0dXJlKTsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0g
V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+
YXJndW1lbnRzLnNpemUoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwganNFbnRyeXBv
aW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlKTsKICAgICAgICAgICAg
IGV4cG9ydGVkVmFsdWUgPSBmdW5jdGlvbjsKICAgICAgICAgICAgIGlmIChoYXNTdGFydCAmJiBz
dGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBleHAuZnVuY3Rpb25JbmRleCkKICAgICAgICAgICAg
ICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpUYWJsZTog
ewotICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDEzNQorICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTc4MgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7CkBAIC0xNzQsOCArMTc1LDkg
QEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAvLyBG
SVhNRSBjYW4gc3RhcnQgY2FsbCBpbXBvcnRzIC8gdGFibGVzPyBUaGlzIGFzc3VtZXMgbm90LiBo
dHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2lzc3Vlcy84OTYKICAgICAgICAg
aWYgKCFtX3N0YXJ0RnVuY3Rpb24uZ2V0KCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBzdGFydCBm
dW5jdGlvbiB3YXNuJ3QgYWRkZWQgYWJvdmUuIEl0IG11c3QgYmUgYSBwdXJlbHkgaW50ZXJuYWwg
ZnVuY3Rpb24uCi0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtQ2FsbGVlID0g
bW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVu
Y3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0
aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25h
dHVyZS0+YXJndW1lbnRzLnNpemUoKSwgInN0YXJ0IiwgaW5zdGFuY2UsIHdhc21DYWxsZWUsIHNp
Z25hdHVyZSk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRD
YWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxl
ZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksICJzdGFy
dCIsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBz
aWduYXR1cmUpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVu
Y3Rpb24pOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAyMDk3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4
IEBACiAKICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlUYWJsZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIK
IAogI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCIKQEAgLTQzLDEy
ICs0NSw1MyBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjCiAgQGVu
ZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
V2ViQXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDEzNQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dF
eGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJX
ZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlIFRhYmxlIGNvbnN0cnVjdG9yIHBy
b3BlcnR5IikpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBtZW1vcnlEZXNj
cmlwdG9yOworICAgIHsKKyAgICAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50
KDApOworICAgICAgICBpZiAoIWFyZ3VtZW50LmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlIGV4cGVjdHMg
aXRzIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCIpKSkpOworICAgICAgICBtZW1vcnlE
ZXNjcmlwdG9yID0ganNDYXN0PEpTT2JqZWN0Kj4oYXJndW1lbnQpOworICAgIH0KKworICAgIHsK
KyAgICAgICAgSWRlbnRpZmllciBlbGVtZW50SWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImVsZW1lbnQiKTsKKyAgICAgICAgSlNWYWx1ZSBlbGVtZW50VmFsdWUgPSBtZW1vcnlE
ZXNjcmlwdG9yLT5nZXQoZXhlYywgZWxlbWVudElkZW50KTsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICBTdHJpbmcgZWxlbWVudFN0cmluZyA9
IGVsZW1lbnRWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICBpZiAoZWxlbWVudFN0cmluZyAhPSAiYW55
ZnVuYyIpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldl
YkFzc2VtYmx5LlRhYmxlIGV4cGVjdHMgaXRzICdlbGVtZW50JyBmaWVsZCB0byBiZSB0aGUgc3Ry
aW5nICdhbnlmdW5jJyIpKSkpOworICAgIH0KKworICAgIElkZW50aWZpZXIgaW5pdGlhbElkZW50
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpbml0aWFsIik7CisgICAgSlNWYWx1ZSBp
bml0aWFsU2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMsIGluaXRpYWxJZGVu
dCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHVpbnQz
Ml90IGluaXRpYWwgPSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIGluaXRpYWxTaXplVmFsdWUp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKworICAgIHN0ZDo6
b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07CisgICAgSWRlbnRpZmllciBtYXhpbXVtSWRlbnQg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW0iKTsKKyAgICBib29sIGhhc1By
b3BlcnR5ID0gbWVtb3J5RGVzY3JpcHRvci0+aGFzUHJvcGVydHkoZXhlYywgbWF4aW11bUlkZW50
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgaWYgKGhh
c1Byb3BlcnR5KSB7CisgICAgICAgIEpTVmFsdWUgbWF4U2l6ZVZhbHVlID0gbWVtb3J5RGVzY3Jp
cHRvci0+Z2V0KGV4ZWMsIG1heGltdW1JZGVudCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgbWF4aW11bSA9IHRvTm9uV3JhcHBpbmdVaW50
MzIoZXhlYywgbWF4U2l6ZVZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOworCisgICAgICAgIGlmIChpbml0aWFsID4gKm1heGltdW0pIHsKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwKKyAgICAgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiJ21heGltdW0nIHByb3BlcnR5IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRo
ZSAnaW5pdGlhbCcgcHJvcGVydHkiKSkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRocm93
U2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJs
eVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2Vi
QXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLCBpbml0aWFsLCBtYXhpbXVtKSk7CiB9CiAKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5VGFibGUoRXhl
Y1N0YXRlKiBzdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDk3
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAi
RnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIK
IAogI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmgiCiAKQEAgLTQyLDEw
ICs0NCwxMTIgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cAogIEBl
bmQKICAqLwogCi1XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKiBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNXZWJBc3NlbWJseVRhYmxlKiBnZXRUYWJsZShF
eGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSB2KQoreworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogcmVz
dWx0ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPih2KTsKKyAgICBpZiAoIXJl
c3VsdCkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCAKKyAgICAg
ICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImV4cGVjdGVkIHx0aGlz
fCB2YWx1ZSB0byBiZSBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNMZW5ndGgo
RXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFi
bGVQcm90b0Z1bmNHcm93KEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSop
OworCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1
bmNMZW5ndGgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dl
YkFzc2VtYmx5VGFibGUqIHRhYmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMtPnRoaXNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0YWJsZS0+c2l6ZSgpKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dyb3coRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFi
bGUqIHRhYmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICB1aW50MzJfdCBpbmRl
eCA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICBpZiAoIXRhYmxlLT5ncm93
KGluZGV4KSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAg
ICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHku
VGFibGUucHJvdG90eXBlLmdyb3cgY291bGQgbm90IGdyb3cgdGhlIHRhYmxlIikpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5
VGFibGVQcm90b0Z1bmNHZXQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMt
PnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CisKKyAgICB1aW50MzJfdCBpbmRleCA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
KyAgICBpZiAoaW5kZXggPj0gdGFibGUtPnNpemUoKSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5nZXQgZXhwZWN0cyBhbiBp
bnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgdGFibGUiKSkpOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiByZXN1bHQgPSB0
YWJsZS0+Z2V0RnVuY3Rpb24oaW5kZXgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldChF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTV2ViQXNzZW1ibHlU
YWJsZSogdGFibGUgPSBnZXRUYWJsZShleGVjLCB2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKworICAgIEpTVmFsdWUgdmFs
dWUgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlv
biA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZhbHVlKTsKKyAgICBpZiAo
IXZhbHVlLmlzTnVsbCgpICYmICFmdW5jdGlvbikgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLnNldCBleHBlY3RzIHRoZSBzZWNv
bmQgYXJndW1lbnQgdG8gYmUgbnVsbCBvciBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5GdW5j
dGlvbiIpKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgdWludDMyX3QgaW5k
ZXggPSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICBpZiAoaW5kZXggPj0g
dGFibGUtPnNpemUoKSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LAorICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFz
c2VtYmx5LlRhYmxlLnByb3RvdHlwZS5zZXQgZXhwZWN0cyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiB0
aGUgc2l6ZSBvZiB0aGUgdGFibGUiKSkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIGlmICh2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgdGFibGUtPmNsZWFyRnVuY3Rpb24oaW5k
ZXgpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoISFmdW5jdGlvbik7CisgICAgICAgIHRh
YmxlLT5zZXRGdW5jdGlvbih2bSwgaW5kZXgsIGZ1bmN0aW9uKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworV2ViQXNzZW1ibHlU
YWJsZVByb3RvdHlwZSogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAg
ICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlU
YWJsZVByb3RvdHlwZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUodm0sIHN0
cnVjdHVyZSk7Ci0gICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgb2JqZWN0LT5m
aW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gb2JqZWN0OwogfQog
CkBAIC01NCw5ICsxNTgsMTQgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBl
OjpjcgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0K
IAotdm9pZCBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
Cit2b2lkIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CisKKyAgICBKU0NfTkFUSVZFX0dFVFRFUigibGVuZ3RoIiwgd2ViQXNzZW1ibHlUYWJs
ZVByb3RvRnVuY0xlbmd0aCwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgSlNDX05BVElWRV9G
VU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oImdyb3ciLCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9G
dW5jR3JvdywgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9U
UkFOU0lUSU9OKCJnZXQiLCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0LCBEb250RW51bSwg
MSk7CisgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oInNldCIsIHdl
YkFzc2VtYmx5VGFibGVQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKIH0KIAogV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZTo6V2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaAkocmV2aXNpb24gMjA5NzY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3Rv
dHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICBERUNM
QVJFX0lORk87CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CiAKIHByaXZhdGU6
CiAgICAgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>