<?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>162693</bug_id>
          
          <creation_ts>2016-09-28 11:21:11 -0700</creation_ts>
          <short_desc>WASM should support faster loads.</short_desc>
          <delta_ts>2017-03-07 10:45:05 -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>
          <dependson>162689</dependson>
          <blocked>159775</blocked>
    
    <blocked>164032</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1234456</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-09-28 11:21:11 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281525</commentid>
    <comment_count>1</comment_count>
      <attachid>302873</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-27 14:24:43 -0800</bug_when>
    <thetext>Created attachment 302873
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281604</commentid>
    <comment_count>2</comment_count>
      <attachid>302888</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-27 16:33:12 -0800</bug_when>
    <thetext>Created attachment 302888
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281606</commentid>
    <comment_count>3</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-27 16:34:22 -0800</bug_when>
    <thetext>Seems to not crash when doing an invalid load. Now to fix some new failing tests and cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281887</commentid>
    <comment_count>4</comment_count>
      <attachid>302971</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-28 12:56:15 -0800</bug_when>
    <thetext>Created attachment 302971
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281889</commentid>
    <comment_count>5</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-28 12:59:01 -0800</bug_when>
    <thetext>I realized that I need to have a code block for Wasm Modules since we might need to have different blocks for different memory types. I&apos;ve already added a JSWebAssemblyCodeBlock class (no relation no the JS one, maybe I should pick a different name?) but I need to make it play nice with Wasm::Plan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282115</commentid>
    <comment_count>6</comment_count>
      <attachid>303026</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-28 18:50:17 -0800</bug_when>
    <thetext>Created attachment 303026
Compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282415</commentid>
    <comment_count>7</comment_count>
      <attachid>303107</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-01 13:15:16 -0800</bug_when>
    <thetext>Created attachment 303107
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282615</commentid>
    <comment_count>8</comment_count>
      <attachid>303172</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-01 21:08:19 -0800</bug_when>
    <thetext>Created attachment 303172
passes tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282738</commentid>
    <comment_count>9</comment_count>
      <attachid>303204</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-02 09:24:54 -0800</bug_when>
    <thetext>Created attachment 303204
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282739</commentid>
    <comment_count>10</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-02 09:25:17 -0800</bug_when>
    <thetext>I&apos;m going to test on iOS now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282740</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-02 09:27:05 -0800</bug_when>
    <thetext>Attachment 303204 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.cpp:123:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:70:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:47:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 3 in 37 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>1282754</commentid>
    <comment_count>12</comment_count>
      <attachid>303211</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-02 09:51:30 -0800</bug_when>
    <thetext>Created attachment 303211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282757</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-02 09:54:31 -0800</bug_when>
    <thetext>Attachment 303211 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.cpp:123:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:70:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:47:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 3 in 37 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>1282766</commentid>
    <comment_count>14</comment_count>
      <attachid>303214</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-02 10:01:43 -0800</bug_when>
    <thetext>Created attachment 303214
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282769</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-02 10:04:11 -0800</bug_when>
    <thetext>Attachment 303214 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.cpp:123:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:70:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:47:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 3 in 37 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>1282884</commentid>
    <comment_count>16</comment_count>
      <attachid>303214</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-02 14:21:53 -0800</bug_when>
    <thetext>Comment on attachment 303214
Patch

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

Initial pass of comments. Gonna keep reviewing.

&gt; Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp:42
&gt; +static const bool verbose = false;

Style: Why not just constexpr? Then I suspect this wouldn&apos;t need to be in an anonymous namespace.

&gt; Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp:85
&gt; +                FirstArgumentGPR = static_cast&lt;uint64_t&gt;(ExceptionType::OutOfBoundsMemoryAccess);
&gt; +                InstructionPointerGPR = reinterpret_cast&lt;uint64_t&gt;(exceptionStub.code().executableAddress());

Style: These feel like they should be functions, and the function can handle the various platforms as needed.

&gt; Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp:91
&gt; +    sigaction(signal, &amp;oldSigBusHandler, nullptr);

It might be worth a comment here, saying, we only use fastMemory in processes we control, and we expect the old handler to crash.
Otherwise, we&apos;d need a way to re-install the Wasm handler if we think there is any way old handler would recover from the SIGBUS.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:59
&gt; +// We use this as a heuristic to guess mode a memory import will be. Most of the time we expect users to

&quot;guess mode&quot; =&gt; &quot;guess what mode&quot;
Also, maybe you can open a bug to consider alternatives to this? And to test out various programs to see how they behave?

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:66
&gt; +Memory::Mode Memory::lastAllocatedMode()
&gt;  {
&gt; -    switch (mode) {
&gt; -    case Mode::BoundsChecking: return &quot;BoundsChecking&quot;;
&gt; +    return lastAllocatedMemoryMode;
&gt; +}

I don&apos;t think this will work because it&apos;s racy inside the process.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:68
&gt; +static_assert(sizeof(uint64_t) == sizeof(size_t), &quot;We rely on allowing the maximum size of Memory we map to be 2^33 which is larger than fits in a 32-bit integer that we&apos;d pass to mprotect if this didn&apos;t hold.&quot;);

Nit: It&apos;s not quite 2^33, it&apos;s 2^33 - 2

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:70
&gt; +static const size_t fastMemoryMappedBytes = static_cast&lt;size_t&gt;(std::numeric_limits&lt;uint32_t&gt;::max()) * 2; // pointer max + offset max. This is all we need since a load straddling readable memory will trap.

Nit: I think this could use some explaining:
The largest possible pointer is UINT32_MAX, the largest possible offset is also UINT32_MAX, therefore, the largest possible base of a load is UINT32_MAX + UINT32_MAX

Stated this way, I wonder if your size needs +1 to it?

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:77
&gt; +inline Deque&lt;void*, maxFastMemories&gt;&amp; availableFastMemories()
&gt; +{
&gt; +    static NeverDestroyed&lt;Deque&lt;void*, maxFastMemories&gt;&gt; availableFastMemories;
&gt; +    return availableFastMemories;
&gt; +}

You need a lock protecting accesses to this, given that it&apos;s per process.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:134
&gt; +    // We need to mprotect PROT_NONE all the existing memory. If we can&apos;t, for
&gt; +    // whatever reason, we should bail out and get rid of this memory.
&gt; +    if (mprotect(memory, writableSize, PROT_NONE))
&gt; +        return;

This should probably crash IMO

&gt; Source/JavaScriptCore/wasm/WasmMemoryInformation.cpp:91
&gt; +        m_mode = Memory::lastAllocatedMode();

See earlier comment about this being racy and wrong. Why not just get this off the created memory if there is one? Or take a racy guess if you didn&apos;t create the memory

&gt; Source/JavaScriptCore/wasm/WasmMemoryInformation.h:70
&gt; +    // This is a unique_ptr so we can pass ModuleInformation as const and still be
&gt; +    // able to take ownership of this.

It&apos;s not a unique_ptr. Please remove comment.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:67
&gt; +    // We can&apos;t use a ref here since it doesn&apos;t have a copy constructor...

See below, I think you can delete this.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:68
&gt; +    RefPtr&lt;Wasm::Memory&gt; memoryRefPtr = &amp;m_memory.get();

I think webkit style is to call this protectedMemory or something similar.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:69
&gt; +    auto destructor = [memoryRefPtr] (void*) { };

I think you can make the above a Ref, and then declare this lambda like:

auto destructor = [memoryProtector = WTFMove(memoryProtector)] (void*) { };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282996</commentid>
    <comment_count>17</comment_count>
      <attachid>303273</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-02 17:24:04 -0800</bug_when>
    <thetext>Created attachment 303273
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282998</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-02 17:26:59 -0800</bug_when>
    <thetext>Attachment 303273 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.cpp:123:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:70:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:47:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 3 in 37 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>1283197</commentid>
    <comment_count>19</comment_count>
      <attachid>303273</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-03 11:09:59 -0800</bug_when>
    <thetext>Comment on attachment 303273
Patch

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

r=me
I think I found one actual bug. I have some misc suggestions, and some requests for tests. Comments below.

&gt; Source/WTF/ChangeLog:17
&gt; +        Also, add a operator! to Ref has the same semantics as C++ refs.

&quot;Ref has&quot; =&gt; &quot;Ref that has&quot;

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:498
&gt; +    auto makeKind = [&amp;] (B3::Opcode opcode) -&gt; B3::Kind {
&gt; +        if (m_info.memory.mode() == Memory::Signaling)
&gt; +            return trapping(opcode);
&gt; +        return opcode;
&gt; +    };

Nit: This is identical to the lambda inside emitStoreOp. You could make it a member function on B3IRGenerator to remove the duplicate code.

&gt; Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp:77
&gt; +            if (start &lt;= faultingInstruction &amp;&amp; faultingInstruction &lt;= end) {

Should not be &lt;= end. I think it should be &lt;, right?

&gt; Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp:82
&gt; +                MacroAssemblerCodeRef exceptionStub = vm-&gt;jitStubs-&gt;existingCTIStub(throwExceptionFromWasmThunkGenerator);
&gt; +                // If for whatever reason we don&apos;t have a stub then we should just treat this like a regular crash.
&gt; +                if (!exceptionStub.size())
&gt; +                    break;

This seems like it should go outside the loop.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:70
&gt; +static const size_t fastMemoryMappedBytes = (static_cast&lt;size_t&gt;(std::numeric_limits&lt;uint32_t&gt;::max()) + 1) * 2; // pointer max + offset max. This is all we need since a load straddling readable memory will trap.

Nit: I think this should be:
UINT32_MAX*2 + 1, not (UINT32_MAX + 1)*2

Also, please add some tests for this. It&apos;d be nice to test loads at the largest possible (pointer+offset) combination.
Can you also test loads that straddle the mapped PROT_READ/WRITE region?

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:89
&gt; +    if (!vm.getCTIStub(throwExceptionFromWasmThunkGenerator).size())

Style nit: size seems like a weird condition here. Why not just use ! on the actual MacroAssemblerCodeRef itself?

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:260
&gt; +        if (mprotect(static_cast&lt;uint8_t*&gt;(m_memory) + m_size, static_cast&lt;size_t&gt;(desiredSize - m_size), PROT_READ | PROT_WRITE)) {
&gt; +            dataLogLnIf(verbose, &quot;Memory::grow in-place failed &quot;, *this);
&gt; +            return false;
&gt; +        }

I think this should be a crash.

&gt; Source/JavaScriptCore/wasm/WasmMemoryInformation.cpp:94
&gt; +        if (!isImport) {
&gt; +            m_reservedMemory = Memory::create(vm, initial, maximum, Memory::Signaling);
&gt; +            if (m_reservedMemory) {
&gt; +                ASSERT(!!*m_reservedMemory);
&gt; +                m_mode = m_reservedMemory-&gt;mode();
&gt; +            }
&gt; +        }
&gt; +        m_mode = Memory::lastAllocatedMode();

This is still a bit wrong. The if (m_reservedMemory) branch should not drop into the ::lastAllocatedMode() assignment.

&gt; Source/JavaScriptCore/wasm/WasmMemoryInformation.h:62
&gt; +    Memory&amp; takeReservedMemory() { ASSERT(hasReservedMemory()); return *m_reservedMemory.leakRef(); }

Style suggestion:
Currently, this is used in only one place, and it correctly handles the leakRef adoptRef semantics, but I think it&apos;d be more clear if this function just returned a Ref&lt;Memory&gt;&amp;&amp;, and then the caller could not get it wrong.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:67
&gt; +    // We can&apos;t use a ref here since it doesn&apos;t have a copy constructor...

Remove comment.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.cpp:97
&gt; +    // We don&apos;t have a code block for this mode, we need to recompile...

Do you have a test for this?
If not, please add.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.cpp:101
&gt; +    auto* codeBlock = buildCodeBlock(vm, exec, plan, mode);
&gt; +    RETURN_IF_EXCEPTION(scope, nullptr);

It would be good to have a test for this. Is it possible to have that happen deterministically?

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:272
&gt; +

Style: Remove newline.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleConstructor.cpp:83
&gt; +    return JSWebAssemblyModule::create(vm, state, structure, base + byteOffset, byteSize);

You need a scope.release() before this call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283237</commentid>
    <comment_count>20</comment_count>
      <attachid>303273</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-03 13:42:54 -0800</bug_when>
    <thetext>Comment on attachment 303273
Patch

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

&gt;&gt; Source/WTF/ChangeLog:17
&gt;&gt; +        Also, add a operator! to Ref has the same semantics as C++ refs.
&gt; 
&gt; &quot;Ref has&quot; =&gt; &quot;Ref that has&quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:498
&gt;&gt; +    };
&gt; 
&gt; Nit: This is identical to the lambda inside emitStoreOp. You could make it a member function on B3IRGenerator to remove the duplicate code.

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp:77
&gt;&gt; +            if (start &lt;= faultingInstruction &amp;&amp; faultingInstruction &lt;= end) {
&gt; 
&gt; Should not be &lt;= end. I think it should be &lt;, right?

fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp:82
&gt;&gt; +                    break;
&gt; 
&gt; This seems like it should go outside the loop.

We need to have the vm, which we get from the set.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:70
&gt;&gt; +static const size_t fastMemoryMappedBytes = (static_cast&lt;size_t&gt;(std::numeric_limits&lt;uint32_t&gt;::max()) + 1) * 2; // pointer max + offset max. This is all we need since a load straddling readable memory will trap.
&gt; 
&gt; Nit: I think this should be:
&gt; UINT32_MAX*2 + 1, not (UINT32_MAX + 1)*2
&gt; 
&gt; Also, please add some tests for this. It&apos;d be nice to test loads at the largest possible (pointer+offset) combination.
&gt; Can you also test loads that straddle the mapped PROT_READ/WRITE region?

Changed for simplicity.

Those tests already existed from before, when we did the bounds checking the first time. Although, I&apos;ll add a test for the UINT32_MAX*2 + 1 case.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:89
&gt;&gt; +    if (!vm.getCTIStub(throwExceptionFromWasmThunkGenerator).size())
&gt; 
&gt; Style nit: size seems like a weird condition here. Why not just use ! on the actual MacroAssemblerCodeRef itself?

Oh, I missed there was a operator! on MacroAssemblerCodeRef. Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:260
&gt;&gt; +        }
&gt; 
&gt; I think this should be a crash.

I don&apos;t think so since we might have just run out of physical memory on the device, even though we were able to reserve the virtual address space before.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemoryInformation.cpp:94
&gt;&gt; +        m_mode = Memory::lastAllocatedMode();
&gt; 
&gt; This is still a bit wrong. The if (m_reservedMemory) branch should not drop into the ::lastAllocatedMode() assignment.

whoops, fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemoryInformation.h:62
&gt;&gt; +    Memory&amp; takeReservedMemory() { ASSERT(hasReservedMemory()); return *m_reservedMemory.leakRef(); }
&gt; 
&gt; Style suggestion:
&gt; Currently, this is used in only one place, and it correctly handles the leakRef adoptRef semantics, but I think it&apos;d be more clear if this function just returned a Ref&lt;Memory&gt;&amp;&amp;, and then the caller could not get it wrong.

changed.

&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.cpp:97
&gt;&gt; +    // We don&apos;t have a code block for this mode, we need to recompile...
&gt; 
&gt; Do you have a test for this?
&gt; If not, please add.

This just happens in some of the tests.

&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.cpp:101
&gt;&gt; +    RETURN_IF_EXCEPTION(scope, nullptr);
&gt; 
&gt; It would be good to have a test for this. Is it possible to have that happen deterministically?

I don&apos;t know if there is a way to do that now.

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:272
&gt;&gt; +
&gt; 
&gt; Style: Remove newline.

fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283238</commentid>
    <comment_count>21</comment_count>
      <attachid>303337</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-03 13:43:15 -0800</bug_when>
    <thetext>Created attachment 303337
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283259</commentid>
    <comment_count>22</comment_count>
      <attachid>303337</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-03 14:23:16 -0800</bug_when>
    <thetext>Comment on attachment 303337
Patch for landing

Clearing flags on attachment: 303337

Committed r213386: &lt;http://trac.webkit.org/changeset/213386&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283260</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-03 14:23:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283691</commentid>
    <comment_count>24</comment_count>
      <attachid>303337</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-05 22:21:55 -0800</bug_when>
    <thetext>Comment on attachment 303337
Patch for landing

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

&gt; Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp:77
&gt; +            if (start &lt;= faultingInstruction &amp;&amp; faultingInstruction &lt; end) {

Keith, would it also make sense to make sure that the faulting address is in range of one of the fast memories we allocated? Seems like it&apos;d be easy enough to keep a list of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283692</commentid>
    <comment_count>25</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-05 22:24:03 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; Comment on attachment 303337 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=303337&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp:77
&gt; &gt; +            if (start &lt;= faultingInstruction &amp;&amp; faultingInstruction &lt; end) {
&gt; 
&gt; Keith, would it also make sense to make sure that the faulting address is in
&gt; range of one of the fast memories we allocated? Seems like it&apos;d be easy
&gt; enough to keep a list of them.

Yeah, we can do that too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284404</commentid>
    <comment_count>26</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-07 10:45:05 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; Comment on attachment 303337 [details]
&gt; &gt; Patch for landing
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=303337&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp:77
&gt; &gt; &gt; +            if (start &lt;= faultingInstruction &amp;&amp; faultingInstruction &lt; end) {
&gt; &gt; 
&gt; &gt; Keith, would it also make sense to make sure that the faulting address is in
&gt; &gt; range of one of the fast memories we allocated? Seems like it&apos;d be easy
&gt; &gt; enough to keep a list of them.
&gt; 
&gt; Yeah, we can do that too.

I filed:
https://bugs.webkit.org/show_bug.cgi?id=169290</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302873</attachid>
            <date>2017-02-27 14:24:43 -0800</date>
            <delta_ts>2017-02-27 16:33:09 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-162693-20170227142148.patch</filename>
            <type>text/plain</type>
            <size>39522</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ODFlYWQzNTM4YmU0Yjc0YzA1ZjlmMDU4Y2UzYTRiNTcyNjgxYTU2Li4zNDRlMmI3ZmExOGRkZGYx
ZGYyNjQ4MWRlYzM0YjhmMzQ1Y2EyNjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAxNy0wMi0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBXQVNNIHNob3VsZCBzdXBwb3J0IGZhc3RlciBsb2Fkcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIpOgorICAgICAgICAq
IGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoanNjbWFpbik6
CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQ
cmVwYXJlUG9pbnRlcik6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmltcG9ydEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbjo6aGFzTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dh
c21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1tYXBCeXRlcyk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjphdmFpbGFibGVGYXN0TWVtb3JpZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
ZW1vcnk6OnRyeUdldEZhc3RNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OnJl
bGVhc2VGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6On5NZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Omdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmR1bXApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1ha2VTdHJpbmcpOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6TWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlv
bi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZv
cm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnJlc2VydmVkTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Om1vZGUpOgorICAgICAgICAq
IHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6
CisgICAgICAgICogd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZWdpc3Rl
ckNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp1bnJlZ2lzdGVyQ29kZSk6CisgICAgICAgIChK
U0M6Oldhc206OmZhc3RNZW1vcnlFbmFibGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5hYmxl
RmFzdE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxl
ZS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJs
eU1lbW9yeSk6CisKIDIwMTctMDItMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHN0ZDo6dHVwbGVzIGFz
IGtleXMgaW4gSGFzaE1hcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjMTIzYjA2
YWZkOTVhOTk2YzdlYjczYzlhN2U1Y2FjYjFkZWM0ZTJlLi5iMWJhN2IwZjRjYWMwYmRkYTliOTgz
MWRiY2QyZTE5Njc2MmRkOWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMy
MCw2ICsxMzIwLDggQEAKIAkJNTM1NTU3MTYxRDlERkEzMjAwNkQ1ODNCIC8qIFdhc21NZW1vcnku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1NTU3
MTUxRDlERkEzMjAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuY3BwICovOyB9OwogCQk1MzcwQjRGNTFC
RjI2MjAyMDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzcwQjRGMzFCRjI1RUEyMDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50QmFzZS5jcHAgKi87IH07CiAJCTUzNzBCNEY2MUJGMjYyMDUwMDVDNDBGQyAvKiBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzcwQjRGNDFCRjI1RUEyMDA1QzQw
RkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oICovOyB9
OworCQk1MzgxQjkzNzFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbVRyYXBTaWduYWxIYW5kbGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODFCOTM2
MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtVHJhcFNpZ25hbEhhbmRsZXIuY3BwICovOyB9OworCQk1
MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbVRyYXBTaWduYWxIYW5kbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzgxQjkzODFFNjBFOTdE
MDA5MEY3OTQgLyogV2FzbVRyYXBTaWduYWxIYW5kbGVyLmggKi87IH07CiAJCTUzOTE3RTdCMUI3
OTA2RkEwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5MTdF
N0ExQjc5MDZFNDAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVu
Y3Rpb25zLmggKi87IH07CiAJCTUzOUZCOEJBMUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5
RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi87IH07CiAJCTUzQjBC
RTM0MUU1NjFBQzkwMEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQjBCRTMzMUU1NjFBQzkw
MEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLzsgfTsKQEAgLTM3NzYsNiAr
Mzc3OCw4IEBACiAJCTUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21NZW1vcnkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzcwQjRGMzFCRjI1RUEyMDA1QzQwRkMgLyogQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM3MEI0RjQx
QkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzgxQjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbVRyYXBTaWduYWxIYW5kbGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UcmFwU2lnbmFsSGFu
ZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzODFCOTM4MUU2MEU5N0Qw
MDkwRjc5NCAvKiBXYXNtVHJhcFNpZ25hbEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbVRyYXBTaWduYWxIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzOTE3RTdBMUI3OTA2RTQwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
OTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJvdG90eXBlLmpzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRBcnJheVByb3RvdHlwZS5qczsg
cGF0aCA9IGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSBTT1VS
Q0VfUk9PVDsgfTsKQEAgLTYyMDEsNiArNjIwNSw4IEBACiAJCQkJNTNGNDBFOTYxRDVBN0JFQzAw
OTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTUzRjQwRTk0MUQ1QTdBRUYw
MDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi8sCiAJCQkJQURCNkY2N0MxRTE1RDc1MDAw
ODJGMzg0IC8qIFdhc21QYWdlQ291bnQuY3BwICovLAorCQkJCTUzODFCOTM2MUU2MEU5NjYwMDkw
Rjc5NCAvKiBXYXNtVHJhcFNpZ25hbEhhbmRsZXIuY3BwICovLAorCQkJCTUzODFCOTM4MUU2MEU5
N0QwMDkwRjc5NCAvKiBXYXNtVHJhcFNpZ25hbEhhbmRsZXIuaCAqLywKIAkJCQk3OUI3NTk3MzFE
RkE0QzYwMDA1MjE3NEMgLyogV2FzbVBhZ2VDb3VudC5oICovLAogCQkJCTUzRjQwRThDMUQ1OTAx
RjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCiAJCQkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3
QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKQEAgLTgyNDYsNiArODI1Miw3IEBACiAJCQkJQTdEODlD
RjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkMzQ0NGQzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzODFCOTM5MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNt
VHJhcFNpZ25hbEhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZFMTlBREE0MTAw
MDZBQzcyQSAvKiBERkdCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRjE1OEQxOUI3
QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwMzYsNiArMTAwNDMsNyBAQAogCQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3
RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkw
NTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzQkQxQjcxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzgxQjkzNzFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbVRy
YXBTaWduYWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzAwQjdCMThBQjFCMTQw
MEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjg5OEYzMTFCMjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1p
emF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDOTdGM0QxODIwMjExOTAwMkM5
QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKaW5kZXggZGU0OGU2MmRk
YWI4ZWZhZjhiZTMxODI4NzFiZThkNzA5OWIxN2M3Zi4uNTQ2ZTE0YzkwNDhlOGQzMzhhNTgyNjQ3
Y2Y3Y2FkZjlkZDM0MWNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNw
cApAQCAtODIsNiArODIsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3Rp
U3R1YihWTSogdm0sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKICAgICByZXR1cm4gZW50cnku
aXRlcmF0b3ItPnZhbHVlOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpl
eGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ1RJU3R1Yk1hcDo6aXRlcmF0b3IgZW50cnkgPSBtX2N0
aVN0dWJNYXAuZmluZChnZW5lcmF0b3IpOworICAgIGlmIChlbnRyeSA9PSBtX2N0aVN0dWJNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICByZXR1
cm4gZW50cnktPnZhbHVlOworfQorCiB2b2lkIEpJVFRodW5rczo6ZmluYWxpemUoSGFuZGxlPFVu
a25vd24+IGhhbmRsZSwgdm9pZCopCiB7CiAgICAgYXV0byogbmF0aXZlRXhlY3V0YWJsZSA9IHN0
YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKaW5kZXggYWRkY2YyMzBjMzQ1ZDQyNzFiNjM3
ZjA4Yjk0YzQxNmEzZWQxODJhNC4uN2UwNmU3MTYyMzUzYTBiNzNmM2JjMDJlNTQyZjczYjgyZjY2
ZTEwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCkBAIC01OCw2ICs1OCw3
IEBAIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlVGFpbENhbGxX
aXRob3V0U2F2ZWRUYWdzKFZNKik7ICAgIAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGN0
aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4
aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvcik7CiAKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBo
b3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0
cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RG
dW5jdGlvblN0dWIoVk0qLCBOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0
b3IsIFRodW5rR2VuZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggYWVkZjQyZTE3Y2My
YmRlMDE0YWQ1YjhkNjI4NjIyYWVjMTQ1ZTdlMi4uOTQ2Y2RjMDMzMzk0OWRhYWM5YmViOTViOTY0
YTk3NTVmZmE0NWRlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTczLDYgKzczLDcgQEAKICNp
bmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1
ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtVHJhcFNpZ25hbEhhbmRsZXIuaCIKICNp
bmNsdWRlIDxsb2NhbGUuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4K
QEAgLTM3NjYsNiArMzc2Nyw3IEBAIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
ICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgSlNDOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7CiAgICAgc3RhcnRUaW1lb3V0VGhyZWFkSWZOZWVkZWQoKTsKKyAgICBKU0M6Oldh
c206OmVuYWJsZUZhc3RNZW1vcnkoKTsKIAogICAgIGludCByZXN1bHQ7CiAgICAgcmVzdWx0ID0g
cnVuSlNDKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGM0YmY4
ZmFkZThhYWUzMTBmMmI2YTI3NzExMzFiYmVkYTIxYjJjYmMuLjIzOTkzODUzYTA2NTNkYTNlM2Qz
MzcwNGRjYjE2MWNlOTllNjRjYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgKQEAgLTQyNiw2ICs0MjYsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmlu
ZzsKICAgICBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseSwgdHJ1ZSwgTm9ybWFsLCAiRXhw
b3NlIHRoZSBXZWJBc3NlbWJseSBnbG9iYWwgb2JqZWN0LiIpIFwKICAgICB2KGJvb2wsIHNpbXVs
YXRlV2ViQXNzZW1ibHlMb3dNZW1vcnksIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgTWVt
b3J5IG9iamVjdCB3b24ndCBtbWFwIHRoZSBmdWxsICdtYXhpbXVtJyByYW5nZSBhbmQgaW5zdGVh
ZCB3aWxsIGFsbG9jYXRlIHRoZSBtaW5pbXVtIHJlcXVpcmVkIGFtb3VudC4iKSBcCisgICAgdihi
b29sLCB1c2VXZWJBc3NlbWJseU1lbW9yeU1vZGVGdXp6LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1
ZSwgdGhlIE1lbW9yeSBvYmplY3Qgd2lsbCBmdXp6IGVhY2ggbW1hcC4iKQogCiBlbnVtIE9wdGlv
bkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDJmZjMwNTAxZjY2ZjFhY2RhZjVk
ZDhmNzhmNWE1MjI5ZWFlYjhiOTEuLmIyNTcwOGY3NzE3MzhjOGIxNDBkMzMxNjc5YWIxZTJlYTZj
OTMyODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAKQEAgLTI1OSw3ICsyNTksNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9y
KFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcAogICAg
IGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyYgcmVnSW5mbyA6IHBpbm5lZFJlZ3Mu
c2l6ZVJlZ2lzdGVycykKICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJl
Z2lzdGVyKTsKIAotICAgIGlmIChpbmZvLmhhc01lbW9yeSgpKSB7CisgICAgaWYgKGluZm8ubWVt
b3J5KSB7CiAgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQpIHsKICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQocGlubmVkR1BSLCBtX21lbW9yeVNpemVHUFIgPT0gcGlu
bmVkR1BSKTsKQEAgLTQ1NCw5ICs0NTQsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9i
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIAog
aW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9w
ZXJhdGlvbikKIHsKLSAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSICYmIG1fbWVtb3J5U2l6ZUdQ
Uik7Ci0gICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7Ci0gICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBP
cmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlTaXplR1BSLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZz
ZXQgLSAxKTsKKyAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSKTsKKyAgICBpZiAobV9pbmZvLm1l
bW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZykgeworICAgICAgICBB
U1NFUlQobV9tZW1vcnlTaXplR1BSKTsKKyAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiAr
IG9mZnNldCA+IG9mZnNldCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2Fz
bUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6
ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgfQogICAgIHBvaW50ZXIg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgT3JpZ2lu
KCksIHBvaW50ZXIpOwogICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21B
ZGRyZXNzVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5QmFzZUdQUik7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVu
dGlvbi5oCmluZGV4IGQ3OTAxNGYyN2ZhZjkwOTY4ZjIxZjVmOWI0ZDdiOGNjNzgxMDM5ZTMuLmU2
MDRhYjJkNDcwOTBhN2U5NDMxOWExMmNiODcxZTRlNzQzNzI3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCkBAIC00MCw2ICs0
MCw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0Lmgi
CiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5oCmluZGV4IGRjNjM0NzQ0MjJiZmU2MDMzZDhiMmQyMjFiYjdlYzVjMTEw
NTY4NjIuLjFmYzU3NGU5M2Q3MjQ3YzY0YThmYTMzNGY2MjI1ZDJjNzI3MWY2NDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTI1Niw3ICsyNTYsNiBAQCBzdHJ1
Y3QgTW9kdWxlSW5mb3JtYXRpb24gewogICAgIH0KIAogICAgIHVpbnQzMl90IGltcG9ydEZ1bmN0
aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
c2l6ZSgpOyB9Ci0gICAgYm9vbCBoYXNNZW1vcnkoKSBjb25zdCB7IHJldHVybiAhIW1lbW9yeTsg
fQogCiAgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCBhYWQ5MWMxM2UzYTMwMTY4MzhmYjAzODRkYWI1YTQy
YjQ3NzQzZDI4Li5iYmFhZWVlZjU0YWJjOTAyZjkxNmViNTBlYjE0Y2UwNWFkZDIxNDYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApAQCAtMjgsOSArMjgsMTMg
QEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIldhc21UcmFwU2lnbmFs
SGFuZGxlci5oIgorCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8
d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtMzgsMzEgKzQyLDk2IEBAIG5h
bWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotdm9pZCBNZW1vcnk6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK2lubGluZSBib29sIE1lbW9yeTo6bW1hcEJ5
dGVzKHNpemVfdCBieXRlcykKIHsKLSAgICBTdHJpbmcgbWVtb3J5SGV4OwotICAgIFdURjo6YXBw
ZW5kVW5zaWduZWQ2NEFzSGV4KCh1aW50NjRfdCkodWludHB0cl90KW1fbWVtb3J5LCBtZW1vcnlI
ZXgpOwotICAgIG91dC5wcmludCgiTWVtb3J5IGF0IDB4IiwgbWVtb3J5SGV4LCAiLCBzaXplICIs
IG1fc2l6ZSwgIkIgY2FwYWNpdHkgIiwgbV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwg
bV9pbml0aWFsLCAiIG1heGltdW0gIiwgbV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyht
X21vZGUpKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiQXR0ZW1wdGluZyB0
byBtbWFwICIsIGJ5dGVzLCAiIGJ5dGVzOiAiKTsKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUg
bmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCisgICAgdm9pZCogcmVzdWx0ID0gbW1hcChu
dWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7
CisgICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCJzdWNjZWVkZWQiKTsK
KyAgICBtX21lbW9yeSA9IHJlc3VsdDsKKyAgICBtX21hcHBlZENhcGFjaXR5ID0gYnl0ZXM7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWNvbnN0IGNoYXIqIE1lbW9yeTo6bWFrZVN0cmluZyhNb2Rl
IG1vZGUpIGNvbnN0CisvLyBXZSB1c2UgdGhpcyBhcyBhIGhldXJpc3RpYyB0byBndWVzcyB3aGlj
aCBtb2RlIHdlIHNob3VsZCBhc3N1bWUgd2UgYXJlIGdvaW5nIHRvIGdldCB3aGVuIGEgbW9kdWxl
IGltcG9ydHMgYSBtZW1vcnkuCitzdGF0aWMgTWVtb3J5OjpNb2RlIGxhc3RBbGxvY2F0ZWRNZW1v
cnlNb2RlIHsgTWVtb3J5OjpNb2RlOjpTaWduYWxpbmcgfTsKKworTWVtb3J5OjpNb2RlIE1lbW9y
eTo6bGFzdEFsbG9jYXRlZE1vZGUoKQogewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2Ug
TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOworICAgIHJldHVy
biBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZTsKK30KKworc3RhdGljX2Fzc2VydChzaXplb2YodWlu
dDY0X3QpID09IHNpemVvZihzaXplX3QpLCAiV2UgcmVseSBvbiBhbGxvd2luZyB0aGUgbWF4aW11
bSBzaXplIG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUgMl4zMyB3aGljaCBpcyBsYXJnZXIgdGhhbiBm
aXRzIGluIGEgMzItYml0IGludGVnZXIgdGhhdCB3ZSdkIHBhc3MgdG8gbXByb3RlY3QgaWYgdGhp
cyBkaWRuJ3QgaG9sZC4iKTsKKworc3RhdGljIGNvbnN0IHNpemVfdCBmYXN0TWVtb3J5TWFwcGVk
Qnl0ZXMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkgKiAyOyAvLyBwb2lu
dGVyIG1heCArIG9mZnNldCBtYXguIFRoaXMgaXMgYWxsIHdlIG5lZWQgc2luY2UgYSBsb2FkIHN0
cmFkZGxpbmcgcmVhZGFibGUgbWVtb3J5IHdpbGwgdHJhcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtYXhGYXN0TWVtb3JpZXMgPSA0Oworc3RhdGljIHVuc2lnbmVkIGFsbG9jYXRlZEZhc3RNZW1v
cmllcyB7IDAgfTsKK2lubGluZSBEZXF1ZTx2b2lkKiwgbWF4RmFzdE1lbW9yaWVzPiYgYXZhaWxh
YmxlRmFzdE1lbW9yaWVzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGVxdWU8dm9p
ZCosIG1heEZhc3RNZW1vcmllcz4+IGF2YWlsYWJsZUZhc3RNZW1vcmllczsKKyAgICByZXR1cm4g
YXZhaWxhYmxlRmFzdE1lbW9yaWVzOworfQorCitib29sIE1lbW9yeTo6dHJ5R2V0RmFzdE1lbW9y
eShWTSYgdm0pCit7CisgICAgLy8gV2UgbWlnaHQgR0MgaGVyZSBzbyB3ZSBzaG91bGQgYmUgaG9s
ZGluZyB0aGUgQVBJIGxvY2suCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN5
bmNyb25vdXNseSB0cmlnZ2VyIHRoZSBHQyBmcm9tIGFub3RoZXIgdGhyZWFkLgorICAgIEFTU0VS
VCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBpZiAoIWZhc3RNZW1v
cnlFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChhbGxvY2F0
ZWRGYXN0TWVtb3JpZXMgPD0gbWF4RmFzdE1lbW9yaWVzKTsKKyAgICBpZiAoIWF2YWlsYWJsZUZh
c3RNZW1vcmllcygpLmlzRW1wdHkoKSkgeworICAgICAgICBtX21lbW9yeSA9IGF2YWlsYWJsZUZh
c3RNZW1vcmllcygpLnRha2VGaXJzdCgpOworICAgICAgICBtX21vZGUgPSBNb2RlOjpTaWduYWxp
bmc7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAiIjsKKworICAgIC8vIElmIHdlIGhhdmUgYWxsb2NhdGVk
IGFsbCB0aGUgZmFzdCBtZW1vcmllcy4uLiB0b28gYmFkLgorICAgIGlmIChhbGxvY2F0ZWRGYXN0
TWVtb3JpZXMgPT0gbWF4RmFzdE1lbW9yaWVzKSB7CisgICAgICAgIC8vIFRoZXJlIGlzIGEgcmVh
c29uYWJsZSBjaGFuY2UgdGhhdCBhbm90aGVyIG1vZHVsZSBoYXMgZGllZCBidXQgaGFzIG5vdCBi
ZWVuIGNvbGxlY3RlZCB5ZXQuIERvbid0IGxvc2UgaG9wZSB5ZXQhCisgICAgICAgIHZtLmhlYXAu
Y29sbGVjdFN5bmMoKTsKKyAgICAgICAgaWYgKCFhdmFpbGFibGVGYXN0TWVtb3JpZXMoKS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIG1fbWVtb3J5ID0gYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCku
dGFrZUZpcnN0KCk7CisgICAgICAgICAgICBtX21vZGUgPSBNb2RlOjpTaWduYWxpbmc7CisgICAg
ICAgICAgICBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9IG1fbW9kZTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAobW1hcEJ5dGVzKGZhc3RNZW1vcnlNYXBwZWRCeXRlcykpIHsKKyAgICAg
ICAgbV9tb2RlID0gTW9kZTo6U2lnbmFsaW5nOworICAgICAgICBsYXN0QWxsb2NhdGVkTWVtb3J5
TW9kZSA9IG1fbW9kZTsKKyAgICAgICAgYWxsb2NhdGVkRmFzdE1lbW9yaWVzKys7CisgICAgfQor
ICAgIHJldHVybiBtX21lbW9yeTsKIH0KIAotc3RhdGljX2Fzc2VydChzaXplb2YodWludDY0X3Qp
ID09IHNpemVvZihzaXplX3QpLCAiV2UgcmVseSBvbiBhbGxvd2luZyB0aGUgbWF4aW11bSBzaXpl
IG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUgMl4zMiB3aGljaCBpcyBsYXJnZXIgdGhhbiBmaXRzIGlu
IGEgMzItYml0IGludGVnZXIgdGhhdCB3ZSdkIHBhc3MgdG8gbXByb3RlY3QgaWYgdGhpcyBkaWRu
J3QgaG9sZC4iKTsKK3ZvaWQgTWVtb3J5OjpyZWxlYXNlRmFzdE1lbW9yeSgpCit7CisgICAgaWYg
KG1vZGUoKSAhPSBNb2RlOjpTaWduYWxpbmcpCisgICAgICAgIHJldHVybjsKIAotTWVtb3J5OjpN
ZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQp
CisgICAgUkVMRUFTRV9BU1NFUlQobV9tZW1vcnkgJiYgbV9tYXBwZWRDYXBhY2l0eSA9PSBmYXN0
TWVtb3J5TWFwcGVkQnl0ZXMpOworICAgIEFTU0VSVChmYXN0TWVtb3J5RW5hYmxlZCgpKTsKKwor
ICAgIEFTU0VSVChhdmFpbGFibGVGYXN0TWVtb3JpZXMoKS5zaXplKCkgPCBhbGxvY2F0ZWRGYXN0
TWVtb3JpZXMpOworICAgIGF2YWlsYWJsZUZhc3RNZW1vcmllcygpLmFwcGVuZChtX21lbW9yeSk7
CisgICAgbV9tZW1vcnkgPSBudWxscHRyOworfQorCitNZW1vcnk6Ok1lbW9yeShWTSYgdm0sIFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCYgZmFpbGVkKQogICAgIDog
bV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKICAgICAsIG1faW5pdGlhbChpbml0aWFsKQogICAgICwg
bV9tYXhpbXVtKG1heGltdW0pCi0gICAgLCBtX21vZGUoTW9kZTo6Qm91bmRzQ2hlY2tpbmcpCi0g
ICAgLy8gRklYTUU6IElmIHdlIGFkZCBzaWduYWwgYmFzZWQgYm91bmRzIGNoZWNraW5nIHRoZW4g
d2UgbmVlZCBleHRyYSBzcGFjZSBmb3Igb3ZlcmZsb3cgb24gbG9hZC4KLSAgICAvLyBzZWU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKIHsKICAgICBSRUxF
QVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3Vs
ZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCiAKQEAgLTcwLDE3ICsxMzksMTUgQEAgTWVt
b3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBm
YWlsZWQpCiAgICAgaWYgKCFtX21hcHBlZENhcGFjaXR5KSB7CiAgICAgICAgIC8vIFRoaXMgbWVh
bnMgd2Ugc3BlY2lmaWVkIGEgemVybyBhcyBtYXhpbXVtICh3aGljaCBtZWFucyB3ZSBhbHNvIGhh
dmUgemVybyBhcyBpbml0aWFsIHNpemUpLgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NpemUg
PT0gMCk7Ci0gICAgICAgIG1fbWVtb3J5ID0gbnVsbHB0cjsKLSAgICAgICAgbV9tYXBwZWRDYXBh
Y2l0eSA9IDA7Ci0gICAgICAgIGZhaWxlZCA9IGZhbHNlOwogICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyBub3RoaW5n
ICIsICp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBJdCB3
b3VsZCBiZSBuaWNlIGlmIHdlIGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MDAKLSAgICB2b2lkKiByZXN1bHQg
PSBPcHRpb25zOjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkgPyBNQVBfRkFJTEVEIDog
bW1hcChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwg
TUFQX0FOT04sIC0xLCAwKTsKLSAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKKyAgICBp
ZiAodHJ5R2V0RmFzdE1lbW9yeSh2bSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChPcHRp
b25zOjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkgPyB0cnVlIDogIW1tYXBCeXRlcyht
X21hcHBlZENhcGFjaXR5KSkgewogICAgICAgICAvLyBUcnkgYWdhaW4gd2l0aCBhIGRpZmZlcmVu
dCBudW1iZXIuCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJN
ZW1vcnk6Ok1lbW9yeSBtbWFwIGZhaWxlZCBvbmNlIGZvciBjYXBhY2l0eSwgdHJ5aW5nIGFnYWlu
IiwgKnRoaXMpOwpAQCAtOTMsOCArMTYwLDcgQEAgTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGlu
aXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICByZXN1bHQgPSBtbWFwKG51bGxwdHIsIG1fbWFwcGVk
Q2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwotICAg
ICAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgaWYgKCFtbWFwQnl0ZXMo
bV9tYXBwZWRDYXBhY2l0eSkpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgbW1hcCBmYWlsZWQgdHdpY2UgIiwgKnRo
aXMpOwogICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKQEAgLTEwMiwxMyArMTY4LDE3IEBAIE1l
bW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCYg
ZmFpbGVkKQogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKG1fc2l6ZSA8PSBtX21hcHBl
ZENhcGFjaXR5KTsKLSAgICB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9ICFtcHJvdGVjdChyZXN1
bHQsIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOworICAgIEFTU0VSVChtX21lbW9yeSAm
JiBtX3NpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSk7CisgICAgaWYgKG1wcm90ZWN0KG1fbWVtb3J5
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7
CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Ok1l
bW9yeSBtcHJvdGVjdCBmYWlsZWQgIiwgKnRoaXMpOworICAgICAgICByZWxlYXNlRmFzdE1lbW9y
eSgpOworICAgICAgICBpZiAobV9tZW1vcnkpCisgICAgICAgICAgICBpZiAobXVubWFwKG1fbWVt
b3J5LCBtX21hcHBlZENhcGFjaXR5KSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwogICAgIH0K
IAotICAgIG1fbWVtb3J5ID0gcmVzdWx0OworICAgIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlID0g
TW9kZTo6Qm91bmRzQ2hlY2tpbmc7CiAgICAgZmFpbGVkID0gZmFsc2U7CiAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgbW1hcCBzdWNjZWVkZWQgIiwg
KnRoaXMpOwpAQCAtMTE4LDYgKzE4OCw3IEBAIE1lbW9yeTo6fk1lbW9yeSgpCiB7CiAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5Ojp+TWVtb3J5ICIsICp0aGlzKTsK
KyAgICByZWxlYXNlRmFzdE1lbW9yeSgpOwogICAgIGlmIChtX21lbW9yeSkgewogICAgICAgICBp
ZiAobXVubWFwKG1fbWVtb3J5LCBtX21hcHBlZENhcGFjaXR5KSkKICAgICAgICAgICAgIENSQVNI
KCk7CkBAIC0xMzcsOCArMjA4LDEyIEBAIGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdT
aXplKQogICAgIHVpbnQ2NF90IGRlc2lyZWRTaXplID0gbmV3U2l6ZS5ieXRlcygpOwogCiAgICAg
aWYgKG1fbWVtb3J5ICYmIGRlc2lyZWRTaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpIHsKLSAgICAg
ICAgYm9vbCBzdWNjZXNzID0gIW1wcm90ZWN0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9y
eSkgKyBtX3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZGVzaXJlZFNpemUgLSBtX3NpemUpLCBQ
Uk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7
CisgICAgICAgIGlmIChtcHJvdGVjdChzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9tZW1vcnkpICsg
bV9zaXplLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlc2lyZWRTaXplIC0gbV9zaXplKSwgUFJPVF9S
RUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbigiTWVtb3J5Ojpncm93IGluLXBsYWNlIGZhaWxlZCAiLCAqdGhpcyk7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwogICAgICAgICBtX3NpemUg
PSBkZXNpcmVkU2l6ZTsKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9n
TG4oIk1lbW9yeTo6Z3JvdyBpbi1wbGFjZSAiLCAqdGhpcyk7CkBAIC0xNjQsNiArMjM5LDIzIEBA
IGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQogICAgIHJldHVybiB0cnVlOwog
fQogCit2b2lkIE1lbW9yeTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIFN0
cmluZyBtZW1vcnlIZXg7CisgICAgV1RGOjphcHBlbmRVbnNpZ25lZDY0QXNIZXgoKHVpbnQ2NF90
KSh1aW50cHRyX3QpbV9tZW1vcnksIG1lbW9yeUhleCk7CisgICAgb3V0LnByaW50KCJNZW1vcnkg
YXQgMHgiLCBtZW1vcnlIZXgsICIsIHNpemUgIiwgbV9zaXplLCAiQiBjYXBhY2l0eSAiLCBtX21h
cHBlZENhcGFjaXR5LCAiQiwgaW5pdGlhbCAiLCBtX2luaXRpYWwsICIgbWF4aW11bSAiLCBtX21h
eGltdW0sICIgbW9kZSAiLCBtYWtlU3RyaW5nKG1fbW9kZSkpOworfQorCitjb25zdCBjaGFyKiBN
ZW1vcnk6Om1ha2VTdHJpbmcoTW9kZSBtb2RlKSBjb25zdAoreworICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgTW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmci
OworICAgIGNhc2UgTW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogfSAvLyBuYW1lc3BhY2UgV2FzbQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5oCmluZGV4IDIzNmJmODUxMjU2NDU1YmNlOWUzMjM2ZGNjNDU4
NGM4NmMxZGNmMGMuLjYwZWZlMmQ2YTMxODZlMDYyZTE3NGFiNzRlODcxNDJkNWQyNDM0MTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAgLTI3LDcgKzI3LDcgQEAK
IAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVu
dGlvbi5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogCiBu
YW1lc3BhY2UgV1RGIHsKQEAgLTQ0LDIzICs0NCwyOCBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwogICAgIGVudW0gY2xhc3MgTW9kZSB7Ci0gICAg
ICAgIEJvdW5kc0NoZWNraW5nCisgICAgICAgIEJvdW5kc0NoZWNraW5nLAorICAgICAgICBTaWdu
YWxpbmcKICAgICB9OwogICAgIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTW9kZSkgY29uc3Q7CiAK
KyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX21lbW9yeTsg
fQorCisgICAgTWVtb3J5JiBvcGVyYXRvcj0oTWVtb3J5JiYgb3RoZXIpCisgICAgeworICAgICAg
ICAvLyBNb3ZpbmcgdHJhbnNmZXJzIG93bmVyc2hpcCBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeS4K
KyAgICAgICAgQVNTRVJUKG1fbWVtb3J5ID09IG51bGxwdHIpOworICAgICAgICBzdGQ6OnN3YXAo
KnRoaXMsIG90aGVyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIE1lbW9y
eSgpID0gZGVmYXVsdDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnkoUGFnZUNvdW50IGlu
aXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIE1lbW9yeShWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwg
Ym9vbCYgZmFpbGVkKTsKICAgICBNZW1vcnkoTWVtb3J5JiYgb3RoZXIpCi0gICAgICAgIDogbV9t
ZW1vcnkob3RoZXIubV9tZW1vcnkpCi0gICAgICAgICwgbV9zaXplKG90aGVyLm1fc2l6ZSkKLSAg
ICAgICAgLCBtX2luaXRpYWwob3RoZXIubV9pbml0aWFsKQotICAgICAgICAsIG1fbWF4aW11bShv
dGhlci5tX21heGltdW0pCi0gICAgICAgICwgbV9tYXBwZWRDYXBhY2l0eShvdGhlci5tX21hcHBl
ZENhcGFjaXR5KQotICAgICAgICAsIG1fbW9kZShvdGhlci5tX21vZGUpCiAgICAgewotICAgICAg
ICAvLyBNb3ZpbmcgdHJhbnNmZXJzIG93bmVyc2hpcCBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeS4K
LSAgICAgICAgb3RoZXIubV9tZW1vcnkgPSBudWxscHRyOworICAgICAgICAqdGhpcyA9IFdURk1v
dmUob3RoZXIpOwogICAgIH0KKwogICAgIH5NZW1vcnkoKTsKIAogICAgIHZvaWQqIG1lbW9yeSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9CkBAIC03MCwxNCArNzUsMjEgQEAgcHVibGljOgog
ICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CiAgICAg
UGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KIAorICAgIHN0
YXRpYyBNb2RlIGxhc3RBbGxvY2F0ZWRNb2RlKCk7CiAgICAgTW9kZSBtb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tb2RlOyB9CiAKICAgICBib29sIGdyb3coUGFnZUNvdW50KTsKIAogICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWVt
b3J5LCBtX21lbW9yeSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fc2l6ZSk7IH0KLSAgICAKKwogcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgTWVtb3J5SW5mb3JtYXRpb247CisgICAgYm9vbCBtbWFwQnl0
ZXMoc2l6ZV90IGJ5dGVDb3VudCk7CisKKyAgICBib29sIHRyeUdldEZhc3RNZW1vcnkoVk0mIHZt
KTsKKyAgICB2b2lkIHJlbGVhc2VGYXN0TWVtb3J5KCk7CisKICAgICB2b2lkKiBtX21lbW9yeSB7
IG51bGxwdHIgfTsKICAgICB1aW50NjRfdCBtX3NpemUgeyAwIH07CiAgICAgUGFnZUNvdW50IG1f
aW5pdGlhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnlJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
SW5mb3JtYXRpb24uY3BwCmluZGV4IDZiMDYzZDM1MTI0ZTk3YTgzYjFmMWUwODczYTQxMDdjOWYw
ZTlmZDUuLjFjMzZhZmQ5ODFkN2YwYjBkNThkZjIxODA4Y2NiNzM3ZDM3MDJkOWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNw
cApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUg
Ildhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKQEAgLTcxLDExICs3MiwyMCBAQCBQaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lz
dGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVnaQogewogfQog
Ci1NZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24oUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDb3VudCBtYXhpbXVtLCAgYm9vbCBpc0ltcG9ydCkKK01lbW9yeUluZm9ybWF0aW9uOjpN
ZW1vcnlJbmZvcm1hdGlvbihWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSwgYm9vbCBpc0ltcG9ydCkKICAgICA6IG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9t
YXhpbXVtKG1heGltdW0pCiAgICAgLCBtX2lzSW1wb3J0KGlzSW1wb3J0KQogeworICAgIGlmICgh
aXNJbXBvcnQpIHsKKyAgICAgICAgYm9vbCBmYWlsZWRUb1Jlc2VydmU7CisgICAgICAgIGF1dG8g
bWVtID0gc3RkOjptYWtlX3VuaXF1ZTxNZW1vcnk+KHZtLCBpbml0aWFsLCBtYXhpbXVtLCBmYWls
ZWRUb1Jlc2VydmUpOworICAgICAgICBpZiAoIWZhaWxlZFRvUmVzZXJ2ZSkgeworICAgICAgICAg
ICAgbV9yZXNlcnZlZE1lbW9yeSA9IFdURk1vdmUobWVtKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBtX21vZGUgPSBNZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCk7CisKICAgICBSRUxFQVNFX0FT
U0VSVCghIW1faW5pdGlhbCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWF4aW11bSB8fCBtX21h
eGltdW0gPj0gbV9pbml0aWFsKTsKICAgICBBU1NFUlQoISEqdGhpcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCmluZGV4IDZlN2Y1
MjE4OTQ3ZTAxNmI0OGZkZjYwMTlkMzY4YTU3NTdlMzg1YjcuLjVlYzgxN2I0ZTc3NDQ2Njc1NTZk
ODcyZjc1NjA4YmQ5NzIwOGE1NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIldhc21NZW1v
cnkuaCIKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC00OSwyMCArNTAsMjcgQEAgY2xhc3MgTWVtb3J5SW5mb3JtYXRpb24gewogcHVibGlj
OgogICAgIE1lbW9yeUluZm9ybWF0aW9uKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghKnRoaXMp
OworICAgICAgICBBU1NFUlQoISEqdGhpcyk7CiAgICAgfQogCi0gICAgTWVtb3J5SW5mb3JtYXRp
b24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sIGlzSW1wb3J0KTsK
KyAgICBNZW1vcnlJbmZvcm1hdGlvbihWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSwgYm9vbCBpc0ltcG9ydCk7CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhpbXVtOyB9CisgICAgYm9vbCBoYXNSZXNlcnZlZE1lbW9yeSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnkgJiYgISEqbV9yZXNlcnZlZE1lbW9yeTsgfQorICAgIE1l
bW9yeSYgcmVzZXJ2ZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiAqbV9yZXNlcnZlZE1lbW9yeTsg
fQorICAgIE1lbW9yeTo6TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAg
Ym9vbCBpc0ltcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbXBvcnQ7IH0KIAogICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1faW5pdGlhbDsgfQogCiBwcml2
YXRlOgorICAgIC8vIFRoaXMgaXMgYSB1bmlxdWVfcHRyIHNvIHdlIGNhbiBwYXNzIE1vZHVsZUlu
Zm9ybWF0aW9uIGFzIGNvbnN0IGFuZCBzdGlsbCBiZQorICAgIC8vIGFibGUgdG8gdGFrZSBvd25l
cnNoaXAgb2YgdGhpcy4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiBtX3Jlc2VydmVkTWVt
b3J5OwogICAgIFBhZ2VDb3VudCBtX2luaXRpYWwgeyB9OwogICAgIFBhZ2VDb3VudCBtX21heGlt
dW0geyB9OworICAgIE1lbW9yeTo6TW9kZSBtX21vZGUgeyBNZW1vcnk6Ok1vZGU6OkJvdW5kc0No
ZWNraW5nIH07CiAgICAgYm9vbCBtX2lzSW1wb3J0IHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKaW5kZXggNTE3NzNk
MDZlNjIwMTIzYjVhYzA0MjYyYTkwOGJhYjBiZjhmMTU5OS4uNzcwNDU1ZTM3OTkxMDIzMDhhZmY1
ZWNjYTM2NTEyZjNiNDRmYWFkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTMxNiw3ICszMTYsNyBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAogICAg
IEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKICAgICBBU1NFUlQoIW1heGltdW1QYWdlQ291bnQg
fHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNvdW50KTsKIAotICAgIG1fcmVzdWx0
Lm1vZHVsZS0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3VudCwgbWF4
aW11bVBhZ2VDb3VudCwgaXNJbXBvcnQpOworICAgIG1fcmVzdWx0Lm1vZHVsZS0+bWVtb3J5ID0g
TWVtb3J5SW5mb3JtYXRpb24oKm1fdm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291
bnQsIGlzSW1wb3J0KTsKICAgICByZXR1cm4geyB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5jcHAKaW5kZXggNTk4MGI1MWU4NzQyMjIzNzU1Y2UwYzNkZjJjMTZiMWRl
OWVjOGYxMi4uNTMzYWQ4M2E3ZTFhNjAxNmQxMDYyM2E0ZGM0ZjkzYjg2NDQ5MmZmNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2lu
Y2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlUGFyc2VyLmgiCiAjaW5j
bHVkZSAiV2FzbVZhbGlkYXRlLmgiCisjaW5jbHVkZSAiV2FzbVRyYXBTaWduYWxIYW5kbGVyLmgi
CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5j
bHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UcmFwU2lnbmFsSGFuZGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAxMWU5ODlmMmQ3
M2FmZTU0ZTdmYjUwMWEwMzUyOTMzYmNiZTI0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuY3BwCkBAIC0wLDAgKzEs
MTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21UcmFwU2lnbmFsSGFuZGxlci5oIgorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5o
IgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9u
IG9sZFNpZ25hbEhhbmRsZXI7CitzdGF0aWMgYm9vbCBmYXN0SGFuZGxlckluc3RhbGxlZCB7IGZh
bHNlIH07CitzdGF0aWMgU3RhdGljTG9jayBjb2RlTG9jYXRpb25zTG9jazsKK3N0YXRpYyBMYXp5
TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1cGxlPFZNKiwgdm9pZCosIHZvaWQqPj4+IGNv
ZGVMb2NhdGlvbnM7IC8vICh2bSwgc3RhcnQsIGVuZCkKKworc3RhdGljIHZvaWQgdHJhcEhhbmRs
ZXIoaW50IHNpZ25hbCwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1Y29udGV4dCkKK3sKKyAgICB2
b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0gaW5mby0+c2lfYWRkcjsKKworICAgIC8vIEZpcnN0
IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFyZSBpbiBKSVQgY29kZSBiZWZvcmUgd2UgY2FuIGFx
dWlyZSBhbnkgbG9ja3MuIE90aGVyd2lzZSwKKyAgICAvLyB3ZSBtaWdodCBoYXZlIGNyYXNoZWQg
aW4gY29kZSB0aGF0IGlzIGFscmVhZHkgaG9sZGluZyBvbmUgb2YgdGhlIGxvY2tzIHdlIHdhbnQg
dG8gYXF1aXJlLgorICAgIGlmIChyZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFydE9mRml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbCkgPD0gZmF1bHRpbmdJbnN0cnVjdGlvbgorICAgICAgICAmJiBm
YXVsdGluZ0luc3RydWN0aW9uIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4
ZWN1dGFibGVNZW1vcnlQb29sKSkgeworCisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGNvZGVM
b2NhdGlvbnNMb2NrKTsKKyAgICAgICAgZm9yIChhdXRvIHJhbmdlIDogY29kZUxvY2F0aW9ucy5n
ZXQoKSkgeworICAgICAgICAgICAgVk0qIHZtOworICAgICAgICAgICAgdm9pZCogc3RhcnQ7Cisg
ICAgICAgICAgICB2b2lkKiBlbmQ7CisgICAgICAgICAgICBzdGQ6OnRpZSh2bSwgc3RhcnQsIGVu
ZCkgPSByYW5nZTsKKyAgICAgICAgICAgIGlmIChzdGFydCA8PSBmYXVsdGluZ0luc3RydWN0aW9u
ICYmIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPD0gZW5kKSB7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGV4Y2VwdGlvblN0dWIgPSB2bS0+aml0U3R1YnMtPmV4aXN0aW5nQ1RJ
U3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOworICAgICAgICAgICAg
ICAgIC8vIElmIGZvciB3aGF0ZXZlciByZWFzb24gd2UgZG9uJ3QgaGF2ZSBhIHN0dWIgdGhlbiB3
ZSBzaG91bGQganVzdCB0cmVhdCB0aGlzIGxpa2UgYSByZWd1bGFyIGNyYXNoLgorICAgICAgICAg
ICAgICAgIGlmICghZXhjZXB0aW9uU3R1Yi5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIG1jb250ZXh0X3QgY29udGV4dCA9IHN0YXRpY19jYXN0PHVj
b250ZXh0X3QqPih1Y29udGV4dCktPnVjX21jb250ZXh0OworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPl9fc3MuX19yc2kgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oRXhjZXB0aW9uVHlwZTo6T3V0
T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPl9fc3MuX19y
aXAgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihleGNlcHRpb25TdHViLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvbGRTaWduYWxIYW5kbGVyLnNhX3NpZ2FjdGlvbihz
aWduYWwsIGluZm8sIHVjb250ZXh0KTsKK30KKwordm9pZCByZWdpc3RlckNvZGUoVk0mIHZtLCB2
b2lkKiBzdGFydCwgdm9pZCogZW5kKQoreworICAgIGlmICghZmFzdE1lbW9yeUVuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIExvY2tIb2xkZXIgbG9ja2VyKGNvZGVMb2NhdGlvbnNMb2Nr
KTsKKyAgICBjb2RlTG9jYXRpb25zLT5hZGQoc3RkOjptYWtlX3R1cGxlKCZ2bSwgc3RhcnQsIGVu
ZCkpOworfQorCit2b2lkIHVucmVnaXN0ZXJDb2RlKFZNJiB2bSwgdm9pZCogc3RhcnQsIHZvaWQq
IGVuZCkKK3sKKyAgICBpZiAoIWZhc3RNZW1vcnlFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBMb2NrSG9sZGVyIGxvY2tlcihjb2RlTG9jYXRpb25zTG9jayk7CisgICAgY29kZUxvY2F0
aW9ucy0+cmVtb3ZlKHN0ZDo6bWFrZV90dXBsZSgmdm0sIHN0YXJ0LCBlbmQpKTsKK30KKworYm9v
bCBmYXN0TWVtb3J5RW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGZhc3RIYW5kbGVySW5zdGFsbGVk
OworfQorCit2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAgc3RydWN0
IHNpZ2FjdGlvbiBhY3Rpb247CisKKyAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHRyYXBI
YW5kbGVyOworICAgICAgICBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7CisgICAgICAgIGFj
dGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgICAgIAorICAgICAgICBpZiAoIXNpZ2Fj
dGlvbihTSUdTRUdWLCAmYWN0aW9uLCAmb2xkU2lnbmFsSGFuZGxlcikpIHsKKyAgICAgICAgICAg
IGZhc3RIYW5kbGVySW5zdGFsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvZGVMb2NhdGlvbnMu
Y29uc3RydWN0KCk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKyAgICAKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UcmFwU2lnbmFsSGFuZGxlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRyYXBTaWduYWxIYW5kbGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTc4MWMyODQwNjI2ZGRhOWFjMDU2OGViZTU4YTExNzJkYzhiNjFjNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UcmFwU2lnbmFsSGFuZGxl
ci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgVk07CisKK25hbWVzcGFjZSBXYXNtIHsKKwordm9pZCByZWdpc3RlckNvZGUoVk0mIHZt
LCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKK3ZvaWQgdW5yZWdpc3RlckNvZGUoVk0mIHZtLCB2
b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKKworYm9vbCBmYXN0TWVtb3J5RW5hYmxlZCgpOworSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBlbmFibGVGYXN0TWVtb3J5KCk7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCmlu
ZGV4IGMyNzcxMmExMGZmZmM4ZGYzZjFlYjYwNmIwOGNmYzlmMDdmOGUzNmIuLjE2OWQ1ODg2OWZi
OGVhYTM1ODFhMGM3YzJkYTI5YjI3NDI1NGQzODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIldhc21UcmFwU2lnbmFsSGFuZGxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtNDMsMTEgKzQ0LDEzIEBAIHZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAKICAgICBtX2VudHJ5cG9pbnQgPSBXVEZNb3ZlKGVudHJ5cG9pbnQp
OworICAgIFdhc206OnJlZ2lzdGVyQ29kZSh2bSwgbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5j
b2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCBtX2VudHJ5cG9pbnQuY29tcGls
YXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKIH0KIAogdm9pZCBK
U1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxl
ZSo+KGNlbGwpOworICAgIFdhc206OnVucmVnaXN0ZXJDb2RlKCpjZWxsLT52bSgpLCB0aGlzT2Jq
ZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5
KCktPnN0YXJ0KCksIHRoaXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJl
ZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwogICAgIHRoaXNPYmplY3QtPkpTV2ViQXNz
ZW1ibHlDYWxsZWU6On5KU1dlYkFzc2VtYmx5Q2FsbGVlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuY3BwCmluZGV4IDc2M2RjNDk0Y2U1YTQ3ODJkNmU2ODQ3ZjgyMjU2NjFiMzVi
ZGE3YWIuLjQxMTJkMzUxMmRiZDk5NjQ4ZjNhM2E0NjE3YTE0MzJhODI5YWQzZDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtMjM1LDEwICsyMzUsMTUgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNl
KEV4ZWNTdGF0ZSogZXgKICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAh
aGFzTWVtb3J5SW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5m
b3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOwogICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEg
bWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgotICAgICAgICAgICAgYm9vbCBm
YWlsZWQ7Ci0gICAgICAgICAgICBXYXNtOjpNZW1vcnkgbWVtb3J5KG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCksIGZh
aWxlZCk7Ci0gICAgICAgICAgICBpZiAoZmFpbGVkKQotICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihleGVjKSkpOworICAgICAgICAgICAgV2FzbTo6TWVtb3J5IG1lbW9yeTsK
KyAgICAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaGFzUmVzZXJ2ZWRNZW1v
cnkoKSAmJiBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkucmVzZXJ2ZWRNZW1vcnkoKSkKKyAgICAg
ICAgICAgICAgICBtZW1vcnkgPSBXVEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5yZXNl
cnZlZE1lbW9yeSgpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wg
ZmFpbGVkOworICAgICAgICAgICAgICAgIFdhc206Ok1lbW9yeSBtZW1vcnkodm0sIG1vZHVsZUlu
Zm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhp
bXVtKCksIGZhaWxlZCk7CisgICAgICAgICAgICAgICAgaWYgKGZhaWxlZCkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLAogICAgICAgICAgICAgICAgSlNXZWJB
c3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldl
YkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIFdURk1vdmUobWVtb3J5KSkpOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCmluZGV4IDZjODg3YWY1OTdhODY1MzI5Y2ZiNDNm
NWVkYjQ3YjQxZTY2MDllYzguLjY4Mjk5ZTA1Y2EyYTE1MGZjYzFhYWUxN2I1OTlkMGVlMzVhMjgy
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TWVtb3J5Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1v
cnkoRXhlY1N0YXRlKiBleGVjCiAgICAgfQogCiAgICAgYm9vbCBmYWlsZWQ7Ci0gICAgV2FzbTo6
TWVtb3J5IG1lbW9yeShpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBmYWlsZWQp
OworICAgIFdhc206Ok1lbW9yeSBtZW1vcnkodm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1Q
YWdlQ291bnQsIGZhaWxlZCk7CiAgICAgaWYgKGZhaWxlZCkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1l
bW9yeUVycm9yKGV4ZWMpKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302888</attachid>
            <date>2017-02-27 16:33:12 -0800</date>
            <delta_ts>2017-02-28 12:56:08 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-162693-20170227163016.patch</filename>
            <type>text/plain</type>
            <size>41305</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ODFlYWQzNTM4YmU0Yjc0YzA1ZjlmMDU4Y2UzYTRiNTcyNjgxYTU2Li4zNDRlMmI3ZmExOGRkZGYx
ZGYyNjQ4MWRlYzM0YjhmMzQ1Y2EyNjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAxNy0wMi0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBXQVNNIHNob3VsZCBzdXBwb3J0IGZhc3RlciBsb2Fkcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIpOgorICAgICAgICAq
IGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoanNjbWFpbik6
CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQ
cmVwYXJlUG9pbnRlcik6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmltcG9ydEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbjo6aGFzTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dh
c21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1tYXBCeXRlcyk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjphdmFpbGFibGVGYXN0TWVtb3JpZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
ZW1vcnk6OnRyeUdldEZhc3RNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OnJl
bGVhc2VGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6On5NZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Omdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmR1bXApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1ha2VTdHJpbmcpOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6TWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlv
bi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZv
cm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnJlc2VydmVkTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Om1vZGUpOgorICAgICAgICAq
IHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6
CisgICAgICAgICogd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZWdpc3Rl
ckNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp1bnJlZ2lzdGVyQ29kZSk6CisgICAgICAgIChK
U0M6Oldhc206OmZhc3RNZW1vcnlFbmFibGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5hYmxl
RmFzdE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxl
ZS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJs
eU1lbW9yeSk6CisKIDIwMTctMDItMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHN0ZDo6dHVwbGVzIGFz
IGtleXMgaW4gSGFzaE1hcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjMTIzYjA2
YWZkOTVhOTk2YzdlYjczYzlhN2U1Y2FjYjFkZWM0ZTJlLi5iMWJhN2IwZjRjYWMwYmRkYTliOTgz
MWRiY2QyZTE5Njc2MmRkOWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMy
MCw2ICsxMzIwLDggQEAKIAkJNTM1NTU3MTYxRDlERkEzMjAwNkQ1ODNCIC8qIFdhc21NZW1vcnku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1NTU3
MTUxRDlERkEzMjAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuY3BwICovOyB9OwogCQk1MzcwQjRGNTFC
RjI2MjAyMDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzcwQjRGMzFCRjI1RUEyMDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50QmFzZS5jcHAgKi87IH07CiAJCTUzNzBCNEY2MUJGMjYyMDUwMDVDNDBGQyAvKiBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzcwQjRGNDFCRjI1RUEyMDA1QzQw
RkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oICovOyB9
OworCQk1MzgxQjkzNzFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbVRyYXBTaWduYWxIYW5kbGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODFCOTM2
MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtVHJhcFNpZ25hbEhhbmRsZXIuY3BwICovOyB9OworCQk1
MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbVRyYXBTaWduYWxIYW5kbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzgxQjkzODFFNjBFOTdE
MDA5MEY3OTQgLyogV2FzbVRyYXBTaWduYWxIYW5kbGVyLmggKi87IH07CiAJCTUzOTE3RTdCMUI3
OTA2RkEwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5MTdF
N0ExQjc5MDZFNDAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVu
Y3Rpb25zLmggKi87IH07CiAJCTUzOUZCOEJBMUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5
RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi87IH07CiAJCTUzQjBC
RTM0MUU1NjFBQzkwMEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQjBCRTMzMUU1NjFBQzkw
MEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLzsgfTsKQEAgLTM3NzYsNiAr
Mzc3OCw4IEBACiAJCTUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21NZW1vcnkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzcwQjRGMzFCRjI1RUEyMDA1QzQwRkMgLyogQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM3MEI0RjQx
QkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzgxQjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbVRyYXBTaWduYWxIYW5kbGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UcmFwU2lnbmFsSGFu
ZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzODFCOTM4MUU2MEU5N0Qw
MDkwRjc5NCAvKiBXYXNtVHJhcFNpZ25hbEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbVRyYXBTaWduYWxIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzOTE3RTdBMUI3OTA2RTQwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
OTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJvdG90eXBlLmpzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRBcnJheVByb3RvdHlwZS5qczsg
cGF0aCA9IGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSBTT1VS
Q0VfUk9PVDsgfTsKQEAgLTYyMDEsNiArNjIwNSw4IEBACiAJCQkJNTNGNDBFOTYxRDVBN0JFQzAw
OTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTUzRjQwRTk0MUQ1QTdBRUYw
MDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi8sCiAJCQkJQURCNkY2N0MxRTE1RDc1MDAw
ODJGMzg0IC8qIFdhc21QYWdlQ291bnQuY3BwICovLAorCQkJCTUzODFCOTM2MUU2MEU5NjYwMDkw
Rjc5NCAvKiBXYXNtVHJhcFNpZ25hbEhhbmRsZXIuY3BwICovLAorCQkJCTUzODFCOTM4MUU2MEU5
N0QwMDkwRjc5NCAvKiBXYXNtVHJhcFNpZ25hbEhhbmRsZXIuaCAqLywKIAkJCQk3OUI3NTk3MzFE
RkE0QzYwMDA1MjE3NEMgLyogV2FzbVBhZ2VDb3VudC5oICovLAogCQkJCTUzRjQwRThDMUQ1OTAx
RjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCiAJCQkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3
QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKQEAgLTgyNDYsNiArODI1Miw3IEBACiAJCQkJQTdEODlD
RjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkMzQ0NGQzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzODFCOTM5MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNt
VHJhcFNpZ25hbEhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZFMTlBREE0MTAw
MDZBQzcyQSAvKiBERkdCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRjE1OEQxOUI3
QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwMzYsNiArMTAwNDMsNyBAQAogCQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3
RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkw
NTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzQkQxQjcxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzgxQjkzNzFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbVRy
YXBTaWduYWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzAwQjdCMThBQjFCMTQw
MEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjg5OEYzMTFCMjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1p
emF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDOTdGM0QxODIwMjExOTAwMkM5
QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKaW5kZXggZGU0OGU2MmRk
YWI4ZWZhZjhiZTMxODI4NzFiZThkNzA5OWIxN2M3Zi4uNTQ2ZTE0YzkwNDhlOGQzMzhhNTgyNjQ3
Y2Y3Y2FkZjlkZDM0MWNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNw
cApAQCAtODIsNiArODIsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3Rp
U3R1YihWTSogdm0sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKICAgICByZXR1cm4gZW50cnku
aXRlcmF0b3ItPnZhbHVlOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpl
eGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ1RJU3R1Yk1hcDo6aXRlcmF0b3IgZW50cnkgPSBtX2N0
aVN0dWJNYXAuZmluZChnZW5lcmF0b3IpOworICAgIGlmIChlbnRyeSA9PSBtX2N0aVN0dWJNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICByZXR1
cm4gZW50cnktPnZhbHVlOworfQorCiB2b2lkIEpJVFRodW5rczo6ZmluYWxpemUoSGFuZGxlPFVu
a25vd24+IGhhbmRsZSwgdm9pZCopCiB7CiAgICAgYXV0byogbmF0aXZlRXhlY3V0YWJsZSA9IHN0
YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKaW5kZXggYWRkY2YyMzBjMzQ1ZDQyNzFiNjM3
ZjA4Yjk0YzQxNmEzZWQxODJhNC4uN2UwNmU3MTYyMzUzYTBiNzNmM2JjMDJlNTQyZjczYjgyZjY2
ZTEwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCkBAIC01OCw2ICs1OCw3
IEBAIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlVGFpbENhbGxX
aXRob3V0U2F2ZWRUYWdzKFZNKik7ICAgIAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGN0
aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4
aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvcik7CiAKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBo
b3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0
cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RG
dW5jdGlvblN0dWIoVk0qLCBOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0
b3IsIFRodW5rR2VuZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggYWVkZjQyZTE3Y2My
YmRlMDE0YWQ1YjhkNjI4NjIyYWVjMTQ1ZTdlMi4uOTQ2Y2RjMDMzMzk0OWRhYWM5YmViOTViOTY0
YTk3NTVmZmE0NWRlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTczLDYgKzczLDcgQEAKICNp
bmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1
ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtVHJhcFNpZ25hbEhhbmRsZXIuaCIKICNp
bmNsdWRlIDxsb2NhbGUuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4K
QEAgLTM3NjYsNiArMzc2Nyw3IEBAIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
ICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgSlNDOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7CiAgICAgc3RhcnRUaW1lb3V0VGhyZWFkSWZOZWVkZWQoKTsKKyAgICBKU0M6Oldh
c206OmVuYWJsZUZhc3RNZW1vcnkoKTsKIAogICAgIGludCByZXN1bHQ7CiAgICAgcmVzdWx0ID0g
cnVuSlNDKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGM0YmY4
ZmFkZThhYWUzMTBmMmI2YTI3NzExMzFiYmVkYTIxYjJjYmMuLjIzOTkzODUzYTA2NTNkYTNlM2Qz
MzcwNGRjYjE2MWNlOTllNjRjYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgKQEAgLTQyNiw2ICs0MjYsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmlu
ZzsKICAgICBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseSwgdHJ1ZSwgTm9ybWFsLCAiRXhw
b3NlIHRoZSBXZWJBc3NlbWJseSBnbG9iYWwgb2JqZWN0LiIpIFwKICAgICB2KGJvb2wsIHNpbXVs
YXRlV2ViQXNzZW1ibHlMb3dNZW1vcnksIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgTWVt
b3J5IG9iamVjdCB3b24ndCBtbWFwIHRoZSBmdWxsICdtYXhpbXVtJyByYW5nZSBhbmQgaW5zdGVh
ZCB3aWxsIGFsbG9jYXRlIHRoZSBtaW5pbXVtIHJlcXVpcmVkIGFtb3VudC4iKSBcCisgICAgdihi
b29sLCB1c2VXZWJBc3NlbWJseU1lbW9yeU1vZGVGdXp6LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1
ZSwgdGhlIE1lbW9yeSBvYmplY3Qgd2lsbCBmdXp6IGVhY2ggbW1hcC4iKQogCiBlbnVtIE9wdGlv
bkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDJmZjMwNTAxZjY2ZjFhY2RhZjVk
ZDhmNzhmNWE1MjI5ZWFlYjhiOTEuLmIyNTcwOGY3NzE3MzhjOGIxNDBkMzMxNjc5YWIxZTJlYTZj
OTMyODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAKQEAgLTI1OSw3ICsyNTksNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9y
KFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcAogICAg
IGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyYgcmVnSW5mbyA6IHBpbm5lZFJlZ3Mu
c2l6ZVJlZ2lzdGVycykKICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJl
Z2lzdGVyKTsKIAotICAgIGlmIChpbmZvLmhhc01lbW9yeSgpKSB7CisgICAgaWYgKGluZm8ubWVt
b3J5KSB7CiAgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQpIHsKICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQocGlubmVkR1BSLCBtX21lbW9yeVNpemVHUFIgPT0gcGlu
bmVkR1BSKTsKQEAgLTQ1NCw5ICs0NTQsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9i
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIAog
aW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9w
ZXJhdGlvbikKIHsKLSAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSICYmIG1fbWVtb3J5U2l6ZUdQ
Uik7Ci0gICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7Ci0gICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBP
cmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlTaXplR1BSLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZz
ZXQgLSAxKTsKKyAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSKTsKKyAgICBpZiAobV9pbmZvLm1l
bW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZykgeworICAgICAgICBB
U1NFUlQobV9tZW1vcnlTaXplR1BSKTsKKyAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiAr
IG9mZnNldCA+IG9mZnNldCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2Fz
bUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6
ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgfQogICAgIHBvaW50ZXIg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgT3JpZ2lu
KCksIHBvaW50ZXIpOwogICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21B
ZGRyZXNzVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5QmFzZUdQUik7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVu
dGlvbi5oCmluZGV4IGQ3OTAxNGYyN2ZhZjkwOTY4ZjIxZjVmOWI0ZDdiOGNjNzgxMDM5ZTMuLmU2
MDRhYjJkNDcwOTBhN2U5NDMxOWExMmNiODcxZTRlNzQzNzI3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCkBAIC00MCw2ICs0
MCw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0Lmgi
CiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5oCmluZGV4IGRjNjM0NzQ0MjJiZmU2MDMzZDhiMmQyMjFiYjdlYzVjMTEw
NTY4NjIuLjFmYzU3NGU5M2Q3MjQ3YzY0YThmYTMzNGY2MjI1ZDJjNzI3MWY2NDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTI1Niw3ICsyNTYsNiBAQCBzdHJ1
Y3QgTW9kdWxlSW5mb3JtYXRpb24gewogICAgIH0KIAogICAgIHVpbnQzMl90IGltcG9ydEZ1bmN0
aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
c2l6ZSgpOyB9Ci0gICAgYm9vbCBoYXNNZW1vcnkoKSBjb25zdCB7IHJldHVybiAhIW1lbW9yeTsg
fQogCiAgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCBhYWQ5MWMxM2UzYTMwMTY4MzhmYjAzODRkYWI1YTQy
YjQ3NzQzZDI4Li4yODA5NTE5NDAxYjdlZjQ5OTk3MmFjNzNlZDJmNDJkZGNlOTZhMjVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApAQCAtMjgsOSArMjgsMTMg
QEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIldhc21UcmFwU2lnbmFs
SGFuZGxlci5oIgorCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8
d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtMzgsMzEgKzQyLDk5IEBAIG5h
bWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotdm9pZCBNZW1vcnk6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK2lubGluZSBib29sIE1lbW9yeTo6bW1hcEJ5
dGVzKHNpemVfdCBieXRlcykKIHsKLSAgICBTdHJpbmcgbWVtb3J5SGV4OwotICAgIFdURjo6YXBw
ZW5kVW5zaWduZWQ2NEFzSGV4KCh1aW50NjRfdCkodWludHB0cl90KW1fbWVtb3J5LCBtZW1vcnlI
ZXgpOwotICAgIG91dC5wcmludCgiTWVtb3J5IGF0IDB4IiwgbWVtb3J5SGV4LCAiLCBzaXplICIs
IG1fc2l6ZSwgIkIgY2FwYWNpdHkgIiwgbV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwg
bV9pbml0aWFsLCAiIG1heGltdW0gIiwgbV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyht
X21vZGUpKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiQXR0ZW1wdGluZyB0
byBtbWFwICIsIGJ5dGVzLCAiIGJ5dGVzOiAiKTsKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUg
bmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCisgICAgdm9pZCogcmVzdWx0ID0gbW1hcChu
dWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7
CisgICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCJzdWNjZWVkZWQiKTsK
KyAgICBtX21lbW9yeSA9IHJlc3VsdDsKKyAgICBtX21hcHBlZENhcGFjaXR5ID0gYnl0ZXM7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWNvbnN0IGNoYXIqIE1lbW9yeTo6bWFrZVN0cmluZyhNb2Rl
IG1vZGUpIGNvbnN0CisvLyBXZSB1c2UgdGhpcyBhcyBhIGhldXJpc3RpYyB0byBndWVzcyB3aGlj
aCBtb2RlIHdlIHNob3VsZCBhc3N1bWUgd2UgYXJlIGdvaW5nIHRvIGdldCB3aGVuIGEgbW9kdWxl
IGltcG9ydHMgYSBtZW1vcnkuCitzdGF0aWMgTWVtb3J5OjpNb2RlIGxhc3RBbGxvY2F0ZWRNZW1v
cnlNb2RlIHsgTWVtb3J5OjpNb2RlOjpTaWduYWxpbmcgfTsKKworTWVtb3J5OjpNb2RlIE1lbW9y
eTo6bGFzdEFsbG9jYXRlZE1vZGUoKQogewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2Ug
TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOworICAgIHJldHVy
biBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZTsKK30KKworc3RhdGljX2Fzc2VydChzaXplb2YodWlu
dDY0X3QpID09IHNpemVvZihzaXplX3QpLCAiV2UgcmVseSBvbiBhbGxvd2luZyB0aGUgbWF4aW11
bSBzaXplIG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUgMl4zMyB3aGljaCBpcyBsYXJnZXIgdGhhbiBm
aXRzIGluIGEgMzItYml0IGludGVnZXIgdGhhdCB3ZSdkIHBhc3MgdG8gbXByb3RlY3QgaWYgdGhp
cyBkaWRuJ3QgaG9sZC4iKTsKKworc3RhdGljIGNvbnN0IHNpemVfdCBmYXN0TWVtb3J5TWFwcGVk
Qnl0ZXMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkgKiAyOyAvLyBwb2lu
dGVyIG1heCArIG9mZnNldCBtYXguIFRoaXMgaXMgYWxsIHdlIG5lZWQgc2luY2UgYSBsb2FkIHN0
cmFkZGxpbmcgcmVhZGFibGUgbWVtb3J5IHdpbGwgdHJhcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtYXhGYXN0TWVtb3JpZXMgPSA0Oworc3RhdGljIHVuc2lnbmVkIGFsbG9jYXRlZEZhc3RNZW1v
cmllcyB7IDAgfTsKK2lubGluZSBEZXF1ZTx2b2lkKiwgbWF4RmFzdE1lbW9yaWVzPiYgYXZhaWxh
YmxlRmFzdE1lbW9yaWVzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGVxdWU8dm9p
ZCosIG1heEZhc3RNZW1vcmllcz4+IGF2YWlsYWJsZUZhc3RNZW1vcmllczsKKyAgICByZXR1cm4g
YXZhaWxhYmxlRmFzdE1lbW9yaWVzOworfQorCitib29sIE1lbW9yeTo6dHJ5R2V0RmFzdE1lbW9y
eShWTSYgdm0pCit7CisgICAgLy8gV2UgbWlnaHQgR0MgaGVyZSBzbyB3ZSBzaG91bGQgYmUgaG9s
ZGluZyB0aGUgQVBJIGxvY2suCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN5
bmNyb25vdXNseSB0cmlnZ2VyIHRoZSBHQyBmcm9tIGFub3RoZXIgdGhyZWFkLgorICAgIEFTU0VS
VCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBpZiAoIWZhc3RNZW1v
cnlFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIG5lZWQgdG8g
YmUgc3VyZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0byBydW5uaW5nIGNvZGUuCisgICAgdm0uZ2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOworCisgICAgQVNT
RVJUKGFsbG9jYXRlZEZhc3RNZW1vcmllcyA8PSBtYXhGYXN0TWVtb3JpZXMpOworICAgIGlmICgh
YXZhaWxhYmxlRmFzdE1lbW9yaWVzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fbWVtb3J5ID0g
YXZhaWxhYmxlRmFzdE1lbW9yaWVzKCkudGFrZUZpcnN0KCk7CisgICAgICAgIG1fbW9kZSA9IE1v
ZGU6OlNpZ25hbGluZzsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOworCisgICAgLy8gSWYgd2UgaGF2
ZSBhbGxvY2F0ZWQgYWxsIHRoZSBmYXN0IG1lbW9yaWVzLi4uIHRvbyBiYWQuCisgICAgaWYgKGFs
bG9jYXRlZEZhc3RNZW1vcmllcyA9PSBtYXhGYXN0TWVtb3JpZXMpIHsKKyAgICAgICAgLy8gVGhl
cmUgaXMgYSByZWFzb25hYmxlIGNoYW5jZSB0aGF0IGFub3RoZXIgbW9kdWxlIGhhcyBkaWVkIGJ1
dCBoYXMgbm90IGJlZW4gY29sbGVjdGVkIHlldC4gRG9uJ3QgbG9zZSBob3BlIHlldCEKKyAgICAg
ICAgdm0uaGVhcC5jb2xsZWN0U3luYygpOworICAgICAgICBpZiAoIWF2YWlsYWJsZUZhc3RNZW1v
cmllcygpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9tZW1vcnkgPSBhdmFpbGFibGVGYXN0
TWVtb3JpZXMoKS50YWtlRmlyc3QoKTsKKyAgICAgICAgICAgIG1fbW9kZSA9IE1vZGU6OlNpZ25h
bGluZzsKKyAgICAgICAgICAgIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlID0gbV9tb2RlOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChtbWFwQnl0ZXMoZmFzdE1lbW9yeU1hcHBlZEJ5dGVz
KSkgeworICAgICAgICBtX21vZGUgPSBNb2RlOjpTaWduYWxpbmc7CisgICAgICAgIGxhc3RBbGxv
Y2F0ZWRNZW1vcnlNb2RlID0gbV9tb2RlOworICAgICAgICBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMr
KzsKKyAgICB9CisgICAgcmV0dXJuIG1fbWVtb3J5OwogfQogCi1zdGF0aWNfYXNzZXJ0KHNpemVv
Zih1aW50NjRfdCkgPT0gc2l6ZW9mKHNpemVfdCksICJXZSByZWx5IG9uIGFsbG93aW5nIHRoZSBt
YXhpbXVtIHNpemUgb2YgTWVtb3J5IHdlIG1hcCB0byBiZSAyXjMyIHdoaWNoIGlzIGxhcmdlciB0
aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50ZWdlciB0aGF0IHdlJ2QgcGFzcyB0byBtcHJvdGVjdCBp
ZiB0aGlzIGRpZG4ndCBob2xkLiIpOwordm9pZCBNZW1vcnk6OnJlbGVhc2VGYXN0TWVtb3J5KCkK
K3sKKyAgICBpZiAobW9kZSgpICE9IE1vZGU6OlNpZ25hbGluZyB8fCAhbV9tZW1vcnkpCisgICAg
ICAgIHJldHVybjsKIAotTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3Vu
dCBtYXhpbXVtLCBib29sJiBmYWlsZWQpCisgICAgUkVMRUFTRV9BU1NFUlQobV9tZW1vcnkgJiYg
bV9tYXBwZWRDYXBhY2l0eSA9PSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXMpOworICAgIEFTU0VSVChm
YXN0TWVtb3J5RW5hYmxlZCgpKTsKKworICAgIEFTU0VSVChhdmFpbGFibGVGYXN0TWVtb3JpZXMo
KS5zaXplKCkgPCBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMpOworICAgIGF2YWlsYWJsZUZhc3RNZW1v
cmllcygpLmFwcGVuZChtX21lbW9yeSk7CisgICAgbV9tZW1vcnkgPSBudWxscHRyOworfQorCitN
ZW1vcnk6Ok1lbW9yeShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11
bSwgYm9vbCYgZmFpbGVkKQogICAgIDogbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKICAgICAsIG1f
aW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCi0gICAgLCBtX21vZGUo
TW9kZTo6Qm91bmRzQ2hlY2tpbmcpCi0gICAgLy8gRklYTUU6IElmIHdlIGFkZCBzaWduYWwgYmFz
ZWQgYm91bmRzIGNoZWNraW5nIHRoZW4gd2UgbmVlZCBleHRyYSBzcGFjZSBmb3Igb3ZlcmZsb3cg
b24gbG9hZC4KLSAgICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjI2OTMKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49
IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCiAK
QEAgLTcwLDQ1ICsxNDIsNDUgQEAgTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBh
Z2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpCiAgICAgaWYgKCFtX21hcHBlZENhcGFjaXR5
KSB7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugc3BlY2lmaWVkIGEgemVybyBhcyBtYXhpbXVt
ICh3aGljaCBtZWFucyB3ZSBhbHNvIGhhdmUgemVybyBhcyBpbml0aWFsIHNpemUpLgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3NpemUgPT0gMCk7Ci0gICAgICAgIG1fbWVtb3J5ID0gbnVsbHB0
cjsKLSAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGZhaWxlZCA9IGZhbHNl
OwogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpN
ZW1vcnkgYWxsb2NhdGluZyBub3RoaW5nICIsICp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGhhZCBhIFZNIHRhZyBm
b3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjM2MDAKLSAgICB2b2lkKiByZXN1bHQgPSBPcHRpb25zOjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93
TWVtb3J5KCkgPyBNQVBfRkFJTEVEIDogbW1hcChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5LCBQ
Uk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKLSAgICBpZiAocmVzdWx0
ID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBkaWZmZXJlbnQg
bnVtYmVyLgotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTWVt
b3J5OjpNZW1vcnkgbW1hcCBmYWlsZWQgb25jZSBmb3IgY2FwYWNpdHksIHRyeWluZyBhZ2FpbiIs
ICp0aGlzKTsKLSAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1fc2l6ZTsKLSAgICAgICAgaWYg
KCFtX21hcHBlZENhcGFjaXR5KSB7Ci0gICAgICAgICAgICBtX21lbW9yeSA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICBmYWlsZWQgPSBmYWxzZTsKKyAgICBpZiAoIXRyeUdldEZhc3RNZW1vcnkodm0p
KSB7CisgICAgICAgIGlmIChPcHRpb25zOjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkg
PyB0cnVlIDogIW1tYXBCeXRlcyhtX21hcHBlZENhcGFjaXR5KSkgeworICAgICAgICAgICAgLy8g
VHJ5IGFnYWluIHdpdGggYSBkaWZmZXJlbnQgbnVtYmVyLgogICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Ok1lbW9yeSBtbWFwIG5vdCB0
cnlpbmcgYWdhaW4gYmVjYXVzZSBzaXplIGlzIHplcm8gIiwgKnRoaXMpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Ok1l
bW9yeSBtbWFwIGZhaWxlZCBvbmNlIGZvciBjYXBhY2l0eSwgdHJ5aW5nIGFnYWluIiwgKnRoaXMp
OworICAgICAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1fc2l6ZTsKKyAgICAgICAgICAgIGlm
ICghbV9tYXBwZWRDYXBhY2l0eSkgeworICAgICAgICAgICAgICAgIG1fbWVtb3J5ID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Ok1lbW9yeSBt
bWFwIG5vdCB0cnlpbmcgYWdhaW4gYmVjYXVzZSBzaXplIGlzIHplcm8gIiwgKnRoaXMpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICByZXN1bHQgPSBt
bWFwKG51bGxwdHIsIG1fbWFwcGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBN
QVBfQU5PTiwgLTEsIDApOwotICAgICAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKLSAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5
OjpNZW1vcnkgbW1hcCBmYWlsZWQgdHdpY2UgIiwgKnRoaXMpOwotICAgICAgICAgICAgZmFpbGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghbW1hcEJ5dGVz
KG1fbWFwcGVkQ2FwYWNpdHkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgbW1hcCBmYWlsZWQgdHdp
Y2UgIiwgKnRoaXMpOworICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNT
RVJUKG1fc2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KTsKLSAgICB7Ci0gICAgICAgIGJvb2wgc3Vj
Y2VzcyA9ICFtcHJvdGVjdChyZXN1bHQsIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSwgUFJP
VF9SRUFEIHwgUFJPVF9XUklURSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOwor
ICAgIEFTU0VSVChtX21lbW9yeSAmJiBtX3NpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSk7CisgICAg
aWYgKG1wcm90ZWN0KG1fbWVtb3J5LCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSksIFBST1Rf
UkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJNZW1vcnk6Ok1lbW9yeSBtcHJvdGVjdCBmYWlsZWQgIiwgKnRoaXMpOworICAg
ICAgICByZWxlYXNlRmFzdE1lbW9yeSgpOworICAgICAgICBpZiAobV9tZW1vcnkpCisgICAgICAg
ICAgICBpZiAobXVubWFwKG1fbWVtb3J5LCBtX21hcHBlZENhcGFjaXR5KSkKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOwogICAgIH0KIAotICAgIG1fbWVtb3J5ID0gcmVzdWx0OworICAgIGxhc3RB
bGxvY2F0ZWRNZW1vcnlNb2RlID0gTW9kZTo6Qm91bmRzQ2hlY2tpbmc7CiAgICAgZmFpbGVkID0g
ZmFsc2U7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1v
cnkgbW1hcCBzdWNjZWVkZWQgIiwgKnRoaXMpOwpAQCAtMTE4LDYgKzE5MCw3IEBAIE1lbW9yeTo6
fk1lbW9yeSgpCiB7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5
Ojp+TWVtb3J5ICIsICp0aGlzKTsKKyAgICByZWxlYXNlRmFzdE1lbW9yeSgpOwogICAgIGlmICht
X21lbW9yeSkgewogICAgICAgICBpZiAobXVubWFwKG1fbWVtb3J5LCBtX21hcHBlZENhcGFjaXR5
KSkKICAgICAgICAgICAgIENSQVNIKCk7CkBAIC0xMzcsOCArMjEwLDEyIEBAIGJvb2wgTWVtb3J5
Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQogICAgIHVpbnQ2NF90IGRlc2lyZWRTaXplID0gbmV3
U2l6ZS5ieXRlcygpOwogCiAgICAgaWYgKG1fbWVtb3J5ICYmIGRlc2lyZWRTaXplIDw9IG1fbWFw
cGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gIW1wcm90ZWN0KHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihtX21lbW9yeSkgKyBtX3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZGVz
aXJlZFNpemUgLSBtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3VjY2Vzcyk7CisgICAgICAgIGlmIChtcHJvdGVjdChzdGF0aWNfY2FzdDx1
aW50OF90Kj4obV9tZW1vcnkpICsgbV9zaXplLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlc2lyZWRT
aXplIC0gbV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5Ojpncm93IGluLXBs
YWNlIGZhaWxlZCAiLCAqdGhpcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKwogICAgICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6Z3JvdyBpbi1wbGFjZSAiLCAqdGhpcyk7
CkBAIC0xNjQsNiArMjQxLDIzIEBAIGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXpl
KQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIE1lbW9yeTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIFN0cmluZyBtZW1vcnlIZXg7CisgICAgV1RGOjphcHBlbmRVbnNp
Z25lZDY0QXNIZXgoKHVpbnQ2NF90KSh1aW50cHRyX3QpbV9tZW1vcnksIG1lbW9yeUhleCk7Cisg
ICAgb3V0LnByaW50KCJNZW1vcnkgYXQgMHgiLCBtZW1vcnlIZXgsICIsIHNpemUgIiwgbV9zaXpl
LCAiQiBjYXBhY2l0eSAiLCBtX21hcHBlZENhcGFjaXR5LCAiQiwgaW5pdGlhbCAiLCBtX2luaXRp
YWwsICIgbWF4aW11bSAiLCBtX21heGltdW0sICIgbW9kZSAiLCBtYWtlU3RyaW5nKG1fbW9kZSkp
OworfQorCitjb25zdCBjaGFyKiBNZW1vcnk6Om1ha2VTdHJpbmcoTW9kZSBtb2RlKSBjb25zdAor
eworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJl
dHVybiAiQm91bmRzQ2hlY2tpbmciOworICAgIGNhc2UgTW9kZTo6U2lnbmFsaW5nOiByZXR1cm4g
IlNpZ25hbGluZyI7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuICIiOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogfSAvLyBuYW1lc3BhY2Ug
V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCmluZGV4IDIzNmJmODUx
MjU2NDU1YmNlOWUzMjM2ZGNjNDU4NGM4NmMxZGNmMGMuLmEwOGQ1MTNiZmYzYzA2NDRiZDE1NDVl
M2Q2YmIwNmZjMGIwZjQyZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1
ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAi
V2FzbVBhZ2VDb3VudC5oIgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQ0LDIzICs0NCwzNCBAQCBw
dWJsaWM6CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNl
ZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwogICAgIGVu
dW0gY2xhc3MgTW9kZSB7Ci0gICAgICAgIEJvdW5kc0NoZWNraW5nCisgICAgICAgIEJvdW5kc0No
ZWNraW5nLAorICAgICAgICBTaWduYWxpbmcKICAgICB9OwogICAgIGNvbnN0IGNoYXIqIG1ha2VT
dHJpbmcoTW9kZSkgY29uc3Q7CiAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISFtX21lbW9yeTsgfQorCisgICAgTWVtb3J5JiBvcGVyYXRvcj0oTWVtb3J5JiYg
b3RoZXIpCisgICAgeworICAgICAgICAvLyBNb3ZpbmcgdHJhbnNmZXJzIG93bmVyc2hpcCBvZiB0
aGUgYWxsb2NhdGVkIG1lbW9yeS4KKyAgICAgICAgQVNTRVJUKG1fbWVtb3J5ID09IG51bGxwdHIp
OworICAgICAgICBzdGQ6OnN3YXAobV9tZW1vcnksIG90aGVyLm1fbWVtb3J5KTsKKyAgICAgICAg
bV9zaXplID0gb3RoZXIubV9zaXplOworICAgICAgICBtX2luaXRpYWwgPSBvdGhlci5tX2luaXRp
YWw7CisgICAgICAgIG1fbWF4aW11bSA9IG90aGVyLm1fbWF4aW11bTsKKyAgICAgICAgbV9tYXBw
ZWRDYXBhY2l0eSA9IG90aGVyLm1fbWFwcGVkQ2FwYWNpdHk7CisgICAgICAgIG1fbW9kZSA9IG90
aGVyLm1fbW9kZTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgfQorCiAgICAgTWVtb3J5
KCkgPSBkZWZhdWx0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeShQYWdlQ291bnQgaW5p
dGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wmIGZhaWxlZCk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgTWVtb3J5KFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBi
b29sJiBmYWlsZWQpOwogICAgIE1lbW9yeShNZW1vcnkmJiBvdGhlcikKLSAgICAgICAgOiBtX21l
bW9yeShvdGhlci5tX21lbW9yeSkKLSAgICAgICAgLCBtX3NpemUob3RoZXIubV9zaXplKQotICAg
ICAgICAsIG1faW5pdGlhbChvdGhlci5tX2luaXRpYWwpCi0gICAgICAgICwgbV9tYXhpbXVtKG90
aGVyLm1fbWF4aW11bSkKLSAgICAgICAgLCBtX21hcHBlZENhcGFjaXR5KG90aGVyLm1fbWFwcGVk
Q2FwYWNpdHkpCi0gICAgICAgICwgbV9tb2RlKG90aGVyLm1fbW9kZSkKICAgICB7Ci0gICAgICAg
IC8vIE1vdmluZyB0cmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5Lgot
ICAgICAgICBvdGhlci5tX21lbW9yeSA9IG51bGxwdHI7CisgICAgICAgICp0aGlzID0gV1RGTW92
ZShvdGhlcik7CiAgICAgfQorCiAgICAgfk1lbW9yeSgpOwogCiAgICAgdm9pZCogbWVtb3J5KCkg
Y29uc3QgeyByZXR1cm4gbV9tZW1vcnk7IH0KQEAgLTcwLDE0ICs4MSwyMSBAQCBwdWJsaWM6CiAg
ICAgUGFnZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KICAgICBQ
YWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQogCisgICAgc3Rh
dGljIE1vZGUgbGFzdEFsbG9jYXRlZE1vZGUoKTsKICAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZGU7IH0KIAogICAgIGJvb2wgZ3JvdyhQYWdlQ291bnQpOwogCiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1v
cnksIG1fbWVtb3J5KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1lbW9yeSwgbV9zaXplKTsgfQotICAgIAorCiBwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBNZW1vcnlJbmZvcm1hdGlvbjsKKyAgICBib29sIG1tYXBCeXRl
cyhzaXplX3QgYnl0ZUNvdW50KTsKKworICAgIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0p
OworICAgIHZvaWQgcmVsZWFzZUZhc3RNZW1vcnkoKTsKKwogICAgIHZvaWQqIG1fbWVtb3J5IHsg
bnVsbHB0ciB9OwogICAgIHVpbnQ2NF90IG1fc2l6ZSB7IDAgfTsKICAgICBQYWdlQ291bnQgbV9p
bml0aWFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9y
eUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJ
bmZvcm1hdGlvbi5jcHAKaW5kZXggNmIwNjNkMzUxMjRlOTdhODNiMWYxZTA4NzNhNDEwN2M5ZjBl
OWZkNS4uMWMzNmFmZDk4MWQ3ZjBiMGQ1OGRmMjE4MDhjY2I3MzdkMzcwMmQ5YiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3Bw
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAi
V2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewpAQCAtNzEsMTEgKzcyLDIwIEBAIFBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0
ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpCiB7CiB9CiAK
LU1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbihQYWdlQ291bnQgaW5pdGlhbCwg
UGFnZUNvdW50IG1heGltdW0sICBib29sIGlzSW1wb3J0KQorTWVtb3J5SW5mb3JtYXRpb246Ok1l
bW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtLCBib29sIGlzSW1wb3J0KQogICAgIDogbV9pbml0aWFsKGluaXRpYWwpCiAgICAgLCBtX21h
eGltdW0obWF4aW11bSkKICAgICAsIG1faXNJbXBvcnQoaXNJbXBvcnQpCiB7CisgICAgaWYgKCFp
c0ltcG9ydCkgeworICAgICAgICBib29sIGZhaWxlZFRvUmVzZXJ2ZTsKKyAgICAgICAgYXV0byBt
ZW0gPSBzdGQ6Om1ha2VfdW5pcXVlPE1lbW9yeT4odm0sIGluaXRpYWwsIG1heGltdW0sIGZhaWxl
ZFRvUmVzZXJ2ZSk7CisgICAgICAgIGlmICghZmFpbGVkVG9SZXNlcnZlKSB7CisgICAgICAgICAg
ICBtX3Jlc2VydmVkTWVtb3J5ID0gV1RGTW92ZShtZW0pOworICAgICAgICB9CisgICAgfQorICAg
IG1fbW9kZSA9IE1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUoKTsKKwogICAgIFJFTEVBU0VfQVNT
RVJUKCEhbV9pbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tYXhpbXVtIHx8IG1fbWF4
aW11bSA+PSBtX2luaXRpYWwpOwogICAgIEFTU0VSVCghISp0aGlzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKaW5kZXggNmU3ZjUy
MTg5NDdlMDE2YjQ4ZmRmNjAxOWQzNjhhNTc1N2UzODViNy4uYTM3MWY5ODFlYzBiNmQ3MjdiZWU5
MmI5YWMwOWY1OThkZWUyNmM5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9y
eS5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKQEAgLTUyLDE3ICs1MywyNCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCghKnRoaXMpOwog
ICAgIH0KIAotICAgIE1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSwgYm9vbCBpc0ltcG9ydCk7CisgICAgTWVtb3J5SW5mb3JtYXRpb24oVk0mLCBQ
YWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wgaXNJbXBvcnQpOwogCiAg
ICAgUGFnZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KICAgICBQ
YWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQorICAgIGJvb2wg
aGFzUmVzZXJ2ZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc2VydmVkTWVtb3J5ICYmICEh
Km1fcmVzZXJ2ZWRNZW1vcnk7IH0KKyAgICBNZW1vcnkmIHJlc2VydmVkTWVtb3J5KCkgY29uc3Qg
eyByZXR1cm4gKm1fcmVzZXJ2ZWRNZW1vcnk7IH0KKyAgICBNZW1vcnk6Ok1vZGUgbW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgaXNJbXBvcnQoKSBjb25zdCB7IHJldHVy
biBtX2lzSW1wb3J0OyB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gISFtX2luaXRpYWw7IH0KIAogcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIGEgdW5pcXVl
X3B0ciBzbyB3ZSBjYW4gcGFzcyBNb2R1bGVJbmZvcm1hdGlvbiBhcyBjb25zdCBhbmQgc3RpbGwg
YmUKKyAgICAvLyBhYmxlIHRvIHRha2Ugb3duZXJzaGlwIG9mIHRoaXMuCisgICAgc3RkOjp1bmlx
dWVfcHRyPE1lbW9yeT4gbV9yZXNlcnZlZE1lbW9yeTsKICAgICBQYWdlQ291bnQgbV9pbml0aWFs
IHsgfTsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVtIHsgfTsKKyAgICBNZW1vcnk6Ok1vZGUgbV9t
b2RlIHsgTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGJvb2wgbV9pc0ltcG9y
dCB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwCmluZGV4IDUxNzczZDA2ZTYyMDEyM2I1YWMwNDI2MmE5MDhiYWIwYmY4
ZjE1OTkuLjc3MDQ1NWUzNzk5MTAyMzA4YWZmNWVjY2EzNjUxMmYzYjQ0ZmFhZGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0zMTYs
NyArMzE2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJ
bXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBBU1NFUlQoaW5pdGlhbFBhZ2VDb3VudCk7CiAg
ICAgQVNTRVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQgPj0gaW5pdGlh
bFBhZ2VDb3VudCk7CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9y
bWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1wb3J0KTsKKyAg
ICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKCptX3ZtLCBpbml0
aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IDU5ODBi
NTFlODc0MjIyMzc1NWNlMGMzZGYyYzE2YjFkZTllYzhmMTIuLjUzM2FkODNhN2UxYTYwMTZkMTA2
MjNhNGRjNGY5M2I4NjQ0OTJmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVk
ZSAiV2FzbU1vZHVsZVBhcnNlci5oIgogI2luY2x1ZGUgIldhc21WYWxpZGF0ZS5oIgorI2luY2x1
ZGUgIldhc21UcmFwU2lnbmFsSGFuZGxlci5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAj
aW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRs
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRyYXBTaWduYWxIYW5kbGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mYzI5YTllMmRmOGZmMGE4NDQ5MjI1YmZjNzc3MDg2ZmFhN2JhOGQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRyYXBT
aWduYWxIYW5kbGVyLmNwcApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
YXNtVHJhcFNpZ25hbEhhbmRsZXIuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUg
Ildhc21FeGNlcHRpb25UeXBlLmgiCisKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
eworCisKK25hbWVzcGFjZSB7CitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CitpbmxpbmUgdm9pZCBsb2coQXJncy4uLiBh
cmdzKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oYXJncy4uLik7Cit9
CisKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ1NlZ1ZIYW5kbGVyOworc3RhdGljIHN0
cnVjdCBzaWdhY3Rpb24gb2xkU2lnQnVzSGFuZGxlcjsKK3N0YXRpYyBib29sIGZhc3RIYW5kbGVy
SW5zdGFsbGVkIHsgZmFsc2UgfTsKK3N0YXRpYyBTdGF0aWNMb2NrIGNvZGVMb2NhdGlvbnNMb2Nr
Oworc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8Vk0qLCB2b2lk
Kiwgdm9pZCo+Pj4gY29kZUxvY2F0aW9uczsgLy8gKHZtLCBzdGFydCwgZW5kKQorCitzdGF0aWMg
dm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCkK
K3sKKyAgICBsb2coInN0YXJ0aW5nIGhhbmRsZXIiKTsKKyAgICBtY29udGV4dF90IGNvbnRleHQg
PSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpLT51Y19tY29udGV4dDsKKyAgICB2
b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29udGV4
dC0+X19zcy5fX3JpcCk7CisKKyAgICBsb2coInN0YXJ0OiAiLCBSYXdQb2ludGVyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSksICIsIGZh
dWx0aW5nIGFkZHJlc3M6ICIsIFJhd1BvaW50ZXIoZmF1bHRpbmdJbnN0cnVjdGlvbiksICIsIGVu
ZDogIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihlbmRPZkZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2wpKSk7CisgICAgLy8gRmlyc3Qgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2Ug
YXJlIGluIEpJVCBjb2RlIGJlZm9yZSB3ZSBjYW4gYXF1aXJlIGFueSBsb2Nrcy4gT3RoZXJ3aXNl
LAorICAgIC8vIHdlIG1pZ2h0IGhhdmUgY3Jhc2hlZCBpbiBjb2RlIHRoYXQgaXMgYWxyZWFkeSBo
b2xkaW5nIG9uZSBvZiB0aGUgbG9ja3Mgd2Ugd2FudCB0byBhcXVpcmUuCisgICAgaWYgKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSA8PSBm
YXVsdGluZ0luc3RydWN0aW9uCisgICAgICAgICYmIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpKSB7CisK
KyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoY29kZUxvY2F0aW9uc0xvY2spOworICAgICAgICBm
b3IgKGF1dG8gcmFuZ2UgOiBjb2RlTG9jYXRpb25zLmdldCgpKSB7CisgICAgICAgICAgICBWTSog
dm07CisgICAgICAgICAgICB2b2lkKiBzdGFydDsKKyAgICAgICAgICAgIHZvaWQqIGVuZDsKKyAg
ICAgICAgICAgIHN0ZDo6dGllKHZtLCBzdGFydCwgZW5kKSA9IHJhbmdlOworICAgICAgICAgICAg
bG9nKCJmdW5jdGlvbiBzdGFydDogIiwgUmF3UG9pbnRlcihzdGFydCksICIgZW5kOiAiLCBSYXdQ
b2ludGVyKGVuZCkpOworICAgICAgICAgICAgaWYgKHN0YXJ0IDw9IGZhdWx0aW5nSW5zdHJ1Y3Rp
b24gJiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8PSBlbmQpIHsKKyAgICAgICAgICAgICAgICBsb2co
ImZvdW5kIG1hdGNoIik7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4
Y2VwdGlvblN0dWIgPSB2bS0+aml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yih0aHJvd0V4Y2VwdGlv
bkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOworICAgICAgICAgICAgICAgIC8vIElmIGZvciB3aGF0
ZXZlciByZWFzb24gd2UgZG9uJ3QgaGF2ZSBhIHN0dWIgdGhlbiB3ZSBzaG91bGQganVzdCB0cmVh
dCB0aGlzIGxpa2UgYSByZWd1bGFyIGNyYXNoLgorICAgICAgICAgICAgICAgIGlmICghZXhjZXB0
aW9uU3R1Yi5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGxvZygic3R1YjogIiwgUmF3UG9pbnRlcihleGNlcHRpb25TdHViLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+X19zcy5fX3JzaSA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vz
cyk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+X19zcy5fX3JpcCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDY0X3Q+KGV4Y2VwdGlvblN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChzaWduYWwgPT0gU0lHU0VHVikKKyAgICAgICAgc2lnYWN0aW9uKHNpZ25hbCwg
Jm9sZFNpZ1NlZ1ZIYW5kbGVyLCBudWxscHRyKTsKKyAgICBlbHNlCisgICAgICAgIHNpZ2FjdGlv
bihzaWduYWwsICZvbGRTaWdCdXNIYW5kbGVyLCBudWxscHRyKTsKK30KKwordm9pZCByZWdpc3Rl
ckNvZGUoVk0mIHZtLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKQoreworICAgIGlmICghZmFzdE1l
bW9yeUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIExvY2tIb2xkZXIgbG9ja2VyKGNv
ZGVMb2NhdGlvbnNMb2NrKTsKKyAgICBjb2RlTG9jYXRpb25zLT5hZGQoc3RkOjptYWtlX3R1cGxl
KCZ2bSwgc3RhcnQsIGVuZCkpOworfQorCit2b2lkIHVucmVnaXN0ZXJDb2RlKFZNJiB2bSwgdm9p
ZCogc3RhcnQsIHZvaWQqIGVuZCkKK3sKKyAgICBpZiAoIWZhc3RNZW1vcnlFbmFibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihjb2RlTG9jYXRpb25zTG9jayk7
CisgICAgY29kZUxvY2F0aW9ucy0+cmVtb3ZlKHN0ZDo6bWFrZV90dXBsZSgmdm0sIHN0YXJ0LCBl
bmQpKTsKK30KKworYm9vbCBmYXN0TWVtb3J5RW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGZhc3RI
YW5kbGVySW5zdGFsbGVkOworfQorCit2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQoreworICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsK
KyAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisKKyAgICAgICAgYWN0aW9uLnNhX3Np
Z2FjdGlvbiA9IHRyYXBIYW5kbGVyOworICAgICAgICBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFz
ayk7CisgICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgICAgIAorICAg
ICAgICBpZiAoIXNpZ2FjdGlvbihTSUdCVVMsICZhY3Rpb24sICZvbGRTaWdCdXNIYW5kbGVyKSkg
eworICAgICAgICAgICAgZmFzdEhhbmRsZXJJbnN0YWxsZWQgPSB0cnVlOworICAgICAgICAgICAg
Y29kZUxvY2F0aW9ucy5jb25zdHJ1Y3QoKTsKKyAgICAgICAgfQorCisgICAgfSk7Cit9CisgICAg
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVHJhcFNp
Z25hbEhhbmRsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UcmFwU2lnbmFs
SGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3ODFjMjg0MDYyNmRkYTlhYzA1NjhlYmU1OGExMTcyZGM4
YjYxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VHJhcFNpZ25hbEhhbmRsZXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CisKK3ZvaWQgcmVn
aXN0ZXJDb2RlKFZNJiB2bSwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7Cit2b2lkIHVucmVnaXN0
ZXJDb2RlKFZNJiB2bSwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7CisKK2Jvb2wgZmFzdE1lbW9y
eUVuYWJsZWQoKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5hYmxlRmFzdE1lbW9yeSgpOwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNhbGxlZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q2FsbGVlLmNwcAppbmRleCBjMjc3MTJhMTBmZmZjOGRmM2YxZWI2MDZiMDhjZmM5ZjA3Zjhl
MzZiLi4xNjlkNTg4NjlmYjhlYWEzNTgxYTBjN2MyZGEyOWIyNzQyNTRkMzg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNw
cApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVHJhcFNpZ25hbEhhbmRsZXIuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTQzLDExICs0NCwxMyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDYWxs
ZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQp
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogCiAgICAgbV9lbnRyeXBvaW50ID0gV1RG
TW92ZShlbnRyeXBvaW50KTsKKyAgICBXYXNtOjpyZWdpc3RlckNvZGUodm0sIG1fZW50cnlwb2lu
dC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgbV9l
bnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQo
KSk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
CiB7CiAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpT
V2ViQXNzZW1ibHlDYWxsZWUqPihjZWxsKTsKKyAgICBXYXNtOjp1bnJlZ2lzdGVyQ29kZSgqY2Vs
bC0+dm0oKSwgdGhpc09iamVjdC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCku
ZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCB0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQuY29t
cGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKICAgICB0aGlz
T2JqZWN0LT5KU1dlYkFzc2VtYmx5Q2FsbGVlOjp+SlNXZWJBc3NlbWJseUNhbGxlZSgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCA3NjNkYzQ5NGNlNWE0NzgyZDZl
Njg0N2Y4MjI1NjYxYjM1YmRhN2FiLi40MTEyZDM1MTJkYmQ5OTY0OGYzYTNhNDYxN2ExNDMyYTgy
OWFkM2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTIzNSwxMCArMjM1
LDE1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgewogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKICAgICAgICAgICAg
IC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KLSAg
ICAgICAgICAgIGJvb2wgZmFpbGVkOwotICAgICAgICAgICAgV2FzbTo6TWVtb3J5IG1lbW9yeSht
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1v
cnkubWF4aW11bSgpLCBmYWlsZWQpOwotICAgICAgICAgICAgaWYgKGZhaWxlZCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKKyAgICAgICAgICAgIFdhc206
Ok1lbW9yeSBtZW1vcnk7CisgICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5
Lmhhc1Jlc2VydmVkTWVtb3J5KCkgJiYgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LnJlc2VydmVk
TWVtb3J5KCkpCisgICAgICAgICAgICAgICAgbWVtb3J5ID0gV1RGTW92ZShtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkucmVzZXJ2ZWRNZW1vcnkoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBib29sIGZhaWxlZDsKKyAgICAgICAgICAgICAgICBXYXNtOjpNZW1vcnkgbWVt
b3J5KHZtLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkubWF4aW11bSgpLCBmYWlsZWQpOworICAgICAgICAgICAgICAgIGlmIChmYWls
ZWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwKICAgICAg
ICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXVEZNb3ZlKG1lbW9y
eSkpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAppbmRleCA2Yzg4N2Fm
NTk3YTg2NTMyOWNmYjQzZjVlZGI0N2I0MWU2NjA5ZWM4Li42ODI5OWUwNWNhMmExNTBmY2MxYWFl
MTdiNTk5ZDBlZTM1YTI4MjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcApAQCAtOTcs
NyArOTcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYwogICAgIH0KIAogICAgIGJvb2wgZmFp
bGVkOwotICAgIFdhc206Ok1lbW9yeSBtZW1vcnkoaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBh
Z2VDb3VudCwgZmFpbGVkKTsKKyAgICBXYXNtOjpNZW1vcnkgbWVtb3J5KHZtLCBpbml0aWFsUGFn
ZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBmYWlsZWQpOwogICAgIGlmIChmYWlsZWQpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302971</attachid>
            <date>2017-02-28 12:56:15 -0800</date>
            <delta_ts>2017-02-28 18:50:13 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-162693-20170228125318.patch</filename>
            <type>text/plain</type>
            <size>70475</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ODFlYWQzNTM4YmU0Yjc0YzA1ZjlmMDU4Y2UzYTRiNTcyNjgxYTU2Li4zNDRlMmI3ZmExOGRkZGYx
ZGYyNjQ4MWRlYzM0YjhmMzQ1Y2EyNjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAxNy0wMi0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBXQVNNIHNob3VsZCBzdXBwb3J0IGZhc3RlciBsb2Fkcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIpOgorICAgICAgICAq
IGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoanNjbWFpbik6
CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQ
cmVwYXJlUG9pbnRlcik6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmltcG9ydEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbjo6aGFzTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dh
c21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1tYXBCeXRlcyk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjphdmFpbGFibGVGYXN0TWVtb3JpZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
ZW1vcnk6OnRyeUdldEZhc3RNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OnJl
bGVhc2VGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6On5NZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Omdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmR1bXApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1ha2VTdHJpbmcpOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6TWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlv
bi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZv
cm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnJlc2VydmVkTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Om1vZGUpOgorICAgICAgICAq
IHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6
CisgICAgICAgICogd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZWdpc3Rl
ckNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp1bnJlZ2lzdGVyQ29kZSk6CisgICAgICAgIChK
U0M6Oldhc206OmZhc3RNZW1vcnlFbmFibGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5hYmxl
RmFzdE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxl
ZS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJs
eU1lbW9yeSk6CisKIDIwMTctMDItMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHN0ZDo6dHVwbGVzIGFz
IGtleXMgaW4gSGFzaE1hcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjMTIzYjA2
YWZkOTVhOTk2YzdlYjczYzlhN2U1Y2FjYjFkZWM0ZTJlLi4zNWRjMTdhMWNlOTk2NTNhNzA5NDM5
OGM4ZmIwODE2YmFmNmFhZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMy
MCw2ICsxMzIwLDEwIEBACiAJCTUzNTU1NzE2MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1
NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLzsgfTsKIAkJNTM3MEI0RjUx
QkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTM3MEI0RjMxQkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UuY3BwICovOyB9OwogCQk1MzcwQjRGNjFCRjI2MjA1MDA1QzQwRkMgLyog
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3MEI0RjQxQkYyNUVBMjAwNUM0
MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCAqLzsg
fTsKKwkJNTM4MUI5MzcxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM4MUI5
MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwICovOyB9Owor
CQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM4MUI5MzgxRTYw
RTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLzsgfTsKKwkJNTM4MUI5
NDAxRTY1REZFQjAwOTBGNzk0IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODFCOTNGMUU2NURGRUIwMDkw
Rjc5NCAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi87IH07CisJCTUzODNBQTMwMUU2NUU4
QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAv
KiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLzsgfTsKIAkJNTM5MTdFN0IxQjc5MDZGQTAw
MEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzkxN0U3QTFCNzkw
NkU0MDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMu
aCAqLzsgfTsKIAkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlGQjhCOTFD
OTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLzsgfTsKIAkJNTNCMEJFMzQxRTU2
MUFDOTAwQThGQzI5IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNCMEJFMzMxRTU2MUFDOTAwQThGQzI5
IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwICovOyB9OwpAQCAtMzc3Niw2ICszNzgwLDEw
IEBACiAJCTUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21NZW1vcnkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzcwQjRGMzFCRjI1RUEyMDA1QzQwRkMgLyogQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM3MEI0RjQxQkYyNUVB
MjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzgxQjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM4MUI5MzgxRTYwRTk3RDAwOTBG
Nzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MzgxQjkzRjFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzODNBQTJGMUU2NUU4QTEwMEE1
MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOyBwYXRoID0ganMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
OTE3RTdBMUI3OTA2RTQwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTgzMUI3OTFD
QjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRBcnJheVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0
aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsK
QEAgLTYyMDEsNiArNjIwOSw4IEBACiAJCQkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdh
c21Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBX
YXNtTW9kdWxlUGFyc2VyLmggKi8sCiAJCQkJQURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdh
c21QYWdlQ291bnQuY3BwICovLAorCQkJCTUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNt
RmF1bHRTaWduYWxIYW5kbGVyLmNwcCAqLywKKwkJCQk1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQg
LyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oICovLAogCQkJCTc5Qjc1OTczMURGQTRDNjAwMDUy
MTc0QyAvKiBXYXNtUGFnZUNvdW50LmggKi8sCiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2
IC8qIFdhc21QYXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2Fz
bVBsYW4uY3BwICovLApAQCAtNzc4OCw2ICs3Nzk4LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJ
CTc5RTQyM0UwMURFRTY1MzIwMDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcCAqLywK
IAkJCQk3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5oICov
LAorCQkJCTUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmNwcCAqLywKKwkJCQk1MzgxQjkzRjFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5oICovLAogCQkJCUFEMkZDQkE2MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yLmNwcCAqLywKIAkJCQlBRDJGQ0JBNzFEQjU4REE0MDBCM0U3MzYgLyog
SlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oICovLAogCQkJCTc5NkZCNDM5MURGRjhDM0YwMDM5
Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovLApAQCAtNzkyNyw2ICs3OTM5LDcgQEAK
IAkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCMzg3OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2Fs
bGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzODFCOTQwMUU2NURGRUIwMDkw
Rjc5NCAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04MjQ2LDYgKzgyNTksNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFE
QTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
RDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkUxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJGMTU4RDE5QjdBNTMxMDA2OTVERDAgLyogREZH
QmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0QwMDE5QURBNDEwMDA2
QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAzNiw2ICsx
MDA1MCw3IEBACiAJCQkJMEZDODQxNjgxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlw
ZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1NCAv
KiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCRDFC
NzFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTUzODFCOTM3MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzAwQjdCMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRl
Z2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjg5OEYzMTFC
Mjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZDOTdGM0QxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRh
dGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDQzNyw2ICsx
MDQ1Miw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVy
QVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjEzNzU3MUJCMTFFRjkwMENENTEwMCAvKiBN
YWNyb0Fzc2VtYmxlckFSTTY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjkwMDlDMTc5NzZD
NjAwMDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUzODNBQTMwMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNkRCN0VDMUQ2MTdEMTEwMENEQkY4RSAvKiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU2OEM2MzgxQjkwREUwQjAwNDJC
Q0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0
QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5r
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKaW5kZXggZGU0
OGU2MmRkYWI4ZWZhZjhiZTMxODI4NzFiZThkNzA5OWIxN2M3Zi4uNTQ2ZTE0YzkwNDhlOGQzMzhh
NTgyNjQ3Y2Y3Y2FkZjlkZDM0MWNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1
bmtzLmNwcApAQCAtODIsNiArODIsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5r
czo6Y3RpU3R1YihWTSogdm0sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKICAgICByZXR1cm4g
ZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1
bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ1RJU3R1Yk1hcDo6aXRlcmF0b3IgZW50cnkg
PSBtX2N0aVN0dWJNYXAuZmluZChnZW5lcmF0b3IpOworICAgIGlmIChlbnRyeSA9PSBtX2N0aVN0
dWJNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAg
ICByZXR1cm4gZW50cnktPnZhbHVlOworfQorCiB2b2lkIEpJVFRodW5rczo6ZmluYWxpemUoSGFu
ZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCopCiB7CiAgICAgYXV0byogbmF0aXZlRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKaW5kZXggYWRkY2YyMzBjMzQ1ZDQy
NzFiNjM3ZjA4Yjk0YzQxNmEzZWQxODJhNC4uN2UwNmU3MTYyMzUzYTBiNzNmM2JjMDJlNTQyZjcz
YjgyZjY2ZTEwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVu
a3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCkBAIC01OCw2
ICs1OCw3IEBAIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlVGFp
bENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNKik7ICAgIAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGN0aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvcik7CiAKICAgICBOYXRpdmVFeGVjdXRh
YmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9u
IGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGhvc3RGdW5jdGlvblN0dWIoVk0qLCBOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29u
c3RydWN0b3IsIFRodW5rR2VuZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0
dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggYWVkZjQy
ZTE3Y2MyYmRlMDE0YWQ1YjhkNjI4NjIyYWVjMTQ1ZTdlMi4uMjRkMmJhZWFlN2NhNGIyNDZjN2Ri
Y2UwNzY0NTgyZjY0MzQ5MGQxYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTczLDYgKzczLDcg
QEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgog
I2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CkBAIC0zNzY2LDYgKzM3NjcsNyBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOwogICAgIHN0YXJ0VGltZW91dFRocmVhZElmTmVlZGVkKCk7CisgICAg
SlNDOjpXYXNtOjplbmFibGVGYXN0TWVtb3J5KCk7CiAKICAgICBpbnQgcmVzdWx0OwogICAgIHJl
c3VsdCA9IHJ1bkpTQygKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRl
eCBjNGJmOGZhZGU4YWFlMzEwZjJiNmEyNzcxMTMxYmJlZGEyMWIyY2JjLi4yMzk5Mzg1M2EwNjUz
ZGEzZTNkMzM3MDRkY2IxNjFjZTk5ZTY0Y2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCkBAIC00MjYsNiArNDI2LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRp
b25TdHJpbmc7CiAgICAgXAogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHksIHRydWUsIE5vcm1h
bCwgIkV4cG9zZSB0aGUgV2ViQXNzZW1ibHkgZ2xvYmFsIG9iamVjdC4iKSBcCiAgICAgdihib29s
LCBzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwg
dGhlIE1lbW9yeSBvYmplY3Qgd29uJ3QgbW1hcCB0aGUgZnVsbCAnbWF4aW11bScgcmFuZ2UgYW5k
IGluc3RlYWQgd2lsbCBhbGxvY2F0ZSB0aGUgbWluaW11bSByZXF1aXJlZCBhbW91bnQuIikgXAor
ICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlNZW1vcnlNb2RlRnV6eiwgZmFsc2UsIE5vcm1hbCwg
IklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0IHdpbGwgZnV6eiBlYWNoIG1tYXAuIikKIAogZW51
bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAppbmRleCBhNTBmOWRiMGEwYzMzZTkwNmRjNmVjMGViZWRhNjcwN2VhNGE5
ZmMzLi5hMDM5ZGRiMDBmZmIwY2MyYmEyZjc1NzljNWYxMzU3ZjI0YjI0M2QzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yNDAsNiArMjQwLDcgQEAgVk06OlZNKFZNVHlw
ZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAg
ICB3ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDYWxs
ZWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWJBc3NlbWJs
eVRvSlNDYWxsZWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB3ZWJBc3NlbWJseUNvZGVC
bG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWJBc3NlbWJseVRvSlNDYWxsZWUu
c2V0KCp0aGlzLCBXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmNyZWF0ZSgqdGhpcywgd2ViQXNzZW1i
bHlUb0pTQ2FsbGVlU3RydWN0dXJlLmdldCgpKSk7CiAjZW5kaWYKICAgICBtb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAppbmRleCA3MzJiMjZlNGU0ZjMwMWJhM2IwYzFlNzMwODNhZjkzYjQ4ODgwYjIwLi4x
YTQxZTQ0ZjZhM2ViZTYwYTM0YTZjNDhiMWZiYjU5Yzk4MWY2N2M3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKQEAgLTMzMyw2ICszMzMsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q2FsbGVlU3RydWN0
dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVjdHVy
ZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZTsK
ICAgICBTdHJvbmc8SlNDZWxsPiB3ZWJBc3NlbWJseVRvSlNDYWxsZWU7CiAjZW5kaWYKICAgICBT
dHJvbmc8U3RydWN0dXJlPiBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44YWQ0MWYxZGM2NGFmNzM3MGZlMDg0NWVhMzJmNTkzNzUzMzU3MzY0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgi
CisjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgorI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKKworY2xhc3MgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNDZWxsIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3Rh
dGljIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEJhZzxDYWxsTGlua0lu
Zm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgZXhpdFN0
dWJzLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJs
eUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQpKSkgSlNXZWJB
c3NlbWJseUNvZGVCbG9jayh2bSwgc3RkOjpmb3J3YXJkPEJhZzxDYWxsTGlua0luZm8+PihjYWxs
TGlua0luZm9zKSwgc3RkOjpmb3J3YXJkPFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPj4oZXhp
dFN0dWJzKSwgbW9kZSwgY2FsbGVlQ291bnQpOworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9y
dENvdW50KCkgY29uc3QgeyByZXR1cm4gbV93YXNtRXhpdFN0dWJzLnNpemUoKTsgfQorCisgICAg
SlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgeworICAgICAgICBSRUxFQVNF
X0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKKyAg
ICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlv
bkltcG9ydENvdW50KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9j
YWxsZWVDb3VudCk7CisgICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVlSW5kZXhdLmdldCgp
OworICAgIH0KKworICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVl
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25J
bXBvcnRDb3VudCgpKTsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbklu
ZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENvdW50KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7CisgICAgICAgIHJldHVybiBjYWxsZWVzKClb
Y2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dEpTRW50cnlwb2ludENhbGxlZShWTSYgdm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiBjYWxsZWUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxs
ZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOworICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXhd
LnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFdhc21FbnRyeXBv
aW50Q2FsbGVlKFZNJiB2bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxs
ZWUqIGNhbGxlZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwg
bV9jYWxsZWVDb3VudCk7CisgICAgICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVl
Q291bnRdLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICB9CisKKyAgICBXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nh
c3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiwgQmFnPENhbGxMaW5rSW5mbz4mJiwgVmVj
dG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIFdhc206Ok1lbW9yeTo6TW9kZSwgdW5zaWduZWQg
Y2FsbGVlQ291bnQpOworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisKKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mQ2FsbGVlcygpCisgICAgeworICAg
ICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseUNhbGxlZT4pPihzaXplb2YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaykpOwor
ICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbnVtQ2Fs
bGVlcykKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZzZXRPZkNhbGxlZXMoKSArIHNpemVvZihX
cml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogbnVtQ2FsbGVlcyAqIDI7CisgICAg
fQorCisgICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5
KCkgb3ZlcnJpZGU7CisgICAgfTsKKworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9k
dWxlPiBtX21vZHVsZTsKKyAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25h
bEZpbmFsaXplcjsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CisgICAg
VmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1fd2FzbUV4aXRTdHViczsKKyAgICBXYXNtOjpN
ZW1vcnk6Ok1vZGUgbV9tb2RlOworICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCAy
ZmYzMDUwMWY2NmYxYWNkYWY1ZGQ4Zjc4ZjVhNTIyOWVhZWI4YjkxLi5iMjU3MDhmNzcxNzM4Yzhi
MTQwZDMzMTY3OWFiMWUyZWE2YzkzMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0yNTksNyArMjU5LDcgQEAgQjNJUkdlbmVy
YXRvcjo6QjNJUkdlbmVyYXRvcihWTSYgdm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBQcm9jZWR1cmUmIHAKICAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJl
Z0luZm8gOiBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnMpCiAgICAgICAgIG1fcHJvYy5waW5SZWdp
c3RlcihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CiAKLSAgICBpZiAoaW5mby5oYXNNZW1vcnkoKSkg
eworICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0No
ZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIsIHVu
c2lnbmVkKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBpbm5lZEdQUiwgbV9t
ZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7CkBAIC00NTQsOSArNDU0LDEyIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSkgLT4gUGFydGlhbFJlCiAKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNr
QW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0
LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7Ci0gICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQ
UiAmJiBtX21lbW9yeVNpemVHUFIpOwotICAgIEFTU0VSVChzaXplT2ZPcGVyYXRpb24gKyBvZmZz
ZXQgPiBvZmZzZXQpOwotICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0No
ZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6
ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7
CisgICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09IE1lbW9yeTo6TW9kZTo6Qm91bmRzQ2hl
Y2tpbmcpIHsKKyAgICAgICAgQVNTRVJUKG1fbWVtb3J5U2l6ZUdQUik7CisgICAgICAgIEFTU0VS
VChzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgPiBvZmZzZXQpOworICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBw
b2ludGVyLCBtX21lbW9yeVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOwor
ICAgIH0KICAgICBwb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBaRXh0MzIsIE9yaWdpbigpLCBwb2ludGVyKTsKICAgICByZXR1cm4gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxXYXNtQWRkcmVzc1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBwb2ludGVy
LCBtX21lbW9yeUJhc2VHUFIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAppbmRleCBkNzkwMTRmMjdmYWY5MDk2OGYyMWY1Zjli
NGQ3YjhjYzc4MTAzOWUzLi5lNjA0YWIyZDQ3MDkwYTdlOTQzMTlhMTJjYjg3MWU0ZTc0MzcyNzE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNs
dWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJX
YXNtU2lnbmF0dXJlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGY5NjEyM2RiM2NmZWUzMjM5YmMwYmNmYzRhNDRhNGUyOTMwYmQ4
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVs
dFNpZ25hbEhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ildhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKwor
I2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1
ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20geworCisKK25hbWVzcGFjZSB7CitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7
Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ1NlZ1ZIYW5kbGVyOworc3RhdGlj
IHN0cnVjdCBzaWdhY3Rpb24gb2xkU2lnQnVzSGFuZGxlcjsKK3N0YXRpYyBib29sIGZhc3RIYW5k
bGVySW5zdGFsbGVkIHsgZmFsc2UgfTsKK3N0YXRpYyBTdGF0aWNMb2NrIGNvZGVMb2NhdGlvbnNM
b2NrOworc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8Vk0qLCB2
b2lkKiwgdm9pZCo+Pj4gY29kZUxvY2F0aW9uczsgLy8gKHZtLCBzdGFydCwgZW5kKQorCitzdGF0
aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4
dCkKK3sKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3RhcnRpbmcgaGFuZGxlciIpOworICAg
IG1jb250ZXh0X3QgY29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1Y29udGV4dCkt
PnVjX21jb250ZXh0OworICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihjb250ZXh0LT5fX3NzLl9fcmlwKTsKKworICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJzdGFydDogIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFy
dE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkpLCAiLCBmYXVsdGluZyBhZGRyZXNzOiAiLCBS
YXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1Y3Rpb24pLCAiLCBlbmQ6ICIsIFJhd1BvaW50ZXIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSkpOwor
ICAgIC8vIEZpcnN0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFyZSBpbiBKSVQgY29kZSBiZWZv
cmUgd2UgY2FuIGFxdWlyZSBhbnkgbG9ja3MuIE90aGVyd2lzZSwKKyAgICAvLyB3ZSBtaWdodCBo
YXZlIGNyYXNoZWQgaW4gY29kZSB0aGF0IGlzIGFscmVhZHkgaG9sZGluZyBvbmUgb2YgdGhlIGxv
Y2tzIHdlIHdhbnQgdG8gYXF1aXJlLgorICAgIGlmIChyZWludGVycHJldF9jYXN0PHZvaWQqPihz
dGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkgPD0gZmF1bHRpbmdJbnN0cnVjdGlvbgor
ICAgICAgICAmJiBmYXVsdGluZ0luc3RydWN0aW9uIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSkgeworCisgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKKyAgICAgICAgZm9yIChhdXRvIHJhbmdlIDogY29k
ZUxvY2F0aW9ucy5nZXQoKSkgeworICAgICAgICAgICAgVk0qIHZtOworICAgICAgICAgICAgdm9p
ZCogc3RhcnQ7CisgICAgICAgICAgICB2b2lkKiBlbmQ7CisgICAgICAgICAgICBzdGQ6OnRpZSh2
bSwgc3RhcnQsIGVuZCkgPSByYW5nZTsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJmdW5jdGlvbiBzdGFydDogIiwgUmF3UG9pbnRlcihzdGFydCksICIgZW5kOiAiLCBSYXdQb2lu
dGVyKGVuZCkpOworICAgICAgICAgICAgaWYgKHN0YXJ0IDw9IGZhdWx0aW5nSW5zdHJ1Y3Rpb24g
JiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8PSBlbmQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiZm91bmQgbWF0Y2giKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZXhjZXB0aW9uU3R1YiA9IHZtLT5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHVi
KHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcik7CisgICAgICAgICAgICAgICAg
Ly8gSWYgZm9yIHdoYXRldmVyIHJlYXNvbiB3ZSBkb24ndCBoYXZlIGEgc3R1YiB0aGVuIHdlIHNo
b3VsZCBqdXN0IHRyZWF0IHRoaXMgbGlrZSBhIHJlZ3VsYXIgY3Jhc2guCisgICAgICAgICAgICAg
ICAgaWYgKCFleGNlcHRpb25TdHViLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0dWI6ICIsIFJhd1BvaW50
ZXIoZXhjZXB0aW9uU3R1Yi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPl9fc3MuX19yc2kgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oRXhjZXB0
aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPl9fc3MuX19yaXAgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihleGNlcHRpb25TdHVi
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2lnbmFsID09IFNJR1NF
R1YpCisgICAgICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRTaWdTZWdWSGFuZGxlciwgbnVsbHB0
cik7CisgICAgZWxzZQorICAgICAgICBzaWdhY3Rpb24oc2lnbmFsLCAmb2xkU2lnQnVzSGFuZGxl
ciwgbnVsbHB0cik7Cit9CisKK3ZvaWQgcmVnaXN0ZXJDb2RlKFZNJiB2bSwgdm9pZCogc3RhcnQs
IHZvaWQqIGVuZCkKK3sKKyAgICBpZiAoIWZhc3RNZW1vcnlFbmFibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihjb2RlTG9jYXRpb25zTG9jayk7CisgICAgY29k
ZUxvY2F0aW9ucy0+YWRkKHN0ZDo6bWFrZV90dXBsZSgmdm0sIHN0YXJ0LCBlbmQpKTsKK30KKwor
dm9pZCB1bnJlZ2lzdGVyQ29kZShWTSYgdm0sIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCit7Cisg
ICAgaWYgKCFmYXN0TWVtb3J5RW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgTG9ja0hv
bGRlciBsb2NrZXIoY29kZUxvY2F0aW9uc0xvY2spOworICAgIGNvZGVMb2NhdGlvbnMtPnJlbW92
ZShzdGQ6Om1ha2VfdHVwbGUoJnZtLCBzdGFydCwgZW5kKSk7Cit9CisKK2Jvb2wgZmFzdE1lbW9y
eUVuYWJsZWQoKQoreworICAgIHJldHVybiBmYXN0SGFuZGxlckluc3RhbGxlZDsKK30KKwordm9p
ZCBlbmFibGVGYXN0TWVtb3J5KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24g
YWN0aW9uOworCisgICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSB0cmFwSGFuZGxlcjsKKyAg
ICAgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOworICAgICAgICBhY3Rpb24uc2FfZmxh
Z3MgPSBTQV9TSUdJTkZPOworICAgICAgICAKKyAgICAgICAgaWYgKCFzaWdhY3Rpb24oU0lHQlVT
LCAmYWN0aW9uLCAmb2xkU2lnQnVzSGFuZGxlcikpIHsKKyAgICAgICAgICAgIGZhc3RIYW5kbGVy
SW5zdGFsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvZGVMb2NhdGlvbnMuY29uc3RydWN0KCk7
CisgICAgICAgIH0KKworICAgIH0pOworfQorICAgIAorfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3
ODFjMjg0MDYyNmRkYTlhYzA1NjhlYmU1OGExMTcyZGM4YjYxYzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKQEAg
LTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBW
TTsKKworbmFtZXNwYWNlIFdhc20geworCit2b2lkIHJlZ2lzdGVyQ29kZShWTSYgdm0sIHZvaWQq
IHN0YXJ0LCB2b2lkKiBlbmQpOwordm9pZCB1bnJlZ2lzdGVyQ29kZShWTSYgdm0sIHZvaWQqIHN0
YXJ0LCB2b2lkKiBlbmQpOworCitib29sIGZhc3RNZW1vcnlFbmFibGVkKCk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCBkYzYzNDc0NDIyYmZlNjAzM2Q4YjJkMjIxYmI3ZWM1
YzExMDU2ODYyLi4xZmM1NzRlOTNkNzI0N2M2NGE4ZmEzMzRmNjIyNWQyYzcyNzFmNjQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC0yNTYsNyArMjU2LDYgQEAg
c3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICB9CiAKICAgICB1aW50MzJfdCBpbXBvcnRG
dW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzLnNpemUoKTsgfQotICAgIGJvb2wgaGFzTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gISFtZW1v
cnk7IH0KIAogICAgIH5Nb2R1bGVJbmZvcm1hdGlvbigpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKaW5kZXggYWFkOTFjMTNlM2EzMDE2ODM4ZmIwMzg0ZGFi
NWE0MmI0Nzc0M2QyOC4uMmE1NDZhMjdmMWU3ZDhlZGM2MDA3MDcxMGJlZTBmYWMyYjYzZGMzYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKQEAgLTI4LDQxICsy
OCwxMTMgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIldhc21GYXVs
dFNpZ25hbEhhbmRsZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVy
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIG5hbWVzcGFjZSB7Ci1j
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKK2NvbnN0IGJvb2wgdmVyYm9zZSA9IHRydWU7CiB9
CiAKLXZvaWQgTWVtb3J5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CitpbmxpbmUgYm9v
bCBNZW1vcnk6Om1tYXBCeXRlcyhzaXplX3QgYnl0ZXMpCiB7Ci0gICAgU3RyaW5nIG1lbW9yeUhl
eDsKLSAgICBXVEY6OmFwcGVuZFVuc2lnbmVkNjRBc0hleCgodWludDY0X3QpKHVpbnRwdHJfdClt
X21lbW9yeSwgbWVtb3J5SGV4KTsKLSAgICBvdXQucHJpbnQoIk1lbW9yeSBhdCAweCIsIG1lbW9y
eUhleCwgIiwgc2l6ZSAiLCBtX3NpemUsICJCIGNhcGFjaXR5ICIsIG1fbWFwcGVkQ2FwYWNpdHks
ICJCLCBpbml0aWFsICIsIG1faW5pdGlhbCwgIiBtYXhpbXVtICIsIG1fbWF4aW11bSwgIiBtb2Rl
ICIsIG1ha2VTdHJpbmcobV9tb2RlKSk7CisgICAgZGF0YUxvZ0lmKHZlcmJvc2UsICJBdHRlbXB0
aW5nIHRvIG1tYXAgIiwgYnl0ZXMsICIgYnl0ZXM6ICIpOworICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBuaWNlIGlmIHdlIGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MDAKKyAgICB2b2lkKiByZXN1bHQgPSBt
bWFwKG51bGxwdHIsIGJ5dGVzLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0x
LCAwKTsKKyAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgImZhaWxlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJzdWNjZWVkZWQiKTsKKyAgICBtX21lbW9yeSA9IHJlc3Vs
dDsKKyAgICBtX21hcHBlZENhcGFjaXR5ID0gYnl0ZXM7CisgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWNvbnN0IGNoYXIqIE1lbW9yeTo6bWFrZVN0cmluZyhNb2RlIG1vZGUpIGNvbnN0CisvLyBXZSB1
c2UgdGhpcyBhcyBhIGhldXJpc3RpYyB0byBndWVzcyB3aGljaCBtb2RlIHdlIHNob3VsZCBhc3N1
bWUgd2UgYXJlIGdvaW5nIHRvIGdldCB3aGVuIGEgbW9kdWxlIGltcG9ydHMgYSBtZW1vcnkuCitz
dGF0aWMgTWVtb3J5OjpNb2RlIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlIHsgTWVtb3J5OjpNb2Rl
OjpTaWduYWxpbmcgfTsKKworTWVtb3J5OjpNb2RlIE1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUo
KQogewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgTW9kZTo6Qm91bmRzQ2hlY2tpbmc6
IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOworICAgIHJldHVybiBsYXN0QWxsb2NhdGVkTWVtb3J5
TW9kZTsKK30KKworc3RhdGljX2Fzc2VydChzaXplb2YodWludDY0X3QpID09IHNpemVvZihzaXpl
X3QpLCAiV2UgcmVseSBvbiBhbGxvd2luZyB0aGUgbWF4aW11bSBzaXplIG9mIE1lbW9yeSB3ZSBt
YXAgdG8gYmUgMl4zMyB3aGljaCBpcyBsYXJnZXIgdGhhbiBmaXRzIGluIGEgMzItYml0IGludGVn
ZXIgdGhhdCB3ZSdkIHBhc3MgdG8gbXByb3RlY3QgaWYgdGhpcyBkaWRuJ3QgaG9sZC4iKTsKKwor
c3RhdGljIGNvbnN0IHNpemVfdCBmYXN0TWVtb3J5TWFwcGVkQnl0ZXMgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCkgKiAyOyAvLyBwb2ludGVyIG1heCArIG9mZnNldCBtYXgu
IFRoaXMgaXMgYWxsIHdlIG5lZWQgc2luY2UgYSBsb2FkIHN0cmFkZGxpbmcgcmVhZGFibGUgbWVt
b3J5IHdpbGwgdHJhcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhGYXN0TWVtb3JpZXMgPSA0
Oworc3RhdGljIHVuc2lnbmVkIGFsbG9jYXRlZEZhc3RNZW1vcmllcyB7IDAgfTsKK2lubGluZSBE
ZXF1ZTx2b2lkKiwgbWF4RmFzdE1lbW9yaWVzPiYgYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGVxdWU8dm9pZCosIG1heEZhc3RNZW1vcmllcz4+
IGF2YWlsYWJsZUZhc3RNZW1vcmllczsKKyAgICByZXR1cm4gYXZhaWxhYmxlRmFzdE1lbW9yaWVz
OworfQorCitib29sIE1lbW9yeTo6dHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0pCit7CisgICAgLy8g
V2UgbWlnaHQgR0MgaGVyZSBzbyB3ZSBzaG91bGQgYmUgaG9sZGluZyB0aGUgQVBJIGxvY2suCisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN5bmNyb25vdXNseSB0cmlnZ2VyIHRo
ZSBHQyBmcm9tIGFub3RoZXIgdGhyZWFkLgorICAgIEFTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nQVBJTG9jaygpKTsKKyAgICBpZiAoIWZhc3RNZW1vcnlFbmFibGVkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBoYXZlIGEgc3R1
YiBwcmlvciB0byBydW5uaW5nIGNvZGUuCisgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlv
bkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOworCisgICAgQVNTRVJUKGFsbG9jYXRlZEZhc3RNZW1v
cmllcyA8PSBtYXhGYXN0TWVtb3JpZXMpOworICAgIGlmICghYXZhaWxhYmxlRmFzdE1lbW9yaWVz
KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fbWVtb3J5ID0gYXZhaWxhYmxlRmFzdE1lbW9yaWVz
KCkudGFrZUZpcnN0KCk7CisgICAgICAgIG1fbW9kZSA9IE1vZGU6OlNpZ25hbGluZzsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuICIiOworCisgICAgLy8gSWYgd2UgaGF2ZSBhbGxvY2F0ZWQgYWxsIHRoZSBm
YXN0IG1lbW9yaWVzLi4uIHRvbyBiYWQuCisgICAgaWYgKGFsbG9jYXRlZEZhc3RNZW1vcmllcyA9
PSBtYXhGYXN0TWVtb3JpZXMpIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgYSByZWFzb25hYmxlIGNo
YW5jZSB0aGF0IGFub3RoZXIgbW9kdWxlIGhhcyBkaWVkIGJ1dCBoYXMgbm90IGJlZW4gY29sbGVj
dGVkIHlldC4gRG9uJ3QgbG9zZSBob3BlIHlldCEKKyAgICAgICAgdm0uaGVhcC5jb2xsZWN0U3lu
YygpOworICAgICAgICBpZiAoIWF2YWlsYWJsZUZhc3RNZW1vcmllcygpLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgbV9tZW1vcnkgPSBhdmFpbGFibGVGYXN0TWVtb3JpZXMoKS50YWtlRmlyc3Qo
KTsKKyAgICAgICAgICAgIG1fbW9kZSA9IE1vZGU6OlNpZ25hbGluZzsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAobW1hcEJ5dGVzKGZhc3RNZW1vcnlNYXBwZWRCeXRlcykpIHsKKyAgICAg
ICAgbV9tb2RlID0gTW9kZTo6U2lnbmFsaW5nOworICAgICAgICBhbGxvY2F0ZWRGYXN0TWVtb3Jp
ZXMrKzsKKyAgICB9CisgICAgcmV0dXJuIG1fbWVtb3J5OwogfQogCi1zdGF0aWNfYXNzZXJ0KHNp
emVvZih1aW50NjRfdCkgPT0gc2l6ZW9mKHNpemVfdCksICJXZSByZWx5IG9uIGFsbG93aW5nIHRo
ZSBtYXhpbXVtIHNpemUgb2YgTWVtb3J5IHdlIG1hcCB0byBiZSAyXjMyIHdoaWNoIGlzIGxhcmdl
ciB0aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50ZWdlciB0aGF0IHdlJ2QgcGFzcyB0byBtcHJvdGVj
dCBpZiB0aGlzIGRpZG4ndCBob2xkLiIpOwordm9pZCBNZW1vcnk6OnJlbGVhc2VGYXN0TWVtb3J5
KCkKK3sKKyAgICBpZiAobW9kZSgpICE9IE1vZGU6OlNpZ25hbGluZyB8fCAhbV9tZW1vcnkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJFTEVBU0VfQVNTRVJUKG1fbWVtb3J5ICYmIG1fbWFwcGVk
Q2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKTsKKyAgICBBU1NFUlQoZmFzdE1lbW9y
eUVuYWJsZWQoKSk7CisKKyAgICAvLyBXZSBuZWVkIHRvIG1wcm90ZWN0IFBST1RfTk9ORSBhbGwg
dGhlIGV4aXN0aW5nIG1lbW9yeS4gSWYgd2UgY2FuJ3QsIGZvcgorICAgIC8vIHdoYXRldmVyIHJl
YXNvbiwgd2Ugc2hvdWxkIGJhaWwgb3V0IGFuZCBnZXQgcmlkIG9mIHRoaXMgbWVtb3J5LgorICAg
IGlmIChtcHJvdGVjdChtX21lbW9yeSwgbV9zaXplLCBQUk9UX05PTkUpKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQoYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCkuc2l6ZSgpIDwgYWxsb2Nh
dGVkRmFzdE1lbW9yaWVzKTsKKyAgICBhdmFpbGFibGVGYXN0TWVtb3JpZXMoKS5hcHBlbmQobV9t
ZW1vcnkpOworICAgIG1fbWVtb3J5ID0gbnVsbHB0cjsKK30KIAotTWVtb3J5OjpNZW1vcnkoUGFn
ZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpCitNZW1vcnk6
Ok1lbW9yeShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9v
bCYgZmFpbGVkKQogICAgIDogbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKICAgICAsIG1faW5pdGlh
bChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCi0gICAgLCBtX21vZGUoTW9kZTo6
Qm91bmRzQ2hlY2tpbmcpCi0gICAgLy8gRklYTUU6IElmIHdlIGFkZCBzaWduYWwgYmFzZWQgYm91
bmRzIGNoZWNraW5nIHRoZW4gd2UgbmVlZCBleHRyYSBzcGFjZSBmb3Igb3ZlcmZsb3cgb24gbG9h
ZC4KLSAgICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjI2OTMKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRp
YWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCiAKQEAgLTcw
LDU0ICsxNDIsNDggQEAgTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3Vu
dCBtYXhpbXVtLCBib29sJiBmYWlsZWQpCiAgICAgaWYgKCFtX21hcHBlZENhcGFjaXR5KSB7CiAg
ICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugc3BlY2lmaWVkIGEgemVybyBhcyBtYXhpbXVtICh3aGlj
aCBtZWFucyB3ZSBhbHNvIGhhdmUgemVybyBhcyBpbml0aWFsIHNpemUpLgogICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX3NpemUgPT0gMCk7Ci0gICAgICAgIG1fbWVtb3J5ID0gbnVsbHB0cjsKLSAg
ICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGZhaWxlZCA9IGZhbHNlOwotICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkg
YWxsb2NhdGluZyBub3RoaW5nICIsICp0aGlzKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgbm90aGluZyAiLCAqdGhpcyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBo
YWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0gICAgdm9pZCogcmVzdWx0ID0gT3B0aW9uczo6c2ltdWxhdGVX
ZWJBc3NlbWJseUxvd01lbW9yeSgpID8gTUFQX0ZBSUxFRCA6IG1tYXAobnVsbHB0ciwgbV9tYXBw
ZWRDYXBhY2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7Ci0g
ICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRo
IGEgZGlmZmVyZW50IG51bWJlci4KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBk
YXRhTG9nTG4oIk1lbW9yeTo6TWVtb3J5IG1tYXAgZmFpbGVkIG9uY2UgZm9yIGNhcGFjaXR5LCB0
cnlpbmcgYWdhaW4iLCAqdGhpcyk7Ci0gICAgICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtX3NpemU7
Ci0gICAgICAgIGlmICghbV9tYXBwZWRDYXBhY2l0eSkgewotICAgICAgICAgICAgbV9tZW1vcnkg
PSBudWxscHRyOwotICAgICAgICAgICAgZmFpbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6TWVtb3J5IG1tYXAg
bm90IHRyeWluZyBhZ2FpbiBiZWNhdXNlIHNpemUgaXMgemVybyAiLCAqdGhpcyk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBtbWFwKG51bGxwdHIs
IG1fbWFwcGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEs
IDApOwotICAgICAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgbW1h
cCBmYWlsZWQgdHdpY2UgIiwgKnRoaXMpOwotICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXRyeUdldEZhc3RNZW1vcnkodm0pKSB7CisgICAg
ICAgIGlmIChPcHRpb25zOjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkgPyB0cnVlIDog
IW1tYXBCeXRlcyhtX21hcHBlZENhcGFjaXR5KSkgeworICAgICAgICAgICAgLy8gVHJ5IGFnYWlu
IHdpdGggYSBkaWZmZXJlbnQgbnVtYmVyLgorICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIk1lbW9yeTo6TWVtb3J5IG1tYXAgZmFpbGVkIG9uY2UgZm9yIGNhcGFjaXR5LCB0cnlpbmcg
YWdhaW4iLCAqdGhpcyk7CisgICAgICAgICAgICBtX21hcHBlZENhcGFjaXR5ID0gbV9zaXplOwor
ICAgICAgICAgICAgaWYgKCFtX21hcHBlZENhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgbV9t
ZW1vcnkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGZhaWxlZCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Ok1lbW9yeSBtbWFwIG5vdCB0
cnlpbmcgYWdhaW4gYmVjYXVzZSBzaXplIGlzIHplcm8gIiwgKnRoaXMpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtbWFwQnl0ZXMo
bV9tYXBwZWRDYXBhY2l0eSkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAiTWVtb3J5OjpNZW1vcnkgbW1hcCBmYWlsZWQgdHdpY2UgIiwgKnRoaXMpOworICAgICAgICAg
ICAgICAgIGZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKG1fc2l6ZSA8PSBtX21hcHBlZENh
cGFjaXR5KTsKLSAgICB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9ICFtcHJvdGVjdChyZXN1bHQs
IHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOworICAgIEFTU0VSVChtX21lbW9yeSAmJiBt
X3NpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSk7CisgICAgaWYgKG1wcm90ZWN0KG1fbWVtb3J5LCBz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7Cisg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Ok1lbW9yeSBtcHJvdGVjdCBmYWls
ZWQgIiwgKnRoaXMpOworICAgICAgICByZWxlYXNlRmFzdE1lbW9yeSgpOworICAgICAgICBpZiAo
bV9tZW1vcnkpCisgICAgICAgICAgICBpZiAobXVubWFwKG1fbWVtb3J5LCBtX21hcHBlZENhcGFj
aXR5KSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwogICAgIH0KIAotICAgIG1fbWVtb3J5ID0g
cmVzdWx0OworICAgIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlID0gbV9tb2RlOwogICAgIGZhaWxl
ZCA9IGZhbHNlOwotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6
TWVtb3J5IG1tYXAgc3VjY2VlZGVkICIsICp0aGlzKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAiTWVtb3J5OjpNZW1vcnkgbW1hcCBzdWNjZWVkZWQgIiwgKnRoaXMpOwogfQogCiBNZW1vcnk6
On5NZW1vcnkoKQogewotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIk1lbW9y
eTo6fk1lbW9yeSAiLCAqdGhpcyk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6
fk1lbW9yeSAiLCAqdGhpcyk7CisgICAgcmVsZWFzZUZhc3RNZW1vcnkoKTsKICAgICBpZiAobV9t
ZW1vcnkpIHsKICAgICAgICAgaWYgKG11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSkp
CiAgICAgICAgICAgICBDUkFTSCgpOwpAQCAtMTI4LDggKzE5NCw3IEBAIGJvb2wgTWVtb3J5Ojpn
cm93KFBhZ2VDb3VudCBuZXdTaXplKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG5ld1NpemUgPiBQ
YWdlQ291bnQ6OmZyb21CeXRlcyhtX3NpemUpKTsKIAotICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICBkYXRhTG9nTG4oIk1lbW9yeTo6Z3JvdyB0byAiLCBuZXdTaXplLCAiIGZyb20gIiwgKnRoaXMp
OworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgdG8gIiwgbmV3U2l6ZSwg
IiBmcm9tICIsICp0aGlzKTsKIAogICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+IG1heGlt
dW0oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTM3LDExICsyMDIsMTMgQEAgYm9vbCBN
ZW1vcnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCiAgICAgdWludDY0X3QgZGVzaXJlZFNpemUg
PSBuZXdTaXplLmJ5dGVzKCk7CiAKICAgICBpZiAobV9tZW1vcnkgJiYgZGVzaXJlZFNpemUgPD0g
bV9tYXBwZWRDYXBhY2l0eSkgewotICAgICAgICBib29sIHN1Y2Nlc3MgPSAhbXByb3RlY3Qoc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihkZXNpcmVkU2l6ZSAtIG1fc2l6ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzKTsKKyAgICAgICAgaWYgKG1wcm90ZWN0KHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihtX21lbW9yeSkgKyBtX3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZGVz
aXJlZFNpemUgLSBtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyBpbi1wbGFjZSBmYWlsZWQgIiwg
KnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKICAgICAgICAg
bV9zaXplID0gZGVzaXJlZFNpemU7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJNZW1vcnk6Omdyb3cgaW4tcGxhY2UgIiwgKnRoaXMpOworICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IGluLXBsYWNlICIsICp0aGlzKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNTksMTEgKzIyNiwyNyBAQCBib29sIE1lbW9y
eTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJl
ZFNpemU7CiAgICAgbV9zaXplID0gZGVzaXJlZFNpemU7CiAKLSAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Omdyb3cgIiwgKnRoaXMpOworICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgIiwgKnRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQog
Cit2b2lkIE1lbW9yeTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIFN0cmlu
ZyBtZW1vcnlIZXg7CisgICAgV1RGOjphcHBlbmRVbnNpZ25lZDY0QXNIZXgoKHVpbnQ2NF90KSh1
aW50cHRyX3QpbV9tZW1vcnksIG1lbW9yeUhleCk7CisgICAgb3V0LnByaW50KCJNZW1vcnkgYXQg
MHgiLCBtZW1vcnlIZXgsICIsIHNpemUgIiwgbV9zaXplLCAiQiBjYXBhY2l0eSAiLCBtX21hcHBl
ZENhcGFjaXR5LCAiQiwgaW5pdGlhbCAiLCBtX2luaXRpYWwsICIgbWF4aW11bSAiLCBtX21heGlt
dW0sICIgbW9kZSAiLCBtYWtlU3RyaW5nKG1fbW9kZSkpOworfQorCitjb25zdCBjaGFyKiBNZW1v
cnk6Om1ha2VTdHJpbmcoTW9kZSBtb2RlKSBjb25zdAoreworICAgIHN3aXRjaCAobW9kZSkgewor
ICAgIGNhc2UgTW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOwor
ICAgIGNhc2UgTW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogfSAvLyBuYW1lc3BhY2UgV2FzbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeS5oCmluZGV4IDIzNmJmODUxMjU2NDU1YmNlOWUzMjM2ZGNjNDU4NGM4
NmMxZGNmMGMuLmM4ZTNkZDRiOTcyZDhmNDJjOGZjNmZkNmQ5ZWY5ZDY0MDlmOTgyMzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlv
bi5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogCiBuYW1l
c3BhY2UgV1RGIHsKQEAgLTQzLDI0ICs0MywzOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFdU
Rjo6UHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9y
dCBvdGhlciBtb2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyNjkzCi0gICAgZW51bSBjbGFzcyBNb2RlIHsKLSAgICAgICAgQm91bmRzQ2hlY2tpbmcK
KyAgICBlbnVtIE1vZGUgeworICAgICAgICBCb3VuZHNDaGVja2luZywKKyAgICAgICAgU2lnbmFs
aW5nLAorICAgICAgICBOdW1iZXJPZk1vZGVzCiAgICAgfTsKICAgICBjb25zdCBjaGFyKiBtYWtl
U3RyaW5nKE1vZGUpIGNvbnN0OwogCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuICEhbV9tZW1vcnk7IH0KKworICAgIE1lbW9yeSYgb3BlcmF0b3I9KE1lbW9yeSYm
IG90aGVyKQorICAgIHsKKyAgICAgICAgLy8gTW92aW5nIHRyYW5zZmVycyBvd25lcnNoaXAgb2Yg
dGhlIGFsbG9jYXRlZCBtZW1vcnkuCisgICAgICAgIEFTU0VSVChtX21lbW9yeSA9PSBudWxscHRy
KTsKKyAgICAgICAgc3RkOjpzd2FwKG1fbWVtb3J5LCBvdGhlci5tX21lbW9yeSk7CisgICAgICAg
IG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9pbml0aWFsID0gb3RoZXIubV9pbml0
aWFsOworICAgICAgICBtX21heGltdW0gPSBvdGhlci5tX21heGltdW07CisgICAgICAgIG1fbWFw
cGVkQ2FwYWNpdHkgPSBvdGhlci5tX21hcHBlZENhcGFjaXR5OworICAgICAgICBtX21vZGUgPSBv
dGhlci5tX21vZGU7CisgICAgICAgIGlmIChtX21lbW9yeSAmJiBtX21vZGUgPT0gTW9kZTo6U2ln
bmFsaW5nKQorICAgICAgICAgICAgQVNTRVJUKG1fbWFwcGVkQ2FwYWNpdHkgPT0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpICogMik7CisgICAgICAgIHJldHVybiAqdGhpczsK
KworICAgIH0KKwogICAgIE1lbW9yeSgpID0gZGVmYXVsdDsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWls
ZWQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeShWTSYsIFBhZ2VDb3VudCBpbml0aWFs
LCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCYgZmFpbGVkKTsKICAgICBNZW1vcnkoTWVtb3J5JiYg
b3RoZXIpCi0gICAgICAgIDogbV9tZW1vcnkob3RoZXIubV9tZW1vcnkpCi0gICAgICAgICwgbV9z
aXplKG90aGVyLm1fc2l6ZSkKLSAgICAgICAgLCBtX2luaXRpYWwob3RoZXIubV9pbml0aWFsKQot
ICAgICAgICAsIG1fbWF4aW11bShvdGhlci5tX21heGltdW0pCi0gICAgICAgICwgbV9tYXBwZWRD
YXBhY2l0eShvdGhlci5tX21hcHBlZENhcGFjaXR5KQotICAgICAgICAsIG1fbW9kZShvdGhlci5t
X21vZGUpCiAgICAgewotICAgICAgICAvLyBNb3ZpbmcgdHJhbnNmZXJzIG93bmVyc2hpcCBvZiB0
aGUgYWxsb2NhdGVkIG1lbW9yeS4KLSAgICAgICAgb3RoZXIubV9tZW1vcnkgPSBudWxscHRyOwor
ICAgICAgICAqdGhpcyA9IFdURk1vdmUob3RoZXIpOwogICAgIH0KKwogICAgIH5NZW1vcnkoKTsK
IAogICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9CkBAIC03MCwx
NCArODQsMjEgQEAgcHVibGljOgogICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29uc3QgeyByZXR1
cm4gbV9pbml0aWFsOyB9CiAgICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBt
X21heGltdW07IH0KIAorICAgIHN0YXRpYyBNb2RlIGxhc3RBbGxvY2F0ZWRNb2RlKCk7CiAgICAg
TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKICAgICBib29sIGdyb3coUGFn
ZUNvdW50KTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX21lbW9yeSk7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fc2l6
ZSk7IH0KLSAgICAKKwogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTWVtb3J5SW5mb3JtYXRp
b247CisgICAgYm9vbCBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVDb3VudCk7CisKKyAgICBib29sIHRy
eUdldEZhc3RNZW1vcnkoVk0mIHZtKTsKKyAgICB2b2lkIHJlbGVhc2VGYXN0TWVtb3J5KCk7CisK
ICAgICB2b2lkKiBtX21lbW9yeSB7IG51bGxwdHIgfTsKICAgICB1aW50NjRfdCBtX3NpemUgeyAw
IH07CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCmluZGV4IDZiMDYzZDM1MTI0ZTk3
YTgzYjFmMWUwODczYTQxMDdjOWYwZTlmZDUuLjFjMzZhZmQ5ODFkN2YwYjBkNThkZjIxODA4Y2Ni
NzM3ZDM3MDJkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnlJbmZvcm1hdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUg
Ildhc21NZW1vcnkuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTcxLDExICs3MiwyMCBAQCBQaW5uZWRSZWdp
c3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5m
bz4mJiBzaXplUmVnaQogewogfQogCi1NZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRp
b24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCAgYm9vbCBpc0ltcG9ydCkK
K01lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbihWTSYgdm0sIFBhZ2VDb3VudCBp
bml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCBpc0ltcG9ydCkKICAgICA6IG1faW5pdGlh
bChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiAgICAgLCBtX2lzSW1wb3J0KGlz
SW1wb3J0KQogeworICAgIGlmICghaXNJbXBvcnQpIHsKKyAgICAgICAgYm9vbCBmYWlsZWRUb1Jl
c2VydmU7CisgICAgICAgIGF1dG8gbWVtID0gc3RkOjptYWtlX3VuaXF1ZTxNZW1vcnk+KHZtLCBp
bml0aWFsLCBtYXhpbXVtLCBmYWlsZWRUb1Jlc2VydmUpOworICAgICAgICBpZiAoIWZhaWxlZFRv
UmVzZXJ2ZSkgeworICAgICAgICAgICAgbV9yZXNlcnZlZE1lbW9yeSA9IFdURk1vdmUobWVtKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBtX21vZGUgPSBNZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2Rl
KCk7CisKICAgICBSRUxFQVNFX0FTU0VSVCghIW1faW5pdGlhbCk7CiAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fbWF4aW11bSB8fCBtX21heGltdW0gPj0gbV9pbml0aWFsKTsKICAgICBBU1NFUlQoISEq
dGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
SW5mb3JtYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZv
cm1hdGlvbi5oCmluZGV4IDZlN2Y1MjE4OTQ3ZTAxNmI0OGZkZjYwMTlkMzY4YTU3NTdlMzg1Yjcu
LmEzNzFmOTgxZWMwYjZkNzI3YmVlOTJiOWFjMDlmNTk4ZGVlMjZjOTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiR1BSSW5mby5o
IgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC01MiwxNyArNTMsMjQgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQoISp0aGlzKTsKICAgICB9CiAKLSAgICBNZW1vcnlJbmZvcm1hdGlvbihQYWdl
Q291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wgaXNJbXBvcnQpOworICAgIE1l
bW9yeUluZm9ybWF0aW9uKFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVt
LCBib29sIGlzSW1wb3J0KTsKIAogICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29uc3QgeyByZXR1
cm4gbV9pbml0aWFsOyB9CiAgICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBt
X21heGltdW07IH0KKyAgICBib29sIGhhc1Jlc2VydmVkTWVtb3J5KCkgY29uc3QgeyByZXR1cm4g
bV9yZXNlcnZlZE1lbW9yeSAmJiAhISptX3Jlc2VydmVkTWVtb3J5OyB9CisgICAgTWVtb3J5JiBy
ZXNlcnZlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuICptX3Jlc2VydmVkTWVtb3J5OyB9CisgICAg
TWVtb3J5OjpNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIGlz
SW1wb3J0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ltcG9ydDsgfQogCiAgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbml0aWFsOyB9CiAKIHByaXZhdGU6Cisg
ICAgLy8gVGhpcyBpcyBhIHVuaXF1ZV9wdHIgc28gd2UgY2FuIHBhc3MgTW9kdWxlSW5mb3JtYXRp
b24gYXMgY29uc3QgYW5kIHN0aWxsIGJlCisgICAgLy8gYWJsZSB0byB0YWtlIG93bmVyc2hpcCBv
ZiB0aGlzLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+IG1fcmVzZXJ2ZWRNZW1vcnk7CiAg
ICAgUGFnZUNvdW50IG1faW5pdGlhbCB7IH07CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bSB7IH07
CisgICAgTWVtb3J5OjpNb2RlIG1fbW9kZSB7IE1lbW9yeTo6TW9kZTo6Qm91bmRzQ2hlY2tpbmcg
fTsKICAgICBib29sIG1faXNJbXBvcnQgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCA1MTc3M2QwNmU2MjAx
MjNiNWFjMDQyNjJhOTA4YmFiMGJmOGYxNTk5Li43NzA0NTVlMzc5OTEwMjMwOGFmZjVlY2NhMzY1
MTJmM2I0NGZhYWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmNwcApAQCAtMzE2LDcgKzMxNiw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJz
ZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgQVNTRVJU
KGluaXRpYWxQYWdlQ291bnQpOwogICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhp
bXVtUGFnZUNvdW50ID49IGluaXRpYWxQYWdlQ291bnQpOwogCi0gICAgbV9yZXN1bHQubW9kdWxl
LT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFn
ZUNvdW50LCBpc0ltcG9ydCk7CisgICAgbV9yZXN1bHQubW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJ
bmZvcm1hdGlvbigqbV92bSwgaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgaXNJ
bXBvcnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QbGFuLmNwcAppbmRleCA1OTgwYjUxZTg3NDIyMjM3NTVjZTBjM2RmMmMxNmIxZGU5ZWM4ZjEy
Li5mNGExYzcxOGI0NjQ1OWQ3ZTY1ZDhlYWMzOTAzZmJhMzE0YWI5ZjUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
V2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUg
Ildhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZVBhcnNl
ci5oIgogI2luY2x1ZGUgIldhc21WYWxpZGF0ZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAppbmRleCBjMjc3MTJhMTBm
ZmZjOGRmM2YxZWI2MDZiMDhjZmM5ZjA3ZjhlMzZiLi41MTcxMjc4NWYyOTNiOGYxMGJhMGQ5OTdj
NDZhMDFlYjU5N2Q0OGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJXYXNt
RmF1bHRTaWduYWxIYW5kbGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MywxMSArNDQs
MTMgQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdh
c206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKIAogICAgIG1fZW50cnlwb2ludCA9IFdURk1vdmUoZW50cnlwb2ludCk7CisgICAgV2FzbTo6
cmVnaXN0ZXJDb2RlKHZtLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVj
dXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJl
ZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlD
YWxsZWU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5Q2FsbGVlKj4oY2VsbCk7Cisg
ICAgV2FzbTo6dW5yZWdpc3RlckNvZGUoKmNlbGwtPnZtKCksIHRoaXNPYmplY3QtPm1fZW50cnlw
b2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwg
dGhpc09iamVjdC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJs
ZU1lbW9yeSgpLT5lbmQoKSk7CiAgICAgdGhpc09iamVjdC0+SlNXZWJBc3NlbWJseUNhbGxlZTo6
fkpTV2ViQXNzZW1ibHlDYWxsZWUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
YjY4MzY5MWZjOWYwNjdhODA3OTg0MjRhODc0MTYwZDQ3ZWY1ZjY1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5j
cHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0lu
Zm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiB3YXNtRXhpdFN0dWJzLCBXYXNtOjpN
ZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCisgICAgOiBCYXNlKHZtLCB2
bS53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fY2FsbExpbmtJ
bmZvcyhXVEZNb3ZlKGNhbGxMaW5rSW5mb3MpKQorICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1v
dmUod2FzbUV4aXRTdHVicykpCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fY2FsbGVlQ291
bnQoY2FsbGVlQ291bnQpCit7CisgICAgbWVtc2V0KGNhbGxlZXMoKSwgMCwgbV9jYWxsZWVDb3Vu
dCAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogMik7Cit9CisK
K3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7Cisg
ICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygpOworfQorCit2b2lkIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fbW9kdWxlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9j
YWxsZWVDb3VudCAqIDI7IGkrKykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
Y2FsbGVlcygpW2ldKTsKKworICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigm
dGhpc09iamVjdC0+bV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKK30KKwordm9pZCBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgpCit7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogdGhpc09iamVjdCA9IGJp
dHdpc2VfY2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oCisgICAgICAgIGJpdHdpc2VfY2Fz
dDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaywg
bV91bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7CisgICAgZm9yIChhdXRvIGl0ZXIgPSB0aGlzT2Jq
ZWN0LT5tX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCisgICAgICAgICgq
aXRlciktPnZpc2l0V2VhaygqdGhpc09iamVjdC0+dm0oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXgg
ZmJjMWNlYmZiOWNiOGE1OWM5ZWFlNmU2ZGQ5OWZjNTU1ZjViMTNjYy4uYmYxYmEzZDEwOGU3MGUw
ZTEwZDFkODExYjA1MWNhY2Q2YWRjMDE3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDYgKzM4LDEzIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVt
b3J5KFZNJiB2bSwgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KQoreworICAgIGlmIChtZW1v
cnkgJiYgISEqbWVtb3J5LT5tZW1vcnkoKSkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWVtb3J5
LT5tZW1vcnkoKS0+bW9kZSgpID09IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLm1lbW9y
eS5tb2RlKCkpOworICAgIG1fbWVtb3J5LnNldCh2bSwgdGhpcywgbWVtb3J5KTsKK30KKwogSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsIEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QpCiB7CiAgICAgLy8gRklY
TUU6IFRoZXNlIG9iamVjdHMgY291bGQgYmUgcHJldHR5IGJpZyB3ZSBzaG91bGQgdHJ5IHRvIHRo
cm93IE9PTSBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaAppbmRleCA5OWEyYzkwZjdlYTM1M2UzNmI2NTVhYmU1Y2Rk
NWM0OTgzYzUzYTE4Li4wZDZkZjA5MzNmNjAxMjk2NjE0ZDhiY2M2MzJhMTE1M2U2YmQ5YTlmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaApAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOworY2xhc3Mg
SlNXZWJBc3NlbWJseUNvZGVCbG9jazsKIAogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIDog
cHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTcwLDcgKzcxLDggQEAg
cHVibGljOgogICAgIH0KIAogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0
dXJuIG1fbWVtb3J5LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFz
c2VtYmx5TWVtb3J5KiBtZW1vcnkpIHsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBtZW1vcnkpOyB9
CisgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkp
OworICAgIFdhc206Ok1lbW9yeTo6TW9kZSBtZW1vcnlNb2RlKCkgeyByZXR1cm4gbWVtb3J5KCkt
Pm1lbW9yeSgpLT5tb2RlKCk7IH0KIAogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7
IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRUYWJsZShWTSYgdm0sIEpTV2Vi
QXNzZW1ibHlUYWJsZSogdGFibGUpIHsgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsgfQpA
QCAtMTA0LDcgKzEwNiw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgV3Jp
dGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOworICAgIFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX21vZHVsZUNvZGVCbG9jazsKICAgICBXcml0ZUJh
cnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0Owog
ICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRhYmxlPiBtX3RhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRleCAwOGZh
NTg0NjI4ZjA3ZDJkOGM4YzNiMmI3OGQxMTU4MGM0ZjI4MTc2Li5iNzRlYzMwZWMzZGFhYWY0NzBj
Njk1OTIyZDRiMjY5NzdlY2E3M2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcApAQCAtMzAsMTggKzMwLDQ3IEBACiAK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5Q29tcGlsZUVycm9yLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUg
Ildhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFz
c2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07
CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24sIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExp
bmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVicywgU3lt
Ym9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2Vi
QXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0sIEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90
IGJ5dGVTaXplKQogewotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVl
Q291bnQpKSkgSlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBzdGQ6OmZvcndhcmQ8
c3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPj4obW9kdWxlSW5mb3JtYXRp
b24pLCBzdGQ6OmZvcndhcmQ8QmFnPENhbGxMaW5rSW5mbz4+KGNhbGxMaW5rSW5mb3MpLCBzdGQ6
OmZvcndhcmQ8VmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+Pih3YXNtRXhpdFN0dWJzKSwgY2Fs
bGVlQ291bnQpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBzb3VyY2UsIGJ5dGVTaXplKTsKKyAgICAvLyBPbiBmYWls
dXJlLCBhIG5ldyBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IgaXMgdGhyb3duLgorICAgIHBsYW4u
cnVuKCk7CisgICAgaWYgKHBsYW4uZmFpbGVkKCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoZXhlYywgdm0sIHBs
YW4uZXJyb3JNZXNzYWdlKCkpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgLy8gT24gc3VjY2VzcywgYSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlIG9iamVjdCBpcyByZXR1
cm5lZCB3aXRoIFtbTW9kdWxlXV0gc2V0IHRvIHRoZSB2YWxpZGF0ZWQgQXN0Lm1vZHVsZS4KKyAg
ICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKHZt
KTsKKyAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygpKSB7CisgICAgICAgIGF1dG8g
b2Zmc2V0ID0gZXhwb3J0U3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQoTm9Mb2NraW5n
TmVjZXNzYXJ5KTsKKyAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNl
c3NhcnksIGV4cC5maWVsZC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0KG9mZnNl
dCkpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjYWxsZWVDb3VudCA9IHBsYW4uaW50ZXJuYWxG
dW5jdGlvbkNvdW50KCk7CisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxlPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxs
ZWVDb3VudCkpKSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUsIHBsYW4udGFrZU1v
ZHVsZUluZm9ybWF0aW9uKCkpOwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgZXhw
b3J0U3ltYm9sVGFibGUpOworCisgICAgYXV0byogY29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHBsYW4udGFrZUNhbGxMaW5rSW5mb3MoKSksIFdU
Rk1vdmUocGxhbi50YWtlV2FzbUV4aXRTdHVicygpKSwgaW5zdGFuY2UtPm1vZHVsZUluZm9ybWF0
aW9uKCkubWVtb3J5Lm1vZGUoKSwgY2FsbGVlQ291bnQpOworCisgICAgcGxhbi5pbml0aWFsaXpl
Q2FsbGVlcyhleGVjLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwKKyAgICAgICAgWyZdICh1
bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2Fs
bGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAg
ICAgICBjb2RlQmxvY2stPnNldEpTRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIGpz
RW50cnlwb2ludENhbGxlZSk7CisgICAgICAgICAgIGNvZGVCbG9jay0+c2V0V2FzbUVudHJ5cG9p
bnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgICAg
IH0pOworCiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCkBAIC01MCwxNCArNzksMTAgQEAgU3Ry
dWN0dXJlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1
bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1v
ZHVsZUluZm9ybWF0aW9uPiYmIG1vZHVsZUluZm9ybWF0aW9uLCBCYWc8Q2FsbExpbmtJbmZvPiYm
IGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmIHdhc21FeGl0U3R1
YnMsIHVuc2lnbmVkIGNhbGxlZUNvdW50KQorSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3Nl
bWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8
V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24pCiAgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUobW9kdWxl
SW5mb3JtYXRpb24pKQotICAgICwgbV9jYWxsTGlua0luZm9zKFdURk1vdmUoY2FsbExpbmtJbmZv
cykpCi0gICAgLCBtX3dhc21FeGl0U3R1YnMoV1RGTW92ZSh3YXNtRXhpdFN0dWJzKSkKLSAgICAs
IG1fY2FsbGVlQ291bnQoY2FsbGVlQ291bnQpCiB7Ci0gICAgbWVtc2V0KGNhbGxlZXMoKSwgMCwg
bV9jYWxsZWVDb3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4p
ICogMik7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUpCkBAIC03OSwxOCArMTA0LDggQEAg
dm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXhwb3J0U3ltYm9s
VGFibGUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX2NhbGxl
ZUNvdW50ICogMjsgaSsrKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5jYWxs
ZWVzKClbaV0pOwotCi0gICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZ0aGlz
T2JqZWN0LT5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwotfQotCi12b2lkIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KCkKLXsKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiB0aGlzT2JqZWN0ID0gYml0d2lzZV9jYXN0
PEpTV2ViQXNzZW1ibHlNb2R1bGUqPigKLSAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSAtIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5TW9kdWxlLCBtX3VuY29uZGl0aW9uYWxG
aW5hbGl6ZXIpKTsKLSAgICBmb3IgKGF1dG8gaXRlciA9IHRoaXNPYmplY3QtPm1fY2FsbExpbmtJ
bmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+dmlzaXRXZWFr
KCp0aGlzT2JqZWN0LT52bSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2FzbTo6
TWVtb3J5OjpMYXN0TW9kZTsgKytpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2NvZGVCbG9ja3NbaV0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAppbmRleCA3
ZTA1MWY1NzIyNDI0NjhhNjY0MTkwMzFhODg5NWM2MTM2ZTMwODc2Li44MzVhNjVjZTZmYjg2YzEw
MTVjNTkzMzFlNjFhMzg0YzM2YWUwYTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJX
YXNtRm9ybWF0LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgpAQCAtNDMsNyArNDMsNyBAQCBjbGFz
cyBKU1dlYkFzc2VtYmx5TW9kdWxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0
aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlx
dWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYmLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBW
ZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiwgU3ltYm9sVGFibGUqLCB1bnNpZ25lZCk7Cisg
ICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKTsKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUp
OwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNTQsNDggKzU0LDE2IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21G
dW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICB9Ci0gICAgdW5zaWdu
ZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVicy5z
aXplKCk7IH0KIAotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQotICAgIHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1w
b3J0Q291bnQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRl
eFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICByZXR1cm4gY2FsbGVlcygpW2Nh
bGxlZUluZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNt
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25J
bmRleFNwYWNlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNw
YWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUlu
ZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICBy
ZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0uZ2V0KCk7Ci0gICAg
fQotCi0gICAgdm9pZCBzZXRKU0VudHJ5cG9pbnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxs
ZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKQotICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgY2FsbGVl
cygpW2NhbGxlZUluZGV4XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7Ci0gICAgfQorICAgIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayhXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSkgeyBy
ZXR1cm4gbV9jb2RlQmxvY2tzW21vZGVdLmdldCgpOyB9CisgICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayogY29kZUJsb2NrKEpTV2ViQXNzZW1ibHlNZW1vcnkqKTsKIAotICAgIHZvaWQgc2V0V2Fz
bUVudHJ5cG9pbnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3Nl
bWJseUNhbGxlZSogY2FsbGVlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVl
SW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgY2FsbGVlcygpW2NhbGxlZUluZGV4ICsg
bV9jYWxsZWVDb3VudF0uc2V0KHZtLCB0aGlzLCBjYWxsZWUpOwotICAgIH0KLQotICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiogY2FsbGVlcygpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPio+KGJp
dHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkNhbGxlZXMoKSk7Ci0gICAgfQotCi1w
cm90ZWN0ZWQ6Ci0gICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6
dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJiwgQmFnPENhbGxMaW5rSW5mbz4m
JiwgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsK
K3ByaXZhdGU6CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6
dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJik7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIFN5bWJvbFRhYmxlKik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKLXByaXZhdGU6CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkNhbGxlZXMoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlNb2R1bGUp
KTsKQEAgLTExMCwxMiArNzgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOwogICAgIH07CiAKLSAgICBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKKyAgICBXcml0ZUJhcnJpZXI8QXJyYXlC
dWZmZXI+IG1fc291cmNlQnVmZmVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKLSAgICBCYWc8Q2FsbExpbmtJbmZvPiBt
X2NhbGxMaW5rSW5mb3M7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5
bWJvbFRhYmxlOwotICAgIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiBtX3dhc21FeGl0U3R1
YnM7Ci0gICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJB
c3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2tzW1dhc206Ok1lbW9yeTo6TnVtYmVyT2ZNb2Rl
c107CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Iu
Y3BwCmluZGV4IDc2M2RjNDk0Y2U1YTQ3ODJkNmU2ODQ3ZjgyMjU2NjFiMzViZGE3YWIuLjljNDJm
MjU3ZWZhNDQ1ODY0NjVkYmZkMjI1ZDQ0YjE0YmYyYTdhN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNv
bnN0cnVjdG9yLmNwcApAQCAtMTk0LDYgKzE5NCwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBl
eAogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJN
ZW1vcnkgaW1wb3J0cyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVj
dGVkICdtYXhpbXVtJyIpKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gbm90IGZhbGwgb2YgYSBjbGlm
ZiBxdWl0ZSBzbyBlYXNpbHkgaGVyZS4KKyAgICAgICAgICAgIGlmIChpbnN0YW5jZS0+bW9kdWxl
KCktPm1vZHVsZUluZm9ybWF0aW9uKCkubWVtb3J5Lm1vZGUoKSAhPSBtZW1vcnktPm1lbW9yeSgp
LT5tb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgLy8gaWkuIEFwcGVuZCB2IHRvIG1lbW9yaWVzLgogICAgICAgICAgICAgLy8gaWlpLiBBcHBl
bmQgdi5bW01lbW9yeV1dIHRvIGltcG9ydHMuCiAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVt
b3J5KHZtLCBtZW1vcnkpOwpAQCAtMjM1LDEwICsyNDEsMTUgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0
ZSogZXgKICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAhaGFzTWVtb3J5
SW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24u
bWVtb3J5LmlzSW1wb3J0KCkpOwogICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdo
ZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgotICAgICAgICAgICAgYm9vbCBmYWlsZWQ7Ci0g
ICAgICAgICAgICBXYXNtOjpNZW1vcnkgbWVtb3J5KG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5p
bml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCksIGZhaWxlZCk7Ci0g
ICAgICAgICAgICBpZiAoZmFpbGVkKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlF
cnJvcihleGVjKSkpOworICAgICAgICAgICAgV2FzbTo6TWVtb3J5IG1lbW9yeTsKKyAgICAgICAg
ICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaGFzUmVzZXJ2ZWRNZW1vcnkoKSAmJiBt
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkucmVzZXJ2ZWRNZW1vcnkoKSkKKyAgICAgICAgICAgICAg
ICBtZW1vcnkgPSBXVEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5yZXNlcnZlZE1lbW9y
eSgpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wgZmFpbGVkOwor
ICAgICAgICAgICAgICAgIFdhc206Ok1lbW9yeSBtZW1vcnkodm0sIG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCksIGZh
aWxlZCk7CisgICAgICAgICAgICAgICAgaWYgKGZhaWxlZCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBj
cmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLAogICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1l
bW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5
TWVtb3J5U3RydWN0dXJlKCksIFdURk1vdmUobWVtb3J5KSkpOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVt
b3J5Q29uc3RydWN0b3IuY3BwCmluZGV4IDZjODg3YWY1OTdhODY1MzI5Y2ZiNDNmNWVkYjQ3YjQx
ZTY2MDllYzguLjY4Mjk5ZTA1Y2EyYTE1MGZjYzFhYWUxN2I1OTlkMGVlMzVhMjgyMWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0
YXRlKiBleGVjCiAgICAgfQogCiAgICAgYm9vbCBmYWlsZWQ7Ci0gICAgV2FzbTo6TWVtb3J5IG1l
bW9yeShpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBmYWlsZWQpOworICAgIFdh
c206Ok1lbW9yeSBtZW1vcnkodm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQs
IGZhaWxlZCk7CiAgICAgaWYgKGZhaWxlZCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggODEyOTU5MjNjN2Fk
Y2EyZGU2MGJlY2MxOTNmYWNlOTgyZjQ1ZmQyMi4uYTk0MGU4ZGZmMGNiZWE1ZmRmMDgyOTkwYTU3
YWQ4ZDhmZWNjMTcwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTgwLDMxICs4
MCw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxl
KEV4ZWNTdGF0ZSogc3RhdGUsIFN0cnVjdHVyZSoKICAgICB1aW50OF90KiBiYXNlID0gZ2V0V2Fz
bUJ1ZmZlckZyb21WYWx1ZShzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBi
eXRlU2l6ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIFdh
c206OlBsYW4gcGxhbigmdm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7Ci0gICAgLy8g
T24gZmFpbHVyZSwgYSBuZXcgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIGlzIHRocm93bi4KLSAg
ICBwbGFuLnJ1bigpOwotICAgIGlmIChwbGFuLmZhaWxlZCgpKQotICAgICAgICByZXR1cm4gdGhy
b3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9y
KHN0YXRlLCB2bSwgcGxhbi5lcnJvck1lc3NhZ2UoKSkpOwotCi0gICAgLy8gT24gc3VjY2Vzcywg
YSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIFtbTW9kdWxl
XV0gc2V0IHRvIHRoZSB2YWxpZGF0ZWQgQXN0Lm1vZHVsZS4KLQotICAgIC8vIFRoZSBleHBvcnQg
c3ltYm9sIHRhYmxlIGlzIHRoZSBzYW1lIGZvciBhbGwgSW5zdGFuY2VzIG9mIGEgTW9kdWxlLgot
ICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUo
dm0pOwotICAgIGZvciAoYXV0byYgZXhwIDogcGxhbi5leHBvcnRzKCkpIHsKLSAgICAgICAgYXV0
byBvZmZzZXQgPSBleHBvcnRTeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xvY2tp
bmdOZWNlc3NhcnkpOwotICAgICAgICBleHBvcnRTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05l
Y2Vzc2FyeSwgZXhwLmZpZWxkLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zm
c2V0KSkpOwotICAgIH0KLQotICAgIC8vIE9ubHkgd2FzbS1pbnRlcm5hbCBmdW5jdGlvbnMgaGF2
ZSBhIGNhbGxlZSwgc3R1YnMgdG8gSlMgZG8gbm90LgotICAgIHVuc2lnbmVkIGNhbGxlZUNvdW50
ID0gcGxhbi5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKTsKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxl
KiByZXN1bHQgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgcGxh
bi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKSwgcGxhbi50YWtlQ2FsbExpbmtJbmZvcygpLCBwbGFu
LnRha2VXYXNtRXhpdFN0dWJzKCksIGV4cG9ydFN5bWJvbFRhYmxlLCBjYWxsZWVDb3VudCk7Ci0g
ICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhzdGF0ZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0
KCksIAotICAgICAgICBbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBv
aW50Q2FsbGVlKSB7Ci0gICAgICAgICAgICByZXN1bHQtPnNldEpTRW50cnlwb2ludENhbGxlZSh2
bSwgY2FsbGVlSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgICAgICByZXN1bHQt
PnNldFdhc21FbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRD
YWxsZWUpOwotICAgICAgICB9KTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgc3RhdGUsIHN0cnVjdHVyZSwgYmFzZSArIGJ5
dGVPZmZzZXQsIGJ5dGVTaXplKTsKIH0KIAogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvciog
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvRGF0YUxvZy5oIGIvU291cmNlL1dURi93dGYvRGF0YUxv
Zy5oCmluZGV4IDEzZjkxM2JkNWJhZTYwMjkxZGQ1MzhmN2ZhNTgzODhjODhlZmJjOTAuLjBiMDg0
ODhiMjBlNTAzMWMwMDY2OTlhZTYwY2RlZTI0YTBjOTdiZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0RhdGFMb2cuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgKQEAgLTQ4LDEz
ICs0OCwyOSBAQCB2b2lkIGRhdGFMb2coY29uc3QgVHlwZXMmLi4uIHZhbHVlcykKIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIFR5cGVzPgogdm9pZCBkYXRhTG9nTG4oY29uc3QgVHlwZXMmLi4uIHZhbHVl
cykKIHsKLSAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlcy4uLiwgIlxuIik7CisgICAgZGF0YUxv
Zyh2YWx1ZXMuLi4sICJcbiIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KK3Zv
aWQgZGF0YUxvZ0lmKGJvb2wgc2hvdWxkTG9nLCBjb25zdCBUeXBlcyYuLi4gdmFsdWVzKQorewor
ICAgIGlmIChzaG91bGRMb2cpCisgICAgICAgIGRhdGFMb2codmFsdWVzLi4uKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+Cit2b2lkIGRhdGFMb2dMbklmKGJvb2wgc2hvdWxkTG9n
LCBjb25zdCBUeXBlcyYuLi4gdmFsdWVzKQoreworICAgIGlmIChzaG91bGRMb2cpCisgICAgICAg
IGRhdGFMb2dMbih2YWx1ZXMuLi4pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcg
V1RGOjpkYXRhTG9nOwogdXNpbmcgV1RGOjpkYXRhTG9nTG47Cit1c2luZyBXVEY6OmRhdGFMb2dJ
ZjsKK3VzaW5nIFdURjo6ZGF0YUxvZ0xuSWY7CiB1c2luZyBXVEY6OmRhdGFMb2dGOwogdXNpbmcg
V1RGOjpkYXRhTG9nRlN0cmluZzsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303026</attachid>
            <date>2017-02-28 18:50:17 -0800</date>
            <delta_ts>2017-03-01 13:15:13 -0800</delta_ts>
            <desc>Compiles</desc>
            <filename>bug-162693-20170228184720.patch</filename>
            <type>text/plain</type>
            <size>85127</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ODFlYWQzNTM4YmU0Yjc0YzA1ZjlmMDU4Y2UzYTRiNTcyNjgxYTU2Li4zNDRlMmI3ZmExOGRkZGYx
ZGYyNjQ4MWRlYzM0YjhmMzQ1Y2EyNjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAxNy0wMi0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBXQVNNIHNob3VsZCBzdXBwb3J0IGZhc3RlciBsb2Fkcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIpOgorICAgICAgICAq
IGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoanNjbWFpbik6
CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQ
cmVwYXJlUG9pbnRlcik6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmltcG9ydEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbjo6aGFzTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dh
c21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1tYXBCeXRlcyk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjphdmFpbGFibGVGYXN0TWVtb3JpZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
ZW1vcnk6OnRyeUdldEZhc3RNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OnJl
bGVhc2VGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6On5NZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Omdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmR1bXApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1ha2VTdHJpbmcpOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6TWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlv
bi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZv
cm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnJlc2VydmVkTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Om1vZGUpOgorICAgICAgICAq
IHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6
CisgICAgICAgICogd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZWdpc3Rl
ckNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp1bnJlZ2lzdGVyQ29kZSk6CisgICAgICAgIChK
U0M6Oldhc206OmZhc3RNZW1vcnlFbmFibGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5hYmxl
RmFzdE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxl
ZS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJs
eU1lbW9yeSk6CisKIDIwMTctMDItMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHN0ZDo6dHVwbGVzIGFz
IGtleXMgaW4gSGFzaE1hcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjMTIzYjA2
YWZkOTVhOTk2YzdlYjczYzlhN2U1Y2FjYjFkZWM0ZTJlLi4zNWRjMTdhMWNlOTk2NTNhNzA5NDM5
OGM4ZmIwODE2YmFmNmFhZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMy
MCw2ICsxMzIwLDEwIEBACiAJCTUzNTU1NzE2MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1
NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLzsgfTsKIAkJNTM3MEI0RjUx
QkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTM3MEI0RjMxQkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UuY3BwICovOyB9OwogCQk1MzcwQjRGNjFCRjI2MjA1MDA1QzQwRkMgLyog
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3MEI0RjQxQkYyNUVBMjAwNUM0
MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCAqLzsg
fTsKKwkJNTM4MUI5MzcxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM4MUI5
MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwICovOyB9Owor
CQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM4MUI5MzgxRTYw
RTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLzsgfTsKKwkJNTM4MUI5
NDAxRTY1REZFQjAwOTBGNzk0IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODFCOTNGMUU2NURGRUIwMDkw
Rjc5NCAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi87IH07CisJCTUzODNBQTMwMUU2NUU4
QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAv
KiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLzsgfTsKIAkJNTM5MTdFN0IxQjc5MDZGQTAw
MEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzkxN0U3QTFCNzkw
NkU0MDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMu
aCAqLzsgfTsKIAkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlGQjhCOTFD
OTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLzsgfTsKIAkJNTNCMEJFMzQxRTU2
MUFDOTAwQThGQzI5IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNCMEJFMzMxRTU2MUFDOTAwQThGQzI5
IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwICovOyB9OwpAQCAtMzc3Niw2ICszNzgwLDEw
IEBACiAJCTUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21NZW1vcnkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzcwQjRGMzFCRjI1RUEyMDA1QzQwRkMgLyogQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM3MEI0RjQxQkYyNUVB
MjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzgxQjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM4MUI5MzgxRTYwRTk3RDAwOTBG
Nzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MzgxQjkzRjFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzODNBQTJGMUU2NUU4QTEwMEE1
MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOyBwYXRoID0ganMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
OTE3RTdBMUI3OTA2RTQwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTgzMUI3OTFD
QjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRBcnJheVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0
aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsK
QEAgLTYyMDEsNiArNjIwOSw4IEBACiAJCQkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdh
c21Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBX
YXNtTW9kdWxlUGFyc2VyLmggKi8sCiAJCQkJQURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdh
c21QYWdlQ291bnQuY3BwICovLAorCQkJCTUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNt
RmF1bHRTaWduYWxIYW5kbGVyLmNwcCAqLywKKwkJCQk1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQg
LyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oICovLAogCQkJCTc5Qjc1OTczMURGQTRDNjAwMDUy
MTc0QyAvKiBXYXNtUGFnZUNvdW50LmggKi8sCiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2
IC8qIFdhc21QYXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2Fz
bVBsYW4uY3BwICovLApAQCAtNzc4OCw2ICs3Nzk4LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJ
CTc5RTQyM0UwMURFRTY1MzIwMDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcCAqLywK
IAkJCQk3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5oICov
LAorCQkJCTUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmNwcCAqLywKKwkJCQk1MzgxQjkzRjFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5oICovLAogCQkJCUFEMkZDQkE2MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yLmNwcCAqLywKIAkJCQlBRDJGQ0JBNzFEQjU4REE0MDBCM0U3MzYgLyog
SlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oICovLAogCQkJCTc5NkZCNDM5MURGRjhDM0YwMDM5
Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovLApAQCAtNzkyNyw2ICs3OTM5LDcgQEAK
IAkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCMzg3OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2Fs
bGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzODFCOTQwMUU2NURGRUIwMDkw
Rjc5NCAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04MjQ2LDYgKzgyNTksNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFE
QTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
RDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkUxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJGMTU4RDE5QjdBNTMxMDA2OTVERDAgLyogREZH
QmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0QwMDE5QURBNDEwMDA2
QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAzNiw2ICsx
MDA1MCw3IEBACiAJCQkJMEZDODQxNjgxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlw
ZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1NCAv
KiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCRDFC
NzFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTUzODFCOTM3MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzAwQjdCMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRl
Z2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjg5OEYzMTFC
Mjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZDOTdGM0QxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRh
dGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDQzNyw2ICsx
MDQ1Miw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVy
QVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjEzNzU3MUJCMTFFRjkwMENENTEwMCAvKiBN
YWNyb0Fzc2VtYmxlckFSTTY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjkwMDlDMTc5NzZD
NjAwMDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUzODNBQTMwMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNkRCN0VDMUQ2MTdEMTEwMENEQkY4RSAvKiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU2OEM2MzgxQjkwREUwQjAwNDJC
Q0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0
QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5r
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKaW5kZXggZGU0
OGU2MmRkYWI4ZWZhZjhiZTMxODI4NzFiZThkNzA5OWIxN2M3Zi4uNTQ2ZTE0YzkwNDhlOGQzMzhh
NTgyNjQ3Y2Y3Y2FkZjlkZDM0MWNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1
bmtzLmNwcApAQCAtODIsNiArODIsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5r
czo6Y3RpU3R1YihWTSogdm0sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKICAgICByZXR1cm4g
ZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1
bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ1RJU3R1Yk1hcDo6aXRlcmF0b3IgZW50cnkg
PSBtX2N0aVN0dWJNYXAuZmluZChnZW5lcmF0b3IpOworICAgIGlmIChlbnRyeSA9PSBtX2N0aVN0
dWJNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAg
ICByZXR1cm4gZW50cnktPnZhbHVlOworfQorCiB2b2lkIEpJVFRodW5rczo6ZmluYWxpemUoSGFu
ZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCopCiB7CiAgICAgYXV0byogbmF0aXZlRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKaW5kZXggYWRkY2YyMzBjMzQ1ZDQy
NzFiNjM3ZjA4Yjk0YzQxNmEzZWQxODJhNC4uN2UwNmU3MTYyMzUzYTBiNzNmM2JjMDJlNTQyZjcz
YjgyZjY2ZTEwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVu
a3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCkBAIC01OCw2
ICs1OCw3IEBAIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlVGFp
bENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNKik7ICAgIAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGN0aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvcik7CiAKICAgICBOYXRpdmVFeGVjdXRh
YmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9u
IGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGhvc3RGdW5jdGlvblN0dWIoVk0qLCBOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29u
c3RydWN0b3IsIFRodW5rR2VuZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0
dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggYWVkZjQy
ZTE3Y2MyYmRlMDE0YWQ1YjhkNjI4NjIyYWVjMTQ1ZTdlMi4uMjRkMmJhZWFlN2NhNGIyNDZjN2Ri
Y2UwNzY0NTgyZjY0MzQ5MGQxYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTczLDYgKzczLDcg
QEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgog
I2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CkBAIC0zNzY2LDYgKzM3NjcsNyBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOwogICAgIHN0YXJ0VGltZW91dFRocmVhZElmTmVlZGVkKCk7CisgICAg
SlNDOjpXYXNtOjplbmFibGVGYXN0TWVtb3J5KCk7CiAKICAgICBpbnQgcmVzdWx0OwogICAgIHJl
c3VsdCA9IHJ1bkpTQygKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRl
eCBjNGJmOGZhZGU4YWFlMzEwZjJiNmEyNzcxMTMxYmJlZGEyMWIyY2JjLi4yMzk5Mzg1M2EwNjUz
ZGEzZTNkMzM3MDRkY2IxNjFjZTk5ZTY0Y2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCkBAIC00MjYsNiArNDI2LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRp
b25TdHJpbmc7CiAgICAgXAogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHksIHRydWUsIE5vcm1h
bCwgIkV4cG9zZSB0aGUgV2ViQXNzZW1ibHkgZ2xvYmFsIG9iamVjdC4iKSBcCiAgICAgdihib29s
LCBzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwg
dGhlIE1lbW9yeSBvYmplY3Qgd29uJ3QgbW1hcCB0aGUgZnVsbCAnbWF4aW11bScgcmFuZ2UgYW5k
IGluc3RlYWQgd2lsbCBhbGxvY2F0ZSB0aGUgbWluaW11bSByZXF1aXJlZCBhbW91bnQuIikgXAor
ICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlNZW1vcnlNb2RlRnV6eiwgZmFsc2UsIE5vcm1hbCwg
IklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0IHdpbGwgZnV6eiBlYWNoIG1tYXAuIikKIAogZW51
bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAppbmRleCBhNTBmOWRiMGEwYzMzZTkwNmRjNmVjMGViZWRhNjcwN2VhNGE5
ZmMzLi5hMDM5ZGRiMDBmZmIwY2MyYmEyZjc1NzljNWYxMzU3ZjI0YjI0M2QzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yNDAsNiArMjQwLDcgQEAgVk06OlZNKFZNVHlw
ZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAg
ICB3ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDYWxs
ZWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWJBc3NlbWJs
eVRvSlNDYWxsZWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB3ZWJBc3NlbWJseUNvZGVC
bG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWJBc3NlbWJseVRvSlNDYWxsZWUu
c2V0KCp0aGlzLCBXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmNyZWF0ZSgqdGhpcywgd2ViQXNzZW1i
bHlUb0pTQ2FsbGVlU3RydWN0dXJlLmdldCgpKSk7CiAjZW5kaWYKICAgICBtb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAppbmRleCA3MzJiMjZlNGU0ZjMwMWJhM2IwYzFlNzMwODNhZjkzYjQ4ODgwYjIwLi4x
YTQxZTQ0ZjZhM2ViZTYwYTM0YTZjNDhiMWZiYjU5Yzk4MWY2N2M3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKQEAgLTMzMyw2ICszMzMsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q2FsbGVlU3RydWN0
dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVjdHVy
ZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZTsK
ICAgICBTdHJvbmc8SlNDZWxsPiB3ZWJBc3NlbWJseVRvSlNDYWxsZWU7CiAjZW5kaWYKICAgICBT
dHJvbmc8U3RydWN0dXJlPiBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MmUwMDkzYzUyYmVkOGZmNDg3MDcyODQ1N2UwNjQzYzgwZjUxZGVjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgi
CisjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgorI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKKworY2xhc3MgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNDZWxsIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3Rh
dGljIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIG93bmVyLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxX
YXNtOjpXYXNtRXhpdFN0dWJzPiYmIGV4aXRTdHVicywgV2FzbTo6TWVtb3J5OjpNb2RlIG1vZGUs
IHVuc2lnbmVkIGNhbGxlZUNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRp
b25TaXplKGNhbGxlZUNvdW50KSkpIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIG93bmVyLCBz
dGQ6OmZvcndhcmQ8QmFnPENhbGxMaW5rSW5mbz4+KGNhbGxMaW5rSW5mb3MpLCBzdGQ6OmZvcndh
cmQ8VmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+PihleGl0U3R1YnMpLCBtb2RlLCBjYWxsZWVD
b3VudCk7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVy
biBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpOyB9CisgICAgV2FzbTo6TWVtb3J5OjpNb2RlIG1vZGUo
KSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1
bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQorCisgICAgSlNXZWJBc3NlbWJs
eUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5j
dGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKKyAgICAgICAgdW5zaWdu
ZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENvdW50
KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7
CisgICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVlSW5kZXhdLmdldCgpOworICAgIH0KKwor
ICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgp
KTsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBm
dW5jdGlvbkltcG9ydENvdW50KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4
IDwgbV9jYWxsZWVDb3VudCk7CisgICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVlSW5kZXgg
KyBtX2NhbGxlZUNvdW50XS5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEpTRW50cnlwb2lu
dENhbGxlZShWTSYgdm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiBjYWxsZWUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1f
Y2FsbGVlQ291bnQpOworICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXhdLnNldCh2bSwgdGhp
cywgY2FsbGVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFdhc21FbnRyeXBvaW50Q2FsbGVlKFZN
JiB2bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSkK
KyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3Vu
dCk7CisgICAgICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLnNldCh2
bSwgdGhpcywgY2FsbGVlKTsKKyAgICB9CisKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJs
eUNhbGxlZT4qIGNhbGxlZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxX
cml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEJhZzxDYWxsTGlua0lu
Zm8+JiYsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmLCBXYXNtOjpNZW1vcnk6Ok1vZGUs
IHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworICAgIHN0
YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworCisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkNhbGxlZXMoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3Jp
dGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2spKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2ln
bmVkIG51bUNhbGxlZXMpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0T2ZDYWxsZWVzKCkg
KyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIG51bUNhbGxlZXMg
KiAyOworICAgIH0KKworICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMg
SlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgpIG92ZXJyaWRlOworICAgIH07CisKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJB
c3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CisgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3Vu
Y29uZGl0aW9uYWxGaW5hbGl6ZXI7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0lu
Zm9zOworICAgIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiBtX3dhc21FeGl0U3R1YnM7Cisg
ICAgV2FzbTo6TWVtb3J5OjpNb2RlIG1fbW9kZTsKKyAgICB1bnNpZ25lZCBtX2NhbGxlZUNvdW50
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAKaW5kZXggMmZmMzA1MDFmNjZmMWFjZGFmNWRkOGY3OGY1YTUyMjllYWViOGI5MS4uYjI1NzA4
Zjc3MTczOGM4YjE0MGQzMzE2NzlhYjFlMmVhNmM5MzI4NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMjU5LDcgKzI1OSw3IEBA
IEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwCiAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0
ZXJJbmZvJiByZWdJbmZvIDogcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzKQogICAgICAgICBtX3By
b2MucGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIpOwogCi0gICAgaWYgKGluZm8uaGFz
TWVtb3J5KCkpIHsKKyAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdh
c21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlu
bmVkR1BSLCB1bnNpZ25lZCkgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5u
ZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOwpAQCAtNDU0LDkgKzQ1NCwxMiBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lv
blR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZQogCiBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6
OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQz
Ml90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQogewotICAgIEFTU0VSVChtX21l
bW9yeUJhc2VHUFIgJiYgbV9tZW1vcnlTaXplR1BSKTsKLSAgICBBU1NFUlQoc2l6ZU9mT3BlcmF0
aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdh
c21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBwb2ludGVyLCBtX21lbW9yeVNp
emVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOworICAgIEFTU0VSVChtX21lbW9y
eUJhc2VHUFIpOworICAgIGlmIChtX2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnk6Ok1vZGU6
OkJvdW5kc0NoZWNraW5nKSB7CisgICAgICAgIEFTU0VSVChtX21lbW9yeVNpemVHUFIpOworICAg
ICAgICBBU1NFUlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBP
cmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlTaXplR1BSLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZz
ZXQgLSAxKTsKKyAgICB9CiAgICAgcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBPcmlnaW4oKSwgcG9pbnRlcik7CiAgICAgcmV0dXJuIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUFkZHJlc3NWYWx1ZT4obV9wcm9jLCBPcmlnaW4o
KSwgcG9pbnRlciwgbV9tZW1vcnlCYXNlR1BSKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKaW5kZXggZDc5MDE0ZjI3ZmFmOTA5
NjhmMjFmNWY5YjRkN2I4Y2M3ODEwMzllMy4uZTYwNGFiMmQ0NzA5MGE3ZTk0MzE5YTEyY2I4NzFl
NGU3NDM3MjcxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxpbmdDb252ZW50aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxpbmdDb252ZW50aW9uLmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisj
aW5jbHVkZSAiV2FzbVNpZ25hdHVyZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNp
Z25hbEhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmOTYxMjNkYjNjZmVlMzIzOWJjMGJjZmM0YTQ0
YTRlMjkzMGJkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKKyNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVk0u
aCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKworCituYW1lc3BhY2Ugeworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOworfQorCitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRTaWdTZWdWSGFuZGxl
cjsKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ0J1c0hhbmRsZXI7CitzdGF0aWMgYm9v
bCBmYXN0SGFuZGxlckluc3RhbGxlZCB7IGZhbHNlIH07CitzdGF0aWMgU3RhdGljTG9jayBjb2Rl
TG9jYXRpb25zTG9jazsKK3N0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1
cGxlPFZNKiwgdm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8vICh2bSwgc3RhcnQsIGVu
ZCkKKworc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190Kiwgdm9p
ZCogdWNvbnRleHQpCit7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0YXJ0aW5nIGhhbmRs
ZXIiKTsKKyAgICBtY29udGV4dF90IGNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4o
dWNvbnRleHQpLT51Y19tY29udGV4dDsKKyAgICB2b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29udGV4dC0+X19zcy5fX3JpcCk7CisKKyAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAic3RhcnQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpKSwgIiwgZmF1bHRpbmcgYWRk
cmVzczogIiwgUmF3UG9pbnRlcihmYXVsdGluZ0luc3RydWN0aW9uKSwgIiwgZW5kOiAiLCBSYXdQ
b2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbCkpKTsKKyAgICAvLyBGaXJzdCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gSklU
IGNvZGUgYmVmb3JlIHdlIGNhbiBhcXVpcmUgYW55IGxvY2tzLiBPdGhlcndpc2UsCisgICAgLy8g
d2UgbWlnaHQgaGF2ZSBjcmFzaGVkIGluIGNvZGUgdGhhdCBpcyBhbHJlYWR5IGhvbGRpbmcgb25l
IG9mIHRoZSBsb2NrcyB3ZSB3YW50IHRvIGFxdWlyZS4KKyAgICBpZiAocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpIDw9IGZhdWx0aW5nSW5z
dHJ1Y3Rpb24KKyAgICAgICAgJiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkpIHsKKworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihjb2RlTG9jYXRpb25zTG9jayk7CisgICAgICAgIGZvciAoYXV0byBy
YW5nZSA6IGNvZGVMb2NhdGlvbnMuZ2V0KCkpIHsKKyAgICAgICAgICAgIFZNKiB2bTsKKyAgICAg
ICAgICAgIHZvaWQqIHN0YXJ0OworICAgICAgICAgICAgdm9pZCogZW5kOworICAgICAgICAgICAg
c3RkOjp0aWUodm0sIHN0YXJ0LCBlbmQpID0gcmFuZ2U7CisgICAgICAgICAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAiZnVuY3Rpb24gc3RhcnQ6ICIsIFJhd1BvaW50ZXIoc3RhcnQpLCAiIGVuZDog
IiwgUmF3UG9pbnRlcihlbmQpKTsKKyAgICAgICAgICAgIGlmIChzdGFydCA8PSBmYXVsdGluZ0lu
c3RydWN0aW9uICYmIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPD0gZW5kKSB7CisgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImZvdW5kIG1hdGNoIik7CisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4Y2VwdGlvblN0dWIgPSB2bS0+aml0U3R1YnMtPmV4aXN0
aW5nQ1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICAgICAgICAgIC8vIElmIGZvciB3aGF0ZXZlciByZWFzb24gd2UgZG9uJ3QgaGF2ZSBhIHN0dWIg
dGhlbiB3ZSBzaG91bGQganVzdCB0cmVhdCB0aGlzIGxpa2UgYSByZWd1bGFyIGNyYXNoLgorICAg
ICAgICAgICAgICAgIGlmICghZXhjZXB0aW9uU3R1Yi5zaXplKCkpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJzdHViOiAi
LCBSYXdQb2ludGVyKGV4Y2VwdGlvblN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5fX3NzLl9fcnNpID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5fX3NzLl9fcmlwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oZXhj
ZXB0aW9uU3R1Yi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNpZ25h
bCA9PSBTSUdTRUdWKQorICAgICAgICBzaWdhY3Rpb24oc2lnbmFsLCAmb2xkU2lnU2VnVkhhbmRs
ZXIsIG51bGxwdHIpOworICAgIGVsc2UKKyAgICAgICAgc2lnYWN0aW9uKHNpZ25hbCwgJm9sZFNp
Z0J1c0hhbmRsZXIsIG51bGxwdHIpOworfQorCit2b2lkIHJlZ2lzdGVyQ29kZShWTSYgdm0sIHZv
aWQqIHN0YXJ0LCB2b2lkKiBlbmQpCit7CisgICAgaWYgKCFmYXN0TWVtb3J5RW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisgICAgTG9ja0hvbGRlciBsb2NrZXIoY29kZUxvY2F0aW9uc0xvY2sp
OworICAgIGNvZGVMb2NhdGlvbnMtPmFkZChzdGQ6Om1ha2VfdHVwbGUoJnZtLCBzdGFydCwgZW5k
KSk7Cit9CisKK3ZvaWQgdW5yZWdpc3RlckNvZGUoVk0mIHZtLCB2b2lkKiBzdGFydCwgdm9pZCog
ZW5kKQoreworICAgIGlmICghZmFzdE1lbW9yeUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKKyAgICBjb2RlTG9jYXRp
b25zLT5yZW1vdmUoc3RkOjptYWtlX3R1cGxlKCZ2bSwgc3RhcnQsIGVuZCkpOworfQorCitib29s
IGZhc3RNZW1vcnlFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gZmFzdEhhbmRsZXJJbnN0YWxsZWQ7
Cit9CisKK3ZvaWQgZW5hYmxlRmFzdE1lbW9yeSgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10geworICAgICAgICBzdHJ1Y3Qg
c2lnYWN0aW9uIGFjdGlvbjsKKworICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gdHJhcEhh
bmRsZXI7CisgICAgICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgYWN0
aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAgCisgICAgICAgIGlmICghc2lnYWN0
aW9uKFNJR0JVUywgJmFjdGlvbiwgJm9sZFNpZ0J1c0hhbmRsZXIpKSB7CisgICAgICAgICAgICBm
YXN0SGFuZGxlckluc3RhbGxlZCA9IHRydWU7CisgICAgICAgICAgICBjb2RlTG9jYXRpb25zLmNv
bnN0cnVjdCgpOworICAgICAgICB9CisKKyAgICB9KTsKK30KKyAgICAKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hNzgxYzI4NDA2MjZkZGE5YWMwNTY4ZWJlNThhMTE3MmRjOGI2MWM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgVk07CisKK25hbWVzcGFjZSBXYXNtIHsKKwordm9pZCByZWdpc3RlckNvZGUoVk0m
IHZtLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKK3ZvaWQgdW5yZWdpc3RlckNvZGUoVk0mIHZt
LCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKKworYm9vbCBmYXN0TWVtb3J5RW5hYmxlZCgpOwor
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmFibGVGYXN0TWVtb3J5KCk7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggZGM2MzQ3NDQyMmJmZTYwMzNkOGIy
ZDIyMWJiN2VjNWMxMTA1Njg2Mi4uMWZjNTc0ZTkzZDcyNDdjNjRhOGZhMzM0ZjYyMjVkMmM3Mjcx
ZjY0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtMjU2LDcg
KzI1Niw2IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgfQogCiAgICAgdWludDMy
X3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KLSAgICBib29sIGhhc01lbW9yeSgpIGNvbnN0IHsgcmV0
dXJuICEhbWVtb3J5OyB9CiAKICAgICB+TW9kdWxlSW5mb3JtYXRpb24oKTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IGFhZDkxYzEzZTNhMzAxNjgz
OGZiMDM4NGRhYjVhNDJiNDc3NDNkMjguLjA2ZTg3NmI0MDA3YmY1NTZmN2NlNmM2MjI5NzVmNzRi
ZDE0ZjJhMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBA
IC0yOCw0MSArMjgsMTEzIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRl
ICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Jh
bmRvbU51bWJlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBuYW1l
c3BhY2UgewotY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Citjb25zdCBib29sIHZlcmJvc2Ug
PSB0cnVlOwogfQogCi12b2lkIE1lbW9yeTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
aW5saW5lIGJvb2wgTWVtb3J5OjptbWFwQnl0ZXMoc2l6ZV90IGJ5dGVzKQogewotICAgIFN0cmlu
ZyBtZW1vcnlIZXg7Ci0gICAgV1RGOjphcHBlbmRVbnNpZ25lZDY0QXNIZXgoKHVpbnQ2NF90KSh1
aW50cHRyX3QpbV9tZW1vcnksIG1lbW9yeUhleCk7Ci0gICAgb3V0LnByaW50KCJNZW1vcnkgYXQg
MHgiLCBtZW1vcnlIZXgsICIsIHNpemUgIiwgbV9zaXplLCAiQiBjYXBhY2l0eSAiLCBtX21hcHBl
ZENhcGFjaXR5LCAiQiwgaW5pdGlhbCAiLCBtX2luaXRpYWwsICIgbWF4aW11bSAiLCBtX21heGlt
dW0sICIgbW9kZSAiLCBtYWtlU3RyaW5nKG1fbW9kZSkpOworICAgIGRhdGFMb2dJZih2ZXJib3Nl
LCAiQXR0ZW1wdGluZyB0byBtbWFwICIsIGJ5dGVzLCAiIGJ5dGVzOiAiKTsKKyAgICAvLyBGSVhN
RTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCisgICAgdm9pZCog
cmVzdWx0ID0gbW1hcChudWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1B
UF9BTk9OLCAtMSwgMCk7CisgICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3VjY2VlZGVkIik7CisgICAgbV9tZW1v
cnkgPSByZXN1bHQ7CisgICAgbV9tYXBwZWRDYXBhY2l0eSA9IGJ5dGVzOworICAgIHJldHVybiB0
cnVlOwogfQogCi1jb25zdCBjaGFyKiBNZW1vcnk6Om1ha2VTdHJpbmcoTW9kZSBtb2RlKSBjb25z
dAorLy8gV2UgdXNlIHRoaXMgYXMgYSBoZXVyaXN0aWMgdG8gZ3Vlc3Mgd2hpY2ggbW9kZSB3ZSBz
aG91bGQgYXNzdW1lIHdlIGFyZSBnb2luZyB0byBnZXQgd2hlbiBhIG1vZHVsZSBpbXBvcnRzIGEg
bWVtb3J5Lgorc3RhdGljIE1lbW9yeTo6TW9kZSBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSB7IE1l
bW9yeTo6TW9kZTo6U2lnbmFsaW5nIH07CisKK01lbW9yeTo6TW9kZSBNZW1vcnk6Omxhc3RBbGxv
Y2F0ZWRNb2RlKCkKIHsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIE1vZGU6OkJvdW5k
c0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAgICByZXR1cm4gbGFzdEFsbG9j
YXRlZE1lbW9yeU1vZGU7Cit9CisKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBz
aXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBN
ZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzMgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMy
LWJpdCBpbnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhv
bGQuIik7CisKK3N0YXRpYyBjb25zdCBzaXplX3QgZmFzdE1lbW9yeU1hcHBlZEJ5dGVzID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpICogMjsgLy8gcG9pbnRlciBtYXggKyBv
ZmZzZXQgbWF4LiBUaGlzIGlzIGFsbCB3ZSBuZWVkIHNpbmNlIGEgbG9hZCBzdHJhZGRsaW5nIHJl
YWRhYmxlIG1lbW9yeSB3aWxsIHRyYXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4RmFzdE1l
bW9yaWVzID0gNDsKK3N0YXRpYyB1bnNpZ25lZCBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgeyAwIH07
CitpbmxpbmUgRGVxdWU8dm9pZCosIG1heEZhc3RNZW1vcmllcz4mIGF2YWlsYWJsZUZhc3RNZW1v
cmllcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERlcXVlPHZvaWQqLCBtYXhGYXN0
TWVtb3JpZXM+PiBhdmFpbGFibGVGYXN0TWVtb3JpZXM7CisgICAgcmV0dXJuIGF2YWlsYWJsZUZh
c3RNZW1vcmllczsKK30KKworYm9vbCBNZW1vcnk6OnRyeUdldEZhc3RNZW1vcnkoVk0mIHZtKQor
eworICAgIC8vIFdlIG1pZ2h0IEdDIGhlcmUgc28gd2Ugc2hvdWxkIGJlIGhvbGRpbmcgdGhlIEFQ
SSBsb2NrLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBzeW5jcm9ub3VzbHkg
dHJpZ2dlciB0aGUgR0MgZnJvbSBhbm90aGVyIHRocmVhZC4KKyAgICBBU1NFUlQodm0uY3VycmVu
dFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgaWYgKCFmYXN0TWVtb3J5RW5hYmxlZCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBuZWVkIHRvIGJlIHN1cmUgd2Ug
aGF2ZSBhIHN0dWIgcHJpb3IgdG8gcnVubmluZyBjb2RlLgorICAgIHZtLmdldENUSVN0dWIodGhy
b3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKTsKKworICAgIEFTU0VSVChhbGxvY2F0
ZWRGYXN0TWVtb3JpZXMgPD0gbWF4RmFzdE1lbW9yaWVzKTsKKyAgICBpZiAoIWF2YWlsYWJsZUZh
c3RNZW1vcmllcygpLmlzRW1wdHkoKSkgeworICAgICAgICBtX21lbW9yeSA9IGF2YWlsYWJsZUZh
c3RNZW1vcmllcygpLnRha2VGaXJzdCgpOworICAgICAgICBtX21vZGUgPSBNb2RlOjpTaWduYWxp
bmc7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAiIjsKKworICAgIC8vIElmIHdlIGhhdmUgYWxsb2NhdGVk
IGFsbCB0aGUgZmFzdCBtZW1vcmllcy4uLiB0b28gYmFkLgorICAgIGlmIChhbGxvY2F0ZWRGYXN0
TWVtb3JpZXMgPT0gbWF4RmFzdE1lbW9yaWVzKSB7CisgICAgICAgIC8vIFRoZXJlIGlzIGEgcmVh
c29uYWJsZSBjaGFuY2UgdGhhdCBhbm90aGVyIG1vZHVsZSBoYXMgZGllZCBidXQgaGFzIG5vdCBi
ZWVuIGNvbGxlY3RlZCB5ZXQuIERvbid0IGxvc2UgaG9wZSB5ZXQhCisgICAgICAgIHZtLmhlYXAu
Y29sbGVjdFN5bmMoKTsKKyAgICAgICAgaWYgKCFhdmFpbGFibGVGYXN0TWVtb3JpZXMoKS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIG1fbWVtb3J5ID0gYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCku
dGFrZUZpcnN0KCk7CisgICAgICAgICAgICBtX21vZGUgPSBNb2RlOjpTaWduYWxpbmc7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1tYXBCeXRlcyhmYXN0TWVtb3J5TWFwcGVkQnl0ZXMp
KSB7CisgICAgICAgIG1fbW9kZSA9IE1vZGU6OlNpZ25hbGluZzsKKyAgICAgICAgYWxsb2NhdGVk
RmFzdE1lbW9yaWVzKys7CisgICAgfQorICAgIHJldHVybiBtX21lbW9yeTsKIH0KIAotc3RhdGlj
X2Fzc2VydChzaXplb2YodWludDY0X3QpID09IHNpemVvZihzaXplX3QpLCAiV2UgcmVseSBvbiBh
bGxvd2luZyB0aGUgbWF4aW11bSBzaXplIG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUgMl4zMiB3aGlj
aCBpcyBsYXJnZXIgdGhhbiBmaXRzIGluIGEgMzItYml0IGludGVnZXIgdGhhdCB3ZSdkIHBhc3Mg
dG8gbXByb3RlY3QgaWYgdGhpcyBkaWRuJ3QgaG9sZC4iKTsKK3ZvaWQgTWVtb3J5OjpyZWxlYXNl
RmFzdE1lbW9yeSgpCit7CisgICAgaWYgKG1vZGUoKSAhPSBNb2RlOjpTaWduYWxpbmcgfHwgIW1f
bWVtb3J5KQorICAgICAgICByZXR1cm47CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX21lbW9yeSAm
JiBtX21hcHBlZENhcGFjaXR5ID09IGZhc3RNZW1vcnlNYXBwZWRCeXRlcyk7CisgICAgQVNTRVJU
KGZhc3RNZW1vcnlFbmFibGVkKCkpOworCisgICAgLy8gV2UgbmVlZCB0byBtcHJvdGVjdCBQUk9U
X05PTkUgYWxsIHRoZSBleGlzdGluZyBtZW1vcnkuIElmIHdlIGNhbid0LCBmb3IKKyAgICAvLyB3
aGF0ZXZlciByZWFzb24sIHdlIHNob3VsZCBiYWlsIG91dCBhbmQgZ2V0IHJpZCBvZiB0aGlzIG1l
bW9yeS4KKyAgICBpZiAobXByb3RlY3QobV9tZW1vcnksIG1fc2l6ZSwgUFJPVF9OT05FKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGF2YWlsYWJsZUZhc3RNZW1vcmllcygpLnNpemUo
KSA8IGFsbG9jYXRlZEZhc3RNZW1vcmllcyk7CisgICAgYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCku
YXBwZW5kKG1fbWVtb3J5KTsKKyAgICBtX21lbW9yeSA9IG51bGxwdHI7Cit9CiAKLU1lbW9yeTo6
TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCYgZmFpbGVk
KQorTWVtb3J5OjpNZW1vcnkoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1h
eGltdW0sIGJvb2wmIGZhaWxlZCkKICAgICA6IG1fc2l6ZShpbml0aWFsLmJ5dGVzKCkpCiAgICAg
LCBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQotICAgICwgbV9t
b2RlKE1vZGU6OkJvdW5kc0NoZWNraW5nKQotICAgIC8vIEZJWE1FOiBJZiB3ZSBhZGQgc2lnbmFs
IGJhc2VkIGJvdW5kcyBjaGVja2luZyB0aGVuIHdlIG5lZWQgZXh0cmEgc3BhY2UgZm9yIG92ZXJm
bG93IG9uIGxvYWQuCi0gICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYyNjkzCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1heGltdW0gfHwgbWF4aW11
bSA+PSBpbml0aWFsKTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBvdXIgY2FsbGVy
LgogCkBAIC03MCw1NCArMTQyLDQ4IEBAIE1lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFs
LCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCYgZmFpbGVkKQogICAgIGlmICghbV9tYXBwZWRDYXBh
Y2l0eSkgewogICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIHNwZWNpZmllZCBhIHplcm8gYXMgbWF4
aW11bSAod2hpY2ggbWVhbnMgd2UgYWxzbyBoYXZlIHplcm8gYXMgaW5pdGlhbCBzaXplKS4KICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9zaXplID09IDApOwotICAgICAgICBtX21lbW9yeSA9IG51
bGxwdHI7Ci0gICAgICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSAwOwotICAgICAgICBmYWlsZWQgPSBm
YWxzZTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9y
eTo6TWVtb3J5IGFsbG9jYXRpbmcgbm90aGluZyAiLCAqdGhpcyk7CisgICAgICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJNZW1vcnk6Ok1lbW9yeSBhbGxvY2F0aW5nIG5vdGhpbmcgIiwgKnRoaXMp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5p
Y2UgaWYgd2UgaGFkIGEgVk0gdGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzYwMAotICAgIHZvaWQqIHJlc3VsdCA9IE9wdGlvbnM6
OnNpbXVsYXRlV2ViQXNzZW1ibHlMb3dNZW1vcnkoKSA/IE1BUF9GQUlMRUQgOiBtbWFwKG51bGxw
dHIsIG1fbWFwcGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwg
LTEsIDApOwotICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICAvLyBUcnkg
YWdhaW4gd2l0aCBhIGRpZmZlcmVudCBudW1iZXIuCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Ok1lbW9yeSBtbWFwIGZhaWxlZCBvbmNlIGZvciBj
YXBhY2l0eSwgdHJ5aW5nIGFnYWluIiwgKnRoaXMpOwotICAgICAgICBtX21hcHBlZENhcGFjaXR5
ID0gbV9zaXplOwotICAgICAgICBpZiAoIW1fbWFwcGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgICAg
IG1fbWVtb3J5ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGZhaWxlZCA9IGZhbHNlOwotICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Ok1l
bW9yeSBtbWFwIG5vdCB0cnlpbmcgYWdhaW4gYmVjYXVzZSBzaXplIGlzIHplcm8gIiwgKnRoaXMp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gbW1h
cChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQ
X0FOT04sIC0xLCAwKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAg
ICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6
TWVtb3J5IG1tYXAgZmFpbGVkIHR3aWNlICIsICp0aGlzKTsKLSAgICAgICAgICAgIGZhaWxlZCA9
IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKCF0cnlHZXRGYXN0TWVtb3J5KHZt
KSkgeworICAgICAgICBpZiAoT3B0aW9uczo6c2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSgp
ID8gdHJ1ZSA6ICFtbWFwQnl0ZXMobV9tYXBwZWRDYXBhY2l0eSkpIHsKKyAgICAgICAgICAgIC8v
IFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4KKyAgICAgICAgICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJNZW1vcnk6Ok1lbW9yeSBtbWFwIGZhaWxlZCBvbmNlIGZvciBjYXBhY2l0
eSwgdHJ5aW5nIGFnYWluIiwgKnRoaXMpOworICAgICAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9
IG1fc2l6ZTsKKyAgICAgICAgICAgIGlmICghbV9tYXBwZWRDYXBhY2l0eSkgeworICAgICAgICAg
ICAgICAgIG1fbWVtb3J5ID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkg
bW1hcCBub3QgdHJ5aW5nIGFnYWluIGJlY2F1c2Ugc2l6ZSBpcyB6ZXJvICIsICp0aGlzKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
bW1hcEJ5dGVzKG1fbWFwcGVkQ2FwYWNpdHkpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IG1tYXAgZmFpbGVkIHR3aWNlICIsICp0aGlzKTsK
KyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIEFTU0VSVChtX3NpemUgPD0g
bV9tYXBwZWRDYXBhY2l0eSk7Ci0gICAgewotICAgICAgICBib29sIHN1Y2Nlc3MgPSAhbXByb3Rl
Y3QocmVzdWx0LCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSksIFBST1RfUkVBRCB8IFBST1Rf
V1JJVEUpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzKTsKKyAgICBBU1NFUlQobV9t
ZW1vcnkgJiYgbV9zaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpOworICAgIGlmIChtcHJvdGVjdCht
X21lbW9yeSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dS
SVRFKSkgeworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgbXBy
b3RlY3QgZmFpbGVkICIsICp0aGlzKTsKKyAgICAgICAgcmVsZWFzZUZhc3RNZW1vcnkoKTsKKyAg
ICAgICAgaWYgKG1fbWVtb3J5KQorICAgICAgICAgICAgaWYgKG11bm1hcChtX21lbW9yeSwgbV9t
YXBwZWRDYXBhY2l0eSkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAKLSAgICBt
X21lbW9yeSA9IHJlc3VsdDsKKyAgICBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9IG1fbW9kZTsK
ICAgICBmYWlsZWQgPSBmYWxzZTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xu
KCJNZW1vcnk6Ok1lbW9yeSBtbWFwIHN1Y2NlZWRlZCAiLCAqdGhpcyk7CisgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IG1tYXAgc3VjY2VlZGVkICIsICp0aGlzKTsKIH0K
IAogTWVtb3J5Ojp+TWVtb3J5KCkKIHsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxv
Z0xuKCJNZW1vcnk6On5NZW1vcnkgIiwgKnRoaXMpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJNZW1vcnk6On5NZW1vcnkgIiwgKnRoaXMpOworICAgIHJlbGVhc2VGYXN0TWVtb3J5KCk7CiAg
ICAgaWYgKG1fbWVtb3J5KSB7CiAgICAgICAgIGlmIChtdW5tYXAobV9tZW1vcnksIG1fbWFwcGVk
Q2FwYWNpdHkpKQogICAgICAgICAgICAgQ1JBU0goKTsKQEAgLTEyOCw4ICsxOTQsNyBAQCBib29s
IE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChu
ZXdTaXplID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CiAKLSAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Omdyb3cgdG8gIiwgbmV3U2l6ZSwgIiBmcm9t
ICIsICp0aGlzKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IHRvICIs
IG5ld1NpemUsICIgZnJvbSAiLCAqdGhpcyk7CiAKICAgICBpZiAobWF4aW11bSgpICYmIG5ld1Np
emUgPiBtYXhpbXVtKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEzNywxMSArMjAyLDEz
IEBAIGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQogICAgIHVpbnQ2NF90IGRl
c2lyZWRTaXplID0gbmV3U2l6ZS5ieXRlcygpOwogCiAgICAgaWYgKG1fbWVtb3J5ICYmIGRlc2ly
ZWRTaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gIW1w
cm90ZWN0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9yeSkgKyBtX3NpemUsIHN0YXRpY19j
YXN0PHNpemVfdD4oZGVzaXJlZFNpemUgLSBtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRF
KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7CisgICAgICAgIGlmIChtcHJvdGVj
dChzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9tZW1vcnkpICsgbV9zaXplLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGRlc2lyZWRTaXplIC0gbV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsK
KyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgaW4tcGxhY2Ug
ZmFpbGVkICIsICp0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5Ojpncm93IGluLXBsYWNlICIsICp0aGlzKTsKKyAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyBpbi1wbGFjZSAiLCAqdGhp
cyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTU5LDExICsyMjYsMjggQEAg
Ym9vbCBNZW1vcnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCiAgICAgbV9tYXBwZWRDYXBhY2l0
eSA9IGRlc2lyZWRTaXplOwogICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwogCi0gICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiTWVtb3J5Ojpncm93ICIsICp0aGlzKTsKKyAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93ICIsICp0aGlzKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAordm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBTdHJpbmcgbWVtb3J5SGV4OworICAgIFdURjo6YXBwZW5kVW5zaWduZWQ2NEFzSGV4KCh1
aW50NjRfdCkodWludHB0cl90KW1fbWVtb3J5LCBtZW1vcnlIZXgpOworICAgIG91dC5wcmludCgi
TWVtb3J5IGF0IDB4IiwgbWVtb3J5SGV4LCAiLCBzaXplICIsIG1fc2l6ZSwgIkIgY2FwYWNpdHkg
IiwgbV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAiIG1heGltdW0g
IiwgbV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKK30KKworY29uc3Qg
Y2hhciogTWVtb3J5OjptYWtlU3RyaW5nKE1vZGUgbW9kZSkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1vZGUpIHsKKyAgICBjYXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0No
ZWNraW5nIjsKKyAgICBjYXNlIE1vZGU6OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOwor
ICAgIGNhc2UgTW9kZTo6TnVtYmVyT2ZNb2RlczogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogfSAvLyBuYW1lc3BhY2UgV2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeS5oCmluZGV4IDIzNmJmODUxMjU2NDU1YmNlOWUzMjM2ZGNjNDU4NGM4NmMxZGNmMGMu
LmM4ZTNkZDRiOTcyZDhmNDJjOGZjNmZkNmQ5ZWY5ZDY0MDlmOTgyMzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2lu
Y2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTQzLDI0ICs0MywzOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFdURjo6UHJpbnRT
dHJlYW0mKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBvdGhlciBt
b2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkz
Ci0gICAgZW51bSBjbGFzcyBNb2RlIHsKLSAgICAgICAgQm91bmRzQ2hlY2tpbmcKKyAgICBlbnVt
IE1vZGUgeworICAgICAgICBCb3VuZHNDaGVja2luZywKKyAgICAgICAgU2lnbmFsaW5nLAorICAg
ICAgICBOdW1iZXJPZk1vZGVzCiAgICAgfTsKICAgICBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1v
ZGUpIGNvbnN0OwogCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9tZW1vcnk7IH0KKworICAgIE1lbW9yeSYgb3BlcmF0b3I9KE1lbW9yeSYmIG90aGVyKQor
ICAgIHsKKyAgICAgICAgLy8gTW92aW5nIHRyYW5zZmVycyBvd25lcnNoaXAgb2YgdGhlIGFsbG9j
YXRlZCBtZW1vcnkuCisgICAgICAgIEFTU0VSVChtX21lbW9yeSA9PSBudWxscHRyKTsKKyAgICAg
ICAgc3RkOjpzd2FwKG1fbWVtb3J5LCBvdGhlci5tX21lbW9yeSk7CisgICAgICAgIG1fc2l6ZSA9
IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9pbml0aWFsID0gb3RoZXIubV9pbml0aWFsOworICAg
ICAgICBtX21heGltdW0gPSBvdGhlci5tX21heGltdW07CisgICAgICAgIG1fbWFwcGVkQ2FwYWNp
dHkgPSBvdGhlci5tX21hcHBlZENhcGFjaXR5OworICAgICAgICBtX21vZGUgPSBvdGhlci5tX21v
ZGU7CisgICAgICAgIGlmIChtX21lbW9yeSAmJiBtX21vZGUgPT0gTW9kZTo6U2lnbmFsaW5nKQor
ICAgICAgICAgICAgQVNTRVJUKG1fbWFwcGVkQ2FwYWNpdHkgPT0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpICogMik7CisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIH0K
KwogICAgIE1lbW9yeSgpID0gZGVmYXVsdDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnko
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeShWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSwgYm9vbCYgZmFpbGVkKTsKICAgICBNZW1vcnkoTWVtb3J5JiYgb3RoZXIpCi0g
ICAgICAgIDogbV9tZW1vcnkob3RoZXIubV9tZW1vcnkpCi0gICAgICAgICwgbV9zaXplKG90aGVy
Lm1fc2l6ZSkKLSAgICAgICAgLCBtX2luaXRpYWwob3RoZXIubV9pbml0aWFsKQotICAgICAgICAs
IG1fbWF4aW11bShvdGhlci5tX21heGltdW0pCi0gICAgICAgICwgbV9tYXBwZWRDYXBhY2l0eShv
dGhlci5tX21hcHBlZENhcGFjaXR5KQotICAgICAgICAsIG1fbW9kZShvdGhlci5tX21vZGUpCiAg
ICAgewotICAgICAgICAvLyBNb3ZpbmcgdHJhbnNmZXJzIG93bmVyc2hpcCBvZiB0aGUgYWxsb2Nh
dGVkIG1lbW9yeS4KLSAgICAgICAgb3RoZXIubV9tZW1vcnkgPSBudWxscHRyOworICAgICAgICAq
dGhpcyA9IFdURk1vdmUob3RoZXIpOwogICAgIH0KKwogICAgIH5NZW1vcnkoKTsKIAogICAgIHZv
aWQqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9CkBAIC03MCwxNCArODQsMjEg
QEAgcHVibGljOgogICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0
aWFsOyB9CiAgICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07
IH0KIAorICAgIHN0YXRpYyBNb2RlIGxhc3RBbGxvY2F0ZWRNb2RlKCk7CiAgICAgTW9kZSBtb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKICAgICBib29sIGdyb3coUGFnZUNvdW50KTsK
IAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoTWVtb3J5LCBtX21lbW9yeSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fc2l6ZSk7IH0KLSAg
ICAKKwogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTWVtb3J5SW5mb3JtYXRpb247CisgICAg
Ym9vbCBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVDb3VudCk7CisKKyAgICBib29sIHRyeUdldEZhc3RN
ZW1vcnkoVk0mIHZtKTsKKyAgICB2b2lkIHJlbGVhc2VGYXN0TWVtb3J5KCk7CisKICAgICB2b2lk
KiBtX21lbW9yeSB7IG51bGxwdHIgfTsKICAgICB1aW50NjRfdCBtX3NpemUgeyAwIH07CiAgICAg
UGFnZUNvdW50IG1faW5pdGlhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCmluZGV4IDZiMDYzZDM1MTI0ZTk3YTgzYjFmMWUw
ODczYTQxMDdjOWYwZTlmZDUuLmNkNTMxNjZlMTQ2YjU3NDIzZDc0NzRhZTkzMzcxOTc4Y2E0OTBi
NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZv
cm1hdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21NZW1v
cnkuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTcxLDExICs3MiwyMyBAQCBQaW5uZWRSZWdpc3RlckluZm86
OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXpl
UmVnaQogewogfQogCi1NZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24oUGFnZUNv
dW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCAgYm9vbCBpc0ltcG9ydCkKK01lbW9yeUlu
Zm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbihWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQ
YWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1v
ZGUsIGJvb2wgaXNJbXBvcnQpCiAgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4
aW11bShtYXhpbXVtKQogICAgICwgbV9pc0ltcG9ydChpc0ltcG9ydCkKIHsKKyAgICBpZiAoIWlz
SW1wb3J0ICYmICFyZWNvbXBpbGVNb2RlKSB7CisgICAgICAgIGJvb2wgZmFpbGVkVG9SZXNlcnZl
OworICAgICAgICBhdXRvIG1lbSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVtb3J5Pih2bSwgaW5pdGlh
bCwgbWF4aW11bSwgZmFpbGVkVG9SZXNlcnZlKTsKKyAgICAgICAgaWYgKCFmYWlsZWRUb1Jlc2Vy
dmUpIHsKKyAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1vcnkgPSBXVEZNb3ZlKG1lbSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgaWYgKHJlY29tcGlsZU1vZGUpCisgICAgICAgIG1fbW9kZSA9ICpy
ZWNvbXBpbGVNb2RlOworICAgIGVsc2UKKyAgICAgICAgbV9tb2RlID0gTWVtb3J5OjpsYXN0QWxs
b2NhdGVkTW9kZSgpOworCiAgICAgUkVMRUFTRV9BU1NFUlQoISFtX2luaXRpYWwpOwogICAgIFJF
TEVBU0VfQVNTRVJUKCFtX21heGltdW0gfHwgbV9tYXhpbXVtID49IG1faW5pdGlhbCk7CiAgICAg
QVNTRVJUKCEhKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5SW5mb3JtYXRpb24uaAppbmRleCA2ZTdmNTIxODk0N2UwMTZiNDhmZGY2MDE5ZDM2OGE1
NzU3ZTM4NWI3Li5kM2M2MzhhYmYwODk3ODVjNGNhMzQwYWVlNWMwYjc1ZDE2NzU4MWI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
aApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUg
IkdQUkluZm8uaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VD
b3VudC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNTIsMTcgKzUzLDI0IEBAIHB1
YmxpYzoKICAgICAgICAgQVNTRVJUKCEqdGhpcyk7CiAgICAgfQogCi0gICAgTWVtb3J5SW5mb3Jt
YXRpb24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sIGlzSW1wb3J0
KTsKKyAgICBNZW1vcnlJbmZvcm1hdGlvbihWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IG1vZGUsIGJvb2wgaXNJbXBv
cnQpOwogCiAgICAgUGFnZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7
IH0KICAgICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQor
ICAgIGJvb2wgaGFzUmVzZXJ2ZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc2VydmVkTWVt
b3J5ICYmICEhKm1fcmVzZXJ2ZWRNZW1vcnk7IH0KKyAgICBNZW1vcnkmIHJlc2VydmVkTWVtb3J5
KCkgY29uc3QgeyByZXR1cm4gKm1fcmVzZXJ2ZWRNZW1vcnk7IH0KKyAgICBNZW1vcnk6Ok1vZGUg
bW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgaXNJbXBvcnQoKSBjb25z
dCB7IHJldHVybiBtX2lzSW1wb3J0OyB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gISFtX2luaXRpYWw7IH0KIAogcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlz
IGEgdW5pcXVlX3B0ciBzbyB3ZSBjYW4gcGFzcyBNb2R1bGVJbmZvcm1hdGlvbiBhcyBjb25zdCBh
bmQgc3RpbGwgYmUKKyAgICAvLyBhYmxlIHRvIHRha2Ugb3duZXJzaGlwIG9mIHRoaXMuCisgICAg
c3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4gbV9yZXNlcnZlZE1lbW9yeTsKICAgICBQYWdlQ291bnQg
bV9pbml0aWFsIHsgfTsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVtIHsgfTsKKyAgICBNZW1vcnk6
Ok1vZGUgbV9tb2RlIHsgTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGJvb2wg
bV9pc0ltcG9ydCB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDUxNzczZDA2ZTYyMDEyM2I1YWMwNDI2MmE5
MDhiYWIwYmY4ZjE1OTkuLjUyMTE2NGZmNGM0NmFiNGYxYTNjY2EzN2NkZTkzOWUxMmViNmJiYzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3Bw
CkBAIC0zMTYsNyArMzE2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVy
KGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBBU1NFUlQoaW5pdGlhbFBhZ2VD
b3VudCk7CiAgICAgQVNTRVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQg
Pj0gaW5pdGlhbFBhZ2VDb3VudCk7CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1l
bW9yeUluZm9ybWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1w
b3J0KTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKCpt
X3ZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBtX21vZGUsIGlzSW1wb3J0
KTsKICAgICByZXR1cm4geyB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmgKaW5kZXggNDFiNTdmYzgyMGM0NWI5YjRlYzVmYTdjNjk1YmE1NmNh
ZmI4NGExMC4uOTRiYTE0ZTE1YTNmZGEzMTA0ZTMzYmFjMDkzYzFmMWU4MWNmMjBjNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAj
aW5jbHVkZSAiV2FzbVBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAg
LTQzLDEyICs0NCw5IEBAIHN0cnVjdCBNb2R1bGVQYXJzZXJSZXN1bHQgewogY2xhc3MgTW9kdWxl
UGFyc2VyIDogcHVibGljIFBhcnNlcjxNb2R1bGVQYXJzZXJSZXN1bHQ+IHsKIHB1YmxpYzoKIAot
ICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6
ZV90IHNvdXJjZUxlbmd0aCkKKyAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBjb25zdCB1aW50OF90
KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0ZDo6b3B0aW9uYWw8TWVtb3J5
OjpNb2RlPiBtb2RlKQogICAgICAgICA6IFBhcnNlcih2bSwgc291cmNlQnVmZmVyLCBzb3VyY2VM
ZW5ndGgpCi0gICAgewotICAgIH0KLSAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIHNvdXJjZUJ1ZmZlcikKLSAgICAgICAgOiBNb2R1bGVQYXJzZXIodm0sIHNv
dXJjZUJ1ZmZlci5kYXRhKCksIHNvdXJjZUJ1ZmZlci5zaXplKCkpCisgICAgICAgICwgbV9tb2Rl
KG1vZGUpCiAgICAgewogICAgIH0KIApAQCAtNjgsNiArNjYsNyBAQCBwcml2YXRlOgogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVp
bnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKIAogICAgIE1vZHVsZVBhcnNlclJlc3VsdCBt
X3Jlc3VsdDsKKyAgICBzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gbV9tb2RlIHsgc3RkOjpu
dWxsb3B0IH07CiAgICAgYm9vbCBtX2hhc1RhYmxlIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCA1OTgwYjUxZTg3NDIyMjM3NTVjZTBj
M2RmMmMxNmIxZGU5ZWM4ZjEyLi40ODM1YWEyOGYyY2FmN2EyMWM2YWM0YTE5M2MzNzcxZTU4Mjhj
YWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmlu
ZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldh
c21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVk
ZSAiV2FzbU1vZHVsZVBhcnNlci5oIgogI2luY2x1ZGUgIldhc21WYWxpZGF0ZS5oIgpAQCAtNjEs
MTQgKzYyLDE0IEBAIFBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNp
emVfdCBzb3VyY2VMZW5ndGgpCiB7CiB9CiAKLWJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1v
ZHVsZSgpCitib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRpb25hbDxN
ZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCiB7CiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRp
bWU7CiAgICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCiAg
ICAgICAgIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogCiAgICAgewotICAgICAg
ICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKG1fdm0sIG1fc291cmNlLCBtX3NvdXJjZUxlbmd0
aCk7CisgICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV92bSwgbV9zb3VyY2UsIG1f
c291cmNlTGVuZ3RoLCByZWNvbXBpbGVNb2RlKTsKICAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9
IG1vZHVsZVBhcnNlci5wYXJzZSgpOwogICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7CiAgICAg
ICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHBhcnNlUmVzdWx0LmVycm9yKCk7CkBAIC0xMDksMTAg
KzExMCwxMiBAQCBib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQogLy8gVGhlIHJl
YXNvbiB0aGlzIGlzIE9LIGlzIHRoYXQgd2UgZ3VhcmFudGVlIHRoYXQgdGhlIG1haW4gdGhyZWFk
IGRvZXNuJ3QgY29udGludWUgdW50aWwgYWxsIHRocmVhZHMKIC8vIHRoYXQgY291bGQgdG91Y2gg
aXRzIHN0YWNrIGFyZSBkb25lIGV4ZWN1dGluZy4KIFNVUFBSRVNTX0FTQU4gCi12b2lkIFBsYW46
OnJ1bigpCit2b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gcmVjb21w
aWxlTW9kZSkKIHsKLSAgICBpZiAoIXBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkKKyAgICBpZiAo
IXBhcnNlQW5kVmFsaWRhdGVNb2R1bGUocmVjb21waWxlTW9kZSkpCiAgICAgICAgIHJldHVybjsK
KyAgICBpZiAocmVjb21waWxlTW9kZSkKKyAgICAgICAgQVNTRVJUKG1fbW9kdWxlSW5mb3JtYXRp
b24tPm1lbW9yeS5tb2RlKCkgPT0gcmVjb21waWxlTW9kZSk7CiAKICAgICBhdXRvIHRyeVJlc2Vy
dmVDYXBhY2l0eSA9IFt0aGlzXSAoYXV0byYgdmVjdG9yLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hh
ciogd2hhdCkgewogICAgICAgICBpZiAoVU5MSUtFTFkoIXZlY3Rvci50cnlSZXNlcnZlQ2FwYWNp
dHkoc2l6ZSkpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCA2OTgw
YmRiYmJlMTdhNTE5NWM4YzVlMDM1ZWI0ZTZhYTEwZDJjZjE1Li5kMDcwMzc1MjAzMmM5YWEwY2Q4
NTg0MTdmYjE3MjZlN2ZiOWMzZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmgKQEAgLTQ5LDkgKzQ5LDkgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4o
Vk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+UGxh
bigpOwogCi0gICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7CisgICAgYm9vbCBwYXJz
ZUFuZFZhbGlkYXRlTW9kdWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiA9IHN0ZDo6bnVs
bG9wdCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1bigpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiA9IHN0ZDo6bnVs
bG9wdCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVDYWxsZWVzKEpT
R2xvYmFsT2JqZWN0Kiwgc3RkOjpmdW5jdGlvbjx2b2lkKHVuc2lnbmVkLCBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSopPik7CiAKQEAgLTkyLDYgKzkyLDggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gV1RGTW92ZShtX3dhc21FeGl0U3R1YnMpOwogICAgIH0KIAor
ICAgIE1lbW9yeTo6TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+bWVtb3J5Lm1vZGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1
bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICBWZWN0b3I8RnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5PiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKaW5k
ZXggYzI3NzEyYTEwZmZmYzhkZjNmMWViNjA2YjA4Y2ZjOWYwN2Y4ZTM2Yi4uNTE3MTI3ODVmMjkz
YjhmMTBiYTBkOTk3YzQ2YTAxZWI1OTdkNDhmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKQEAgLTI5LDYgKzI5LDcg
QEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtNDMsMTEgKzQ0LDEzIEBAIHZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAKICAgICBtX2VudHJ5cG9pbnQgPSBXVEZNb3ZlKGVudHJ5cG9pbnQp
OworICAgIFdhc206OnJlZ2lzdGVyQ29kZSh2bSwgbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5j
b2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCBtX2VudHJ5cG9pbnQuY29tcGls
YXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKIH0KIAogdm9pZCBK
U1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxl
ZSo+KGNlbGwpOworICAgIFdhc206OnVucmVnaXN0ZXJDb2RlKCpjZWxsLT52bSgpLCB0aGlzT2Jq
ZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5
KCktPnN0YXJ0KCksIHRoaXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJl
ZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwogICAgIHRoaXNPYmplY3QtPkpTV2ViQXNz
ZW1ibHlDYWxsZWU6On5KU1dlYkFzc2VtYmx5Q2FsbGVlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2JjOGYyZGYzNzExYTNmMGRkZTk5YmZmODgwNzQ0ODQ5ODc1OGUxNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2suY3BwCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25z
dCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c19pbmZvID0geyAiV2ViQXNzZW1i
bHlDb2RlQmxvY2siLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2spIH07CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFnPENhbGxMaW5r
SW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiB3YXNt
RXhpdFN0dWJzLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQp
CisgICAgOiBCYXNlKHZtLCB2bS53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSkK
KyAgICAsIG1fY2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5rSW5mb3MpKQorICAgICwgbV93
YXNtRXhpdFN0dWJzKFdURk1vdmUod2FzbUV4aXRTdHVicykpCisgICAgLCBtX21vZGUobW9kZSkK
KyAgICAsIG1fY2FsbGVlQ291bnQoY2FsbGVlQ291bnQpCit7CisgICAgbV9tb2R1bGUuc2V0KHZt
LCB0aGlzLCBvd25lcik7CisgICAgbWVtc2V0KGNhbGxlZXMoKSwgMCwgbV9jYWxsZWVDb3VudCAq
IHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogMik7Cit9CisKK3Zv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAg
c3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygpOworfQorCit2b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
bW9kdWxlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9jYWxs
ZWVDb3VudCAqIDI7IGkrKykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+Y2Fs
bGVlcygpW2ldKTsKKworICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmdGhp
c09iamVjdC0+bV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKK30KKwordm9pZCBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpCit7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogdGhpc09iamVjdCA9IGJpdHdp
c2VfY2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oCisgICAgICAgIGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaywgbV91
bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7CisgICAgZm9yIChhdXRvIGl0ZXIgPSB0aGlzT2JqZWN0
LT5tX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCisgICAgICAgICgqaXRl
ciktPnZpc2l0V2VhaygqdGhpc09iamVjdC0+dm0oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXggZmJj
MWNlYmZiOWNiOGE1OWM5ZWFlNmU2ZGQ5OWZjNTU1ZjViMTNjYy4uMGU3MTFmNDFhOTg5MTIwYzA1
ZjYxYmY3ZDM1NTcyYTg4YWM2Y2YyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDYgKzM4LDE3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCit7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChtZW1v
cnktPm1lbW9yeSgpLT5tb2RlKCkgIT0gbWVtb3J5TW9kZSgpKSB7CisgICAgICAgIGF1dG8gY29k
ZUJsb2NrID0gbV9jb2RlQmxvY2stPm1vZHVsZSgpLT5jb2RlQmxvY2sodm0sIGV4ZWMsIG1lbW9y
eSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsICk7CisgICAgICAgIG1fY29k
ZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKKyAgICB9CisgICAgbV9tZW1vcnkuc2V0
KHZtLCB0aGlzLCBtZW1vcnkpOworfQorCiBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTV2Vi
QXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5h
bWVzcGFjZU9iamVjdCkKIHsKICAgICAvLyBGSVhNRTogVGhlc2Ugb2JqZWN0cyBjb3VsZCBiZSBw
cmV0dHkgYmlnIHdlIHNob3VsZCB0cnkgdG8gdGhyb3cgT09NIGhlcmUuCkBAIC02Nyw3ICs3OCw3
IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBtX2dsb2JhbHMgPSBNYWxsb2NQdHI8dWlu
dDY0X3Q+OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKICAgICBoZWFwKCktPnJlcG9ydEV4dHJh
TWVtb3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7CiAKLSAgICBtX21vZHVsZS5zZXQodm0s
IHRoaXMsIG1vZHVsZSk7CisgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBtb2R1bGUtPmNv
ZGVCbG9jaygpKTsKICAgICBtX21vZHVsZU5hbWVzcGFjZU9iamVjdC5zZXQodm0sIHRoaXMsIG1v
ZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImV4cG9ydHMiKSwgbW9kdWxlTmFtZXNwYWNlT2JqZWN0LCBOb25lKTsKIH0K
QEAgLTgzLDcgKzk0LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fbW9kdWxlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9jayk7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGVOYW1lc3BhY2VPYmplY3Qp
OwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbWVtb3J5KTsKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX3RhYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggOTlhMmM5MGY3ZWEz
NTNlMzZiNjU1YWJlNWNkZDVjNDk4M2M1M2ExOC4uMTU5ODdjODI4MzAyMWQ1OTVjZDRjNzM0NGE2
Yjk5NjFlMjQxZWViYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUg
IkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9y
eS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJsZS5oIgogCkBAIC00NywxMCArNDgsMTYg
QEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVs
ZSogbW9kdWxlKCkKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdAogICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlLmdl
dCgpOworICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPm1vZHVsZSgpOworICAgIH0KKworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNv
ZGVCbG9jaygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2spOworICAg
ICAgICByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7CiAgICAgfQogCiAgICAgV3JpdGVCYXJyaWVy
PEpTQ2VsbD4qIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkKQEAgLTcwLDcgKzc3LDkgQEAg
cHVibGljOgogICAgIH0KIAogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0
dXJuIG1fbWVtb3J5LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFz
c2VtYmx5TWVtb3J5KiBtZW1vcnkpIHsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBtZW1vcnkpOyB9
CisgICAgLy8gQ2FsbGluZyB0aGlzIG1pZ2h0IHRyaWdnZXIgYSByZWNvbXBpbGUuCisgICAgdm9p
ZCBzZXRNZW1vcnkoVk0mIHZtLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1v
cnkpOworICAgIFdhc206Ok1lbW9yeTo6TW9kZSBtZW1vcnlNb2RlKCkgeyByZXR1cm4gbWVtb3J5
KCktPm1lbW9yeSgpLT5tb2RlKCk7IH0KIAogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUo
KSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRUYWJsZShWTSYgdm0sIEpT
V2ViQXNzZW1ibHlUYWJsZSogdGFibGUpIHsgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsg
fQpAQCAtMTA0LDcgKzExMyw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOworICAgIFdyaXRlQmFy
cmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBXcml0ZUJhcnJp
ZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogICAg
IFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseVRhYmxlPiBtX3RhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRleCAwOGZhNTg0
NjI4ZjA3ZDJkOGM4YzNiMmI3OGQxMTU4MGM0ZjI4MTc2Li41OGU5ODMwZmFhODYxOTk4YjAxNGNm
ZDNiNWQ0YjRiOTczZjIxNjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcApAQCAtMzAsMTggKzMwLDU5IEBACiAKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgor
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2lu
Y2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAi
V2FzbVBsYW4uaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseU1vZHVsZTo6c19pbmZvID0geyAi
V2ViQXNzZW1ibHkuTW9kdWxlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1dlYkFzc2VtYmx5TW9kdWxlKSB9OwogCi1KU1dlYkFzc2VtYmx5TW9kdWxlKiBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
c3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYmIG1vZHVsZUluZm9ybWF0
aW9uLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpXYXNt
RXhpdFN0dWJzPiYmIHdhc21FeGl0U3R1YnMsIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJs
ZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCitKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFz
c2VtYmx5TW9kdWxlOjpidWlsZENvZGVCbG9jayhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgV2Fz
bTo6UGxhbiYgcGxhbiwgc3RkOjpvcHRpb25hbDxXYXNtOjpNZW1vcnk6Ok1vZGU+IG1vZGUpCiB7
Ci0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFz
c2VtYmx5TW9kdWxlPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxsZWVDb3VudCkpKSBKU1dl
YkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUsIHN0ZDo6Zm9yd2FyZDxzdGQ6OnVuaXF1ZV9w
dHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+Pihtb2R1bGVJbmZvcm1hdGlvbiksIHN0ZDo6Zm9y
d2FyZDxCYWc8Q2FsbExpbmtJbmZvPj4oY2FsbExpbmtJbmZvcyksIHN0ZDo6Zm9yd2FyZDxWZWN0
b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4+KHdhc21FeGl0U3R1YnMpLCBjYWxsZWVDb3VudCk7Ci0g
ICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBleHBvcnRTeW1ib2xUYWJsZSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIC8vIE9uIGZhaWx1cmUs
IGEgbmV3IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciBpcyB0aHJvd24uCisgICAgcGxhbi5ydW4o
bW9kZSk7CisgICAgaWYgKHBsYW4uZmFpbGVkKCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoZXhlYywgdm0sIHBs
YW4uZXJyb3JNZXNzYWdlKCkpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAg
IGlmIChtb2RlKQorICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcGxhbi5tb2RlKCkpOworCisgICAg
dW5zaWduZWQgY2FsbGVlQ291bnQgPSBwbGFuLmludGVybmFsRnVuY3Rpb25Db3VudCgpOworICAg
IGF1dG8qIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgdGhp
cywgcGxhbi50YWtlQ2FsbExpbmtJbmZvcygpLCBwbGFuLnRha2VXYXNtRXhpdFN0dWJzKCksIHBs
YW4ubW9kZSgpLCBjYWxsZWVDb3VudCk7CisKKyAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKGV4
ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLAorICAgICAgICBbJl0gKHVuc2lnbmVkIGNh
bGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUsIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7CisgICAgICAgICAgIGNvZGVC
bG9jay0+c2V0SlNFbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50
Q2FsbGVlKTsKKyAgICAgICAgICAgY29kZUJsb2NrLT5zZXRXYXNtRW50cnlwb2ludENhbGxlZSh2
bSwgY2FsbGVlSW5kZXgsIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgfSk7CisgICAg
cmV0dXJuIGNvZGVCbG9jazsKK30KKworSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJBc3NlbWJs
eU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpCit7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHNv
dXJjZSwgYnl0ZVNpemUpOworCisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1v
ZHVsZSh2bSwgc3RydWN0dXJlKTsKKworICAgIGF1dG8qIGNvZGVCbG9jayA9IGluc3RhbmNlLT5i
dWlsZENvZGVCbG9jayh2bSwgZXhlYywgcGxhbik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CisKKyAgICAvLyBPbiBzdWNjZXNzLCBhIG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUgb2JqZWN0IGlzIHJldHVybmVkIHdpdGggW1tNb2R1bGVdXSBzZXQgdG8gdGhlIHZhbGlk
YXRlZCBBc3QubW9kdWxlLgorICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSA9IFN5
bWJvbFRhYmxlOjpjcmVhdGUodm0pOworICAgIGZvciAoYXV0byYgZXhwIDogcGxhbi5leHBvcnRz
KCkpIHsKKyAgICAgICAgYXV0byBvZmZzZXQgPSBleHBvcnRTeW1ib2xUYWJsZS0+dGFrZU5leHRT
Y29wZU9mZnNldChOb0xvY2tpbmdOZWNlc3NhcnkpOworICAgICAgICBleHBvcnRTeW1ib2xUYWJs
ZS0+c2V0KE5vTG9ja2luZ05lY2Vzc2FyeSwgZXhwLmZpZWxkLmltcGwoKSwgU3ltYm9sVGFibGVF
bnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOworICAgIH0KKworICAgIGluc3RhbmNlLT5maW5pc2hD
cmVhdGlvbih2bSwgcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKSwgZXhwb3J0U3ltYm9sVGFi
bGUsIGNvZGVCbG9jayk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCkBAIC01MCwyMSArOTEs
NDMgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNz
ZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRy
PFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYmIG1vZHVsZUluZm9ybWF0aW9uLCBCYWc8Q2FsbExp
bmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmIHdh
c21FeGl0U3R1YnMsIHVuc2lnbmVkIGNhbGxlZUNvdW50KQorSlNXZWJBc3NlbWJseU1vZHVsZTo6
SlNXZWJBc3NlbWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQotICAgICwgbV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKG1v
ZHVsZUluZm9ybWF0aW9uKSkKLSAgICAsIG1fY2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5r
SW5mb3MpKQotICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1vdmUod2FzbUV4aXRTdHVicykpCi0g
ICAgLCBtX2NhbGxlZUNvdW50KGNhbGxlZUNvdW50KQogewotICAgIG1lbXNldChjYWxsZWVzKCks
IDAsIG1fY2FsbGVlQ291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxs
ZWU+KSAqIDIpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKQorSlNXZWJBc3NlbWJseUNv
ZGVCbG9jayogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCit7CisgICAgV2FzbTo6TWVtb3J5
OjpNb2RlIG1vZGUgPSBtZW1vcnktPm1lbW9yeSgpLT5tb2RlKCk7CisgICAgaWYgKCFtX2NvZGVC
bG9ja3NbbW9kZV0pIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgY29kZSBibG9jayBmb3IgdGhpcyBtb2Rl
LCB3ZSBuZWVkIHRvIHJlY29tcGlsZS4uLgorICAgICAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBz
dGF0aWNfY2FzdDx1aW50OF90Kj4obV9zb3VyY2VCdWZmZXItPmRhdGEoKSksIG1fc291cmNlQnVm
ZmVyLT5ieXRlTGVuZ3RoKCkpOworCisgICAgICAgIGF1dG8qIGNvZGVCbG9jayA9IGJ1aWxkQ29k
ZUJsb2NrKHZtLCBleGVjLCBwbGFuKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CisKKyAgICAgICAgQVNTRVJUKHBsYW4uZXhwb3J0cygpLnNpemUoKSA9PSBt
X2V4cG9ydFN5bWJvbFRhYmxlLT5zaXplKCkpOworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxF
RCkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4cG9ydHMoKSkKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobV9leHBvcnRTeW1ib2xUYWJsZS0+Y29udGFpbnMoZXhwLmZpZWxk
LmltcGwoKSkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG1vZGUgPSBjb2RlQmxvY2st
Pm1vZGUoKSk7CisgICAgICAgIG1fY29kZUJsb2Nrc1ttb2RlXS5zZXQodm0sIHRoaXMsIGNvZGVC
bG9jayk7CisgICAgfQorCisgICAgcmV0dXJuIG1fY29kZUJsb2Nrc1ttb2RlXS5nZXQoKTsKK30K
Kwordm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIHN0ZDo6
dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJiBtb2R1bGVJbmZvcm1hdGlvbiwg
U3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBj
b2RlQmxvY2spCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChp
bmhlcml0cyh2bSwgaW5mbygpKSk7CisgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUo
bW9kdWxlSW5mb3JtYXRpb24pOwogICAgIG1fZXhwb3J0U3ltYm9sVGFibGUuc2V0KHZtLCB0aGlz
LCBleHBvcnRTeW1ib2xUYWJsZSk7CisgICAgbV9jb2RlQmxvY2tzW2NvZGVCbG9jay0+bW9kZSgp
XS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CisKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5TW9k
dWxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTc5LDE4ICsxNDIsOCBAQCB2b2lkIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRTeW1ib2xUYWJsZSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fY2FsbGVlQ291bnQgKiAy
OyBpKyspCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmNhbGxlZXMoKVtpXSk7
Ci0KLSAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJnRoaXNPYmplY3QtPm1f
dW5jb25kaXRpb25hbEZpbmFsaXplcik7Ci19Ci0KLXZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6
VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQotewotICAg
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIHRoaXNPYmplY3QgPSBiaXR3aXNlX2Nhc3Q8SlNXZWJBc3Nl
bWJseU1vZHVsZSo+KAotICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNU
X09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNb2R1bGUsIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcikp
OwotICAgIGZvciAoYXV0byBpdGVyID0gdGhpc09iamVjdC0+bV9jYWxsTGlua0luZm9zLmJlZ2lu
KCk7ICEhaXRlcjsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT52aXNpdFdlYWsoKnRoaXNPYmpl
Y3QtPnZtKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXYXNtOjpNZW1vcnk6Ok51
bWJlck9mTW9kZXM7ICsraSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9j
b2RlQmxvY2tzW2ldKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggN2UwNTFm
NTcyMjQyNDY4YTY2NDE5MDMxYTg4OTVjNjEzNmUzMDg3Ni4uNDlkYWFhOGViNjRhYTc0ZDczNGNk
ODQxOGNlZjhhZjIyZDdhODM0YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJK
U0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiV2FzbUZv
cm1hdC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAgLTM3LDEzICszNywxOCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdhc20geworY2xhc3MgUGxhbjsKK30KKwogY2xhc3Mg
U3ltYm9sVGFibGU7CitjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5OwogCiBjbGFzcyBKU1dlYkFz
c2VtYmx5TW9kdWxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJB
c3NlbWJseU1vZHVsZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiYmLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0b3I8V2Fz
bTo6V2FzbUV4aXRTdHVicz4mJiwgU3ltYm9sVGFibGUqLCB1bnNpZ25lZCk7CisgICAgc3RhdGlj
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKTsKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAg
REVDTEFSRV9JTkZPOwpAQCAtNTQsNjggKzU5LDI0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICB9Ci0gICAgdW5zaWduZWQgZnVuY3Rp
b25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IH0K
LQotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQotICAgIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQo
KSk7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0g
ZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRl
eCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4
XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
KQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1
bmN0aW9uSW1wb3J0Q291bnQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVu
Y3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICByZXR1cm4gY2Fs
bGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0uZ2V0KCk7Ci0gICAgfQotCi0gICAg
dm9pZCBzZXRKU0VudHJ5cG9pbnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxsZWVJbmRleCwg
SlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgY2FsbGVlcygpW2NhbGxl
ZUluZGV4XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7Ci0gICAgfQogCi0gICAgdm9pZCBzZXRXYXNt
RW50cnlwb2ludENhbGxlZShWTSYgdm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiBjYWxsZWUpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJ
bmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBt
X2NhbGxlZUNvdW50XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7Ci0gICAgfQorICAgIC8vIFJldHVy
bnMgdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIG1vZHVsZSB3YXMgb3JpZ2luYWxseSBjb21waWxl
ZCBleHBlY3RpbmcgdG8gdXNlLiBUaGlzIHdvbid0IG5lZWQgdG8gcmVjb21waWxlLgorICAgIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tt
X21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpXS5nZXQoKTsgfQorICAgIC8vIFJldHVy
bnMgdGhlIGFwcHJvcHJpYXRlIGNvZGUgYmxvY2sgZm9yIHRoZSBnaXZlbiBtZW1vcnksIHBvc3Np
Ymx5IHRyaWdnZXJpbmcgYSByZWNvbXBpbGUuCisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
Y29kZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CiAK
LSAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNh
bGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOwot
ICAgIH0KK3ByaXZhdGU6CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogYnVpbGRDb2RlQmxv
Y2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFdhc206OlBsYW4mLCBzdGQ6Om9wdGlvbmFsPFdh
c206Ok1lbW9yeTo6TW9kZT4gbW9kZSA9IHN0ZDo6bnVsbG9wdCk7CiAKLXByb3RlY3RlZDoKLSAg
ICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiYmLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0b3I8V2Fz
bTo6V2FzbUV4aXRTdHVicz4mJiwgdW5zaWduZWQgY2FsbGVlQ291bnQpOwotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBTeW1ib2xUYWJsZSopOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUo
Vk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgc3RkOjp1bmlx
dWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYmLCBTeW1ib2xUYWJsZSosIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2sqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotcHJp
dmF0ZToKLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mQ2FsbGVlcygpCi0gICAgewotICAgICAg
ICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNX
ZWJBc3NlbWJseUNhbGxlZT4pPihzaXplb2YoSlNXZWJBc3NlbWJseU1vZHVsZSkpOwotICAgIH0K
LQotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbnVtQ2FsbGVlcykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBvZmZzZXRPZkNhbGxlZXMoKSArIHNpemVvZihXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogbnVtQ2FsbGVlcyAqIDI7Ci0gICAgfQotCi0g
ICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIgeyAKLSAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92
ZXJyaWRlOwotICAgIH07Ci0KLSAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcjsKKyAgICBBcnJheUJ1ZmZlciogbV9zb3VyY2VCdWZmZXI7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9u
OwotICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICBXcml0ZUJhcnJp
ZXI8U3ltYm9sVGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7Ci0gICAgVmVjdG9yPFdhc206Oldh
c21FeGl0U3R1YnM+IG1fd2FzbUV4aXRTdHViczsKLSAgICB1bnNpZ25lZCBtX2NhbGxlZUNvdW50
OworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja3Nb
V2FzbTo6TWVtb3J5OjpOdW1iZXJPZk1vZGVzXTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0
YW5jZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNzYzZGM0OTRjZTVhNDc4MmQ2ZTY4
NDdmODIyNTY2MWIzNWJkYTdhYi4uMTQyNTNiMWJiNmRjZjgyZDFhMDMyMTExZWQ4ZWUwNjQ5MDVl
ZGVkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC04Nyw3ICs4Nyw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgewogICAgICAgICAvLyBBbHdheXMgc3RhcnQg
d2l0aCBhIGR1bW15IE1lbW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNo
ZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVn
aXN0ZXJzLgogICAgICAgICBXYXNtOjpNZW1vcnkgbWVtb3J5OwotICAgICAgICBpbnN0YW5jZS0+
c2V0TWVtb3J5KHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZSht
ZW1vcnkpKSk7CisgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIGV4ZWMsIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXVEZNb3ZlKG1lbW9yeSkpKTsKICAgICB9CiAKICAg
ICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxp
c3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9i
amVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4KQEAgLTE5
NCw5ICsxOTQsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydHMgJ21heGlt
dW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIGlpLiBB
cHBlbmQgdiB0byBtZW1vcmllcy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tNZW1v
cnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgbWVt
b3J5KTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIGV4ZWMsIG1lbW9yeSk7
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNt
OjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDogewpAQCAtMjM1LDEyICsyMzcsMTggQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNl
KEV4ZWNTdGF0ZSogZXgKICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAh
aGFzTWVtb3J5SW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5m
b3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOwogICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEg
bWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgotICAgICAgICAgICAgYm9vbCBm
YWlsZWQ7Ci0gICAgICAgICAgICBXYXNtOjpNZW1vcnkgbWVtb3J5KG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCksIGZh
aWxlZCk7Ci0gICAgICAgICAgICBpZiAoZmFpbGVkKQotICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihleGVjKSkpOwotICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2
bSwKKyAgICAgICAgICAgIFdhc206Ok1lbW9yeSBtZW1vcnk7CisgICAgICAgICAgICBpZiAobW9k
dWxlSW5mb3JtYXRpb24ubWVtb3J5Lmhhc1Jlc2VydmVkTWVtb3J5KCkpCisgICAgICAgICAgICAg
ICAgbWVtb3J5ID0gV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkucmVzZXJ2ZWRNZW1v
cnkoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBib29sIGZhaWxlZDsK
KyAgICAgICAgICAgICAgICBXYXNtOjpNZW1vcnkgbWVtb3J5KHZtLCBtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpLCBm
YWlsZWQpOworICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywKICAgICAgICAgICAgICAgIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXVEZNb3ZlKG1lbW9yeSkpKTsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNmM4ODdhZjU5
N2E4NjUzMjljZmI0M2Y1ZWRiNDdiNDFlNjYwOWVjOC4uNjgyOTllMDVjYTJhMTUwZmNjMWFhZTE3
YjU5OWQwZWUzNWEyODIxYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKQEAgLTk3LDcg
Kzk3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNX
ZWJBc3NlbWJseU1lbW9yeShFeGVjU3RhdGUqIGV4ZWMKICAgICB9CiAKICAgICBib29sIGZhaWxl
ZDsKLSAgICBXYXNtOjpNZW1vcnkgbWVtb3J5KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdl
Q291bnQsIGZhaWxlZCk7CisgICAgV2FzbTo6TWVtb3J5IG1lbW9yeSh2bSwgaW5pdGlhbFBhZ2VD
b3VudCwgbWF4aW11bVBhZ2VDb3VudCwgZmFpbGVkKTsKICAgICBpZiAoZmFpbGVkKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
LmNwcAppbmRleCA4MTI5NTkyM2M3YWRjYTJkZTYwYmVjYzE5M2ZhY2U5ODJmNDVmZDIyLi5hOTQw
ZThkZmYwY2JlYTVmZGYwODI5OTBhNTdhZDhkOGZlY2MxNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmNwcApAQCAtODAsMzEgKzgwLDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSwgU3RydWN0dXJlKgogICAg
IHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKHN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCksIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCi0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgYmFzZSArIGJ5dGVPZmZz
ZXQsIGJ5dGVTaXplKTsKLSAgICAvLyBPbiBmYWlsdXJlLCBhIG5ldyBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3IgaXMgdGhyb3duLgotICAgIHBsYW4ucnVuKCk7Ci0gICAgaWYgKHBsYW4uZmFpbGVk
KCkpCi0gICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUpT
V2ViQXNzZW1ibHlDb21waWxlRXJyb3Ioc3RhdGUsIHZtLCBwbGFuLmVycm9yTWVzc2FnZSgpKSk7
Ci0KLSAgICAvLyBPbiBzdWNjZXNzLCBhIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUgb2JqZWN0IGlz
IHJldHVybmVkIHdpdGggW1tNb2R1bGVdXSBzZXQgdG8gdGhlIHZhbGlkYXRlZCBBc3QubW9kdWxl
LgotCi0gICAgLy8gVGhlIGV4cG9ydCBzeW1ib2wgdGFibGUgaXMgdGhlIHNhbWUgZm9yIGFsbCBJ
bnN0YW5jZXMgb2YgYSBNb2R1bGUuCi0gICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxl
ID0gU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSk7Ci0gICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4
cG9ydHMoKSkgewotICAgICAgICBhdXRvIG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxlLT50YWtl
TmV4dFNjb3BlT2Zmc2V0KE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgICAgIGV4cG9ydFN5bWJv
bFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBTeW1ib2xU
YWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7Ci0gICAgfQotCi0gICAgLy8gT25seSB3YXNt
LWludGVybmFsIGZ1bmN0aW9ucyBoYXZlIGEgY2FsbGVlLCBzdHVicyB0byBKUyBkbyBub3QuCi0g
ICAgdW5zaWduZWQgY2FsbGVlQ291bnQgPSBwbGFuLmludGVybmFsRnVuY3Rpb25Db3VudCgpOwot
ICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIHJlc3VsdCA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNy
ZWF0ZSh2bSwgc3RydWN0dXJlLCBwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpLCBwbGFuLnRh
a2VDYWxsTGlua0luZm9zKCksIHBsYW4udGFrZVdhc21FeGl0U3R1YnMoKSwgZXhwb3J0U3ltYm9s
VGFibGUsIGNhbGxlZUNvdW50KTsKLSAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKHN0YXRlLT5q
c0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgCi0gICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVl
SW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgICAgIHJlc3VsdC0+
c2V0SlNFbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50Q2FsbGVl
KTsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxl
ZUluZGV4LCB3YXNtRW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgIH0pOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZtLCBzdGF0
ZSwgc3RydWN0dXJlLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwogfQogCiBXZWJBc3Nl
bWJseU1vZHVsZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5
cGUqIHRoaXNQcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggZjE3ZjI5ZGY5ODUwYzNj
OGY0NjRhMmZlMTYwNmY3NGRhY2UwMDIzYS4uZjMxMDc4MmJmYjM2N2E2ZDNjYzVkMjk1YTE1YWU5
YzJjMTg3ZDAyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtOTIsMTAgKzkyLDExIEBAIHZvaWQg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0ZSwgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKTsKIAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IGlu
c3RhbmNlLT5tb2R1bGUoKTsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBpbnN0YW5jZS0+Y29kZUJsb2NrKCk7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRp
b24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwogCiAg
ICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gbW9kdWxlLT5leHBvcnRTeW1ib2xU
YWJsZSgpOwotICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQgPSBtb2R1bGUtPmZ1bmN0
aW9uSW1wb3J0Q291bnQoKTsKKyAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50ID0gY29k
ZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CiAKICAgICAvLyBGSVhNRSB3aXJlIHVwIHRo
ZSBpbXBvcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MTE4
CiAKQEAgLTExNiw4ICsxMTcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5r
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdAogICAgICAgICAg
ICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmpl
Y3QgY3JlYXRlZCBmcm9tIGMuCiAgICAgICAgICAgICAvLyAgICAgYi4gQXBwZW5kIGZ1bmMgdG8g
ZnVuY3MuCiAgICAgICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCi0gICAgICAgICAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpzRW50cnlw
b2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7Ci0gICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IG1vZHVsZS0+
d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgp
OworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0g
Y29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5r
aW5kSW5kZXgpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9p
bnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUq
IHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1
cmVJbmRleCk7CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdl
YkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFy
Z3VtZW50Q291bnQoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwganNFbnRyeXBvaW50
Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwpAQCAtMTc4LDEy
ICsxNzksMTIgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUq
IHN0YXRlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3QKICAgICAgICAgLy8gVGhlIHN0YXJ0
IGZ1bmN0aW9uIG11c3Qgbm90IHRha2UgYW55IGFyZ3VtZW50cyBvciByZXR1cm4gYW55dGhpbmcu
IFRoaXMgaXMgZW5mb3JjZWQgYnkgdGhlIHBhcnNlci4KICAgICAgICAgQVNTRVJUKCFzaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgICAgIEFTU0VSVChzaWduYXR1cmUtPnJldHVyblR5
cGUoKSA9PSBXYXNtOjpWb2lkKTsKLSAgICAgICAgaWYgKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNl
IDwgbW9kdWxlLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKKyAgICAgICAgaWYgKHN0YXJ0RnVu
Y3Rpb25JbmRleFNwYWNlIDwgY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKICAg
ICAgICAgICAgIEpTQ2VsbCogc3RhcnRGdW5jdGlvbiA9IGluc3RhbmNlLT5pbXBvcnRGdW5jdGlv
bihzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSktPmdldCgpOwogICAgICAgICAgICAgbV9zdGFydEZ1
bmN0aW9uLnNldCh2bSwgdGhpcywgc3RhcnRGdW5jdGlvbik7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1
bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlv
bkluZGV4U3BhY2UpOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5
cG9pbnRDYWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAg
ICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2Rl
QmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1
bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5j
dGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENh
bGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAg
IG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgfQpAQCAt
MjA3LDYgKzIwOCw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRl
KEV4ZWNTdGF0ZSogc3RhdGUpCiAKICAgICB7CiAgICAgICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IG1vZHVsZSA9IG1faW5zdGFuY2UtPm1vZHVsZSgpOworICAgICAgICBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2luc3RhbmNlLT5jb2RlQmxvY2soKTsKICAgICAgICAgY29u
c3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5t
b2R1bGVJbmZvcm1hdGlvbigpOwogICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0g
bV9pbnN0YW5jZS0+dGFibGUoKTsKICAgICAgICAgZm9yIChjb25zdCBXYXNtOjpFbGVtZW50JiBl
bGVtZW50IDogbW9kdWxlSW5mb3JtYXRpb24uZWxlbWVudHMpIHsKQEAgLTIyOSwxMyArMjMxLDEz
IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSog
c3RhdGUpCiAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMAogICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5k
aWNlc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8IG1vZHVsZS0+ZnVu
Y3Rpb25JbXBvcnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXgg
PCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dW
TVJhbmdlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMgc2V0dGlu
ZyB0aGUgdGFibGUgdmFsdWUgd2l0aCBhbiBpbXBvcnQuIFRoaXMgaXMgbm90IHlldCBpbXBsZW1l
bnRlZC4gRklYTUUuIikpKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpzRW50cnlw
b2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAg
ICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1
bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbklu
ZGV4KTsKKyAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRD
YWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSog
d2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBXYXNt
OjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIGNv
bnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
U2F5IHdlIGV4cG9ydCBsb2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jaXRvbiBpbmRleCAwLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRGF0YUxvZy5oIGIvU291cmNlL1dURi93dGYvRGF0
YUxvZy5oCmluZGV4IDEzZjkxM2JkNWJhZTYwMjkxZGQ1MzhmN2ZhNTgzODhjODhlZmJjOTAuLjBi
MDg0ODhiMjBlNTAzMWMwMDY2OTlhZTYwY2RlZTI0YTBjOTdiZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0RhdGFMb2cuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgKQEAgLTQ4
LDEzICs0OCwyOSBAQCB2b2lkIGRhdGFMb2coY29uc3QgVHlwZXMmLi4uIHZhbHVlcykKIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIFR5cGVzPgogdm9pZCBkYXRhTG9nTG4oY29uc3QgVHlwZXMmLi4uIHZh
bHVlcykKIHsKLSAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlcy4uLiwgIlxuIik7CisgICAgZGF0
YUxvZyh2YWx1ZXMuLi4sICJcbiIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4K
K3ZvaWQgZGF0YUxvZ0lmKGJvb2wgc2hvdWxkTG9nLCBjb25zdCBUeXBlcyYuLi4gdmFsdWVzKQor
eworICAgIGlmIChzaG91bGRMb2cpCisgICAgICAgIGRhdGFMb2codmFsdWVzLi4uKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+Cit2b2lkIGRhdGFMb2dMbklmKGJvb2wgc2hvdWxk
TG9nLCBjb25zdCBUeXBlcyYuLi4gdmFsdWVzKQoreworICAgIGlmIChzaG91bGRMb2cpCisgICAg
ICAgIGRhdGFMb2dMbih2YWx1ZXMuLi4pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNp
bmcgV1RGOjpkYXRhTG9nOwogdXNpbmcgV1RGOjpkYXRhTG9nTG47Cit1c2luZyBXVEY6OmRhdGFM
b2dJZjsKK3VzaW5nIFdURjo6ZGF0YUxvZ0xuSWY7CiB1c2luZyBXVEY6OmRhdGFMb2dGOwogdXNp
bmcgV1RGOjpkYXRhTG9nRlN0cmluZzsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303107</attachid>
            <date>2017-03-01 13:15:16 -0800</date>
            <delta_ts>2017-03-01 21:08:15 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-162693-20170301131218.patch</filename>
            <type>text/plain</type>
            <size>95644</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ODFlYWQzNTM4YmU0Yjc0YzA1ZjlmMDU4Y2UzYTRiNTcyNjgxYTU2Li4zNDRlMmI3ZmExOGRkZGYx
ZGYyNjQ4MWRlYzM0YjhmMzQ1Y2EyNjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAxNy0wMi0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBXQVNNIHNob3VsZCBzdXBwb3J0IGZhc3RlciBsb2Fkcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIpOgorICAgICAgICAq
IGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoanNjbWFpbik6
CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQ
cmVwYXJlUG9pbnRlcik6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmltcG9ydEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbjo6aGFzTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dh
c21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1tYXBCeXRlcyk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjphdmFpbGFibGVGYXN0TWVtb3JpZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
ZW1vcnk6OnRyeUdldEZhc3RNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OnJl
bGVhc2VGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6On5NZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Omdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmR1bXApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1ha2VTdHJpbmcpOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6TWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlv
bi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZv
cm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnJlc2VydmVkTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Om1vZGUpOgorICAgICAgICAq
IHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6
CisgICAgICAgICogd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZWdpc3Rl
ckNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp1bnJlZ2lzdGVyQ29kZSk6CisgICAgICAgIChK
U0M6Oldhc206OmZhc3RNZW1vcnlFbmFibGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5hYmxl
RmFzdE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxl
ZS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJs
eU1lbW9yeSk6CisKIDIwMTctMDItMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHN0ZDo6dHVwbGVzIGFz
IGtleXMgaW4gSGFzaE1hcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjMTIzYjA2
YWZkOTVhOTk2YzdlYjczYzlhN2U1Y2FjYjFkZWM0ZTJlLi4zNWRjMTdhMWNlOTk2NTNhNzA5NDM5
OGM4ZmIwODE2YmFmNmFhZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMy
MCw2ICsxMzIwLDEwIEBACiAJCTUzNTU1NzE2MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1
NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLzsgfTsKIAkJNTM3MEI0RjUx
QkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTM3MEI0RjMxQkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UuY3BwICovOyB9OwogCQk1MzcwQjRGNjFCRjI2MjA1MDA1QzQwRkMgLyog
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3MEI0RjQxQkYyNUVBMjAwNUM0
MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCAqLzsg
fTsKKwkJNTM4MUI5MzcxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM4MUI5
MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwICovOyB9Owor
CQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM4MUI5MzgxRTYw
RTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLzsgfTsKKwkJNTM4MUI5
NDAxRTY1REZFQjAwOTBGNzk0IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODFCOTNGMUU2NURGRUIwMDkw
Rjc5NCAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi87IH07CisJCTUzODNBQTMwMUU2NUU4
QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAv
KiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLzsgfTsKIAkJNTM5MTdFN0IxQjc5MDZGQTAw
MEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzkxN0U3QTFCNzkw
NkU0MDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMu
aCAqLzsgfTsKIAkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlGQjhCOTFD
OTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLzsgfTsKIAkJNTNCMEJFMzQxRTU2
MUFDOTAwQThGQzI5IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNCMEJFMzMxRTU2MUFDOTAwQThGQzI5
IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwICovOyB9OwpAQCAtMzc3Niw2ICszNzgwLDEw
IEBACiAJCTUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21NZW1vcnkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzcwQjRGMzFCRjI1RUEyMDA1QzQwRkMgLyogQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM3MEI0RjQxQkYyNUVB
MjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzgxQjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM4MUI5MzgxRTYwRTk3RDAwOTBG
Nzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MzgxQjkzRjFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzODNBQTJGMUU2NUU4QTEwMEE1
MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOyBwYXRoID0ganMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
OTE3RTdBMUI3OTA2RTQwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTgzMUI3OTFD
QjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRBcnJheVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0
aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsK
QEAgLTYyMDEsNiArNjIwOSw4IEBACiAJCQkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdh
c21Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBX
YXNtTW9kdWxlUGFyc2VyLmggKi8sCiAJCQkJQURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdh
c21QYWdlQ291bnQuY3BwICovLAorCQkJCTUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNt
RmF1bHRTaWduYWxIYW5kbGVyLmNwcCAqLywKKwkJCQk1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQg
LyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oICovLAogCQkJCTc5Qjc1OTczMURGQTRDNjAwMDUy
MTc0QyAvKiBXYXNtUGFnZUNvdW50LmggKi8sCiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2
IC8qIFdhc21QYXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2Fz
bVBsYW4uY3BwICovLApAQCAtNzc4OCw2ICs3Nzk4LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJ
CTc5RTQyM0UwMURFRTY1MzIwMDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcCAqLywK
IAkJCQk3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5oICov
LAorCQkJCTUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmNwcCAqLywKKwkJCQk1MzgxQjkzRjFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5oICovLAogCQkJCUFEMkZDQkE2MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yLmNwcCAqLywKIAkJCQlBRDJGQ0JBNzFEQjU4REE0MDBCM0U3MzYgLyog
SlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oICovLAogCQkJCTc5NkZCNDM5MURGRjhDM0YwMDM5
Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovLApAQCAtNzkyNyw2ICs3OTM5LDcgQEAK
IAkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCMzg3OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2Fs
bGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzODFCOTQwMUU2NURGRUIwMDkw
Rjc5NCAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04MjQ2LDYgKzgyNTksNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFE
QTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
RDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkUxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJGMTU4RDE5QjdBNTMxMDA2OTVERDAgLyogREZH
QmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0QwMDE5QURBNDEwMDA2
QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAzNiw2ICsx
MDA1MCw3IEBACiAJCQkJMEZDODQxNjgxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlw
ZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1NCAv
KiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCRDFC
NzFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTUzODFCOTM3MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzAwQjdCMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRl
Z2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjg5OEYzMTFC
Mjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZDOTdGM0QxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRh
dGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDQzNyw2ICsx
MDQ1Miw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVy
QVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjEzNzU3MUJCMTFFRjkwMENENTEwMCAvKiBN
YWNyb0Fzc2VtYmxlckFSTTY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjkwMDlDMTc5NzZD
NjAwMDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUzODNBQTMwMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNkRCN0VDMUQ2MTdEMTEwMENEQkY4RSAvKiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU2OEM2MzgxQjkwREUwQjAwNDJC
Q0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0
QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5r
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKaW5kZXggZGU0
OGU2MmRkYWI4ZWZhZjhiZTMxODI4NzFiZThkNzA5OWIxN2M3Zi4uNTQ2ZTE0YzkwNDhlOGQzMzhh
NTgyNjQ3Y2Y3Y2FkZjlkZDM0MWNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1
bmtzLmNwcApAQCAtODIsNiArODIsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5r
czo6Y3RpU3R1YihWTSogdm0sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKICAgICByZXR1cm4g
ZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1
bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ1RJU3R1Yk1hcDo6aXRlcmF0b3IgZW50cnkg
PSBtX2N0aVN0dWJNYXAuZmluZChnZW5lcmF0b3IpOworICAgIGlmIChlbnRyeSA9PSBtX2N0aVN0
dWJNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAg
ICByZXR1cm4gZW50cnktPnZhbHVlOworfQorCiB2b2lkIEpJVFRodW5rczo6ZmluYWxpemUoSGFu
ZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCopCiB7CiAgICAgYXV0byogbmF0aXZlRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKaW5kZXggYWRkY2YyMzBjMzQ1ZDQy
NzFiNjM3ZjA4Yjk0YzQxNmEzZWQxODJhNC4uN2UwNmU3MTYyMzUzYTBiNzNmM2JjMDJlNTQyZjcz
YjgyZjY2ZTEwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVu
a3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCkBAIC01OCw2
ICs1OCw3IEBAIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlVGFp
bENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNKik7ICAgIAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGN0aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvcik7CiAKICAgICBOYXRpdmVFeGVjdXRh
YmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9u
IGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGhvc3RGdW5jdGlvblN0dWIoVk0qLCBOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29u
c3RydWN0b3IsIFRodW5rR2VuZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0
dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggYWVkZjQy
ZTE3Y2MyYmRlMDE0YWQ1YjhkNjI4NjIyYWVjMTQ1ZTdlMi4uMjRkMmJhZWFlN2NhNGIyNDZjN2Ri
Y2UwNzY0NTgyZjY0MzQ5MGQxYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTczLDYgKzczLDcg
QEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgog
I2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CkBAIC0zNzY2LDYgKzM3NjcsNyBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOwogICAgIHN0YXJ0VGltZW91dFRocmVhZElmTmVlZGVkKCk7CisgICAg
SlNDOjpXYXNtOjplbmFibGVGYXN0TWVtb3J5KCk7CiAKICAgICBpbnQgcmVzdWx0OwogICAgIHJl
c3VsdCA9IHJ1bkpTQygKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRl
eCBjNGJmOGZhZGU4YWFlMzEwZjJiNmEyNzcxMTMxYmJlZGEyMWIyY2JjLi5jOTQ0NDgwNzA4YWY1
ZGNlM2QyZjZlNTM4ZTgxZTQ3N2Q3Mzk5ZjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCkBAIC00MjYsNiArNDI2LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRp
b25TdHJpbmc7CiAgICAgXAogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHksIHRydWUsIE5vcm1h
bCwgIkV4cG9zZSB0aGUgV2ViQXNzZW1ibHkgZ2xvYmFsIG9iamVjdC4iKSBcCiAgICAgdihib29s
LCBzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwg
dGhlIE1lbW9yeSBvYmplY3Qgd29uJ3QgbW1hcCB0aGUgZnVsbCAnbWF4aW11bScgcmFuZ2UgYW5k
IGluc3RlYWQgd2lsbCBhbGxvY2F0ZSB0aGUgbWluaW11bSByZXF1aXJlZCBhbW91bnQuIikgXAor
ICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5LCB0cnVlLCBOb3JtYWwsICJJZiB0
cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRoIGEgc2ln
bmFsIGhhbmRsZXIgdG8gYm91bmRzIGNoZWNrIHdhc20gbWVtb3J5LiIpCisKIAogZW51bSBPcHRp
b25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAppbmRleCBhNTBmOWRiMGEwYzMzZTkwNmRjNmVjMGViZWRhNjcwN2VhNGE5ZmMzLi5h
MDM5ZGRiMDBmZmIwY2MyYmEyZjc1NzljNWYxMzU3ZjI0YjI0M2QzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yNDAsNiArMjQwLDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5
cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICB3ZWJB
c3NlbWJseUNhbGxlZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWJBc3NlbWJseVRvSlND
YWxsZWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0
cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWJBc3NlbWJseVRvSlNDYWxsZWUuc2V0KCp0
aGlzLCBXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmNyZWF0ZSgqdGhpcywgd2ViQXNzZW1ibHlUb0pT
Q2FsbGVlU3RydWN0dXJlLmdldCgpKSk7CiAjZW5kaWYKICAgICBtb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAppbmRleCA3MzJiMjZlNGU0ZjMwMWJhM2IwYzFlNzMwODNhZjkzYjQ4ODgwYjIwLi4xYTQxZTQ0
ZjZhM2ViZTYwYTM0YTZjNDhiMWZiYjU5Yzk4MWY2N2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKQEAgLTMzMyw2ICszMzMsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q2FsbGVlU3RydWN0dXJlOwog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVjdHVyZTsKKyAg
ICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBT
dHJvbmc8SlNDZWxsPiB3ZWJBc3NlbWJseVRvSlNDYWxsZWU7CiAjZW5kaWYKICAgICBTdHJvbmc8
U3RydWN0dXJlPiBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zMmM1OTQ1MzdmYjU2YzYyYTI3YmVjODMzNGZkZjZhNWRhNzk4MTAzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNp
bmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCisjaW5j
bHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIK
KyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKKworY2xhc3MgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlND
ZWxsIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGljIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IG93bmVyLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpX
YXNtRXhpdFN0dWJzPiYmIGV4aXRTdHVicywgV2FzbTo6TWVtb3J5OjpNb2RlIG1vZGUsIHVuc2ln
bmVkIGNhbGxlZUNvdW50KQorICAgIHsKKyAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2Nh
dGlvblNpemUoY2FsbGVlQ291bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIs
IHN0ZDo6Zm9yd2FyZDxCYWc8Q2FsbExpbmtJbmZvPj4oY2FsbExpbmtJbmZvcyksIHN0ZDo6Zm9y
d2FyZDxWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4+KGV4aXRTdHVicyksIG1vZGUsIGNhbGxl
ZUNvdW50KTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7
IHJldHVybiBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpOyB9CisgICAgV2FzbTo6TWVtb3J5OjpNb2Rl
IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQorCisgICAgSlNXZWJB
c3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1
bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKKyAgICAgICAg
dW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9y
dENvdW50KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVD
b3VudCk7CisgICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVlSW5kZXhdLmdldCgpOworICAg
IH0KKworICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRD
b3VudCgpKTsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3Bh
Y2UgLSBmdW5jdGlvbkltcG9ydENvdW50KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxl
ZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7CisgICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVl
SW5kZXggKyBtX2NhbGxlZUNvdW50XS5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEpTRW50
cnlwb2ludENhbGxlZShWTSYgdm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiBjYWxsZWUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRl
eCA8IG1fY2FsbGVlQ291bnQpOworICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXhdLnNldCh2
bSwgdGhpcywgY2FsbGVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFdhc21FbnRyeXBvaW50Q2Fs
bGVlKFZNJiB2bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNh
bGxlZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxs
ZWVDb3VudCk7CisgICAgICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRd
LnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICB9CisKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJB
c3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEJhZzxDYWxs
TGlua0luZm8+JiYsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmLCBXYXNtOjpNZW1vcnk6
Ok1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwor
ICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkNhbGxl
ZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KT4oc2l6ZW9mKEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2spKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXpl
KHVuc2lnbmVkIG51bUNhbGxlZXMpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0T2ZDYWxs
ZWVzKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIG51bUNh
bGxlZXMgKiAyOworICAgIH0KKworICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBw
dWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICAgICAgdm9pZCBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOworICAgIH07CisKKyAgICBXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CisgICAgVW5jb25kaXRpb25hbEZpbmFsaXpl
ciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxs
TGlua0luZm9zOworICAgIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiBtX3dhc21FeGl0U3R1
YnM7CisgICAgV2FzbTo6TWVtb3J5OjpNb2RlIG1fbW9kZTsKKyAgICB1bnNpZ25lZCBtX2NhbGxl
ZUNvdW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAKaW5kZXggMmZmMzA1MDFmNjZmMWFjZGFmNWRkOGY3OGY1YTUyMjllYWViOGI5MS4u
M2FmNzViOGFmODU0Y2IxZTAxY2Y4NWMxZGRhMmZmNjEwMjcwYzJiZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMjU5LDcgKzI1
OSw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwCiAgICAgZm9yIChjb25zdCBQaW5uZWRTaXpl
UmVnaXN0ZXJJbmZvJiByZWdJbmZvIDogcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzKQogICAgICAg
ICBtX3Byb2MucGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIpOwogCi0gICAgaWYgKGlu
Zm8uaGFzTWVtb3J5KCkpIHsKKyAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9j
LnNldFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgcGlubmVkR1BSLCB1bnNpZ25lZCkgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOwpAQCAtNDU0LDkgKzQ1
NCwxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZQogCiBpbmxpbmUgVmFsdWUqIEIzSVJHZW5l
cmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQogewotICAgIEFTU0VS
VChtX21lbW9yeUJhc2VHUFIgJiYgbV9tZW1vcnlTaXplR1BSKTsKLSAgICBBU1NFUlQoc2l6ZU9m
T3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBwb2ludGVyLCBtX21l
bW9yeVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOworICAgIEFTU0VSVCht
X21lbW9yeUJhc2VHUFIpOworICAgIGlmIChtX2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnk6
Ok1vZGU6OkJvdW5kc0NoZWNraW5nKSB7CisgICAgICAgIEFTU0VSVChtX21lbW9yeVNpemVHUFIp
OworICAgICAgICBBU1NFUlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9w
cm9jLCBPcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlTaXplR1BSLCBzaXplT2ZPcGVyYXRpb24g
KyBvZmZzZXQgLSAxKTsKKyAgICB9CiAgICAgcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBPcmlnaW4oKSwgcG9pbnRlcik7CiAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUFkZHJlc3NWYWx1ZT4obV9wcm9jLCBP
cmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlCYXNlR1BSKTsKIH0KQEAgLTQ4OCw2OCArNDkxLDcz
IEBAIGlubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlwZSBvcCkKIAogaW5saW5l
IFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIE9yaWdpbiBv
cmlnaW4sIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCkKIHsKKyAgICBh
dXRvIG1ha2VLaW5kID0gWyZdIChCMzo6T3Bjb2RlIG9wY29kZSkgLT4gQjM6OktpbmQgeworICAg
ICAgICBpZiAobV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpTaWduYWxpbmcpCisgICAg
ICAgICAgICByZXR1cm4gdHJhcHBpbmcob3Bjb2RlKTsKKyAgICAgICAgcmV0dXJuIG9wY29kZTsK
KyAgICB9OwogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4
UzogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkOFMsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtp
bmQoTG9hZDhTKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgIH0KIAogICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDhTOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhTLCBvcmlnaW4sIHBv
aW50ZXIsIG9mZnNldCk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZDhTKSwgb3JpZ2luLCBw
b2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbiwgdmFsdWUpOwogICAgIH0KIAogICAgIGNh
c2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOiB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4Wiwgb3JpZ2luLCBwb2ludGVy
LCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkOFopLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNl
dCk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6IHsKLSAgICAgICAg
VmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkOFosIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgVmFsdWUqIHZh
bHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtl
S2luZChMb2FkOFopLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luLCB2
YWx1ZSk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOiB7Ci0gICAg
ICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQxNlMsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZDE2
UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAgICAgY2FzZSBMb2FkT3BUeXBl
OjpJNjRMb2FkMTZTOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDE2Uywgb3JpZ2luLCBwb2ludGVyLCBv
ZmZzZXQpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQxNlMpLCBvcmlnaW4sIHBvaW50ZXIs
IG9mZnNldCk7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJMzJMb2FkOiB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9m
ZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQpLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZz
ZXQpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVTogewotICAgICAg
ICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIFZh
bHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgbWFrZUtpbmQoTG9hZCksIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQz
Miwgb3JpZ2luLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2Fk
MzJTOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0
KTsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkKSwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwg
b2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgU0V4dDMyLCBvcmlnaW4sIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNlIExvYWRP
cFR5cGU6Okk2NExvYWQ6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbiwgcG9pbnRlciwgb2Zm
c2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZCksIEludDY0LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNl
dCk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOiB7Ci0gICAgICAgIHJl
dHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IEZsb2F0LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQpLCBG
bG9hdCwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9w
VHlwZTo6RjY0TG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBEb3VibGUsIG9yaWdpbiwgcG9pbnRlciwgb2Zm
c2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZCksIERvdWJsZSwgb3JpZ2luLCBwb2ludGVyLCBvZmZz
ZXQpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBCMyBkb2Vzbid0IHN1cHBvcnQgTG9hZDE2WiB5
ZXQuIFdlIHNob3VsZCBsb3dlciB0byB0aGF0IHZhbHVlIHdoZW4KICAgICAvLyBpdCdzIGFkZGVk
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1ODg0CiAgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDE2Uywgb3JpZ2lu
LCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQxNlMpLCBvcmln
aW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgT3JpZ2luKCksIHZhbHVlLAogICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIE9y
aWdpbigpLCAweDAwMDBmZmZmKSk7CiAgICAgfQogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9h
ZDE2VTogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQxNlMsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsK
KyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkMTZTKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQp
OwogICAgICAgICBWYWx1ZSogcGFydGlhbFJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBPcmlnaW4oKSwgdmFsdWUsCiAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3JpZ2lu
KCksIDB4MDAwMGZmZmYpKTsKIApAQCAtNjI1LDEzICs2MzMsMTggQEAgaW5saW5lIHVpbnQzMl90
IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCiAKIGlubGluZSB2b2lkIEIzSVJHZW5lcmF0
b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KQogewor
ICAgIGF1dG8gbWFrZUtpbmQgPSBbJl0gKEIzOjpPcGNvZGUgb3Bjb2RlKSAtPiBCMzo6S2luZCB7
CisgICAgICAgIGlmIChtX2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnk6OlNpZ25hbGluZykK
KyAgICAgICAgICAgIHJldHVybiB0cmFwcGluZyhvcGNvZGUpOworICAgICAgICByZXR1cm4gb3Bj
b2RlOworICAgIH07CiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2
NFN0b3JlODoKICAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIFRydW5jLCBvcmlnaW4sIHZhbHVlKTsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAK
ICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6Ci0gICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmU4LCBvcmlnaW4sIHZhbHVlLCBw
b2ludGVyLCBvZmZzZXQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKFN0b3JlOCksIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIs
IG9mZnNldCk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0
b3JlMTY6CkBAIC02MzksNyArNjUyLDcgQEAgaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1p
dFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIE9yaWdpbiBvcmlnaW4sIEV4cHJlc3Npb24KICAgICAg
ICAgRkFMTFRIUk9VR0g7CiAKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2OgotICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3Jl
MTYsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoU3RvcmUxNiksIG9y
aWdpbiwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNh
c2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6CkBAIC02NTAsNyArNjYzLDcgQEAgaW5saW5lIHZv
aWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIE9yaWdpbiBvcmln
aW4sIEV4cHJlc3Npb24KICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZToKICAgICBjYXNl
IFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpGNjRTdG9yZToK
LSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBT
dG9yZSwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChTdG9yZSksIG9y
aWdpbiwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKaW5kZXggZDc5MDE0ZjI3ZmFmOTA5
NjhmMjFmNWY5YjRkN2I4Y2M3ODEwMzllMy4uZTYwNGFiMmQ0NzA5MGE3ZTk0MzE5YTEyY2I4NzFl
NGU3NDM3MjcxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxpbmdDb252ZW50aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxpbmdDb252ZW50aW9uLmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisj
aW5jbHVkZSAiV2FzbVNpZ25hdHVyZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNp
Z25hbEhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyMmRlNzA1MmU2OThkMmU5YzU3ZTg2YjMwMmFi
MWMwNzMxYmJkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKKyNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVk0u
aCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKworCituYW1lc3BhY2Ugeworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOworfQorCitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRTaWdTZWdWSGFuZGxl
cjsKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ0J1c0hhbmRsZXI7CitzdGF0aWMgYm9v
bCBmYXN0SGFuZGxlckluc3RhbGxlZCB7IGZhbHNlIH07CitzdGF0aWMgU3RhdGljTG9jayBjb2Rl
TG9jYXRpb25zTG9jazsKK3N0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1
cGxlPFZNKiwgdm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8vICh2bSwgc3RhcnQsIGVu
ZCkKKworc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190Kiwgdm9p
ZCogdWNvbnRleHQpCit7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0YXJ0aW5nIGhhbmRs
ZXIiKTsKKyAgICBtY29udGV4dF90IGNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4o
dWNvbnRleHQpLT51Y19tY29udGV4dDsKKyAgICB2b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29udGV4dC0+X19zcy5fX3JpcCk7CisKKyAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAic3RhcnQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpKSwgIiwgZmF1bHRpbmcgYWRk
cmVzczogIiwgUmF3UG9pbnRlcihmYXVsdGluZ0luc3RydWN0aW9uKSwgIiwgZW5kOiAiLCBSYXdQ
b2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbCkpKTsKKyAgICAvLyBGaXJzdCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gSklU
IGNvZGUgYmVmb3JlIHdlIGNhbiBhcXVpcmUgYW55IGxvY2tzLiBPdGhlcndpc2UsCisgICAgLy8g
d2UgbWlnaHQgaGF2ZSBjcmFzaGVkIGluIGNvZGUgdGhhdCBpcyBhbHJlYWR5IGhvbGRpbmcgb25l
IG9mIHRoZSBsb2NrcyB3ZSB3YW50IHRvIGFxdWlyZS4KKyAgICBpZiAocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpIDw9IGZhdWx0aW5nSW5z
dHJ1Y3Rpb24KKyAgICAgICAgJiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkpIHsKKworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihjb2RlTG9jYXRpb25zTG9jayk7CisgICAgICAgIGZvciAoYXV0byBy
YW5nZSA6IGNvZGVMb2NhdGlvbnMuZ2V0KCkpIHsKKyAgICAgICAgICAgIFZNKiB2bTsKKyAgICAg
ICAgICAgIHZvaWQqIHN0YXJ0OworICAgICAgICAgICAgdm9pZCogZW5kOworICAgICAgICAgICAg
c3RkOjp0aWUodm0sIHN0YXJ0LCBlbmQpID0gcmFuZ2U7CisgICAgICAgICAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAiZnVuY3Rpb24gc3RhcnQ6ICIsIFJhd1BvaW50ZXIoc3RhcnQpLCAiIGVuZDog
IiwgUmF3UG9pbnRlcihlbmQpKTsKKyAgICAgICAgICAgIGlmIChzdGFydCA8PSBmYXVsdGluZ0lu
c3RydWN0aW9uICYmIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPD0gZW5kKSB7CisgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImZvdW5kIG1hdGNoIik7CisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4Y2VwdGlvblN0dWIgPSB2bS0+aml0U3R1YnMtPmV4aXN0
aW5nQ1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICAgICAgICAgIC8vIElmIGZvciB3aGF0ZXZlciByZWFzb24gd2UgZG9uJ3QgaGF2ZSBhIHN0dWIg
dGhlbiB3ZSBzaG91bGQganVzdCB0cmVhdCB0aGlzIGxpa2UgYSByZWd1bGFyIGNyYXNoLgorICAg
ICAgICAgICAgICAgIGlmICghZXhjZXB0aW9uU3R1Yi5zaXplKCkpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJzdHViOiAi
LCBSYXdQb2ludGVyKGV4Y2VwdGlvblN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5fX3NzLl9fcnNpID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5fX3NzLl9fcmlwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oZXhj
ZXB0aW9uU3R1Yi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNpZ25h
bCA9PSBTSUdTRUdWKQorICAgICAgICBzaWdhY3Rpb24oc2lnbmFsLCAmb2xkU2lnU2VnVkhhbmRs
ZXIsIG51bGxwdHIpOworICAgIGVsc2UKKyAgICAgICAgc2lnYWN0aW9uKHNpZ25hbCwgJm9sZFNp
Z0J1c0hhbmRsZXIsIG51bGxwdHIpOworfQorCit2b2lkIHJlZ2lzdGVyQ29kZShWTSYgdm0sIHZv
aWQqIHN0YXJ0LCB2b2lkKiBlbmQpCit7CisgICAgaWYgKCFmYXN0TWVtb3J5RW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisgICAgTG9ja0hvbGRlciBsb2NrZXIoY29kZUxvY2F0aW9uc0xvY2sp
OworICAgIGNvZGVMb2NhdGlvbnMtPmFkZChzdGQ6Om1ha2VfdHVwbGUoJnZtLCBzdGFydCwgZW5k
KSk7Cit9CisKK3ZvaWQgdW5yZWdpc3RlckNvZGUoVk0mIHZtLCB2b2lkKiBzdGFydCwgdm9pZCog
ZW5kKQoreworICAgIGlmICghZmFzdE1lbW9yeUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKKyAgICBjb2RlTG9jYXRp
b25zLT5yZW1vdmUoc3RkOjptYWtlX3R1cGxlKCZ2bSwgc3RhcnQsIGVuZCkpOworfQorCitib29s
IGZhc3RNZW1vcnlFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gZmFzdEhhbmRsZXJJbnN0YWxsZWQ7
Cit9CisKK3ZvaWQgZW5hYmxlRmFzdE1lbW9yeSgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10geworICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworCisgICAgICAgIGFjdGlvbi5zYV9z
aWdhY3Rpb24gPSB0cmFwSGFuZGxlcjsKKyAgICAgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21h
c2spOworICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFzaWdhY3Rpb24oU0lHQlVTLCAmYWN0aW9uLCAmb2xkU2lnQnVzSGFuZGxlcikp
IHsKKyAgICAgICAgICAgIGZhc3RIYW5kbGVySW5zdGFsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IGNvZGVMb2NhdGlvbnMuY29uc3RydWN0KCk7CisgICAgICAgIH0KKworICAgIH0pOworfQorICAg
IAorfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3ODFjMjg0MDYyNmRkYTlhYzA1NjhlYmU1OGExMTcy
ZGM4YjYxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWTTsKKworbmFtZXNwYWNlIFdhc20geworCit2b2lk
IHJlZ2lzdGVyQ29kZShWTSYgdm0sIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpOwordm9pZCB1bnJl
Z2lzdGVyQ29kZShWTSYgdm0sIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpOworCitib29sIGZhc3RN
ZW1vcnlFbmFibGVkKCk7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGVuYWJsZUZhc3RNZW1vcnko
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCBkYzYz
NDc0NDIyYmZlNjAzM2Q4YjJkMjIxYmI3ZWM1YzExMDU2ODYyLi4xZmM1NzRlOTNkNzI0N2M2NGE4
ZmEzMzRmNjIyNWQyYzcyNzFmNjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCkBAIC0yNTYsNyArMjU2LDYgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAg
ICB9CiAKICAgICB1aW50MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4g
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQotICAgIGJvb2wgaGFzTWVt
b3J5KCkgY29uc3QgeyByZXR1cm4gISFtZW1vcnk7IH0KIAogICAgIH5Nb2R1bGVJbmZvcm1hdGlv
bigpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKaW5kZXgg
YWFkOTFjMTNlM2EzMDE2ODM4ZmIwMzg0ZGFiNWE0MmI0Nzc0M2QyOC4uYjg0MzcxNjZjN2E1ZWQ3
NDgzOGJkNjI2YTg0MjhjZjAzYWNjZjE2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeS5jcHAKQEAgLTI4LDYgKzI4LDkgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAorI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKKworI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KICNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAg
LTM4LDg2ICs0MSwxNzYgQEAgbmFtZXNwYWNlIHsKIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwogfQogCi12b2lkIE1lbW9yeTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoraW5saW5l
IGJvb2wgbW1hcEJ5dGVzKHNpemVfdCBieXRlcywgdm9pZComIG1lbW9yeSwgc2l6ZV90JiBtYXBw
ZWRDYXBhY2l0eSkKIHsKLSAgICBTdHJpbmcgbWVtb3J5SGV4OwotICAgIFdURjo6YXBwZW5kVW5z
aWduZWQ2NEFzSGV4KCh1aW50NjRfdCkodWludHB0cl90KW1fbWVtb3J5LCBtZW1vcnlIZXgpOwot
ICAgIG91dC5wcmludCgiTWVtb3J5IGF0IDB4IiwgbWVtb3J5SGV4LCAiLCBzaXplICIsIG1fc2l6
ZSwgIkIgY2FwYWNpdHkgIiwgbV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0
aWFsLCAiIG1heGltdW0gIiwgbV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUp
KTsKKyAgICBkYXRhTG9nSWYodmVyYm9zZSwgIkF0dGVtcHRpbmcgdG8gbW1hcCAiLCBieXRlcywg
IiBieXRlczogIik7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEg
Vk0gdGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MzYwMAorICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwgYnl0ZXMsIFBS
T1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworICAgIGlmIChyZXN1bHQg
PT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZmFpbGVkIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
InN1Y2NlZWRlZCIpOworICAgIG1lbW9yeSA9IHJlc3VsdDsKKyAgICBtYXBwZWRDYXBhY2l0eSA9
IGJ5dGVzOworICAgIHJldHVybiB0cnVlOwogfQogCi1jb25zdCBjaGFyKiBNZW1vcnk6Om1ha2VT
dHJpbmcoTW9kZSBtb2RlKSBjb25zdAorLy8gV2UgdXNlIHRoaXMgYXMgYSBoZXVyaXN0aWMgdG8g
Z3Vlc3Mgd2hpY2ggbW9kZSB3ZSBzaG91bGQgYXNzdW1lIHdlIGFyZSBnb2luZyB0byBnZXQgd2hl
biBhIG1vZHVsZSBpbXBvcnRzIGEgbWVtb3J5Lgorc3RhdGljIE1lbW9yeTo6TW9kZSBsYXN0QWxs
b2NhdGVkTWVtb3J5TW9kZSB7IE1lbW9yeTo6TW9kZTo6U2lnbmFsaW5nIH07CisKK01lbW9yeTo6
TW9kZSBNZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCkKIHsKLSAgICBzd2l0Y2ggKG1vZGUpIHsK
LSAgICBjYXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsK
KyAgICByZXR1cm4gbGFzdEFsbG9jYXRlZE1lbW9yeU1vZGU7Cit9CisKK3N0YXRpY19hc3NlcnQo
c2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcg
dGhlIG1heGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzMgd2hpY2ggaXMgbGFy
Z2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90
ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7CisKK3N0YXRpYyBjb25zdCBzaXplX3QgZmFzdE1l
bW9yeU1hcHBlZEJ5dGVzID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCkpICogMjsgLy8gcG9pbnRlciBtYXggKyBvZmZzZXQgbWF4LiBUaGlz
IGlzIGFsbCB3ZSBuZWVkIHNpbmNlIGEgbG9hZCBzdHJhZGRsaW5nIHJlYWRhYmxlIG1lbW9yeSB3
aWxsIHRyYXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4RmFzdE1lbW9yaWVzID0gNDsKK3N0
YXRpYyB1bnNpZ25lZCBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgeyAwIH07CitpbmxpbmUgRGVxdWU8
dm9pZCosIG1heEZhc3RNZW1vcmllcz4mIGF2YWlsYWJsZUZhc3RNZW1vcmllcygpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPERlcXVlPHZvaWQqLCBtYXhGYXN0TWVtb3JpZXM+PiBhdmFp
bGFibGVGYXN0TWVtb3JpZXM7CisgICAgcmV0dXJuIGF2YWlsYWJsZUZhc3RNZW1vcmllczsKK30K
KworYm9vbCB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSwgdm9pZComIG1lbW9yeSwgc2l6ZV90JiBt
YXBwZWRDYXBhY2l0eSwgTWVtb3J5OjpNb2RlJiBtb2RlKQoreworICAgIC8vIFdlIG1pZ2h0IEdD
IGhlcmUgc28gd2Ugc2hvdWxkIGJlIGhvbGRpbmcgdGhlIEFQSSBsb2NrLgorICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgYmUgYWJsZSB0byBzeW5jcm9ub3VzbHkgdHJpZ2dlciB0aGUgR0MgZnJvbSBh
bm90aGVyIHRocmVhZC4KKyAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxv
Y2soKSk7CisgICAgaWYgKCFmYXN0TWVtb3J5RW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgaGF2ZSBhIHN0dWIgcHJpb3IgdG8g
cnVubmluZyBjb2RlLgorICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRo
dW5rR2VuZXJhdG9yKTsKKworICAgIGF1dG8gZGVxdWVGYXN0TWVtb3J5ID0gWyZdICgpIC0+IGJv
b2wgeworICAgICAgICBpZiAoIWF2YWlsYWJsZUZhc3RNZW1vcmllcygpLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgbWVtb3J5ID0gYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCkudGFrZUZpcnN0KCk7
CisgICAgICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlNYXBwZWRCeXRlczsKKyAg
ICAgICAgICAgIG1vZGUgPSBNZW1vcnk6OlNpZ25hbGluZzsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgQVNT
RVJUKGFsbG9jYXRlZEZhc3RNZW1vcmllcyA8PSBtYXhGYXN0TWVtb3JpZXMpOworICAgIGlmIChk
ZXF1ZUZhc3RNZW1vcnkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZiB3ZSBo
YXZlIGFsbG9jYXRlZCBhbGwgdGhlIGZhc3QgbWVtb3JpZXMuLi4gdG9vIGJhZC4KKyAgICBpZiAo
YWxsb2NhdGVkRmFzdE1lbW9yaWVzID09IG1heEZhc3RNZW1vcmllcykgeworICAgICAgICAvLyBU
aGVyZSBpcyBhIHJlYXNvbmFibGUgY2hhbmNlIHRoYXQgYW5vdGhlciBtb2R1bGUgaGFzIGRpZWQg
YnV0IGhhcyBub3QgYmVlbiBjb2xsZWN0ZWQgeWV0LiBEb24ndCBsb3NlIGhvcGUgeWV0IQorICAg
ICAgICB2bS5oZWFwLmNvbGxlY3RTeW5jKCk7CisgICAgICAgIHJldHVybiBkZXF1ZUZhc3RNZW1v
cnkoKTsKICAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gIiI7CisKKyAgICBpZiAobW1hcEJ5dGVzKGZhc3RNZW1vcnlNYXBwZWRCeXRlcykpIHsKKyAg
ICAgICAgbW9kZSA9IE1vZGU6OlNpZ25hbGluZzsKKyAgICAgICAgYWxsb2NhdGVkRmFzdE1lbW9y
aWVzKys7CisgICAgfQorICAgIHJldHVybiBtX21lbW9yeTsKIH0KIAotc3RhdGljX2Fzc2VydChz
aXplb2YodWludDY0X3QpID09IHNpemVvZihzaXplX3QpLCAiV2UgcmVseSBvbiBhbGxvd2luZyB0
aGUgbWF4aW11bSBzaXplIG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUgMl4zMiB3aGljaCBpcyBsYXJn
ZXIgdGhhbiBmaXRzIGluIGEgMzItYml0IGludGVnZXIgdGhhdCB3ZSdkIHBhc3MgdG8gbXByb3Rl
Y3QgaWYgdGhpcyBkaWRuJ3QgaG9sZC4iKTsKK3ZvaWQgcmVsZWFzZUZhc3RNZW1vcnkodm9pZCom
IG1lbW9yeSwgc2l6ZV90IHdyaXRhYmxlU2l6ZSkKK3sKKyAgICBpZiAobW9kZSgpICE9IE1vZGU6
OlNpZ25hbGluZyB8fCAhbV9tZW1vcnkpCisgICAgICAgIHJldHVybjsKIAotTWVtb3J5OjpNZW1v
cnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9tZW1vcnkgJiYgbV9tYXBwZWRDYXBhY2l0eSA9PSBmYXN0TWVt
b3J5TWFwcGVkQnl0ZXMpOworICAgIEFTU0VSVChmYXN0TWVtb3J5RW5hYmxlZCgpKTsKKworICAg
IG1lbXNldChtX21lbW9yeSwgMCwgbV9zaXplKTsKKyAgICAvLyBXZSBuZWVkIHRvIG1wcm90ZWN0
IFBST1RfTk9ORSBhbGwgdGhlIGV4aXN0aW5nIG1lbW9yeS4gSWYgd2UgY2FuJ3QsIGZvcgorICAg
IC8vIHdoYXRldmVyIHJlYXNvbiwgd2Ugc2hvdWxkIGJhaWwgb3V0IGFuZCBnZXQgcmlkIG9mIHRo
aXMgbWVtb3J5LgorICAgIGlmIChtcHJvdGVjdChtX21lbW9yeSwgbV9zaXplLCBQUk9UX05PTkUp
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCku
c2l6ZSgpIDwgYWxsb2NhdGVkRmFzdE1lbW9yaWVzKTsKKyAgICBhdmFpbGFibGVGYXN0TWVtb3Jp
ZXMoKS5hcHBlbmQobV9tZW1vcnkpOworICAgIG1fbWVtb3J5ID0gbnVsbHB0cjsKK30KKworTWVt
b3J5OjpNZW1vcnkoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IGJvb2wmIGZhaWxlZCkKICAgICA6IG1fc2l6ZShpbml0aWFsLmJ5dGVzKCkpCiAgICAgLCBtX2lu
aXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQotICAgICwgbV9tb2RlKE1v
ZGU6OkJvdW5kc0NoZWNraW5nKQotICAgIC8vIEZJWE1FOiBJZiB3ZSBhZGQgc2lnbmFsIGJhc2Vk
IGJvdW5kcyBjaGVja2luZyB0aGVuIHdlIG5lZWQgZXh0cmEgc3BhY2UgZm9yIG92ZXJmbG93IG9u
IGxvYWQuCi0gICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyNjkzCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1heGltdW0gfHwgbWF4aW11bSA+PSBp
bml0aWFsKTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBvdXIgY2FsbGVyLgotCi0g
ICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdlQ291
bnQ6Om1heCgpLmJ5dGVzKCk7Ci0gICAgaWYgKCFtX21hcHBlZENhcGFjaXR5KSB7Ci0gICAgICAg
IC8vIFRoaXMgbWVhbnMgd2Ugc3BlY2lmaWVkIGEgemVybyBhcyBtYXhpbXVtICh3aGljaCBtZWFu
cyB3ZSBhbHNvIGhhdmUgemVybyBhcyBpbml0aWFsIHNpemUpLgotICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX3NpemUgPT0gMCk7Ci0gICAgICAgIG1fbWVtb3J5ID0gbnVsbHB0cjsKLSAgICAgICAg
bV9tYXBwZWRDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGZhaWxlZCA9IGZhbHNlOwotICAgICAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgYWxsb2Nh
dGluZyBub3RoaW5nICIsICp0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbml0
aWFsaXplKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBmYWlsZWQpOworICAgIGlmIChtb2RlKCkgPT0g
U2lnbmFsaW5nKQorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX21hcHBlZENhcGFjaXR5ID09IGZh
c3RNZW1vcnlNYXBwZWRCeXRlcyk7CisgICAgaWYgKCFmYWlsZWQpCisgICAgICAgIEFTU0VSVChs
YXN0QWxsb2NhdGVkTW9kZSgpID09IG1vZGUoKSk7Cit9CiAKLSAgICAvLyBGSVhNRTogSXQgd291
bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0gICAgdm9pZCogcmVzdWx0ID0g
T3B0aW9uczo6c2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSgpID8gTUFQX0ZBSUxFRCA6IG1t
YXAobnVsbHB0ciwgbV9tYXBwZWRDYXBhY2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1B
UF9BTk9OLCAtMSwgMCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAg
IC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4KLSAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6TWVtb3J5IG1tYXAgZmFpbGVkIG9u
Y2UgZm9yIGNhcGFjaXR5LCB0cnlpbmcgYWdhaW4iLCAqdGhpcyk7Ci0gICAgICAgIG1fbWFwcGVk
Q2FwYWNpdHkgPSBtX3NpemU7CisgICAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVJbXBs
KFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlv
bmFsPE1vZGU+IG1vZGUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8
fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91
ciBjYWxsZXIuCisKKyAgICAgICAgdWludDY0X3Qgc2l6ZSA9IGluaXRpYWwuYnl0ZXMoKTsKKyAg
ICAgICAgdWludDY0X3QgbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygp
IDogUGFnZUNvdW50OjptYXgoKS5ieXRlcygpOwogICAgICAgICBpZiAoIW1fbWFwcGVkQ2FwYWNp
dHkpIHsKLSAgICAgICAgICAgIG1fbWVtb3J5ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGZhaWxl
ZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJNZW1vcnk6Ok1lbW9yeSBtbWFwIG5vdCB0cnlpbmcgYWdhaW4gYmVjYXVzZSBzaXpl
IGlzIHplcm8gIiwgKnRoaXMpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgLy8g
VGhpcyBtZWFucyB3ZSBzcGVjaWZpZWQgYSB6ZXJvIGFzIG1heGltdW0gKHdoaWNoIG1lYW5zIHdl
IGFsc28gaGF2ZSB6ZXJvIGFzIGluaXRpYWwgc2l6ZSkuCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzaXplID09IDApOworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9y
eTo6TWVtb3J5IGFsbG9jYXRpbmcgbm90aGluZyAiLCAqdGhpcyk7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwg
bV9tYXBwZWRDYXBhY2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwg
MCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Ok1lbW9yeSBtbWFw
IGZhaWxlZCB0d2ljZSAiLCAqdGhpcyk7CisgICAgICAgIGlmICghdHJ5R2V0RmFzdE1lbW9yeSh2
bSkpIHsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVt
b3J5KCkgPyB0cnVlIDogIW1tYXBCeXRlcyhtX21hcHBlZENhcGFjaXR5KSkgeworICAgICAgICAg
ICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4KKyAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgbW1hcCBmYWlsZWQgb25j
ZSBmb3IgY2FwYWNpdHksIHRyeWluZyBhZ2FpbiIsICp0aGlzKTsKKyAgICAgICAgICAgICAgICBt
X21hcHBlZENhcGFjaXR5ID0gbV9zaXplOworICAgICAgICAgICAgICAgIGlmICghbV9tYXBwZWRD
YXBhY2l0eSkgeworICAgICAgICAgICAgICAgICAgICBtX21lbW9yeSA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgICAgIGZhaWxlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgbW1hcCBub3QgdHJ5aW5nIGFnYWluIGJl
Y2F1c2Ugc2l6ZSBpcyB6ZXJvICIsICp0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghbW1hcEJ5dGVzKG1f
bWFwcGVkQ2FwYWNpdHkpKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJNZW1vcnk6Ok1lbW9yeSBtbWFwIGZhaWxlZCB0d2ljZSAiLCAqdGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBB
U1NFUlQobV9tZW1vcnkgJiYgbV9zaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpOworICAgICAgICBp
ZiAobXByb3RlY3QobV9tZW1vcnksIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSwgUFJPVF9S
RUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJN
ZW1vcnk6Ok1lbW9yeSBtcHJvdGVjdCBmYWlsZWQgIiwgKnRoaXMpOworICAgICAgICAgICAgcmVs
ZWFzZUZhc3RNZW1vcnkoKTsKKyAgICAgICAgICAgIGlmIChtX21lbW9yeSkgeworICAgICAgICAg
ICAgICAgIGlmIChtdW5tYXAobV9tZW1vcnksIG1fbWFwcGVkQ2FwYWNpdHkpKQorICAgICAgICAg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZmFpbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bGFzdEFsbG9jYXRlZE1lbW9yeU1vZGUgPSBtX21vZGU7CisgICAgICAgIGZhaWxlZCA9IGZhbHNl
OworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgbW1hcCBzdWNj
ZWVkZWQgIiwgKnRoaXMpOwogICAgIH0KIAotICAgIEFTU0VSVChtX3NpemUgPD0gbV9tYXBwZWRD
YXBhY2l0eSk7CisgICAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdl
Q291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9k
ZSkKICAgICB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9ICFtcHJvdGVjdChyZXN1bHQsIHN0YXRp
Y19jYXN0PHNpemVfdD4obV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11
bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5
IG91ciBjYWxsZXIuCisKKwogICAgIH0KIAotICAgIG1fbWVtb3J5ID0gcmVzdWx0OwotICAgIGZh
aWxlZCA9IGZhbHNlOwotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIk1lbW9y
eTo6TWVtb3J5IG1tYXAgc3VjY2VlZGVkICIsICp0aGlzKTsKK3ZvaWQgTWVtb3J5Ojppbml0aWFs
aXplKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBm
YWlsZWQpCit7CisKIH0KIAogTWVtb3J5Ojp+TWVtb3J5KCkKIHsKLSAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6On5NZW1vcnkgIiwgKnRoaXMpOworICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICJNZW1vcnk6On5NZW1vcnkgIiwgKnRoaXMpOworICAgIHJlbGVhc2VG
YXN0TWVtb3J5KCk7CiAgICAgaWYgKG1fbWVtb3J5KSB7CiAgICAgICAgIGlmIChtdW5tYXAobV9t
ZW1vcnksIG1fbWFwcGVkQ2FwYWNpdHkpKQogICAgICAgICAgICAgQ1JBU0goKTsKQEAgLTEyOCw4
ICsyMjEsNyBAQCBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChuZXdTaXplID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CiAK
LSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Omdyb3cgdG8gIiwg
bmV3U2l6ZSwgIiBmcm9tICIsICp0aGlzKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVt
b3J5Ojpncm93IHRvICIsIG5ld1NpemUsICIgZnJvbSAiLCAqdGhpcyk7CiAKICAgICBpZiAobWF4
aW11bSgpICYmIG5ld1NpemUgPiBtYXhpbXVtKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTEzNywxNCArMjI5LDE3IEBAIGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQog
ICAgIHVpbnQ2NF90IGRlc2lyZWRTaXplID0gbmV3U2l6ZS5ieXRlcygpOwogCiAgICAgaWYgKG1f
bWVtb3J5ICYmIGRlc2lyZWRTaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgYm9v
bCBzdWNjZXNzID0gIW1wcm90ZWN0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9yeSkgKyBt
X3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZGVzaXJlZFNpemUgLSBtX3NpemUpLCBQUk9UX1JF
QUQgfCBQUk9UX1dSSVRFKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7CisgICAg
ICAgIGlmIChtcHJvdGVjdChzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9tZW1vcnkpICsgbV9zaXpl
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlc2lyZWRTaXplIC0gbV9zaXplKSwgUFJPVF9SRUFEIHwg
UFJPVF9XUklURSkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6
Omdyb3cgaW4tcGxhY2UgZmFpbGVkICIsICp0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwotICAgICAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5Ojpncm93IGluLXBsYWNl
ICIsICp0aGlzKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyBp
bi1wbGFjZSAiLCAqdGhpcyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIEFT
U0VSVChtb2RlKCkgIT0gU2lnbmFsaW5nKTsKICAgICAvLyBPdGhlcndpc2UsIGxldCdzIHRyeSB0
byBtYWtlIHNvbWUgbmV3IG1lbW9yeS4KICAgICB2b2lkKiBuZXdNZW1vcnkgPSBtbWFwKG51bGxw
dHIsIGRlc2lyZWRTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1B
UF9BTk9OLCAtMSwgMCk7CiAgICAgaWYgKG5ld01lbW9yeSA9PSBNQVBfRkFJTEVEKQpAQCAtMTU5
LDExICsyNTQsMjggQEAgYm9vbCBNZW1vcnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCiAgICAg
bV9tYXBwZWRDYXBhY2l0eSA9IGRlc2lyZWRTaXplOwogICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXpl
OwogCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiTWVtb3J5Ojpncm93ICIs
ICp0aGlzKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93ICIsICp0aGlz
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBTdHJpbmcgbWVtb3J5SGV4OworICAgIFdURjo6YXBwZW5kVW5z
aWduZWQ2NEFzSGV4KCh1aW50NjRfdCkodWludHB0cl90KW1fbWVtb3J5LCBtZW1vcnlIZXgpOwor
ICAgIG91dC5wcmludCgiTWVtb3J5IGF0IDB4IiwgbWVtb3J5SGV4LCAiLCBzaXplICIsIG1fc2l6
ZSwgIkIgY2FwYWNpdHkgIiwgbV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0
aWFsLCAiIG1heGltdW0gIiwgbV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUp
KTsKK30KKworY29uc3QgY2hhciogTWVtb3J5OjptYWtlU3RyaW5nKE1vZGUgbW9kZSkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiBy
ZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAgICBjYXNlIE1vZGU6OlNpZ25hbGluZzogcmV0dXJu
ICJTaWduYWxpbmciOworICAgIGNhc2UgTW9kZTo6TnVtYmVyT2ZNb2RlczogYnJlYWs7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogfSAvLyBuYW1lc3BhY2UgV2FzbQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCmluZGV4IDIzNmJmODUxMjU2NDU1YmNlOWUzMjM2ZGNj
NDU4NGM4NmMxZGNmMGMuLmQxODFlZGVmYzgwNTE0NzM1ZjE2MWJlYTE3MzJkZGM5NDhhZTc4Njkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAgLTI3LDQwICsyNyw2
MyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogCisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKIG5hbWVzcGFjZSBXVEYgewogY2xhc3MgUHJpbnRTdHJlYW07CiB9CiAKLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
Vk07CiAKLWNsYXNzIE1lbW9yeSB7CituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIE1lbW9yeSA6
IHB1YmxpYyBSZWZDb3VudGVkPE1lbW9yeT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1l
bW9yeSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdm9pZCBk
dW1wKFdURjo6UHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
c3VwcG9ydCBvdGhlciBtb2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYyNjkzCi0gICAgZW51bSBjbGFzcyBNb2RlIHsKLSAgICAgICAgQm91bmRzQ2hl
Y2tpbmcKKyAgICBlbnVtIE1vZGUgeworICAgICAgICBCb3VuZHNDaGVja2luZywKKyAgICAgICAg
U2lnbmFsaW5nLAorICAgICAgICBOdW1iZXJPZk1vZGVzCiAgICAgfTsKICAgICBjb25zdCBjaGFy
KiBtYWtlU3RyaW5nKE1vZGUpIGNvbnN0OwogCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICEhbV9tZW1vcnk7IH0KKworICAgIE1lbW9yeSYgb3BlcmF0b3I9KE1l
bW9yeSYmIG90aGVyKQorICAgIHsKKyAgICAgICAgLy8gTW92aW5nIHRyYW5zZmVycyBvd25lcnNo
aXAgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkuCisgICAgICAgIEFTU0VSVChtX21lbW9yeSA9PSBu
dWxscHRyKTsKKyAgICAgICAgc3RkOjpzd2FwKG1fbWVtb3J5LCBvdGhlci5tX21lbW9yeSk7Cisg
ICAgICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9pbml0aWFsID0gb3RoZXIu
bV9pbml0aWFsOworICAgICAgICBtX21heGltdW0gPSBvdGhlci5tX21heGltdW07CisgICAgICAg
IG1fbWFwcGVkQ2FwYWNpdHkgPSBvdGhlci5tX21hcHBlZENhcGFjaXR5OworICAgICAgICBtX21v
ZGUgPSBvdGhlci5tX21vZGU7CisgICAgICAgIGlmIChtX21lbW9yeSAmJiBtX21vZGUgPT0gTW9k
ZTo6U2lnbmFsaW5nKQorICAgICAgICAgICAgQVNTRVJUKG1fbWFwcGVkQ2FwYWNpdHkgPT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpICog
Mik7CisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIH0KKworICAgIHN0YXRpYyBSZWZQdHI8
TWVtb3J5PiBjcmVhdGUoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKKwogICAg
IE1lbW9yeSgpID0gZGVmYXVsdDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnkoUGFnZUNv
dW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIE1lbW9yeShWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSwgYm9vbCYgZmFpbGVkKTsKICAgICBNZW1vcnkoTWVtb3J5JiYgb3RoZXIpCi0gICAgICAg
IDogbV9tZW1vcnkob3RoZXIubV9tZW1vcnkpCi0gICAgICAgICwgbV9zaXplKG90aGVyLm1fc2l6
ZSkKLSAgICAgICAgLCBtX2luaXRpYWwob3RoZXIubV9pbml0aWFsKQotICAgICAgICAsIG1fbWF4
aW11bShvdGhlci5tX21heGltdW0pCi0gICAgICAgICwgbV9tYXBwZWRDYXBhY2l0eShvdGhlci5t
X21hcHBlZENhcGFjaXR5KQotICAgICAgICAsIG1fbW9kZShvdGhlci5tX21vZGUpCiAgICAgewot
ICAgICAgICAvLyBNb3ZpbmcgdHJhbnNmZXJzIG93bmVyc2hpcCBvZiB0aGUgYWxsb2NhdGVkIG1l
bW9yeS4KLSAgICAgICAgb3RoZXIubV9tZW1vcnkgPSBudWxscHRyOworICAgICAgICAqdGhpcyA9
IFdURk1vdmUob3RoZXIpOwogICAgIH0KKwogICAgIH5NZW1vcnkoKTsKIAogICAgIHZvaWQqIG1l
bW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9CkBAIC03MCwxNCArOTMsMjEgQEAgcHVi
bGljOgogICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9
CiAgICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KIAor
ICAgIHN0YXRpYyBNb2RlIGxhc3RBbGxvY2F0ZWRNb2RlKCk7CiAgICAgTW9kZSBtb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKICAgICBib29sIGdyb3coUGFnZUNvdW50KTsKIAogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoTWVtb3J5LCBtX21lbW9yeSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fc2l6ZSk7IH0KLSAgICAKKwog
cHJpdmF0ZToKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlSW1wbChWTSYsIFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNb2RlPiByZXF1
aXJlZE1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAgIHZvaWQgaW5pdGlhbGl6ZShWTSYgdm0sIFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCYgZmFpbGVkKTsKKworICAg
IGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0pOworICAgIHZvaWQgcmVsZWFzZUZhc3RNZW1v
cnkoKTsKKwogICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9OwogICAgIHVpbnQ2NF90IG1f
c2l6ZSB7IDAgfTsKICAgICBQYWdlQ291bnQgbV9pbml0aWFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKaW5kZXggNmIwNjNk
MzUxMjRlOTdhODNiMWYxZTA4NzNhNDEwN2M5ZjBlOWZkNS4uNzViNmQyMmNmNGQ1YjVmOGY1ZDU2
MWFkMWU2NjQwMDc2ODhiMjc2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisj
aW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpAQCAtNzEsMTEgKzcyLDIzIEBAIFBp
bm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVn
aXN0ZXJJbmZvPiYmIHNpemVSZWdpCiB7CiB9CiAKLU1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJ
bmZvcm1hdGlvbihQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sICBib29sIGlz
SW1wb3J0KQorTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFn
ZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6
TW9kZT4gcmVjb21waWxlTW9kZSwgYm9vbCBpc0ltcG9ydCkKICAgICA6IG1faW5pdGlhbChpbml0
aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiAgICAgLCBtX2lzSW1wb3J0KGlzSW1wb3J0
KQogeworICAgIGlmICghaXNJbXBvcnQgJiYgIXJlY29tcGlsZU1vZGUpIHsKKyAgICAgICAgYm9v
bCBmYWlsZWRUb1Jlc2VydmU7CisgICAgICAgIGF1dG8gYWRvcHRSZWY8TWVtb3J5Pih2bSwgaW5p
dGlhbCwgbWF4aW11bSwgZmFpbGVkVG9SZXNlcnZlKTsKKyAgICAgICAgaWYgKCFmYWlsZWRUb1Jl
c2VydmUpIHsKKyAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1vcnkgPSBXVEZNb3ZlKG1lbSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJlY29tcGlsZU1vZGUpCisgICAgICAgIG1fbW9kZSA9
ICpyZWNvbXBpbGVNb2RlOworICAgIGVsc2UKKyAgICAgICAgbV9tb2RlID0gTWVtb3J5OjpsYXN0
QWxsb2NhdGVkTW9kZSgpOworCiAgICAgUkVMRUFTRV9BU1NFUlQoISFtX2luaXRpYWwpOwogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX21heGltdW0gfHwgbV9tYXhpbXVtID49IG1faW5pdGlhbCk7CiAg
ICAgQVNTRVJUKCEhKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5SW5mb3JtYXRpb24uaAppbmRleCA2ZTdmNTIxODk0N2UwMTZiNDhmZGY2MDE5ZDM2
OGE1NzU3ZTM4NWI3Li42NThkMDJlMTdiYWU0ODAwNGEwMDNjMWMyOTI3MjQzOTBkY2Q1NDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uaApAQCAtMjgsOCArMjgsMTAgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNs
dWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21Q
YWdlQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5o
PgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC01MiwxNyArNTQsMjQg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQoISp0aGlzKTsKICAgICB9CiAKLSAgICBNZW1vcnlJ
bmZvcm1hdGlvbihQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wgaXNJ
bXBvcnQpOworICAgIE1lbW9yeUluZm9ybWF0aW9uKFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBh
Z2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gbW9kZSwgYm9vbCBp
c0ltcG9ydCk7CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5p
dGlhbDsgfQogICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVt
OyB9CisgICAgYm9vbCBoYXNSZXNlcnZlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXJ2
ZWRNZW1vcnkgJiYgISEqbV9yZXNlcnZlZE1lbW9yeTsgfQorICAgIE1lbW9yeSYgcmVzZXJ2ZWRN
ZW1vcnkoKSBjb25zdCB7IEFTU0VSVChoYXNSZXNlcnZlZE1lbW9yeSgpKTsgcmV0dXJuICptX3Jl
c2VydmVkTWVtb3J5OyB9CisgICAgTWVtb3J5OjpNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBt
X21vZGU7IH0KICAgICBib29sIGlzSW1wb3J0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ltcG9ydDsg
fQogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbml0
aWFsOyB9CiAKIHByaXZhdGU6CisgICAgLy8gVGhpcyBpcyBhIHVuaXF1ZV9wdHIgc28gd2UgY2Fu
IHBhc3MgTW9kdWxlSW5mb3JtYXRpb24gYXMgY29uc3QgYW5kIHN0aWxsIGJlCisgICAgLy8gYWJs
ZSB0byB0YWtlIG93bmVyc2hpcCBvZiB0aGlzLgorICAgIFJlZlB0cjxNZW1vcnk+IG1fcmVzZXJ2
ZWRNZW1vcnk7CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbCB7IH07CiAgICAgUGFnZUNvdW50IG1f
bWF4aW11bSB7IH07CisgICAgTWVtb3J5OjpNb2RlIG1fbW9kZSB7IE1lbW9yeTo6TW9kZTo6Qm91
bmRzQ2hlY2tpbmcgfTsKICAgICBib29sIG1faXNJbXBvcnQgeyBmYWxzZSB9OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCA1
MTc3M2QwNmU2MjAxMjNiNWFjMDQyNjJhOTA4YmFiMGJmOGYxNTk5Li41MjExNjRmZjRjNDZhYjRm
MWEzY2NhMzdjZGU5MzllMTJlYjZiYmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMzE2LDcgKzMxNiw3IEBAIGF1dG8gTW9kdWxl
UGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0
CiAgICAgQVNTRVJUKGluaXRpYWxQYWdlQ291bnQpOwogICAgIEFTU0VSVCghbWF4aW11bVBhZ2VD
b3VudCB8fCBtYXhpbXVtUGFnZUNvdW50ID49IGluaXRpYWxQYWdlQ291bnQpOwogCi0gICAgbV9y
ZXN1bHQubW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbihpbml0aWFsUGFnZUNvdW50
LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7CisgICAgbV9yZXN1bHQubW9kdWxlLT5tZW1v
cnkgPSBNZW1vcnlJbmZvcm1hdGlvbigqbV92bSwgaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBh
Z2VDb3VudCwgbV9tb2RlLCBpc0ltcG9ydCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCmluZGV4IDQxYjU3ZmM4
MjBjNDViOWI0ZWM1ZmE3YzY5NWJhNTZjYWZiODRhMTAuLjk0YmExNGUxNWEzZmRhMzEwNGUzM2Jh
YzA5M2MxZjFlODFjZjIwYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJXYXNtRm9ybWF0Lmgi
CiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC00MywxMiArNDQsOSBAQCBzdHJ1Y3QgTW9kdWxlUGFy
c2VyUmVzdWx0IHsKIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8TW9kdWxlUGFy
c2VyUmVzdWx0PiB7CiBwdWJsaWM6CiAKLSAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBjb25zdCB1
aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgpCisgICAgTW9kdWxlUGFy
c2VyKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVu
Z3RoLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gbW9kZSkKICAgICAgICAgOiBQYXJzZXIo
dm0sIHNvdXJjZUJ1ZmZlciwgc291cmNlTGVuZ3RoKQotICAgIHsKLSAgICB9Ci0gICAgTW9kdWxl
UGFyc2VyKFZNKiB2bSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2VCdWZmZXIpCi0gICAg
ICAgIDogTW9kdWxlUGFyc2VyKHZtLCBzb3VyY2VCdWZmZXIuZGF0YSgpLCBzb3VyY2VCdWZmZXIu
c2l6ZSgpKQorICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKICAgICB9CiAKQEAgLTY4LDYg
KzY2LDcgQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYsIFR5cGUmIGluaXRFeHByVHlwZSk7CiAK
ICAgICBNb2R1bGVQYXJzZXJSZXN1bHQgbV9yZXN1bHQ7CisgICAgc3RkOjpvcHRpb25hbDxNZW1v
cnk6Ok1vZGU+IG1fbW9kZSB7IHN0ZDo6bnVsbG9wdCB9OwogICAgIGJvb2wgbV9oYXNUYWJsZSB7
IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5k
ZXggNTk4MGI1MWU4NzQyMjIzNzU1Y2UwYzNkZjJjMTZiMWRlOWVjOGYxMi4uNDgzNWFhMjhmMmNh
ZjdhMjFjNmFjNGExOTNjMzc3MWU1ODI4Y2FhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCiAjaW5jbHVk
ZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVQYXJzZXIuaCIKICNpbmNsdWRl
ICJXYXNtVmFsaWRhdGUuaCIKQEAgLTYxLDE0ICs2MiwxNCBAQCBQbGFuOjpQbGFuKFZNKiB2bSwg
Y29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoKQogewogfQogCi1ib29s
IFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQorYm9vbCBQbGFuOjpwYXJzZUFuZFZhbGlk
YXRlTW9kdWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiByZWNvbXBpbGVNb2RlKQogewog
ICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwogICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6
OnJlcG9ydENvbXBpbGVUaW1lcygpKQogICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKIAogICAgIHsKLSAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihtX3Zt
LCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgpOworICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxl
UGFyc2VyKG1fdm0sIG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgcmVjb21waWxlTW9kZSk7CiAg
ICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFyc2UoKTsKICAgICAgICAg
aWYgKCFwYXJzZVJlc3VsdCkgewogICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBwYXJzZVJl
c3VsdC5lcnJvcigpOwpAQCAtMTA5LDEwICsxMTAsMTIgQEAgYm9vbCBQbGFuOjpwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKCkKIC8vIFRoZSByZWFzb24gdGhpcyBpcyBPSyBpcyB0aGF0IHdlIGd1YXJh
bnRlZSB0aGF0IHRoZSBtYWluIHRocmVhZCBkb2Vzbid0IGNvbnRpbnVlIHVudGlsIGFsbCB0aHJl
YWRzCiAvLyB0aGF0IGNvdWxkIHRvdWNoIGl0cyBzdGFjayBhcmUgZG9uZSBleGVjdXRpbmcuCiBT
VVBQUkVTU19BU0FOIAotdm9pZCBQbGFuOjpydW4oKQordm9pZCBQbGFuOjpydW4oc3RkOjpvcHRp
b25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCiB7Ci0gICAgaWYgKCFwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKCkpCisgICAgaWYgKCFwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHJlY29tcGls
ZU1vZGUpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKHJlY29tcGlsZU1vZGUpCisgICAgICAg
IEFTU0VSVChtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpID09IHJlY29tcGlsZU1v
ZGUpOwogCiAgICAgYXV0byB0cnlSZXNlcnZlQ2FwYWNpdHkgPSBbdGhpc10gKGF1dG8mIHZlY3Rv
ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpIHsKICAgICAgICAgaWYgKFVOTElLRUxZ
KCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmgKaW5kZXggNjk4MGJkYmJiZTE3YTUxOTVjOGM1ZTAzNWViNGU2YWExMGQy
Y2YxNS4uZDA3MDM3NTIwMzJjOWFhMGNkODU4NDE3ZmIxNzI2ZTdmYjljM2RmOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC00OSw5ICs0OSw5IEBAIHB1YmxpYzoKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0
ZU1vZHVsZSgpOworICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFs
PE1lbW9yeTo6TW9kZT4gPSBzdGQ6Om51bGxvcHQpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBydW4oKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1bihzdGQ6Om9wdGlvbmFs
PE1lbW9yeTo6TW9kZT4gPSBzdGQ6Om51bGxvcHQpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBpbml0aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCosIHN0ZDo6ZnVuY3Rpb248dm9p
ZCh1bnNpZ25lZCwgSlNXZWJBc3NlbWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4p
OwogCkBAIC05Miw2ICs5Miw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV93
YXNtRXhpdFN0dWJzKTsKICAgICB9CiAKKyAgICBNZW1vcnk6Ok1vZGUgbW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tb2RlKCk7IH0KKwogcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRp
b247CiAgICAgVmVjdG9yPEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeT4gbV9mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q2FsbGVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlDYWxsZWUuY3BwCmluZGV4IGMyNzcxMmExMGZmZmM4ZGYzZjFlYjYwNmIwOGNm
YzlmMDdmOGUzNmIuLjUxNzEyNzg1ZjI5M2I4ZjEwYmEwZDk5N2M0NmEwMWViNTk3ZDQ4ZmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxs
ZWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
YWxsZWUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQzLDExICs0NCwxMyBAQCB2b2lkIEpTV2ViQXNz
ZW1ibHlDYWxsZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2FzbTo6RW50cnlwb2ludCYmIGVu
dHJ5cG9pbnQpCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogCiAgICAgbV9lbnRyeXBv
aW50ID0gV1RGTW92ZShlbnRyeXBvaW50KTsKKyAgICBXYXNtOjpyZWdpc3RlckNvZGUodm0sIG1f
ZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3Rh
cnQoKSwgbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9y
eSgpLT5lbmQoKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCiB7CiAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogdGhpc09iamVjdCA9IHN0YXRp
Y19jYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUqPihjZWxsKTsKKyAgICBXYXNtOjp1bnJlZ2lzdGVy
Q29kZSgqY2VsbC0+dm0oKSwgdGhpc09iamVjdC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5j
b2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCB0aGlzT2JqZWN0LT5tX2VudHJ5
cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsK
ICAgICB0aGlzT2JqZWN0LT5KU1dlYkFzc2VtYmx5Q2FsbGVlOjp+SlNXZWJBc3NlbWJseUNhbGxl
ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiYzhmMmRmMzcxMWEzZjBkZGU5
OWJmZjg4MDc0NDg0OTg3NThlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMCwwICsxLDc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TWVtb3J5LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q29kZUJsb2NrIiwgbnVsbHB0ciwgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSB9OworCitKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1v
ZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdh
c206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVicywgV2FzbTo6TWVtb3J5OjpNb2RlIG1v
ZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KQorICAgIDogQmFzZSh2bSwgdm0ud2ViQXNzZW1ibHlD
b2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2NhbGxMaW5rSW5mb3MoV1RGTW92ZShj
YWxsTGlua0luZm9zKSkKKyAgICAsIG1fd2FzbUV4aXRTdHVicyhXVEZNb3ZlKHdhc21FeGl0U3R1
YnMpKQorICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX2NhbGxlZUNvdW50KGNhbGxlZUNvdW50
KQoreworICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgb3duZXIpOworICAgIG1lbXNldChjYWxs
ZWVzKCksIDAsIG1fY2FsbGVlQ291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1i
bHlDYWxsZWU+KSAqIDIpOworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqPihjZWxsKS0+SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6fkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2soKTsKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNXZWJBc3NlbWJseUNv
ZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oY2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRoaXNPYmplY3QtPm1fY2FsbGVlQ291bnQgKiAyOyBpKyspCisgICAgICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPmNhbGxlZXMoKVtpXSk7CisKKyAgICB2aXNpdG9yLmFkZFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIoJnRoaXNPYmplY3QtPm1fdW5jb25kaXRpb25hbEZpbmFsaXpl
cik7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFs
aXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIHRoaXNPYmplY3QgPSBiaXR3aXNlX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+
KAorICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2ssIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcikpOworICAgIGZv
ciAoYXV0byBpdGVyID0gdGhpc09iamVjdC0+bV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRl
cjsgKytpdGVyKQorICAgICAgICAoKml0ZXIpLT52aXNpdFdlYWsoKnRoaXNPYmplY3QtPnZtKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwCmluZGV4IGZiYzFjZWJmYjljYjhhNTljOWVhZTZlNmRkOTlmYzU1NWY1
YjEzY2MuLmYzNDcxOWQyMmYyYzk3MGI5MzYzNzlmMDNjZDY5NTQ2YzQyNTEzZDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zOCw2ICszOCwxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAordm9pZCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJB
c3NlbWJseU1lbW9yeSogbWVtb3J5KQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICAvLyBXZSBjcmVhdGUgc3R1YiBtZW1vcmllcyBldmVuIGZvciBtb2R1
bGVzIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgZ2V0IGEgbWVtb3J5IHNvIHdlIHdhbnQgdG8gYXZv
aWQgcmVjb21wbGluZyB0aGVyZS4KKyAgICBpZiAoKm1lbW9yeS0+bWVtb3J5KCkpIHsKKyAgICAg
ICAgYXV0byBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+bW9kdWxlKCktPmNvZGVCbG9jayh2bSwg
ZXhlYywgbWVtb3J5KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgKTsKKyAg
ICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOworICAgIH0KKyAgICBt
X21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7Cit9CisKIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU01vZHVsZU5hbWVzcGFjZU9iamVj
dCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KQogewogICAgIC8vIEZJWE1FOiBUaGVzZSBvYmplY3Rz
IGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVyZS4KQEAg
LTY3LDcgKzc5LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIG1fZ2xvYmFscyA9IE1h
bGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUpOwogICAgIGhlYXAoKS0+
cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsKIAotICAgIG1fbW9k
dWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMs
IG1vZHVsZS0+Y29kZUJsb2NrKCkpOwogICAgIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0LnNldCh2
bSwgdGhpcywgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICBwdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZXhwb3J0cyIpLCBtb2R1bGVOYW1lc3BhY2VPYmplY3Qs
IE5vbmUpOwogfQpAQCAtODMsNyArOTUsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9tb2R1bGUpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
Y29kZUJsb2NrKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZU5hbWVz
cGFjZU9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tZW1vcnkpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAppbmRleCA5
OWEyYzkwZjdlYTM1M2UzNmI2NTVhYmU1Y2RkNWM0OTgzYzUzYTE4Li4xNTk4N2M4MjgzMDIxZDU5
NWNkNGM3MzQ0YTZiOTk2MWUyNDFlZWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAKQEAgLTQ3
LDEwICs0OCwxNiBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBKU1dlYkFz
c2VtYmx5TW9kdWxlKiBtb2R1bGUoKQorICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgp
IGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9tb2R1bGUpOwotICAgICAgICByZXR1cm4g
bV9tb2R1bGUuZ2V0KCk7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jayk7CisgICAgICAgIHJl
dHVybiBtX2NvZGVCbG9jay0+bW9kdWxlKCk7CisgICAgfQorCisgICAgSlNXZWJBc3NlbWJseUNv
ZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NvZGVC
bG9jayk7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsKICAgICB9CiAKICAgICBX
cml0ZUJhcnJpZXI8SlNDZWxsPiogaW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQpAQCAtNzAs
NyArNzcsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVt
b3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KLSAgICB2b2lkIHNldE1lbW9yeShWTSYg
dm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkgeyBtX21lbW9yeS5zZXQodm0sIHRoaXMs
IG1lbW9yeSk7IH0KKyAgICAvLyBDYWxsaW5nIHRoaXMgbWlnaHQgdHJpZ2dlciBhIHJlY29tcGls
ZS4KKyAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlN
ZW1vcnkqIG1lbW9yeSk7CisgICAgV2FzbTo6TWVtb3J5OjpNb2RlIG1lbW9yeU1vZGUoKSB7IHJl
dHVybiBtZW1vcnkoKS0+bWVtb3J5KCktPm1vZGUoKTsgfQogCiAgICAgSlNXZWJBc3NlbWJseVRh
YmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KICAgICB2b2lkIHNldFRhYmxl
KFZNJiB2bSwgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSkgeyBtX3RhYmxlLnNldCh2bSwgdGhp
cywgdGFibGUpOyB9CkBAIC0xMDQsNyArMTEzLDcgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7Cisg
ICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAg
IFdyaXRlQmFycmllcjxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3BhY2VP
YmplY3Q7CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNZW1vcnk+IG1fbWVtb3J5Owog
ICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5VGFibGU+IG1fdGFibGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmlu
ZGV4IDA4ZmE1ODQ2MjhmMDdkMmQ4YzhjM2IyYjc4ZDExNTgwYzRmMjgxNzYuLmZhYzdiZTFiNDRk
YmExODhmMDYzNmRiNzFjZWUwZTkwYzMyZDBiMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC0zMCwxOCArMzAs
NDYgQEAKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
Q2FsbGVlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVt
b3J5LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIK
KyNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpz
X2luZm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07CiAKLUpTV2ViQXNzZW1i
bHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiYgbW9k
dWxlSW5mb3JtYXRpb24sIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9y
PFdhc206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVicywgU3ltYm9sVGFibGUqIGV4cG9y
dFN5bWJvbFRhYmxlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCBXYXNtOjpQbGFuJiBwbGFuLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeTo6TW9k
ZT4gbW9kZSkKIHsKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGNhbGxlZUNv
dW50KSkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgc3RkOjpmb3J3YXJkPHN0
ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4+KG1vZHVsZUluZm9ybWF0aW9u
KSwgc3RkOjpmb3J3YXJkPEJhZzxDYWxsTGlua0luZm8+PihjYWxsTGlua0luZm9zKSwgc3RkOjpm
b3J3YXJkPFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPj4od2FzbUV4aXRTdHVicyksIGNhbGxl
ZUNvdW50KTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGV4cG9ydFN5bWJvbFRh
YmxlKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgLy8g
T24gZmFpbHVyZSwgYSBuZXcgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIGlzIHRocm93bi4KKyAg
ICBwbGFuLnJ1bihtb2RlKTsKKyAgICBpZiAocGxhbi5mYWlsZWQoKSkgeworICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihl
eGVjLCB2bSwgcGxhbi5lcnJvck1lc3NhZ2UoKSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisgICAgaWYgKG1vZGUpCisgICAgICAgIEFTU0VSVCgqbW9kZSA9PSBwbGFuLm1vZGUo
KSk7CisKKyAgICB1bnNpZ25lZCBjYWxsZWVDb3VudCA9IHBsYW4uaW50ZXJuYWxGdW5jdGlvbkNv
dW50KCk7CisgICAgYXV0byogY29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3Jl
YXRlKHZtLCB0aGlzLCBwbGFuLnRha2VDYWxsTGlua0luZm9zKCksIHBsYW4udGFrZVdhc21FeGl0
U3R1YnMoKSwgcGxhbi5tb2RlKCksIGNhbGxlZUNvdW50KTsKKworICAgIHBsYW4uaW5pdGlhbGl6
ZUNhbGxlZXMoZXhlYy0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksCisgICAgICAgIFsmXSAo
dW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENh
bGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKKyAgICAg
ICAgICAgY29kZUJsb2NrLT5zZXRKU0VudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCBq
c0VudHJ5cG9pbnRDYWxsZWUpOworICAgICAgICAgICBjb2RlQmxvY2stPnNldFdhc21FbnRyeXBv
aW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAgICAg
ICB9KTsKKyAgICByZXR1cm4gY29kZUJsb2NrOworfQorCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSkKK3sKKyAg
ICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1i
bHlNb2R1bGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUpOwor
CisgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjLCBzb3VyY2UsIGJ5dGVTaXpl
KTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKQEAgLTUwLDIxICs3OCw1NyBAQCBTdHJ1Y3R1
cmUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKIH0KIAotSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24sIEJhZzxDYWxsTGlua0luZm8+JiYgY2Fs
bExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVicywg
dW5zaWduZWQgY2FsbGVlQ291bnQpCitKU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5
TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCi0gICAgLCBtX21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUobW9kdWxlSW5mb3JtYXRp
b24pKQotICAgICwgbV9jYWxsTGlua0luZm9zKFdURk1vdmUoY2FsbExpbmtJbmZvcykpCi0gICAg
LCBtX3dhc21FeGl0U3R1YnMoV1RGTW92ZSh3YXNtRXhpdFN0dWJzKSkKLSAgICAsIG1fY2FsbGVl
Q291bnQoY2FsbGVlQ291bnQpCiB7Ci0gICAgbWVtc2V0KGNhbGxlZXMoKSwgMCwgbV9jYWxsZWVD
b3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogMik7CiB9
CiAKLXZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTeW1i
b2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUpCitKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dl
YkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTV2Vi
QXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkKK3sKKyAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSA9
IG1lbW9yeS0+bWVtb3J5KCktPm1vZGUoKTsKKyAgICBpZiAoIW1fY29kZUJsb2Nrc1ttb2RlXSkg
eworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAg
IC8vIFdlIGRvbid0IGhhdmUgYSBjb2RlIGJsb2NrIGZvciB0aGlzIG1vZGUsIHdlIG5lZWQgdG8g
cmVjb21waWxlLi4uCisgICAgICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihtX3NvdXJjZUJ1ZmZlci0+ZGF0YSgpKSwgbV9zb3VyY2VCdWZmZXItPmJ5dGVMZW5n
dGgoKSk7CisKKyAgICAgICAgYXV0byogY29kZUJsb2NrID0gYnVpbGRDb2RlQmxvY2sodm0sIGV4
ZWMsIHBsYW4sIG1vZGUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKKworICAgICAgICBBU1NFUlQocGxhbi5leHBvcnRzKCkuc2l6ZSgpID09IG1fZXhwb3J0
U3ltYm9sVGFibGUtPnNpemUoKSk7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygpKQorICAgICAgICAgICAg
ICAgIEFTU0VSVChtX2V4cG9ydFN5bWJvbFRhYmxlLT5jb250YWlucyhleHAuZmllbGQuaW1wbCgp
KSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQobW9kZSA9PSBjb2RlQmxvY2stPm1vZGUo
KSk7CisgICAgICAgIG1fY29kZUJsb2Nrc1ttb2RlXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7
CisgICAgfQorCisgICAgcmV0dXJuIG1fY29kZUJsb2Nrc1ttb2RlXS5nZXQoKTsKK30KKwordm9p
ZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpCiB7CiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgV2FzbTo6UGxhbiBw
bGFuKCZ2bSwgc291cmNlLCBieXRlU2l6ZSk7CisKKyAgICBhdXRvKiBjb2RlQmxvY2sgPSBidWls
ZENvZGVCbG9jayh2bSwgZXhlYywgcGxhbik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgKTsKKworICAgIC8vIE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSBvYmpl
Y3QgaXMgcmV0dXJuZWQgd2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUgdmFsaWRhdGVkIEFzdC5t
b2R1bGUuCisgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6
OmNyZWF0ZSh2bSk7CisgICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4cG9ydHMoKSkgeworICAg
ICAgICBhdXRvIG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0
KE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgICAgIGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9M
b2NraW5nTmVjZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9m
ZnNldChvZmZzZXQpKSk7CisgICAgfQorCisgICAgbV9zb3VyY2VCdWZmZXIgPSBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKHNvdXJjZSwgYnl0ZVNpemUpOworICAgIG1fbW9kdWxlSW5mb3JtYXRpb24gPSBw
bGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIG1fZXhwb3J0U3ltYm9sVGFibGUuc2V0
KHZtLCB0aGlzLCBleHBvcnRTeW1ib2xUYWJsZSk7CisgICAgbV9jb2RlQmxvY2tzW2NvZGVCbG9j
ay0+bW9kZSgpXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSlNXZWJBc3Nl
bWJseU1vZHVsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC03OSwxOCArMTQzLDggQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXhwb3J0U3ltYm9sVGFi
bGUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX2NhbGxlZUNv
dW50ICogMjsgaSsrKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5jYWxsZWVz
KClbaV0pOwotCi0gICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZ0aGlzT2Jq
ZWN0LT5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlN
b2R1bGU6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkK
LXsKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiB0aGlzT2JqZWN0ID0gYml0d2lzZV9jYXN0PEpT
V2ViQXNzZW1ibHlNb2R1bGUqPigKLSAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAt
IE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5TW9kdWxlLCBtX3VuY29uZGl0aW9uYWxGaW5h
bGl6ZXIpKTsKLSAgICBmb3IgKGF1dG8gaXRlciA9IHRoaXNPYmplY3QtPm1fY2FsbExpbmtJbmZv
cy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+dmlzaXRXZWFrKCp0
aGlzT2JqZWN0LT52bSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2FzbTo6TWVt
b3J5OjpOdW1iZXJPZk1vZGVzOyArK2kpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fY29kZUJsb2Nrc1tpXSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4
IDdlMDUxZjU3MjI0MjQ2OGE2NjQxOTAzMWE4ODk1YzYxMzZlMzA4NzYuLmVjN2RkZTk5ZDVlMWQz
NGJiYmI5OGQ3YWU5ODdhM2EwMDU5Y2JkNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjksNyBAQAogCiAjaW5j
bHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgogI2luY2x1ZGUg
Ildhc21Gb3JtYXQuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CkBAIC0zNywxMyArMzcsMTggQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIFBsYW47Cit9CisK
IGNsYXNzIFN5bWJvbFRhYmxlOworY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeTsKIAogY2xhc3Mg
SlNXZWJBc3NlbWJseU1vZHVsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJs
aWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGlj
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVl
X3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJiwgQmFnPENhbGxMaW5rSW5mbz4mJiwgVmVj
dG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIFN5bWJvbFRhYmxlKiwgdW5zaWduZWQpOworICAg
IHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsK
IAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTU0LDY4ICs1OSwyNCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgfQotICAgIHVuc2lnbmVk
IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3dhc21FeGl0U3R1YnMuc2l6
ZSgpOyB9Ci0KLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKLSAgICB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9y
dENvdW50KCkpOwotICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhT
cGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2Fs
bGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtjYWxs
ZWVJbmRleF0uZ2V0KCk7Ci0gICAgfQotCi0gICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFj
ZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwotICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRl
eCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgcmV0
dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLmdldCgpOwotICAgIH0K
LQotICAgIHZvaWQgc2V0SlNFbnRyeXBvaW50Q2FsbGVlKFZNJiB2bSwgdW5zaWduZWQgY2FsbGVl
SW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSkKLSAgICB7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7Ci0gICAgICAgIGNhbGxlZXMo
KVtjYWxsZWVJbmRleF0uc2V0KHZtLCB0aGlzLCBjYWxsZWUpOwotICAgIH0KIAotICAgIHZvaWQg
c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNX
ZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgY2FsbGVlcygpW2NhbGxlZUlu
ZGV4ICsgbV9jYWxsZWVDb3VudF0uc2V0KHZtLCB0aGlzLCBjYWxsZWUpOwotICAgIH0KKyAgICAv
LyBSZXR1cm5zIHRoZSBjb2RlIGJsb2NrIHRoYXQgdGhpcyBtb2R1bGUgd2FzIG9yaWdpbmFsbHkg
Y29tcGlsZWQgZXhwZWN0aW5nIHRvIHVzZS4gVGhpcyB3b24ndCBuZWVkIHRvIHJlY29tcGlsZS4K
KyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVC
bG9ja3NbbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUoKV0uZ2V0KCk7IH0KKyAgICAv
LyBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBjb2RlIGJsb2NrIGZvciB0aGUgZ2l2ZW4gbWVtb3J5
LCBwb3NzaWJseSB0cmlnZ2VyaW5nIGEgcmVjb21waWxlLgorICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGNvZGVCbG9jayhWTSYsIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1lbW9y
eSopOwogCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVl
cygpKTsKLSAgICB9Citwcml2YXRlOgorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGJ1aWxk
Q29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpQbGFuJiwgc3RkOjpvcHRp
b25hbDxXYXNtOjpNZW1vcnk6Ok1vZGU+IG1vZGUgPSBzdGQ6Om51bGxvcHQpOwogCi1wcm90ZWN0
ZWQ6Ci0gICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVl
X3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJiwgQmFnPENhbGxMaW5rSW5mbz4mJiwgVmVj
dG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3ltYm9sVGFibGUqKTsKKyAgICBKU1dlYkFzc2VtYmx5
TW9kdWxlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEV4
ZWNTdGF0ZSosIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKTsKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotcHJpdmF0ZToKLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNl
dE9mQ2FsbGVlcygpCi0gICAgewotICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pPihzaXplb2YoSlNX
ZWJBc3NlbWJseU1vZHVsZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlv
blNpemUodW5zaWduZWQgbnVtQ2FsbGVlcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBvZmZzZXRP
ZkNhbGxlZXMoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICog
bnVtQ2FsbGVlcyAqIDI7Ci0gICAgfQotCi0gICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXpl
ciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeyAKLSAgICAgICAgdm9pZCBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOwotICAgIH07Ci0KLSAgICBVbmNvbmRp
dGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKKyAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IG1fc291cmNlQnVmZmVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1
bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKLSAgICBCYWc8Q2FsbExpbmtJbmZv
PiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9y
dFN5bWJvbFRhYmxlOwotICAgIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiBtX3dhc21FeGl0
U3R1YnM7Ci0gICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKKyAgICBXcml0ZUJhcnJpZXI8SlNX
ZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2tzW1dhc206Ok1lbW9yeTo6TnVtYmVyT2ZN
b2Rlc107CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3IuY3BwCmluZGV4IDc2M2RjNDk0Y2U1YTQ3ODJkNmU2ODQ3ZjgyMjU2NjFiMzViZGE3YWIuLjE0
MjUzYjFiYjZkY2Y4MmQxYTAzMjExMWVkOGVlMDY0OTA1ZWRlZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yLmNwcApAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBl
eAogICAgIHsKICAgICAgICAgLy8gQWx3YXlzIHN0YXJ0IHdpdGggYSBkdW1teSBNZW1vcnksIHNv
IHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVja2luZyBmb3IgYSBudWxscHRyIE1l
bW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVycy4KICAgICAgICAgV2FzbTo6
TWVtb3J5IG1lbW9yeTsKLSAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIFdURk1vdmUobWVtb3J5KSkpOworICAgICAgICBpbnN0
YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUo
KSwgV1RGTW92ZShtZW1vcnkpKSk7CiAgICAgfQogCiAgICAgLy8gTGV0IGZ1bmNzLCBtZW1vcmll
cyBhbmQgdGFibGVzIGJlIGluaXRpYWxseS1lbXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZhU2Ny
aXB0IG9iamVjdHMsIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJseS5U
YWJsZSBvYmplY3RzLCByZXNwZWN0aXZlbHkuCkBAIC0xOTQsOSArMTk0LDExIEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZShFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBB
U0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUg
bW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCiAg
ICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5XV0gdG8gaW1wb3J0cy4KLSAgICAg
ICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIG1lbW9yeSk7CisgICAgICAgICAgICBpbnN0
YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBtZW1vcnkpOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6
IHsKQEAgLTIzNSwxMiArMjM3LDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAg
IGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgewogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9y
dCgpKTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1v
cnkgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIGJvb2wgZmFpbGVkOwotICAgICAgICAgICAgV2Fz
bTo6TWVtb3J5IG1lbW9yeShtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1
bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpLCBmYWlsZWQpOwotICAgICAgICAgICAgaWYg
KGZhaWxlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsK
LSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sCisgICAgICAgICAgICBXYXNtOjpN
ZW1vcnkgbWVtb3J5OworICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5o
YXNSZXNlcnZlZE1lbW9yeSgpKQorICAgICAgICAgICAgICAgIG1lbW9yeSA9IFdURk1vdmUobW9k
dWxlSW5mb3JtYXRpb24ubWVtb3J5LnJlc2VydmVkTWVtb3J5KCkpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgYm9vbCBmYWlsZWQ7CisgICAgICAgICAgICAgICAgV2FzbTo6
TWVtb3J5IG1lbW9yeSh2bSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9k
dWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSwgZmFpbGVkKTsKKyAgICAgICAgICAgICAg
ICBpZiAoZmFpbGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Io
ZXhlYykpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnko
dm0sIGV4ZWMsCiAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUo
KSwgV1RGTW92ZShtZW1vcnkpKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVt
b3J5Q29uc3RydWN0b3IuY3BwCmluZGV4IDZjODg3YWY1OTdhODY1MzI5Y2ZiNDNmNWVkYjQ3YjQx
ZTY2MDllYzguLjY4Mjk5ZTA1Y2EyYTE1MGZjYzFhYWUxN2I1OTlkMGVlMzVhMjgyMWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0
YXRlKiBleGVjCiAgICAgfQogCiAgICAgYm9vbCBmYWlsZWQ7Ci0gICAgV2FzbTo6TWVtb3J5IG1l
bW9yeShpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBmYWlsZWQpOworICAgIFdh
c206Ok1lbW9yeSBtZW1vcnkodm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQs
IGZhaWxlZCk7CiAgICAgaWYgKGZhaWxlZCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggODEyOTU5MjNjN2Fk
Y2EyZGU2MGJlY2MxOTNmYWNlOTgyZjQ1ZmQyMi4uYTk0MGU4ZGZmMGNiZWE1ZmRmMDgyOTkwYTU3
YWQ4ZDhmZWNjMTcwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTgwLDMxICs4
MCw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxl
KEV4ZWNTdGF0ZSogc3RhdGUsIFN0cnVjdHVyZSoKICAgICB1aW50OF90KiBiYXNlID0gZ2V0V2Fz
bUJ1ZmZlckZyb21WYWx1ZShzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBi
eXRlU2l6ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIFdh
c206OlBsYW4gcGxhbigmdm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7Ci0gICAgLy8g
T24gZmFpbHVyZSwgYSBuZXcgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIGlzIHRocm93bi4KLSAg
ICBwbGFuLnJ1bigpOwotICAgIGlmIChwbGFuLmZhaWxlZCgpKQotICAgICAgICByZXR1cm4gdGhy
b3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9y
KHN0YXRlLCB2bSwgcGxhbi5lcnJvck1lc3NhZ2UoKSkpOwotCi0gICAgLy8gT24gc3VjY2Vzcywg
YSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIFtbTW9kdWxl
XV0gc2V0IHRvIHRoZSB2YWxpZGF0ZWQgQXN0Lm1vZHVsZS4KLQotICAgIC8vIFRoZSBleHBvcnQg
c3ltYm9sIHRhYmxlIGlzIHRoZSBzYW1lIGZvciBhbGwgSW5zdGFuY2VzIG9mIGEgTW9kdWxlLgot
ICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUo
dm0pOwotICAgIGZvciAoYXV0byYgZXhwIDogcGxhbi5leHBvcnRzKCkpIHsKLSAgICAgICAgYXV0
byBvZmZzZXQgPSBleHBvcnRTeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xvY2tp
bmdOZWNlc3NhcnkpOwotICAgICAgICBleHBvcnRTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05l
Y2Vzc2FyeSwgZXhwLmZpZWxkLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zm
c2V0KSkpOwotICAgIH0KLQotICAgIC8vIE9ubHkgd2FzbS1pbnRlcm5hbCBmdW5jdGlvbnMgaGF2
ZSBhIGNhbGxlZSwgc3R1YnMgdG8gSlMgZG8gbm90LgotICAgIHVuc2lnbmVkIGNhbGxlZUNvdW50
ID0gcGxhbi5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKTsKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxl
KiByZXN1bHQgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgcGxh
bi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKSwgcGxhbi50YWtlQ2FsbExpbmtJbmZvcygpLCBwbGFu
LnRha2VXYXNtRXhpdFN0dWJzKCksIGV4cG9ydFN5bWJvbFRhYmxlLCBjYWxsZWVDb3VudCk7Ci0g
ICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhzdGF0ZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0
KCksIAotICAgICAgICBbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBv
aW50Q2FsbGVlKSB7Ci0gICAgICAgICAgICByZXN1bHQtPnNldEpTRW50cnlwb2ludENhbGxlZSh2
bSwgY2FsbGVlSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgICAgICByZXN1bHQt
PnNldFdhc21FbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRD
YWxsZWUpOwotICAgICAgICB9KTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgc3RhdGUsIHN0cnVjdHVyZSwgYmFzZSArIGJ5
dGVPZmZzZXQsIGJ5dGVTaXplKTsKIH0KIAogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvciog
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwCmluZGV4IGYxN2YyOWRmOTg1MGMzYzhmNDY0YTJmZTE2MDZmNzRkYWNlMDAy
M2EuLmYzMTA3ODJiZmIzNjdhNmQzY2M1ZDI5NWExNWFlOWMyYzE4N2QwMjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5jcHAKQEAgLTkyLDEwICs5MiwxMSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpsaW5rKEV4ZWNTdGF0ZSogc3RhdGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdAogICAg
IGF1dG8qIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKICAg
ICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBpbnN0YW5jZS0+bW9kdWxlKCk7CisgICAg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gaW5zdGFuY2UtPmNvZGVCbG9jaygp
OwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9
IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKIAogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRT
eW1ib2xUYWJsZSA9IG1vZHVsZS0+ZXhwb3J0U3ltYm9sVGFibGUoKTsKLSAgICB1bnNpZ25lZCBm
dW5jdGlvbkltcG9ydENvdW50ID0gbW9kdWxlLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CisgICAg
dW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCA9IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRD
b3VudCgpOwogCiAgICAgLy8gRklYTUUgd2lyZSB1cCB0aGUgaW1wb3J0cy4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTExOAogCkBAIC0xMTYsOCArMTE3LDggQEAg
dm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3QKICAgICAgICAgICAgIC8vICAgICBhLiBMZXQgZnVuYyBi
ZSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0IGNyZWF0ZWQgZnJvbSBjLgogICAg
ICAgICAgICAgLy8gICAgIGIuIEFwcGVuZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgLy8g
ICAgIGMuIFJldHVybiBmdW5jLgotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNF
bnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxl
ZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAgIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAg
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53
YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7
CiAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVs
ZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwog
ICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBXYXNtOjpTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZ2bSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIGV4cC5maWVs
ZC5zdHJpbmcoKSwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRD
YWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKQEAgLTE3OCwxMiArMTc5LDEyIEBAIHZvaWQgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0ZSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0CiAgICAgICAgIC8vIFRoZSBzdGFydCBmdW5jdGlvbiBtdXN0IG5vdCB0YWtl
IGFueSBhcmd1bWVudHMgb3IgcmV0dXJuIGFueXRoaW5nLiBUaGlzIGlzIGVuZm9yY2VkIGJ5IHRo
ZSBwYXJzZXIuCiAgICAgICAgIEFTU0VSVCghc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwog
ICAgICAgICBBU1NFUlQoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPT0gV2FzbTo6Vm9pZCk7Ci0g
ICAgICAgIGlmIChzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1vZHVsZS0+ZnVuY3Rpb25JbXBv
cnRDb3VudCgpKSB7CisgICAgICAgIGlmIChzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA8IGNvZGVC
bG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7CiAgICAgICAgICAgICBKU0NlbGwqIHN0YXJ0
RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3Bh
Y2UpLT5nZXQoKTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIHN0
YXJ0RnVuY3Rpb24pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSlNXZWJBc3NlbWJs
eUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAg
ICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT53
YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbklu
ZGV4U3BhY2UpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50
Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwogICAg
ICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCks
ICJzdGFydCIsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2Fs
bGVlLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZt
LCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgIH0KQEAgLTIwNyw2ICsyMDgsNyBAQCBKU1ZhbHVl
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIHN0YXRlKQogCiAg
ICAgewogICAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBtX2luc3RhbmNlLT5t
b2R1bGUoKTsKKyAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gbV9p
bnN0YW5jZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKICAg
ICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IG1faW5zdGFuY2UtPnRhYmxlKCk7CiAg
ICAgICAgIGZvciAoY29uc3QgV2FzbTo6RWxlbWVudCYgZWxlbWVudCA6IG1vZHVsZUluZm9ybWF0
aW9uLmVsZW1lbnRzKSB7CkBAIC0yMjksMTMgKzIzMSwxMyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIHN0YXRlKQogICAgICAgICAgICAgICAg
IC8vIGZvciB0aGUgaW1wb3J0LgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKICAgICAgICAgICAgICAgICB1aW50MzJfdCBm
dW5jdGlvbkluZGV4ID0gZWxlbWVudC5mdW5jdGlvbkluZGljZXNbaV07Ci0gICAgICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBtb2R1bGUtPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwgY29kZUJsb2NrLT5mdW5jdGlvbklt
cG9ydENvdW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93Vk1SYW5nZUVycm9yKHN0YXRlLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJFbGVtZW50IGlzIHNldHRpbmcgdGhlIHRhYmxlIHZhbHVlIHdpdGgg
YW4gaW1wb3J0LiBUaGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIEZJWE1FLiIpKSk7CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNF
bnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT53YXNtRW50cnlwb2ludENhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICAgICAg
SlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0Vu
dHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAg
ICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0g
Y29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNp
Z25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJ
bmRleCk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNheSB3ZSBleHBvcnQgbG9jYWwgZnVu
Y3Rpb24gImZvbyIgYXQgZnVuY2l0b24gaW5kZXggMC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0RhdGFMb2cuaCBiL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuaAppbmRleCAxM2Y5MTNiZDVi
YWU2MDI5MWRkNTM4ZjdmYTU4Mzg4Yzg4ZWZiYzkwLi4wYjA4NDg4YjIwZTUwMzFjMDA2Njk5YWU2
MGNkZWUyNGEwYzk3YmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgKKysr
IGIvU291cmNlL1dURi93dGYvRGF0YUxvZy5oCkBAIC00OCwxMyArNDgsMjkgQEAgdm9pZCBkYXRh
TG9nKGNvbnN0IFR5cGVzJi4uLiB2YWx1ZXMpCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4K
IHZvaWQgZGF0YUxvZ0xuKGNvbnN0IFR5cGVzJi4uLiB2YWx1ZXMpCiB7Ci0gICAgZGF0YUZpbGUo
KS5wcmludCh2YWx1ZXMuLi4sICJcbiIpOworICAgIGRhdGFMb2codmFsdWVzLi4uLCAiXG4iKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+Cit2b2lkIGRhdGFMb2dJZihib29sIHNo
b3VsZExvZywgY29uc3QgVHlwZXMmLi4uIHZhbHVlcykKK3sKKyAgICBpZiAoc2hvdWxkTG9nKQor
ICAgICAgICBkYXRhTG9nKHZhbHVlcy4uLik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFR5
cGVzPgordm9pZCBkYXRhTG9nTG5JZihib29sIHNob3VsZExvZywgY29uc3QgVHlwZXMmLi4uIHZh
bHVlcykKK3sKKyAgICBpZiAoc2hvdWxkTG9nKQorICAgICAgICBkYXRhTG9nTG4odmFsdWVzLi4u
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6ZGF0YUxvZzsKIHVzaW5n
IFdURjo6ZGF0YUxvZ0xuOwordXNpbmcgV1RGOjpkYXRhTG9nSWY7Cit1c2luZyBXVEY6OmRhdGFM
b2dMbklmOwogdXNpbmcgV1RGOjpkYXRhTG9nRjsKIHVzaW5nIFdURjo6ZGF0YUxvZ0ZTdHJpbmc7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZi5oIGIvU291cmNlL1dURi93dGYvUmVm
LmgKaW5kZXggYjNhYzRmYmM1YmE1MDlhNTNjMjQxMGU0YmUyODQwYzRmMGI5NzUyYS4uODMwOTY0
ZmViZWE2NjFhZDc3ZDc2NmM0OGQ2NDIxZDk5MmM2NTBiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvUmVmLmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmLmgKQEAgLTEzNyw2ICsxMzcsNyBA
QCBwdWJsaWM6CiAgICAgVCogcHRyKCkgY29uc3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4gbV9w
dHI7IH0KICAgICBUJiBnZXQoKSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiAqbV9wdHI7
IH0KICAgICBvcGVyYXRvciBUJigpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuICptX3B0
cjsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4g
ISptX3B0cjsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUmVmPFQ+IHJlcGxhY2UoUmVm
PFU+JiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL3RyYXAtbG9hZC0yLmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3Rz
L3RyYXAtbG9hZC0yLmpzCmluZGV4IGRmZTkxN2NlZTJmOWM4ZjE3M2YyMjIyODExODRhOWU2OGVl
ZGNkNmIuLjZiYjVhN2UzMmUxY2QyZGExM2ZlMWI3NGRhMmI2ZmJmNTdiNzdjMTggMTAwNjQ0Ci0t
LSBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy90cmFwLWxvYWQtMi5qcworKysgYi9KU1Rl
c3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdHJhcC1sb2FkLTIuanMKQEAgLTQsMjEgKzQsNiBAQCBp
bXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJwogY29uc3QgcGFnZVNpemUgPSA2
NCAqIDEwMjQ7CiBjb25zdCBudW1QYWdlcyA9IDEwOwogCi1jb25zdCBidWlsZGVyID0gKG5ldyBC
dWlsZGVyKCkpCi0gICAgLlR5cGUoKS5FbmQoKQotICAgIC5JbXBvcnQoKQotICAgICAgICAuTWVt
b3J5KCJhIiwgImIiLCB7aW5pdGlhbDogbnVtUGFnZXN9KQotICAgIC5FbmQoKQotICAgIC5GdW5j
dGlvbigpLkVuZCgpCi0gICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJmb28iKS5FbmQoKQotICAgIC5D
b2RlKCkKLSAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbImkzMiJdLCByZXQ6ICJp
MzIifSkKLSAgICAgICAgICAgIC5HZXRMb2NhbCgwKQotICAgICAgICAgICAgLkkzMkxvYWQoMiwg
MCkKLSAgICAgICAgICAgIC5SZXR1cm4oKQotICAgICAgICAuRW5kKCkKLSAgICAuRW5kKCk7Ci0K
IGZ1bmN0aW9uIHdhc21GcmFtZUNvdW50RnJvbUVycm9yKGUpIHsKICAgICBsZXQgc3RhY2tGcmFt
ZXMgPSBlLnN0YWNrLnNwbGl0KCJcbiIpLmZpbHRlcigocykgPT4gcy5pbmRleE9mKCI8d2FzbT5A
W3dhc20gY29kZV0iKSAhPT0gLTEpOwogICAgIHJldHVybiBzdGFja0ZyYW1lcy5sZW5ndGg7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303172</attachid>
            <date>2017-03-01 21:08:19 -0800</date>
            <delta_ts>2017-03-02 09:24:51 -0800</delta_ts>
            <desc>passes tests</desc>
            <filename>bug-162693-20170301210818.patch</filename>
            <type>text/plain</type>
            <size>118243</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ODFlYWQzNTM4YmU0Yjc0YzA1ZjlmMDU4Y2UzYTRiNTcyNjgxYTU2Li4zNDRlMmI3ZmExOGRkZGYx
ZGYyNjQ4MWRlYzM0YjhmMzQ1Y2EyNjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAxNy0wMi0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBXQVNNIHNob3VsZCBzdXBwb3J0IGZhc3RlciBsb2Fkcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIpOgorICAgICAgICAq
IGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoanNjbWFpbik6
CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQ
cmVwYXJlUG9pbnRlcik6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmltcG9ydEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbjo6aGFzTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dh
c21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1tYXBCeXRlcyk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjphdmFpbGFibGVGYXN0TWVtb3JpZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
ZW1vcnk6OnRyeUdldEZhc3RNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OnJl
bGVhc2VGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6On5NZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Omdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmR1bXApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1ha2VTdHJpbmcpOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6TWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlv
bi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZv
cm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnJlc2VydmVkTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Om1vZGUpOgorICAgICAgICAq
IHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6
CisgICAgICAgICogd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZWdpc3Rl
ckNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp1bnJlZ2lzdGVyQ29kZSk6CisgICAgICAgIChK
U0M6Oldhc206OmZhc3RNZW1vcnlFbmFibGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5hYmxl
RmFzdE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtVHJhcFNpZ25hbEhhbmRsZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxl
ZS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJs
eU1lbW9yeSk6CisKIDIwMTctMDItMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHN0ZDo6dHVwbGVzIGFz
IGtleXMgaW4gSGFzaE1hcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjMTIzYjA2
YWZkOTVhOTk2YzdlYjczYzlhN2U1Y2FjYjFkZWM0ZTJlLi4zNWRjMTdhMWNlOTk2NTNhNzA5NDM5
OGM4ZmIwODE2YmFmNmFhZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMy
MCw2ICsxMzIwLDEwIEBACiAJCTUzNTU1NzE2MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1
NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLzsgfTsKIAkJNTM3MEI0RjUx
QkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTM3MEI0RjMxQkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UuY3BwICovOyB9OwogCQk1MzcwQjRGNjFCRjI2MjA1MDA1QzQwRkMgLyog
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3MEI0RjQxQkYyNUVBMjAwNUM0
MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCAqLzsg
fTsKKwkJNTM4MUI5MzcxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM4MUI5
MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwICovOyB9Owor
CQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM4MUI5MzgxRTYw
RTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLzsgfTsKKwkJNTM4MUI5
NDAxRTY1REZFQjAwOTBGNzk0IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODFCOTNGMUU2NURGRUIwMDkw
Rjc5NCAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi87IH07CisJCTUzODNBQTMwMUU2NUU4
QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAv
KiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLzsgfTsKIAkJNTM5MTdFN0IxQjc5MDZGQTAw
MEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzkxN0U3QTFCNzkw
NkU0MDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMu
aCAqLzsgfTsKIAkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlGQjhCOTFD
OTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLzsgfTsKIAkJNTNCMEJFMzQxRTU2
MUFDOTAwQThGQzI5IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNCMEJFMzMxRTU2MUFDOTAwQThGQzI5
IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwICovOyB9OwpAQCAtMzc3Niw2ICszNzgwLDEw
IEBACiAJCTUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21NZW1vcnkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzcwQjRGMzFCRjI1RUEyMDA1QzQwRkMgLyogQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM3MEI0RjQxQkYyNUVB
MjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzgxQjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM4MUI5MzgxRTYwRTk3RDAwOTBG
Nzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MzgxQjkzRjFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzODNBQTJGMUU2NUU4QTEwMEE1
MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOyBwYXRoID0ganMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
OTE3RTdBMUI3OTA2RTQwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTgzMUI3OTFD
QjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRBcnJheVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0
aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsK
QEAgLTYyMDEsNiArNjIwOSw4IEBACiAJCQkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdh
c21Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBX
YXNtTW9kdWxlUGFyc2VyLmggKi8sCiAJCQkJQURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdh
c21QYWdlQ291bnQuY3BwICovLAorCQkJCTUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNt
RmF1bHRTaWduYWxIYW5kbGVyLmNwcCAqLywKKwkJCQk1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQg
LyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oICovLAogCQkJCTc5Qjc1OTczMURGQTRDNjAwMDUy
MTc0QyAvKiBXYXNtUGFnZUNvdW50LmggKi8sCiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2
IC8qIFdhc21QYXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2Fz
bVBsYW4uY3BwICovLApAQCAtNzc4OCw2ICs3Nzk4LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJ
CTc5RTQyM0UwMURFRTY1MzIwMDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcCAqLywK
IAkJCQk3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5oICov
LAorCQkJCTUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmNwcCAqLywKKwkJCQk1MzgxQjkzRjFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5oICovLAogCQkJCUFEMkZDQkE2MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yLmNwcCAqLywKIAkJCQlBRDJGQ0JBNzFEQjU4REE0MDBCM0U3MzYgLyog
SlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oICovLAogCQkJCTc5NkZCNDM5MURGRjhDM0YwMDM5
Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovLApAQCAtNzkyNyw2ICs3OTM5LDcgQEAK
IAkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCMzg3OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2Fs
bGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzODFCOTQwMUU2NURGRUIwMDkw
Rjc5NCAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04MjQ2LDYgKzgyNTksNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFE
QTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
RDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkUxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJGMTU4RDE5QjdBNTMxMDA2OTVERDAgLyogREZH
QmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0QwMDE5QURBNDEwMDA2
QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAzNiw2ICsx
MDA1MCw3IEBACiAJCQkJMEZDODQxNjgxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlw
ZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1NCAv
KiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCRDFC
NzFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTUzODFCOTM3MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzAwQjdCMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRl
Z2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjg5OEYzMTFC
Mjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZDOTdGM0QxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRh
dGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDQzNyw2ICsx
MDQ1Miw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVy
QVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjEzNzU3MUJCMTFFRjkwMENENTEwMCAvKiBN
YWNyb0Fzc2VtYmxlckFSTTY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjkwMDlDMTc5NzZD
NjAwMDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUzODNBQTMwMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNkRCN0VDMUQ2MTdEMTEwMENEQkY4RSAvKiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU2OEM2MzgxQjkwREUwQjAwNDJC
Q0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0
QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5r
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKaW5kZXggZGU0
OGU2MmRkYWI4ZWZhZjhiZTMxODI4NzFiZThkNzA5OWIxN2M3Zi4uNTQ2ZTE0YzkwNDhlOGQzMzhh
NTgyNjQ3Y2Y3Y2FkZjlkZDM0MWNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1
bmtzLmNwcApAQCAtODIsNiArODIsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5r
czo6Y3RpU3R1YihWTSogdm0sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKICAgICByZXR1cm4g
ZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1
bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ1RJU3R1Yk1hcDo6aXRlcmF0b3IgZW50cnkg
PSBtX2N0aVN0dWJNYXAuZmluZChnZW5lcmF0b3IpOworICAgIGlmIChlbnRyeSA9PSBtX2N0aVN0
dWJNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAg
ICByZXR1cm4gZW50cnktPnZhbHVlOworfQorCiB2b2lkIEpJVFRodW5rczo6ZmluYWxpemUoSGFu
ZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCopCiB7CiAgICAgYXV0byogbmF0aXZlRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKaW5kZXggYWRkY2YyMzBjMzQ1ZDQy
NzFiNjM3ZjA4Yjk0YzQxNmEzZWQxODJhNC4uN2UwNmU3MTYyMzUzYTBiNzNmM2JjMDJlNTQyZjcz
YjgyZjY2ZTEwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVu
a3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCkBAIC01OCw2
ICs1OCw3IEBAIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlVGFp
bENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNKik7ICAgIAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGN0aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvcik7CiAKICAgICBOYXRpdmVFeGVjdXRh
YmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9u
IGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGhvc3RGdW5jdGlvblN0dWIoVk0qLCBOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29u
c3RydWN0b3IsIFRodW5rR2VuZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0
dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggYWVkZjQy
ZTE3Y2MyYmRlMDE0YWQ1YjhkNjI4NjIyYWVjMTQ1ZTdlMi4uMjRkMmJhZWFlN2NhNGIyNDZjN2Ri
Y2UwNzY0NTgyZjY0MzQ5MGQxYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTczLDYgKzczLDcg
QEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgog
I2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CkBAIC0zNzY2LDYgKzM3NjcsNyBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOwogICAgIHN0YXJ0VGltZW91dFRocmVhZElmTmVlZGVkKCk7CisgICAg
SlNDOjpXYXNtOjplbmFibGVGYXN0TWVtb3J5KCk7CiAKICAgICBpbnQgcmVzdWx0OwogICAgIHJl
c3VsdCA9IHJ1bkpTQygKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRl
eCBjNGJmOGZhZGU4YWFlMzEwZjJiNmEyNzcxMTMxYmJlZGEyMWIyY2JjLi5jOTQ0NDgwNzA4YWY1
ZGNlM2QyZjZlNTM4ZTgxZTQ3N2Q3Mzk5ZjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCkBAIC00MjYsNiArNDI2LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRp
b25TdHJpbmc7CiAgICAgXAogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHksIHRydWUsIE5vcm1h
bCwgIkV4cG9zZSB0aGUgV2ViQXNzZW1ibHkgZ2xvYmFsIG9iamVjdC4iKSBcCiAgICAgdihib29s
LCBzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwg
dGhlIE1lbW9yeSBvYmplY3Qgd29uJ3QgbW1hcCB0aGUgZnVsbCAnbWF4aW11bScgcmFuZ2UgYW5k
IGluc3RlYWQgd2lsbCBhbGxvY2F0ZSB0aGUgbWluaW11bSByZXF1aXJlZCBhbW91bnQuIikgXAor
ICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5LCB0cnVlLCBOb3JtYWwsICJJZiB0
cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRoIGEgc2ln
bmFsIGhhbmRsZXIgdG8gYm91bmRzIGNoZWNrIHdhc20gbWVtb3J5LiIpCisKIAogZW51bSBPcHRp
b25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAppbmRleCBhNTBmOWRiMGEwYzMzZTkwNmRjNmVjMGViZWRhNjcwN2VhNGE5ZmMzLi5h
MDM5ZGRiMDBmZmIwY2MyYmEyZjc1NzljNWYxMzU3ZjI0YjI0M2QzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yNDAsNiArMjQwLDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5
cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICB3ZWJB
c3NlbWJseUNhbGxlZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWJBc3NlbWJseVRvSlND
YWxsZWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0
cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWJBc3NlbWJseVRvSlNDYWxsZWUuc2V0KCp0
aGlzLCBXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmNyZWF0ZSgqdGhpcywgd2ViQXNzZW1ibHlUb0pT
Q2FsbGVlU3RydWN0dXJlLmdldCgpKSk7CiAjZW5kaWYKICAgICBtb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAppbmRleCA3MzJiMjZlNGU0ZjMwMWJhM2IwYzFlNzMwODNhZjkzYjQ4ODgwYjIwLi4xYTQxZTQ0
ZjZhM2ViZTYwYTM0YTZjNDhiMWZiYjU5Yzk4MWY2N2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKQEAgLTMzMyw2ICszMzMsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q2FsbGVlU3RydWN0dXJlOwog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVjdHVyZTsKKyAg
ICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBT
dHJvbmc8SlNDZWxsPiB3ZWJBc3NlbWJseVRvSlNDYWxsZWU7CiAjZW5kaWYKICAgICBTdHJvbmc8
U3RydWN0dXJlPiBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zMmM1OTQ1MzdmYjU2YzYyYTI3YmVjODMzNGZkZjZhNWRhNzk4MTAzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNp
bmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCisjaW5j
bHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIK
KyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKKworY2xhc3MgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlND
ZWxsIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGljIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IG93bmVyLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpX
YXNtRXhpdFN0dWJzPiYmIGV4aXRTdHVicywgV2FzbTo6TWVtb3J5OjpNb2RlIG1vZGUsIHVuc2ln
bmVkIGNhbGxlZUNvdW50KQorICAgIHsKKyAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2Nh
dGlvblNpemUoY2FsbGVlQ291bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIs
IHN0ZDo6Zm9yd2FyZDxCYWc8Q2FsbExpbmtJbmZvPj4oY2FsbExpbmtJbmZvcyksIHN0ZDo6Zm9y
d2FyZDxWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4+KGV4aXRTdHVicyksIG1vZGUsIGNhbGxl
ZUNvdW50KTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7
IHJldHVybiBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpOyB9CisgICAgV2FzbTo6TWVtb3J5OjpNb2Rl
IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQorCisgICAgSlNXZWJB
c3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1
bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKKyAgICAgICAg
dW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9y
dENvdW50KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVD
b3VudCk7CisgICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVlSW5kZXhdLmdldCgpOworICAg
IH0KKworICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRD
b3VudCgpKTsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3Bh
Y2UgLSBmdW5jdGlvbkltcG9ydENvdW50KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxl
ZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7CisgICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVl
SW5kZXggKyBtX2NhbGxlZUNvdW50XS5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEpTRW50
cnlwb2ludENhbGxlZShWTSYgdm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiBjYWxsZWUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRl
eCA8IG1fY2FsbGVlQ291bnQpOworICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXhdLnNldCh2
bSwgdGhpcywgY2FsbGVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFdhc21FbnRyeXBvaW50Q2Fs
bGVlKFZNJiB2bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNh
bGxlZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxs
ZWVDb3VudCk7CisgICAgICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRd
LnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICB9CisKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJB
c3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEJhZzxDYWxs
TGlua0luZm8+JiYsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmLCBXYXNtOjpNZW1vcnk6
Ok1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwor
ICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkNhbGxl
ZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KT4oc2l6ZW9mKEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2spKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXpl
KHVuc2lnbmVkIG51bUNhbGxlZXMpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0T2ZDYWxs
ZWVzKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIG51bUNh
bGxlZXMgKiAyOworICAgIH0KKworICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBw
dWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICAgICAgdm9pZCBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOworICAgIH07CisKKyAgICBXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CisgICAgVW5jb25kaXRpb25hbEZpbmFsaXpl
ciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxs
TGlua0luZm9zOworICAgIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiBtX3dhc21FeGl0U3R1
YnM7CisgICAgV2FzbTo6TWVtb3J5OjpNb2RlIG1fbW9kZTsKKyAgICB1bnNpZ25lZCBtX2NhbGxl
ZUNvdW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAKaW5kZXggMmZmMzA1MDFmNjZmMWFjZGFmNWRkOGY3OGY1YTUyMjllYWViOGI5MS4u
ZjQyMjJmN2RjYzIwNDlkMDZlNmUwOGU1NjNlNWVhYjVhYzcwMTQwNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMjU5LDcgKzI1
OSw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwCiAgICAgZm9yIChjb25zdCBQaW5uZWRTaXpl
UmVnaXN0ZXJJbmZvJiByZWdJbmZvIDogcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzKQogICAgICAg
ICBtX3Byb2MucGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIpOwogCi0gICAgaWYgKGlu
Zm8uaGFzTWVtb3J5KCkpIHsKKyAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9j
LnNldFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgcGlubmVkR1BSLCB1bnNpZ25lZCkgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOwpAQCAtMjgyLDggKzI4
Miw4IEBAIHN0YXRpYyBNZW1vcnlCYXNlQW5kU2l6ZSBnZXRNZW1vcnlCYXNlQW5kU2l6ZShWTSYg
dm0sIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlCiB7CiAgICAgVmFsdWUqIG1lbW9yeU9iamVj
dCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIE9yaWdpbigpLCBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1l
bW9yeSgpKTsKIAotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHZtLnRvcEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZS0+bWVtb3J5KCktPm1lbW9yeSgpLT5tZW1vcnkoKSkpID09IHNpemVv
Zih2b2lkKiksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihkZWNsdHlwZSh2bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UtPm1lbW9yeSgp
LT5tZW1vcnkoKS0+c2l6ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVz
IG9uIHRoaXMgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHZtLnRv
cEpTV2ViQXNzZW1ibHlJbnN0YW5jZS0+bWVtb3J5KCktPm1lbW9yeSgpLm1lbW9yeSgpKSkgPT0g
c2l6ZW9mKHZvaWQqKSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOworICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZS0+bWVt
b3J5KCktPm1lbW9yeSgpLnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJl
bGllcyBvbiB0aGlzIHNpemUiKTsKICAgICBNZW1vcnlCYXNlQW5kU2l6ZSByZXN1bHQ7CiAgICAg
cmVzdWx0LmJhc2UgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBPcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpvZmZzZXRPZk1lbW9yeSgpKTsKICAgICByZXN1bHQuc2l6ZSA9IGJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSk7CkBAIC00NTQsOSArNDU0LDEyIEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlCiAKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6
ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMy
X3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7Ci0gICAgQVNTRVJUKG1fbWVt
b3J5QmFzZUdQUiAmJiBtX21lbW9yeVNpemVHUFIpOwotICAgIEFTU0VSVChzaXplT2ZPcGVyYXRp
b24gKyBvZmZzZXQgPiBvZmZzZXQpOwotICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2Fz
bUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6
ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgQVNTRVJUKG1fbWVtb3J5
QmFzZUdQUik7CisgICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09IE1lbW9yeTo6TW9kZTo6
Qm91bmRzQ2hlY2tpbmcpIHsKKyAgICAgICAgQVNTRVJUKG1fbWVtb3J5U2l6ZUdQUik7CisgICAg
ICAgIEFTU0VSVChzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgPiBvZmZzZXQpOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIE9y
aWdpbigpLCBwb2ludGVyLCBtX21lbW9yeVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNl
dCAtIDEpOworICAgIH0KICAgICBwb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBaRXh0MzIsIE9yaWdpbigpLCBwb2ludGVyKTsKICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQWRkcmVzc1ZhbHVlPihtX3Byb2MsIE9yaWdpbigp
LCBwb2ludGVyLCBtX21lbW9yeUJhc2VHUFIpOwogfQpAQCAtNDg4LDY4ICs0OTEsNzMgQEAgaW5s
aW5lIHVpbnQzMl90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBlIG9wKQogCiBpbmxpbmUgVmFsdWUq
IEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwg
RXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KQogeworICAgIGF1dG8gbWFr
ZUtpbmQgPSBbJl0gKEIzOjpPcGNvZGUgb3Bjb2RlKSAtPiBCMzo6S2luZCB7CisgICAgICAgIGlm
IChtX2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnk6OlNpZ25hbGluZykKKyAgICAgICAgICAg
IHJldHVybiB0cmFwcGluZyhvcGNvZGUpOworICAgICAgICByZXR1cm4gb3Bjb2RlOworICAgIH07
CiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7Ci0g
ICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQ4Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2Fk
OFMpLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkOFM6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkOFMsIG9yaWdpbiwgcG9pbnRlciwg
b2Zmc2V0KTsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkOFMpLCBvcmlnaW4sIHBvaW50ZXIs
IG9mZnNldCk7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJMzJMb2FkOFU6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIG1ha2VLaW5kKExvYWQ4WiksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAg
ICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VTogewotICAgICAgICBWYWx1ZSog
dmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQ4Wiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExv
YWQ4WiksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4sIHZhbHVlKTsK
ICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6IHsKLSAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDE2
Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkMTZTKSwgb3Jp
Z2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgIH0KICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExv
YWQxNlM6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkMTZTLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7
CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZDE2UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0
KTsKICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgU0V4dDMyLCBvcmlnaW4sIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6
OkkzMkxvYWQ6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgbWFrZUtpbmQoTG9hZCksIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAg
ICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOiB7Ci0gICAgICAgIFZhbHVl
KiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgVmFsdWUqIHZh
bHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtl
S2luZChMb2FkKSwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmln
aW4sIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6IHsK
LSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAg
ICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIG1ha2VLaW5kKExvYWQpLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQp
OwogICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBTRXh0MzIsIG9yaWdpbiwgdmFsdWUpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwor
ICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBtYWtlS2luZChMb2FkKSwgSW50NjQsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAg
ICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6IHsKLSAgICAgICAgcmV0dXJuIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgRmxvYXQs
IG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZCksIEZsb2F0LCBv
cmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpG
NjRMb2FkOiB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIERvdWJsZSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwor
ICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBtYWtlS2luZChMb2FkKSwgRG91YmxlLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAg
ICAgfQogCiAgICAgLy8gRklYTUU6IEIzIGRvZXNuJ3Qgc3VwcG9ydCBMb2FkMTZaIHlldC4gV2Ug
c2hvdWxkIGxvd2VyIHRvIHRoYXQgdmFsdWUgd2hlbgogICAgIC8vIGl0J3MgYWRkZWQuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4ODQKICAgICBjYXNlIExvYWRP
cFR5cGU6OkkzMkxvYWQxNlU6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkMTZTLCBvcmlnaW4sIHBvaW50
ZXIsIG9mZnNldCk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZDE2UyksIG9yaWdpbiwgcG9p
bnRlciwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQml0QW5kLCBPcmlnaW4oKSwgdmFsdWUsCiAgICAgICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCks
IDB4MDAwMGZmZmYpKTsKICAgICB9CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOiB7
Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZDE2Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAg
ICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIG1ha2VLaW5kKExvYWQxNlMpLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAg
ICAgIFZhbHVlKiBwYXJ0aWFsUmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBCaXRBbmQsIE9yaWdpbigpLCB2YWx1ZSwKICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgMHgw
MDAwZmZmZikpOwogCkBAIC02MjUsMTMgKzYzMywxOCBAQCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9m
U3RvcmVPcChTdG9yZU9wVHlwZSBvcCkKIAogaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1p
dFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIE9yaWdpbiBvcmlnaW4sIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpCiB7CisgICAgYXV0
byBtYWtlS2luZCA9IFsmXSAoQjM6Ok9wY29kZSBvcGNvZGUpIC0+IEIzOjpLaW5kIHsKKyAgICAg
ICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09IE1lbW9yeTo6U2lnbmFsaW5nKQorICAgICAg
ICAgICAgcmV0dXJuIHRyYXBwaW5nKG9wY29kZSk7CisgICAgICAgIHJldHVybiBvcGNvZGU7Cisg
ICAgfTsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4
OgogICAgICAgICB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgVHJ1bmMsIG9yaWdpbiwgdmFsdWUpOwogICAgICAgICBGQUxMVEhST1VHSDsKIAogICAgIGNh
c2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTgsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIs
IG9mZnNldCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgbWFrZUtpbmQoU3RvcmU4KSwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0
KTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUxNjoK
QEAgLTYzOSw3ICs2NTIsNyBAQCBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVP
cChTdG9yZU9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhwcmVzc2lvbgogICAgICAgICBGQUxM
VEhST1VHSDsKIAogICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6Ci0gICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUxNiwgb3Jp
Z2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChTdG9yZTE2KSwgb3JpZ2luLCB2
YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBTdG9y
ZU9wVHlwZTo6STY0U3RvcmUzMjoKQEAgLTY1MCw3ICs2NjMsNyBAQCBpbmxpbmUgdm9pZCBCM0lS
R2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhw
cmVzc2lvbgogICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlOgogICAgIGNhc2UgU3RvcmVP
cFR5cGU6OkYzMlN0b3JlOgogICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgotICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBv
cmlnaW4sIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKFN0b3JlKSwgb3JpZ2luLCB2
YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAppbmRleCBkNzkwMTRmMjdmYWY5MDk2OGYyMWY1
ZjliNGQ3YjhjYzc4MTAzOWUzLi5lNjA0YWIyZDQ3MDkwYTdlOTQzMTlhMTJjYjg3MWU0ZTc0Mzcy
NzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNp
bmNsdWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRl
ICJXYXNtU2lnbmF0dXJlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTIyZGU3MDUyZTY5OGQyZTljNTdlODZiMzAyYWIxYzA3MzFi
YmRmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
YXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWTS5oIgorI2lu
Y2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20geworCisKK25hbWVzcGFjZSB7CitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ1NlZ1ZIYW5kbGVyOworc3Rh
dGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkU2lnQnVzSGFuZGxlcjsKK3N0YXRpYyBib29sIGZhc3RI
YW5kbGVySW5zdGFsbGVkIHsgZmFsc2UgfTsKK3N0YXRpYyBTdGF0aWNMb2NrIGNvZGVMb2NhdGlv
bnNMb2NrOworc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8Vk0q
LCB2b2lkKiwgdm9pZCo+Pj4gY29kZUxvY2F0aW9uczsgLy8gKHZtLCBzdGFydCwgZW5kKQorCitz
dGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29u
dGV4dCkKK3sKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3RhcnRpbmcgaGFuZGxlciIpOwor
ICAgIG1jb250ZXh0X3QgY29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1Y29udGV4
dCktPnVjX21jb250ZXh0OworICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihjb250ZXh0LT5fX3NzLl9fcmlwKTsKKworICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJzdGFydDogIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihz
dGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkpLCAiLCBmYXVsdGluZyBhZGRyZXNzOiAi
LCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1Y3Rpb24pLCAiLCBlbmQ6ICIsIFJhd1BvaW50ZXIo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSkp
OworICAgIC8vIEZpcnN0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFyZSBpbiBKSVQgY29kZSBi
ZWZvcmUgd2UgY2FuIGFxdWlyZSBhbnkgbG9ja3MuIE90aGVyd2lzZSwKKyAgICAvLyB3ZSBtaWdo
dCBoYXZlIGNyYXNoZWQgaW4gY29kZSB0aGF0IGlzIGFscmVhZHkgaG9sZGluZyBvbmUgb2YgdGhl
IGxvY2tzIHdlIHdhbnQgdG8gYXF1aXJlLgorICAgIGlmIChyZWludGVycHJldF9jYXN0PHZvaWQq
PihzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkgPD0gZmF1bHRpbmdJbnN0cnVjdGlv
bgorICAgICAgICAmJiBmYXVsdGluZ0luc3RydWN0aW9uIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSkgeworCisgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKKyAgICAgICAgZm9yIChhdXRvIHJhbmdlIDog
Y29kZUxvY2F0aW9ucy5nZXQoKSkgeworICAgICAgICAgICAgVk0qIHZtOworICAgICAgICAgICAg
dm9pZCogc3RhcnQ7CisgICAgICAgICAgICB2b2lkKiBlbmQ7CisgICAgICAgICAgICBzdGQ6OnRp
ZSh2bSwgc3RhcnQsIGVuZCkgPSByYW5nZTsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJmdW5jdGlvbiBzdGFydDogIiwgUmF3UG9pbnRlcihzdGFydCksICIgZW5kOiAiLCBSYXdQ
b2ludGVyKGVuZCkpOworICAgICAgICAgICAgaWYgKHN0YXJ0IDw9IGZhdWx0aW5nSW5zdHJ1Y3Rp
b24gJiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8PSBlbmQpIHsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiZm91bmQgbWF0Y2giKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgZXhjZXB0aW9uU3R1YiA9IHZtLT5qaXRTdHVicy0+ZXhpc3RpbmdDVElT
dHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcik7CisgICAgICAgICAgICAg
ICAgLy8gSWYgZm9yIHdoYXRldmVyIHJlYXNvbiB3ZSBkb24ndCBoYXZlIGEgc3R1YiB0aGVuIHdl
IHNob3VsZCBqdXN0IHRyZWF0IHRoaXMgbGlrZSBhIHJlZ3VsYXIgY3Jhc2guCisgICAgICAgICAg
ICAgICAgaWYgKCFleGNlcHRpb25TdHViLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0dWI6ICIsIFJhd1Bv
aW50ZXIoZXhjZXB0aW9uU3R1Yi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPl9fc3MuX19yc2kgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oRXhj
ZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPl9fc3MuX19yaXAgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihleGNlcHRpb25T
dHViLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2lnbmFsID09IFNJ
R1NFR1YpCisgICAgICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRTaWdTZWdWSGFuZGxlciwgbnVs
bHB0cik7CisgICAgZWxzZQorICAgICAgICBzaWdhY3Rpb24oc2lnbmFsLCAmb2xkU2lnQnVzSGFu
ZGxlciwgbnVsbHB0cik7Cit9CisKK3ZvaWQgcmVnaXN0ZXJDb2RlKFZNJiB2bSwgdm9pZCogc3Rh
cnQsIHZvaWQqIGVuZCkKK3sKKyAgICBpZiAoIWZhc3RNZW1vcnlFbmFibGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihjb2RlTG9jYXRpb25zTG9jayk7CisgICAg
Y29kZUxvY2F0aW9ucy0+YWRkKHN0ZDo6bWFrZV90dXBsZSgmdm0sIHN0YXJ0LCBlbmQpKTsKK30K
Kwordm9pZCB1bnJlZ2lzdGVyQ29kZShWTSYgdm0sIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCit7
CisgICAgaWYgKCFmYXN0TWVtb3J5RW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgTG9j
a0hvbGRlciBsb2NrZXIoY29kZUxvY2F0aW9uc0xvY2spOworICAgIGNvZGVMb2NhdGlvbnMtPnJl
bW92ZShzdGQ6Om1ha2VfdHVwbGUoJnZtLCBzdGFydCwgZW5kKSk7Cit9CisKK2Jvb2wgZmFzdE1l
bW9yeUVuYWJsZWQoKQoreworICAgIHJldHVybiBmYXN0SGFuZGxlckluc3RhbGxlZDsKK30KKwor
dm9pZCBlbmFibGVGYXN0TWVtb3J5KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIGlmICghT3B0aW9uczo6
dXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisKKyAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlv
biA9IHRyYXBIYW5kbGVyOworICAgICAgICBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7Cisg
ICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgICAgIAorICAgICAgICBp
ZiAoIXNpZ2FjdGlvbihTSUdCVVMsICZhY3Rpb24sICZvbGRTaWdCdXNIYW5kbGVyKSkgeworICAg
ICAgICAgICAgZmFzdEhhbmRsZXJJbnN0YWxsZWQgPSB0cnVlOworICAgICAgICAgICAgY29kZUxv
Y2F0aW9ucy5jb25zdHJ1Y3QoKTsKKyAgICAgICAgfQorCisgICAgfSk7Cit9CisgICAgCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxI
YW5kbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTc4MWMyODQwNjI2ZGRhOWFjMDU2OGViZTU4YTExNzJkYzhiNjFj
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVs
dFNpZ25hbEhhbmRsZXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CisKK3ZvaWQgcmVnaXN0
ZXJDb2RlKFZNJiB2bSwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7Cit2b2lkIHVucmVnaXN0ZXJD
b2RlKFZNJiB2bSwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7CisKK2Jvb2wgZmFzdE1lbW9yeUVu
YWJsZWQoKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5hYmxlRmFzdE1lbW9yeSgpOworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IGRjNjM0NzQ0MjJi
ZmU2MDMzZDhiMmQyMjFiYjdlYzVjMTEwNTY4NjIuLjFmYzU3NGU5M2Q3MjQ3YzY0YThmYTMzNGY2
MjI1ZDJjNzI3MWY2NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgK
QEAgLTI1Niw3ICsyNTYsNiBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gewogICAgIH0KIAog
ICAgIHVpbnQzMl90IGltcG9ydEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRG
dW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9Ci0gICAgYm9vbCBoYXNNZW1vcnkoKSBj
b25zdCB7IHJldHVybiAhIW1lbW9yeTsgfQogCiAgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCBhYWQ5MWMx
M2UzYTMwMTY4MzhmYjAzODRkYWI1YTQyYjQ3NzQzZDI4Li43NjMxMGE2MGM5M2Y0ODY0MTYyYThk
YmMyMjU0M2NlYmE2MzNhZTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmNwcApAQCAtMjgsNiArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAor
I2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgorCisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5o
PgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgpAQCAtMzgsODYgKzQyLDE5NCBAQCBuYW1lc3BhY2UgewogY29uc3QgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CiB9CiAKLXZvaWQgTWVtb3J5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CitpbmxpbmUgYm9vbCBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVzLCB2b2lkKiYgbWVtb3J5KQog
ewotICAgIFN0cmluZyBtZW1vcnlIZXg7Ci0gICAgV1RGOjphcHBlbmRVbnNpZ25lZDY0QXNIZXgo
KHVpbnQ2NF90KSh1aW50cHRyX3QpbV9tZW1vcnksIG1lbW9yeUhleCk7Ci0gICAgb3V0LnByaW50
KCJNZW1vcnkgYXQgMHgiLCBtZW1vcnlIZXgsICIsIHNpemUgIiwgbV9zaXplLCAiQiBjYXBhY2l0
eSAiLCBtX21hcHBlZENhcGFjaXR5LCAiQiwgaW5pdGlhbCAiLCBtX2luaXRpYWwsICIgbWF4aW11
bSAiLCBtX21heGltdW0sICIgbW9kZSAiLCBtYWtlU3RyaW5nKG1fbW9kZSkpOworICAgIGRhdGFM
b2dJZih2ZXJib3NlLCAiQXR0ZW1wdGluZyB0byBtbWFwICIsIGJ5dGVzLCAiIGJ5dGVzOiAiKTsK
KyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdh
c20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAw
CisgICAgdm9pZCogcmVzdWx0ID0gbW1hcChudWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBf
UFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7CisgICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVE
KSB7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmYWlsZWQiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3VjY2VlZGVkIik7
CisgICAgbWVtb3J5ID0gcmVzdWx0OworICAgIHJldHVybiB0cnVlOwogfQogCi1jb25zdCBjaGFy
KiBNZW1vcnk6Om1ha2VTdHJpbmcoTW9kZSBtb2RlKSBjb25zdAorLy8gV2UgdXNlIHRoaXMgYXMg
YSBoZXVyaXN0aWMgdG8gZ3Vlc3Mgd2hpY2ggbW9kZSB3ZSBzaG91bGQgYXNzdW1lIHdlIGFyZSBn
b2luZyB0byBnZXQgd2hlbiBhIG1vZHVsZSBpbXBvcnRzIGEgbWVtb3J5Lgorc3RhdGljIE1lbW9y
eTo6TW9kZSBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSB7IE1lbW9yeTo6TW9kZTo6U2lnbmFsaW5n
IH07CisKK01lbW9yeTo6TW9kZSBNZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCkKIHsKLSAgICBz
d2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJv
dW5kc0NoZWNraW5nIjsKKyAgICByZXR1cm4gbGFzdEFsbG9jYXRlZE1lbW9yeU1vZGU7Cit9CisK
K3N0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJl
bHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJe
MzMgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQgd2Un
ZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7CisKK3N0YXRpYyBjb25z
dCBzaXplX3QgZmFzdE1lbW9yeU1hcHBlZEJ5dGVzID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpICogMjsgLy8gcG9pbnRlciBtYXggKyBv
ZmZzZXQgbWF4LiBUaGlzIGlzIGFsbCB3ZSBuZWVkIHNpbmNlIGEgbG9hZCBzdHJhZGRsaW5nIHJl
YWRhYmxlIG1lbW9yeSB3aWxsIHRyYXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4RmFzdE1l
bW9yaWVzID0gNDsKK3N0YXRpYyB1bnNpZ25lZCBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgeyAwIH07
CitpbmxpbmUgRGVxdWU8dm9pZCosIG1heEZhc3RNZW1vcmllcz4mIGF2YWlsYWJsZUZhc3RNZW1v
cmllcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERlcXVlPHZvaWQqLCBtYXhGYXN0
TWVtb3JpZXM+PiBhdmFpbGFibGVGYXN0TWVtb3JpZXM7CisgICAgcmV0dXJuIGF2YWlsYWJsZUZh
c3RNZW1vcmllczsKK30KKworaW5saW5lIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0sIHZv
aWQqJiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeTo6TW9kZSYgbW9kZSkK
K3sKKyAgICAvLyBXZSBtaWdodCBHQyBoZXJlIHNvIHdlIHNob3VsZCBiZSBob2xkaW5nIHRoZSBB
UEkgbG9jay4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3luY3Jvbm91c2x5
IHRyaWdnZXIgdGhlIEdDIGZyb20gYW5vdGhlciB0aHJlYWQuCisgICAgQVNTRVJUKHZtLmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGlmICghZmFzdE1lbW9yeUVuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgbmVlZCB0byBiZSBzdXJlIHdl
IGhhdmUgYSBzdHViIHByaW9yIHRvIHJ1bm5pbmcgY29kZS4KKyAgICB2bS5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcik7CisKKyAgICBhdXRvIGRlcXVlRmFz
dE1lbW9yeSA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgaWYgKCFhdmFpbGFibGVGYXN0TWVt
b3JpZXMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1lbW9yeSA9IGF2YWlsYWJsZUZhc3RN
ZW1vcmllcygpLnRha2VGaXJzdCgpOworICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBmYXN0
TWVtb3J5TWFwcGVkQnl0ZXM7CisgICAgICAgICAgICBtb2RlID0gTWVtb3J5OjpTaWduYWxpbmc7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfTsKKworICAgIEFTU0VSVChhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgPD0gbWF4RmFz
dE1lbW9yaWVzKTsKKyAgICBpZiAoZGVxdWVGYXN0TWVtb3J5KCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgLy8gSWYgd2UgaGF2ZSBhbGxvY2F0ZWQgYWxsIHRoZSBmYXN0IG1lbW9yaWVz
Li4uIHRvbyBiYWQuCisgICAgaWYgKGFsbG9jYXRlZEZhc3RNZW1vcmllcyA9PSBtYXhGYXN0TWVt
b3JpZXMpIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgYSByZWFzb25hYmxlIGNoYW5jZSB0aGF0IGFu
b3RoZXIgbW9kdWxlIGhhcyBkaWVkIGJ1dCBoYXMgbm90IGJlZW4gY29sbGVjdGVkIHlldC4gRG9u
J3QgbG9zZSBob3BlIHlldCEKKyAgICAgICAgdm0uaGVhcC5jb2xsZWN0U3luYygpOworICAgICAg
ICByZXR1cm4gZGVxdWVGYXN0TWVtb3J5KCk7CiAgICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOworCisgICAgaWYgKG1tYXBCeXRlcyhmYXN0TWVt
b3J5TWFwcGVkQnl0ZXMsIG1lbW9yeSkpIHsKKyAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBmYXN0
TWVtb3J5TWFwcGVkQnl0ZXM7CisgICAgICAgIG1vZGUgPSBNZW1vcnk6OlNpZ25hbGluZzsKKyAg
ICAgICAgYWxsb2NhdGVkRmFzdE1lbW9yaWVzKys7CisgICAgfQorICAgIHJldHVybiBtZW1vcnk7
Cit9CisKK2lubGluZSB2b2lkIHJlbGVhc2VGYXN0TWVtb3J5KHZvaWQqJiBtZW1vcnksIHNpemVf
dCB3cml0YWJsZVNpemUsIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5OjpNb2RlIG1vZGUp
Cit7CisgICAgaWYgKG1vZGUgIT0gTWVtb3J5OjpTaWduYWxpbmcgfHwgIW1lbW9yeSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUkVMRUFTRV9BU1NFUlQobWVtb3J5ICYmIG1hcHBlZENhcGFjaXR5
ID09IGZhc3RNZW1vcnlNYXBwZWRCeXRlcyk7CisgICAgQVNTRVJUKGZhc3RNZW1vcnlFbmFibGVk
KCkpOworCisgICAgbWVtc2V0KG1lbW9yeSwgMCwgd3JpdGFibGVTaXplKTsKKyAgICAvLyBXZSBu
ZWVkIHRvIG1wcm90ZWN0IFBST1RfTk9ORSBhbGwgdGhlIGV4aXN0aW5nIG1lbW9yeS4gSWYgd2Ug
Y2FuJ3QsIGZvcgorICAgIC8vIHdoYXRldmVyIHJlYXNvbiwgd2Ugc2hvdWxkIGJhaWwgb3V0IGFu
ZCBnZXQgcmlkIG9mIHRoaXMgbWVtb3J5LgorICAgIGlmIChtcHJvdGVjdChtZW1vcnksIHdyaXRh
YmxlU2l6ZSwgUFJPVF9OT05FKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGF2YWls
YWJsZUZhc3RNZW1vcmllcygpLnNpemUoKSA8IGFsbG9jYXRlZEZhc3RNZW1vcmllcyk7CisgICAg
YXZhaWxhYmxlRmFzdE1lbW9yaWVzKCkuYXBwZW5kKG1lbW9yeSk7CisgICAgbWVtb3J5ID0gbnVs
bHB0cjsKIH0KIAotc3RhdGljX2Fzc2VydChzaXplb2YodWludDY0X3QpID09IHNpemVvZihzaXpl
X3QpLCAiV2UgcmVseSBvbiBhbGxvd2luZyB0aGUgbWF4aW11bSBzaXplIG9mIE1lbW9yeSB3ZSBt
YXAgdG8gYmUgMl4zMiB3aGljaCBpcyBsYXJnZXIgdGhhbiBmaXRzIGluIGEgMzItYml0IGludGVn
ZXIgdGhhdCB3ZSdkIHBhc3MgdG8gbXByb3RlY3QgaWYgdGhpcyBkaWRuJ3QgaG9sZC4iKTsKK01l
bW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKKyAgICA6
IG1faW5pdGlhbChpbml0aWFsKQorICAgICwgbV9tYXhpbXVtKG1heGltdW0pCit7CisgICAgQVNT
RVJUKCFpbml0aWFsLmJ5dGVzKCkpOworfQogCi1NZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5p
dGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wmIGZhaWxlZCkKLSAgICA6IG1fc2l6ZShpbml0
aWFsLmJ5dGVzKCkpCitNZW1vcnk6Ok1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNb2RlIG1vZGUp
CisgICAgOiBtX21lbW9yeShtZW1vcnkpCisgICAgLCBtX3NpemUoaW5pdGlhbC5ieXRlcygpKQog
ICAgICwgbV9pbml0aWFsKGluaXRpYWwpCiAgICAgLCBtX21heGltdW0obWF4aW11bSkKLSAgICAs
IG1fbW9kZShNb2RlOjpCb3VuZHNDaGVja2luZykKLSAgICAvLyBGSVhNRTogSWYgd2UgYWRkIHNp
Z25hbCBiYXNlZCBib3VuZHMgY2hlY2tpbmcgdGhlbiB3ZSBuZWVkIGV4dHJhIHNwYWNlIGZvciBv
dmVyZmxvdyBvbiBsb2FkLgotICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MjY5MworICAgICwgbV9tYXBwZWRDYXBhY2l0eShtYXBwZWRDYXBhY2l0
eSkKKyAgICAsIG1fbW9kZShtb2RlKQoreworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1v
cnk6Ok1lbW9yeSBhbGxvY2F0aW5nICIsICp0aGlzKTsKK30KKworUmVmUHRyPE1lbW9yeT4gTWVt
b3J5OjpjcmVhdGVJbXBsKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtLCBzdGQ6Om9wdGlvbmFsPE1vZGU+IHJlcXVpcmVkTW9kZSkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBn
dWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCiAKLSAgICBtX21hcHBlZENhcGFjaXR5ID0gbWF4aW11
bSA/IG1heGltdW0uYnl0ZXMoKSA6IFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMoKTsKLSAgICBpZiAo
IW1fbWFwcGVkQ2FwYWNpdHkpIHsKKyAgICBNb2RlIG1vZGUgPSByZXF1aXJlZE1vZGUgPyAqcmVx
dWlyZWRNb2RlIDogQm91bmRzQ2hlY2tpbmc7CisgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBpbml0
aWFsLmJ5dGVzKCk7CisgICAgc2l6ZV90IG1hcHBlZENhcGFjaXR5ID0gbWF4aW11bSA/IG1heGlt
dW0uYnl0ZXMoKSA6IFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMoKTsKKyAgICB2b2lkKiBtZW1vcnkg
PSBudWxscHRyOworCisgICAgYXV0byBtYWtlRW1wdHlNZW1vcnkgPSBbJl0gKCkgLT4gUmVmUHRy
PE1lbW9yeT4geworICAgICAgICBpZiAobW9kZSA9PSBTaWduYWxpbmcpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9IEJvdW5k
c0NoZWNraW5nOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBt
YXhpbXVtKSk7CisgICAgfTsKKworICAgIGlmICghbWFwcGVkQ2FwYWNpdHkpIHsKICAgICAgICAg
Ly8gVGhpcyBtZWFucyB3ZSBzcGVjaWZpZWQgYSB6ZXJvIGFzIG1heGltdW0gKHdoaWNoIG1lYW5z
IHdlIGFsc28gaGF2ZSB6ZXJvIGFzIGluaXRpYWwgc2l6ZSkuCi0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1fc2l6ZSA9PSAwKTsKLSAgICAgICAgbV9tZW1vcnkgPSBudWxscHRyOwotICAgICAgICBt
X21hcHBlZENhcGFjaXR5ID0gMDsKLSAgICAgICAgZmFpbGVkID0gZmFsc2U7Ci0gICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Ok1lbW9yeSBhbGxvY2F0
aW5nIG5vdGhpbmcgIiwgKnRoaXMpOwotICAgICAgICByZXR1cm47CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHNpemUgPT0gMCk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6
OmNyZWF0ZSBhbGxvY2F0aW5nIG5vdGhpbmciKTsKKyAgICAgICAgcmV0dXJuIG1ha2VFbXB0eU1l
bW9yeSgpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGhh
ZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM2MDAKLSAgICB2b2lkKiByZXN1bHQgPSBPcHRpb25zOjpzaW11bGF0ZVdl
YkFzc2VtYmx5TG93TWVtb3J5KCkgPyBNQVBfRkFJTEVEIDogbW1hcChudWxscHRyLCBtX21hcHBl
ZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKLSAg
ICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGgg
YSBkaWZmZXJlbnQgbnVtYmVyLgotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgbW1hcCBmYWlsZWQgb25jZSBmb3IgY2FwYWNpdHksIHRy
eWluZyBhZ2FpbiIsICp0aGlzKTsKLSAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1fc2l6ZTsK
LSAgICAgICAgaWYgKCFtX21hcHBlZENhcGFjaXR5KSB7Ci0gICAgICAgICAgICBtX21lbW9yeSA9
IG51bGxwdHI7Ci0gICAgICAgICAgICBmYWlsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgbW1hcCBu
b3QgdHJ5aW5nIGFnYWluIGJlY2F1c2Ugc2l6ZSBpcyB6ZXJvICIsICp0aGlzKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmICghdHJ5R2V0RmFzdE1lbW9yeSh2bSwgbWVt
b3J5LCBtYXBwZWRDYXBhY2l0eSwgbW9kZSkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2lnbmFs
aW5nKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKE9wdGlvbnM6
OnNpbXVsYXRlV2ViQXNzZW1ibHlMb3dNZW1vcnkoKSA/IHRydWUgOiAhbW1hcEJ5dGVzKG1hcHBl
ZENhcGFjaXR5LCBtZW1vcnkpKSB7CisgICAgICAgICAgICAvLyBUcnkgYWdhaW4gd2l0aCBhIGRp
ZmZlcmVudCBudW1iZXIuCisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5
OjpjcmVhdGUgbW1hcCBmYWlsZWQgb25jZSBmb3IgY2FwYWNpdHksIHRyeWluZyBhZ2FpbiIpOwor
ICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBzaXplOworICAgICAgICAgICAgaWYgKCFtYXBw
ZWRDYXBhY2l0eSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1v
cnk6OmNyZWF0ZSBtbWFwIG5vdCB0cnlpbmcgYWdhaW4gYmVjYXVzZSBzaXplIGlzIHplcm8iKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUVtcHR5TWVtb3J5KCk7CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgcmVzdWx0ID0gbW1hcChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5LCBQUk9U
X05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKLSAgICAgICAgaWYgKHJlc3Vs
dCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
ICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6TWVtb3J5IG1tYXAgZmFpbGVkIHR3aWNlICIsICp0aGlz
KTsKLSAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBpZiAoIW1tYXBCeXRlcyhtYXBwZWRDYXBhY2l0eSwgbWVtb3J5KSkgeworICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIGZhaWxl
ZCB0d2ljZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKG1fc2l6ZSA8PSBtX21hcHBlZENhcGFj
aXR5KTsKLSAgICB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9ICFtcHJvdGVjdChyZXN1bHQsIHN0
YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOworICAgIEFTU0VSVChtZW1vcnkgJiYgc2l6ZSA8
PSBtYXBwZWRDYXBhY2l0eSk7CisgICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgc2l6ZSwgUFJPVF9S
RUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9y
eTo6Y3JlYXRlIG1wcm90ZWN0IGZhaWxlZCIpOworICAgICAgICByZWxlYXNlRmFzdE1lbW9yeSht
ZW1vcnksIDAsIG1hcHBlZENhcGFjaXR5LCBtb2RlKTsKKyAgICAgICAgaWYgKG1lbW9yeSkgewor
ICAgICAgICAgICAgaWYgKG11bm1hcChtZW1vcnksIG1hcHBlZENhcGFjaXR5KSkKKyAgICAgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KKyAgICAKKyAgICBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9IG1vZGU7CisgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAgc3VjY2VlZGVkIik7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkobWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBtYXBwZWRD
YXBhY2l0eSwgbW9kZSkpOworfQogCi0gICAgbV9tZW1vcnkgPSByZXN1bHQ7Ci0gICAgZmFpbGVk
ID0gZmFsc2U7Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpN
ZW1vcnkgbW1hcCBzdWNjZWVkZWQgIiwgKnRoaXMpOworUmVmUHRyPE1lbW9yeT4gTWVtb3J5Ojpj
cmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6
b3B0aW9uYWw8TW9kZT4gbW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBt
YXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBj
YWxsZXIuCisgICAgUmVmUHRyPE1lbW9yeT4gcmVzdWx0ID0gY3JlYXRlSW1wbCh2bSwgaW5pdGlh
bCwgbWF4aW11bSwgbW9kZSk7CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICBpZiAocmVzdWx0
LT5tb2RlKCkgPT0gU2lnbmFsaW5nKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
LT5tX21hcHBlZENhcGFjaXR5ID09IGZhc3RNZW1vcnlNYXBwZWRCeXRlcyk7CisgICAgICAgIGlm
IChtb2RlKQorICAgICAgICAgICAgQVNTRVJUKCptb2RlID09IHJlc3VsdC0+bW9kZSgpKTsKKyAg
ICAgICAgQVNTRVJUKGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlID09IHJlc3VsdC0+bW9kZSgpKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogTWVtb3J5Ojp+TWVtb3J5KCkKIHsKLSAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6On5NZW1vcnkgIiwgKnRo
aXMpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6On5NZW1vcnkgIiwgKnRoaXMp
OworICAgIHJlbGVhc2VGYXN0TWVtb3J5KG1fbWVtb3J5LCBtX3NpemUsIG1fbWFwcGVkQ2FwYWNp
dHksIG1fbW9kZSk7CiAgICAgaWYgKG1fbWVtb3J5KSB7CiAgICAgICAgIGlmIChtdW5tYXAobV9t
ZW1vcnksIG1fbWFwcGVkQ2FwYWNpdHkpKQogICAgICAgICAgICAgQ1JBU0goKTsKQEAgLTEyOCwy
MyArMjQwLDI1IEBAIGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKG5ld1NpemUgPiBQYWdlQ291bnQ6OmZyb21CeXRlcyhtX3NpemUpKTsK
IAotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6Z3JvdyB0byAi
LCBuZXdTaXplLCAiIGZyb20gIiwgKnRoaXMpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJN
ZW1vcnk6Omdyb3cgdG8gIiwgbmV3U2l6ZSwgIiBmcm9tICIsICp0aGlzKTsKIAogICAgIGlmICht
YXhpbXVtKCkgJiYgbmV3U2l6ZSA+IG1heGltdW0oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgdWludDY0X3QgZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5dGVzKCk7CisgICAgc2l6ZV90
IGRlc2lyZWRTaXplID0gbmV3U2l6ZS5ieXRlcygpOwogCiAgICAgaWYgKG1fbWVtb3J5ICYmIGRl
c2lyZWRTaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0g
IW1wcm90ZWN0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9yeSkgKyBtX3NpemUsIHN0YXRp
Y19jYXN0PHNpemVfdD4oZGVzaXJlZFNpemUgLSBtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dS
SVRFKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7CisgICAgICAgIGlmIChtcHJv
dGVjdChzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9tZW1vcnkpICsgbV9zaXplLCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGRlc2lyZWRTaXplIC0gbV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkp
IHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgaW4tcGxh
Y2UgZmFpbGVkICIsICp0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwotICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5Ojpncm93IGluLXBsYWNlICIsICp0aGlzKTsK
KyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyBpbi1wbGFjZSAiLCAq
dGhpcyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIEFTU0VSVChtb2RlKCkg
IT0gU2lnbmFsaW5nKTsKICAgICAvLyBPdGhlcndpc2UsIGxldCdzIHRyeSB0byBtYWtlIHNvbWUg
bmV3IG1lbW9yeS4KICAgICB2b2lkKiBuZXdNZW1vcnkgPSBtbWFwKG51bGxwdHIsIGRlc2lyZWRT
aXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwg
MCk7CiAgICAgaWYgKG5ld01lbW9yeSA9PSBNQVBfRkFJTEVEKQpAQCAtMTU5LDExICsyNzMsMjYg
QEAgYm9vbCBNZW1vcnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCiAgICAgbV9tYXBwZWRDYXBh
Y2l0eSA9IGRlc2lyZWRTaXplOwogICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwogCi0gICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiTWVtb3J5Ojpncm93ICIsICp0aGlzKTsKKyAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93ICIsICp0aGlzKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAordm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoIk1lbW9yeSBhdCAiLCBSYXdQb2ludGVyKG1fbWVtb3J5KSwgIiwg
c2l6ZSAiLCBtX3NpemUsICJCIGNhcGFjaXR5ICIsIG1fbWFwcGVkQ2FwYWNpdHksICJCLCBpbml0
aWFsICIsIG1faW5pdGlhbCwgIiBtYXhpbXVtICIsIG1fbWF4aW11bSwgIiBtb2RlICIsIG1ha2VT
dHJpbmcobV9tb2RlKSk7Cit9CisKK2NvbnN0IGNoYXIqIE1lbW9yeTo6bWFrZVN0cmluZyhNb2Rl
IG1vZGUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBNb2RlOjpCb3Vu
ZHNDaGVja2luZzogcmV0dXJuICJCb3VuZHNDaGVja2luZyI7CisgICAgY2FzZSBNb2RlOjpTaWdu
YWxpbmc6IHJldHVybiAiU2lnbmFsaW5nIjsKKyAgICBjYXNlIE1vZGU6Ok51bWJlck9mTW9kZXM6
IGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAiIjsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIH0gLy8gbmFtZXNwYWNlIFdhc20K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCAyMzZiZjg1MTI1NjQ1
NWJjZTllMzIzNmRjYzQ1ODRjODZjMWRjZjBjLi5lZTlmMTgyODZkYjliMDU0NTM5NTliZDIyMTVm
OWNhZjczZTA3NzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBA
IC0yNyw2MiArMjcsNjggQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUg
Ildhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKIAor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3Ry
ZWFtOwogfQogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CiAKLWNsYXNzIE1lbW9yeSB7Citj
bGFzcyBNZW1vcnkgOiBwdWJsaWMgUmVmQ291bnRlZDxNZW1vcnk+IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShNZW1vcnkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIHZvaWQgZHVtcChXVEY6OlByaW50U3RyZWFtJikgY29uc3Q7CiAKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwotICAgIGVudW0gY2xhc3MgTW9kZSB7Ci0gICAg
ICAgIEJvdW5kc0NoZWNraW5nCisgICAgZW51bSBNb2RlIHsKKyAgICAgICAgQm91bmRzQ2hlY2tp
bmcsCisgICAgICAgIFNpZ25hbGluZywKKyAgICAgICAgTnVtYmVyT2ZNb2RlcwogICAgIH07CiAg
ICAgY29uc3QgY2hhciogbWFrZVN0cmluZyhNb2RlKSBjb25zdDsKIAorICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fbWVtb3J5OyB9CisKKyAgICBzdGF0aWMg
UmVmUHRyPE1lbW9yeT4gY3JlYXRlKFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBt
YXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1vZGU+IHJlcXVpcmVkTW9kZSA9IHN0ZDo6bnVsbG9wdCk7
CisKICAgICBNZW1vcnkoKSA9IGRlZmF1bHQ7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5
KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCYgZmFpbGVkKTsKLSAg
ICBNZW1vcnkoTWVtb3J5JiYgb3RoZXIpCi0gICAgICAgIDogbV9tZW1vcnkob3RoZXIubV9tZW1v
cnkpCi0gICAgICAgICwgbV9zaXplKG90aGVyLm1fc2l6ZSkKLSAgICAgICAgLCBtX2luaXRpYWwo
b3RoZXIubV9pbml0aWFsKQotICAgICAgICAsIG1fbWF4aW11bShvdGhlci5tX21heGltdW0pCi0g
ICAgICAgICwgbV9tYXBwZWRDYXBhY2l0eShvdGhlci5tX21hcHBlZENhcGFjaXR5KQotICAgICAg
ICAsIG1fbW9kZShvdGhlci5tX21vZGUpCi0gICAgewotICAgICAgICAvLyBNb3ZpbmcgdHJhbnNm
ZXJzIG93bmVyc2hpcCBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KLSAgICAgICAgb3RoZXIubV9t
ZW1vcnkgPSBudWxscHRyOwotICAgIH0KICAgICB+TWVtb3J5KCk7CiAKICAgICB2b2lkKiBtZW1v
cnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeTsgfQotICAgIHVpbnQ2NF90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQogICAgIFBhZ2VDb3VudCBzaXplSW5QYWdlcygpIGNvbnN0IHsgcmV0dXJuIFBhZ2VD
b3VudDo6ZnJvbUJ5dGVzKG1fc2l6ZSk7IH0KIAogICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29u
c3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CiAgICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7
IHJldHVybiBtX21heGltdW07IH0KIAorICAgIHN0YXRpYyBNb2RlIGxhc3RBbGxvY2F0ZWRNb2Rl
KCk7CiAgICAgTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKKyAgICAvLyBn
cm93KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIEpTV2ViQXNzZW1ibHlNZW1vcnkg
b2JqZWN0IHNpbmNlIHRoYXQgb2JqZWN0IG5lZWRzIHRvIHVwZGF0ZSBpbnRlcm5hbAorICAgIC8v
IHBvaW50ZXJzIHdpdGggdGhlIGN1cnJlbnQgYmFzZSBhbmQgc2l6ZS4KICAgICBib29sIGdyb3co
UGFnZUNvdW50KTsKIAotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX21lbW9yeSk7IH0KLSAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1f
c2l6ZSk7IH0KLSAgICAKKyAgICB2b2lkIGNoZWNrKCkgeyAgQVNTRVJUKCFkZWxldGlvbkhhc0Jl
Z3VuKCkpOyB9CiBwcml2YXRlOgorICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGVJbXBs
KFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFs
PE1vZGU+IHJlcXVpcmVkTW9kZSA9IHN0ZDo6bnVsbG9wdCk7CisgICAgTWVtb3J5KHZvaWQqIG1l
bW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVk
Q2FwYWNpdHksIE1vZGUgbW9kZSk7CisgICAgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdl
Q291bnQgbWF4aW11bSk7CisKICAgICB2b2lkKiBtX21lbW9yeSB7IG51bGxwdHIgfTsKLSAgICB1
aW50NjRfdCBtX3NpemUgeyAwIH07CisgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKICAgICBQYWdl
Q291bnQgbV9pbml0aWFsOwogICAgIFBhZ2VDb3VudCBtX21heGltdW07Ci0gICAgdWludDY0X3Qg
bV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKKyAgICBzaXplX3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAg
fTsKICAgICBNb2RlIG1fbW9kZSB7IE1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNw
cAppbmRleCA2YjA2M2QzNTEyNGU5N2E4M2IxZjFlMDg3M2E0MTA3YzlmMGU5ZmQ1Li5hZjViMWI4
MTk1Y2NiZmZjMWFjYTM1OWE4MGUyMzZhZjU5NDExODc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC03MSwx
MSArNzIsMjIgQEAgUGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdpc3RlckluZm8oVmVjdG9y
PFBpbm5lZFNpemVSZWdpc3RlckluZm8+JiYgc2l6ZVJlZ2kKIHsKIH0KIAotTWVtb3J5SW5mb3Jt
YXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSwgIGJvb2wgaXNJbXBvcnQpCitNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRp
b24oVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0
aW9uYWw8TWVtb3J5OjpNb2RlPiByZWNvbXBpbGVNb2RlLCBib29sIGlzSW1wb3J0KQogICAgIDog
bV9pbml0aWFsKGluaXRpYWwpCiAgICAgLCBtX21heGltdW0obWF4aW11bSkKICAgICAsIG1faXNJ
bXBvcnQoaXNJbXBvcnQpCiB7CisgICAgaWYgKCFpc0ltcG9ydCAmJiAhcmVjb21waWxlTW9kZSkg
eworICAgICAgICBtX3Jlc2VydmVkTWVtb3J5ID0gTWVtb3J5OjpjcmVhdGUodm0sIGluaXRpYWws
IG1heGltdW0sIE1lbW9yeTo6U2lnbmFsaW5nKTsKKyAgICAgICAgaWYgKG1fcmVzZXJ2ZWRNZW1v
cnkpCisgICAgICAgICAgICBBU1NFUlQoISEqbV9yZXNlcnZlZE1lbW9yeSk7CisgICAgfQorCisg
ICAgaWYgKHJlY29tcGlsZU1vZGUpCisgICAgICAgIG1fbW9kZSA9ICpyZWNvbXBpbGVNb2RlOwor
ICAgIGVsc2UKKyAgICAgICAgbV9tb2RlID0gTWVtb3J5OjpsYXN0QWxsb2NhdGVkTW9kZSgpOwor
CiAgICAgUkVMRUFTRV9BU1NFUlQoISFtX2luaXRpYWwpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFt
X21heGltdW0gfHwgbV9tYXhpbXVtID49IG1faW5pdGlhbCk7CiAgICAgQVNTRVJUKCEhKnRoaXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9y
bWF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uaAppbmRleCA2ZTdmNTIxODk0N2UwMTZiNDhmZGY2MDE5ZDM2OGE1NzU3ZTM4NWI3Li40YWI0
MTI2ZjI1MjhjYTI3YjI5YTY0MGMxOWUzYWEyZWY0NDgwMDJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaApAQCAtMjgsOCArMjgs
MTAgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJHUFJJbmZvLmgiCisj
aW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC01MiwxNyArNTQsMjQgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQoISp0aGlzKTsKICAgICB9CiAKLSAgICBNZW1vcnlJbmZvcm1hdGlvbihQYWdlQ291
bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wgaXNJbXBvcnQpOworICAgIE1lbW9y
eUluZm9ybWF0aW9uKFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBz
dGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gbW9kZSwgYm9vbCBpc0ltcG9ydCk7CiAKICAgICBQ
YWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBhZ2VD
b3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9CisgICAgYm9vbCBoYXNS
ZXNlcnZlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnk7IH0KKyAgICBN
ZW1vcnkmIHRha2VSZXNlcnZlZE1lbW9yeSgpIHsgQVNTRVJUKGhhc1Jlc2VydmVkTWVtb3J5KCkp
OyByZXR1cm4gKm1fcmVzZXJ2ZWRNZW1vcnkubGVha1JlZigpOyB9CisgICAgTWVtb3J5OjpNb2Rl
IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIGlzSW1wb3J0KCkgY29u
c3QgeyByZXR1cm4gbV9pc0ltcG9ydDsgfQogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICEhbV9pbml0aWFsOyB9CiAKIHByaXZhdGU6CisgICAgLy8gVGhpcyBp
cyBhIHVuaXF1ZV9wdHIgc28gd2UgY2FuIHBhc3MgTW9kdWxlSW5mb3JtYXRpb24gYXMgY29uc3Qg
YW5kIHN0aWxsIGJlCisgICAgLy8gYWJsZSB0byB0YWtlIG93bmVyc2hpcCBvZiB0aGlzLgorICAg
IFJlZlB0cjxNZW1vcnk+IG1fcmVzZXJ2ZWRNZW1vcnk7CiAgICAgUGFnZUNvdW50IG1faW5pdGlh
bCB7IH07CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bSB7IH07CisgICAgTWVtb3J5OjpNb2RlIG1f
bW9kZSB7IE1lbW9yeTo6TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKICAgICBib29sIG1faXNJbXBv
cnQgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmNwcAppbmRleCA1MTc3M2QwNmU2MjAxMjNiNWFjMDQyNjJhOTA4YmFiMGJm
OGYxNTk5Li41MjExNjRmZjRjNDZhYjRmMWEzY2NhMzdjZGU5MzllMTJlYjZiYmM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMzE2
LDcgKzMxNiw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlz
SW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgQVNTRVJUKGluaXRpYWxQYWdlQ291bnQpOwog
ICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50ID49IGluaXRp
YWxQYWdlQ291bnQpOwogCi0gICAgbV9yZXN1bHQubW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZv
cm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7Cisg
ICAgbV9yZXN1bHQubW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbigqbV92bSwgaW5p
dGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgbV9tb2RlLCBpc0ltcG9ydCk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZVBhcnNlci5oCmluZGV4IDQxYjU3ZmM4MjBjNDViOWI0ZWM1ZmE3YzY5NWJhNTZjYWZiODRhMTAu
Ljk0YmExNGUxNWEzZmRhMzEwNGUzM2JhYzA5M2MxZjFlODFjZjIwYzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUg
Ildhc21QYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC00MywxMiAr
NDQsOSBAQCBzdHJ1Y3QgTW9kdWxlUGFyc2VyUmVzdWx0IHsKIGNsYXNzIE1vZHVsZVBhcnNlciA6
IHB1YmxpYyBQYXJzZXI8TW9kdWxlUGFyc2VyUmVzdWx0PiB7CiBwdWJsaWM6CiAKLSAgICBNb2R1
bGVQYXJzZXIoVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3Vy
Y2VMZW5ndGgpCisgICAgTW9kdWxlUGFyc2VyKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNl
QnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4g
bW9kZSkKICAgICAgICAgOiBQYXJzZXIodm0sIHNvdXJjZUJ1ZmZlciwgc291cmNlTGVuZ3RoKQot
ICAgIHsKLSAgICB9Ci0gICAgTW9kdWxlUGFyc2VyKFZNKiB2bSwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBzb3VyY2VCdWZmZXIpCi0gICAgICAgIDogTW9kdWxlUGFyc2VyKHZtLCBzb3VyY2VCdWZm
ZXIuZGF0YSgpLCBzb3VyY2VCdWZmZXIuc2l6ZSgpKQorICAgICAgICAsIG1fbW9kZShtb2RlKQog
ICAgIHsKICAgICB9CiAKQEAgLTY4LDYgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYs
IFR5cGUmIGluaXRFeHByVHlwZSk7CiAKICAgICBNb2R1bGVQYXJzZXJSZXN1bHQgbV9yZXN1bHQ7
CisgICAgc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IG1fbW9kZSB7IHN0ZDo6bnVsbG9wdCB9
OwogICAgIGJvb2wgbV9oYXNUYWJsZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5kZXggNTk4MGI1MWU4NzQyMjIzNzU1Y2UwYzNkZjJjMTZi
MWRlOWVjOGYxMi4uNDgzNWFhMjhmMmNhZjdhMjFjNmFjNGExOTNjMzc3MWU1ODI4Y2FhOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtMzUsNiArMzUsNyBAQAog
I2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21N
b2R1bGVQYXJzZXIuaCIKICNpbmNsdWRlICJXYXNtVmFsaWRhdGUuaCIKQEAgLTYxLDE0ICs2Miwx
NCBAQCBQbGFuOjpQbGFuKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291
cmNlTGVuZ3RoKQogewogfQogCi1ib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQor
Ym9vbCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpN
b2RlPiByZWNvbXBpbGVNb2RlKQogewogICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwogICAg
IGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKQogICAgICAgICBz
dGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAogICAgIHsKLSAgICAgICAgTW9kdWxl
UGFyc2VyIG1vZHVsZVBhcnNlcihtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgpOworICAg
ICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKG1fdm0sIG1fc291cmNlLCBtX3NvdXJjZUxl
bmd0aCwgcmVjb21waWxlTW9kZSk7CiAgICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQ
YXJzZXIucGFyc2UoKTsKICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgewogICAgICAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSBwYXJzZVJlc3VsdC5lcnJvcigpOwpAQCAtMTA5LDEwICsxMTAsMTIg
QEAgYm9vbCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKIC8vIFRoZSByZWFzb24gdGhp
cyBpcyBPSyBpcyB0aGF0IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBtYWluIHRocmVhZCBkb2Vzbid0
IGNvbnRpbnVlIHVudGlsIGFsbCB0aHJlYWRzCiAvLyB0aGF0IGNvdWxkIHRvdWNoIGl0cyBzdGFj
ayBhcmUgZG9uZSBleGVjdXRpbmcuCiBTVVBQUkVTU19BU0FOIAotdm9pZCBQbGFuOjpydW4oKQor
dm9pZCBQbGFuOjpydW4oc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUp
CiB7Ci0gICAgaWYgKCFwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkpCisgICAgaWYgKCFwYXJzZUFu
ZFZhbGlkYXRlTW9kdWxlKHJlY29tcGlsZU1vZGUpKQogICAgICAgICByZXR1cm47CisgICAgaWYg
KHJlY29tcGlsZU1vZGUpCisgICAgICAgIEFTU0VSVChtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1v
cnkubW9kZSgpID09IHJlY29tcGlsZU1vZGUpOwogCiAgICAgYXV0byB0cnlSZXNlcnZlQ2FwYWNp
dHkgPSBbdGhpc10gKGF1dG8mIHZlY3Rvciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQp
IHsKICAgICAgICAgaWYgKFVOTElLRUxZKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUp
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggNjk4MGJkYmJiZTE3
YTUxOTVjOGM1ZTAzNWViNGU2YWExMGQyY2YxNS4uZDA3MDM3NTIwMzJjOWFhMGNkODU4NDE3ZmIx
NzI2ZTdmYjljM2RmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC00
OSw5ICs0OSw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwgY29u
c3QgdWludDhfdCosIHNpemVfdCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAot
ICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOworICAgIGJvb2wgcGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gPSBzdGQ6Om51bGxvcHQpOwog
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW4oKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gPSBzdGQ6Om51bGxvcHQpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9i
amVjdCosIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwgSlNXZWJBc3NlbWJseUNhbGxlZSos
IEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4pOwogCkBAIC05Miw2ICs5Miw4IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIFdURk1vdmUobV93YXNtRXhpdFN0dWJzKTsKICAgICB9CiAKKyAgICBNZW1v
cnk6Ok1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9y
eS5tb2RlKCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3Jt
YXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CiAgICAgVmVjdG9yPEZ1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeT4gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCmluZGV4IGMyNzcx
MmExMGZmZmM4ZGYzZjFlYjYwNmIwOGNmYzlmMDdmOGUzNmIuLjUxNzEyNzg1ZjI5M2I4ZjEwYmEw
ZDk5N2M0NmEwMWViNTk3ZDQ4ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
Ildhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQzLDEx
ICs0NCwxMyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogCiAgICAgbV9lbnRyeXBvaW50ID0gV1RGTW92ZShlbnRyeXBvaW50KTsKKyAgICBX
YXNtOjpyZWdpc3RlckNvZGUodm0sIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigp
LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5j
b2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3Nl
bWJseUNhbGxlZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNXZWJBc3NlbWJseUNh
bGxlZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUqPihjZWxs
KTsKKyAgICBXYXNtOjp1bnJlZ2lzdGVyQ29kZSgqY2VsbC0+dm0oKSwgdGhpc09iamVjdC0+bV9l
bnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFy
dCgpLCB0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVj
dXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKICAgICB0aGlzT2JqZWN0LT5KU1dlYkFzc2VtYmx5Q2Fs
bGVlOjp+SlNXZWJBc3NlbWJseUNhbGxlZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjdiYzhmMmRmMzcxMWEzZjBkZGU5OWJmZjg4MDc0NDg0OTg3NThlMTUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCisjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseU1vZHVsZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJ
bmZvIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q29kZUJs
b2NrIiwgbnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrKSB9OworCitKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYg
Y2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVi
cywgV2FzbTo6TWVtb3J5OjpNb2RlIG1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KQorICAgIDog
QmFzZSh2bSwgdm0ud2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBt
X2NhbGxMaW5rSW5mb3MoV1RGTW92ZShjYWxsTGlua0luZm9zKSkKKyAgICAsIG1fd2FzbUV4aXRT
dHVicyhXVEZNb3ZlKHdhc21FeGl0U3R1YnMpKQorICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBt
X2NhbGxlZUNvdW50KGNhbGxlZUNvdW50KQoreworICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywg
b3duZXIpOworICAgIG1lbXNldChjYWxsZWVzKCksIDAsIG1fY2FsbGVlQ291bnQgKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIDIpOworfQorCit2b2lkIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRpY19j
YXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKS0+SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soKTsKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fY2FsbGVlQ291bnQg
KiAyOyBpKyspCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmNhbGxlZXMoKVtp
XSk7CisKKyAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJnRoaXNPYmplY3Qt
Pm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQor
eworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBiaXR3aXNlX2Nhc3Q8
SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KAorICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpIC0gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcikpOworICAgIGZvciAoYXV0byBpdGVyID0gdGhpc09iamVjdC0+bV9jYWxs
TGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQorICAgICAgICAoKml0ZXIpLT52aXNp
dFdlYWsoKnRoaXNPYmplY3QtPnZtKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4IGZiYzFjZWJmYjlj
YjhhNTljOWVhZTZlNmRkOTlmYzU1NWY1YjEzY2MuLjI5MDljNWRmZDFiODFmNmYxMjZkMTgyYTky
MzQwZWEwMGQ5N2FiZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw2ICszOCwxOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAordm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeShWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KQoreworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAvLyBXZSBjcmVhdGUgc3R1
YiBtZW1vcmllcyBldmVuIGZvciBtb2R1bGVzIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgZ2V0IGEg
bWVtb3J5IHNvIHdlIHdhbnQgdG8gYXZvaWQgcmVjb21wbGluZyB0aGVyZS4KKyAgICBpZiAobWVt
b3J5LT5tZW1vcnkoKSkgeworICAgICAgICBhdXRvIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLT5t
b2R1bGUoKS0+Y29kZUJsb2NrKHZtLCBleGVjLCBtZW1vcnkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCApOworICAgICAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGNv
ZGVCbG9jayk7CisgICAgfQorICAgIG1fbWVtb3J5LnNldCh2bSwgdGhpcywgbWVtb3J5KTsKK30K
KwogSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUs
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QpCiB7CiAgICAg
Ly8gRklYTUU6IFRoZXNlIG9iamVjdHMgY291bGQgYmUgcHJldHR5IGJpZyB3ZSBzaG91bGQgdHJ5
IHRvIHRocm93IE9PTSBoZXJlLgpAQCAtNjcsNyArNzksNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1
bGUsCiAgICAgbV9nbG9iYWxzID0gTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGV4dHJhTWVt
b3J5U2l6ZSk7CiAgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChleHRyYU1l
bW9yeVNpemUpOwogCi0gICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBtb2R1bGUpOworICAgIG1f
Y29kZUJsb2NrLnNldCh2bSwgdGhpcywgbW9kdWxlLT5jb2RlQmxvY2soKSk7CiAgICAgbV9tb2R1
bGVOYW1lc3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QpOwog
ICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJleHBvcnRzIiks
IG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgTm9uZSk7CiB9CkBAIC04Myw3ICs5NSw3IEBAIHZvaWQg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZSk7CisgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90
YWJsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oCmluZGV4IDk5YTJjOTBmN2VhMzUzZTM2YjY1NWFiZTVjZGQ1YzQ5ODNj
NTNhMTguLjI4N2JjZjI1ODIwZGMyYTVjMWIyNTZhOWNkYjU3YmVkNDI0NGNiZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5o
IgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5VGFibGUuaCIKIApAQCAtNDcsMTAgKzQ4LDE2IEBAIHB1YmxpYzoKIAogICAgIERFQ0xB
UkVfSU5GTzsKIAotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpCisgICAgSlNXZWJB
c3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX21v
ZHVsZSk7Ci0gICAgICAgIHJldHVybiBtX21vZHVsZS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKG1f
Y29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5tb2R1bGUoKTsKKyAgICB9
CisKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nr
LmdldCgpOwogICAgIH0KIAogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+KiBpbXBvcnRGdW5jdGlv
bih1bnNpZ25lZCBpZHgpCkBAIC03MCw3ICs3Nyw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBK
U1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQot
ICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2bSwgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KSB7
IG1fbWVtb3J5LnNldCh2bSwgdGhpcywgbWVtb3J5KTsgfQorICAgIC8vIENhbGxpbmcgdGhpcyBt
aWdodCB0cmlnZ2VyIGEgcmVjb21waWxlLgorICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2bSwgRXhl
Y1N0YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KTsKKyAgICBXYXNtOjpNZW1vcnk6
Ok1vZGUgbWVtb3J5TW9kZSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0K
IAogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgp
OyB9CiAgICAgdm9pZCBzZXRUYWJsZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUp
IHsgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsgfQpAQCAtMTA0LDcgKzExMyw3IEBAIHBy
b3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1i
bHlNb2R1bGU+IG1fbW9kdWxlOworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrPiBtX2NvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2Vt
Ymx5TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRhYmxl
PiBtX3RhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmNwcAppbmRleCBmNDI1M2I1YmZiODg2Y2VjZDlkNjQ1YjU4NjYxZTEz
MzA5ZTIzZTIzLi4xMWZiNDAwMTc3NzNkNmJiZWFhZjVjZGU4MjE0N2FiN2VhNTMxNGE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVt
b3J5LmNwcApAQCAtMzcsOSArMzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNz
SW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5NZW1vcnki
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1v
cnkpIH07CiAKLUpTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpNZW1vcnkmJiBtZW1vcnkpCitK
U1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1vcnkpCiB7Ci0gICAg
YXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5
TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1lbW9yeSh2bSwgc3RydWN0dXJlLCBzdGQ6
OmZvcndhcmQ8V2FzbTo6TWVtb3J5PihtZW1vcnkpKTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZtLmhlYXApKSBK
U1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUobWVtb3J5KSk7CisgICAg
aW5zdGFuY2UtPm1fbWVtb3J5LT5jaGVjaygpOwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtNDksMTAgKzUwLDEzIEBAIFN0cnVj
dHVyZSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206Ok1lbW9yeSYmIG1lbW9yeSkKK0pT
V2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1vcnkpCiAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCiAgICAgLCBtX21lbW9yeShXVEZNb3ZlKG1lbW9yeSkpCiB7CisgICAgQVNTRVJU
KG1fbWVtb3J5LT5yZWZDb3VudCgpID09IDEpOworICAgIG1fbWVtb3J5QmFzZSA9IG1fbWVtb3J5
LT5tZW1vcnkoKTsKKyAgICBtX21lbW9yeVNpemUgPSBtX21lbW9yeS0+c2l6ZSgpOwogfQogCiBK
U0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtNjAsMTIgKzY0LDEwIEBAIEpTQXJyYXlCdWZmZXIq
IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiAgICAgaWYgKG1fYnVmZmVyV3JhcHBlcikKICAgICAgICAgcmV0dXJuIG1fYnVm
ZmVyV3JhcHBlci5nZXQoKTsKIAotICAgIGF1dG8gZGVzdHJ1Y3RvciA9IFtdICh2b2lkKikgewot
ICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUgdG8gZGVzdHJveSB0
aGUgbWVtb3J5LgotICAgICAgICAvLyBUaGUgQXJyYXlCdWZmZXIgYmFja2luZyB0aGUgSlNBcnJh
eUJ1ZmZlciBpcyBvbmx5IG93bmVkIGJ5IHVzLAotICAgICAgICAvLyBzbyB3ZSBndWFyYW50ZWUg
aXRzIGxpZmVjeWNsZS4KLSAgICB9OwotICAgIG1fYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0
ZUZyb21CeXRlcyhtZW1vcnkoKS0+bWVtb3J5KCksIG1lbW9yeSgpLT5zaXplKCksIFdURk1vdmUo
ZGVzdHJ1Y3RvcikpOworICAgIC8vIFdlIGNhbid0IHVzZSBhIHJlZiBoZXJlIHNpbmNlIGl0IGRv
ZXNuJ3QgaGF2ZSBhIGNvcHkgY29uc3RydWN0b3IuLi4KKyAgICBSZWZQdHI8V2FzbTo6TWVtb3J5
PiBtZW1vcnlSZWZQdHIgPSAmbV9tZW1vcnkuZ2V0KCk7CisgICAgYXV0byBkZXN0cnVjdG9yID0g
W21lbW9yeVJlZlB0cl0gKHZvaWQqKSB7fTsKKyAgICBtX2J1ZmZlciA9IEFycmF5QnVmZmVyOjpj
cmVhdGVGcm9tQnl0ZXMobWVtb3J5KCkubWVtb3J5KCksIG1lbW9yeSgpLnNpemUoKSwgV1RGTW92
ZShkZXN0cnVjdG9yKSk7CiAgICAgbV9idWZmZXJXcmFwcGVyLnNldCh2bSwgdGhpcywgSlNBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPm1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUu
Z2V0KCksIG1fYnVmZmVyLmdldCgpKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9idWZmZXJXcmFw
cGVyKTsKICAgICByZXR1cm4gbV9idWZmZXJXcmFwcGVyLmdldCgpOwpAQCAtNzYsNyArNzgsNyBA
QCBXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhFeGVjU3RhdGUqIGV4
ZWMsIHVpbnQzMl90IGRlbHRhLCBib29sCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFdhc206OlBh
Z2VDb3VudCBvbGRQYWdlQ291bnQgPSBtZW1vcnkoKS0+c2l6ZUluUGFnZXMoKTsKKyAgICBXYXNt
OjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0gbWVtb3J5KCkuc2l6ZUluUGFnZXMoKTsKIAogICAg
IGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKGRlbHRhKSkgewogICAgICAgICBpZiAoc2hv
dWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQpAQCAtOTIsMTIgKzk0LDE2IEBAIFdhc206OlBh
Z2VDb3VudCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KEV4ZWNTdGF0ZSogZXhlYywgdWludDMy
X3QgZGVsdGEsIGJvb2wKICAgICB9CiAKICAgICBpZiAoZGVsdGEpIHsKLSAgICAgICAgYm9vbCBz
dWNjZXNzID0gbWVtb3J5KCktPmdyb3cobmV3U2l6ZSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9
IG1lbW9yeSgpLmdyb3cobmV3U2l6ZSk7CiAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAg
ICAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZSA9PSBtZW1vcnkoKS5tZW1vcnkoKSk7CisgICAgICAg
ICAgICBBU1NFUlQobV9tZW1vcnlTaXplID09IG1lbW9yeSgpLnNpemUoKSk7CiAgICAgICAgICAg
ICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQogICAgICAgICAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhl
YykpOwogICAgICAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOwogICAgICAgICB9Cisg
ICAgICAgIG1fbWVtb3J5QmFzZSA9IG1lbW9yeSgpLm1lbW9yeSgpOworICAgICAgICBtX21lbW9y
eVNpemUgPSBtZW1vcnkoKS5zaXplKCk7CiAgICAgfQogCiAgICAgLy8gV2UgbmVlZCB0byBjbGVh
ciBvdXQgdGhlIG9sZCBhcnJheSBidWZmZXIgYmVjYXVzZSBpdCBtaWdodCBub3cgYmUgcG9pbnRp
bmcKQEAgLTExMCw2ICsxMTYsNyBAQCBXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9y
eTo6Z3JvdyhFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHRhLCBib29sCiAgICAgICAgIG1f
YnVmZmVyV3JhcHBlci5jbGVhcigpOwogICAgIH0KIAorICAgIG1lbW9yeSgpLmNoZWNrKCk7CiAg
ICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKIH0KIApAQCAtMTIzLDEzICsxMzAsNiBAQCB2b2lkIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIGF1dG8gbWVt
b3J5ID0gc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KGNlbGwpOwogICAgIEFTU0VS
VChtZW1vcnktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgVk0mIHZtID0gKm1lbW9yeS0+
dm0oKTsKLQotICAgIGlmIChtZW1vcnktPm1fYnVmZmVyKSB7Ci0gICAgICAgIEFycmF5QnVmZmVy
Q29udGVudHMgZHVtbXlDb250ZW50czsKLSAgICAgICAgbWVtb3J5LT5tX2J1ZmZlci0+dHJhbnNm
ZXJUbyh2bSwgZHVtbXlDb250ZW50cyk7Ci0gICAgICAgIG1lbW9yeS0+bV9idWZmZXIgPSBudWxs
cHRyOwotICAgIH0KIAogICAgIG1lbW9yeS0+SlNXZWJBc3NlbWJseU1lbW9yeTo6fkpTV2ViQXNz
ZW1ibHlNZW1vcnkoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNZW1vcnkuaAppbmRleCBmZmYxNDE1NzAyY2ZlYWQ2Y2U5MjIxNDkwMmRk
YjhjNmI0NGQyNjgwLi4wZWIxODhkNjBkNWUzMjAxYWY2NWM4Y2Y5ZDJmODg1Njk5YzhhN2MxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVt
b3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1l
bW9yeS5oCkBAIC00MSwyNSArNDEsMjcgQEAgY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeSA6IHB1
YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3Ry
dWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGNy
ZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdhc206Ok1lbW9yeSYmKTsKKyAgICBzdGF0aWMgSlNXZWJB
c3NlbWJseU1lbW9yeSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1lbW9yeT4m
Jik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIFdhc206Ok1lbW9y
eSogbWVtb3J5KCkgeyByZXR1cm4gJm1fbWVtb3J5OyB9CisgICAgV2FzbTo6TWVtb3J5JiBtZW1v
cnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQogICAgIEpTQXJyYXlCdWZmZXIqIGJ1ZmZl
cihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgV2FzbTo6UGFnZUNvdW50IGdyb3coRXhl
Y1N0YXRlKiwgdWludDMyX3QgZGVsdGEsIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWls
dXJlKTsKIAotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1vcnkpICsgV2FzbTo6TWVt
b3J5OjpvZmZzZXRPZk1lbW9yeSgpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNp
emUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1v
cnkpICsgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJs
eU1lbW9yeSwgbV9tZW1vcnlCYXNlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZT
aXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1fbWVt
b3J5U2l6ZSk7IH0KIAotcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBT
dHJ1Y3R1cmUqLCBXYXNtOjpNZW1vcnkmJik7Citwcml2YXRlOgorICAgIEpTV2ViQXNzZW1ibHlN
ZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TWVtb3J5PiYmKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAg
ICBXYXNtOjpNZW1vcnkgbV9tZW1vcnk7CisgICAgdm9pZCogbV9tZW1vcnlCYXNlOworICAgIHNp
emVfdCBtX21lbW9yeVNpemU7CisgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAg
V3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKICAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IG1fYnVmZmVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKaW5kZXggMDhmYTU4NDYyOGYwN2Qy
ZDhjOGMzYjJiNzhkMTE1ODBjNGYyODE3Ni4uYmU1ZDdkNzE3Njk4MjA0ZTBiNDY1ZjIzMzNjN2I3
YjliMDc4YmFhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTMwLDE4ICszMCw0NiBAQAogCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvbXBp
bGVFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJX
YXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21QbGFu
LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNfaW5mbyA9IHsgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNXZWJBc3NlbWJseU1vZHVsZSkgfTsKIAotSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJBc3Nl
bWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5p
cXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJiBtb2R1bGVJbmZvcm1hdGlvbiwgQmFn
PENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVi
cz4mJiB3YXNtRXhpdFN0dWJzLCBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUsIHVuc2ln
bmVkIGNhbGxlZUNvdW50KQorSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseU1v
ZHVsZTo6YnVpbGRDb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFdhc206OlBsYW4m
IHBsYW4sIHN0ZDo6b3B0aW9uYWw8V2FzbTo6TWVtb3J5OjpNb2RlPiBtb2RlKQogewotICAgIGF1
dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1v
ZHVsZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQpKSkgSlNXZWJBc3NlbWJs
eU1vZHVsZSh2bSwgc3RydWN0dXJlLCBzdGQ6OmZvcndhcmQ8c3RkOjp1bmlxdWVfcHRyPFdhc206
Ok1vZHVsZUluZm9ybWF0aW9uPj4obW9kdWxlSW5mb3JtYXRpb24pLCBzdGQ6OmZvcndhcmQ8QmFn
PENhbGxMaW5rSW5mbz4+KGNhbGxMaW5rSW5mb3MpLCBzdGQ6OmZvcndhcmQ8VmVjdG9yPFdhc206
Oldhc21FeGl0U3R1YnM+Pih3YXNtRXhpdFN0dWJzKSwgY2FsbGVlQ291bnQpOwotICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbih2bSwgZXhwb3J0U3ltYm9sVGFibGUpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAvLyBPbiBmYWlsdXJlLCBhIG5ldyBX
ZWJBc3NlbWJseS5Db21waWxlRXJyb3IgaXMgdGhyb3duLgorICAgIHBsYW4ucnVuKG1vZGUpOwor
ICAgIGlmIChwbGFuLmZhaWxlZCgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKGV4ZWMsIHZtLCBwbGFuLmVycm9y
TWVzc2FnZSgpKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBpZiAobW9k
ZSkKKyAgICAgICAgQVNTRVJUKCptb2RlID09IHBsYW4ubW9kZSgpKTsKKworICAgIHVuc2lnbmVk
IGNhbGxlZUNvdW50ID0gcGxhbi5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKTsKKyAgICBhdXRvKiBj
b2RlQmxvY2sgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUodm0sIHRoaXMsIHBsYW4u
dGFrZUNhbGxMaW5rSW5mb3MoKSwgcGxhbi50YWtlV2FzbUV4aXRTdHVicygpLCBwbGFuLm1vZGUo
KSwgY2FsbGVlQ291bnQpOworCisgICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhleGVjLT5qc0Nh
bGxlZSgpLT5nbG9iYWxPYmplY3QoKSwKKyAgICAgICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRl
eCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICAgICBjb2RlQmxvY2stPnNl
dEpTRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSk7
CisgICAgICAgICAgIGNvZGVCbG9jay0+c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxl
ZUluZGV4LCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBj
b2RlQmxvY2s7Cit9CisKK0pTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6
OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVp
bnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKQoreworICAgIGF1dG8qIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkp
IEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSk7CisKKyAgICBpbnN0YW5jZS0+Zmlu
aXNoQ3JlYXRpb24odm0sIGV4ZWMsIHNvdXJjZSwgYnl0ZVNpemUpOwogICAgIHJldHVybiBpbnN0
YW5jZTsKIH0KIApAQCAtNTAsMjEgKzc4LDU3IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1v
ZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dl
YkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJiBtb2R1
bGVJbmZvcm1hdGlvbiwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8
V2FzbTo6V2FzbUV4aXRTdHVicz4mJiB3YXNtRXhpdFN0dWJzLCB1bnNpZ25lZCBjYWxsZWVDb3Vu
dCkKK0pTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fbW9k
dWxlSW5mb3JtYXRpb24oV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlvbikpCi0gICAgLCBtX2NhbGxM
aW5rSW5mb3MoV1RGTW92ZShjYWxsTGlua0luZm9zKSkKLSAgICAsIG1fd2FzbUV4aXRTdHVicyhX
VEZNb3ZlKHdhc21FeGl0U3R1YnMpKQotICAgICwgbV9jYWxsZWVDb3VudChjYWxsZWVDb3VudCkK
IHsKLSAgICBtZW1zZXQoY2FsbGVlcygpLCAwLCBtX2NhbGxlZUNvdW50ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikgKiAyKTsKIH0KIAotdm9pZCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1i
b2xUYWJsZSkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNv
ZGVCbG9jayhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVt
b3J5KQoreworICAgIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlID0gbWVtb3J5LT5tZW1vcnkoKS5t
b2RlKCk7CisgICAgaWYgKCFtX2NvZGVCbG9ja3NbbW9kZV0pIHsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEg
Y29kZSBibG9jayBmb3IgdGhpcyBtb2RlLCB3ZSBuZWVkIHRvIHJlY29tcGlsZS4uLgorICAgICAg
ICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9zb3VyY2VCdWZm
ZXItPmRhdGEoKSksIG1fc291cmNlQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworCisgICAgICAgIGF1
dG8qIGNvZGVCbG9jayA9IGJ1aWxkQ29kZUJsb2NrKHZtLCBleGVjLCBwbGFuLCBtb2RlKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICAgICAgQVNT
RVJUKHBsYW4uZXhwb3J0cygpLnNpemUoKSA9PSBtX2V4cG9ydFN5bWJvbFRhYmxlLT5zaXplKCkp
OworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgZm9yIChhdXRv
JiBleHAgOiBwbGFuLmV4cG9ydHMoKSkKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9leHBvcnRT
eW1ib2xUYWJsZS0+Y29udGFpbnMoZXhwLmZpZWxkLmltcGwoKSkpOworICAgICAgICB9CisKKyAg
ICAgICAgQVNTRVJUKG1vZGUgPT0gY29kZUJsb2NrLT5tb2RlKCkpOworICAgICAgICBtX2NvZGVC
bG9ja3NbbW9kZV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOworICAgIH0KKworICAgIHJldHVy
biBtX2NvZGVCbG9ja3NbbW9kZV0uZ2V0KCk7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVs
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQ4X3QqIHNvdXJj
ZSwgc2l6ZV90IGJ5dGVTaXplKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworCisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHNvdXJjZSwgYnl0
ZVNpemUpOworCisgICAgYXV0byogY29kZUJsb2NrID0gYnVpbGRDb2RlQmxvY2sodm0sIGV4ZWMs
IHBsYW4pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsICk7CisKKyAgICAvLyBPbiBz
dWNjZXNzLCBhIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUgb2JqZWN0IGlzIHJldHVybmVkIHdpdGgg
W1tNb2R1bGVdXSBzZXQgdG8gdGhlIHZhbGlkYXRlZCBBc3QubW9kdWxlLgorICAgIFN5bWJvbFRh
YmxlKiBleHBvcnRTeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUodm0pOworICAgIGZv
ciAoYXV0byYgZXhwIDogcGxhbi5leHBvcnRzKCkpIHsKKyAgICAgICAgYXV0byBvZmZzZXQgPSBl
eHBvcnRTeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xvY2tpbmdOZWNlc3Nhcnkp
OworICAgICAgICBleHBvcnRTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05lY2Vzc2FyeSwgZXhw
LmZpZWxkLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOworICAg
IH0KKworICAgIG1fc291cmNlQnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzb3VyY2UsIGJ5
dGVTaXplKTsKKyAgICBtX21vZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3Jt
YXRpb24oKTsKICAgICBtX2V4cG9ydFN5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgZXhwb3J0U3lt
Ym9sVGFibGUpOworICAgIG1fY29kZUJsb2Nrc1tjb2RlQmxvY2stPm1vZGUoKV0uc2V0KHZtLCB0
aGlzLCBjb2RlQmxvY2spOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQpAQCAtNzksMTggKzE0Myw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2V4cG9ydFN5bWJvbFRhYmxlKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9jYWxsZWVDb3VudCAqIDI7IGkrKykKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+Y2FsbGVlcygpW2ldKTsKLQotICAgIHZpc2l0
b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmdGhpc09iamVjdC0+bV91bmNvbmRpdGlvbmFs
RmluYWxpemVyKTsKLX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpVbmNvbmRpdGlvbmFs
RmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCi17Ci0gICAgSlNXZWJBc3NlbWJs
eU1vZHVsZSogdGhpc09iamVjdCA9IGJpdHdpc2VfY2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4o
Ci0gICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseU1vZHVsZSwgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7Ci0gICAgZm9yIChh
dXRvIGl0ZXIgPSB0aGlzT2JqZWN0LT5tX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyAr
K2l0ZXIpCi0gICAgICAgICgqaXRlciktPnZpc2l0V2VhaygqdGhpc09iamVjdC0+dm0oKSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdhc206Ok1lbW9yeTo6TnVtYmVyT2ZNb2Rlczsg
KytpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja3NbaV0p
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAppbmRleCA3ZTA1MWY1NzIyNDI0NjhhNjY0
MTkwMzFhODg5NWM2MTM2ZTMwODc2Li40ODcxMWNjNGQ0YTJmOGFkNjdiZmU1NTY0Mjk4OWEyMTY5
MDM1MzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1vZHVsZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
Q2FsbGVlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5j
bHVkZSA8d3RmL0JhZy5oPgpAQCAtMzcsODUgKzM3LDQ3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBQbGFuOworfQorCiBjbGFzcyBTeW1ib2xUYWJsZTsK
K2NsYXNzIEpTV2ViQXNzZW1ibHlNZW1vcnk7CiAKIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGUg
OiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNE
ZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb24+JiYsIEJhZzxDYWxsTGlua0luZm8+JiYsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0
dWJzPiYmLCBTeW1ib2xUYWJsZSosIHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJs
eU1vZHVsZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdWludDhfdCogc291
cmNlLCBzaXplX3QgYnl0ZVNpemUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87
CiAKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24o
KSBjb25zdCB7IHJldHVybiAqbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKTsgfQorICAgIFdhc206
Ok1lbW9yeSYgdGFrZVJlc2VydmVkTWVtb3J5KCkgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+bWVtb3J5LnRha2VSZXNlcnZlZE1lbW9yeSgpOyB9CiAgICAgU3ltYm9sVGFibGUqIGV4cG9y
dFN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leHBvcnRTeW1ib2xUYWJsZS5nZXQoKTsg
fQogICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgfQotICAgIHVuc2lnbmVkIGZ1bmN0
aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpOyB9
Ci0KLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKLSAgICB7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50
KCkpOwotICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAt
IGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5k
ZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRl
eF0uZ2V0KCk7Ci0gICAgfQotCi0gICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9p
bnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFj
ZSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBm
dW5jdGlvbkltcG9ydENvdW50KCkpOwotICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1
bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgcmV0dXJuIGNh
bGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLmdldCgpOwotICAgIH0KLQotICAg
IHZvaWQgc2V0SlNFbnRyeXBvaW50Q2FsbGVlKFZNJiB2bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgs
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7Ci0gICAgICAgIGNhbGxlZXMoKVtjYWxs
ZWVJbmRleF0uc2V0KHZtLCB0aGlzLCBjYWxsZWUpOwotICAgIH0KIAotICAgIHZvaWQgc2V0V2Fz
bUVudHJ5cG9pbnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3Nl
bWJseUNhbGxlZSogY2FsbGVlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVl
SW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgY2FsbGVlcygpW2NhbGxlZUluZGV4ICsg
bV9jYWxsZWVDb3VudF0uc2V0KHZtLCB0aGlzLCBjYWxsZWUpOwotICAgIH0KKyAgICAvLyBSZXR1
cm5zIHRoZSBjb2RlIGJsb2NrIHRoYXQgdGhpcyBtb2R1bGUgd2FzIG9yaWdpbmFsbHkgY29tcGls
ZWQgZXhwZWN0aW5nIHRvIHVzZS4gVGhpcyB3b24ndCBuZWVkIHRvIHJlY29tcGlsZS4KKyAgICBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nb
bV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUoKV0uZ2V0KCk7IH0KKyAgICAvLyBSZXR1
cm5zIHRoZSBhcHByb3ByaWF0ZSBjb2RlIGJsb2NrIGZvciB0aGUgZ2l2ZW4gbWVtb3J5LCBwb3Nz
aWJseSB0cmlnZ2VyaW5nIGEgcmVjb21waWxlLgorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IGNvZGVCbG9jayhWTSYsIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1lbW9yeSopOwog
Ci0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlD
YWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVlcygpKTsK
LSAgICB9Citwcml2YXRlOgorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGJ1aWxkQ29kZUJs
b2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpQbGFuJiwgc3RkOjpvcHRpb25hbDxX
YXNtOjpNZW1vcnk6Ok1vZGU+IG1vZGUgPSBzdGQ6Om51bGxvcHQpOwogCi1wcm90ZWN0ZWQ6Ci0g
ICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJiwgQmFnPENhbGxMaW5rSW5mbz4mJiwgVmVjdG9yPFdh
c206Oldhc21FeGl0U3R1YnM+JiYsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgU3ltYm9sVGFibGUqKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxl
KFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEV4ZWNTdGF0
ZSosIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKIAotcHJpdmF0ZToKLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mQ2Fs
bGVlcygpCi0gICAgewotICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNp
emVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pPihzaXplb2YoSlNXZWJBc3Nl
bWJseU1vZHVsZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUo
dW5zaWduZWQgbnVtQ2FsbGVlcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBvZmZzZXRPZkNhbGxl
ZXMoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogbnVtQ2Fs
bGVlcyAqIDI7Ci0gICAgfQotCi0gICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplciA6IHB1
YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeyAKLSAgICAgICAgdm9pZCBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOwotICAgIH07Ci0KLSAgICBVbmNvbmRpdGlvbmFs
RmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKKyAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IG1fc291cmNlQnVmZmVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKLSAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2Nh
bGxMaW5rSW5mb3M7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJv
bFRhYmxlOwotICAgIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiBtX3dhc21FeGl0U3R1YnM7
Ci0gICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3Nl
bWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2tzW1dhc206Ok1lbW9yeTo6TnVtYmVyT2ZNb2Rlc107
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
CmluZGV4IDc2M2RjNDk0Y2U1YTQ3ODJkNmU2ODQ3ZjgyMjU2NjFiMzViZGE3YWIuLmU3ZmI0MDE0
NjU0YmFhYTIzZWFlMjZlNTg4MzNjNDk0ZTJkZjhmYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcApAQCAtODQsMTEgKzg0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXgKIAog
ICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OmNyZWF0ZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIGpzTW9kdWxlLCBtb2R1bGVSZWNvcmQt
PmdldE1vZHVsZU5hbWVzcGFjZShleGVjKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICB7Ci0gICAgICAgIC8vIEFsd2F5cyBzdGFy
dCB3aXRoIGEgZHVtbXkgTWVtb3J5LCBzbyB0aGF0IHdhc20gLT4gd2FzbSB0aHVua3MgYXZvaWQg
Y2hlY2tpbmcgZm9yIGEgbnVsbHB0ciBNZW1vcnkgd2hlbiB0cnlpbmcgdG8gc2V0IHBpbm5lZCBy
ZWdpc3RlcnMuCi0gICAgICAgIFdhc206Ok1lbW9yeSBtZW1vcnk7Ci0gICAgICAgIGluc3RhbmNl
LT5zZXRNZW1vcnkodm0sIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXVEZNb3Zl
KG1lbW9yeSkpKTsKLSAgICB9CisKIAogICAgIC8vIExldCBmdW5jcywgbWVtb3JpZXMgYW5kIHRh
YmxlcyBiZSBpbml0aWFsbHktZW1wdHkgbGlzdHMgb2YgY2FsbGFibGUgSmF2YVNjcmlwdCBvYmpl
Y3RzLCBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0cyBhbmQgV2ViQXNzZW1ibHkuVGFibGUgb2Jq
ZWN0cywgcmVzcGVjdGl2ZWx5LgogICAgIC8vIExldCBpbXBvcnRzIGJlIGFuIGluaXRpYWxseS1l
bXB0eSBsaXN0IG9mIGV4dGVybmFsIHZhbHVlcy4KQEAgLTE3OCwxMiArMTc0LDEyIEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0
YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFuIGlu
c3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSkpOwogCiAgICAgICAgICAgICBXYXNtOjpQ
YWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRp
YWwoKTsKLSAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxJbml0aWFsID0gbWVtb3J5
LT5tZW1vcnkoKS0+aW5pdGlhbCgpOworICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVh
bEluaXRpYWwgPSBtZW1vcnktPm1lbW9yeSgpLmluaXRpYWwoKTsKICAgICAgICAgICAgIGlmIChh
Y3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQogICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0
IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSkpOwogCiAgICAgICAg
ICAgICBpZiAoV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0
aW9uLm1lbW9yeS5tYXhpbXVtKCkpIHsKLSAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQg
YWN0dWFsTWF4aW11bSA9IG1lbW9yeS0+bWVtb3J5KCktPm1heGltdW0oKTsKKyAgICAgICAgICAg
ICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsTWF4aW11bSA9IG1lbW9yeS0+bWVtb3J5KCkubWF4
aW11bSgpOwogICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkgewogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKAogICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2
ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpKTsK
QEAgLTE5NCw5ICsxOTAsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgICAg
ICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydHMg
J21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSci
KSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8v
IGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYu
W1tNZW1vcnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2
bSwgbWVtb3J5KTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIGV4ZWMsIG1l
bW9yeSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDogewpAQCAtMjM1LDEyICsyMzMsMTcgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUlu
c3RhbmNlKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eSAmJiAhaGFzTWVtb3J5SW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9k
dWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOwogICAgICAgICAgICAgLy8gV2UgY3Jl
YXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgotICAgICAgICAgICAg
Ym9vbCBmYWlsZWQ7Ci0gICAgICAgICAgICBXYXNtOjpNZW1vcnkgbWVtb3J5KG1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVt
KCksIGZhaWxlZCk7Ci0gICAgICAgICAgICBpZiAoZmFpbGVkKQotICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3Jl
YXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwotICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1l
bW9yeSh2bSwKLSAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgp
LCBXVEZNb3ZlKG1lbW9yeSkpKTsKKyAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1l
bW9yeTsKKyAgICAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaGFzUmVzZXJ2
ZWRNZW1vcnkoKSkKKyAgICAgICAgICAgICAgICBtZW1vcnkgPSBhZG9wdFJlZihqc01vZHVsZS0+
dGFrZVJlc2VydmVkTWVtb3J5KCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1l
bW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOworICAg
ICAgICAgICAgICAgIGlmICghbWVtb3J5KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9m
TWVtb3J5RXJyb3IoZXhlYykpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluc3RhbmNl
LT5zZXRNZW1vcnkodm0sIGV4ZWMsCisgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1v
cnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKm1lbW9yeS5sZWFrUmVmKCkpKSk7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0yNjMsNiArMjY2LDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUq
IGV4CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnkoKSkgewor
ICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGR1bW15IG1lbW9yeSwgc28gdGhhdCB3YXNt
IC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4g
dHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgorICAgICAgICBpbnN0YW5jZS0+c2V0TWVt
b3J5KHZtLCBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYo
KihuZXcgV2FzbTo6TWVtb3J5KCkpKSkpOworCisgICAgfQorCiAgICAgLy8gR2xvYmFscwogICAg
IHsKICAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMgPT0gbW9kdWxlSW5mb3JtYXRpb24u
Zmlyc3RJbnRlcm5hbEdsb2JhbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCmluZGV4IDZj
ODg3YWY1OTdhODY1MzI5Y2ZiNDNmNWVkYjQ3YjQxZTY2MDllYzguLjUxMTI5ZTMxMDEyZjBjMWI1
NDJhYzkxZTg5OTRlNDI5ZDU3NWU4ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBA
IC05NiwxMiArOTYsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeShFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgfQogICAg
IH0KIAotICAgIGJvb2wgZmFpbGVkOwotICAgIFdhc206Ok1lbW9yeSBtZW1vcnkoaW5pdGlhbFBh
Z2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgZmFpbGVkKTsKLSAgICBpZiAoZmFpbGVkKQorICAg
IFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBp
bml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50KTsKKyAgICBpZiAoIW1lbW9yeSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXVEZNb3ZlKG1lbW9y
eSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNy
ZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0
cnVjdHVyZSgpLCBhZG9wdFJlZigqbWVtb3J5LmxlYWtSZWYoKSkpKTsKIH0KIAogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0
YXRlKiBzdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggODEyOTU5MjNjN2Fk
Y2EyZGU2MGJlY2MxOTNmYWNlOTgyZjQ1ZmQyMi4uYTk0MGU4ZGZmMGNiZWE1ZmRmMDgyOTkwYTU3
YWQ4ZDhmZWNjMTcwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTgwLDMxICs4
MCw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxl
KEV4ZWNTdGF0ZSogc3RhdGUsIFN0cnVjdHVyZSoKICAgICB1aW50OF90KiBiYXNlID0gZ2V0V2Fz
bUJ1ZmZlckZyb21WYWx1ZShzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBi
eXRlU2l6ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIFdh
c206OlBsYW4gcGxhbigmdm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7Ci0gICAgLy8g
T24gZmFpbHVyZSwgYSBuZXcgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIGlzIHRocm93bi4KLSAg
ICBwbGFuLnJ1bigpOwotICAgIGlmIChwbGFuLmZhaWxlZCgpKQotICAgICAgICByZXR1cm4gdGhy
b3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9y
KHN0YXRlLCB2bSwgcGxhbi5lcnJvck1lc3NhZ2UoKSkpOwotCi0gICAgLy8gT24gc3VjY2Vzcywg
YSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIFtbTW9kdWxl
XV0gc2V0IHRvIHRoZSB2YWxpZGF0ZWQgQXN0Lm1vZHVsZS4KLQotICAgIC8vIFRoZSBleHBvcnQg
c3ltYm9sIHRhYmxlIGlzIHRoZSBzYW1lIGZvciBhbGwgSW5zdGFuY2VzIG9mIGEgTW9kdWxlLgot
ICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUo
dm0pOwotICAgIGZvciAoYXV0byYgZXhwIDogcGxhbi5leHBvcnRzKCkpIHsKLSAgICAgICAgYXV0
byBvZmZzZXQgPSBleHBvcnRTeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xvY2tp
bmdOZWNlc3NhcnkpOwotICAgICAgICBleHBvcnRTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05l
Y2Vzc2FyeSwgZXhwLmZpZWxkLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zm
c2V0KSkpOwotICAgIH0KLQotICAgIC8vIE9ubHkgd2FzbS1pbnRlcm5hbCBmdW5jdGlvbnMgaGF2
ZSBhIGNhbGxlZSwgc3R1YnMgdG8gSlMgZG8gbm90LgotICAgIHVuc2lnbmVkIGNhbGxlZUNvdW50
ID0gcGxhbi5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKTsKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxl
KiByZXN1bHQgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgcGxh
bi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKSwgcGxhbi50YWtlQ2FsbExpbmtJbmZvcygpLCBwbGFu
LnRha2VXYXNtRXhpdFN0dWJzKCksIGV4cG9ydFN5bWJvbFRhYmxlLCBjYWxsZWVDb3VudCk7Ci0g
ICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhzdGF0ZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0
KCksIAotICAgICAgICBbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBv
aW50Q2FsbGVlKSB7Ci0gICAgICAgICAgICByZXN1bHQtPnNldEpTRW50cnlwb2ludENhbGxlZSh2
bSwgY2FsbGVlSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgICAgICByZXN1bHQt
PnNldFdhc21FbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRD
YWxsZWUpOwotICAgICAgICB9KTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgc3RhdGUsIHN0cnVjdHVyZSwgYmFzZSArIGJ5
dGVPZmZzZXQsIGJ5dGVTaXplKTsKIH0KIAogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvciog
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwCmluZGV4IGYxN2YyOWRmOTg1MGMzYzhmNDY0YTJmZTE2MDZmNzRkYWNlMDAy
M2EuLjYyMzJjMjQxY2U0MmRjZjQzNzU4MGE3NzRhNzE5Yjg3MTA0Y2IxNjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5jcHAKQEAgLTkyLDEwICs5MiwxMSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpsaW5rKEV4ZWNTdGF0ZSogc3RhdGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdAogICAg
IGF1dG8qIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKICAg
ICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBpbnN0YW5jZS0+bW9kdWxlKCk7CisgICAg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gaW5zdGFuY2UtPmNvZGVCbG9jaygp
OwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9
IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKIAogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRT
eW1ib2xUYWJsZSA9IG1vZHVsZS0+ZXhwb3J0U3ltYm9sVGFibGUoKTsKLSAgICB1bnNpZ25lZCBm
dW5jdGlvbkltcG9ydENvdW50ID0gbW9kdWxlLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CisgICAg
dW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCA9IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRD
b3VudCgpOwogCiAgICAgLy8gRklYTUUgd2lyZSB1cCB0aGUgaW1wb3J0cy4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTExOAogCkBAIC0xMTYsOCArMTE3LDggQEAg
dm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3QKICAgICAgICAgICAgIC8vICAgICBhLiBMZXQgZnVuYyBi
ZSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0IGNyZWF0ZWQgZnJvbSBjLgogICAg
ICAgICAgICAgLy8gICAgIGIuIEFwcGVuZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgLy8g
ICAgIGMuIFJldHVybiBmdW5jLgotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNF
bnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxl
ZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAgIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAg
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53
YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7
CiAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVs
ZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwog
ICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBXYXNtOjpTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZ2bSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIGV4cC5maWVs
ZC5zdHJpbmcoKSwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRD
YWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKQEAgLTE3OCwxMiArMTc5LDEyIEBAIHZvaWQgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0ZSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0CiAgICAgICAgIC8vIFRoZSBzdGFydCBmdW5jdGlvbiBtdXN0IG5vdCB0YWtl
IGFueSBhcmd1bWVudHMgb3IgcmV0dXJuIGFueXRoaW5nLiBUaGlzIGlzIGVuZm9yY2VkIGJ5IHRo
ZSBwYXJzZXIuCiAgICAgICAgIEFTU0VSVCghc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwog
ICAgICAgICBBU1NFUlQoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPT0gV2FzbTo6Vm9pZCk7Ci0g
ICAgICAgIGlmIChzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1vZHVsZS0+ZnVuY3Rpb25JbXBv
cnRDb3VudCgpKSB7CisgICAgICAgIGlmIChzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA8IGNvZGVC
bG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7CiAgICAgICAgICAgICBKU0NlbGwqIHN0YXJ0
RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3Bh
Y2UpLT5nZXQoKTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIHN0
YXJ0RnVuY3Rpb24pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSlNXZWJBc3NlbWJs
eUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAg
ICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT53
YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbklu
ZGV4U3BhY2UpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50
Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwogICAg
ICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCks
ICJzdGFydCIsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2Fs
bGVlLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZt
LCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgIH0KQEAgLTIwNyw2ICsyMDgsNyBAQCBKU1ZhbHVl
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIHN0YXRlKQogCiAg
ICAgewogICAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBtX2luc3RhbmNlLT5t
b2R1bGUoKTsKKyAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gbV9p
bnN0YW5jZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKICAg
ICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IG1faW5zdGFuY2UtPnRhYmxlKCk7CiAg
ICAgICAgIGZvciAoY29uc3QgV2FzbTo6RWxlbWVudCYgZWxlbWVudCA6IG1vZHVsZUluZm9ybWF0
aW9uLmVsZW1lbnRzKSB7CkBAIC0yMjksMTMgKzIzMSwxMyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIHN0YXRlKQogICAgICAgICAgICAgICAg
IC8vIGZvciB0aGUgaW1wb3J0LgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKICAgICAgICAgICAgICAgICB1aW50MzJfdCBm
dW5jdGlvbkluZGV4ID0gZWxlbWVudC5mdW5jdGlvbkluZGljZXNbaV07Ci0gICAgICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBtb2R1bGUtPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwgY29kZUJsb2NrLT5mdW5jdGlvbklt
cG9ydENvdW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93Vk1SYW5nZUVycm9yKHN0YXRlLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJFbGVtZW50IGlzIHNldHRpbmcgdGhlIHRhYmxlIHZhbHVlIHdpdGgg
YW4gaW1wb3J0LiBUaGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIEZJWE1FLiIpKSk7CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNF
bnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT53YXNtRW50cnlwb2ludENhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICAgICAg
SlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0Vu
dHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAg
ICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0g
Y29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNp
Z25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJ
bmRleCk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNheSB3ZSBleHBvcnQgbG9jYWwgZnVu
Y3Rpb24gImZvbyIgYXQgZnVuY2l0b24gaW5kZXggMC4KQEAgLTI1NSw4ICsyNTcsOCBAQCBKU1Zh
bHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIHN0YXRlKQog
ICAgICAgICBjb25zdCBWZWN0b3I8V2FzbTo6U2VnbWVudDo6UHRyPiYgZGF0YSA9IG1faW5zdGFu
Y2UtPm1vZHVsZSgpLT5tb2R1bGVJbmZvcm1hdGlvbigpLmRhdGE7CiAgICAgICAgIEpTV2ViQXNz
ZW1ibHlNZW1vcnkqIGpzTWVtb3J5ID0gbV9pbnN0YW5jZS0+bWVtb3J5KCk7CiAgICAgICAgIGlm
ICghZGF0YS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGpzTWVtb3J5LT5tZW1vcnkoKS0+bWVtb3J5KCkpOwotICAg
ICAgICAgICAgdWludDY0X3Qgc2l6ZUluQnl0ZXMgPSBqc01lbW9yeS0+bWVtb3J5KCktPnNpemUo
KTsKKyAgICAgICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGpzTWVtb3J5LT5tZW1vcnkoKS5tZW1vcnkoKSk7CisgICAgICAgICAgICB1aW50NjRfdCBz
aXplSW5CeXRlcyA9IGpzTWVtb3J5LT5tZW1vcnkoKS5zaXplKCk7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHNlZ21lbnQgOiBkYXRhKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQtPnNp
emVJbkJ5dGVzKSB7CiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuaCBiL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cu
aAppbmRleCAxM2Y5MTNiZDViYWU2MDI5MWRkNTM4ZjdmYTU4Mzg4Yzg4ZWZiYzkwLi4wYjA4NDg4
YjIwZTUwMzFjMDA2Njk5YWU2MGNkZWUyNGEwYzk3YmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9EYXRhTG9nLmgKKysrIGIvU291cmNlL1dURi93dGYvRGF0YUxvZy5oCkBAIC00OCwxMyAr
NDgsMjkgQEAgdm9pZCBkYXRhTG9nKGNvbnN0IFR5cGVzJi4uLiB2YWx1ZXMpCiB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBUeXBlcz4KIHZvaWQgZGF0YUxvZ0xuKGNvbnN0IFR5cGVzJi4uLiB2YWx1ZXMp
CiB7Ci0gICAgZGF0YUZpbGUoKS5wcmludCh2YWx1ZXMuLi4sICJcbiIpOworICAgIGRhdGFMb2co
dmFsdWVzLi4uLCAiXG4iKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+Cit2b2lk
IGRhdGFMb2dJZihib29sIHNob3VsZExvZywgY29uc3QgVHlwZXMmLi4uIHZhbHVlcykKK3sKKyAg
ICBpZiAoc2hvdWxkTG9nKQorICAgICAgICBkYXRhTG9nKHZhbHVlcy4uLik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lLi4uIFR5cGVzPgordm9pZCBkYXRhTG9nTG5JZihib29sIHNob3VsZExvZywg
Y29uc3QgVHlwZXMmLi4uIHZhbHVlcykKK3sKKyAgICBpZiAoc2hvdWxkTG9nKQorICAgICAgICBk
YXRhTG9nTG4odmFsdWVzLi4uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdU
Rjo6ZGF0YUxvZzsKIHVzaW5nIFdURjo6ZGF0YUxvZ0xuOwordXNpbmcgV1RGOjpkYXRhTG9nSWY7
Cit1c2luZyBXVEY6OmRhdGFMb2dMbklmOwogdXNpbmcgV1RGOjpkYXRhTG9nRjsKIHVzaW5nIFdU
Rjo6ZGF0YUxvZ0ZTdHJpbmc7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZi5oIGIv
U291cmNlL1dURi93dGYvUmVmLmgKaW5kZXggYjNhYzRmYmM1YmE1MDlhNTNjMjQxMGU0YmUyODQw
YzRmMGI5NzUyYS4uODMwOTY0ZmViZWE2NjFhZDc3ZDc2NmM0OGQ2NDIxZDk5MmM2NTBiZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmLmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmLmgK
QEAgLTEzNyw2ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgVCogcHRyKCkgY29uc3QgeyBBU1NFUlQo
bV9wdHIpOyByZXR1cm4gbV9wdHI7IH0KICAgICBUJiBnZXQoKSBjb25zdCB7IEFTU0VSVChtX3B0
cik7IHJldHVybiAqbV9wdHI7IH0KICAgICBvcGVyYXRvciBUJigpIGNvbnN0IHsgQVNTRVJUKG1f
cHRyKTsgcmV0dXJuICptX3B0cjsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBBU1NF
UlQobV9wdHIpOyByZXR1cm4gISptX3B0cjsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4g
UmVmPFQ+IHJlcGxhY2UoUmVmPFU+JiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIApkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RyYXAtbG9hZC0yLmpzIGIvSlNUZXN0cy93
YXNtL2Z1bmN0aW9uLXRlc3RzL3RyYXAtbG9hZC0yLmpzCmluZGV4IGRmZTkxN2NlZTJmOWM4ZjE3
M2YyMjIyODExODRhOWU2OGVlZGNkNmIuLjZiYjVhN2UzMmUxY2QyZGExM2ZlMWI3NGRhMmI2ZmJm
NTdiNzdjMTggMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy90cmFwLWxv
YWQtMi5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdHJhcC1sb2FkLTIuanMK
QEAgLTQsMjEgKzQsNiBAQCBpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJwog
Y29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7CiBjb25zdCBudW1QYWdlcyA9IDEwOwogCi1jb25z
dCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCi0gICAgLlR5cGUoKS5FbmQoKQotICAgIC5JbXBv
cnQoKQotICAgICAgICAuTWVtb3J5KCJhIiwgImIiLCB7aW5pdGlhbDogbnVtUGFnZXN9KQotICAg
IC5FbmQoKQotICAgIC5GdW5jdGlvbigpLkVuZCgpCi0gICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJm
b28iKS5FbmQoKQotICAgIC5Db2RlKCkKLSAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1z
OiBbImkzMiJdLCByZXQ6ICJpMzIifSkKLSAgICAgICAgICAgIC5HZXRMb2NhbCgwKQotICAgICAg
ICAgICAgLkkzMkxvYWQoMiwgMCkKLSAgICAgICAgICAgIC5SZXR1cm4oKQotICAgICAgICAuRW5k
KCkKLSAgICAuRW5kKCk7Ci0KIGZ1bmN0aW9uIHdhc21GcmFtZUNvdW50RnJvbUVycm9yKGUpIHsK
ICAgICBsZXQgc3RhY2tGcmFtZXMgPSBlLnN0YWNrLnNwbGl0KCJcbiIpLmZpbHRlcigocykgPT4g
cy5pbmRleE9mKCI8d2FzbT5AW3dhc20gY29kZV0iKSAhPT0gLTEpOwogICAgIHJldHVybiBzdGFj
a0ZyYW1lcy5sZW5ndGg7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3BlYy10ZXN0cy9mbG9h
dF9tZW1vcnkud2FzdC5qcyBiL0pTVGVzdHMvd2FzbS9zcGVjLXRlc3RzL2Zsb2F0X21lbW9yeS53
YXN0LmpzCmluZGV4IDgzYzM1MDhkODc0NWM0Yzg4ZDhjYjdhM2M2ZDQxOGJlYjlmZTEyOWMuLjAx
YjNiMWUwYzBmOGYxNWIzYzhlY2ExNTg1MGQzNjMzZGE0MWNhMTcgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvd2FzbS9zcGVjLXRlc3RzL2Zsb2F0X21lbW9yeS53YXN0LmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9zcGVjLXRlc3RzL2Zsb2F0X21lbW9yeS53YXN0LmpzCkBAIC0xMDcsNzggKzEwNyw3IEBAIGFz
c2VydF9yZXR1cm4oKCkgPT4gJCQuZXhwb3J0c1siZjMyLmxvYWQiXSgpLCBmMzIoMC4wKSk7CiAk
JC5leHBvcnRzWyJpMzIuc3RvcmUiXSgpOwogYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBvcnRz
WyJpMzIubG9hZCJdKCksIDIxNDExOTIxOTIpOwogYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBv
cnRzWyJhc3NlcnRfMiJdKCkpOworCiAkJCA9IGluc3RhbmNlKCJceDAwXHg2MVx4NzNceDZkXHgw
MVx4MDBceDAwXHgwMFx4MDFceDBjXHgwM1x4NjBceDAwXHgwMVx4N2NceDYwXHgwMFx4MDFceDdl
XHg2MFx4MDBceDAwXHgwM1x4MGVceDBkXHgwMFx4MDFceDAyXHgwMlx4MDJceDAyXHgwMlx4MDJc
eDAyXHgwMlx4MDJceDAyXHgwMlx4MDVceDA0XHgwMVx4MDFceDAxXHgwMVx4MDdceDhmXHgwMVx4
MGRceDA4XHg2Nlx4MzZceDM0XHgyZVx4NmNceDZmXHg2MVx4NjRceDAwXHgwMFx4MDhceDY5XHgz
Nlx4MzRceDJlXHg2Y1x4NmZceDYxXHg2NFx4MDBceDAxXHgwOVx4NjZceDM2XHgzNFx4MmVceDcz
XHg3NFx4NmZceDcyXHg2NVx4MDBceDAyXHgwOVx4NjlceDM2XHgzNFx4MmVceDczXHg3NFx4NmZc
eDcyXHg2NVx4MDBceDAzXHgwNVx4NzJceDY1XHg3M1x4NjVceDc0XHgwMFx4MDRceDA4XHg2MVx4
NzNceDczXHg2NVx4NzJceDc0XHg1Zlx4MzBceDAwXHgwNVx4MDhceDYxXHg3M1x4NzNceDY1XHg3
Mlx4NzRceDVmXHgzMVx4MDBceDA2XHgwOFx4NjFceDczXHg3M1x4NjVceDcyXHg3NFx4NWZceDMy
XHgwMFx4MDdceDA4XHg2MVx4NzNceDczXHg2NVx4NzJceDc0XHg1Zlx4MzNceDAwXHgwOFx4MDhc
eDYxXHg3M1x4NzNceDY1XHg3Mlx4NzRceDVmXHgzNFx4MDBceDA5XHgwOFx4NjFceDczXHg3M1x4
NjVceDcyXHg3NFx4NWZceDM1XHgwMFx4MGFceDA4XHg2MVx4NzNceDczXHg2NVx4NzJceDc0XHg1
Zlx4MzZceDAwXHgwYlx4MDhceDYxXHg3M1x4NzNceDY1XHg3Mlx4NzRceDVmXHgzN1x4MDBceDBj
XHgwYVx4ZjVceDAxXHgwZFx4MDdceDAwXHg0MVx4MDBceDJiXHgwM1x4MDBceDBiXHgwN1x4MDBc
eDQxXHgwMFx4MjlceDAzXHgwMFx4MGJceDEwXHgwMFx4NDFceDAwXHg0NFx4MDBceDAwXHgwMFx4
MDBceDAwXHgwMFx4ZjRceDdmXHgzOVx4MDNceDAwXHgwYlx4MTJceDAwXHg0MVx4MDBceDQyXHg4
MFx4ODBceDgwXHg4MFx4ODBceDgwXHg4MFx4ZmFceGZmXHgwMFx4MzdceDAzXHgwMFx4MGJceDA5
XHgwMFx4NDFceDAwXHg0Mlx4MDBceDM3XHgwM1x4MDBceDBiXHgxOFx4MDBceDAyXHg0MFx4MTBc
eDAxXHg0Mlx4ODBceDgwXHg4MFx4ODBceDgwXHg4MFx4ODBceGZhXHhmZlx4MDBceDUxXHg0NVx4
MGRceDAwXHgwZlx4MGJceDAwXHgwYlx4MThceDAwXHgwMlx4NDBceDEwXHgwMFx4YmRceDQ0XHgw
MFx4MDBceDAwXHgwMFx4MDBceDAwXHhmNFx4N2ZceGJkXHg1MVx4NDVceDBkXHgwMFx4MGZceDBi
XHgwMFx4MGJceDBmXHgwMFx4MDJceDQwXHgxMFx4MDFceDQyXHgwMFx4NTFceDQ1XHgwZFx4MDBc
eDBmXHgwYlx4MDBceDBiXHgxOFx4MDBceDAyXHg0MFx4MTBceDAxXHg0Mlx4ODBceDgwXHg4MFx4
ODBceDgwXHg4MFx4ODBceGZhXHhmZlx4MDBceDUxXHg0NVx4MGRceDAwXHgwZlx4MGJceDAwXHgw
Ylx4MThceDAwXHgwMlx4NDBceDEwXHgwMFx4YmRceDQ0XHgwMFx4MDBceDAwXHgwMFx4MDBceDAw
XHhmNFx4N2ZceGJkXHg1MVx4NDVceDBkXHgwMFx4MGZceDBiXHgwMFx4MGJceDBmXHgwMFx4MDJc
eDQwXHgxMFx4MDFceDQyXHgwMFx4NTFceDQ1XHgwZFx4MDBceDBmXHgwYlx4MDBceDBiXHgxOFx4
MDBceDAyXHg0MFx4MTBceDAxXHg0Mlx4ODBceDgwXHg4MFx4ODBceDgwXHg4MFx4ODBceGZhXHhm
Zlx4MDBceDUxXHg0NVx4MGRceDAwXHgwZlx4MGJceDAwXHgwYlx4MThceDAwXHgwMlx4NDBceDEw
XHgwMFx4YmRceDQ0XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhmNFx4N2ZceGJkXHg1MVx4NDVc
eDBkXHgwMFx4MGZceDBiXHgwMFx4MGJceDBiXHgwZVx4MDFceDAwXHg0MVx4MDBceDBiXHgwOFx4
MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ZjRceDdmIik7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQk
LmV4cG9ydHNbImFzc2VydF8wIl0oKSk7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNb
ImFzc2VydF8xIl0oKSk7Ci0kJC5leHBvcnRzWyJyZXNldCJdKCk7Ci1hc3NlcnRfcmV0dXJuKCgp
ID0+ICQkLmV4cG9ydHNbImFzc2VydF8yIl0oKSk7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4
cG9ydHNbImY2NC5sb2FkIl0oKSwgMC4wKTsKLSQkLmV4cG9ydHNbImY2NC5zdG9yZSJdKCk7Ci1h
c3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImFzc2VydF8zIl0oKSk7Ci1hc3NlcnRfcmV0
dXJuKCgpID0+ICQkLmV4cG9ydHNbImFzc2VydF80Il0oKSk7Ci0kJC5leHBvcnRzWyJyZXNldCJd
KCk7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImFzc2VydF81Il0oKSk7Ci1hc3Nl
cnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImY2NC5sb2FkIl0oKSwgMC4wKTsKLSQkLmV4cG9y
dHNbImk2NC5zdG9yZSJdKCk7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImFzc2Vy
dF82Il0oKSk7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImFzc2VydF83Il0oKSk7
Ci0kJCA9IGluc3RhbmNlKCJceDAwXHg2MVx4NzNceDZkXHgwMVx4MDBceDAwXHgwMFx4MDFceDBj
XHgwM1x4NjBceDAwXHgwMVx4N2RceDYwXHgwMFx4MDFceDdmXHg2MFx4MDBceDAwXHgwM1x4MDlc
eDA4XHgwMFx4MDFceDAyXHgwMlx4MDJceDAyXHgwMlx4MDJceDA1XHgwNFx4MDFceDAxXHgwMVx4
MDFceDA3XHg1OFx4MDhceDA4XHg2Nlx4MzNceDMyXHgyZVx4NmNceDZmXHg2MVx4NjRceDAwXHgw
MFx4MDhceDY5XHgzM1x4MzJceDJlXHg2Y1x4NmZceDYxXHg2NFx4MDBceDAxXHgwOVx4NjZceDMz
XHgzMlx4MmVceDczXHg3NFx4NmZceDcyXHg2NVx4MDBceDAyXHgwOVx4NjlceDMzXHgzMlx4MmVc
eDczXHg3NFx4NmZceDcyXHg2NVx4MDBceDAzXHgwNVx4NzJceDY1XHg3M1x4NjVceDc0XHgwMFx4
MDRceDA4XHg2MVx4NzNceDczXHg2NVx4NzJceDc0XHg1Zlx4MzBceDAwXHgwNVx4MDhceDYxXHg3
M1x4NzNceDY1XHg3Mlx4NzRceDVmXHgzMVx4MDBceDA2XHgwOFx4NjFceDczXHg3M1x4NjVceDcy
XHg3NFx4NWZceDMyXHgwMFx4MDdceDBhXHg3NVx4MDhceDA3XHgwMFx4NDFceDAxXHgyYVx4MDJc
eDAwXHgwYlx4MDdceDAwXHg0MVx4MDFceDI4XHgwMlx4MDBceDBiXHgwY1x4MDBceDQxXHgwMVx4
NDNceDAwXHgwMFx4YTBceDdmXHgzOFx4MDJceDAwXHgwYlx4MGRceDAwXHg0MVx4MDFceDQxXHg4
MFx4ODBceDgwXHhmZFx4MDdceDM2XHgwMlx4MDBceDBiXHgwOVx4MDBceDQxXHgwMVx4NDFceDAw
XHgzNlx4MDJceDAwXHgwYlx4MTRceDAwXHgwMlx4NDBceDEwXHgwMFx4YmNceDQzXHgwMFx4MDBc
eGEwXHg3Zlx4YmNceDQ2XHg0NVx4MGRceDAwXHgwZlx4MGJceDAwXHgwYlx4MTRceDAwXHgwMlx4
NDBceDEwXHgwMFx4YmNceDQzXHgwMFx4MDBceGEwXHg3Zlx4YmNceDQ2XHg0NVx4MGRceDAwXHgw
Zlx4MGJceDAwXHgwYlx4MTRceDAwXHgwMlx4NDBceDEwXHgwMFx4YmNceDQzXHgwMFx4MDBceGEw
XHg3Zlx4YmNceDQ2XHg0NVx4MGRceDAwXHgwZlx4MGJceDAwXHgwYlx4MGJceDBiXHgwMVx4MDBc
eDQxXHgwMFx4MGJceDA1XHgwMFx4MDBceDAwXHhhMFx4N2YiKTsKLWFzc2VydF9yZXR1cm4oKCkg
PT4gJCQuZXhwb3J0c1siaTMyLmxvYWQiXSgpLCAyMTQxMTkyMTkyKTsKLWFzc2VydF9yZXR1cm4o
KCkgPT4gJCQuZXhwb3J0c1siYXNzZXJ0XzAiXSgpKTsKLSQkLmV4cG9ydHNbInJlc2V0Il0oKTsK
LWFzc2VydF9yZXR1cm4oKCkgPT4gJCQuZXhwb3J0c1siaTMyLmxvYWQiXSgpLCAwKTsKLWFzc2Vy
dF9yZXR1cm4oKCkgPT4gJCQuZXhwb3J0c1siZjMyLmxvYWQiXSgpLCBmMzIoMC4wKSk7Ci0kJC5l
eHBvcnRzWyJmMzIuc3RvcmUiXSgpOwotYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBvcnRzWyJp
MzIubG9hZCJdKCksIDIxNDExOTIxOTIpOwotYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBvcnRz
WyJhc3NlcnRfMSJdKCkpOwotJCQuZXhwb3J0c1sicmVzZXQiXSgpOwotYXNzZXJ0X3JldHVybigo
KSA9PiAkJC5leHBvcnRzWyJpMzIubG9hZCJdKCksIDApOwotYXNzZXJ0X3JldHVybigoKSA9PiAk
JC5leHBvcnRzWyJmMzIubG9hZCJdKCksIGYzMigwLjApKTsKLSQkLmV4cG9ydHNbImkzMi5zdG9y
ZSJdKCk7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImkzMi5sb2FkIl0oKSwgMjE0
MTE5MjE5Mik7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImFzc2VydF8yIl0oKSk7
Ci0kJCA9IGluc3RhbmNlKCJceDAwXHg2MVx4NzNceDZkXHgwMVx4MDBceDAwXHgwMFx4MDFceDBj
XHgwM1x4NjBceDAwXHgwMVx4N2NceDYwXHgwMFx4MDFceDdlXHg2MFx4MDBceDAwXHgwM1x4MGVc
eDBkXHgwMFx4MDFceDAyXHgwMlx4MDJceDAyXHgwMlx4MDJceDAyXHgwMlx4MDJceDAyXHgwMlx4
MDVceDA0XHgwMVx4MDFceDAxXHgwMVx4MDdceDhmXHgwMVx4MGRceDA4XHg2Nlx4MzZceDM0XHgy
ZVx4NmNceDZmXHg2MVx4NjRceDAwXHgwMFx4MDhceDY5XHgzNlx4MzRceDJlXHg2Y1x4NmZceDYx
XHg2NFx4MDBceDAxXHgwOVx4NjZceDM2XHgzNFx4MmVceDczXHg3NFx4NmZceDcyXHg2NVx4MDBc
eDAyXHgwOVx4NjlceDM2XHgzNFx4MmVceDczXHg3NFx4NmZceDcyXHg2NVx4MDBceDAzXHgwNVx4
NzJceDY1XHg3M1x4NjVceDc0XHgwMFx4MDRceDA4XHg2MVx4NzNceDczXHg2NVx4NzJceDc0XHg1
Zlx4MzBceDAwXHgwNVx4MDhceDYxXHg3M1x4NzNceDY1XHg3Mlx4NzRceDVmXHgzMVx4MDBceDA2
XHgwOFx4NjFceDczXHg3M1x4NjVceDcyXHg3NFx4NWZceDMyXHgwMFx4MDdceDA4XHg2MVx4NzNc
eDczXHg2NVx4NzJceDc0XHg1Zlx4MzNceDAwXHgwOFx4MDhceDYxXHg3M1x4NzNceDY1XHg3Mlx4
NzRceDVmXHgzNFx4MDBceDA5XHgwOFx4NjFceDczXHg3M1x4NjVceDcyXHg3NFx4NWZceDM1XHgw
MFx4MGFceDA4XHg2MVx4NzNceDczXHg2NVx4NzJceDc0XHg1Zlx4MzZceDAwXHgwYlx4MDhceDYx
XHg3M1x4NzNceDY1XHg3Mlx4NzRceDVmXHgzN1x4MDBceDBjXHgwYVx4ZjVceDAxXHgwZFx4MDdc
eDAwXHg0MVx4MDFceDJiXHgwM1x4MDBceDBiXHgwN1x4MDBceDQxXHgwMVx4MjlceDAzXHgwMFx4
MGJceDEwXHgwMFx4NDFceDAxXHg0NFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ZjRceDdmXHgz
OVx4MDNceDAwXHgwYlx4MTJceDAwXHg0MVx4MDFceDQyXHg4MFx4ODBceDgwXHg4MFx4ODBceDgw
XHg4MFx4ZmFceGZmXHgwMFx4MzdceDAzXHgwMFx4MGJceDA5XHgwMFx4NDFceDAxXHg0Mlx4MDBc
eDM3XHgwM1x4MDBceDBiXHgxOFx4MDBceDAyXHg0MFx4MTBceDAxXHg0Mlx4ODBceDgwXHg4MFx4
ODBceDgwXHg4MFx4ODBceGZhXHhmZlx4MDBceDUxXHg0NVx4MGRceDAwXHgwZlx4MGJceDAwXHgw
Ylx4MThceDAwXHgwMlx4NDBceDEwXHgwMFx4YmRceDQ0XHgwMFx4MDBceDAwXHgwMFx4MDBceDAw
XHhmNFx4N2ZceGJkXHg1MVx4NDVceDBkXHgwMFx4MGZceDBiXHgwMFx4MGJceDBmXHgwMFx4MDJc
eDQwXHgxMFx4MDFceDQyXHgwMFx4NTFceDQ1XHgwZFx4MDBceDBmXHgwYlx4MDBceDBiXHgxOFx4
MDBceDAyXHg0MFx4MTBceDAxXHg0Mlx4ODBceDgwXHg4MFx4ODBceDgwXHg4MFx4ODBceGZhXHhm
Zlx4MDBceDUxXHg0NVx4MGRceDAwXHgwZlx4MGJceDAwXHgwYlx4MThceDAwXHgwMlx4NDBceDEw
XHgwMFx4YmRceDQ0XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhmNFx4N2ZceGJkXHg1MVx4NDVc
eDBkXHgwMFx4MGZceDBiXHgwMFx4MGJceDBmXHgwMFx4MDJceDQwXHgxMFx4MDFceDQyXHgwMFx4
NTFceDQ1XHgwZFx4MDBceDBmXHgwYlx4MDBceDBiXHgxOFx4MDBceDAyXHg0MFx4MTBceDAxXHg0
Mlx4ODBceDgwXHg4MFx4ODBceDgwXHg4MFx4ODBceGZhXHhmZlx4MDBceDUxXHg0NVx4MGRceDAw
XHgwZlx4MGJceDAwXHgwYlx4MThceDAwXHgwMlx4NDBceDEwXHgwMFx4YmRceDQ0XHgwMFx4MDBc
eDAwXHgwMFx4MDBceDAwXHhmNFx4N2ZceGJkXHg1MVx4NDVceDBkXHgwMFx4MGZceDBiXHgwMFx4
MGJceDBiXHgwZlx4MDFceDAwXHg0MVx4MDBceDBiXHgwOVx4MDBceDAwXHgwMFx4MDBceDAwXHgw
MFx4MDBceGY0XHg3ZiIpOwotYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBvcnRzWyJhc3NlcnRf
MCJdKCkpOwotYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBvcnRzWyJhc3NlcnRfMSJdKCkpOwot
JCQuZXhwb3J0c1sicmVzZXQiXSgpOwotYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBvcnRzWyJh
c3NlcnRfMiJdKCkpOwotYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBvcnRzWyJmNjQubG9hZCJd
KCksIDAuMCk7Ci0kJC5leHBvcnRzWyJmNjQuc3RvcmUiXSgpOwotYXNzZXJ0X3JldHVybigoKSA9
PiAkJC5leHBvcnRzWyJhc3NlcnRfMyJdKCkpOwotYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBv
cnRzWyJhc3NlcnRfNCJdKCkpOwotJCQuZXhwb3J0c1sicmVzZXQiXSgpOwotYXNzZXJ0X3JldHVy
bigoKSA9PiAkJC5leHBvcnRzWyJhc3NlcnRfNSJdKCkpOwotYXNzZXJ0X3JldHVybigoKSA9PiAk
JC5leHBvcnRzWyJmNjQubG9hZCJdKCksIDAuMCk7Ci0kJC5leHBvcnRzWyJpNjQuc3RvcmUiXSgp
OwotYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBvcnRzWyJhc3NlcnRfNiJdKCkpOwotYXNzZXJ0
X3JldHVybigoKSA9PiAkJC5leHBvcnRzWyJhc3NlcnRfNyJdKCkpOwotJCQgPSBpbnN0YW5jZSgi
XHgwMFx4NjFceDczXHg2ZFx4MDFceDAwXHgwMFx4MDBceDAxXHgwY1x4MDNceDYwXHgwMFx4MDFc
eDdkXHg2MFx4MDBceDAxXHg3Zlx4NjBceDAwXHgwMFx4MDNceDA5XHgwOFx4MDBceDAxXHgwMlx4
MDJceDAyXHgwMlx4MDJceDAyXHgwNVx4MDRceDAxXHgwMVx4MDFceDAxXHgwN1x4NThceDA4XHgw
OFx4NjZceDMzXHgzMlx4MmVceDZjXHg2Zlx4NjFceDY0XHgwMFx4MDBceDA4XHg2OVx4MzNceDMy
XHgyZVx4NmNceDZmXHg2MVx4NjRceDAwXHgwMVx4MDlceDY2XHgzM1x4MzJceDJlXHg3M1x4NzRc
eDZmXHg3Mlx4NjVceDAwXHgwMlx4MDlceDY5XHgzM1x4MzJceDJlXHg3M1x4NzRceDZmXHg3Mlx4
NjVceDAwXHgwM1x4MDVceDcyXHg2NVx4NzNceDY1XHg3NFx4MDBceDA0XHgwOFx4NjFceDczXHg3
M1x4NjVceDcyXHg3NFx4NWZceDMwXHgwMFx4MDVceDA4XHg2MVx4NzNceDczXHg2NVx4NzJceDc0
XHg1Zlx4MzFceDAwXHgwNlx4MDhceDYxXHg3M1x4NzNceDY1XHg3Mlx4NzRceDVmXHgzMlx4MDBc
eDA3XHgwYVx4NzVceDA4XHgwN1x4MDBceDQxXHgwMFx4MmFceDAyXHgwMFx4MGJceDA3XHgwMFx4
NDFceDAwXHgyOFx4MDJceDAwXHgwYlx4MGNceDAwXHg0MVx4MDBceDQzXHgwMVx4MDBceGQwXHg3
Zlx4MzhceDAyXHgwMFx4MGJceDBkXHgwMFx4NDFceDAwXHg0MVx4ODFceDgwXHhjMFx4ZmVceDA3
XHgzNlx4MDJceDAwXHgwYlx4MDlceDAwXHg0MVx4MDBceDQxXHgwMFx4MzZceDAyXHgwMFx4MGJc
eDE0XHgwMFx4MDJceDQwXHgxMFx4MDBceGJjXHg0M1x4MDFceDAwXHhkMFx4N2ZceGJjXHg0Nlx4
NDVceDBkXHgwMFx4MGZceDBiXHgwMFx4MGJceDE0XHgwMFx4MDJceDQwXHgxMFx4MDBceGJjXHg0
M1x4MDFceDAwXHhkMFx4N2ZceGJjXHg0Nlx4NDVceDBkXHgwMFx4MGZceDBiXHgwMFx4MGJceDE0
XHgwMFx4MDJceDQwXHgxMFx4MDBceGJjXHg0M1x4MDFceDAwXHhkMFx4N2ZceGJjXHg0Nlx4NDVc
eDBkXHgwMFx4MGZceDBiXHgwMFx4MGJceDBiXHgwYVx4MDFceDAwXHg0MVx4MDBceDBiXHgwNFx4
MDFceDAwXHhkMFx4N2YiKTsKLWFzc2VydF9yZXR1cm4oKCkgPT4gJCQuZXhwb3J0c1siaTMyLmxv
YWQiXSgpLCAyMTQ0MzM3OTIxKTsKLWFzc2VydF9yZXR1cm4oKCkgPT4gJCQuZXhwb3J0c1siYXNz
ZXJ0XzAiXSgpKTsKLSQkLmV4cG9ydHNbInJlc2V0Il0oKTsKLWFzc2VydF9yZXR1cm4oKCkgPT4g
JCQuZXhwb3J0c1siaTMyLmxvYWQiXSgpLCAwKTsKLWFzc2VydF9yZXR1cm4oKCkgPT4gJCQuZXhw
b3J0c1siZjMyLmxvYWQiXSgpLCBmMzIoMC4wKSk7Ci0kJC5leHBvcnRzWyJmMzIuc3RvcmUiXSgp
OwotYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBvcnRzWyJpMzIubG9hZCJdKCksIDIxNDQzMzc5
MjEpOwotYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBvcnRzWyJhc3NlcnRfMSJdKCkpOwotJCQu
ZXhwb3J0c1sicmVzZXQiXSgpOwotYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBvcnRzWyJpMzIu
bG9hZCJdKCksIDApOwotYXNzZXJ0X3JldHVybigoKSA9PiAkJC5leHBvcnRzWyJmMzIubG9hZCJd
KCksIGYzMigwLjApKTsKLSQkLmV4cG9ydHNbImkzMi5zdG9yZSJdKCk7Ci1hc3NlcnRfcmV0dXJu
KCgpID0+ICQkLmV4cG9ydHNbImkzMi5sb2FkIl0oKSwgMjE0NDMzNzkyMSk7Ci1hc3NlcnRfcmV0
dXJuKCgpID0+ICQkLmV4cG9ydHNbImFzc2VydF8yIl0oKSk7Ci0kJCA9IGluc3RhbmNlKCJceDAw
XHg2MVx4NzNceDZkXHgwMVx4MDBceDAwXHgwMFx4MDFceDBjXHgwM1x4NjBceDAwXHgwMVx4N2Nc
eDYwXHgwMFx4MDFceDdlXHg2MFx4MDBceDAwXHgwM1x4MGVceDBkXHgwMFx4MDFceDAyXHgwMlx4
MDJceDAyXHgwMlx4MDJceDAyXHgwMlx4MDJceDAyXHgwMlx4MDVceDA0XHgwMVx4MDFceDAxXHgw
MVx4MDdceDhmXHgwMVx4MGRceDA4XHg2Nlx4MzZceDM0XHgyZVx4NmNceDZmXHg2MVx4NjRceDAw
XHgwMFx4MDhceDY5XHgzNlx4MzRceDJlXHg2Y1x4NmZceDYxXHg2NFx4MDBceDAxXHgwOVx4NjZc
eDM2XHgzNFx4MmVceDczXHg3NFx4NmZceDcyXHg2NVx4MDBceDAyXHgwOVx4NjlceDM2XHgzNFx4
MmVceDczXHg3NFx4NmZceDcyXHg2NVx4MDBceDAzXHgwNVx4NzJceDY1XHg3M1x4NjVceDc0XHgw
MFx4MDRceDA4XHg2MVx4NzNceDczXHg2NVx4NzJceDc0XHg1Zlx4MzBceDAwXHgwNVx4MDhceDYx
XHg3M1x4NzNceDY1XHg3Mlx4NzRceDVmXHgzMVx4MDBceDA2XHgwOFx4NjFceDczXHg3M1x4NjVc
eDcyXHg3NFx4NWZceDMyXHgwMFx4MDdceDA4XHg2MVx4NzNceDczXHg2NVx4NzJceDc0XHg1Zlx4
MzNceDAwXHgwOFx4MDhceDYxXHg3M1x4NzNceDY1XHg3Mlx4NzRceDVmXHgzNFx4MDBceDA5XHgw
OFx4NjFceDczXHg3M1x4NjVceDcyXHg3NFx4NWZceDM1XHgwMFx4MGFceDA4XHg2MVx4NzNceDcz
XHg2NVx4NzJceDc0XHg1Zlx4MzZceDAwXHgwYlx4MDhceDYxXHg3M1x4NzNceDY1XHg3Mlx4NzRc
eDVmXHgzN1x4MDBceDBjXHgwYVx4ZjVceDAxXHgwZFx4MDdceDAwXHg0MVx4MDBceDJiXHgwM1x4
MDBceDBiXHgwN1x4MDBceDQxXHgwMFx4MjlceDAzXHgwMFx4MGJceDEwXHgwMFx4NDFceDAwXHg0
NFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4ZmNceDdmXHgzOVx4MDNceDAwXHgwYlx4MTJceDAw
XHg0MVx4MDBceDQyXHg4MVx4ODBceDgwXHg4MFx4ODBceDgwXHg4MFx4ZmVceGZmXHgwMFx4Mzdc
eDAzXHgwMFx4MGJceDA5XHgwMFx4NDFceDAwXHg0Mlx4MDBceDM3XHgwM1x4MDBceDBiXHgxOFx4
MDBceDAyXHg0MFx4MTBceDAxXHg0Mlx4ODFceDgwXHg4MFx4ODBceDgwXHg4MFx4ODBceGZlXHhm
Zlx4MDBceDUxXHg0NVx4MGRceDAwXHgwZlx4MGJceDAwXHgwYlx4MThceDAwXHgwMlx4NDBceDEw
XHgwMFx4YmRceDQ0XHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHhmY1x4N2ZceGJkXHg1MVx4NDVc
eDBkXHgwMFx4MGZceDBiXHgwMFx4MGJceDBmXHgwMFx4MDJceDQwXHgxMFx4MDFceDQyXHgwMFx4
NTFceDQ1XHgwZFx4MDBceDBmXHgwYlx4MDBceDBiXHgxOFx4MDBceDAyXHg0MFx4MTBceDAxXHg0
Mlx4ODFceDgwXHg4MFx4ODBceDgwXHg4MFx4ODBceGZlXHhmZlx4MDBceDUxXHg0NVx4MGRceDAw
XHgwZlx4MGJceDAwXHgwYlx4MThceDAwXHgwMlx4NDBceDEwXHgwMFx4YmRceDQ0XHgwMVx4MDBc
eDAwXHgwMFx4MDBceDAwXHhmY1x4N2ZceGJkXHg1MVx4NDVceDBkXHgwMFx4MGZceDBiXHgwMFx4
MGJceDBmXHgwMFx4MDJceDQwXHgxMFx4MDFceDQyXHgwMFx4NTFceDQ1XHgwZFx4MDBceDBmXHgw
Ylx4MDBceDBiXHgxOFx4MDBceDAyXHg0MFx4MTBceDAxXHg0Mlx4ODFceDgwXHg4MFx4ODBceDgw
XHg4MFx4ODBceGZlXHhmZlx4MDBceDUxXHg0NVx4MGRceDAwXHgwZlx4MGJceDAwXHgwYlx4MThc
eDAwXHgwMlx4NDBceDEwXHgwMFx4YmRceDQ0XHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHhmY1x4
N2ZceGJkXHg1MVx4NDVceDBkXHgwMFx4MGZceDBiXHgwMFx4MGJceDBiXHgwZVx4MDFceDAwXHg0
MVx4MDBceDBiXHgwOFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4ZmNceDdmIik7Ci1hc3NlcnRf
cmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImFzc2VydF8wIl0oKSk7Ci1hc3NlcnRfcmV0dXJuKCgp
ID0+ICQkLmV4cG9ydHNbImFzc2VydF8xIl0oKSk7Ci0kJC5leHBvcnRzWyJyZXNldCJdKCk7Ci1h
c3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImFzc2VydF8yIl0oKSk7Ci1hc3NlcnRfcmV0
dXJuKCgpID0+ICQkLmV4cG9ydHNbImY2NC5sb2FkIl0oKSwgMC4wKTsKLSQkLmV4cG9ydHNbImY2
NC5zdG9yZSJdKCk7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImFzc2VydF8zIl0o
KSk7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImFzc2VydF80Il0oKSk7Ci0kJC5l
eHBvcnRzWyJyZXNldCJdKCk7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImFzc2Vy
dF81Il0oKSk7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNbImY2NC5sb2FkIl0oKSwg
MC4wKTsKLSQkLmV4cG9ydHNbImk2NC5zdG9yZSJdKCk7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQk
LmV4cG9ydHNbImFzc2VydF82Il0oKSk7Ci1hc3NlcnRfcmV0dXJuKCgpID0+ICQkLmV4cG9ydHNb
ImFzc2VydF83Il0oKSk7CisKK2djKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303204</attachid>
            <date>2017-03-02 09:24:54 -0800</date>
            <delta_ts>2017-03-02 09:51:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162693-20170302092453.patch</filename>
            <type>text/plain</type>
            <size>114907</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ODFlYWQzNTM4YmU0Yjc0YzA1ZjlmMDU4Y2UzYTRiNTcyNjgxYTU2Li4xOGZlNmRiMmNhM2IzYzYy
ZDlkYzM3NDk4N2ZkNGRiZDIwZDQyMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzIgQEAKKzIwMTctMDMtMDIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV0FTTSBzaG91bGQgc3VwcG9ydCBmYXN0ZXIgbG9hZHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFk
ZHMgc3VwcG9ydCBmb3IgV2ViQXNzZW1ibHkgdXNpbmcgYSAzMi1iaXQgYWRkcmVzcworICAgICAg
ICBzcGFjZSBmb3IgbWVtb3J5IChhbG9uZyB3aXRoIHNvbWUgZXh0cmEgc3BhY2UgZm9yIG9mZnNl
dAorICAgICAgICBvdmVyZmxvdykuIFdpdGggYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSAod2UgY2Fs
bCB0aGVtCisgICAgICAgIFNpZ25hbGluZy9mYXN0IG1lbW9yaWVzKSwgd2UgcmVzZXJ2ZSB0aGUg
dmlydHVhbCBhZGRyZXNzIHNwYWNlIGZvcgorICAgICAgICAyXjMyICsgb2Zmc2V0IGJ5dGVzIG9m
IG1lbW9yeSBhbmQgb25seSBtYXJrIHRoZSB1c2FibGUgc2VjdGlvbiBhcworICAgICAgICByZWFk
L3dyaXRlLiBJZiB3YXNtIGNvZGUgd291bGQgcmVhZC93cml0ZSBvdXQgb2YgYm91bmRzIHdlIHVz
ZSBhCisgICAgICAgIGN1c3RvbSBzaWduYWwgaGFuZGxlciB0byBjYXRjaCB0aGUgU0lHQlVTLiBU
aGUgc2lnbmFsIGhhbmRsZXIgdGhlbgorICAgICAgICBjaGVja3MgaWYgdGhlIGZhdWx0aW5nIGlu
c3RydWN0aW9uIGlzIHdhc20gY29kZSBhbmQgdGVsbHMgdGhlCisgICAgICAgIHRocmVhZCB0byBy
ZXN1bWUgZXhlY3V0aW5nIGZyb20gdGhlIHdhc20gZXhjZXB0aW9uCisgICAgICAgIGhhbmRsZXIu
IE90aGVyd2lzZSwgdGhlIHNpZ25hbCBoYW5kbGVyIGNyYXNoZXMgdGhlIHByb2Nlc3MsIGFzCisg
ICAgICAgIHVzdWFsLgorCisgICAgICAgIEFsbCBvZiB0aGUgYWxsb2NhdGlvbnMgb2YgdGhlc2Ug
bWVtb3JpZXMgYXJlIG1hbmFnZWQgYnkgdGhlCisgICAgICAgIFdhc206Ok1lbW9yeSBjbGFzcy4g
SW4gb3JkZXIgdG8gYXZvaWQgVExCIGNodXJuIGluIHRoZSBPUyB3ZSBjYWNoZQorICAgICAgICBv
bGQgU2lnbmFsaW5nIG1lbW9yaWVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB1c2UuIFNpbmNlIGdl
dHRpbmcKKyAgICAgICAgdGhlIHdyb25nIG1lbW9yeSBjYW4gY2F1c2UgcmVjb21waWxlcywgd2Ug
dHJ5IHRvIHJlc2VydmUgYSBtZW1vcnkKKyAgICAgICAgZm9yIG1vZHVsZXMgdGhhdCBkbyBub3Qg
aW1wb3J0IGEgbWVtb3J5LiBJZiBhIG1vZHVsZSBkb2VzIGltcG9ydCBhCisgICAgICAgIG1lbW9y
eSwgd2UgdHJ5IHRvIGd1ZXNzIHRoZSB0eXBlIG9mIG1lbW9yeSB3ZSBhcmUgZ29pbmcgdG8gZ2V0
CisgICAgICAgIGJhc2VkIG9uIHRoZSBsYXN0IG9uZSBhbGxvY2F0ZWQuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhbHNvIGNoYW5nZXMgaG93IHRoZSB3YXNtIEpTLWFwaSBtYW5hZ2VzIG9iamVjdHMu
IFNpbmNlCisgICAgICAgIHdlIGNhbiBjb21waWxlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBjb2Rl
LCB0aGlzIHBhdGNoIGFkZHMgYSBuZXcKKyAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBj
bGFzcyB0aGF0IGhvbGRzIGFsbCB0aGUgaW5mb3JtYXRpb24KKyAgICAgICAgc3BlY2lmaWMgdG8g
cnVubmluZyBhIG1vZHVsZSBpbiBhIHBhcnRpY3VsYXIgYm91bmRzIGNoZWNraW5nCisgICAgICAg
IG1vZGUuIEFkZGl0aW9uYWxseSwgdGhlIFdhc206Ok1lbW9yeSBvYmplY3QgaXMgbm93IGEgcmVm
ZXJlbmNlCisgICAgICAgIGNvdW50ZWQgY2xhc3MgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiB0aGUg
SlNXZWJBc3NlbWJseU1lbW9yeQorICAgICAgICBvYmplY3QgYW5kIHRoZSBBcnJheUJ1ZmZlciB0
aGF0IGFsc28gdmlld3MgaXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuY3BwOgorICAgICAgICAo
SlNDOjpKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1Yik6CisgICAgICAgICogaml0L0pJVFRodW5r
cy5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogd2FzbS9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6ZnVuY3Rpb25JbXBvcnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjptb2R1
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpqc0VudHJ5cG9pbnRD
YWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c2V0SlNFbnRyeXBvaW50Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c2V0V2FzbUVudHJ5
cG9pbnRDYWxsZWUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYWxs
ZWVzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZDYWxs
ZWVzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6YWxsb2NhdGlvblNp
emUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Z2V0TWVtb3J5QmFzZUFuZFNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0U3RvcmVPcCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZWdp
c3RlckNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp1bnJlZ2lzdGVyQ29kZSk6CisgICAgICAg
IChKU0M6Oldhc206OmZhc3RNZW1vcnlFbmFibGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5h
YmxlRmFzdE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
YWxsZWUuY3BwLgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6aW1wb3J0RnVuY3Rpb25Db3VudCk6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpoYXNNZW1vcnkpOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vV2FzbU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Om1tYXBCeXRlcyk6
CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjphdmFpbGFibGVGYXN0TWVtb3JpZXMpOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0cnlHZXRGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVsZWFzZUZhc3RNZW1v
cnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6
Oldhc206Ok1lbW9yeTo6Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpk
dW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjptYWtlU3RyaW5nKToKKyAgICAgICAg
KiB3YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvcGVyYXRv
ciBib29sKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpzaXplKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TWVtb3J5OjpjaGVjayk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6TWVt
b3J5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9y
eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbik6Cisg
ICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnRha2VSZXNlcnZlZE1lbW9yeSk6CisgICAgICAgIChK
U0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjptb2RlKToKKyAgICAgICAgKiB3YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6Ok1vZHVsZVBhcnNlcik6CisgICAgICAgICog
d2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnBhcnNlQW5kVmFs
aWRhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW4pOgorICAgICAgICAq
IHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bW9kZSk6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5Q2FsbGVlOjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Ojppc1NhZmVUb1J1bik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpVbmNv
bmRpdGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6bW9kdWxlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1lbW9yeU1vZGUpOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6
SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6
OmJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1l
bW9yeTo6bWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0
T2ZNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNp
emUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1
bGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OlVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1vZHVsZTo6dGFrZVJlc2VydmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6ZnVuY3Rpb25JbXBvcnRDb3VudCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmpzRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjp3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRKU0VudHJ5cG9p
bnRDYWxsZWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpz
ZXRXYXNtRW50cnlwb2ludENhbGxlZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpvZmZzZXRPZkNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjphbGxvY2F0aW9uU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFdlYkFzc2Vt
Ymx5RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNl
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUpOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpldmFsdWF0ZSk6CisKIDIwMTctMDItMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHN0ZDo6
dHVwbGVzIGFzIGtleXMgaW4gSGFzaE1hcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA4OGE1YTk5NTM1MjEwODg4ZjIwNmFmZDU1
NjNiNzU1MWI5ZTY3ODVhLi5iZDI5OGY3MGY3MDJkNTE0YjBhMDc5YTU1MzMwMmRlOTZkMjAyNWM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE3LTAzLTAyICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9t
aWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdBU00gc2hvdWxkIHN1cHBvcnQgZmFzdGVyIGxv
YWRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYy
NjkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IG5ldyBmb3JtcyBvZiBkYXRhTG9nIHRoYXQgdGFrZSBhIGJvb2xlYW4gd2hpY2ggZGVzY3JpYmVz
IGlmIHRoZSBsb2cgc2hvdWxkIGhhcHBlbi4gVGhpcyBtYWtlcyBjYXNlcyB3aGVyZSB3ZSBoYXZl
IGEgc3RhdGljIGNvbnN0IGJvb2wgZm9yIHByaW50aW5nIG5pY2VyIHNpbmNlIHlvdSBjYW4gZG86
CisKKyAgICAgICAgZGF0YUxvZ0lmKHZlcmJvc2UsIHRoaW5ncywgdG8sIHByaW50KTsKKworICAg
ICAgICBpbnN0ZWFkIG9mOgorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZyh0aGluZ3MsIHRvLCBwcmludCk7CisKKyAgICAgICAgQWxzbywgYWRkIGEgb3BlcmF0b3Ih
IHRvIFJlZiBoYXMgdGhlIHNhbWUgc2VtYW50aWNzIGFzIEMrKyByZWZzLgorCisgICAgICAgICog
d3RmL0RhdGFMb2cuaDoKKyAgICAgICAgKFdURjo6ZGF0YUxvZ0xuKToKKyAgICAgICAgKFdURjo6
ZGF0YUxvZ0lmKToKKyAgICAgICAgKFdURjo6ZGF0YUxvZ0xuSWYpOgorICAgICAgICAqIHd0Zi9S
ZWYuaDoKKyAgICAgICAgKFdURjo6UmVmOjpvcGVyYXRvciEpOgorCiAyMDE3LTAyLTI0ICBLZWl0
aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlIHNob3VsZCBi
ZSBhYmxlIHRvIHVzZSBzdGQ6OnR1cGxlcyBhcyBrZXlzIGluIEhhc2hNYXAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYzEyM2IwNmFmZDk1YTk5NmM3ZWI3M2M5YTdlNWNhY2IxZGVj
NGUyZS4uMzVkYzE3YTFjZTk5NjUzYTcwOTQzOThjOGZiMDgxNmJhZjZhYWQyNSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMjAsNiArMTMyMCwxMCBAQAogCQk1MzU1NTcxNjFE
OURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1l
bW9yeS5jcHAgKi87IH07CiAJCTUzNzBCNEY1MUJGMjYyMDIwMDVDNDBGQyAvKiBBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNzBCNEYzMUJGMjVFQTIwMDVDNDBGQyAvKiBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCAqLzsgfTsKIAkJ
NTM3MEI0RjYxQkYyNjIwNTAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi87IH07CisJCTUzODFCOTM3MUU2MEU5NjYwMDkwRjc5
NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmNwcCAqLzsgfTsKKwkJNTM4MUI5MzkxRTYwRTk3RDAwOTBGNzk0IC8q
IFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmggKi87IH07CisJCTUzODFCOTQwMUU2NURGRUIwMDkwRjc5NCAvKiBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzgxQjkzRjFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oICovOyB9OworCQk1MzgzQUEzMDFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAg
Ki87IH07CiAJCTUzOTE3RTdCMUI3OTA2RkEwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTM5MTdFN0ExQjc5MDZFNDAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggKi87IH07CiAJCTUzOUZCOEJBMUM5OURBN0Mw
MDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxp
bmVzLmggKi87IH07CiAJCTUzQjBCRTM0MUU1NjFBQzkwMEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzQjBCRTMzMUU1NjFBQzkwMEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNw
cCAqLzsgfTsKQEAgLTM3NzYsNiArMzc4MCwxMCBAQAogCQk1MzU1NTcxNTFEOURGQTMyMDA2RDU4
M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtTWVtb3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM3MEI0RjMx
QkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM4MUI5MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdh
c21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM4MUI5M0YxRTY1REZFQjAwOTBG
Nzk0IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzkxN0U3QTFCNzkwNkU0MDAwRUJEMzMgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5MTdFN0MxQjc5MTEwNjAwMEVC
RDMzIC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzkxN0U4MzFCNzkxQ0I4MDAwRUJEMzMgLyogVHlwZWRBcnJheVByb3Rv
dHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IFR5cGVkQXJy
YXlQcm90b3R5cGUuanM7IHBhdGggPSBidWlsdGlucy9UeXBlZEFycmF5UHJvdG90eXBlLmpzOyBz
b3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CkBAIC02MjAxLDYgKzYyMDksOCBAQAogCQkJCTUz
RjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLywKIAkJCQk1
M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovLAogCQkJCUFE
QjZGNjdDMUUxNUQ3NTAwMDgyRjM4NCAvKiBXYXNtUGFnZUNvdW50LmNwcCAqLywKKwkJCQk1Mzgx
QjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8sCisJ
CQkJNTM4MUI5MzgxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAq
LywKIAkJCQk3OUI3NTk3MzFERkE0QzYwMDA1MjE3NEMgLyogV2FzbVBhZ2VDb3VudC5oICovLAog
CQkJCTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCiAJCQkJNTMx
Mzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKQEAgLTc3ODgsNiArNzc5
OCw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk3OUU0MjNFMDFERUU2NTMyMDA3OEQzNTUgLyog
SlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi8sCiAJCQkJNzlFNDIzRTExREVFNjUzMjAwNzhEMzU1
IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLywKKwkJCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMy
RkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCisJCQkJNTM4MUI5M0YxRTY1REZF
QjAwOTBGNzk0IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKIAkJCQlBRDJGQ0JBNjFE
QjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAgKi8sCiAJCQkJ
QUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCAq
LywKIAkJCQk3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMu
aCAqLywKQEAgLTc5MjcsNiArNzkzOSw3IEBACiAJCQkJMEZFQzg1NzIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjM4NzhFMUJGQkM0NEQw
MEUzQUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMy
QTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MzgxQjk0MDFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckND
YWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdE
MiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovLApAQCAtODI0Niw2ICs4MjU5LDcgQEAKIAkJ
CQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZDMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
TWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM4MUI5MzkxRTYwRTk3RDAwOTBGNzk0
IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZF
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
RjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCBp
biBIZWFkZXJzICovLApAQCAtMTAwMzYsNiArMTAwNTAsNyBAQAogCQkJCTBGQzg0MTY4MUJBOEMz
MjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzA0RDkwNTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQkQxQjcxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2Vy
dGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzgxQjkzNzFFNjBFOTY2MDA5MEY3OTQg
LyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMwMEI3
QjE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4OThGMzExQjI3Njg5RjAwODNBMzNDIC8qIERGR0ludGVnZXJS
YW5nZU9wdGltaXphdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzk3RjNEMTgy
MDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMTA0MzcsNiArMTA0NTIsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEz
RUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
RUIxMzc1NzFCQjExRUY5MDBDRDUxMDAgLyogTWFjcm9Bc3NlbWJsZXJBUk02NC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzgzQUEzMDFFNjVFOEExMDBBNTMyRkMgLyog
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZEQjdFQzFE
NjE3RDExMDBDREJGOEUgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZFNjhDNjM4MUI5MERFMEIwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUaHVua3MuY3BwCmluZGV4IGRlNDhlNjJkZGFiOGVmYWY4YmUzMTgyODcxYmU4ZDcw
OTliMTdjN2YuLjU0NmUxNGM5MDQ4ZThkMzM4YTU4MjY0N2NmN2NhZGY5ZGQzNDFjZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKQEAgLTgyLDYgKzgyLDE1IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoVk0qIHZtLCBUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3IpCiAgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6ZXhpc3RpbmdDVElTdHViKFRodW5rR2Vu
ZXJhdG9yIGdlbmVyYXRvcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAg
IENUSVN0dWJNYXA6Oml0ZXJhdG9yIGVudHJ5ID0gbV9jdGlTdHViTWFwLmZpbmQoZ2VuZXJhdG9y
KTsKKyAgICBpZiAoZW50cnkgPT0gbV9jdGlTdHViTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgcmV0dXJuIGVudHJ5LT52YWx1ZTsKK30KKwog
dm9pZCBKSVRUaHVua3M6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqKQog
ewogICAgIGF1dG8qIG5hdGl2ZUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRh
YmxlKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRo
dW5rcy5oCmluZGV4IGFkZGNmMjMwYzM0NWQ0MjcxYjYzN2YwOGI5NGM0MTZhM2VkMTgyYTQuLjdl
MDZlNzE2MjM1M2EwYjczZjNiYzAyZTU0MmY3M2I4MmY2NmUxMDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRUaHVua3MuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSopOyAg
ICAKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjdGlTdHViKFZNKiwgVGh1bmtHZW5lcmF0
b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5l
cmF0b3IpOwogCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIE5h
dGl2ZUZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZl
RnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciwgSW50
cmluc2ljLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCmluZGV4IGFlZGY0MmUxN2NjMmJkZTAxNGFkNWI4ZDYyODYyMmFlYzE0
NWU3ZTIuLjBjMzhhN2I0ODZiODljZTk0NWU1NDBhYzQ1YTdjNWVlMWI0MzRkNDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgi
CiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9n
LmgiCisjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogI2luY2x1ZGUgIldhc21Q
bGFuLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPGxvY2FsZS5oPgpAQCAt
Mzc2Niw2ICszNzY3LDcgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAg
IFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRp
bmcoKTsKICAgICBzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCgpOworICAgIEpTQzo6V2FzbTo6
ZW5hYmxlRmFzdE1lbW9yeSgpOwogCiAgICAgaW50IHJlc3VsdDsKICAgICByZXN1bHQgPSBydW5K
U0MoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggYzRiZjhmYWRl
OGFhZTMxMGYyYjZhMjc3MTEzMWJiZWRhMjFiMmNiYy4uYzk0NDQ4MDcwOGFmNWRjZTNkMmY2ZTUz
OGU4MWU0NzdkNzM5OWYwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aApAQCAtNDI2LDYgKzQyNiw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwog
ICAgIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5LCB0cnVlLCBOb3JtYWwsICJFeHBvc2Ug
dGhlIFdlYkFzc2VtYmx5IGdsb2JhbCBvYmplY3QuIikgXAogICAgIHYoYm9vbCwgc2ltdWxhdGVX
ZWJBc3NlbWJseUxvd01lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkg
b2JqZWN0IHdvbid0IG1tYXAgdGhlIGZ1bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdp
bGwgYWxsb2NhdGUgdGhlIG1pbmltdW0gcmVxdWlyZWQgYW1vdW50LiIpIFwKKyAgICB2KGJvb2ws
IHVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2ls
bCB0cnkgdG8gdXNlIGEgMzItYml0IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVy
IHRvIGJvdW5kcyBjaGVjayB3YXNtIG1lbW9yeS4iKQorCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVu
Y2UgewogICAgIFNhbWVPcHRpb24sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5k
ZXggYTUwZjlkYjBhMGMzM2U5MDZkYzZlYzBlYmVkYTY3MDdlYTRhOWZjMy4uYTAzOWRkYjAwZmZi
MGNjMmJhMmY3NTc5YzVmMTM1N2YyNGIyNDNkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcApAQCAtMjQwLDYgKzI0MCw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgd2ViQXNzZW1ibHlDYWxs
ZWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgd2ViQXNzZW1ibHlUb0pTQ2FsbGVlU3RydWN0
dXJlLnNldCgqdGhpcywgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CisgICAgd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgd2ViQXNzZW1ibHlUb0pTQ2FsbGVlLnNldCgqdGhpcywgV2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlOjpjcmVhdGUoKnRoaXMsIHdlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVj
dHVyZS5nZXQoKSkpOwogI2VuZGlmCiAgICAgbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggNzMy
YjI2ZTRlNGYzMDFiYTNiMGMxZTczMDgzYWY5M2I0ODg4MGIyMC4uMWE0MWU0NGY2YTNlYmU2MGEz
NGE2YzQ4YjFmYmI1OWM5ODFmNjdjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBA
IC0zMzMsNiArMzMzLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBT
dHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8
U3RydWN0dXJlPiB3ZWJBc3NlbWJseVRvSlNDYWxsZWVTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0
cnVjdHVyZT4gd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPEpTQ2Vs
bD4gd2ViQXNzZW1ibHlUb0pTQ2FsbGVlOwogI2VuZGlmCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
bW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY3ZDJk
MjgzZTlhMTM0YjI4MzBjOTkyNTUxZmNiMjVmOWNiMmZkYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApAQCAtMCww
ICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlND
ZWxsLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2luY2x1ZGUgIlVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8
d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CitjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5Owor
CitjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7
CisKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNX
ZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZv
cywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgZXhpdFN0dWJzLCBXYXNtOjpNZW1vcnk6
Ok1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCisgICAgeworICAgICAgICBhdXRvKiBy
ZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Pih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxsZWVDb3VudCkpKSBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKHZtLCBvd25lciwgc3RkOjpmb3J3YXJkPEJhZzxDYWxsTGlua0luZm8+PihjYWxsTGlu
a0luZm9zKSwgc3RkOjpmb3J3YXJkPFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPj4oZXhpdFN0
dWJzKSwgbW9kZSwgY2FsbGVlQ291bnQpOworICAgICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBv
cnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IH0KKyAgICBX
YXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgp
OyB9CisgICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CisKKyAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOworICAg
ICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9u
SW1wb3J0Q291bnQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2Nh
bGxlZUNvdW50KTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleF0uZ2V0KCk7
CisgICAgfQorCisgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbklt
cG9ydENvdW50KCkpOworICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5k
ZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtj
YWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLmdldCgpOworICAgIH0KKworICAgIHZvaWQgc2V0
SlNFbnRyeXBvaW50Q2FsbGVlKFZNJiB2bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGNhbGxlZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxl
ZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7CisgICAgICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleF0u
c2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgIH0KKworICAgIHZvaWQgc2V0V2FzbUVudHJ5cG9p
bnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxl
ZSogY2FsbGVlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBt
X2NhbGxlZUNvdW50KTsKKyAgICAgICAgY2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVD
b3VudF0uc2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgIH0KKworICAgIFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5Q2FsbGVlPiogY2FsbGVlcygpCisgICAgeworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPio+KGJpdHdpc2VfY2Fz
dDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkNhbGxlZXMoKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgQmFn
PENhbGxMaW5rSW5mbz4mJiwgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIFdhc206Ok1l
bW9yeTo6TW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpOworICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9m
Q2FsbGVlcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pPihzaXplb2YoSlNXZWJB
c3NlbWJseUNvZGVCbG9jaykpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlv
blNpemUodW5zaWduZWQgbnVtQ2FsbGVlcykKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZzZXRP
ZkNhbGxlZXMoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICog
bnVtQ2FsbGVlcyAqIDI7CisgICAgfQorCisgICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXpl
ciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgICAgICB2b2lkIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAgfTsKKworICAgIFdyaXRlQmFy
cmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKKyAgICBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBt
X2NhbGxMaW5rSW5mb3M7CisgICAgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1fd2FzbUV4
aXRTdHViczsKKyAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbV9tb2RlOworICAgIHVuc2lnbmVkIG1f
Y2FsbGVlQ291bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAppbmRleCAyZmYzMDUwMWY2NmYxYWNkYWY1ZGQ4Zjc4ZjVhNTIyOWVhZWI4
YjkxLi5mNDIyMmY3ZGNjMjA0OWQwNmU2ZTA4ZTU2M2U1ZWFiNWFjNzAxNDA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0yNTks
NyArMjU5LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihWTSYgdm0sIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHAKICAgICBmb3IgKGNvbnN0IFBpbm5l
ZFNpemVSZWdpc3RlckluZm8mIHJlZ0luZm8gOiBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnMpCiAg
ICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CiAKLSAgICBp
ZiAoaW5mby5oYXNNZW1vcnkoKSkgeworICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBt
X3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKHBpbm5lZEdQUiwgbV9tZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7CkBAIC0yODIs
OCArMjgyLDggQEAgc3RhdGljIE1lbW9yeUJhc2VBbmRTaXplIGdldE1lbW9yeUJhc2VBbmRTaXpl
KFZNJiB2bSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUKIHsKICAgICBWYWx1ZSogbWVtb3J5
T2JqZWN0ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgcG9pbnRl
clR5cGUoKSwgT3JpZ2luKCksIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mTWVtb3J5KCkpOwogCi0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUodm0udG9w
SlNXZWJBc3NlbWJseUluc3RhbmNlLT5tZW1vcnkoKS0+bWVtb3J5KCktPm1lbW9yeSgpKSkgPT0g
c2l6ZW9mKHZvaWQqKSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOwotICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZS0+bWVt
b3J5KCktPm1lbW9yeSgpLT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiBy
ZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUo
dm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5tZW1vcnkoKS0+bWVtb3J5KCkubWVtb3J5KCkp
KSA9PSBzaXplb2Yodm9pZCopLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUodm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNl
LT5tZW1vcnkoKS0+bWVtb3J5KCkuc2l6ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVn
ZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOwogICAgIE1lbW9yeUJhc2VBbmRTaXplIHJlc3VsdDsK
ICAgICByZXN1bHQuYmFzZSA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLCBtZW1vcnlPYmplY3QsIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpOwogICAgIHJlc3VsdC5zaXplID0gYmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLCBtZW1vcnlPYmpl
Y3QsIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKTsKQEAgLTQ1NCw5ICs0NTQs
MTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIAogaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJh
dG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1
aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikKIHsKLSAgICBBU1NFUlQo
bV9tZW1vcnlCYXNlR1BSICYmIG1fbWVtb3J5U2l6ZUdQUik7Ci0gICAgQVNTRVJUKHNpemVPZk9w
ZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1v
cnlTaXplR1BSLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgLSAxKTsKKyAgICBBU1NFUlQobV9t
ZW1vcnlCYXNlR1BSKTsKKyAgICBpZiAobV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpN
b2RlOjpCb3VuZHNDaGVja2luZykgeworICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsK
KyAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsg
b2Zmc2V0IC0gMSk7CisgICAgfQogICAgIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgT3JpZ2luKCksIHBvaW50ZXIpOwogICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21BZGRyZXNzVmFsdWU+KG1fcHJvYywgT3Jp
Z2luKCksIHBvaW50ZXIsIG1fbWVtb3J5QmFzZUdQUik7CiB9CkBAIC00ODgsNjggKzQ5MSw3MyBA
QCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9hZE9wKExvYWRPcFR5cGUgb3ApCiAKIGlubGluZSBW
YWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBPcmlnaW4gb3Jp
Z2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpCiB7CisgICAgYXV0
byBtYWtlS2luZCA9IFsmXSAoQjM6Ok9wY29kZSBvcGNvZGUpIC0+IEIzOjpLaW5kIHsKKyAgICAg
ICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09IE1lbW9yeTo6U2lnbmFsaW5nKQorICAgICAg
ICAgICAgcmV0dXJuIHRyYXBwaW5nKG9wY29kZSk7CisgICAgICAgIHJldHVybiBvcGNvZGU7Cisg
ICAgfTsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6
IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZDhTLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5k
KExvYWQ4UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQ4UzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4Uywgb3JpZ2luLCBwb2lu
dGVyLCBvZmZzZXQpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQ4UyksIG9yaWdpbiwgcG9p
bnRlciwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBvcmlnaW4sIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNl
IExvYWRPcFR5cGU6OkkzMkxvYWQ4VTogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkOFosIG9yaWdpbiwgcG9pbnRlciwg
b2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZDhaKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQp
OwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOiB7Ci0gICAgICAgIFZh
bHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZDhaLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIFZhbHVlKiB2YWx1
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtp
bmQoTG9hZDhaKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbiwgdmFs
dWUpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzogewotICAgICAg
ICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkMTZTLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQxNlMp
LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgfQogICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDE2UzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQxNlMsIG9yaWdpbiwgcG9pbnRlciwgb2Zm
c2V0KTsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkMTZTKSwgb3JpZ2luLCBwb2ludGVyLCBv
ZmZzZXQpOwogICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBTRXh0MzIsIG9yaWdpbiwgdmFsdWUpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9w
VHlwZTo6STMyTG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZz
ZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkKSwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0
KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKLSAgICAgICAg
VmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBWYWx1
ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IG1ha2VLaW5kKExvYWQpLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAg
ICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIs
IG9yaWdpbiwgdmFsdWUpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMy
UzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7
CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZCksIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9m
ZnNldCk7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkOiB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIG1ha2VLaW5kKExvYWQpLCBJbnQ2NCwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQp
OwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDogewotICAgICAgICByZXR1
cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBG
bG9hdCwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkKSwgRmxv
YXQsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5
cGU6OkY2NExvYWQ6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgRG91YmxlLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIG1ha2VLaW5kKExvYWQpLCBEb3VibGUsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0
KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogQjMgZG9lc24ndCBzdXBwb3J0IExvYWQxNlogeWV0
LiBXZSBzaG91bGQgbG93ZXIgdG8gdGhhdCB2YWx1ZSB3aGVuCiAgICAgLy8gaXQncyBhZGRlZC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTg4NAogICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDE2VTogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQxNlMsIG9yaWdpbiwg
cG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkMTZTKSwgb3JpZ2lu
LCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIE9yaWdpbigpLCB2YWx1ZSwKICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmln
aW4oKSwgMHgwMDAwZmZmZikpOwogICAgIH0KICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQx
NlU6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkMTZTLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7Cisg
ICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZDE2UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsK
ICAgICAgICAgVmFsdWUqIHBhcnRpYWxSZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgT3JpZ2luKCksIHZhbHVlLAogICAgICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIE9yaWdpbigp
LCAweDAwMDBmZmZmKSk7CiAKQEAgLTYyNSwxMyArNjMzLDE4IEBAIGlubGluZSB1aW50MzJfdCBz
aXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBlIG9wKQogCiBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9y
OjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkKIHsKKyAg
ICBhdXRvIG1ha2VLaW5kID0gWyZdIChCMzo6T3Bjb2RlIG9wY29kZSkgLT4gQjM6OktpbmQgewor
ICAgICAgICBpZiAobV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpTaWduYWxpbmcpCisg
ICAgICAgICAgICByZXR1cm4gdHJhcHBpbmcob3Bjb2RlKTsKKyAgICAgICAgcmV0dXJuIG9wY29k
ZTsKKyAgICB9OwogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRT
dG9yZTg6CiAgICAgICAgIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2YWx1ZSk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogCiAg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luLCB2YWx1ZSwgcG9p
bnRlciwgb2Zmc2V0KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBtYWtlS2luZChTdG9yZTgpLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyLCBv
ZmZzZXQpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9y
ZTE2OgpAQCAtNjM5LDcgKzY1Miw3IEBAIGlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRT
dG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uCiAgICAgICAg
IEZBTExUSFJPVUdIOwogCiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKLSAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTE2
LCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKFN0b3JlMTYpLCBvcmln
aW4sIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNl
IFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgpAQCAtNjUwLDcgKzY2Myw3IEBAIGlubGluZSB2b2lk
IEIzSVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2lu
LCBFeHByZXNzaW9uCiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6CiAgICAgY2FzZSBT
dG9yZU9wVHlwZTo6RjMyU3RvcmU6CiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6Ci0g
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3Rv
cmUsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoU3RvcmUpLCBvcmln
aW4sIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCmluZGV4IGQ3OTAxNGYyN2ZhZjkwOTY4
ZjIxZjVmOWI0ZDdiOGNjNzgxMDM5ZTMuLmU2MDRhYjJkNDcwOTBhN2U5NDMxOWExMmNiODcxZTRl
NzQzNzI3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
aW5nQ29udmVudGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
aW5nQ29udmVudGlvbi5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2lu
Y2x1ZGUgIldhc21TaWduYXR1cmUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YWMyZTE5NzI1M2Q2YWI1NDViZmNhOTU5N2E1NTA1
YjViODVhOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlZNLmgi
CisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CisKKworbmFtZXNwYWNlIHsKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKK30KKworc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkU2lnQnVzSGFuZGxlcjsK
K3N0YXRpYyBib29sIGZhc3RIYW5kbGVySW5zdGFsbGVkIHsgZmFsc2UgfTsKK3N0YXRpYyBTdGF0
aWNMb2NrIGNvZGVMb2NhdGlvbnNMb2NrOworc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNo
U2V0PHN0ZDo6dHVwbGU8Vk0qLCB2b2lkKiwgdm9pZCo+Pj4gY29kZUxvY2F0aW9uczsgLy8gKHZt
LCBzdGFydCwgZW5kKQorCisjaWYgQ1BVKFg4Nl82NCkKKyNkZWZpbmUgSW5zdHJ1Y3Rpb25Qb2lu
dGVyR1BSIGNvbnRleHQtPl9fc3MuX19yaXAKKyNkZWZpbmUgRmlyc3RBcmd1bWVudEdQUiBjb250
ZXh0LT5fX3NzLl9fcnNpCisjZWxzZQorI2RlZmluZSBJbnN0cnVjdGlvblBvaW50ZXJHUFIgY29u
dGV4dC0+X19zcy5fX3BjCisjZGVmaW5lIEZpcnN0QXJndW1lbnRHUFIgY29udGV4dC0+X19zcy5f
X3hbMV0KKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdp
bmZvX3QqLCB2b2lkKiB1Y29udGV4dCkKK3sKKyAgICBtY29udGV4dF90IGNvbnRleHQgPSBzdGF0
aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpLT51Y19tY29udGV4dDsKKyAgICB2b2lkKiBm
YXVsdGluZ0luc3RydWN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW5zdHJ1Y3Rpb25Q
b2ludGVyR1BSKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3RhcnRpbmcgaGFuZGxlciBm
b3IgZmF1bHQgYXQ6ICIsIFJhd1BvaW50ZXIoZmF1bHRpbmdJbnN0cnVjdGlvbikpOworCisgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkpJVCBtZW1vcnkgc3RhcnQ6ICIsIFJhd1BvaW50ZXIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpKSwg
IiBlbmQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4
ZWN1dGFibGVNZW1vcnlQb29sKSkpOworICAgIC8vIEZpcnN0IHdlIG5lZWQgdG8gbWFrZSBzdXJl
IHdlIGFyZSBpbiBKSVQgY29kZSBiZWZvcmUgd2UgY2FuIGFxdWlyZSBhbnkgbG9ja3MuIE90aGVy
d2lzZSwKKyAgICAvLyB3ZSBtaWdodCBoYXZlIGNyYXNoZWQgaW4gY29kZSB0aGF0IGlzIGFscmVh
ZHkgaG9sZGluZyBvbmUgb2YgdGhlIGxvY2tzIHdlIHdhbnQgdG8gYXF1aXJlLgorICAgIGlmIChy
ZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkg
PD0gZmF1bHRpbmdJbnN0cnVjdGlvbgorICAgICAgICAmJiBmYXVsdGluZ0luc3RydWN0aW9uIDwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSkg
eworCisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKKyAgICAg
ICAgZm9yIChhdXRvIHJhbmdlIDogY29kZUxvY2F0aW9ucy5nZXQoKSkgeworICAgICAgICAgICAg
Vk0qIHZtOworICAgICAgICAgICAgdm9pZCogc3RhcnQ7CisgICAgICAgICAgICB2b2lkKiBlbmQ7
CisgICAgICAgICAgICBzdGQ6OnRpZSh2bSwgc3RhcnQsIGVuZCkgPSByYW5nZTsKKyAgICAgICAg
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmdW5jdGlvbiBzdGFydDogIiwgUmF3UG9pbnRlcihz
dGFydCksICIgZW5kOiAiLCBSYXdQb2ludGVyKGVuZCkpOworICAgICAgICAgICAgaWYgKHN0YXJ0
IDw9IGZhdWx0aW5nSW5zdHJ1Y3Rpb24gJiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8PSBlbmQpIHsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZm91bmQgbWF0Y2giKTsKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhjZXB0aW9uU3R1YiA9IHZtLT5q
aXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVy
YXRvcik7CisgICAgICAgICAgICAgICAgLy8gSWYgZm9yIHdoYXRldmVyIHJlYXNvbiB3ZSBkb24n
dCBoYXZlIGEgc3R1YiB0aGVuIHdlIHNob3VsZCBqdXN0IHRyZWF0IHRoaXMgbGlrZSBhIHJlZ3Vs
YXIgY3Jhc2guCisgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25TdHViLnNpemUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgImZvdW5kIHN0dWI6ICIsIFJhd1BvaW50ZXIoZXhjZXB0aW9uU3R1Yi5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAgIEZpcnN0QXJndW1lbnRHUFIgPSBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nl
c3MpOworICAgICAgICAgICAgICAgIEluc3RydWN0aW9uUG9pbnRlckdQUiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDY0X3Q+KGV4Y2VwdGlvblN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRTaWdCdXNIYW5kbGVyLCBudWxscHRyKTsK
K30KKwordm9pZCByZWdpc3RlckNvZGUoVk0mIHZtLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKQor
eworICAgIGlmICghZmFzdE1lbW9yeUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKKyAgICBjb2RlTG9jYXRpb25zLT5h
ZGQoc3RkOjptYWtlX3R1cGxlKCZ2bSwgc3RhcnQsIGVuZCkpOworfQorCit2b2lkIHVucmVnaXN0
ZXJDb2RlKFZNJiB2bSwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCkKK3sKKyAgICBpZiAoIWZhc3RN
ZW1vcnlFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihj
b2RlTG9jYXRpb25zTG9jayk7CisgICAgY29kZUxvY2F0aW9ucy0+cmVtb3ZlKHN0ZDo6bWFrZV90
dXBsZSgmdm0sIHN0YXJ0LCBlbmQpKTsKK30KKworYm9vbCBmYXN0TWVtb3J5RW5hYmxlZCgpCit7
CisgICAgcmV0dXJuIGZhc3RIYW5kbGVySW5zdGFsbGVkOworfQorCit2b2lkIGVuYWJsZUZhc3RN
ZW1vcnkoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZh
c3RNZW1vcnkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIGFjdGlvbjsKKworICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gdHJhcEhhbmRsZXI7
CisgICAgICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgYWN0aW9uLnNh
X2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAgCisgICAgICAgIGlmICghc2lnYWN0aW9uKFNJ
R0JVUywgJmFjdGlvbiwgJm9sZFNpZ0J1c0hhbmRsZXIpKSB7CisgICAgICAgICAgICBmYXN0SGFu
ZGxlckluc3RhbGxlZCA9IHRydWU7CisgICAgICAgICAgICBjb2RlTG9jYXRpb25zLmNvbnN0cnVj
dCgpOworICAgICAgICB9CisKKyAgICB9KTsKK30KKyAgICAKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MzE5ZTAxODNhMTg5NmE1YWIxNGMwZWJkYThkODYyNzBiZWNlM2M2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgVk07CisKK25hbWVzcGFjZSBXYXNtIHsKKwordm9pZCByZWdpc3RlckNvZGUoVk0mLCB2b2lk
KiBzdGFydCwgdm9pZCogZW5kKTsKK3ZvaWQgdW5yZWdpc3RlckNvZGUoVk0mLCB2b2lkKiBzdGFy
dCwgdm9pZCogZW5kKTsKKworYm9vbCBmYXN0TWVtb3J5RW5hYmxlZCgpOworSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmFibGVGYXN0TWVtb3J5KCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggZGM2MzQ3NDQyMmJmZTYwMzNkOGIyZDIyMWJiN2VjNWMx
MTA1Njg2Mi4uMWZjNTc0ZTkzZDcyNDdjNjRhOGZhMzM0ZjYyMjVkMmM3MjcxZjY0MyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtMjU2LDcgKzI1Niw2IEBAIHN0
cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgfQogCiAgICAgdWludDMyX3QgaW1wb3J0RnVu
Y3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
cy5zaXplKCk7IH0KLSAgICBib29sIGhhc01lbW9yeSgpIGNvbnN0IHsgcmV0dXJuICEhbWVtb3J5
OyB9CiAKICAgICB+TW9kdWxlSW5mb3JtYXRpb24oKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IGFhZDkxYzEzZTNhMzAxNjgzOGZiMDM4NGRhYjVh
NDJiNDc3NDNkMjguLjNmOTkxM2NlNWY0OTE2MTQ3MzU4NWNjZmI1MzAxYmY5YzBmYzgwMzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0yOCw3ICsyOCwx
MSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNs
dWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCisKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVy
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDg2ICs0
MiwxOTkgQEAgbmFtZXNwYWNlIHsKIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi12
b2lkIE1lbW9yeTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoraW5saW5lIGJvb2wgbW1h
cEJ5dGVzKHNpemVfdCBieXRlcywgdm9pZComIG1lbW9yeSkKIHsKLSAgICBTdHJpbmcgbWVtb3J5
SGV4OwotICAgIFdURjo6YXBwZW5kVW5zaWduZWQ2NEFzSGV4KCh1aW50NjRfdCkodWludHB0cl90
KW1fbWVtb3J5LCBtZW1vcnlIZXgpOwotICAgIG91dC5wcmludCgiTWVtb3J5IGF0IDB4IiwgbWVt
b3J5SGV4LCAiLCBzaXplICIsIG1fc2l6ZSwgIkIgY2FwYWNpdHkgIiwgbV9tYXBwZWRDYXBhY2l0
eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAiIG1heGltdW0gIiwgbV9tYXhpbXVtLCAiIG1v
ZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKKyAgICBkYXRhTG9nSWYodmVyYm9zZSwgIkF0dGVt
cHRpbmcgdG8gbW1hcCAiLCBieXRlcywgIiBieXRlczogIik7CisgICAgLy8gRklYTUU6IEl0IHdv
dWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEgVk0gdGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzYwMAorICAgIHZvaWQqIHJlc3VsdCA9
IG1tYXAobnVsbHB0ciwgYnl0ZXMsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwg
LTEsIDApOworICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiZmFpbGVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN1Y2NlZWRlZCIpOworICAgIG1lbW9yeSA9IHJlc3Vs
dDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgY2hhciogTWVtb3J5OjptYWtlU3RyaW5n
KE1vZGUgbW9kZSkgY29uc3QKKy8vIFdlIHVzZSB0aGlzIGFzIGEgaGV1cmlzdGljIHRvIGd1ZXNz
IG1vZGUgYSBtZW1vcnkgaW1wb3J0IHdpbGwgYmUuIE1vc3Qgb2YgdGhlIHRpbWUgd2UgZXhwZWN0
IHVzZXJzIHRvCisvLyBhbGxvY2F0ZSB0aGUgbWVtb3J5IHRoZXkgYXJlIGdvaW5nIHRvIHBhc3Mg
dG8gYWxsIHRoZWlyIG1vZHVsZXMgcmlnaHQgYmVmb3JlIGNvbXBpbGF0aW9uLgorc3RhdGljIE1l
bW9yeTo6TW9kZSBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSB7IE1lbW9yeTo6TW9kZTo6U2lnbmFs
aW5nIH07CisKK01lbW9yeTo6TW9kZSBNZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCkKIHsKLSAg
ICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4g
IkJvdW5kc0NoZWNraW5nIjsKKyAgICByZXR1cm4gbGFzdEFsbG9jYXRlZE1lbW9yeU1vZGU7Cit9
CisKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldl
IHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJl
IDJeMzMgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQg
d2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7CisKK3N0YXRpYyBj
b25zdCBzaXplX3QgZmFzdE1lbW9yeU1hcHBlZEJ5dGVzID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpICogMjsgLy8gcG9pbnRlciBtYXgg
KyBvZmZzZXQgbWF4LiBUaGlzIGlzIGFsbCB3ZSBuZWVkIHNpbmNlIGEgbG9hZCBzdHJhZGRsaW5n
IHJlYWRhYmxlIG1lbW9yeSB3aWxsIHRyYXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4RmFz
dE1lbW9yaWVzID0gNDsKK3N0YXRpYyB1bnNpZ25lZCBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgeyAw
IH07CitpbmxpbmUgRGVxdWU8dm9pZCosIG1heEZhc3RNZW1vcmllcz4mIGF2YWlsYWJsZUZhc3RN
ZW1vcmllcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERlcXVlPHZvaWQqLCBtYXhG
YXN0TWVtb3JpZXM+PiBhdmFpbGFibGVGYXN0TWVtb3JpZXM7CisgICAgcmV0dXJuIGF2YWlsYWJs
ZUZhc3RNZW1vcmllczsKK30KKworaW5saW5lIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0s
IHZvaWQqJiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeTo6TW9kZSYgbW9k
ZSkKK3sKKyAgICAvLyBXZSBtaWdodCBHQyBoZXJlIHNvIHdlIHNob3VsZCBiZSBob2xkaW5nIHRo
ZSBBUEkgbG9jay4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3luY3Jvbm91
c2x5IHRyaWdnZXIgdGhlIEdDIGZyb20gYW5vdGhlciB0aHJlYWQuCisgICAgQVNTRVJUKHZtLmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGlmICghZmFzdE1lbW9yeUVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgbmVlZCB0byBiZSBzdXJl
IHdlIGhhdmUgYSBzdHViIHByaW9yIHRvIHJ1bm5pbmcgY29kZS4KKyAgICBpZiAoIXZtLmdldENU
SVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5zaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGVxdWVGYXN0TWVtb3J5ID0gWyZdICgpIC0+
IGJvb2wgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgcmV0dXJuIHRo
ZXNlIHRvIHRoZSBPUyBpZiB3ZSBnbyBzb21lIG51bWJlciBvZiBHQ3MKKyAgICAgICAgLy8gd2l0
aG91dCB1c2luZyB0aGVtLgorICAgICAgICBpZiAoIWF2YWlsYWJsZUZhc3RNZW1vcmllcygpLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgbWVtb3J5ID0gYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCku
dGFrZUZpcnN0KCk7CisgICAgICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlNYXBw
ZWRCeXRlczsKKyAgICAgICAgICAgIG1vZGUgPSBNZW1vcnk6OlNpZ25hbGluZzsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
OworCisgICAgQVNTRVJUKGFsbG9jYXRlZEZhc3RNZW1vcmllcyA8PSBtYXhGYXN0TWVtb3JpZXMp
OworICAgIGlmIChkZXF1ZUZhc3RNZW1vcnkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAvLyBJZiB3ZSBoYXZlIGFsbG9jYXRlZCBhbGwgdGhlIGZhc3QgbWVtb3JpZXMuLi4gdG9vIGJh
ZC4KKyAgICBpZiAoYWxsb2NhdGVkRmFzdE1lbW9yaWVzID09IG1heEZhc3RNZW1vcmllcykgewor
ICAgICAgICAvLyBUaGVyZSBpcyBhIHJlYXNvbmFibGUgY2hhbmNlIHRoYXQgYW5vdGhlciBtb2R1
bGUgaGFzIGRpZWQgYnV0IGhhcyBub3QgYmVlbiBjb2xsZWN0ZWQgeWV0LiBEb24ndCBsb3NlIGhv
cGUgeWV0IQorICAgICAgICB2bS5oZWFwLmNvbGxlY3RTeW5jKCk7CisgICAgICAgIHJldHVybiBk
ZXF1ZUZhc3RNZW1vcnkoKTsKICAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gIiI7CisKKyAgICBpZiAobW1hcEJ5dGVzKGZhc3RNZW1vcnlNYXBwZWRC
eXRlcywgbWVtb3J5KSkgeworICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlNYXBw
ZWRCeXRlczsKKyAgICAgICAgbW9kZSA9IE1lbW9yeTo6U2lnbmFsaW5nOworICAgICAgICBhbGxv
Y2F0ZWRGYXN0TWVtb3JpZXMrKzsKKyAgICB9CisgICAgcmV0dXJuIG1lbW9yeTsKIH0KIAotc3Rh
dGljX2Fzc2VydChzaXplb2YodWludDY0X3QpID09IHNpemVvZihzaXplX3QpLCAiV2UgcmVseSBv
biBhbGxvd2luZyB0aGUgbWF4aW11bSBzaXplIG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUgMl4zMiB3
aGljaCBpcyBsYXJnZXIgdGhhbiBmaXRzIGluIGEgMzItYml0IGludGVnZXIgdGhhdCB3ZSdkIHBh
c3MgdG8gbXByb3RlY3QgaWYgdGhpcyBkaWRuJ3QgaG9sZC4iKTsKK2lubGluZSB2b2lkIHJlbGVh
c2VGYXN0TWVtb3J5KHZvaWQqJiBtZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUsIHNpemVfdCBt
YXBwZWRDYXBhY2l0eSwgTWVtb3J5OjpNb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgIT0gTWVt
b3J5OjpTaWduYWxpbmcgfHwgIW1lbW9yeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUkVMRUFT
RV9BU1NFUlQobWVtb3J5ICYmIG1hcHBlZENhcGFjaXR5ID09IGZhc3RNZW1vcnlNYXBwZWRCeXRl
cyk7CisgICAgQVNTRVJUKGZhc3RNZW1vcnlFbmFibGVkKCkpOworCisgICAgbWVtc2V0KG1lbW9y
eSwgMCwgd3JpdGFibGVTaXplKTsKKyAgICAvLyBXZSBuZWVkIHRvIG1wcm90ZWN0IFBST1RfTk9O
RSBhbGwgdGhlIGV4aXN0aW5nIG1lbW9yeS4gSWYgd2UgY2FuJ3QsIGZvcgorICAgIC8vIHdoYXRl
dmVyIHJlYXNvbiwgd2Ugc2hvdWxkIGJhaWwgb3V0IGFuZCBnZXQgcmlkIG9mIHRoaXMgbWVtb3J5
LgorICAgIGlmIChtcHJvdGVjdChtZW1vcnksIHdyaXRhYmxlU2l6ZSwgUFJPVF9OT05FKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGF2YWlsYWJsZUZhc3RNZW1vcmllcygpLnNpemUo
KSA8IGFsbG9jYXRlZEZhc3RNZW1vcmllcyk7CisgICAgYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCku
YXBwZW5kKG1lbW9yeSk7CisgICAgbWVtb3J5ID0gbnVsbHB0cjsKK30KIAotTWVtb3J5OjpNZW1v
cnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpCi0g
ICAgOiBtX3NpemUoaW5pdGlhbC5ieXRlcygpKQorTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGlu
aXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQorICAgIDogbV9pbml0aWFsKGluaXRpYWwpCisgICAg
LCBtX21heGltdW0obWF4aW11bSkKK3sKKyAgICBBU1NFUlQoIWluaXRpYWwuYnl0ZXMoKSk7Cit9
CisKK01lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VD
b3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1vZGUgbW9kZSkKKyAgICA6IG1f
bWVtb3J5KG1lbW9yeSkKKyAgICAsIG1fc2l6ZShpbml0aWFsLmJ5dGVzKCkpCiAgICAgLCBtX2lu
aXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQotICAgICwgbV9tb2RlKE1v
ZGU6OkJvdW5kc0NoZWNraW5nKQotICAgIC8vIEZJWE1FOiBJZiB3ZSBhZGQgc2lnbmFsIGJhc2Vk
IGJvdW5kcyBjaGVja2luZyB0aGVuIHdlIG5lZWQgZXh0cmEgc3BhY2UgZm9yIG92ZXJmbG93IG9u
IGxvYWQuCi0gICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyNjkzCisgICAgLCBtX21hcHBlZENhcGFjaXR5KG1hcHBlZENhcGFjaXR5KQorICAgICwg
bV9tb2RlKG1vZGUpCit7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5
IGFsbG9jYXRpbmcgIiwgKnRoaXMpOworfQorCitSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0
ZUltcGwoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6
b3B0aW9uYWw8TW9kZT4gcmVxdWlyZWRNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhp
bXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQg
Ynkgb3VyIGNhbGxlci4KIAotICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11
bS5ieXRlcygpIDogUGFnZUNvdW50OjptYXgoKS5ieXRlcygpOwotICAgIGlmICghbV9tYXBwZWRD
YXBhY2l0eSkgeworICAgIE1vZGUgbW9kZSA9IHJlcXVpcmVkTW9kZSA/ICpyZXF1aXJlZE1vZGUg
OiBCb3VuZHNDaGVja2luZzsKKyAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IGluaXRpYWwuYnl0ZXMo
KTsKKyAgICBzaXplX3QgbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygp
IDogUGFnZUNvdW50OjptYXgoKS5ieXRlcygpOworICAgIHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7
CisKKyAgICBhdXRvIG1ha2VFbXB0eU1lbW9yeSA9IFsmXSAoKSAtPiBSZWZQdHI8TWVtb3J5PiB7
CisgICAgICAgIGlmIChtb2RlID09IFNpZ25hbGluZykKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlID0gQm91bmRzQ2hlY2tpbmc7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0pKTsK
KyAgICB9OworCisgICAgaWYgKCFtYXBwZWRDYXBhY2l0eSkgewogICAgICAgICAvLyBUaGlzIG1l
YW5zIHdlIHNwZWNpZmllZCBhIHplcm8gYXMgbWF4aW11bSAod2hpY2ggbWVhbnMgd2UgYWxzbyBo
YXZlIHplcm8gYXMgaW5pdGlhbCBzaXplKS4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zaXpl
ID09IDApOwotICAgICAgICBtX21lbW9yeSA9IG51bGxwdHI7Ci0gICAgICAgIG1fbWFwcGVkQ2Fw
YWNpdHkgPSAwOwotICAgICAgICBmYWlsZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgbm90aGlu
ZyAiLCAqdGhpcyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNp
emUpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgYWxsb2Nh
dGluZyBub3RoaW5nIik7CisgICAgICAgIHJldHVybiBtYWtlRW1wdHlNZW1vcnkoKTsKICAgICB9
CiAKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9y
IHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYz
NjAwCi0gICAgdm9pZCogcmVzdWx0ID0gT3B0aW9uczo6c2ltdWxhdGVXZWJBc3NlbWJseUxvd01l
bW9yeSgpID8gTUFQX0ZBSUxFRCA6IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRDYXBhY2l0eSwgUFJP
VF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7Ci0gICAgaWYgKHJlc3VsdCA9
PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51
bWJlci4KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9y
eTo6TWVtb3J5IG1tYXAgZmFpbGVkIG9uY2UgZm9yIGNhcGFjaXR5LCB0cnlpbmcgYWdhaW4iLCAq
dGhpcyk7Ci0gICAgICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtX3NpemU7Ci0gICAgICAgIGlmICgh
bV9tYXBwZWRDYXBhY2l0eSkgewotICAgICAgICAgICAgbV9tZW1vcnkgPSBudWxscHRyOwotICAg
ICAgICAgICAgZmFpbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6TWVtb3J5IG1tYXAgbm90IHRyeWluZyBhZ2Fp
biBiZWNhdXNlIHNpemUgaXMgemVybyAiLCAqdGhpcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KKyAgICBib29sIGNhblVzZUZhc3RNZW1vcnkgPSAhcmVxdWlyZWRNb2RlIHx8IHJl
cXVpcmVkTW9kZSA9PSBTaWduYWxpbmc7CisgICAgaWYgKCFjYW5Vc2VGYXN0TWVtb3J5IHx8ICF0
cnlHZXRGYXN0TWVtb3J5KHZtLCBtZW1vcnksIG1hcHBlZENhcGFjaXR5LCBtb2RlKSkgeworICAg
ICAgICBpZiAobW9kZSA9PSBTaWduYWxpbmcpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICBpZiAoT3B0aW9uczo6c2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSgpID8g
dHJ1ZSA6ICFtbWFwQnl0ZXMobWFwcGVkQ2FwYWNpdHksIG1lbW9yeSkpIHsKKyAgICAgICAgICAg
IC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4KKyAgICAgICAgICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIGZhaWxlZCBvbmNlIGZvciBjYXBh
Y2l0eSwgdHJ5aW5nIGFnYWluIik7CisgICAgICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IHNpemU7
CisgICAgICAgICAgICBpZiAoIW1hcHBlZENhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAgbm90IHRyeWluZyBhZ2FpbiBi
ZWNhdXNlIHNpemUgaXMgemVybyIpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlRW1wdHlN
ZW1vcnkoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICByZXN1bHQgPSBtbWFwKG51bGxwdHIs
IG1fbWFwcGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEs
IDApOwotICAgICAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgbW1h
cCBmYWlsZWQgdHdpY2UgIiwgKnRoaXMpOwotICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghbW1hcEJ5dGVzKG1hcHBlZENhcGFj
aXR5LCBtZW1vcnkpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1l
bW9yeTo6Y3JlYXRlIG1tYXAgZmFpbGVkIHR3aWNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQo
bV9zaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgIHsKLSAgICAgICAgYm9vbCBzdWNjZXNz
ID0gIW1wcm90ZWN0KHJlc3VsdCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpLCBQUk9UX1JF
QUQgfCBQUk9UX1dSSVRFKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7CisgICAg
QVNTRVJUKG1lbW9yeSAmJiBzaXplIDw9IG1hcHBlZENhcGFjaXR5KTsKKyAgICBpZiAobXByb3Rl
Y3QobWVtb3J5LCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbXByb3RlY3QgZmFpbGVkIik7CisgICAg
ICAgIHJlbGVhc2VGYXN0TWVtb3J5KG1lbW9yeSwgMCwgbWFwcGVkQ2FwYWNpdHksIG1vZGUpOwor
ICAgICAgICBpZiAobWVtb3J5KSB7CisgICAgICAgICAgICBpZiAobXVubWFwKG1lbW9yeSwgbWFw
cGVkQ2FwYWNpdHkpKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAgIAorICAgIGxhc3RBbGxvY2F0ZWRNZW1vcnlN
b2RlID0gbW9kZTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1h
cCBzdWNjZWVkZWQiKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShtZW1vcnksIGlu
aXRpYWwsIG1heGltdW0sIG1hcHBlZENhcGFjaXR5LCBtb2RlKSk7Cit9CiAKLSAgICBtX21lbW9y
eSA9IHJlc3VsdDsKLSAgICBmYWlsZWQgPSBmYWxzZTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgZGF0YUxvZ0xuKCJNZW1vcnk6Ok1lbW9yeSBtbWFwIHN1Y2NlZWRlZCAiLCAqdGhpcyk7CitS
ZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQ
YWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNb2RlPiBtb2RlKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxk
IGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KKyAgICBSZWZQdHI8TWVtb3J5PiByZXN1bHQg
PSBjcmVhdGVJbXBsKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBtb2RlKTsKKyAgICBpZiAocmVzdWx0
KSB7CisgICAgICAgIGlmIChyZXN1bHQtPm1vZGUoKSA9PSBTaWduYWxpbmcpCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQtPm1fbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1h
cHBlZEJ5dGVzKTsKKyAgICAgICAgaWYgKG1vZGUpCisgICAgICAgICAgICBBU1NFUlQoKm1vZGUg
PT0gcmVzdWx0LT5tb2RlKCkpOworICAgICAgICBBU1NFUlQobGFzdEFsbG9jYXRlZE1lbW9yeU1v
ZGUgPT0gcmVzdWx0LT5tb2RlKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBN
ZW1vcnk6On5NZW1vcnkoKQogewotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4o
Ik1lbW9yeTo6fk1lbW9yeSAiLCAqdGhpcyk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1l
bW9yeTo6fk1lbW9yeSAiLCAqdGhpcyk7CisgICAgcmVsZWFzZUZhc3RNZW1vcnkobV9tZW1vcnks
IG1fc2l6ZSwgbV9tYXBwZWRDYXBhY2l0eSwgbV9tb2RlKTsKICAgICBpZiAobV9tZW1vcnkpIHsK
ICAgICAgICAgaWYgKG11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSkpCiAgICAgICAg
ICAgICBDUkFTSCgpOwpAQCAtMTI4LDIzICsyNDUsMjUgQEAgYm9vbCBNZW1vcnk6Omdyb3coUGFn
ZUNvdW50IG5ld1NpemUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3Vu
dDo6ZnJvbUJ5dGVzKG1fc2l6ZSkpOwogCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFM
b2dMbigiTWVtb3J5Ojpncm93IHRvICIsIG5ld1NpemUsICIgZnJvbSAiLCAqdGhpcyk7CisgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyB0byAiLCBuZXdTaXplLCAiIGZyb20g
IiwgKnRoaXMpOwogCiAgICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gbWF4aW11bSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1aW50NjRfdCBkZXNpcmVkU2l6ZSA9IG5ld1Np
emUuYnl0ZXMoKTsKKyAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5dGVzKCk7CiAK
ICAgICBpZiAobV9tZW1vcnkgJiYgZGVzaXJlZFNpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSkgewot
ICAgICAgICBib29sIHN1Y2Nlc3MgPSAhbXByb3RlY3Qoc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1f
bWVtb3J5KSArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkZXNpcmVkU2l6ZSAtIG1fc2l6
ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNj
ZXNzKTsKKyAgICAgICAgaWYgKG1wcm90ZWN0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9y
eSkgKyBtX3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZGVzaXJlZFNpemUgLSBtX3NpemUpLCBQ
Uk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIk1lbW9yeTo6Z3JvdyBpbi1wbGFjZSBmYWlsZWQgIiwgKnRoaXMpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKICAgICAgICAgbV9zaXplID0gZGVzaXJlZFNpemU7
Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Omdy
b3cgaW4tcGxhY2UgIiwgKnRoaXMpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVt
b3J5Ojpncm93IGluLXBsYWNlICIsICp0aGlzKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCisgICAgQVNTRVJUKG1vZGUoKSAhPSBTaWduYWxpbmcpOwogICAgIC8vIE90aGVyd2lzZSwg
bGV0J3MgdHJ5IHRvIG1ha2Ugc29tZSBuZXcgbWVtb3J5LgogICAgIHZvaWQqIG5ld01lbW9yeSA9
IG1tYXAobnVsbHB0ciwgZGVzaXJlZFNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9Q
UklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKICAgICBpZiAobmV3TWVtb3J5ID09IE1BUF9GQUlM
RUQpCkBAIC0xNTksMTEgKzI3OCwyNiBAQCBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3
U2l6ZSkKICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CiAgICAgbV9zaXplID0g
ZGVzaXJlZFNpemU7CiAKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJNZW1v
cnk6Omdyb3cgIiwgKnRoaXMpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdy
b3cgIiwgKnRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIE1lbW9yeTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiTWVtb3J5IGF0ICIsIFJh
d1BvaW50ZXIobV9tZW1vcnkpLCAiLCBzaXplICIsIG1fc2l6ZSwgIkIgY2FwYWNpdHkgIiwgbV9t
YXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAiIG1heGltdW0gIiwgbV9t
YXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKK30KKworY29uc3QgY2hhciog
TWVtb3J5OjptYWtlU3RyaW5nKE1vZGUgbW9kZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICBjYXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5n
IjsKKyAgICBjYXNlIE1vZGU6OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOworICAgIGNh
c2UgTW9kZTo6TnVtYmVyT2ZNb2RlczogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogfSAvLyBuYW1lc3BhY2UgV2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9y
eS5oCmluZGV4IDIzNmJmODUxMjU2NDU1YmNlOWUzMjM2ZGNjNDU4NGM4NmMxZGNmMGMuLjMzODRh
NDJjNjBiNjU0MTRhMThhMWM3Nzk5YzExYWFkMzVhNTFlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAgLTI3LDYyICsyNyw2OSBAQAogCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVk
ZSAiV2FzbVBhZ2VDb3VudC5oIgogCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKIG5hbWVzcGFj
ZSBXVEYgewogY2xhc3MgUHJpbnRTdHJlYW07CiB9CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVk07CisKK25hbWVzcGFjZSBXYXNt
IHsKIAotY2xhc3MgTWVtb3J5IHsKK2NsYXNzIE1lbW9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPE1l
bW9yeT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lbW9yeSk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFdURjo6UHJpbnRTdHJlYW0m
KSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBvdGhlciBtb2Rlcy4g
c2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCi0gICAg
ZW51bSBjbGFzcyBNb2RlIHsKLSAgICAgICAgQm91bmRzQ2hlY2tpbmcKKyAgICBlbnVtIE1vZGUg
eworICAgICAgICBCb3VuZHNDaGVja2luZywKKyAgICAgICAgU2lnbmFsaW5nLAorICAgICAgICBO
dW1iZXJPZk1vZGVzCiAgICAgfTsKICAgICBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1vZGUpIGNv
bnN0OwogCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9t
ZW1vcnk7IH0KKworICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGUoVk0mLCBQYWdlQ291
bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVxdWly
ZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKKwogICAgIE1lbW9yeSgpID0gZGVmYXVsdDsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtLCBib29sJiBmYWlsZWQpOwotICAgIE1lbW9yeShNZW1vcnkmJiBvdGhlcikKLSAgICAgICAg
OiBtX21lbW9yeShvdGhlci5tX21lbW9yeSkKLSAgICAgICAgLCBtX3NpemUob3RoZXIubV9zaXpl
KQotICAgICAgICAsIG1faW5pdGlhbChvdGhlci5tX2luaXRpYWwpCi0gICAgICAgICwgbV9tYXhp
bXVtKG90aGVyLm1fbWF4aW11bSkKLSAgICAgICAgLCBtX21hcHBlZENhcGFjaXR5KG90aGVyLm1f
bWFwcGVkQ2FwYWNpdHkpCi0gICAgICAgICwgbV9tb2RlKG90aGVyLm1fbW9kZSkKLSAgICB7Ci0g
ICAgICAgIC8vIE1vdmluZyB0cmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBhbGxvY2F0ZWQgbWVt
b3J5LgotICAgICAgICBvdGhlci5tX21lbW9yeSA9IG51bGxwdHI7Ci0gICAgfQogICAgIH5NZW1v
cnkoKTsKIAogICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9Ci0g
ICAgdWludDY0X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgUGFnZUNvdW50IHNpemVJblBhZ2Vz
KCkgY29uc3QgeyByZXR1cm4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKTsgfQogCiAgICAg
UGFnZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KICAgICBQYWdl
Q291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQogCisgICAgc3RhdGlj
IE1vZGUgbGFzdEFsbG9jYXRlZE1vZGUoKTsKICAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVy
biBtX21vZGU7IH0KIAorICAgIC8vIGdyb3coKSBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0
aGUgSlNXZWJBc3NlbWJseU1lbW9yeSBvYmplY3Qgc2luY2UgdGhhdCBvYmplY3QgbmVlZHMgdG8g
dXBkYXRlIGludGVybmFsCisgICAgLy8gcG9pbnRlcnMgd2l0aCB0aGUgY3VycmVudCBiYXNlIGFu
ZCBzaXplLgogICAgIGJvb2wgZ3JvdyhQYWdlQ291bnQpOwogCi0gICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fbWVt
b3J5KTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKE1lbW9yeSwgbV9zaXplKTsgfQotICAgIAorICAgIHZvaWQgY2hlY2soKSB7
ICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7IH0KIHByaXZhdGU6CisgICAgc3RhdGljIFJl
ZlB0cjxNZW1vcnk+IGNyZWF0ZUltcGwoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0
KTsKKyAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTW9kZSk7CisgICAgTWVtb3J5KFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisKKyAgICAvLyBGSVhNRTogd2Ugc2hv
dWxkIG1vdmUgdGhlc2UgdG8gdGhlIGluc3RhbmNlIHRvIGF2b2lkIGEgbG9hZCBvbiBpbnN0YW5j
ZS0+aW5zdGFuY2UgY2FsbHMuCiAgICAgdm9pZCogbV9tZW1vcnkgeyBudWxscHRyIH07Ci0gICAg
dWludDY0X3QgbV9zaXplIHsgMCB9OworICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAgICAgUGFn
ZUNvdW50IG1faW5pdGlhbDsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVtOwotICAgIHVpbnQ2NF90
IG1fbWFwcGVkQ2FwYWNpdHkgeyAwIH07CisgICAgc2l6ZV90IG1fbWFwcGVkQ2FwYWNpdHkgeyAw
IH07CiAgICAgTW9kZSBtX21vZGUgeyBNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9u
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5j
cHAKaW5kZXggNmIwNjNkMzUxMjRlOTdhODNiMWYxZTA4NzNhNDEwN2M5ZjBlOWZkNS4uYWY1YjFi
ODE5NWNjYmZmYzFhY2EzNTlhODBlMjM2YWY1OTQxMTg3NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpAQCAtNzEs
MTEgKzcyLDIyIEBAIFBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3Rv
cjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpCiB7CiB9CiAKLU1lbW9yeUluZm9y
bWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbihQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1h
eGltdW0sICBib29sIGlzSW1wb3J0KQorTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0
aW9uKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9w
dGlvbmFsPE1lbW9yeTo6TW9kZT4gcmVjb21waWxlTW9kZSwgYm9vbCBpc0ltcG9ydCkKICAgICA6
IG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiAgICAgLCBtX2lz
SW1wb3J0KGlzSW1wb3J0KQogeworICAgIGlmICghaXNJbXBvcnQgJiYgIXJlY29tcGlsZU1vZGUp
IHsKKyAgICAgICAgbV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFs
LCBtYXhpbXVtLCBNZW1vcnk6OlNpZ25hbGluZyk7CisgICAgICAgIGlmIChtX3Jlc2VydmVkTWVt
b3J5KQorICAgICAgICAgICAgQVNTRVJUKCEhKm1fcmVzZXJ2ZWRNZW1vcnkpOworICAgIH0KKwor
ICAgIGlmIChyZWNvbXBpbGVNb2RlKQorICAgICAgICBtX21vZGUgPSAqcmVjb21waWxlTW9kZTsK
KyAgICBlbHNlCisgICAgICAgIG1fbW9kZSA9IE1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUoKTsK
KwogICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9pbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VSVCgh
bV9tYXhpbXVtIHx8IG1fbWF4aW11bSA+PSBtX2luaXRpYWwpOwogICAgIEFTU0VSVCghISp0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZv
cm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0
aW9uLmgKaW5kZXggNmU3ZjUyMTg5NDdlMDE2YjQ4ZmRmNjAxOWQzNjhhNTc1N2UzODViNy4uYzdk
OGYzNGQ2MzVhY2ZlMGU4MjM5NDhmMmY4OTBlOTRmYTM5YmI5NSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKQEAgLTI4LDcgKzI4
LDkgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJHUFJJbmZvLmgiCisj
aW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewpAQCAtNTIsMTcgKzU0LDI0IEBAIHB1YmxpYzoKICAgICAgICAg
QVNTRVJUKCEqdGhpcyk7CiAgICAgfQogCi0gICAgTWVtb3J5SW5mb3JtYXRpb24oUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sIGlzSW1wb3J0KTsKKyAgICBNZW1vcnlJ
bmZvcm1hdGlvbihWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3Rk
OjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+LCBib29sIGlzSW1wb3J0KTsKIAogICAgIFBhZ2VDb3Vu
dCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CiAgICAgUGFnZUNvdW50IG1h
eGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KKyAgICBib29sIGhhc1Jlc2VydmVk
TWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNlcnZlZE1lbW9yeTsgfQorICAgIE1lbW9yeSYg
dGFrZVJlc2VydmVkTWVtb3J5KCkgeyBBU1NFUlQoaGFzUmVzZXJ2ZWRNZW1vcnkoKSk7IHJldHVy
biAqbV9yZXNlcnZlZE1lbW9yeS5sZWFrUmVmKCk7IH0KKyAgICBNZW1vcnk6Ok1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgaXNJbXBvcnQoKSBjb25zdCB7IHJl
dHVybiBtX2lzSW1wb3J0OyB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISFtX2luaXRpYWw7IH0KIAogcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIGEgdW5p
cXVlX3B0ciBzbyB3ZSBjYW4gcGFzcyBNb2R1bGVJbmZvcm1hdGlvbiBhcyBjb25zdCBhbmQgc3Rp
bGwgYmUKKyAgICAvLyBhYmxlIHRvIHRha2Ugb3duZXJzaGlwIG9mIHRoaXMuCisgICAgUmVmUHRy
PE1lbW9yeT4gbV9yZXNlcnZlZE1lbW9yeTsKICAgICBQYWdlQ291bnQgbV9pbml0aWFsIHsgfTsK
ICAgICBQYWdlQ291bnQgbV9tYXhpbXVtIHsgfTsKKyAgICBNZW1vcnk6Ok1vZGUgbV9tb2RlIHsg
TWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZh
bHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwCmluZGV4IDUxNzczZDA2ZTYyMDEyM2I1YWMwNDI2MmE5MDhiYWIwYmY4ZjE1OTku
LjUyMTE2NGZmNGM0NmFiNGYxYTNjY2EzN2NkZTkzOWUxMmViNmJiYzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0zMTYsNyArMzE2
LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICBBU1NFUlQoaW5pdGlhbFBhZ2VDb3VudCk7CiAgICAgQVNT
RVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VD
b3VudCk7CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9u
KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1wb3J0KTsKKyAgICBtX3Jl
c3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKCptX3ZtLCBpbml0aWFsUGFn
ZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBtX21vZGUsIGlzSW1wb3J0KTsKICAgICByZXR1cm4g
eyB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2Vy
LmgKaW5kZXggNDFiNTdmYzgyMGM0NWI5YjRlYzVmYTdjNjk1YmE1NmNhZmI4NGExMC4uOTRiYTE0
ZTE1YTNmZGEzMTA0ZTMzYmFjMDkzYzFmMWU4MWNmMjBjNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVBh
cnNlci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTQzLDEyICs0NCw5IEBA
IHN0cnVjdCBNb2R1bGVQYXJzZXJSZXN1bHQgewogY2xhc3MgTW9kdWxlUGFyc2VyIDogcHVibGlj
IFBhcnNlcjxNb2R1bGVQYXJzZXJSZXN1bHQ+IHsKIHB1YmxpYzoKIAotICAgIE1vZHVsZVBhcnNl
cihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0
aCkKKyAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIs
IHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiBtb2RlKQog
ICAgICAgICA6IFBhcnNlcih2bSwgc291cmNlQnVmZmVyLCBzb3VyY2VMZW5ndGgpCi0gICAgewot
ICAgIH0KLSAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNv
dXJjZUJ1ZmZlcikKLSAgICAgICAgOiBNb2R1bGVQYXJzZXIodm0sIHNvdXJjZUJ1ZmZlci5kYXRh
KCksIHNvdXJjZUJ1ZmZlci5zaXplKCkpCisgICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewog
ICAgIH0KIApAQCAtNjgsNiArNjYsNyBAQCBwcml2YXRlOgogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYg
aW5pdEV4cHJUeXBlKTsKIAogICAgIE1vZHVsZVBhcnNlclJlc3VsdCBtX3Jlc3VsdDsKKyAgICBz
dGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gbV9tb2RlIHsgc3RkOjpudWxsb3B0IH07CiAgICAg
Ym9vbCBtX2hhc1RhYmxlIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmNwcAppbmRleCA1OTgwYjUxZTg3NDIyMjM3NTVjZTBjM2RmMmMxNmIxZGU5ZWM4
ZjEyLi40ODM1YWEyOGYyY2FmN2EyMWM2YWM0YTE5M2MzNzcxZTU4MjhjYWE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1
ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhh
bmRsZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZVBh
cnNlci5oIgogI2luY2x1ZGUgIldhc21WYWxpZGF0ZS5oIgpAQCAtNjEsMTQgKzYyLDE0IEBAIFBs
YW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5n
dGgpCiB7CiB9CiAKLWJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCitib29sIFBs
YW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJl
Y29tcGlsZU1vZGUpCiB7CiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWU7CiAgICAgaWYgKHZl
cmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCiAgICAgICAgIHN0YXJ0VGlt
ZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogCiAgICAgewotICAgICAgICBNb2R1bGVQYXJzZXIg
bW9kdWxlUGFyc2VyKG1fdm0sIG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCk7CisgICAgICAgIE1v
ZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV92bSwgbV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCBy
ZWNvbXBpbGVNb2RlKTsKICAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9IG1vZHVsZVBhcnNlci5w
YXJzZSgpOwogICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7CiAgICAgICAgICAgICBtX2Vycm9y
TWVzc2FnZSA9IHBhcnNlUmVzdWx0LmVycm9yKCk7CkBAIC0xMDksMTAgKzExMCwxMiBAQCBib29s
IFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQogLy8gVGhlIHJlYXNvbiB0aGlzIGlzIE9L
IGlzIHRoYXQgd2UgZ3VhcmFudGVlIHRoYXQgdGhlIG1haW4gdGhyZWFkIGRvZXNuJ3QgY29udGlu
dWUgdW50aWwgYWxsIHRocmVhZHMKIC8vIHRoYXQgY291bGQgdG91Y2ggaXRzIHN0YWNrIGFyZSBk
b25lIGV4ZWN1dGluZy4KIFNVUFBSRVNTX0FTQU4gCi12b2lkIFBsYW46OnJ1bigpCit2b2lkIFBs
YW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gcmVjb21waWxlTW9kZSkKIHsKLSAg
ICBpZiAoIXBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkKKyAgICBpZiAoIXBhcnNlQW5kVmFsaWRh
dGVNb2R1bGUocmVjb21waWxlTW9kZSkpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVjb21w
aWxlTW9kZSkKKyAgICAgICAgQVNTRVJUKG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tb2Rl
KCkgPT0gcmVjb21waWxlTW9kZSk7CiAKICAgICBhdXRvIHRyeVJlc2VydmVDYXBhY2l0eSA9IFt0
aGlzXSAoYXV0byYgdmVjdG9yLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogd2hhdCkgewogICAg
ICAgICBpZiAoVU5MSUtFTFkoIXZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCA2OTgwYmRiYmJlMTdhNTE5NWM4
YzVlMDM1ZWI0ZTZhYTEwZDJjZjE1Li5kMDcwMzc1MjAzMmM5YWEwY2Q4NTg0MTdmYjE3MjZlN2Zi
OWMzZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTQ5LDkgKzQ5
LDkgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0qLCBjb25zdCB1aW50
OF90Kiwgc2l6ZV90KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigpOwogCi0gICAgYm9v
bCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiA9IHN0ZDo6bnVsbG9wdCk7CiAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1bigpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiA9IHN0ZDo6bnVsbG9wdCk7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0Kiwg
c3RkOjpmdW5jdGlvbjx2b2lkKHVuc2lnbmVkLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgSlNXZWJB
c3NlbWJseUNhbGxlZSopPik7CiAKQEAgLTkyLDYgKzkyLDggQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gV1RGTW92ZShtX3dhc21FeGl0U3R1YnMpOwogICAgIH0KIAorICAgIE1lbW9yeTo6TW9k
ZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUo
KTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4g
bV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICBWZWN0b3I8RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
PiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKaW5kZXggYzI3NzEyYTEwZmZm
YzhkZjNmMWViNjA2YjA4Y2ZjOWYwN2Y4ZTM2Yi4uNTE3MTI3ODVmMjkzYjhmMTBiYTBkOTk3YzQ2
YTAxZWI1OTdkNDhmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUZh
dWx0U2lnbmFsSGFuZGxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDMsMTEgKzQ0LDEz
IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXYXNt
OjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAKICAgICBtX2VudHJ5cG9pbnQgPSBXVEZNb3ZlKGVudHJ5cG9pbnQpOworICAgIFdhc206OnJl
Z2lzdGVyQ29kZSh2bSwgbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0
YWJsZU1lbW9yeSgpLT5zdGFydCgpLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYo
KS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxlZSo+KGNlbGwpOworICAg
IFdhc206OnVucmVnaXN0ZXJDb2RlKCpjZWxsLT52bSgpLCB0aGlzT2JqZWN0LT5tX2VudHJ5cG9p
bnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIHRo
aXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVN
ZW1vcnkoKS0+ZW5kKCkpOwogICAgIHRoaXNPYmplY3QtPkpTV2ViQXNzZW1ibHlDYWxsZWU6On5K
U1dlYkFzc2VtYmx5Q2FsbGVlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjIx
ZjhhNWNjNjQ1ZjJlMjViNzc0MTE3YmRhZjk4YWY0NzBkMzRhMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3Bw
CkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5TW9kdWxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCBu
dWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spIH07
CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZt
LCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlu
a0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiB3YXNtRXhpdFN0dWJzLCBXYXNt
OjpNZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCisgICAgOiBCYXNlKHZt
LCB2bS53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fY2FsbExp
bmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5rSW5mb3MpKQorICAgICwgbV93YXNtRXhpdFN0dWJzKFdU
Rk1vdmUod2FzbUV4aXRTdHVicykpCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fY2FsbGVl
Q291bnQoY2FsbGVlQ291bnQpCit7CisgICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBvd25lcik7
CisgICAgbWVtc2V0KGNhbGxlZXMoKSwgMCwgbV9jYWxsZWVDb3VudCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogMik7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8SlNX
ZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp+SlNX
ZWJBc3NlbWJseUNvZGVCbG9jaygpOworfQorCitib29sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkKK3sKKyAgICBpZiAobW9k
ZSgpID09IFdhc206Ok1lbW9yeTo6U2lnbmFsaW5nKQorICAgICAgICByZXR1cm4gbWVtb3J5LT5t
ZW1vcnkoKS5tb2RlKCkgPT0gbW9kZSgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fbW9kdWxlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+
bV9jYWxsZWVDb3VudCAqIDI7IGkrKykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+Y2FsbGVlcygpW2ldKTsKKworICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXpl
cigmdGhpc09iamVjdC0+bV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKK30KKwordm9pZCBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgpCit7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogdGhpc09iamVjdCA9
IGJpdHdpc2VfY2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oCisgICAgICAgIGJpdHdpc2Vf
Y2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUNvZGVCbG9j
aywgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7CisgICAgZm9yIChhdXRvIGl0ZXIgPSB0aGlz
T2JqZWN0LT5tX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCisgICAgICAg
ICgqaXRlciktPnZpc2l0V2VhaygqdGhpc09iamVjdC0+dm0oKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5k
ZXggZmJjMWNlYmZiOWNiOGE1OWM5ZWFlNmU2ZGQ5OWZjNTU1ZjViMTNjYy4uMTI4MDI1ZTVjMDRm
ODljOTZmYWYzNTZhZjUxNDE2OGMxMzQwZjgyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDYgKzM4LDE4
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0
TWVtb3J5KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1v
cnkpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIC8v
IFdlIGNyZWF0ZSBzdHViIG1lbW9yaWVzIGV2ZW4gZm9yIG1vZHVsZXMgdGhhdCBzaG91bGQgZXZl
bnR1YWxseSBnZXQgYSBtZW1vcnkgc28gd2Ugd2FudCB0byBhdm9pZCByZWNvbXBsaW5nIHRoZXJl
LgorICAgIGlmIChtZW1vcnktPm1lbW9yeSgpKSB7CisgICAgICAgIGF1dG8gY29kZUJsb2NrID0g
bV9jb2RlQmxvY2stPm1vZHVsZSgpLT5jb2RlQmxvY2sodm0sIGV4ZWMsIG1lbW9yeSk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsKTsKKyAgICAgICAgbV9jb2RlQmxvY2suc2V0
KHZtLCB0aGlzLCBjb2RlQmxvY2spOworICAgIH0KKyAgICBtX21lbW9yeS5zZXQodm0sIHRoaXMs
IG1lbW9yeSk7Cit9CisKIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNXZWJBc3NlbWJseU1v
ZHVsZSogbW9kdWxlLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KQogewogICAgIC8vIEZJWE1FOiBUaGVzZSBvYmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcg
d2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVyZS4KQEAgLTY3LDcgKzc5LDcgQEAgdm9pZCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJs
eU1vZHVsZSogbW9kdWxlLAogICAgIG1fZ2xvYmFscyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1h
bGxvYyhleHRyYU1lbW9yeVNpemUpOwogICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxv
Y2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsKIAotICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9k
dWxlKTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIG1vZHVsZS0+Y29kZUJsb2NrKCkp
OwogICAgIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0LnNldCh2bSwgdGhpcywgbW9kdWxlTmFtZXNw
YWNlT2JqZWN0KTsKICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAiZXhwb3J0cyIpLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIE5vbmUpOwogfQpAQCAtODMsNyAr
OTUsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGUp
OworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrKTsKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tZW1vcnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fdGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAppbmRleCA5OWEyYzkwZjdlYTM1M2UzNmI2NTVh
YmU1Y2RkNWM0OTgzYzUzYTE4Li44OTIzZTE2NTBiZjMxNjVkYTk5MThlZjY5YzVjNTk2ZDI4MWQx
YjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiSlNEZXN0cnVj
dGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAKQEAgLTQ3LDEwICs0OCwxNiBAQCBwdWJsaWM6
CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUo
KQorICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0CiAgICAgewotICAgICAg
ICBBU1NFUlQobV9tb2R1bGUpOwotICAgICAgICByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7CisgICAg
ICAgIEFTU0VSVChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+bW9k
dWxlKCk7CisgICAgfQorCisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVy
biBtX2NvZGVCbG9jay5nZXQoKTsKICAgICB9CiAKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiog
aW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQpAQCAtNzAsNyArNzcsOSBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1v
cnkuZ2V0KCk7IH0KLSAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1v
cnkqIG1lbW9yeSkgeyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7IH0KKyAgICAvLyBD
YWxsaW5nIHRoaXMgbWlnaHQgdHJpZ2dlciBhIHJlY29tcGlsZS4KKyAgICB2b2lkIHNldE1lbW9y
eShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNZW1vcnkqKTsKKyAgICBXYXNtOjpNZW1v
cnk6Ok1vZGUgbWVtb3J5TW9kZSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7
IH0KIAogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdl
dCgpOyB9CiAgICAgdm9pZCBzZXRUYWJsZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFi
bGUpIHsgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsgfQpAQCAtMTA0LDcgKzExMyw3IEBA
IHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlNb2R1bGU+IG1fbW9kdWxlOworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VP
YmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFz
c2VtYmx5TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRh
YmxlPiBtX3RhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmNwcAppbmRleCBmNDI1M2I1YmZiODg2Y2VjZDlkNjQ1YjU4NjYx
ZTEzMzA5ZTIzZTIzLi5hZjdmMjQ2YTc1OTE0MTEwM2MyNGM5ZjNlZWI1MDk3OTExYTcyNzZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVt
b3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmNwcApAQCAtMzcsOSArMzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENs
YXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5NZW1v
cnkiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlN
ZW1vcnkpIH07CiAKLUpTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpNZW1vcnkmJiBtZW1vcnkp
CitKU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1vcnkpCiB7Ci0g
ICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2Vt
Ymx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1lbW9yeSh2bSwgc3RydWN0dXJlLCBz
dGQ6OmZvcndhcmQ8V2FzbTo6TWVtb3J5PihtZW1vcnkpKTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZtLmhlYXAp
KSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUobWVtb3J5KSk7Cisg
ICAgaW5zdGFuY2UtPm1fbWVtb3J5LT5jaGVjaygpOwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtNDksMTAgKzUwLDEzIEBAIFN0
cnVjdHVyZSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVt
b3J5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206Ok1lbW9yeSYmIG1lbW9yeSkK
K0pTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1vcnkpCiAgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX21lbW9yeShXVEZNb3ZlKG1lbW9yeSkpCiB7CisgICAgQVNT
RVJUKG1fbWVtb3J5LT5yZWZDb3VudCgpID09IDEpOworICAgIG1fbWVtb3J5QmFzZSA9IG1fbWVt
b3J5LT5tZW1vcnkoKTsKKyAgICBtX21lbW9yeVNpemUgPSBtX21lbW9yeS0+c2l6ZSgpOwogfQog
CiBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtNjAsMTIgKzY0LDEwIEBAIEpTQXJyYXlCdWZm
ZXIqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiAgICAgaWYgKG1fYnVmZmVyV3JhcHBlcikKICAgICAgICAgcmV0dXJuIG1f
YnVmZmVyV3JhcHBlci5nZXQoKTsKIAotICAgIGF1dG8gZGVzdHJ1Y3RvciA9IFtdICh2b2lkKikg
ewotICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUgdG8gZGVzdHJv
eSB0aGUgbWVtb3J5LgotICAgICAgICAvLyBUaGUgQXJyYXlCdWZmZXIgYmFja2luZyB0aGUgSlNB
cnJheUJ1ZmZlciBpcyBvbmx5IG93bmVkIGJ5IHVzLAotICAgICAgICAvLyBzbyB3ZSBndWFyYW50
ZWUgaXRzIGxpZmVjeWNsZS4KLSAgICB9OwotICAgIG1fYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUZyb21CeXRlcyhtZW1vcnkoKS0+bWVtb3J5KCksIG1lbW9yeSgpLT5zaXplKCksIFdURk1v
dmUoZGVzdHJ1Y3RvcikpOworICAgIC8vIFdlIGNhbid0IHVzZSBhIHJlZiBoZXJlIHNpbmNlIGl0
IGRvZXNuJ3QgaGF2ZSBhIGNvcHkgY29uc3RydWN0b3IuLi4KKyAgICBSZWZQdHI8V2FzbTo6TWVt
b3J5PiBtZW1vcnlSZWZQdHIgPSAmbV9tZW1vcnkuZ2V0KCk7CisgICAgYXV0byBkZXN0cnVjdG9y
ID0gW21lbW9yeVJlZlB0cl0gKHZvaWQqKSB7IH07CisgICAgbV9idWZmZXIgPSBBcnJheUJ1ZmZl
cjo6Y3JlYXRlRnJvbUJ5dGVzKG1lbW9yeSgpLm1lbW9yeSgpLCBtZW1vcnkoKS5zaXplKCksIFdU
Rk1vdmUoZGVzdHJ1Y3RvcikpOwogICAgIG1fYnVmZmVyV3JhcHBlci5zZXQodm0sIHRoaXMsIEpT
QXJyYXlCdWZmZXI6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5tX2FycmF5QnVmZmVyU3RydWN0
dXJlLmdldCgpLCBtX2J1ZmZlci5nZXQoKSkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fYnVmZmVy
V3JhcHBlcik7CiAgICAgcmV0dXJuIG1fYnVmZmVyV3JhcHBlci5nZXQoKTsKQEAgLTc2LDcgKzc4
LDcgQEAgV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3coRXhlY1N0YXRl
KiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBXYXNt
OjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0gbWVtb3J5KCktPnNpemVJblBhZ2VzKCk7CisgICAg
V2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCA9IG1lbW9yeSgpLnNpemVJblBhZ2VzKCk7CiAK
ICAgICBpZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxpZChkZWx0YSkpIHsKICAgICAgICAgaWYg
KHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKQEAgLTkyLDEyICs5NCwxNiBAQCBXYXNt
OjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhFeGVjU3RhdGUqIGV4ZWMsIHVp
bnQzMl90IGRlbHRhLCBib29sCiAgICAgfQogCiAgICAgaWYgKGRlbHRhKSB7Ci0gICAgICAgIGJv
b2wgc3VjY2VzcyA9IG1lbW9yeSgpLT5ncm93KG5ld1NpemUpOworICAgICAgICBib29sIHN1Y2Nl
c3MgPSBtZW1vcnkoKS5ncm93KG5ld1NpemUpOwogICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChtX21lbW9yeUJhc2UgPT0gbWVtb3J5KCkubWVtb3J5KCkpOworICAg
ICAgICAgICAgQVNTRVJUKG1fbWVtb3J5U2l6ZSA9PSBtZW1vcnkoKS5zaXplKCkpOwogICAgICAg
ICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKICAgICAgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpKTsKICAgICAgICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKICAgICAgICAg
fQorICAgICAgICBtX21lbW9yeUJhc2UgPSBtZW1vcnkoKS5tZW1vcnkoKTsKKyAgICAgICAgbV9t
ZW1vcnlTaXplID0gbWVtb3J5KCkuc2l6ZSgpOwogICAgIH0KIAogICAgIC8vIFdlIG5lZWQgdG8g
Y2xlYXIgb3V0IHRoZSBvbGQgYXJyYXkgYnVmZmVyIGJlY2F1c2UgaXQgbWlnaHQgbm93IGJlIHBv
aW50aW5nCkBAIC0xMTAsNiArMTE2LDcgQEAgV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlN
ZW1vcnk6Omdyb3coRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbAogICAgICAg
ICBtX2J1ZmZlcldyYXBwZXIuY2xlYXIoKTsKICAgICB9CiAKKyAgICBtZW1vcnkoKS5jaGVjaygp
OwogICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiB9CiAKQEAgLTEyMywxMyArMTMwLDYgQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBhdXRv
IG1lbW9yeSA9IHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihjZWxsKTsKICAgICBB
U1NFUlQobWVtb3J5LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAgIFZNJiB2bSA9ICptZW1v
cnktPnZtKCk7Ci0KLSAgICBpZiAobWVtb3J5LT5tX2J1ZmZlcikgewotICAgICAgICBBcnJheUJ1
ZmZlckNvbnRlbnRzIGR1bW15Q29udGVudHM7Ci0gICAgICAgIG1lbW9yeS0+bV9idWZmZXItPnRy
YW5zZmVyVG8odm0sIGR1bW15Q29udGVudHMpOwotICAgICAgICBtZW1vcnktPm1fYnVmZmVyID0g
bnVsbHB0cjsKLSAgICB9CiAKICAgICBtZW1vcnktPkpTV2ViQXNzZW1ibHlNZW1vcnk6On5KU1dl
YkFzc2VtYmx5TWVtb3J5KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKaW5kZXggZmZmMTQxNTcwMmNmZWFkNmNlOTIyMTQ5
MDJkZGI4YzZiNDRkMjY4MC4uMGViMTg4ZDYwZDVlMzIwMWFmNjVjOGNmOWQyZjg4NTY5OWM4YTdj
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNZW1vcnkuaApAQCAtNDEsMjUgKzQxLDI3IEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlNZW1vcnkg
OiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNE
ZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5
KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBXYXNtOjpNZW1vcnkmJik7CisgICAgc3RhdGljIEpT
V2ViQXNzZW1ibHlNZW1vcnkqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpNZW1v
cnk+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBXYXNtOjpN
ZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuICZtX21lbW9yeTsgfQorICAgIFdhc206Ok1lbW9yeSYg
bWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBKU0FycmF5QnVmZmVyKiBi
dWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopOwogICAgIFdhc206OlBhZ2VDb3VudCBncm93
KEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhLCBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09u
RmFpbHVyZSk7CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1fbWVtb3J5KSArIFdhc206
Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1f
bWVtb3J5KSArIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNz
ZW1ibHlNZW1vcnksIG1fbWVtb3J5QmFzZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5TWVtb3J5LCBt
X21lbW9yeVNpemUpOyB9CiAKLXByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZN
JiwgU3RydWN0dXJlKiwgV2FzbTo6TWVtb3J5JiYpOworcHJpdmF0ZToKKyAgICBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1lbW9yeT4mJik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwog
Ci0gICAgV2FzbTo6TWVtb3J5IG1fbWVtb3J5OworICAgIHZvaWQqIG1fbWVtb3J5QmFzZTsKKyAg
ICBzaXplX3QgbV9tZW1vcnlTaXplOworICAgIFJlZjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5Owog
ICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CiAgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IDA4ZmE1ODQ2Mjhm
MDdkMmQ4YzhjM2IyYjc4ZDExNTgwYzRmMjgxNzYuLmQ4N2UyNzQxMDYxY2IzN2ZhMzNiZGY1MTMy
YTA0YzIxYzI3MDRkZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC0zMCwxOCArMzAsNDYgQEAKIAogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCisjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlD
b21waWxlRXJyb3IuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVk
ZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNt
UGxhbi5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJB
c3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6
OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24s
IEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0
U3R1YnM+JiYgd2FzbUV4aXRTdHVicywgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlLCB1
bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpQ
bGFuJiBwbGFuLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeTo6TW9kZT4gbW9kZSkKIHsKLSAg
ICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1i
bHlNb2R1bGU+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGNhbGxlZUNvdW50KSkpIEpTV2ViQXNz
ZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgc3RkOjpmb3J3YXJkPHN0ZDo6dW5pcXVlX3B0cjxX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4+KG1vZHVsZUluZm9ybWF0aW9uKSwgc3RkOjpmb3J3YXJk
PEJhZzxDYWxsTGlua0luZm8+PihjYWxsTGlua0luZm9zKSwgc3RkOjpmb3J3YXJkPFZlY3RvcjxX
YXNtOjpXYXNtRXhpdFN0dWJzPj4od2FzbUV4aXRTdHVicyksIGNhbGxlZUNvdW50KTsKLSAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGV4cG9ydFN5bWJvbFRhYmxlKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgLy8gT24gZmFpbHVyZSwgYSBu
ZXcgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIGlzIHRocm93bi4KKyAgICBwbGFuLnJ1bihtb2Rl
KTsKKyAgICBpZiAocGxhbi5mYWlsZWQoKSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihleGVjLCB2bSwgcGxhbi5l
cnJvck1lc3NhZ2UoKSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYg
KG1vZGUpCisgICAgICAgIEFTU0VSVCgqbW9kZSA9PSBwbGFuLm1vZGUoKSk7CisKKyAgICB1bnNp
Z25lZCBjYWxsZWVDb3VudCA9IHBsYW4uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCk7CisgICAgYXV0
byogY29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCB0aGlzLCBw
bGFuLnRha2VDYWxsTGlua0luZm9zKCksIHBsYW4udGFrZVdhc21FeGl0U3R1YnMoKSwgcGxhbi5t
b2RlKCksIGNhbGxlZUNvdW50KTsKKworICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoZXhlYy0+
anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksCisgICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVl
SW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+c2V0SlNFbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50Q2Fs
bGVlKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0s
IGNhbGxlZUluZGV4LCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgICAgIH0pOworICAgIHJl
dHVybiBjb2RlQmxvY2s7Cit9CisKK0pTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlN
b2R1bGU6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKQoreworICAgIGF1dG8qIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0u
aGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSk7CisKKyAgICBpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWMsIHNvdXJjZSwgYnl0ZVNpemUpOwogICAgIHJldHVy
biBpbnN0YW5jZTsKIH0KIApAQCAtNTAsMjEgKzc4LDYxIEBAIFN0cnVjdHVyZSogSlNXZWJBc3Nl
bWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQog
Ci1KU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4m
JiBtb2R1bGVJbmZvcm1hdGlvbiwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBW
ZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiB3YXNtRXhpdFN0dWJzLCB1bnNpZ25lZCBjYWxs
ZWVDb3VudCkKK0pTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAs
IG1fbW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlvbikpCi0gICAgLCBt
X2NhbGxMaW5rSW5mb3MoV1RGTW92ZShjYWxsTGlua0luZm9zKSkKLSAgICAsIG1fd2FzbUV4aXRT
dHVicyhXVEZNb3ZlKHdhc21FeGl0U3R1YnMpKQotICAgICwgbV9jYWxsZWVDb3VudChjYWxsZWVD
b3VudCkKIHsKLSAgICBtZW1zZXQoY2FsbGVlcygpLCAwLCBtX2NhbGxlZUNvdW50ICogc2l6ZW9m
KFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikgKiAyKTsKIH0KIAotdm9pZCBKU1dl
YkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFN5bWJvbFRhYmxlKiBleHBv
cnRTeW1ib2xUYWJsZSkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OmNvZGVCbG9jayhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1lbW9y
eSogbWVtb3J5KQoreworICAgIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlID0gbWVtb3J5LT5tZW1v
cnkoKS5tb2RlKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2FzbTo6TWVtb3J5
OjpOdW1iZXJPZk1vZGVzOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2Nrc1tpXSAmJiBt
X2NvZGVCbG9ja3NbaV0tPmlzU2FmZVRvUnVuKG1lbW9yeSkpCisgICAgICAgICAgICByZXR1cm4g
bV9jb2RlQmxvY2tzW2ldLmdldCgpOworICAgIH0KKworICAgIEFTU0VSVCghbV9jb2RlQmxvY2tz
W21vZGVdKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
Ly8gV2UgZG9uJ3QgaGF2ZSBhIGNvZGUgYmxvY2sgZm9yIHRoaXMgbW9kZSwgd2UgbmVlZCB0byBy
ZWNvbXBpbGUuLi4KKyAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBzdGF0aWNfY2FzdDx1aW50OF90
Kj4obV9zb3VyY2VCdWZmZXItPmRhdGEoKSksIG1fc291cmNlQnVmZmVyLT5ieXRlTGVuZ3RoKCkp
OworCisgICAgYXV0byogY29kZUJsb2NrID0gYnVpbGRDb2RlQmxvY2sodm0sIGV4ZWMsIHBsYW4s
IG1vZGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAg
QVNTRVJUKHBsYW4uZXhwb3J0cygpLnNpemUoKSA9PSBtX2V4cG9ydFN5bWJvbFRhYmxlLT5zaXpl
KCkpOworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGZvciAoYXV0byYgZXhw
IDogcGxhbi5leHBvcnRzKCkpCisgICAgICAgICAgICBBU1NFUlQobV9leHBvcnRTeW1ib2xUYWJs
ZS0+Y29udGFpbnMoZXhwLmZpZWxkLmltcGwoKSkpOworICAgIH0KKworICAgIEFTU0VSVChtb2Rl
ID09IGNvZGVCbG9jay0+bW9kZSgpKTsKKyAgICBtX2NvZGVCbG9ja3NbbW9kZV0uc2V0KHZtLCB0
aGlzLCBjb2RlQmxvY2spOworICAgIHJldHVybiBjb2RlQmxvY2s7Cit9CisKK3ZvaWQgSlNXZWJB
c3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVp
bnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworCisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFdhc206OlBsYW4gcGxhbigmdm0s
IHNvdXJjZSwgYnl0ZVNpemUpOworCisgICAgYXV0byogY29kZUJsb2NrID0gYnVpbGRDb2RlQmxv
Y2sodm0sIGV4ZWMsIHBsYW4pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsKTsKKwor
ICAgIC8vIE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0
dXJuZWQgd2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUgdmFsaWRhdGVkIEFzdC5tb2R1bGUuCisg
ICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZSh2
bSk7CisgICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4cG9ydHMoKSkgeworICAgICAgICBhdXRv
IG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5vTG9ja2lu
Z05lY2Vzc2FyeSk7CisgICAgICAgIGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVj
ZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZz
ZXQpKSk7CisgICAgfQorCisgICAgbV9zb3VyY2VCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KHNvdXJjZSwgYnl0ZVNpemUpOworICAgIG1fbW9kdWxlSW5mb3JtYXRpb24gPSBwbGFuLnRha2VN
b2R1bGVJbmZvcm1hdGlvbigpOwogICAgIG1fZXhwb3J0U3ltYm9sVGFibGUuc2V0KHZtLCB0aGlz
LCBleHBvcnRTeW1ib2xUYWJsZSk7CisgICAgbV9jb2RlQmxvY2tzW2NvZGVCbG9jay0+bW9kZSgp
XS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVs
ZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC03OSwxOCArMTQ3LDggQEAgdm9pZCBKU1dlYkFz
c2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXhwb3J0U3ltYm9sVGFibGUpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX2NhbGxlZUNvdW50ICogMjsg
aSsrKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5jYWxsZWVzKClbaV0pOwot
Ci0gICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZ0aGlzT2JqZWN0LT5tX3Vu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIpOwotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OlVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKLXsKLSAgICBK
U1dlYkFzc2VtYmx5TW9kdWxlKiB0aGlzT2JqZWN0ID0gYml0d2lzZV9jYXN0PEpTV2ViQXNzZW1i
bHlNb2R1bGUqPigKLSAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9P
RkZTRVRPRihKU1dlYkFzc2VtYmx5TW9kdWxlLCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpKTsK
LSAgICBmb3IgKGF1dG8gaXRlciA9IHRoaXNPYmplY3QtPm1fY2FsbExpbmtJbmZvcy5iZWdpbigp
OyAhIWl0ZXI7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+dmlzaXRXZWFrKCp0aGlzT2JqZWN0
LT52bSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2FzbTo6TWVtb3J5OjpOdW1i
ZXJPZk1vZGVzOyArK2kpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29k
ZUJsb2Nrc1tpXSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDdlMDUxZjU3
MjI0MjQ2OGE2NjQxOTAzMWE4ODk1YzYxMzZlMzA4NzYuLjk4ZmRlYjQ0ZjZkMjM1OWZkNmM3Nzg5
OTIyMjU1NjJjZGVkOWZhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiSlNE
ZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgogI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CkBAIC0zNyw4NSArMzcsNDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIFBsYW47Cit9CisKIGNsYXNzIFN5
bWJvbFRhYmxlOworY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeTsKIAogY2xhc3MgSlNXZWJBc3Nl
bWJseU1vZHVsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbj4mJiwgQmFnPENhbGxMaW5rSW5mbz4mJiwgVmVjdG9yPFdhc206
Oldhc21FeGl0U3R1YnM+JiYsIFN5bWJvbFRhYmxlKiwgdW5zaWduZWQpOworICAgIHN0YXRpYyBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1
aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERF
Q0xBUkVfSU5GTzsKIAogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJ
bmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuICptX21vZHVsZUluZm9ybWF0aW9uLmdldCgpOyB9
CisgICAgV2FzbTo6TWVtb3J5JiB0YWtlUmVzZXJ2ZWRNZW1vcnkoKSB7IHJldHVybiBtX21vZHVs
ZUluZm9ybWF0aW9uLT5tZW1vcnkudGFrZVJlc2VydmVkTWVtb3J5KCk7IH0KICAgICBTeW1ib2xU
YWJsZSogZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4cG9ydFN5bWJvbFRh
YmxlLmdldCgpOyB9CiAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZy
b21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICB9Ci0gICAgdW5z
aWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVi
cy5zaXplKCk7IH0KLQotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQotICAg
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9u
SW1wb3J0Q291bnQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25J
bmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICByZXR1cm4gY2FsbGVlcygp
W2NhbGxlZUluZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3
YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rp
b25JbmRleFNwYWNlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRl
eFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxl
ZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAg
ICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0uZ2V0KCk7Ci0g
ICAgfQotCi0gICAgdm9pZCBzZXRKU0VudHJ5cG9pbnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBj
YWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKQotICAgIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgY2Fs
bGVlcygpW2NhbGxlZUluZGV4XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7Ci0gICAgfQogCi0gICAg
dm9pZCBzZXRXYXNtRW50cnlwb2ludENhbGxlZShWTSYgdm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4
LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICBjYWxsZWVzKClbY2Fs
bGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7Ci0gICAgfQor
ICAgIC8vIFJldHVybnMgdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIG1vZHVsZSB3YXMgb3JpZ2lu
YWxseSBjb21waWxlZCBleHBlY3RpbmcgdG8gdXNlLiBUaGlzIHdvbid0IG5lZWQgdG8gcmVjb21w
aWxlLgorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1f
Y29kZUJsb2Nrc1ttX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpXS5nZXQoKTsgfQor
ICAgIC8vIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNvZGUgYmxvY2sgZm9yIHRoZSBnaXZlbiBt
ZW1vcnksIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSByZWNvbXBpbGUuCisgICAgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayogY29kZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9y
eSopOwogCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVl
cygpKTsKLSAgICB9Citwcml2YXRlOgorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGJ1aWxk
Q29kZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiwgV2FzbTo6UGxhbiYsIHN0ZDo6b3B0aW9uYWw8V2Fz
bTo6TWVtb3J5OjpNb2RlPiBtb2RlID0gc3RkOjpudWxsb3B0KTsKIAotcHJvdGVjdGVkOgotICAg
IEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb24+JiYsIEJhZzxDYWxsTGlua0luZm8+JiYsIFZlY3RvcjxXYXNt
OjpXYXNtRXhpdFN0dWJzPiYmLCB1bnNpZ25lZCBjYWxsZWVDb3VudCk7Ci0gICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIFN5bWJvbFRhYmxlKik7CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZShW
TSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUq
LCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkNhbGxl
ZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KT4oc2l6ZW9mKEpTV2ViQXNzZW1i
bHlNb2R1bGUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVu
c2lnbmVkIG51bUNhbGxlZXMpCi0gICAgewotICAgICAgICByZXR1cm4gb2Zmc2V0T2ZDYWxsZWVz
KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIG51bUNhbGxl
ZXMgKiAyOwotICAgIH0KLQotICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJs
aWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsgCi0gICAgICAgIHZvaWQgZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKLSAgICB9OwotCi0gICAgVW5jb25kaXRpb25hbEZp
bmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBtX3NvdXJjZUJ1ZmZlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3Jt
YXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247Ci0gICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxs
TGlua0luZm9zOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBvcnRTeW1ib2xU
YWJsZTsKLSAgICBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4gbV93YXNtRXhpdFN0dWJzOwot
ICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpNZW1vcnk6Ok51bWJlck9mTW9kZXNdOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IDVhZTgxN2Y0ZmFiNDkyOTRh
NTYzNjNiMDVjMjAxMTkxMWIzYmNhM2UuLjA0ZWQ2NjYwZWUxZWQzNzMxZGRlY2VkZWM5OTQwZDMx
MDMwZjkxZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC01Niw2ICs1Niw4IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlv
bi0+c2lnbmF0dXJlSW5kZXgoKTsKICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVy
ZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7
CiAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IHdlIHRoaW5rIHdlIGFyZSBnb2lu
ZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBvbmUgd2UgZXhwZWN0LgorICAgIEFTU0VSVCh3YXNt
RnVuY3Rpb24tPmluc3RhbmNlKCktPmNvZGVCbG9jaygpLT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rp
b24tPmluc3RhbmNlKCktPm1lbW9yeSgpKSk7CiAgICAgewogICAgICAgICAvLyBDaGVjayBpZiB3
ZSBoYXZlIGEgZGlzYWxsb3dlZCBJNjQgdXNlLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
LmNwcAppbmRleCA3NjNkYzQ5NGNlNWE0NzgyZDZlNjg0N2Y4MjI1NjYxYjM1YmRhN2FiLi4wOGVh
OWUwMDY1MDUzNTlhZDlhODUzNmM1OWNiMTYyZmUzOGZlMmU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5jcHAKQEAgLTg0LDExICs4NCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4
CiAKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpjcmVhdGUodm0sIGluc3RhbmNlU3RydWN0dXJlLCBqc01vZHVsZSwgbW9kdWxlUmVj
b3JkLT5nZXRNb2R1bGVOYW1lc3BhY2UoZXhlYykpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgewotICAgICAgICAvLyBBbHdheXMg
c3RhcnQgd2l0aCBhIGR1bW15IE1lbW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2
b2lkIGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5u
ZWQgcmVnaXN0ZXJzLgotICAgICAgICBXYXNtOjpNZW1vcnkgbWVtb3J5OwotICAgICAgICBpbnN0
YW5jZS0+c2V0TWVtb3J5KHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RG
TW92ZShtZW1vcnkpKSk7Ci0gICAgfQorCiAKICAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFu
ZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQg
b2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxl
IG9iamVjdHMsIHJlc3BlY3RpdmVseS4KICAgICAvLyBMZXQgaW1wb3J0cyBiZSBhbiBpbml0aWFs
bHktZW1wdHkgbGlzdCBvZiBleHRlcm5hbCB2YWx1ZXMuCkBAIC0xNzgsMTIgKzE3NCwxMiBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5
SW5zdGFuY2UoRXhlY1N0YXRlKiBleAogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBh
biBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKSkpKTsKIAogICAgICAgICAgICAgV2Fz
bTo6UGFnZUNvdW50IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5p
bml0aWFsKCk7Ci0gICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1l
bW9yeS0+bWVtb3J5KCktPmluaXRpYWwoKTsKKyAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBh
Y3R1YWxJbml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS5pbml0aWFsKCk7CiAgICAgICAgICAgICBp
ZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKICAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0
ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGlt
cG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpKTsKIAogICAg
ICAgICAgICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZv
cm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNv
dW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLT5tYXhpbXVtKCk7CisgICAgICAg
ICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgp
Lm1heGltdW0oKTsKICAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pIHsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBkaWQgbm90
IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikp
KSk7CkBAIC0xOTQsOSArMTkwLDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBv
cnRzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGlt
dW0nIikpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVu
ZCB2LltbTWVtb3J5XV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1v
cnkodm0sIG1lbW9yeSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVj
LCBtZW1vcnkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsKQEAgLTIzNSwxMiArMjMzLDE3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5t
ZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKICAgICAgICAgICAgIC8vIFdl
IGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KLSAgICAgICAg
ICAgIGJvb2wgZmFpbGVkOwotICAgICAgICAgICAgV2FzbTo6TWVtb3J5IG1lbW9yeShtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4
aW11bSgpLCBmYWlsZWQpOwotICAgICAgICAgICAgaWYgKGZhaWxlZCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKLSAgICAgICAgICAgIGluc3RhbmNlLT5z
ZXRNZW1vcnkodm0sCi0gICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUo
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5
PiBtZW1vcnk7CisgICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lmhhc1Jl
c2VydmVkTWVtb3J5KCkpCisgICAgICAgICAgICAgICAgbWVtb3J5ID0gYWRvcHRSZWYoanNNb2R1
bGUtPnRha2VSZXNlcnZlZE1lbW9yeSgpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKTsK
KyAgICAgICAgICAgICAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnN0
YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLAorICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJs
eU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqbWVtb3J5LmxlYWtSZWYoKSkpKTsKKyAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI2Myw2ICsyNjYsMTIgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNT
dGF0ZSogZXgKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICghaW5zdGFuY2UtPm1lbW9yeSgp
KSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZHVtbXkgbWVtb3J5LCBzbyB0aGF0
IHdhc20gLT4gd2FzbSB0aHVua3MgYXZvaWQgY2hlY2tpbmcgZm9yIGEgbnVsbHB0ciBNZW1vcnkg
d2hlbiB0cnlpbmcgdG8gc2V0IHBpbm5lZCByZWdpc3RlcnMuCisgICAgICAgIGluc3RhbmNlLT5z
ZXRNZW1vcnkodm0sIGV4ZWMsIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9w
dFJlZigqKG5ldyBXYXNtOjpNZW1vcnkoKSkpKSk7CisKKyAgICB9CisKICAgICAvLyBHbG9iYWxz
CiAgICAgewogICAgICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBtb2R1bGVJbmZvcm1h
dGlvbi5maXJzdEludGVybmFsR2xvYmFsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKaW5k
ZXggNmM4ODdhZjU5N2E4NjUzMjljZmI0M2Y1ZWRiNDdiNDFlNjYwOWVjOC4uNTExMjllMzEwMTJm
MGMxYjU0MmFjOTFlODk5NGU0MjlkNTc1ZThkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5j
cHAKQEAgLTk2LDEyICs5NiwxMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICB9
CiAgICAgfQogCi0gICAgYm9vbCBmYWlsZWQ7Ci0gICAgV2FzbTo6TWVtb3J5IG1lbW9yeShpbml0
aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBmYWlsZWQpOwotICAgIGlmIChmYWlsZWQp
CisgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUo
dm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQpOworICAgIGlmICghbWVtb3J5
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKIAotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIFdURk1vdmUo
bWVtb3J5KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1lbW9y
eTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVt
b3J5U3RydWN0dXJlKCksIGFkb3B0UmVmKCptZW1vcnkubGVha1JlZigpKSkpOwogfQogCiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1lbW9yeShF
eGVjU3RhdGUqIHN0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAppbmRleCA4MTI5NTky
M2M3YWRjYTJkZTYwYmVjYzE5M2ZhY2U5ODJmNDVmZDIyLi5hOTQwZThkZmYwY2JlYTVmZGYwODI5
OTBhNTdhZDhkOGZlY2MxNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApAQCAtODAs
MzEgKzgwLDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVN
b2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSwgU3RydWN0dXJlKgogICAgIHVpbnQ4X3QqIGJhc2UgPSBn
ZXRXYXNtQnVmZmVyRnJvbVZhbHVlKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIGJ5dGVPZmZz
ZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0g
ICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKLSAg
ICAvLyBPbiBmYWlsdXJlLCBhIG5ldyBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IgaXMgdGhyb3du
LgotICAgIHBsYW4ucnVuKCk7Ci0gICAgaWYgKHBsYW4uZmFpbGVkKCkpCi0gICAgICAgIHJldHVy
biB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlDb21waWxl
RXJyb3Ioc3RhdGUsIHZtLCBwbGFuLmVycm9yTWVzc2FnZSgpKSk7Ci0KLSAgICAvLyBPbiBzdWNj
ZXNzLCBhIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUgb2JqZWN0IGlzIHJldHVybmVkIHdpdGggW1tN
b2R1bGVdXSBzZXQgdG8gdGhlIHZhbGlkYXRlZCBBc3QubW9kdWxlLgotCi0gICAgLy8gVGhlIGV4
cG9ydCBzeW1ib2wgdGFibGUgaXMgdGhlIHNhbWUgZm9yIGFsbCBJbnN0YW5jZXMgb2YgYSBNb2R1
bGUuCi0gICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNy
ZWF0ZSh2bSk7Ci0gICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4cG9ydHMoKSkgewotICAgICAg
ICBhdXRvIG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5v
TG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgICAgIGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2Nr
aW5nTmVjZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNl
dChvZmZzZXQpKSk7Ci0gICAgfQotCi0gICAgLy8gT25seSB3YXNtLWludGVybmFsIGZ1bmN0aW9u
cyBoYXZlIGEgY2FsbGVlLCBzdHVicyB0byBKUyBkbyBub3QuCi0gICAgdW5zaWduZWQgY2FsbGVl
Q291bnQgPSBwbGFuLmludGVybmFsRnVuY3Rpb25Db3VudCgpOwotICAgIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIHJlc3VsdCA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgc3RydWN0dXJl
LCBwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpLCBwbGFuLnRha2VDYWxsTGlua0luZm9zKCks
IHBsYW4udGFrZVdhc21FeGl0U3R1YnMoKSwgZXhwb3J0U3ltYm9sVGFibGUsIGNhbGxlZUNvdW50
KTsKLSAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKHN0YXRlLT5qc0NhbGxlZSgpLT5nbG9iYWxP
YmplY3QoKSwgCi0gICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0SlNFbnRyeXBvaW50Q2Fs
bGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCB3YXNtRW50cnlw
b2ludENhbGxlZSk7Ci0gICAgICAgIH0pOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZtLCBzdGF0ZSwgc3RydWN0dXJlLCBiYXNl
ICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwogfQogCiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5jcHAKaW5kZXggZjE3ZjI5ZGY5ODUwYzNjOGY0NjRhMmZlMTYwNmY3NGRh
Y2UwMDIzYS4uNjIzMmMyNDFjZTQyZGNmNDM3NTgwYTc3NGE3MTliODcxMDRjYjE2OCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcApAQCAtOTIsMTAgKzkyLDExIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
IAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IGluc3RhbmNlLT5tb2R1bGUoKTsK
KyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpbnN0YW5jZS0+Y29kZUJs
b2NrKCk7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0
aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwogCiAgICAgU3ltYm9sVGFibGUqIGV4
cG9ydFN5bWJvbFRhYmxlID0gbW9kdWxlLT5leHBvcnRTeW1ib2xUYWJsZSgpOwotICAgIHVuc2ln
bmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQgPSBtb2R1bGUtPmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsK
KyAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50ID0gY29kZUJsb2NrLT5mdW5jdGlvbklt
cG9ydENvdW50KCk7CiAKICAgICAvLyBGSVhNRSB3aXJlIHVwIHRoZSBpbXBvcnRzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MTE4CiAKQEAgLTExNiw4ICsxMTcs
OCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdAogICAgICAgICAgICAgLy8gICAgIGEuIExldCBm
dW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMu
CiAgICAgICAgICAgICAvLyAgICAgYi4gQXBwZW5kIGZ1bmMgdG8gZnVuY3MuCiAgICAgICAgICAg
ICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCi0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IG1vZHVsZS0+d2FzbUVudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOworICAgICAgICAgICAgSlNX
ZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOworICAgICAg
ICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxv
Y2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZElu
ZGV4KTsKICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRl
eCk7CiAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206
OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAg
ICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgZXhw
LmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlw
b2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwpAQCAtMTc4LDEyICsxNzksMTIgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3QKICAgICAgICAgLy8gVGhlIHN0YXJ0IGZ1bmN0aW9uIG11c3Qgbm90
IHRha2UgYW55IGFyZ3VtZW50cyBvciByZXR1cm4gYW55dGhpbmcuIFRoaXMgaXMgZW5mb3JjZWQg
YnkgdGhlIHBhcnNlci4KICAgICAgICAgQVNTRVJUKCFzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQo
KSk7CiAgICAgICAgIEFTU0VSVChzaWduYXR1cmUtPnJldHVyblR5cGUoKSA9PSBXYXNtOjpWb2lk
KTsKLSAgICAgICAgaWYgKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlIDwgbW9kdWxlLT5mdW5jdGlv
bkltcG9ydENvdW50KCkpIHsKKyAgICAgICAgaWYgKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlIDwg
Y29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKICAgICAgICAgICAgIEpTQ2VsbCog
c3RhcnRGdW5jdGlvbiA9IGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihzdGFydEZ1bmN0aW9uSW5k
ZXhTcGFjZSktPmdldCgpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhp
cywgc3RhcnRGdW5jdGlvbik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwotICAg
ICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1
bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0
aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5
cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBv
aW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7
CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKSwgInN0YXJ0IiwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9p
bnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5z
ZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgfQpAQCAtMjA3LDYgKzIwOCw3IEBAIEpT
VmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogc3RhdGUp
CiAKICAgICB7CiAgICAgICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IG1faW5zdGFu
Y2UtPm1vZHVsZSgpOworICAgICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtX2luc3RhbmNlLT5jb2RlQmxvY2soKTsKICAgICAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5m
b3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
OwogICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gbV9pbnN0YW5jZS0+dGFibGUo
KTsKICAgICAgICAgZm9yIChjb25zdCBXYXNtOjpFbGVtZW50JiBlbGVtZW50IDogbW9kdWxlSW5m
b3JtYXRpb24uZWxlbWVudHMpIHsKQEAgLTIyOSwxMyArMjMxLDEzIEBAIEpTVmFsdWUgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogc3RhdGUpCiAgICAgICAgICAg
ICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMAogICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlc1tpXTsKLSAgICAgICAg
ICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8IG1vZHVsZS0+ZnVuY3Rpb25JbXBvcnRDb3VudCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1bmN0
aW9uSW1wb3J0Q291bnQoKSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZGVjb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dWTVJhbmdlRXJyb3Ioc3RhdGUs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMgc2V0dGluZyB0aGUgdGFibGUgdmFsdWUg
d2l0aCBhbiBpbXBvcnQuIFRoaXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4gRklYTUUuIikpKTsK
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgICAgICAgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2st
PmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7
CisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxs
ZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVy
ZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25h
dHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2F5IHdlIGV4cG9ydCBsb2Nh
bCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jaXRvbiBpbmRleCAwLgpAQCAtMjU1LDggKzI1Nyw4IEBA
IEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogc3Rh
dGUpCiAgICAgICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpTZWdtZW50OjpQdHI+JiBkYXRhID0gbV9p
bnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCkuZGF0YTsKICAgICAgICAgSlNX
ZWJBc3NlbWJseU1lbW9yeSoganNNZW1vcnkgPSBtX2luc3RhbmNlLT5tZW1vcnkoKTsKICAgICAg
ICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgdWludDhfdCogbWVtb3J5ID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oanNNZW1vcnktPm1lbW9yeSgpLT5tZW1vcnkoKSk7
Ci0gICAgICAgICAgICB1aW50NjRfdCBzaXplSW5CeXRlcyA9IGpzTWVtb3J5LT5tZW1vcnkoKS0+
c2l6ZSgpOworICAgICAgICAgICAgdWludDhfdCogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oanNNZW1vcnktPm1lbW9yeSgpLm1lbW9yeSgpKTsKKyAgICAgICAgICAgIHVpbnQ2
NF90IHNpemVJbkJ5dGVzID0ganNNZW1vcnktPm1lbW9yeSgpLnNpemUoKTsKICAgICAgICAgICAg
IGZvciAoYXV0byYgc2VnbWVudCA6IGRhdGEpIHsKICAgICAgICAgICAgICAgICBpZiAoc2VnbWVu
dC0+c2l6ZUluQnl0ZXMpIHsKICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRGF0YUxvZy5oIGIvU291cmNlL1dURi93dGYvRGF0
YUxvZy5oCmluZGV4IDEzZjkxM2JkNWJhZTYwMjkxZGQ1MzhmN2ZhNTgzODhjODhlZmJjOTAuLjBi
MDg0ODhiMjBlNTAzMWMwMDY2OTlhZTYwY2RlZTI0YTBjOTdiZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0RhdGFMb2cuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgKQEAgLTQ4
LDEzICs0OCwyOSBAQCB2b2lkIGRhdGFMb2coY29uc3QgVHlwZXMmLi4uIHZhbHVlcykKIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIFR5cGVzPgogdm9pZCBkYXRhTG9nTG4oY29uc3QgVHlwZXMmLi4uIHZh
bHVlcykKIHsKLSAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlcy4uLiwgIlxuIik7CisgICAgZGF0
YUxvZyh2YWx1ZXMuLi4sICJcbiIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4K
K3ZvaWQgZGF0YUxvZ0lmKGJvb2wgc2hvdWxkTG9nLCBjb25zdCBUeXBlcyYuLi4gdmFsdWVzKQor
eworICAgIGlmIChzaG91bGRMb2cpCisgICAgICAgIGRhdGFMb2codmFsdWVzLi4uKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+Cit2b2lkIGRhdGFMb2dMbklmKGJvb2wgc2hvdWxk
TG9nLCBjb25zdCBUeXBlcyYuLi4gdmFsdWVzKQoreworICAgIGlmIChzaG91bGRMb2cpCisgICAg
ICAgIGRhdGFMb2dMbih2YWx1ZXMuLi4pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNp
bmcgV1RGOjpkYXRhTG9nOwogdXNpbmcgV1RGOjpkYXRhTG9nTG47Cit1c2luZyBXVEY6OmRhdGFM
b2dJZjsKK3VzaW5nIFdURjo6ZGF0YUxvZ0xuSWY7CiB1c2luZyBXVEY6OmRhdGFMb2dGOwogdXNp
bmcgV1RGOjpkYXRhTG9nRlN0cmluZzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVm
LmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWYuaAppbmRleCBiM2FjNGZiYzViYTUwOWE1M2MyNDEwZTRi
ZTI4NDBjNGYwYjk3NTJhLi44MzA5NjRmZWJlYTY2MWFkNzdkNzY2YzQ4ZDY0MjFkOTkyYzY1MGJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWYuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9S
ZWYuaApAQCAtMTM3LDYgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBUKiBwdHIoKSBjb25zdCB7IEFT
U0VSVChtX3B0cik7IHJldHVybiBtX3B0cjsgfQogICAgIFQmIGdldCgpIGNvbnN0IHsgQVNTRVJU
KG1fcHRyKTsgcmV0dXJuICptX3B0cjsgfQogICAgIG9wZXJhdG9yIFQmKCkgY29uc3QgeyBBU1NF
UlQobV9wdHIpOyByZXR1cm4gKm1fcHRyOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IEFTU0VSVChtX3B0cik7IHJldHVybiAhKm1fcHRyOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBSZWY8VD4gcmVwbGFjZShSZWY8VT4mJikgV0FSTl9VTlVTRURfUkVUVVJOOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303211</attachid>
            <date>2017-03-02 09:51:30 -0800</date>
            <delta_ts>2017-03-02 10:01:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162693-20170302095130.patch</filename>
            <type>text/plain</type>
            <size>115387</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ODFlYWQzNTM4YmU0Yjc0YzA1ZjlmMDU4Y2UzYTRiNTcyNjgxYTU2Li4xOGZlNmRiMmNhM2IzYzYy
ZDlkYzM3NDk4N2ZkNGRiZDIwZDQyMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzIgQEAKKzIwMTctMDMtMDIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV0FTTSBzaG91bGQgc3VwcG9ydCBmYXN0ZXIgbG9hZHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFk
ZHMgc3VwcG9ydCBmb3IgV2ViQXNzZW1ibHkgdXNpbmcgYSAzMi1iaXQgYWRkcmVzcworICAgICAg
ICBzcGFjZSBmb3IgbWVtb3J5IChhbG9uZyB3aXRoIHNvbWUgZXh0cmEgc3BhY2UgZm9yIG9mZnNl
dAorICAgICAgICBvdmVyZmxvdykuIFdpdGggYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSAod2UgY2Fs
bCB0aGVtCisgICAgICAgIFNpZ25hbGluZy9mYXN0IG1lbW9yaWVzKSwgd2UgcmVzZXJ2ZSB0aGUg
dmlydHVhbCBhZGRyZXNzIHNwYWNlIGZvcgorICAgICAgICAyXjMyICsgb2Zmc2V0IGJ5dGVzIG9m
IG1lbW9yeSBhbmQgb25seSBtYXJrIHRoZSB1c2FibGUgc2VjdGlvbiBhcworICAgICAgICByZWFk
L3dyaXRlLiBJZiB3YXNtIGNvZGUgd291bGQgcmVhZC93cml0ZSBvdXQgb2YgYm91bmRzIHdlIHVz
ZSBhCisgICAgICAgIGN1c3RvbSBzaWduYWwgaGFuZGxlciB0byBjYXRjaCB0aGUgU0lHQlVTLiBU
aGUgc2lnbmFsIGhhbmRsZXIgdGhlbgorICAgICAgICBjaGVja3MgaWYgdGhlIGZhdWx0aW5nIGlu
c3RydWN0aW9uIGlzIHdhc20gY29kZSBhbmQgdGVsbHMgdGhlCisgICAgICAgIHRocmVhZCB0byBy
ZXN1bWUgZXhlY3V0aW5nIGZyb20gdGhlIHdhc20gZXhjZXB0aW9uCisgICAgICAgIGhhbmRsZXIu
IE90aGVyd2lzZSwgdGhlIHNpZ25hbCBoYW5kbGVyIGNyYXNoZXMgdGhlIHByb2Nlc3MsIGFzCisg
ICAgICAgIHVzdWFsLgorCisgICAgICAgIEFsbCBvZiB0aGUgYWxsb2NhdGlvbnMgb2YgdGhlc2Ug
bWVtb3JpZXMgYXJlIG1hbmFnZWQgYnkgdGhlCisgICAgICAgIFdhc206Ok1lbW9yeSBjbGFzcy4g
SW4gb3JkZXIgdG8gYXZvaWQgVExCIGNodXJuIGluIHRoZSBPUyB3ZSBjYWNoZQorICAgICAgICBv
bGQgU2lnbmFsaW5nIG1lbW9yaWVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB1c2UuIFNpbmNlIGdl
dHRpbmcKKyAgICAgICAgdGhlIHdyb25nIG1lbW9yeSBjYW4gY2F1c2UgcmVjb21waWxlcywgd2Ug
dHJ5IHRvIHJlc2VydmUgYSBtZW1vcnkKKyAgICAgICAgZm9yIG1vZHVsZXMgdGhhdCBkbyBub3Qg
aW1wb3J0IGEgbWVtb3J5LiBJZiBhIG1vZHVsZSBkb2VzIGltcG9ydCBhCisgICAgICAgIG1lbW9y
eSwgd2UgdHJ5IHRvIGd1ZXNzIHRoZSB0eXBlIG9mIG1lbW9yeSB3ZSBhcmUgZ29pbmcgdG8gZ2V0
CisgICAgICAgIGJhc2VkIG9uIHRoZSBsYXN0IG9uZSBhbGxvY2F0ZWQuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhbHNvIGNoYW5nZXMgaG93IHRoZSB3YXNtIEpTLWFwaSBtYW5hZ2VzIG9iamVjdHMu
IFNpbmNlCisgICAgICAgIHdlIGNhbiBjb21waWxlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBjb2Rl
LCB0aGlzIHBhdGNoIGFkZHMgYSBuZXcKKyAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBj
bGFzcyB0aGF0IGhvbGRzIGFsbCB0aGUgaW5mb3JtYXRpb24KKyAgICAgICAgc3BlY2lmaWMgdG8g
cnVubmluZyBhIG1vZHVsZSBpbiBhIHBhcnRpY3VsYXIgYm91bmRzIGNoZWNraW5nCisgICAgICAg
IG1vZGUuIEFkZGl0aW9uYWxseSwgdGhlIFdhc206Ok1lbW9yeSBvYmplY3QgaXMgbm93IGEgcmVm
ZXJlbmNlCisgICAgICAgIGNvdW50ZWQgY2xhc3MgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiB0aGUg
SlNXZWJBc3NlbWJseU1lbW9yeQorICAgICAgICBvYmplY3QgYW5kIHRoZSBBcnJheUJ1ZmZlciB0
aGF0IGFsc28gdmlld3MgaXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuY3BwOgorICAgICAgICAo
SlNDOjpKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1Yik6CisgICAgICAgICogaml0L0pJVFRodW5r
cy5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogd2FzbS9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6ZnVuY3Rpb25JbXBvcnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjptb2R1
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpqc0VudHJ5cG9pbnRD
YWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c2V0SlNFbnRyeXBvaW50Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c2V0V2FzbUVudHJ5
cG9pbnRDYWxsZWUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYWxs
ZWVzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZDYWxs
ZWVzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6YWxsb2NhdGlvblNp
emUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Z2V0TWVtb3J5QmFzZUFuZFNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0U3RvcmVPcCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZWdp
c3RlckNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp1bnJlZ2lzdGVyQ29kZSk6CisgICAgICAg
IChKU0M6Oldhc206OmZhc3RNZW1vcnlFbmFibGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5h
YmxlRmFzdE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
YWxsZWUuY3BwLgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6aW1wb3J0RnVuY3Rpb25Db3VudCk6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpoYXNNZW1vcnkpOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vV2FzbU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Om1tYXBCeXRlcyk6
CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjphdmFpbGFibGVGYXN0TWVtb3JpZXMpOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0cnlHZXRGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVsZWFzZUZhc3RNZW1v
cnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6
Oldhc206Ok1lbW9yeTo6Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpk
dW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjptYWtlU3RyaW5nKToKKyAgICAgICAg
KiB3YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvcGVyYXRv
ciBib29sKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpzaXplKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TWVtb3J5OjpjaGVjayk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6TWVt
b3J5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9y
eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbik6Cisg
ICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnRha2VSZXNlcnZlZE1lbW9yeSk6CisgICAgICAgIChK
U0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjptb2RlKToKKyAgICAgICAgKiB3YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6Ok1vZHVsZVBhcnNlcik6CisgICAgICAgICog
d2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnBhcnNlQW5kVmFs
aWRhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW4pOgorICAgICAgICAq
IHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bW9kZSk6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5Q2FsbGVlOjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Ojppc1NhZmVUb1J1bik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpVbmNv
bmRpdGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6bW9kdWxlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1lbW9yeU1vZGUpOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6
SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6
OmJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1l
bW9yeTo6bWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0
T2ZNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNp
emUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1
bGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OlVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1vZHVsZTo6dGFrZVJlc2VydmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6ZnVuY3Rpb25JbXBvcnRDb3VudCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmpzRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjp3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRKU0VudHJ5cG9p
bnRDYWxsZWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpz
ZXRXYXNtRW50cnlwb2ludENhbGxlZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpvZmZzZXRPZkNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjphbGxvY2F0aW9uU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFdlYkFzc2Vt
Ymx5RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNl
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUpOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpldmFsdWF0ZSk6CisKIDIwMTctMDItMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHN0ZDo6
dHVwbGVzIGFzIGtleXMgaW4gSGFzaE1hcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA4OGE1YTk5NTM1MjEwODg4ZjIwNmFmZDU1
NjNiNzU1MWI5ZTY3ODVhLi5iZDI5OGY3MGY3MDJkNTE0YjBhMDc5YTU1MzMwMmRlOTZkMjAyNWM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE3LTAzLTAyICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9t
aWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdBU00gc2hvdWxkIHN1cHBvcnQgZmFzdGVyIGxv
YWRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYy
NjkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IG5ldyBmb3JtcyBvZiBkYXRhTG9nIHRoYXQgdGFrZSBhIGJvb2xlYW4gd2hpY2ggZGVzY3JpYmVz
IGlmIHRoZSBsb2cgc2hvdWxkIGhhcHBlbi4gVGhpcyBtYWtlcyBjYXNlcyB3aGVyZSB3ZSBoYXZl
IGEgc3RhdGljIGNvbnN0IGJvb2wgZm9yIHByaW50aW5nIG5pY2VyIHNpbmNlIHlvdSBjYW4gZG86
CisKKyAgICAgICAgZGF0YUxvZ0lmKHZlcmJvc2UsIHRoaW5ncywgdG8sIHByaW50KTsKKworICAg
ICAgICBpbnN0ZWFkIG9mOgorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZyh0aGluZ3MsIHRvLCBwcmludCk7CisKKyAgICAgICAgQWxzbywgYWRkIGEgb3BlcmF0b3Ih
IHRvIFJlZiBoYXMgdGhlIHNhbWUgc2VtYW50aWNzIGFzIEMrKyByZWZzLgorCisgICAgICAgICog
d3RmL0RhdGFMb2cuaDoKKyAgICAgICAgKFdURjo6ZGF0YUxvZ0xuKToKKyAgICAgICAgKFdURjo6
ZGF0YUxvZ0lmKToKKyAgICAgICAgKFdURjo6ZGF0YUxvZ0xuSWYpOgorICAgICAgICAqIHd0Zi9S
ZWYuaDoKKyAgICAgICAgKFdURjo6UmVmOjpvcGVyYXRvciEpOgorCiAyMDE3LTAyLTI0ICBLZWl0
aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlIHNob3VsZCBi
ZSBhYmxlIHRvIHVzZSBzdGQ6OnR1cGxlcyBhcyBrZXlzIGluIEhhc2hNYXAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYzEyM2IwNmFmZDk1YTk5NmM3ZWI3M2M5YTdlNWNhY2IxZGVj
NGUyZS4uMzVkYzE3YTFjZTk5NjUzYTcwOTQzOThjOGZiMDgxNmJhZjZhYWQyNSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMjAsNiArMTMyMCwxMCBAQAogCQk1MzU1NTcxNjFE
OURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1l
bW9yeS5jcHAgKi87IH07CiAJCTUzNzBCNEY1MUJGMjYyMDIwMDVDNDBGQyAvKiBBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNzBCNEYzMUJGMjVFQTIwMDVDNDBGQyAvKiBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCAqLzsgfTsKIAkJ
NTM3MEI0RjYxQkYyNjIwNTAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi87IH07CisJCTUzODFCOTM3MUU2MEU5NjYwMDkwRjc5
NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmNwcCAqLzsgfTsKKwkJNTM4MUI5MzkxRTYwRTk3RDAwOTBGNzk0IC8q
IFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmggKi87IH07CisJCTUzODFCOTQwMUU2NURGRUIwMDkwRjc5NCAvKiBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzgxQjkzRjFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oICovOyB9OworCQk1MzgzQUEzMDFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAg
Ki87IH07CiAJCTUzOTE3RTdCMUI3OTA2RkEwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTM5MTdFN0ExQjc5MDZFNDAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggKi87IH07CiAJCTUzOUZCOEJBMUM5OURBN0Mw
MDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxp
bmVzLmggKi87IH07CiAJCTUzQjBCRTM0MUU1NjFBQzkwMEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzQjBCRTMzMUU1NjFBQzkwMEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNw
cCAqLzsgfTsKQEAgLTM3NzYsNiArMzc4MCwxMCBAQAogCQk1MzU1NTcxNTFEOURGQTMyMDA2RDU4
M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtTWVtb3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM3MEI0RjMx
QkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM4MUI5MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdh
c21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM4MUI5M0YxRTY1REZFQjAwOTBG
Nzk0IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzkxN0U3QTFCNzkwNkU0MDAwRUJEMzMgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5MTdFN0MxQjc5MTEwNjAwMEVC
RDMzIC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzkxN0U4MzFCNzkxQ0I4MDAwRUJEMzMgLyogVHlwZWRBcnJheVByb3Rv
dHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IFR5cGVkQXJy
YXlQcm90b3R5cGUuanM7IHBhdGggPSBidWlsdGlucy9UeXBlZEFycmF5UHJvdG90eXBlLmpzOyBz
b3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CkBAIC02MjAxLDYgKzYyMDksOCBAQAogCQkJCTUz
RjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLywKIAkJCQk1
M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovLAogCQkJCUFE
QjZGNjdDMUUxNUQ3NTAwMDgyRjM4NCAvKiBXYXNtUGFnZUNvdW50LmNwcCAqLywKKwkJCQk1Mzgx
QjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8sCisJ
CQkJNTM4MUI5MzgxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAq
LywKIAkJCQk3OUI3NTk3MzFERkE0QzYwMDA1MjE3NEMgLyogV2FzbVBhZ2VDb3VudC5oICovLAog
CQkJCTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCiAJCQkJNTMx
Mzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKQEAgLTc3ODgsNiArNzc5
OCw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk3OUU0MjNFMDFERUU2NTMyMDA3OEQzNTUgLyog
SlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi8sCiAJCQkJNzlFNDIzRTExREVFNjUzMjAwNzhEMzU1
IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLywKKwkJCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMy
RkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCisJCQkJNTM4MUI5M0YxRTY1REZF
QjAwOTBGNzk0IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKIAkJCQlBRDJGQ0JBNjFE
QjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAgKi8sCiAJCQkJ
QUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCAq
LywKIAkJCQk3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMu
aCAqLywKQEAgLTc5MjcsNiArNzkzOSw3IEBACiAJCQkJMEZFQzg1NzIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjM4NzhFMUJGQkM0NEQw
MEUzQUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMy
QTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MzgxQjk0MDFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckND
YWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdE
MiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovLApAQCAtODI0Niw2ICs4MjU5LDcgQEAKIAkJ
CQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZDMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
TWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM4MUI5MzkxRTYwRTk3RDAwOTBGNzk0
IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZF
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
RjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCBp
biBIZWFkZXJzICovLApAQCAtMTAwMzYsNiArMTAwNTAsNyBAQAogCQkJCTBGQzg0MTY4MUJBOEMz
MjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzA0RDkwNTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQkQxQjcxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2Vy
dGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzgxQjkzNzFFNjBFOTY2MDA5MEY3OTQg
LyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMwMEI3
QjE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4OThGMzExQjI3Njg5RjAwODNBMzNDIC8qIERGR0ludGVnZXJS
YW5nZU9wdGltaXphdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzk3RjNEMTgy
MDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMTA0MzcsNiArMTA0NTIsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEz
RUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
RUIxMzc1NzFCQjExRUY5MDBDRDUxMDAgLyogTWFjcm9Bc3NlbWJsZXJBUk02NC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzgzQUEzMDFFNjVFOEExMDBBNTMyRkMgLyog
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZEQjdFQzFE
NjE3RDExMDBDREJGOEUgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZFNjhDNjM4MUI5MERFMEIwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUaHVua3MuY3BwCmluZGV4IGRlNDhlNjJkZGFiOGVmYWY4YmUzMTgyODcxYmU4ZDcw
OTliMTdjN2YuLjU0NmUxNGM5MDQ4ZThkMzM4YTU4MjY0N2NmN2NhZGY5ZGQzNDFjZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKQEAgLTgyLDYgKzgyLDE1IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoVk0qIHZtLCBUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3IpCiAgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6ZXhpc3RpbmdDVElTdHViKFRodW5rR2Vu
ZXJhdG9yIGdlbmVyYXRvcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAg
IENUSVN0dWJNYXA6Oml0ZXJhdG9yIGVudHJ5ID0gbV9jdGlTdHViTWFwLmZpbmQoZ2VuZXJhdG9y
KTsKKyAgICBpZiAoZW50cnkgPT0gbV9jdGlTdHViTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgcmV0dXJuIGVudHJ5LT52YWx1ZTsKK30KKwog
dm9pZCBKSVRUaHVua3M6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqKQog
ewogICAgIGF1dG8qIG5hdGl2ZUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRh
YmxlKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRo
dW5rcy5oCmluZGV4IGFkZGNmMjMwYzM0NWQ0MjcxYjYzN2YwOGI5NGM0MTZhM2VkMTgyYTQuLjdl
MDZlNzE2MjM1M2EwYjczZjNiYzAyZTU0MmY3M2I4MmY2NmUxMDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRUaHVua3MuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSopOyAg
ICAKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjdGlTdHViKFZNKiwgVGh1bmtHZW5lcmF0
b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5l
cmF0b3IpOwogCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIE5h
dGl2ZUZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZl
RnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciwgSW50
cmluc2ljLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCmluZGV4IGFlZGY0MmUxN2NjMmJkZTAxNGFkNWI4ZDYyODYyMmFlYzE0
NWU3ZTIuLjBjMzhhN2I0ODZiODljZTk0NWU1NDBhYzQ1YTdjNWVlMWI0MzRkNDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgi
CiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9n
LmgiCisjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogI2luY2x1ZGUgIldhc21Q
bGFuLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPGxvY2FsZS5oPgpAQCAt
Mzc2Niw2ICszNzY3LDcgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAg
IFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRp
bmcoKTsKICAgICBzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCgpOworICAgIEpTQzo6V2FzbTo6
ZW5hYmxlRmFzdE1lbW9yeSgpOwogCiAgICAgaW50IHJlc3VsdDsKICAgICByZXN1bHQgPSBydW5K
U0MoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggYzRiZjhmYWRl
OGFhZTMxMGYyYjZhMjc3MTEzMWJiZWRhMjFiMmNiYy4uYzk0NDQ4MDcwOGFmNWRjZTNkMmY2ZTUz
OGU4MWU0NzdkNzM5OWYwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aApAQCAtNDI2LDYgKzQyNiw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwog
ICAgIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5LCB0cnVlLCBOb3JtYWwsICJFeHBvc2Ug
dGhlIFdlYkFzc2VtYmx5IGdsb2JhbCBvYmplY3QuIikgXAogICAgIHYoYm9vbCwgc2ltdWxhdGVX
ZWJBc3NlbWJseUxvd01lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkg
b2JqZWN0IHdvbid0IG1tYXAgdGhlIGZ1bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdp
bGwgYWxsb2NhdGUgdGhlIG1pbmltdW0gcmVxdWlyZWQgYW1vdW50LiIpIFwKKyAgICB2KGJvb2ws
IHVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2ls
bCB0cnkgdG8gdXNlIGEgMzItYml0IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVy
IHRvIGJvdW5kcyBjaGVjayB3YXNtIG1lbW9yeS4iKQorCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVu
Y2UgewogICAgIFNhbWVPcHRpb24sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5k
ZXggYTUwZjlkYjBhMGMzM2U5MDZkYzZlYzBlYmVkYTY3MDdlYTRhOWZjMy4uYTAzOWRkYjAwZmZi
MGNjMmJhMmY3NTc5YzVmMTM1N2YyNGIyNDNkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcApAQCAtMjQwLDYgKzI0MCw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgd2ViQXNzZW1ibHlDYWxs
ZWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgd2ViQXNzZW1ibHlUb0pTQ2FsbGVlU3RydWN0
dXJlLnNldCgqdGhpcywgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CisgICAgd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgd2ViQXNzZW1ibHlUb0pTQ2FsbGVlLnNldCgqdGhpcywgV2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlOjpjcmVhdGUoKnRoaXMsIHdlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVj
dHVyZS5nZXQoKSkpOwogI2VuZGlmCiAgICAgbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggNzMy
YjI2ZTRlNGYzMDFiYTNiMGMxZTczMDgzYWY5M2I0ODg4MGIyMC4uMWE0MWU0NGY2YTNlYmU2MGEz
NGE2YzQ4YjFmYmI1OWM5ODFmNjdjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBA
IC0zMzMsNiArMzMzLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBT
dHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8
U3RydWN0dXJlPiB3ZWJBc3NlbWJseVRvSlNDYWxsZWVTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0
cnVjdHVyZT4gd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPEpTQ2Vs
bD4gd2ViQXNzZW1ibHlUb0pTQ2FsbGVlOwogI2VuZGlmCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
bW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY3ZDJk
MjgzZTlhMTM0YjI4MzBjOTkyNTUxZmNiMjVmOWNiMmZkYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApAQCAtMCww
ICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlND
ZWxsLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2luY2x1ZGUgIlVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8
d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CitjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5Owor
CitjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7
CisKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNX
ZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZv
cywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgZXhpdFN0dWJzLCBXYXNtOjpNZW1vcnk6
Ok1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCisgICAgeworICAgICAgICBhdXRvKiBy
ZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Pih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxsZWVDb3VudCkpKSBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKHZtLCBvd25lciwgc3RkOjpmb3J3YXJkPEJhZzxDYWxsTGlua0luZm8+PihjYWxsTGlu
a0luZm9zKSwgc3RkOjpmb3J3YXJkPFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPj4oZXhpdFN0
dWJzKSwgbW9kZSwgY2FsbGVlQ291bnQpOworICAgICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBv
cnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IH0KKyAgICBX
YXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgp
OyB9CisgICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CisKKyAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOworICAg
ICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9u
SW1wb3J0Q291bnQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2Nh
bGxlZUNvdW50KTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleF0uZ2V0KCk7
CisgICAgfQorCisgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbklt
cG9ydENvdW50KCkpOworICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5k
ZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtj
YWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLmdldCgpOworICAgIH0KKworICAgIHZvaWQgc2V0
SlNFbnRyeXBvaW50Q2FsbGVlKFZNJiB2bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGNhbGxlZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxl
ZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7CisgICAgICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleF0u
c2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgIH0KKworICAgIHZvaWQgc2V0V2FzbUVudHJ5cG9p
bnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxl
ZSogY2FsbGVlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBt
X2NhbGxlZUNvdW50KTsKKyAgICAgICAgY2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVD
b3VudF0uc2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgIH0KKworICAgIFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5Q2FsbGVlPiogY2FsbGVlcygpCisgICAgeworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPio+KGJpdHdpc2VfY2Fz
dDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkNhbGxlZXMoKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgQmFn
PENhbGxMaW5rSW5mbz4mJiwgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIFdhc206Ok1l
bW9yeTo6TW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpOworICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9m
Q2FsbGVlcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pPihzaXplb2YoSlNXZWJB
c3NlbWJseUNvZGVCbG9jaykpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlv
blNpemUodW5zaWduZWQgbnVtQ2FsbGVlcykKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZzZXRP
ZkNhbGxlZXMoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICog
bnVtQ2FsbGVlcyAqIDI7CisgICAgfQorCisgICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXpl
ciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgICAgICB2b2lkIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAgfTsKKworICAgIFdyaXRlQmFy
cmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKKyAgICBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBt
X2NhbGxMaW5rSW5mb3M7CisgICAgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1fd2FzbUV4
aXRTdHViczsKKyAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbV9tb2RlOworICAgIHVuc2lnbmVkIG1f
Y2FsbGVlQ291bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAppbmRleCAyZmYzMDUwMWY2NmYxYWNkYWY1ZGQ4Zjc4ZjVhNTIyOWVhZWI4
YjkxLi5mNDIyMmY3ZGNjMjA0OWQwNmU2ZTA4ZTU2M2U1ZWFiNWFjNzAxNDA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0yNTks
NyArMjU5LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihWTSYgdm0sIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHAKICAgICBmb3IgKGNvbnN0IFBpbm5l
ZFNpemVSZWdpc3RlckluZm8mIHJlZ0luZm8gOiBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnMpCiAg
ICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CiAKLSAgICBp
ZiAoaW5mby5oYXNNZW1vcnkoKSkgeworICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBt
X3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKHBpbm5lZEdQUiwgbV9tZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7CkBAIC0yODIs
OCArMjgyLDggQEAgc3RhdGljIE1lbW9yeUJhc2VBbmRTaXplIGdldE1lbW9yeUJhc2VBbmRTaXpl
KFZNJiB2bSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUKIHsKICAgICBWYWx1ZSogbWVtb3J5
T2JqZWN0ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgcG9pbnRl
clR5cGUoKSwgT3JpZ2luKCksIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mTWVtb3J5KCkpOwogCi0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUodm0udG9w
SlNXZWJBc3NlbWJseUluc3RhbmNlLT5tZW1vcnkoKS0+bWVtb3J5KCktPm1lbW9yeSgpKSkgPT0g
c2l6ZW9mKHZvaWQqKSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOwotICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZS0+bWVt
b3J5KCktPm1lbW9yeSgpLT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiBy
ZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUo
dm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5tZW1vcnkoKS0+bWVtb3J5KCkubWVtb3J5KCkp
KSA9PSBzaXplb2Yodm9pZCopLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUodm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNl
LT5tZW1vcnkoKS0+bWVtb3J5KCkuc2l6ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVn
ZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOwogICAgIE1lbW9yeUJhc2VBbmRTaXplIHJlc3VsdDsK
ICAgICByZXN1bHQuYmFzZSA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLCBtZW1vcnlPYmplY3QsIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpOwogICAgIHJlc3VsdC5zaXplID0gYmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLCBtZW1vcnlPYmpl
Y3QsIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKTsKQEAgLTQ1NCw5ICs0NTQs
MTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIAogaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJh
dG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1
aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikKIHsKLSAgICBBU1NFUlQo
bV9tZW1vcnlCYXNlR1BSICYmIG1fbWVtb3J5U2l6ZUdQUik7Ci0gICAgQVNTRVJUKHNpemVPZk9w
ZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1v
cnlTaXplR1BSLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgLSAxKTsKKyAgICBBU1NFUlQobV9t
ZW1vcnlCYXNlR1BSKTsKKyAgICBpZiAobV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpN
b2RlOjpCb3VuZHNDaGVja2luZykgeworICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsK
KyAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsg
b2Zmc2V0IC0gMSk7CisgICAgfQogICAgIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgT3JpZ2luKCksIHBvaW50ZXIpOwogICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21BZGRyZXNzVmFsdWU+KG1fcHJvYywgT3Jp
Z2luKCksIHBvaW50ZXIsIG1fbWVtb3J5QmFzZUdQUik7CiB9CkBAIC00ODgsNjggKzQ5MSw3MyBA
QCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9hZE9wKExvYWRPcFR5cGUgb3ApCiAKIGlubGluZSBW
YWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBPcmlnaW4gb3Jp
Z2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpCiB7CisgICAgYXV0
byBtYWtlS2luZCA9IFsmXSAoQjM6Ok9wY29kZSBvcGNvZGUpIC0+IEIzOjpLaW5kIHsKKyAgICAg
ICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09IE1lbW9yeTo6U2lnbmFsaW5nKQorICAgICAg
ICAgICAgcmV0dXJuIHRyYXBwaW5nKG9wY29kZSk7CisgICAgICAgIHJldHVybiBvcGNvZGU7Cisg
ICAgfTsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6
IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZDhTLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5k
KExvYWQ4UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQ4UzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4Uywgb3JpZ2luLCBwb2lu
dGVyLCBvZmZzZXQpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQ4UyksIG9yaWdpbiwgcG9p
bnRlciwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBvcmlnaW4sIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNl
IExvYWRPcFR5cGU6OkkzMkxvYWQ4VTogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkOFosIG9yaWdpbiwgcG9pbnRlciwg
b2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZDhaKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQp
OwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOiB7Ci0gICAgICAgIFZh
bHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZDhaLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIFZhbHVlKiB2YWx1
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtp
bmQoTG9hZDhaKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbiwgdmFs
dWUpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzogewotICAgICAg
ICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkMTZTLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQxNlMp
LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgfQogICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDE2UzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQxNlMsIG9yaWdpbiwgcG9pbnRlciwgb2Zm
c2V0KTsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkMTZTKSwgb3JpZ2luLCBwb2ludGVyLCBv
ZmZzZXQpOwogICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBTRXh0MzIsIG9yaWdpbiwgdmFsdWUpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9w
VHlwZTo6STMyTG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZz
ZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkKSwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0
KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKLSAgICAgICAg
VmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBWYWx1
ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IG1ha2VLaW5kKExvYWQpLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAg
ICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIs
IG9yaWdpbiwgdmFsdWUpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMy
UzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7
CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZCksIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9m
ZnNldCk7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkOiB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIG1ha2VLaW5kKExvYWQpLCBJbnQ2NCwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQp
OwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDogewotICAgICAgICByZXR1
cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBG
bG9hdCwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkKSwgRmxv
YXQsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5
cGU6OkY2NExvYWQ6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgRG91YmxlLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIG1ha2VLaW5kKExvYWQpLCBEb3VibGUsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0
KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogQjMgZG9lc24ndCBzdXBwb3J0IExvYWQxNlogeWV0
LiBXZSBzaG91bGQgbG93ZXIgdG8gdGhhdCB2YWx1ZSB3aGVuCiAgICAgLy8gaXQncyBhZGRlZC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTg4NAogICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDE2VTogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQxNlMsIG9yaWdpbiwg
cG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkMTZTKSwgb3JpZ2lu
LCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIE9yaWdpbigpLCB2YWx1ZSwKICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmln
aW4oKSwgMHgwMDAwZmZmZikpOwogICAgIH0KICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQx
NlU6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkMTZTLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7Cisg
ICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZDE2UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsK
ICAgICAgICAgVmFsdWUqIHBhcnRpYWxSZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgT3JpZ2luKCksIHZhbHVlLAogICAgICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIE9yaWdpbigp
LCAweDAwMDBmZmZmKSk7CiAKQEAgLTYyNSwxMyArNjMzLDE4IEBAIGlubGluZSB1aW50MzJfdCBz
aXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBlIG9wKQogCiBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9y
OjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkKIHsKKyAg
ICBhdXRvIG1ha2VLaW5kID0gWyZdIChCMzo6T3Bjb2RlIG9wY29kZSkgLT4gQjM6OktpbmQgewor
ICAgICAgICBpZiAobV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpTaWduYWxpbmcpCisg
ICAgICAgICAgICByZXR1cm4gdHJhcHBpbmcob3Bjb2RlKTsKKyAgICAgICAgcmV0dXJuIG9wY29k
ZTsKKyAgICB9OwogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRT
dG9yZTg6CiAgICAgICAgIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2YWx1ZSk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogCiAg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luLCB2YWx1ZSwgcG9p
bnRlciwgb2Zmc2V0KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBtYWtlS2luZChTdG9yZTgpLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyLCBv
ZmZzZXQpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9y
ZTE2OgpAQCAtNjM5LDcgKzY1Miw3IEBAIGlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRT
dG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uCiAgICAgICAg
IEZBTExUSFJPVUdIOwogCiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKLSAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTE2
LCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKFN0b3JlMTYpLCBvcmln
aW4sIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNl
IFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgpAQCAtNjUwLDcgKzY2Myw3IEBAIGlubGluZSB2b2lk
IEIzSVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2lu
LCBFeHByZXNzaW9uCiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6CiAgICAgY2FzZSBT
dG9yZU9wVHlwZTo6RjMyU3RvcmU6CiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6Ci0g
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3Rv
cmUsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoU3RvcmUpLCBvcmln
aW4sIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCmluZGV4IGQ3OTAxNGYyN2ZhZjkwOTY4
ZjIxZjVmOWI0ZDdiOGNjNzgxMDM5ZTMuLmU2MDRhYjJkNDcwOTBhN2U5NDMxOWExMmNiODcxZTRl
NzQzNzI3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
aW5nQ29udmVudGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
aW5nQ29udmVudGlvbi5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2lu
Y2x1ZGUgIldhc21TaWduYXR1cmUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YWMyZTE5NzI1M2Q2YWI1NDViZmNhOTU5N2E1NTA1
YjViODVhOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlZNLmgi
CisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CisKKworbmFtZXNwYWNlIHsKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKK30KKworc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkU2lnQnVzSGFuZGxlcjsK
K3N0YXRpYyBib29sIGZhc3RIYW5kbGVySW5zdGFsbGVkIHsgZmFsc2UgfTsKK3N0YXRpYyBTdGF0
aWNMb2NrIGNvZGVMb2NhdGlvbnNMb2NrOworc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNo
U2V0PHN0ZDo6dHVwbGU8Vk0qLCB2b2lkKiwgdm9pZCo+Pj4gY29kZUxvY2F0aW9uczsgLy8gKHZt
LCBzdGFydCwgZW5kKQorCisjaWYgQ1BVKFg4Nl82NCkKKyNkZWZpbmUgSW5zdHJ1Y3Rpb25Qb2lu
dGVyR1BSIGNvbnRleHQtPl9fc3MuX19yaXAKKyNkZWZpbmUgRmlyc3RBcmd1bWVudEdQUiBjb250
ZXh0LT5fX3NzLl9fcnNpCisjZWxzZQorI2RlZmluZSBJbnN0cnVjdGlvblBvaW50ZXJHUFIgY29u
dGV4dC0+X19zcy5fX3BjCisjZGVmaW5lIEZpcnN0QXJndW1lbnRHUFIgY29udGV4dC0+X19zcy5f
X3hbMV0KKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdp
bmZvX3QqLCB2b2lkKiB1Y29udGV4dCkKK3sKKyAgICBtY29udGV4dF90IGNvbnRleHQgPSBzdGF0
aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpLT51Y19tY29udGV4dDsKKyAgICB2b2lkKiBm
YXVsdGluZ0luc3RydWN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW5zdHJ1Y3Rpb25Q
b2ludGVyR1BSKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3RhcnRpbmcgaGFuZGxlciBm
b3IgZmF1bHQgYXQ6ICIsIFJhd1BvaW50ZXIoZmF1bHRpbmdJbnN0cnVjdGlvbikpOworCisgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkpJVCBtZW1vcnkgc3RhcnQ6ICIsIFJhd1BvaW50ZXIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpKSwg
IiBlbmQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4
ZWN1dGFibGVNZW1vcnlQb29sKSkpOworICAgIC8vIEZpcnN0IHdlIG5lZWQgdG8gbWFrZSBzdXJl
IHdlIGFyZSBpbiBKSVQgY29kZSBiZWZvcmUgd2UgY2FuIGFxdWlyZSBhbnkgbG9ja3MuIE90aGVy
d2lzZSwKKyAgICAvLyB3ZSBtaWdodCBoYXZlIGNyYXNoZWQgaW4gY29kZSB0aGF0IGlzIGFscmVh
ZHkgaG9sZGluZyBvbmUgb2YgdGhlIGxvY2tzIHdlIHdhbnQgdG8gYXF1aXJlLgorICAgIGlmIChy
ZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkg
PD0gZmF1bHRpbmdJbnN0cnVjdGlvbgorICAgICAgICAmJiBmYXVsdGluZ0luc3RydWN0aW9uIDwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSkg
eworCisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKKyAgICAg
ICAgZm9yIChhdXRvIHJhbmdlIDogY29kZUxvY2F0aW9ucy5nZXQoKSkgeworICAgICAgICAgICAg
Vk0qIHZtOworICAgICAgICAgICAgdm9pZCogc3RhcnQ7CisgICAgICAgICAgICB2b2lkKiBlbmQ7
CisgICAgICAgICAgICBzdGQ6OnRpZSh2bSwgc3RhcnQsIGVuZCkgPSByYW5nZTsKKyAgICAgICAg
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmdW5jdGlvbiBzdGFydDogIiwgUmF3UG9pbnRlcihz
dGFydCksICIgZW5kOiAiLCBSYXdQb2ludGVyKGVuZCkpOworICAgICAgICAgICAgaWYgKHN0YXJ0
IDw9IGZhdWx0aW5nSW5zdHJ1Y3Rpb24gJiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8PSBlbmQpIHsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZm91bmQgbWF0Y2giKTsKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhjZXB0aW9uU3R1YiA9IHZtLT5q
aXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVy
YXRvcik7CisgICAgICAgICAgICAgICAgLy8gSWYgZm9yIHdoYXRldmVyIHJlYXNvbiB3ZSBkb24n
dCBoYXZlIGEgc3R1YiB0aGVuIHdlIHNob3VsZCBqdXN0IHRyZWF0IHRoaXMgbGlrZSBhIHJlZ3Vs
YXIgY3Jhc2guCisgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25TdHViLnNpemUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgImZvdW5kIHN0dWI6ICIsIFJhd1BvaW50ZXIoZXhjZXB0aW9uU3R1Yi5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAgIEZpcnN0QXJndW1lbnRHUFIgPSBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nl
c3MpOworICAgICAgICAgICAgICAgIEluc3RydWN0aW9uUG9pbnRlckdQUiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDY0X3Q+KGV4Y2VwdGlvblN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRTaWdCdXNIYW5kbGVyLCBudWxscHRyKTsK
K30KKwordm9pZCByZWdpc3RlckNvZGUoVk0mIHZtLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKQor
eworICAgIGlmICghZmFzdE1lbW9yeUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKKyAgICBjb2RlTG9jYXRpb25zLT5h
ZGQoc3RkOjptYWtlX3R1cGxlKCZ2bSwgc3RhcnQsIGVuZCkpOworfQorCit2b2lkIHVucmVnaXN0
ZXJDb2RlKFZNJiB2bSwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCkKK3sKKyAgICBpZiAoIWZhc3RN
ZW1vcnlFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihj
b2RlTG9jYXRpb25zTG9jayk7CisgICAgY29kZUxvY2F0aW9ucy0+cmVtb3ZlKHN0ZDo6bWFrZV90
dXBsZSgmdm0sIHN0YXJ0LCBlbmQpKTsKK30KKworYm9vbCBmYXN0TWVtb3J5RW5hYmxlZCgpCit7
CisgICAgcmV0dXJuIGZhc3RIYW5kbGVySW5zdGFsbGVkOworfQorCit2b2lkIGVuYWJsZUZhc3RN
ZW1vcnkoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZh
c3RNZW1vcnkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIGFjdGlvbjsKKworICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gdHJhcEhhbmRsZXI7
CisgICAgICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgYWN0aW9uLnNh
X2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAgCisgICAgICAgIGlmICghc2lnYWN0aW9uKFNJ
R0JVUywgJmFjdGlvbiwgJm9sZFNpZ0J1c0hhbmRsZXIpKSB7CisgICAgICAgICAgICBmYXN0SGFu
ZGxlckluc3RhbGxlZCA9IHRydWU7CisgICAgICAgICAgICBjb2RlTG9jYXRpb25zLmNvbnN0cnVj
dCgpOworICAgICAgICB9CisKKyAgICB9KTsKK30KKyAgICAKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MzE5ZTAxODNhMTg5NmE1YWIxNGMwZWJkYThkODYyNzBiZWNlM2M2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgVk07CisKK25hbWVzcGFjZSBXYXNtIHsKKwordm9pZCByZWdpc3RlckNvZGUoVk0mLCB2b2lk
KiBzdGFydCwgdm9pZCogZW5kKTsKK3ZvaWQgdW5yZWdpc3RlckNvZGUoVk0mLCB2b2lkKiBzdGFy
dCwgdm9pZCogZW5kKTsKKworYm9vbCBmYXN0TWVtb3J5RW5hYmxlZCgpOworSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmFibGVGYXN0TWVtb3J5KCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggZGM2MzQ3NDQyMmJmZTYwMzNkOGIyZDIyMWJiN2VjNWMx
MTA1Njg2Mi4uMWZjNTc0ZTkzZDcyNDdjNjRhOGZhMzM0ZjYyMjVkMmM3MjcxZjY0MyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtMjU2LDcgKzI1Niw2IEBAIHN0
cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgfQogCiAgICAgdWludDMyX3QgaW1wb3J0RnVu
Y3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
cy5zaXplKCk7IH0KLSAgICBib29sIGhhc01lbW9yeSgpIGNvbnN0IHsgcmV0dXJuICEhbWVtb3J5
OyB9CiAKICAgICB+TW9kdWxlSW5mb3JtYXRpb24oKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IGFhZDkxYzEzZTNhMzAxNjgzOGZiMDM4NGRhYjVh
NDJiNDc3NDNkMjguLjNmOTkxM2NlNWY0OTE2MTQ3MzU4NWNjZmI1MzAxYmY5YzBmYzgwMzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0yOCw3ICsyOCwx
MSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNs
dWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCisKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVy
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDg2ICs0
MiwxOTkgQEAgbmFtZXNwYWNlIHsKIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi12
b2lkIE1lbW9yeTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoraW5saW5lIGJvb2wgbW1h
cEJ5dGVzKHNpemVfdCBieXRlcywgdm9pZComIG1lbW9yeSkKIHsKLSAgICBTdHJpbmcgbWVtb3J5
SGV4OwotICAgIFdURjo6YXBwZW5kVW5zaWduZWQ2NEFzSGV4KCh1aW50NjRfdCkodWludHB0cl90
KW1fbWVtb3J5LCBtZW1vcnlIZXgpOwotICAgIG91dC5wcmludCgiTWVtb3J5IGF0IDB4IiwgbWVt
b3J5SGV4LCAiLCBzaXplICIsIG1fc2l6ZSwgIkIgY2FwYWNpdHkgIiwgbV9tYXBwZWRDYXBhY2l0
eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAiIG1heGltdW0gIiwgbV9tYXhpbXVtLCAiIG1v
ZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKKyAgICBkYXRhTG9nSWYodmVyYm9zZSwgIkF0dGVt
cHRpbmcgdG8gbW1hcCAiLCBieXRlcywgIiBieXRlczogIik7CisgICAgLy8gRklYTUU6IEl0IHdv
dWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEgVk0gdGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzYwMAorICAgIHZvaWQqIHJlc3VsdCA9
IG1tYXAobnVsbHB0ciwgYnl0ZXMsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwg
LTEsIDApOworICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiZmFpbGVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN1Y2NlZWRlZCIpOworICAgIG1lbW9yeSA9IHJlc3Vs
dDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgY2hhciogTWVtb3J5OjptYWtlU3RyaW5n
KE1vZGUgbW9kZSkgY29uc3QKKy8vIFdlIHVzZSB0aGlzIGFzIGEgaGV1cmlzdGljIHRvIGd1ZXNz
IG1vZGUgYSBtZW1vcnkgaW1wb3J0IHdpbGwgYmUuIE1vc3Qgb2YgdGhlIHRpbWUgd2UgZXhwZWN0
IHVzZXJzIHRvCisvLyBhbGxvY2F0ZSB0aGUgbWVtb3J5IHRoZXkgYXJlIGdvaW5nIHRvIHBhc3Mg
dG8gYWxsIHRoZWlyIG1vZHVsZXMgcmlnaHQgYmVmb3JlIGNvbXBpbGF0aW9uLgorc3RhdGljIE1l
bW9yeTo6TW9kZSBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSB7IE1lbW9yeTo6TW9kZTo6U2lnbmFs
aW5nIH07CisKK01lbW9yeTo6TW9kZSBNZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCkKIHsKLSAg
ICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4g
IkJvdW5kc0NoZWNraW5nIjsKKyAgICByZXR1cm4gbGFzdEFsbG9jYXRlZE1lbW9yeU1vZGU7Cit9
CisKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldl
IHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJl
IDJeMzMgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQg
d2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7CisKK3N0YXRpYyBj
b25zdCBzaXplX3QgZmFzdE1lbW9yeU1hcHBlZEJ5dGVzID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpICogMjsgLy8gcG9pbnRlciBtYXgg
KyBvZmZzZXQgbWF4LiBUaGlzIGlzIGFsbCB3ZSBuZWVkIHNpbmNlIGEgbG9hZCBzdHJhZGRsaW5n
IHJlYWRhYmxlIG1lbW9yeSB3aWxsIHRyYXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4RmFz
dE1lbW9yaWVzID0gNDsKK3N0YXRpYyB1bnNpZ25lZCBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgeyAw
IH07CitpbmxpbmUgRGVxdWU8dm9pZCosIG1heEZhc3RNZW1vcmllcz4mIGF2YWlsYWJsZUZhc3RN
ZW1vcmllcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERlcXVlPHZvaWQqLCBtYXhG
YXN0TWVtb3JpZXM+PiBhdmFpbGFibGVGYXN0TWVtb3JpZXM7CisgICAgcmV0dXJuIGF2YWlsYWJs
ZUZhc3RNZW1vcmllczsKK30KKworaW5saW5lIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0s
IHZvaWQqJiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeTo6TW9kZSYgbW9k
ZSkKK3sKKyAgICAvLyBXZSBtaWdodCBHQyBoZXJlIHNvIHdlIHNob3VsZCBiZSBob2xkaW5nIHRo
ZSBBUEkgbG9jay4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3luY3Jvbm91
c2x5IHRyaWdnZXIgdGhlIEdDIGZyb20gYW5vdGhlciB0aHJlYWQuCisgICAgQVNTRVJUKHZtLmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGlmICghZmFzdE1lbW9yeUVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgbmVlZCB0byBiZSBzdXJl
IHdlIGhhdmUgYSBzdHViIHByaW9yIHRvIHJ1bm5pbmcgY29kZS4KKyAgICBpZiAoIXZtLmdldENU
SVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5zaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGVxdWVGYXN0TWVtb3J5ID0gWyZdICgpIC0+
IGJvb2wgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgcmV0dXJuIHRo
ZXNlIHRvIHRoZSBPUyBpZiB3ZSBnbyBzb21lIG51bWJlciBvZiBHQ3MKKyAgICAgICAgLy8gd2l0
aG91dCB1c2luZyB0aGVtLgorICAgICAgICBpZiAoIWF2YWlsYWJsZUZhc3RNZW1vcmllcygpLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgbWVtb3J5ID0gYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCku
dGFrZUZpcnN0KCk7CisgICAgICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlNYXBw
ZWRCeXRlczsKKyAgICAgICAgICAgIG1vZGUgPSBNZW1vcnk6OlNpZ25hbGluZzsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
OworCisgICAgQVNTRVJUKGFsbG9jYXRlZEZhc3RNZW1vcmllcyA8PSBtYXhGYXN0TWVtb3JpZXMp
OworICAgIGlmIChkZXF1ZUZhc3RNZW1vcnkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAvLyBJZiB3ZSBoYXZlIGFsbG9jYXRlZCBhbGwgdGhlIGZhc3QgbWVtb3JpZXMuLi4gdG9vIGJh
ZC4KKyAgICBpZiAoYWxsb2NhdGVkRmFzdE1lbW9yaWVzID09IG1heEZhc3RNZW1vcmllcykgewor
ICAgICAgICAvLyBUaGVyZSBpcyBhIHJlYXNvbmFibGUgY2hhbmNlIHRoYXQgYW5vdGhlciBtb2R1
bGUgaGFzIGRpZWQgYnV0IGhhcyBub3QgYmVlbiBjb2xsZWN0ZWQgeWV0LiBEb24ndCBsb3NlIGhv
cGUgeWV0IQorICAgICAgICB2bS5oZWFwLmNvbGxlY3RTeW5jKCk7CisgICAgICAgIHJldHVybiBk
ZXF1ZUZhc3RNZW1vcnkoKTsKICAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gIiI7CisKKyAgICBpZiAobW1hcEJ5dGVzKGZhc3RNZW1vcnlNYXBwZWRC
eXRlcywgbWVtb3J5KSkgeworICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlNYXBw
ZWRCeXRlczsKKyAgICAgICAgbW9kZSA9IE1lbW9yeTo6U2lnbmFsaW5nOworICAgICAgICBhbGxv
Y2F0ZWRGYXN0TWVtb3JpZXMrKzsKKyAgICB9CisgICAgcmV0dXJuIG1lbW9yeTsKIH0KIAotc3Rh
dGljX2Fzc2VydChzaXplb2YodWludDY0X3QpID09IHNpemVvZihzaXplX3QpLCAiV2UgcmVseSBv
biBhbGxvd2luZyB0aGUgbWF4aW11bSBzaXplIG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUgMl4zMiB3
aGljaCBpcyBsYXJnZXIgdGhhbiBmaXRzIGluIGEgMzItYml0IGludGVnZXIgdGhhdCB3ZSdkIHBh
c3MgdG8gbXByb3RlY3QgaWYgdGhpcyBkaWRuJ3QgaG9sZC4iKTsKK2lubGluZSB2b2lkIHJlbGVh
c2VGYXN0TWVtb3J5KHZvaWQqJiBtZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUsIHNpemVfdCBt
YXBwZWRDYXBhY2l0eSwgTWVtb3J5OjpNb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgIT0gTWVt
b3J5OjpTaWduYWxpbmcgfHwgIW1lbW9yeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUkVMRUFT
RV9BU1NFUlQobWVtb3J5ICYmIG1hcHBlZENhcGFjaXR5ID09IGZhc3RNZW1vcnlNYXBwZWRCeXRl
cyk7CisgICAgQVNTRVJUKGZhc3RNZW1vcnlFbmFibGVkKCkpOworCisgICAgbWVtc2V0KG1lbW9y
eSwgMCwgd3JpdGFibGVTaXplKTsKKyAgICAvLyBXZSBuZWVkIHRvIG1wcm90ZWN0IFBST1RfTk9O
RSBhbGwgdGhlIGV4aXN0aW5nIG1lbW9yeS4gSWYgd2UgY2FuJ3QsIGZvcgorICAgIC8vIHdoYXRl
dmVyIHJlYXNvbiwgd2Ugc2hvdWxkIGJhaWwgb3V0IGFuZCBnZXQgcmlkIG9mIHRoaXMgbWVtb3J5
LgorICAgIGlmIChtcHJvdGVjdChtZW1vcnksIHdyaXRhYmxlU2l6ZSwgUFJPVF9OT05FKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGF2YWlsYWJsZUZhc3RNZW1vcmllcygpLnNpemUo
KSA8IGFsbG9jYXRlZEZhc3RNZW1vcmllcyk7CisgICAgYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCku
YXBwZW5kKG1lbW9yeSk7CisgICAgbWVtb3J5ID0gbnVsbHB0cjsKK30KIAotTWVtb3J5OjpNZW1v
cnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpCi0g
ICAgOiBtX3NpemUoaW5pdGlhbC5ieXRlcygpKQorTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGlu
aXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQorICAgIDogbV9pbml0aWFsKGluaXRpYWwpCisgICAg
LCBtX21heGltdW0obWF4aW11bSkKK3sKKyAgICBBU1NFUlQoIWluaXRpYWwuYnl0ZXMoKSk7Cit9
CisKK01lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VD
b3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1vZGUgbW9kZSkKKyAgICA6IG1f
bWVtb3J5KG1lbW9yeSkKKyAgICAsIG1fc2l6ZShpbml0aWFsLmJ5dGVzKCkpCiAgICAgLCBtX2lu
aXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQotICAgICwgbV9tb2RlKE1v
ZGU6OkJvdW5kc0NoZWNraW5nKQotICAgIC8vIEZJWE1FOiBJZiB3ZSBhZGQgc2lnbmFsIGJhc2Vk
IGJvdW5kcyBjaGVja2luZyB0aGVuIHdlIG5lZWQgZXh0cmEgc3BhY2UgZm9yIG92ZXJmbG93IG9u
IGxvYWQuCi0gICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyNjkzCisgICAgLCBtX21hcHBlZENhcGFjaXR5KG1hcHBlZENhcGFjaXR5KQorICAgICwg
bV9tb2RlKG1vZGUpCit7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5
IGFsbG9jYXRpbmcgIiwgKnRoaXMpOworfQorCitSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0
ZUltcGwoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6
b3B0aW9uYWw8TW9kZT4gcmVxdWlyZWRNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhp
bXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQg
Ynkgb3VyIGNhbGxlci4KIAotICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11
bS5ieXRlcygpIDogUGFnZUNvdW50OjptYXgoKS5ieXRlcygpOwotICAgIGlmICghbV9tYXBwZWRD
YXBhY2l0eSkgeworICAgIE1vZGUgbW9kZSA9IHJlcXVpcmVkTW9kZSA/ICpyZXF1aXJlZE1vZGUg
OiBCb3VuZHNDaGVja2luZzsKKyAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IGluaXRpYWwuYnl0ZXMo
KTsKKyAgICBzaXplX3QgbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygp
IDogUGFnZUNvdW50OjptYXgoKS5ieXRlcygpOworICAgIHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7
CisKKyAgICBhdXRvIG1ha2VFbXB0eU1lbW9yeSA9IFsmXSAoKSAtPiBSZWZQdHI8TWVtb3J5PiB7
CisgICAgICAgIGlmIChtb2RlID09IFNpZ25hbGluZykKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlID0gQm91bmRzQ2hlY2tpbmc7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0pKTsK
KyAgICB9OworCisgICAgaWYgKCFtYXBwZWRDYXBhY2l0eSkgewogICAgICAgICAvLyBUaGlzIG1l
YW5zIHdlIHNwZWNpZmllZCBhIHplcm8gYXMgbWF4aW11bSAod2hpY2ggbWVhbnMgd2UgYWxzbyBo
YXZlIHplcm8gYXMgaW5pdGlhbCBzaXplKS4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zaXpl
ID09IDApOwotICAgICAgICBtX21lbW9yeSA9IG51bGxwdHI7Ci0gICAgICAgIG1fbWFwcGVkQ2Fw
YWNpdHkgPSAwOwotICAgICAgICBmYWlsZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgbm90aGlu
ZyAiLCAqdGhpcyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNp
emUpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgYWxsb2Nh
dGluZyBub3RoaW5nIik7CisgICAgICAgIHJldHVybiBtYWtlRW1wdHlNZW1vcnkoKTsKICAgICB9
CiAKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9y
IHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYz
NjAwCi0gICAgdm9pZCogcmVzdWx0ID0gT3B0aW9uczo6c2ltdWxhdGVXZWJBc3NlbWJseUxvd01l
bW9yeSgpID8gTUFQX0ZBSUxFRCA6IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRDYXBhY2l0eSwgUFJP
VF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7Ci0gICAgaWYgKHJlc3VsdCA9
PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51
bWJlci4KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9y
eTo6TWVtb3J5IG1tYXAgZmFpbGVkIG9uY2UgZm9yIGNhcGFjaXR5LCB0cnlpbmcgYWdhaW4iLCAq
dGhpcyk7Ci0gICAgICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtX3NpemU7Ci0gICAgICAgIGlmICgh
bV9tYXBwZWRDYXBhY2l0eSkgewotICAgICAgICAgICAgbV9tZW1vcnkgPSBudWxscHRyOwotICAg
ICAgICAgICAgZmFpbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6TWVtb3J5IG1tYXAgbm90IHRyeWluZyBhZ2Fp
biBiZWNhdXNlIHNpemUgaXMgemVybyAiLCAqdGhpcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KKyAgICBib29sIGNhblVzZUZhc3RNZW1vcnkgPSAhcmVxdWlyZWRNb2RlIHx8IHJl
cXVpcmVkTW9kZSA9PSBTaWduYWxpbmc7CisgICAgaWYgKCFjYW5Vc2VGYXN0TWVtb3J5IHx8ICF0
cnlHZXRGYXN0TWVtb3J5KHZtLCBtZW1vcnksIG1hcHBlZENhcGFjaXR5LCBtb2RlKSkgeworICAg
ICAgICBpZiAobW9kZSA9PSBTaWduYWxpbmcpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICBpZiAoT3B0aW9uczo6c2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSgpID8g
dHJ1ZSA6ICFtbWFwQnl0ZXMobWFwcGVkQ2FwYWNpdHksIG1lbW9yeSkpIHsKKyAgICAgICAgICAg
IC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4KKyAgICAgICAgICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIGZhaWxlZCBvbmNlIGZvciBjYXBh
Y2l0eSwgdHJ5aW5nIGFnYWluIik7CisgICAgICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IHNpemU7
CisgICAgICAgICAgICBpZiAoIW1hcHBlZENhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAgbm90IHRyeWluZyBhZ2FpbiBi
ZWNhdXNlIHNpemUgaXMgemVybyIpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlRW1wdHlN
ZW1vcnkoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICByZXN1bHQgPSBtbWFwKG51bGxwdHIs
IG1fbWFwcGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEs
IDApOwotICAgICAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgbW1h
cCBmYWlsZWQgdHdpY2UgIiwgKnRoaXMpOwotICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghbW1hcEJ5dGVzKG1hcHBlZENhcGFj
aXR5LCBtZW1vcnkpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1l
bW9yeTo6Y3JlYXRlIG1tYXAgZmFpbGVkIHR3aWNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQo
bV9zaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgIHsKLSAgICAgICAgYm9vbCBzdWNjZXNz
ID0gIW1wcm90ZWN0KHJlc3VsdCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpLCBQUk9UX1JF
QUQgfCBQUk9UX1dSSVRFKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7CisgICAg
QVNTRVJUKG1lbW9yeSAmJiBzaXplIDw9IG1hcHBlZENhcGFjaXR5KTsKKyAgICBpZiAobXByb3Rl
Y3QobWVtb3J5LCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbXByb3RlY3QgZmFpbGVkIik7CisgICAg
ICAgIHJlbGVhc2VGYXN0TWVtb3J5KG1lbW9yeSwgMCwgbWFwcGVkQ2FwYWNpdHksIG1vZGUpOwor
ICAgICAgICBpZiAobWVtb3J5KSB7CisgICAgICAgICAgICBpZiAobXVubWFwKG1lbW9yeSwgbWFw
cGVkQ2FwYWNpdHkpKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAgIAorICAgIGxhc3RBbGxvY2F0ZWRNZW1vcnlN
b2RlID0gbW9kZTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1h
cCBzdWNjZWVkZWQiKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShtZW1vcnksIGlu
aXRpYWwsIG1heGltdW0sIG1hcHBlZENhcGFjaXR5LCBtb2RlKSk7Cit9CiAKLSAgICBtX21lbW9y
eSA9IHJlc3VsdDsKLSAgICBmYWlsZWQgPSBmYWxzZTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgZGF0YUxvZ0xuKCJNZW1vcnk6Ok1lbW9yeSBtbWFwIHN1Y2NlZWRlZCAiLCAqdGhpcyk7CitS
ZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQ
YWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNb2RlPiBtb2RlKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxk
IGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KKyAgICBSZWZQdHI8TWVtb3J5PiByZXN1bHQg
PSBjcmVhdGVJbXBsKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBtb2RlKTsKKyAgICBpZiAocmVzdWx0
KSB7CisgICAgICAgIGlmIChyZXN1bHQtPm1vZGUoKSA9PSBTaWduYWxpbmcpCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQtPm1fbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1h
cHBlZEJ5dGVzKTsKKyAgICAgICAgaWYgKG1vZGUpCisgICAgICAgICAgICBBU1NFUlQoKm1vZGUg
PT0gcmVzdWx0LT5tb2RlKCkpOworICAgICAgICBBU1NFUlQobGFzdEFsbG9jYXRlZE1lbW9yeU1v
ZGUgPT0gcmVzdWx0LT5tb2RlKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBN
ZW1vcnk6On5NZW1vcnkoKQogewotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4o
Ik1lbW9yeTo6fk1lbW9yeSAiLCAqdGhpcyk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1l
bW9yeTo6fk1lbW9yeSAiLCAqdGhpcyk7CisgICAgcmVsZWFzZUZhc3RNZW1vcnkobV9tZW1vcnks
IG1fc2l6ZSwgbV9tYXBwZWRDYXBhY2l0eSwgbV9tb2RlKTsKICAgICBpZiAobV9tZW1vcnkpIHsK
ICAgICAgICAgaWYgKG11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSkpCiAgICAgICAg
ICAgICBDUkFTSCgpOwpAQCAtMTI4LDIzICsyNDUsMjUgQEAgYm9vbCBNZW1vcnk6Omdyb3coUGFn
ZUNvdW50IG5ld1NpemUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3Vu
dDo6ZnJvbUJ5dGVzKG1fc2l6ZSkpOwogCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFM
b2dMbigiTWVtb3J5Ojpncm93IHRvICIsIG5ld1NpemUsICIgZnJvbSAiLCAqdGhpcyk7CisgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyB0byAiLCBuZXdTaXplLCAiIGZyb20g
IiwgKnRoaXMpOwogCiAgICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gbWF4aW11bSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1aW50NjRfdCBkZXNpcmVkU2l6ZSA9IG5ld1Np
emUuYnl0ZXMoKTsKKyAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5dGVzKCk7CiAK
ICAgICBpZiAobV9tZW1vcnkgJiYgZGVzaXJlZFNpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSkgewot
ICAgICAgICBib29sIHN1Y2Nlc3MgPSAhbXByb3RlY3Qoc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1f
bWVtb3J5KSArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkZXNpcmVkU2l6ZSAtIG1fc2l6
ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNj
ZXNzKTsKKyAgICAgICAgaWYgKG1wcm90ZWN0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9y
eSkgKyBtX3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZGVzaXJlZFNpemUgLSBtX3NpemUpLCBQ
Uk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIk1lbW9yeTo6Z3JvdyBpbi1wbGFjZSBmYWlsZWQgIiwgKnRoaXMpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKICAgICAgICAgbV9zaXplID0gZGVzaXJlZFNpemU7
Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Omdy
b3cgaW4tcGxhY2UgIiwgKnRoaXMpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVt
b3J5Ojpncm93IGluLXBsYWNlICIsICp0aGlzKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCisgICAgQVNTRVJUKG1vZGUoKSAhPSBTaWduYWxpbmcpOwogICAgIC8vIE90aGVyd2lzZSwg
bGV0J3MgdHJ5IHRvIG1ha2Ugc29tZSBuZXcgbWVtb3J5LgogICAgIHZvaWQqIG5ld01lbW9yeSA9
IG1tYXAobnVsbHB0ciwgZGVzaXJlZFNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9Q
UklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKICAgICBpZiAobmV3TWVtb3J5ID09IE1BUF9GQUlM
RUQpCkBAIC0xNTksMTEgKzI3OCwyNiBAQCBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3
U2l6ZSkKICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CiAgICAgbV9zaXplID0g
ZGVzaXJlZFNpemU7CiAKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJNZW1v
cnk6Omdyb3cgIiwgKnRoaXMpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdy
b3cgIiwgKnRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIE1lbW9yeTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiTWVtb3J5IGF0ICIsIFJh
d1BvaW50ZXIobV9tZW1vcnkpLCAiLCBzaXplICIsIG1fc2l6ZSwgIkIgY2FwYWNpdHkgIiwgbV9t
YXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAiIG1heGltdW0gIiwgbV9t
YXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKK30KKworY29uc3QgY2hhciog
TWVtb3J5OjptYWtlU3RyaW5nKE1vZGUgbW9kZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICBjYXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5n
IjsKKyAgICBjYXNlIE1vZGU6OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOworICAgIGNh
c2UgTW9kZTo6TnVtYmVyT2ZNb2RlczogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogfSAvLyBuYW1lc3BhY2UgV2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9y
eS5oCmluZGV4IDIzNmJmODUxMjU2NDU1YmNlOWUzMjM2ZGNjNDU4NGM4NmMxZGNmMGMuLjMzODRh
NDJjNjBiNjU0MTRhMThhMWM3Nzk5YzExYWFkMzVhNTFlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAgLTI3LDYyICsyNyw2OSBAQAogCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVk
ZSAiV2FzbVBhZ2VDb3VudC5oIgogCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKIG5hbWVzcGFj
ZSBXVEYgewogY2xhc3MgUHJpbnRTdHJlYW07CiB9CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVk07CisKK25hbWVzcGFjZSBXYXNt
IHsKIAotY2xhc3MgTWVtb3J5IHsKK2NsYXNzIE1lbW9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPE1l
bW9yeT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lbW9yeSk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFdURjo6UHJpbnRTdHJlYW0m
KSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBvdGhlciBtb2Rlcy4g
c2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCi0gICAg
ZW51bSBjbGFzcyBNb2RlIHsKLSAgICAgICAgQm91bmRzQ2hlY2tpbmcKKyAgICBlbnVtIE1vZGUg
eworICAgICAgICBCb3VuZHNDaGVja2luZywKKyAgICAgICAgU2lnbmFsaW5nLAorICAgICAgICBO
dW1iZXJPZk1vZGVzCiAgICAgfTsKICAgICBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1vZGUpIGNv
bnN0OwogCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9t
ZW1vcnk7IH0KKworICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGUoVk0mLCBQYWdlQ291
bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVxdWly
ZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKKwogICAgIE1lbW9yeSgpID0gZGVmYXVsdDsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtLCBib29sJiBmYWlsZWQpOwotICAgIE1lbW9yeShNZW1vcnkmJiBvdGhlcikKLSAgICAgICAg
OiBtX21lbW9yeShvdGhlci5tX21lbW9yeSkKLSAgICAgICAgLCBtX3NpemUob3RoZXIubV9zaXpl
KQotICAgICAgICAsIG1faW5pdGlhbChvdGhlci5tX2luaXRpYWwpCi0gICAgICAgICwgbV9tYXhp
bXVtKG90aGVyLm1fbWF4aW11bSkKLSAgICAgICAgLCBtX21hcHBlZENhcGFjaXR5KG90aGVyLm1f
bWFwcGVkQ2FwYWNpdHkpCi0gICAgICAgICwgbV9tb2RlKG90aGVyLm1fbW9kZSkKLSAgICB7Ci0g
ICAgICAgIC8vIE1vdmluZyB0cmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBhbGxvY2F0ZWQgbWVt
b3J5LgotICAgICAgICBvdGhlci5tX21lbW9yeSA9IG51bGxwdHI7Ci0gICAgfQogICAgIH5NZW1v
cnkoKTsKIAogICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9Ci0g
ICAgdWludDY0X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgUGFnZUNvdW50IHNpemVJblBhZ2Vz
KCkgY29uc3QgeyByZXR1cm4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKTsgfQogCiAgICAg
UGFnZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KICAgICBQYWdl
Q291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQogCisgICAgc3RhdGlj
IE1vZGUgbGFzdEFsbG9jYXRlZE1vZGUoKTsKICAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVy
biBtX21vZGU7IH0KIAorICAgIC8vIGdyb3coKSBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0
aGUgSlNXZWJBc3NlbWJseU1lbW9yeSBvYmplY3Qgc2luY2UgdGhhdCBvYmplY3QgbmVlZHMgdG8g
dXBkYXRlIGludGVybmFsCisgICAgLy8gcG9pbnRlcnMgd2l0aCB0aGUgY3VycmVudCBiYXNlIGFu
ZCBzaXplLgogICAgIGJvb2wgZ3JvdyhQYWdlQ291bnQpOwogCi0gICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fbWVt
b3J5KTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKE1lbW9yeSwgbV9zaXplKTsgfQotICAgIAorICAgIHZvaWQgY2hlY2soKSB7
ICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7IH0KIHByaXZhdGU6CisgICAgc3RhdGljIFJl
ZlB0cjxNZW1vcnk+IGNyZWF0ZUltcGwoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0
KTsKKyAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTW9kZSk7CisgICAgTWVtb3J5KFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisKKyAgICAvLyBGSVhNRTogd2Ugc2hv
dWxkIG1vdmUgdGhlc2UgdG8gdGhlIGluc3RhbmNlIHRvIGF2b2lkIGEgbG9hZCBvbiBpbnN0YW5j
ZS0+aW5zdGFuY2UgY2FsbHMuCiAgICAgdm9pZCogbV9tZW1vcnkgeyBudWxscHRyIH07Ci0gICAg
dWludDY0X3QgbV9zaXplIHsgMCB9OworICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAgICAgUGFn
ZUNvdW50IG1faW5pdGlhbDsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVtOwotICAgIHVpbnQ2NF90
IG1fbWFwcGVkQ2FwYWNpdHkgeyAwIH07CisgICAgc2l6ZV90IG1fbWFwcGVkQ2FwYWNpdHkgeyAw
IH07CiAgICAgTW9kZSBtX21vZGUgeyBNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9u
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5j
cHAKaW5kZXggNmIwNjNkMzUxMjRlOTdhODNiMWYxZTA4NzNhNDEwN2M5ZjBlOWZkNS4uMjE2Nzlk
OTgyMGE1ZGNlM2ViYTFiYTcxNTE1OTYwZmQ2MDRkOGJmMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpAQCAtNDgs
NiArNDksOCBAQCBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCkKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9OwogICAg
ICAgICB1bnNpZ25lZCByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPSBwaW5uZWRTaXplcy5zaXpl
KCkgKyAxOwogICAgICAgICBqc2NDYWxsaW5nQ29udmVudGlvbigpLm1fY2FsbGVlU2F2ZVJlZ2lz
dGVycy5mb3JFYWNoKFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgaWYgKCFyZWcuaXNHUFIo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVn
LmdwcigpOwogICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgfHwgUmVn
aXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwpAQCAtNzEsMTEgKzc0LDIyIEBAIFBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0
ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpCiB7CiB9CiAK
LU1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbihQYWdlQ291bnQgaW5pdGlhbCwg
UGFnZUNvdW50IG1heGltdW0sICBib29sIGlzSW1wb3J0KQorTWVtb3J5SW5mb3JtYXRpb246Ok1l
bW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gcmVjb21waWxlTW9kZSwgYm9vbCBpc0lt
cG9ydCkKICAgICA6IG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0p
CiAgICAgLCBtX2lzSW1wb3J0KGlzSW1wb3J0KQogeworICAgIGlmICghaXNJbXBvcnQgJiYgIXJl
Y29tcGlsZU1vZGUpIHsKKyAgICAgICAgbV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRl
KHZtLCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnk6OlNpZ25hbGluZyk7CisgICAgICAgIGlmICht
X3Jlc2VydmVkTWVtb3J5KQorICAgICAgICAgICAgQVNTRVJUKCEhKm1fcmVzZXJ2ZWRNZW1vcnkp
OworICAgIH0KKworICAgIGlmIChyZWNvbXBpbGVNb2RlKQorICAgICAgICBtX21vZGUgPSAqcmVj
b21waWxlTW9kZTsKKyAgICBlbHNlCisgICAgICAgIG1fbW9kZSA9IE1lbW9yeTo6bGFzdEFsbG9j
YXRlZE1vZGUoKTsKKwogICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9pbml0aWFsKTsKICAgICBSRUxF
QVNFX0FTU0VSVCghbV9tYXhpbXVtIHx8IG1fbWF4aW11bSA+PSBtX2luaXRpYWwpOwogICAgIEFT
U0VSVCghISp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnlJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeUluZm9ybWF0aW9uLmgKaW5kZXggNmU3ZjUyMTg5NDdlMDE2YjQ4ZmRmNjAxOWQzNjhhNTc1
N2UzODViNy4uYzdkOGYzNGQ2MzVhY2ZlMGU4MjM5NDhmMmY4OTBlOTRmYTM5YmI5NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgK
QEAgLTI4LDcgKzI4LDkgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJH
UFJJbmZvLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291
bnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpAQCAtNTIsMTcgKzU0LDI0IEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKCEqdGhpcyk7CiAgICAgfQogCi0gICAgTWVtb3J5SW5mb3JtYXRp
b24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sIGlzSW1wb3J0KTsK
KyAgICBNZW1vcnlJbmZvcm1hdGlvbihWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+LCBib29sIGlzSW1wb3J0KTsKIAog
ICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CiAgICAg
UGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KKyAgICBib29s
IGhhc1Jlc2VydmVkTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNlcnZlZE1lbW9yeTsgfQor
ICAgIE1lbW9yeSYgdGFrZVJlc2VydmVkTWVtb3J5KCkgeyBBU1NFUlQoaGFzUmVzZXJ2ZWRNZW1v
cnkoKSk7IHJldHVybiAqbV9yZXNlcnZlZE1lbW9yeS5sZWFrUmVmKCk7IH0KKyAgICBNZW1vcnk6
Ok1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgaXNJbXBvcnQo
KSBjb25zdCB7IHJldHVybiBtX2lzSW1wb3J0OyB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gISFtX2luaXRpYWw7IH0KIAogcHJpdmF0ZToKKyAgICAvLyBU
aGlzIGlzIGEgdW5pcXVlX3B0ciBzbyB3ZSBjYW4gcGFzcyBNb2R1bGVJbmZvcm1hdGlvbiBhcyBj
b25zdCBhbmQgc3RpbGwgYmUKKyAgICAvLyBhYmxlIHRvIHRha2Ugb3duZXJzaGlwIG9mIHRoaXMu
CisgICAgUmVmUHRyPE1lbW9yeT4gbV9yZXNlcnZlZE1lbW9yeTsKICAgICBQYWdlQ291bnQgbV9p
bml0aWFsIHsgfTsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVtIHsgfTsKKyAgICBNZW1vcnk6Ok1v
ZGUgbV9tb2RlIHsgTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGJvb2wgbV9p
c0ltcG9ydCB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDUxNzczZDA2ZTYyMDEyM2I1YWMwNDI2MmE5MDhi
YWIwYmY4ZjE1OTkuLjUyMTE2NGZmNGM0NmFiNGYxYTNjY2EzN2NkZTkzOWUxMmViNmJiYzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBA
IC0zMTYsNyArMzE2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJv
b2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBBU1NFUlQoaW5pdGlhbFBhZ2VDb3Vu
dCk7CiAgICAgQVNTRVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQgPj0g
aW5pdGlhbFBhZ2VDb3VudCk7CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9y
eUluZm9ybWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1wb3J0
KTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKCptX3Zt
LCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBtX21vZGUsIGlzSW1wb3J0KTsK
ICAgICByZXR1cm4geyB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmgKaW5kZXggNDFiNTdmYzgyMGM0NWI5YjRlYzVmYTdjNjk1YmE1NmNhZmI4
NGExMC4uOTRiYTE0ZTE1YTNmZGEzMTA0ZTMzYmFjMDkzYzFmMWU4MWNmMjBjNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5j
bHVkZSAiV2FzbVBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTQz
LDEyICs0NCw5IEBAIHN0cnVjdCBNb2R1bGVQYXJzZXJSZXN1bHQgewogY2xhc3MgTW9kdWxlUGFy
c2VyIDogcHVibGljIFBhcnNlcjxNb2R1bGVQYXJzZXJSZXN1bHQ+IHsKIHB1YmxpYzoKIAotICAg
IE1vZHVsZVBhcnNlcihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90
IHNvdXJjZUxlbmd0aCkKKyAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBjb25zdCB1aW50OF90KiBz
b3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpN
b2RlPiBtb2RlKQogICAgICAgICA6IFBhcnNlcih2bSwgc291cmNlQnVmZmVyLCBzb3VyY2VMZW5n
dGgpCi0gICAgewotICAgIH0KLSAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIHNvdXJjZUJ1ZmZlcikKLSAgICAgICAgOiBNb2R1bGVQYXJzZXIodm0sIHNvdXJj
ZUJ1ZmZlci5kYXRhKCksIHNvdXJjZUJ1ZmZlci5zaXplKCkpCisgICAgICAgICwgbV9tb2RlKG1v
ZGUpCiAgICAgewogICAgIH0KIApAQCAtNjgsNiArNjYsNyBAQCBwcml2YXRlOgogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2
NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKIAogICAgIE1vZHVsZVBhcnNlclJlc3VsdCBtX3Jl
c3VsdDsKKyAgICBzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gbV9tb2RlIHsgc3RkOjpudWxs
b3B0IH07CiAgICAgYm9vbCBtX2hhc1RhYmxlIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCA1OTgwYjUxZTg3NDIyMjM3NTVjZTBjM2Rm
MmMxNmIxZGU5ZWM4ZjEyLi40ODM1YWEyOGYyY2FmN2EyMWM2YWM0YTE5M2MzNzcxZTU4MjhjYWE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGlu
Zy5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21G
YXVsdFNpZ25hbEhhbmRsZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAi
V2FzbU1vZHVsZVBhcnNlci5oIgogI2luY2x1ZGUgIldhc21WYWxpZGF0ZS5oIgpAQCAtNjEsMTQg
KzYyLDE0IEBAIFBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVf
dCBzb3VyY2VMZW5ndGgpCiB7CiB9CiAKLWJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVs
ZSgpCitib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRpb25hbDxNZW1v
cnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCiB7CiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWU7
CiAgICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCiAgICAg
ICAgIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogCiAgICAgewotICAgICAgICBN
b2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKG1fdm0sIG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCk7
CisgICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV92bSwgbV9zb3VyY2UsIG1fc291
cmNlTGVuZ3RoLCByZWNvbXBpbGVNb2RlKTsKICAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9IG1v
ZHVsZVBhcnNlci5wYXJzZSgpOwogICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7CiAgICAgICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9IHBhcnNlUmVzdWx0LmVycm9yKCk7CkBAIC0xMDksMTAgKzEx
MCwxMiBAQCBib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQogLy8gVGhlIHJlYXNv
biB0aGlzIGlzIE9LIGlzIHRoYXQgd2UgZ3VhcmFudGVlIHRoYXQgdGhlIG1haW4gdGhyZWFkIGRv
ZXNuJ3QgY29udGludWUgdW50aWwgYWxsIHRocmVhZHMKIC8vIHRoYXQgY291bGQgdG91Y2ggaXRz
IHN0YWNrIGFyZSBkb25lIGV4ZWN1dGluZy4KIFNVUFBSRVNTX0FTQU4gCi12b2lkIFBsYW46OnJ1
bigpCit2b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gcmVjb21waWxl
TW9kZSkKIHsKLSAgICBpZiAoIXBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkKKyAgICBpZiAoIXBh
cnNlQW5kVmFsaWRhdGVNb2R1bGUocmVjb21waWxlTW9kZSkpCiAgICAgICAgIHJldHVybjsKKyAg
ICBpZiAocmVjb21waWxlTW9kZSkKKyAgICAgICAgQVNTRVJUKG1fbW9kdWxlSW5mb3JtYXRpb24t
Pm1lbW9yeS5tb2RlKCkgPT0gcmVjb21waWxlTW9kZSk7CiAKICAgICBhdXRvIHRyeVJlc2VydmVD
YXBhY2l0eSA9IFt0aGlzXSAoYXV0byYgdmVjdG9yLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciog
d2hhdCkgewogICAgICAgICBpZiAoVU5MSUtFTFkoIXZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHko
c2l6ZSkpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCA2OTgwYmRi
YmJlMTdhNTE5NWM4YzVlMDM1ZWI0ZTZhYTEwZDJjZjE1Li5kMDcwMzc1MjAzMmM5YWEwY2Q4NTg0
MTdmYjE3MjZlN2ZiOWMzZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgK
QEAgLTQ5LDkgKzQ5LDkgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0q
LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigp
OwogCi0gICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7CisgICAgYm9vbCBwYXJzZUFu
ZFZhbGlkYXRlTW9kdWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiA9IHN0ZDo6bnVsbG9w
dCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1bigpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiA9IHN0ZDo6bnVsbG9w
dCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVDYWxsZWVzKEpTR2xv
YmFsT2JqZWN0Kiwgc3RkOjpmdW5jdGlvbjx2b2lkKHVuc2lnbmVkLCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSopPik7CiAKQEAgLTkyLDYgKzkyLDggQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gV1RGTW92ZShtX3dhc21FeGl0U3R1YnMpOwogICAgIH0KIAorICAg
IE1lbW9yeTo6TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bWVtb3J5Lm1vZGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJ
bmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICBWZWN0b3I8RnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5PiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKaW5kZXgg
YzI3NzEyYTEwZmZmYzhkZjNmMWViNjA2YjA4Y2ZjOWYwN2Y4ZTM2Yi4uNTE3MTI3ODVmMjkzYjhm
MTBiYTBkOTk3YzQ2YTAxZWI1OTdkNDhmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
NDMsMTEgKzQ0LDEzIEBAIHZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiAKICAgICBtX2VudHJ5cG9pbnQgPSBXVEZNb3ZlKGVudHJ5cG9pbnQpOwor
ICAgIFdhc206OnJlZ2lzdGVyQ29kZSh2bSwgbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2Rl
UmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRp
b24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKIH0KIAogdm9pZCBKU1dl
YkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxlZSo+
KGNlbGwpOworICAgIFdhc206OnVucmVnaXN0ZXJDb2RlKCpjZWxsLT52bSgpLCB0aGlzT2JqZWN0
LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCkt
PnN0YXJ0KCksIHRoaXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigp
LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwogICAgIHRoaXNPYmplY3QtPkpTV2ViQXNzZW1i
bHlDYWxsZWU6On5KU1dlYkFzc2VtYmx5Q2FsbGVlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjIxZjhhNWNjNjQ1ZjJlMjViNzc0MTE3YmRhZjk4YWY0NzBkMzRhMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBD
bGFzc0luZm8gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlD
b2RlQmxvY2siLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2spIH07CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFnPENhbGxMaW5rSW5m
bz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiB3YXNtRXhp
dFN0dWJzLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCisg
ICAgOiBCYXNlKHZtLCB2bS53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSkKKyAg
ICAsIG1fY2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5rSW5mb3MpKQorICAgICwgbV93YXNt
RXhpdFN0dWJzKFdURk1vdmUod2FzbUV4aXRTdHVicykpCisgICAgLCBtX21vZGUobW9kZSkKKyAg
ICAsIG1fY2FsbGVlQ291bnQoY2FsbGVlQ291bnQpCit7CisgICAgbV9tb2R1bGUuc2V0KHZtLCB0
aGlzLCBvd25lcik7CisgICAgbWVtc2V0KGNhbGxlZXMoKSwgMCwgbV9jYWxsZWVDb3VudCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogMik7Cit9CisKK3ZvaWQg
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3Rh
dGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygpOworfQorCitib29sIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkKK3sK
KyAgICBpZiAobW9kZSgpID09IFdhc206Ok1lbW9yeTo6U2lnbmFsaW5nKQorICAgICAgICByZXR1
cm4gbWVtb3J5LT5tZW1vcnkoKS5tb2RlKCkgPT0gbW9kZSgpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsKKyAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGhpc09iamVjdC0+bV9jYWxsZWVDb3VudCAqIDI7IGkrKykKKyAgICAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+Y2FsbGVlcygpW2ldKTsKKworICAgIHZpc2l0b3IuYWRkVW5jb25kaXRp
b25hbEZpbmFsaXplcigmdGhpc09iamVjdC0+bV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKK30K
Kwordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyOjpm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCit7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
dGhpc09iamVjdCA9IGJpdHdpc2VfY2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oCisgICAg
ICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3Nl
bWJseUNvZGVCbG9jaywgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7CisgICAgZm9yIChhdXRv
IGl0ZXIgPSB0aGlzT2JqZWN0LT5tX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0
ZXIpCisgICAgICAgICgqaXRlciktPnZpc2l0V2VhaygqdGhpc09iamVjdC0+dm0oKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5jcHAKaW5kZXggZmJjMWNlYmZiOWNiOGE1OWM5ZWFlNmU2ZGQ5OWZjNTU1ZjViMTNjYy4u
MTI4MDI1ZTVjMDRmODljOTZmYWYzNTZhZjUxNDE2OGMxMzQwZjgyNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM4LDYgKzM4LDE4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCit2b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6c2V0TWVtb3J5KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5
TWVtb3J5KiBtZW1vcnkpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIC8vIFdlIGNyZWF0ZSBzdHViIG1lbW9yaWVzIGV2ZW4gZm9yIG1vZHVsZXMgdGhh
dCBzaG91bGQgZXZlbnR1YWxseSBnZXQgYSBtZW1vcnkgc28gd2Ugd2FudCB0byBhdm9pZCByZWNv
bXBsaW5nIHRoZXJlLgorICAgIGlmIChtZW1vcnktPm1lbW9yeSgpKSB7CisgICAgICAgIGF1dG8g
Y29kZUJsb2NrID0gbV9jb2RlQmxvY2stPm1vZHVsZSgpLT5jb2RlQmxvY2sodm0sIGV4ZWMsIG1l
bW9yeSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsKTsKKyAgICAgICAgbV9j
b2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOworICAgIH0KKyAgICBtX21lbW9yeS5z
ZXQodm0sIHRoaXMsIG1lbW9yeSk7Cit9CisKIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNX
ZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9kdWxl
TmFtZXNwYWNlT2JqZWN0KQogewogICAgIC8vIEZJWE1FOiBUaGVzZSBvYmplY3RzIGNvdWxkIGJl
IHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVyZS4KQEAgLTY3LDcgKzc5
LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIG1fZ2xvYmFscyA9IE1hbGxvY1B0cjx1
aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUpOwogICAgIGhlYXAoKS0+cmVwb3J0RXh0
cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsKIAotICAgIG1fbW9kdWxlLnNldCh2
bSwgdGhpcywgbW9kdWxlKTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIG1vZHVsZS0+
Y29kZUJsb2NrKCkpOwogICAgIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0LnNldCh2bSwgdGhpcywg
bW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiZXhwb3J0cyIpLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIE5vbmUpOwog
fQpAQCAtODMsNyArOTUsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9tb2R1bGUpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2Nr
KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZU5hbWVzcGFjZU9iamVj
dCk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tZW1vcnkpOwogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAppbmRleCA5OWEyYzkwZjdl
YTM1M2UzNmI2NTVhYmU1Y2RkNWM0OTgzYzUzYTE4Li44OTIzZTE2NTBiZjMxNjVkYTk5MThlZjY5
YzVjNTk2ZDI4MWQxYjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVk
ZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVt
b3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAKQEAgLTQ3LDEwICs0OCwx
NiBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBtb2R1bGUoKQorICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0CiAg
ICAgewotICAgICAgICBBU1NFUlQobV9tb2R1bGUpOwotICAgICAgICByZXR1cm4gbV9tb2R1bGUu
Z2V0KCk7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBtX2Nv
ZGVCbG9jay0+bW9kdWxlKCk7CisgICAgfQorCisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
Y29kZUJsb2NrKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jayk7Cisg
ICAgICAgIHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsKICAgICB9CiAKICAgICBXcml0ZUJhcnJp
ZXI8SlNDZWxsPiogaW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQpAQCAtNzAsNyArNzcsOSBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KCkgeyBy
ZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KLSAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2Vi
QXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkgeyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7
IH0KKyAgICAvLyBDYWxsaW5nIHRoaXMgbWlnaHQgdHJpZ2dlciBhIHJlY29tcGlsZS4KKyAgICB2
b2lkIHNldE1lbW9yeShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNZW1vcnkqKTsKKyAg
ICBXYXNtOjpNZW1vcnk6Ok1vZGUgbWVtb3J5TW9kZSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1v
cnkoKS5tb2RlKCk7IH0KIAogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVy
biBtX3RhYmxlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRUYWJsZShWTSYgdm0sIEpTV2ViQXNzZW1i
bHlUYWJsZSogdGFibGUpIHsgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsgfQpAQCAtMTA0
LDcgKzExMyw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgV3JpdGVCYXJy
aWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOworICAgIFdyaXRlQmFycmllcjxKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1
bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFy
cmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNX
ZWJBc3NlbWJseVRhYmxlPiBtX3RhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAppbmRleCBmNDI1M2I1YmZiODg2Y2Vj
ZDlkNjQ1YjU4NjYxZTEzMzA5ZTIzZTIzLi5hZjdmMjQ2YTc1OTE0MTEwM2MyNGM5ZjNlZWI1MDk3
OTExYTcyNzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmNwcApAQCAtMzcsOSArMzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2luZm8gPSB7ICJXZWJB
c3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
V2ViQXNzZW1ibHlNZW1vcnkpIH07CiAKLUpTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1i
bHlNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpNZW1v
cnkmJiBtZW1vcnkpCitKU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpj
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBt
ZW1vcnkpCiB7Ci0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1lbW9yeSh2bSwg
c3RydWN0dXJlLCBzdGQ6OmZvcndhcmQ8V2FzbTo6TWVtb3J5PihtZW1vcnkpKTsKKyAgICBhdXRv
KiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1v
cnk+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUo
bWVtb3J5KSk7CisgICAgaW5zdGFuY2UtPm1fbWVtb3J5LT5jaGVjaygpOwogICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtNDksMTAg
KzUwLDEzIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dl
YkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206Ok1lbW9y
eSYmIG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1vcnkoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1vcnkpCiAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX21lbW9yeShXVEZNb3ZlKG1lbW9yeSkp
CiB7CisgICAgQVNTRVJUKG1fbWVtb3J5LT5yZWZDb3VudCgpID09IDEpOworICAgIG1fbWVtb3J5
QmFzZSA9IG1fbWVtb3J5LT5tZW1vcnkoKTsKKyAgICBtX21lbW9yeVNpemUgPSBtX21lbW9yeS0+
c2l6ZSgpOwogfQogCiBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtNjAsMTIgKzY0LDEwIEBA
IEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmJ1ZmZlcihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgaWYgKG1fYnVmZmVyV3JhcHBlcikKICAgICAg
ICAgcmV0dXJuIG1fYnVmZmVyV3JhcHBlci5nZXQoKTsKIAotICAgIGF1dG8gZGVzdHJ1Y3RvciA9
IFtdICh2b2lkKikgewotICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhl
cmUgdG8gZGVzdHJveSB0aGUgbWVtb3J5LgotICAgICAgICAvLyBUaGUgQXJyYXlCdWZmZXIgYmFj
a2luZyB0aGUgSlNBcnJheUJ1ZmZlciBpcyBvbmx5IG93bmVkIGJ5IHVzLAotICAgICAgICAvLyBz
byB3ZSBndWFyYW50ZWUgaXRzIGxpZmVjeWNsZS4KLSAgICB9OwotICAgIG1fYnVmZmVyID0gQXJy
YXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhtZW1vcnkoKS0+bWVtb3J5KCksIG1lbW9yeSgpLT5z
aXplKCksIFdURk1vdmUoZGVzdHJ1Y3RvcikpOworICAgIC8vIFdlIGNhbid0IHVzZSBhIHJlZiBo
ZXJlIHNpbmNlIGl0IGRvZXNuJ3QgaGF2ZSBhIGNvcHkgY29uc3RydWN0b3IuLi4KKyAgICBSZWZQ
dHI8V2FzbTo6TWVtb3J5PiBtZW1vcnlSZWZQdHIgPSAmbV9tZW1vcnkuZ2V0KCk7CisgICAgYXV0
byBkZXN0cnVjdG9yID0gW21lbW9yeVJlZlB0cl0gKHZvaWQqKSB7IH07CisgICAgbV9idWZmZXIg
PSBBcnJheUJ1ZmZlcjo6Y3JlYXRlRnJvbUJ5dGVzKG1lbW9yeSgpLm1lbW9yeSgpLCBtZW1vcnko
KS5zaXplKCksIFdURk1vdmUoZGVzdHJ1Y3RvcikpOwogICAgIG1fYnVmZmVyV3JhcHBlci5zZXQo
dm0sIHRoaXMsIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5tX2FycmF5
QnVmZmVyU3RydWN0dXJlLmdldCgpLCBtX2J1ZmZlci5nZXQoKSkpOwogICAgIFJFTEVBU0VfQVNT
RVJUKG1fYnVmZmVyV3JhcHBlcik7CiAgICAgcmV0dXJuIG1fYnVmZmVyV3JhcHBlci5nZXQoKTsK
QEAgLTc2LDcgKzc4LDcgQEAgV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdy
b3coRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbAogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKLSAgICBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0gbWVtb3J5KCktPnNpemVJblBh
Z2VzKCk7CisgICAgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCA9IG1lbW9yeSgpLnNpemVJ
blBhZ2VzKCk7CiAKICAgICBpZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxpZChkZWx0YSkpIHsK
ICAgICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKQEAgLTkyLDEyICs5
NCwxNiBAQCBXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhFeGVjU3Rh
dGUqIGV4ZWMsIHVpbnQzMl90IGRlbHRhLCBib29sCiAgICAgfQogCiAgICAgaWYgKGRlbHRhKSB7
Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IG1lbW9yeSgpLT5ncm93KG5ld1NpemUpOworICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBtZW1vcnkoKS5ncm93KG5ld1NpemUpOwogICAgICAgICBpZiAoIXN1
Y2Nlc3MpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX21lbW9yeUJhc2UgPT0gbWVtb3J5KCkubWVt
b3J5KCkpOworICAgICAgICAgICAgQVNTRVJUKG1fbWVtb3J5U2l6ZSA9PSBtZW1vcnkoKS5zaXpl
KCkpOwogICAgICAgICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKICAg
ICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpKTsKICAgICAgICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQo
KTsKICAgICAgICAgfQorICAgICAgICBtX21lbW9yeUJhc2UgPSBtZW1vcnkoKS5tZW1vcnkoKTsK
KyAgICAgICAgbV9tZW1vcnlTaXplID0gbWVtb3J5KCkuc2l6ZSgpOwogICAgIH0KIAogICAgIC8v
IFdlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSBvbGQgYXJyYXkgYnVmZmVyIGJlY2F1c2UgaXQgbWln
aHQgbm93IGJlIHBvaW50aW5nCkBAIC0xMTAsNiArMTE2LDcgQEAgV2FzbTo6UGFnZUNvdW50IEpT
V2ViQXNzZW1ibHlNZW1vcnk6Omdyb3coRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwg
Ym9vbAogICAgICAgICBtX2J1ZmZlcldyYXBwZXIuY2xlYXIoKTsKICAgICB9CiAKKyAgICBtZW1v
cnkoKS5jaGVjaygpOwogICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiB9CiAKQEAgLTEyMywxMyAr
MTMwLDYgQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
IHsKICAgICBhdXRvIG1lbW9yeSA9IHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihj
ZWxsKTsKICAgICBBU1NFUlQobWVtb3J5LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAgIFZN
JiB2bSA9ICptZW1vcnktPnZtKCk7Ci0KLSAgICBpZiAobWVtb3J5LT5tX2J1ZmZlcikgewotICAg
ICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGR1bW15Q29udGVudHM7Ci0gICAgICAgIG1lbW9yeS0+
bV9idWZmZXItPnRyYW5zZmVyVG8odm0sIGR1bW15Q29udGVudHMpOwotICAgICAgICBtZW1vcnkt
Pm1fYnVmZmVyID0gbnVsbHB0cjsKLSAgICB9CiAKICAgICBtZW1vcnktPkpTV2ViQXNzZW1ibHlN
ZW1vcnk6On5KU1dlYkFzc2VtYmx5TWVtb3J5KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKaW5kZXggZmZmMTQxNTcwMmNm
ZWFkNmNlOTIyMTQ5MDJkZGI4YzZiNDRkMjY4MC4uMGViMTg4ZDYwZDVlMzIwMWFmNjVjOGNmOWQy
Zjg4NTY5OWM4YTdjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNZW1vcnkuaApAQCAtNDEsMjUgKzQxLDI3IEBAIGNsYXNzIEpTV2ViQXNz
ZW1ibHlNZW1vcnkgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAg
IHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFz
c2VtYmx5TWVtb3J5KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBXYXNtOjpNZW1vcnkmJik7Cisg
ICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFJl
ZjxXYXNtOjpNZW1vcnk+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAK
LSAgICBXYXNtOjpNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuICZtX21lbW9yeTsgfQorICAgIFdh
c206Ok1lbW9yeSYgbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBKU0Fy
cmF5QnVmZmVyKiBidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopOwogICAgIFdhc206OlBh
Z2VDb3VudCBncm93KEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhLCBib29sIHNob3VsZFRocm93
RXhjZXB0aW9uc09uRmFpbHVyZSk7CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVt
b3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1fbWVt
b3J5KSArIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKTsgfQotICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1i
bHlNZW1vcnksIG1fbWVtb3J5KSArIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1fbWVtb3J5QmFzZSk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2Vt
Ymx5TWVtb3J5LCBtX21lbW9yeVNpemUpOyB9CiAKLXByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKiwgV2FzbTo6TWVtb3J5JiYpOworcHJpdmF0ZToKKyAg
ICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1lbW9yeT4m
Jik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCi0gICAgV2FzbTo6TWVtb3J5IG1fbWVtb3J5OworICAgIHZvaWQqIG1fbWVt
b3J5QmFzZTsKKyAgICBzaXplX3QgbV9tZW1vcnlTaXplOworICAgIFJlZjxXYXNtOjpNZW1vcnk+
IG1fbWVtb3J5OwogICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBw
ZXI7CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4
IDA4ZmE1ODQ2MjhmMDdkMmQ4YzhjM2IyYjc4ZDExNTgwYzRmMjgxNzYuLjU2ZjIwYjQzNTA2OWYz
ZmI1ZjBiNjkxMjJjMzcyOTgxYTBjNWY1MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC0zMCwxOCArMzAsNDYg
QEAKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2Fs
bGVlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5
LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNp
bmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzX2lu
Zm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07CiAKLUpTV2ViQXNzZW1ibHlN
b2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiYgbW9kdWxl
SW5mb3JtYXRpb24sIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdh
c206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVicywgU3ltYm9sVGFibGUqIGV4cG9ydFN5
bWJvbFRhYmxlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBXYXNtOjpQbGFuJiBwbGFuLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeTo6TW9kZT4g
bW9kZSkKIHsKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGNhbGxlZUNvdW50
KSkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgc3RkOjpmb3J3YXJkPHN0ZDo6
dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4+KG1vZHVsZUluZm9ybWF0aW9uKSwg
c3RkOjpmb3J3YXJkPEJhZzxDYWxsTGlua0luZm8+PihjYWxsTGlua0luZm9zKSwgc3RkOjpmb3J3
YXJkPFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPj4od2FzbUV4aXRTdHVicyksIGNhbGxlZUNv
dW50KTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGV4cG9ydFN5bWJvbFRhYmxl
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgLy8gT24g
ZmFpbHVyZSwgYSBuZXcgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIGlzIHRocm93bi4KKyAgICBw
bGFuLnJ1bihtb2RlKTsKKyAgICBpZiAocGxhbi5mYWlsZWQoKSkgeworICAgICAgICB0aHJvd0V4
Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihleGVj
LCB2bSwgcGxhbi5lcnJvck1lc3NhZ2UoKSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisgICAgaWYgKG1vZGUpCisgICAgICAgIEFTU0VSVCgqbW9kZSA9PSBwbGFuLm1vZGUoKSk7
CisKKyAgICB1bnNpZ25lZCBjYWxsZWVDb3VudCA9IHBsYW4uaW50ZXJuYWxGdW5jdGlvbkNvdW50
KCk7CisgICAgYXV0byogY29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRl
KHZtLCB0aGlzLCBwbGFuLnRha2VDYWxsTGlua0luZm9zKCksIHBsYW4udGFrZVdhc21FeGl0U3R1
YnMoKSwgcGxhbi5tb2RlKCksIGNhbGxlZUNvdW50KTsKKworICAgIHBsYW4uaW5pdGlhbGl6ZUNh
bGxlZXMoZXhlYy0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksCisgICAgICAgIFsmXSAodW5z
aWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxl
ZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKKyAgICAgICAg
ICAgIGNvZGVCbG9jay0+c2V0SlNFbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNF
bnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0V2FzbUVudHJ5cG9p
bnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgICAg
IH0pOworICAgIHJldHVybiBjb2RlQmxvY2s7Cit9CisKK0pTV2ViQXNzZW1ibHlNb2R1bGUqIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKQoreworICAg
IGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJs
eU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSk7CisK
KyAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWMsIHNvdXJjZSwgYnl0ZVNpemUp
OwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIApAQCAtNTAsMjEgKzc4LDYxIEBAIFN0cnVjdHVy
ZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbj4mJiBtb2R1bGVJbmZvcm1hdGlvbiwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxs
TGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiB3YXNtRXhpdFN0dWJzLCB1
bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlN
b2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKLSAgICAsIG1fbW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlv
bikpCi0gICAgLCBtX2NhbGxMaW5rSW5mb3MoV1RGTW92ZShjYWxsTGlua0luZm9zKSkKLSAgICAs
IG1fd2FzbUV4aXRTdHVicyhXVEZNb3ZlKHdhc21FeGl0U3R1YnMpKQotICAgICwgbV9jYWxsZWVD
b3VudChjYWxsZWVDb3VudCkKIHsKLSAgICBtZW1zZXQoY2FsbGVlcygpLCAwLCBtX2NhbGxlZUNv
dW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikgKiAyKTsKIH0K
IAotdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFN5bWJv
bFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJB
c3NlbWJseU1lbW9yeSogbWVtb3J5KQoreworICAgIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlID0g
bWVtb3J5LT5tZW1vcnkoKS5tb2RlKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
V2FzbTo6TWVtb3J5OjpOdW1iZXJPZk1vZGVzOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY29kZUJs
b2Nrc1tpXSAmJiBtX2NvZGVCbG9ja3NbaV0tPmlzU2FmZVRvUnVuKG1lbW9yeSkpCisgICAgICAg
ICAgICByZXR1cm4gbV9jb2RlQmxvY2tzW2ldLmdldCgpOworICAgIH0KKworICAgIEFTU0VSVCgh
bV9jb2RlQmxvY2tzW21vZGVdKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNvZGUgYmxvY2sgZm9yIHRoaXMgbW9kZSwg
d2UgbmVlZCB0byByZWNvbXBpbGUuLi4KKyAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4obV9zb3VyY2VCdWZmZXItPmRhdGEoKSksIG1fc291cmNlQnVmZmVyLT5i
eXRlTGVuZ3RoKCkpOworCisgICAgYXV0byogY29kZUJsb2NrID0gYnVpbGRDb2RlQmxvY2sodm0s
IGV4ZWMsIHBsYW4sIG1vZGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOworCisgICAgQVNTRVJUKHBsYW4uZXhwb3J0cygpLnNpemUoKSA9PSBtX2V4cG9ydFN5bWJv
bFRhYmxlLT5zaXplKCkpOworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGZv
ciAoYXV0byYgZXhwIDogcGxhbi5leHBvcnRzKCkpCisgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGV4cCwgbV9leHBvcnRTeW1ib2xUYWJsZS0+Y29udGFpbnMoZXhwLmZpZWxkLmltcGwoKSkpOwor
ICAgIH0KKworICAgIEFTU0VSVChtb2RlID09IGNvZGVCbG9jay0+bW9kZSgpKTsKKyAgICBtX2Nv
ZGVCbG9ja3NbbW9kZV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOworICAgIHJldHVybiBjb2Rl
QmxvY2s7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKQog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHNvdXJjZSwgYnl0ZVNpemUpOworCisgICAgYXV0byog
Y29kZUJsb2NrID0gYnVpbGRDb2RlQmxvY2sodm0sIGV4ZWMsIHBsYW4pOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsKTsKKworICAgIC8vIE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUg
dmFsaWRhdGVkIEFzdC5tb2R1bGUuCisgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxl
ID0gU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSk7CisgICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4
cG9ydHMoKSkgeworICAgICAgICBhdXRvIG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxlLT50YWtl
TmV4dFNjb3BlT2Zmc2V0KE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgICAgIGV4cG9ydFN5bWJv
bFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBTeW1ib2xU
YWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7CisgICAgfQorCisgICAgbV9zb3VyY2VCdWZm
ZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHNvdXJjZSwgYnl0ZVNpemUpOworICAgIG1fbW9kdWxl
SW5mb3JtYXRpb24gPSBwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIG1fZXhwb3J0
U3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBleHBvcnRTeW1ib2xUYWJsZSk7CisgICAgbV9jb2Rl
QmxvY2tzW2NvZGVCbG9jay0+bW9kZSgpXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAK
IHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC03OSwx
OCArMTQ3LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
ZXhwb3J0U3ltYm9sVGFibGUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2Jq
ZWN0LT5tX2NhbGxlZUNvdW50ICogMjsgaSsrKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5jYWxsZWVzKClbaV0pOwotCi0gICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmlu
YWxpemVyKCZ0aGlzT2JqZWN0LT5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwotfQotCi12b2lk
IEpTV2ViQXNzZW1ibHlNb2R1bGU6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KCkKLXsKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiB0aGlzT2JqZWN0ID0g
Yml0d2lzZV9jYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPigKLSAgICAgICAgYml0d2lzZV9jYXN0
PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5TW9kdWxlLCBtX3Vu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIpKTsKLSAgICBmb3IgKGF1dG8gaXRlciA9IHRoaXNPYmplY3Qt
Pm1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKLSAgICAgICAgKCppdGVy
KS0+dmlzaXRXZWFrKCp0aGlzT2JqZWN0LT52bSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgV2FzbTo6TWVtb3J5OjpOdW1iZXJPZk1vZGVzOyArK2kpCisgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2Nrc1tpXSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5oCmluZGV4IDdlMDUxZjU3MjI0MjQ2OGE2NjQxOTAzMWE4ODk1YzYxMzZlMzA4NzYu
Ljk4ZmRlYjQ0ZjZkMjM1OWZkNmM3Nzg5OTIyMjU1NjJjZGVkOWZhYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyAr
MjksNyBAQAogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJK
U09iamVjdC5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXpl
ci5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CkBAIC0z
Nyw4NSArMzcsNDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2Ns
YXNzIFBsYW47Cit9CisKIGNsYXNzIFN5bWJvbFRhYmxlOworY2xhc3MgSlNXZWJBc3NlbWJseU1l
bW9yeTsKIAogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJs
ZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNl
OwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVy
ZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJiwgQmFnPENhbGxM
aW5rSW5mbz4mJiwgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIFN5bWJvbFRhYmxlKiwg
dW5zaWduZWQpOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIGNvbnN0IFdhc206Ok1v
ZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuICptX21v
ZHVsZUluZm9ybWF0aW9uLmdldCgpOyB9CisgICAgV2FzbTo6TWVtb3J5JiB0YWtlUmVzZXJ2ZWRN
ZW1vcnkoKSB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkudGFrZVJlc2VydmVk
TWVtb3J5KCk7IH0KICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdCB7
IHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOyB9CiAgICAgV2FzbTo6U2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX21vZHVsZUluZm9y
bWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRl
eFNwYWNlKTsKICAgICB9Ci0gICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IH0KLQotICAgIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIGpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQg
ZnVuY3Rpb25JbmRleFNwYWNlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rp
b25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7Ci0gICAgICAgIHVuc2lnbmVk
IGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwot
ICAgICAgICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQotICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7
Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVu
Y3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8
IG1fY2FsbGVlQ291bnQpOwotICAgICAgICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4ICsg
bV9jYWxsZWVDb3VudF0uZ2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRKU0VudHJ5cG9pbnRD
YWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSog
Y2FsbGVlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2Nh
bGxlZUNvdW50KTsKLSAgICAgICAgY2FsbGVlcygpW2NhbGxlZUluZGV4XS5zZXQodm0sIHRoaXMs
IGNhbGxlZSk7Ci0gICAgfQogCi0gICAgdm9pZCBzZXRXYXNtRW50cnlwb2ludENhbGxlZShWTSYg
dm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUpCi0g
ICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQp
OwotICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5zZXQodm0s
IHRoaXMsIGNhbGxlZSk7Ci0gICAgfQorICAgIC8vIFJldHVybnMgdGhlIGNvZGUgYmxvY2sgdGhh
dCB0aGlzIG1vZHVsZSB3YXMgb3JpZ2luYWxseSBjb21waWxlZCBleHBlY3RpbmcgdG8gdXNlLiBU
aGlzIHdvbid0IG5lZWQgdG8gcmVjb21waWxlLgorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1ttX21vZHVsZUluZm9ybWF0aW9uLT5t
ZW1vcnkubW9kZSgpXS5nZXQoKTsgfQorICAgIC8vIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNv
ZGUgYmxvY2sgZm9yIHRoZSBnaXZlbiBtZW1vcnksIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSByZWNv
bXBpbGUuCisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFZNJiwgRXhlY1N0
YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9yeSopOwogCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSArIG9mZnNldE9mQ2FsbGVlcygpKTsKLSAgICB9Citwcml2YXRlOgorICAgIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGJ1aWxkQ29kZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiwgV2FzbTo6
UGxhbiYsIHN0ZDo6b3B0aW9uYWw8V2FzbTo6TWVtb3J5OjpNb2RlPiBtb2RlID0gc3RkOjpudWxs
b3B0KTsKIAotcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1
cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiYsIEJhZzxDYWxs
TGlua0luZm8+JiYsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmLCB1bnNpZ25lZCBjYWxs
ZWVDb3VudCk7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFN5bWJvbFRhYmxlKik7Cisg
ICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBFeGVjU3RhdGUqLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6
ZSk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLXByaXZhdGU6Ci0gICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZkNhbGxlZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxs
ZWU+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlNb2R1bGUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
c2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2lnbmVkIG51bUNhbGxlZXMpCi0gICAgewotICAgICAg
ICByZXR1cm4gb2Zmc2V0T2ZDYWxsZWVzKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlDYWxsZWU+KSAqIG51bUNhbGxlZXMgKiAyOwotICAgIH0KLQotICAgIGNsYXNzIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsg
Ci0gICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKLSAgICB9
OwotCi0gICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7
CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX3NvdXJjZUJ1ZmZlcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247Ci0gICAg
QmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgIFdyaXRlQmFycmllcjxTeW1i
b2xUYWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKLSAgICBWZWN0b3I8V2FzbTo6V2FzbUV4aXRT
dHVicz4gbV93YXNtRXhpdFN0dWJzOwotICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CisgICAg
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpN
ZW1vcnk6Ok51bWJlck9mTW9kZXNdOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
CmluZGV4IDVhZTgxN2Y0ZmFiNDkyOTRhNTYzNjNiMDVjMjAxMTkxMWIzYmNhM2UuLjA0ZWQ2NjYw
ZWUxZWQzNzMxZGRlY2VkZWM5OTQwZDMxMDMwZjkxZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC01Niw2ICs1
Niw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJs
eUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKICAgICBjb25zdCBX
YXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7CiAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbWVt
b3J5IHdlIHRoaW5rIHdlIGFyZSBnb2luZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBvbmUgd2Ug
ZXhwZWN0LgorICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmNvZGVCbG9jaygp
LT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPm1lbW9yeSgpKSk7CiAgICAg
ewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgZGlzYWxsb3dlZCBJNjQgdXNlLgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCA3NjNkYzQ5NGNlNWE0NzgyZDZlNjg0
N2Y4MjI1NjYxYjM1YmRhN2FiLi4wOGVhOWUwMDY1MDUzNTlhZDlhODUzNmM1OWNiMTYyZmUzOGZl
MmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTg0LDExICs4NCw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGluc3RhbmNlU3RydWN0
dXJlLCBqc01vZHVsZSwgbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1lc3BhY2UoZXhlYykpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgewotICAgICAgICAvLyBBbHdheXMgc3RhcnQgd2l0aCBhIGR1bW15IE1lbW9yeSwgc28gdGhh
dCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5
IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgotICAgICAgICBXYXNtOjpNZW1v
cnkgbWVtb3J5OwotICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBKU1dlYkFzc2VtYmx5
TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1i
bHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7Ci0gICAgfQorCiAKICAgICAv
LyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3Rz
IG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVj
dHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4KICAgICAvLyBM
ZXQgaW1wb3J0cyBiZSBhbiBpbml0aWFsbHktZW1wdHkgbGlzdCBvZiBleHRlcm5hbCB2YWx1ZXMu
CkBAIC0xNzgsMTIgKzE3NCwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBleAogICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnki
KSkpKTsKIAogICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkSW5pdGlhbCA9IG1v
ZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCk7Ci0gICAgICAgICAgICBXYXNtOjpQYWdl
Q291bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCktPmluaXRpYWwoKTsKKyAgICAg
ICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxJbml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS5p
bml0aWFsKCk7CiAgICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlh
bCkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBp
cyB0b28gc21hbGwiKSkpKTsKIAogICAgICAgICAgICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBl
Y3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKSB7Ci0gICAg
ICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9y
eSgpLT5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1h
eGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLm1heGltdW0oKTsKICAgICAgICAgICAgICAgICBpZiAo
IWFjdHVhbE1heGltdW0pIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJh
bCgiTWVtb3J5IGltcG9ydCBkaWQgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUg
cmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKSk7CkBAIC0xOTQsOSArMTkwLDExIEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZShFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBB
U0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUg
bW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCiAg
ICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5XV0gdG8gaW1wb3J0cy4KLSAgICAg
ICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIG1lbW9yeSk7CisgICAgICAgICAgICBpbnN0
YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBtZW1vcnkpOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6
IHsKQEAgLTIzNSwxMiArMjMzLDE3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAg
IGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgewogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9y
dCgpKTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1v
cnkgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIGJvb2wgZmFpbGVkOwotICAgICAgICAgICAgV2Fz
bTo6TWVtb3J5IG1lbW9yeShtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1
bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpLCBmYWlsZWQpOwotICAgICAgICAgICAgaWYg
KGZhaWxlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsK
LSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sCi0gICAgICAgICAgICAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CisgICAgICAg
ICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnk7CisgICAgICAgICAgICBpZiAobW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5Lmhhc1Jlc2VydmVkTWVtb3J5KCkpCisgICAgICAgICAgICAgICAg
bWVtb3J5ID0gYWRvcHRSZWYoanNNb2R1bGUtPnRha2VSZXNlcnZlZE1lbW9yeSgpKTsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3Jl
YXRlKHZtLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1lbW9yeSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLAorICAgICAg
ICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqbWVt
b3J5LmxlYWtSZWYoKSkpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI2Myw2ICsy
NjYsMTIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNX
ZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgfQogICAgIH0KIAorICAg
IGlmICghaW5zdGFuY2UtPm1lbW9yeSgpKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZl
IGEgZHVtbXkgbWVtb3J5LCBzbyB0aGF0IHdhc20gLT4gd2FzbSB0aHVua3MgYXZvaWQgY2hlY2tp
bmcgZm9yIGEgbnVsbHB0ciBNZW1vcnkgd2hlbiB0cnlpbmcgdG8gc2V0IHBpbm5lZCByZWdpc3Rl
cnMuCisgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIGV4ZWMsIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJs
eU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqKG5ldyBXYXNtOjpNZW1vcnkoKSkpKSk7CisK
KyAgICB9CisKICAgICAvLyBHbG9iYWxzCiAgICAgewogICAgICAgICBBU1NFUlQobnVtSW1wb3J0
R2xvYmFscyA9PSBtb2R1bGVJbmZvcm1hdGlvbi5maXJzdEludGVybmFsR2xvYmFsKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29u
c3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
ZW1vcnlDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNmM4ODdhZjU5N2E4NjUzMjljZmI0M2Y1ZWRiNDdi
NDFlNjYwOWVjOC4uNTExMjllMzEwMTJmMGMxYjU0MmFjOTFlODk5NGU0MjlkNTc1ZThkNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlD
b25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKQEAgLTk2LDEyICs5NiwxMSBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4
ZWNTdGF0ZSogZXhlYwogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCBmYWlsZWQ7Ci0gICAg
V2FzbTo6TWVtb3J5IG1lbW9yeShpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBm
YWlsZWQpOwotICAgIGlmIChmYWlsZWQpCisgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5
ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdl
Q291bnQpOworICAgIGlmICghbWVtb3J5KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Io
ZXhlYykpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1lbW9y
eTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVt
b3J5U3RydWN0dXJlKCksIFdURk1vdmUobWVtb3J5KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIGFkb3B0UmVmKCptZW1vcnku
bGVha1JlZigpKSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsSlNXZWJBc3NlbWJseU1lbW9yeShFeGVjU3RhdGUqIHN0YXRlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmNwcAppbmRleCA4MTI5NTkyM2M3YWRjYTJkZTYwYmVjYzE5M2ZhY2U5ODJmNDVmZDIy
Li5hOTQwZThkZmYwY2JlYTVmZGYwODI5OTBhNTdhZDhkOGZlY2MxNzBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yLmNwcApAQCAtODAsMzEgKzgwLDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSwgU3RydWN0dXJl
KgogICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKHN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCksIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgYmFzZSArIGJ5
dGVPZmZzZXQsIGJ5dGVTaXplKTsKLSAgICAvLyBPbiBmYWlsdXJlLCBhIG5ldyBXZWJBc3NlbWJs
eS5Db21waWxlRXJyb3IgaXMgdGhyb3duLgotICAgIHBsYW4ucnVuKCk7Ci0gICAgaWYgKHBsYW4u
ZmFpbGVkKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZUpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3Ioc3RhdGUsIHZtLCBwbGFuLmVycm9yTWVzc2Fn
ZSgpKSk7Ci0KLSAgICAvLyBPbiBzdWNjZXNzLCBhIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUgb2Jq
ZWN0IGlzIHJldHVybmVkIHdpdGggW1tNb2R1bGVdXSBzZXQgdG8gdGhlIHZhbGlkYXRlZCBBc3Qu
bW9kdWxlLgotCi0gICAgLy8gVGhlIGV4cG9ydCBzeW1ib2wgdGFibGUgaXMgdGhlIHNhbWUgZm9y
IGFsbCBJbnN0YW5jZXMgb2YgYSBNb2R1bGUuCi0gICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJv
bFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSk7Ci0gICAgZm9yIChhdXRvJiBleHAgOiBw
bGFuLmV4cG9ydHMoKSkgewotICAgICAgICBhdXRvIG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxl
LT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgICAgIGV4cG9y
dFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBT
eW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7Ci0gICAgfQotCi0gICAgLy8gT25s
eSB3YXNtLWludGVybmFsIGZ1bmN0aW9ucyBoYXZlIGEgY2FsbGVlLCBzdHVicyB0byBKUyBkbyBu
b3QuCi0gICAgdW5zaWduZWQgY2FsbGVlQ291bnQgPSBwbGFuLmludGVybmFsRnVuY3Rpb25Db3Vu
dCgpOwotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIHJlc3VsdCA9IEpTV2ViQXNzZW1ibHlNb2R1
bGU6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpLCBw
bGFuLnRha2VDYWxsTGlua0luZm9zKCksIHBsYW4udGFrZVdhc21FeGl0U3R1YnMoKSwgZXhwb3J0
U3ltYm9sVGFibGUsIGNhbGxlZUNvdW50KTsKLSAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKHN0
YXRlLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgCi0gICAgICAgIFsmXSAodW5zaWduZWQg
Y2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNX
ZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0SlNFbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50
Q2FsbGVlKTsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0s
IGNhbGxlZUluZGV4LCB3YXNtRW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgIH0pOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZt
LCBzdGF0ZSwgc3RydWN0dXJlLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwogfQogCiBX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQ
cm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggZjE3ZjI5ZGY5
ODUwYzNjOGY0NjRhMmZlMTYwNmY3NGRhY2UwMDIzYS4uNjIzMmMyNDFjZTQyZGNmNDM3NTgwYTc3
NGE3MTliODcxMDRjYjE2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtOTIsMTAgKzkyLDExIEBA
IHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0ZSwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gc3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKIAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVs
ZSA9IGluc3RhbmNlLT5tb2R1bGUoKTsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBpbnN0YW5jZS0+Y29kZUJsb2NrKCk7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5m
b3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
OwogCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gbW9kdWxlLT5leHBvcnRT
eW1ib2xUYWJsZSgpOwotICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQgPSBtb2R1bGUt
PmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKKyAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50
ID0gY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CiAKICAgICAvLyBGSVhNRSB3aXJl
IHVwIHRoZSBpbXBvcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1MTE4CiAKQEAgLTExNiw4ICsxMTcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpsaW5rKEV4ZWNTdGF0ZSogc3RhdGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdAogICAg
ICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3Rp
YyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCiAgICAgICAgICAgICAvLyAgICAgYi4gQXBwZW5kIGZ1
bmMgdG8gZnVuY3MuCiAgICAgICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCi0gICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpz
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7Ci0g
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IG1v
ZHVsZS0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5k
SW5kZXgpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2Fs
bGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGV4cC5raW5kSW5kZXgpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgIFdhc206OlNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlv
bkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWdu
YXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBz
aWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlv
biA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwganNFbnRy
eXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwpAQCAt
MTc4LDEyICsxNzksMTIgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVj
U3RhdGUqIHN0YXRlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3QKICAgICAgICAgLy8gVGhl
IHN0YXJ0IGZ1bmN0aW9uIG11c3Qgbm90IHRha2UgYW55IGFyZ3VtZW50cyBvciByZXR1cm4gYW55
dGhpbmcuIFRoaXMgaXMgZW5mb3JjZWQgYnkgdGhlIHBhcnNlci4KICAgICAgICAgQVNTRVJUKCFz
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgICAgIEFTU0VSVChzaWduYXR1cmUtPnJl
dHVyblR5cGUoKSA9PSBXYXNtOjpWb2lkKTsKLSAgICAgICAgaWYgKHN0YXJ0RnVuY3Rpb25JbmRl
eFNwYWNlIDwgbW9kdWxlLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKKyAgICAgICAgaWYgKHN0
YXJ0RnVuY3Rpb25JbmRleFNwYWNlIDwgY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkp
IHsKICAgICAgICAgICAgIEpTQ2VsbCogc3RhcnRGdW5jdGlvbiA9IGluc3RhbmNlLT5pbXBvcnRG
dW5jdGlvbihzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSktPmdldCgpOwogICAgICAgICAgICAgbV9z
dGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgc3RhcnRGdW5jdGlvbik7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUg
PSBtb2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRG
dW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2Fz
bUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlw
b2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2Up
OworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUg
PSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShz
dGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgaW5zdGFuY2UsIGpzRW50cnlw
b2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKICAgICAg
ICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAg
fQpAQCAtMjA3LDYgKzIwOCw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2
YWx1YXRlKEV4ZWNTdGF0ZSogc3RhdGUpCiAKICAgICB7CiAgICAgICAgIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIG1vZHVsZSA9IG1faW5zdGFuY2UtPm1vZHVsZSgpOworICAgICAgICBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2luc3RhbmNlLT5jb2RlQmxvY2soKTsKICAgICAg
ICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9k
dWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwogICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRh
YmxlID0gbV9pbnN0YW5jZS0+dGFibGUoKTsKICAgICAgICAgZm9yIChjb25zdCBXYXNtOjpFbGVt
ZW50JiBlbGVtZW50IDogbW9kdWxlSW5mb3JtYXRpb24uZWxlbWVudHMpIHsKQEAgLTIyOSwxMyAr
MjMxLDEzIEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSogc3RhdGUpCiAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUx
MAogICAgICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0
aW9uSW5kaWNlc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8IG1vZHVs
ZS0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9u
SW5kZXggPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
dGhyb3dWTVJhbmdlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMg
c2V0dGluZyB0aGUgdGFibGUgdmFsdWUgd2l0aCBhbiBpbXBvcnQuIFRoaXMgaXMgbm90IHlldCBp
bXBsZW1lbnRlZC4gRklYTUUuIikpKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpz
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7Ci0g
ICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUg
PSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5
cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNh
bGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJl
SW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAg
ICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogU2F5IHdlIGV4cG9ydCBsb2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jaXRvbiBpbmRl
eCAwLgpAQCAtMjU1LDggKzI1Nyw4IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSogc3RhdGUpCiAgICAgICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpT
ZWdtZW50OjpQdHI+JiBkYXRhID0gbV9pbnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0
aW9uKCkuZGF0YTsKICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSoganNNZW1vcnkgPSBtX2lu
c3RhbmNlLT5tZW1vcnkoKTsKICAgICAgICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgdWludDhfdCogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oanNNZW1v
cnktPm1lbW9yeSgpLT5tZW1vcnkoKSk7Ci0gICAgICAgICAgICB1aW50NjRfdCBzaXplSW5CeXRl
cyA9IGpzTWVtb3J5LT5tZW1vcnkoKS0+c2l6ZSgpOworICAgICAgICAgICAgdWludDhfdCogbWVt
b3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oanNNZW1vcnktPm1lbW9yeSgpLm1lbW9y
eSgpKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHNpemVJbkJ5dGVzID0ganNNZW1vcnktPm1lbW9y
eSgpLnNpemUoKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgc2VnbWVudCA6IGRhdGEpIHsKICAg
ICAgICAgICAgICAgICBpZiAoc2VnbWVudC0+c2l6ZUluQnl0ZXMpIHsKICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3Qgb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRGF0YUxv
Zy5oIGIvU291cmNlL1dURi93dGYvRGF0YUxvZy5oCmluZGV4IDEzZjkxM2JkNWJhZTYwMjkxZGQ1
MzhmN2ZhNTgzODhjODhlZmJjOTAuLjBiMDg0ODhiMjBlNTAzMWMwMDY2OTlhZTYwY2RlZTI0YTBj
OTdiZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9EYXRhTG9nLmgKQEAgLTQ4LDEzICs0OCwyOSBAQCB2b2lkIGRhdGFMb2coY29uc3Qg
VHlwZXMmLi4uIHZhbHVlcykKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPgogdm9pZCBkYXRh
TG9nTG4oY29uc3QgVHlwZXMmLi4uIHZhbHVlcykKIHsKLSAgICBkYXRhRmlsZSgpLnByaW50KHZh
bHVlcy4uLiwgIlxuIik7CisgICAgZGF0YUxvZyh2YWx1ZXMuLi4sICJcbiIpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KK3ZvaWQgZGF0YUxvZ0lmKGJvb2wgc2hvdWxkTG9nLCBj
b25zdCBUeXBlcyYuLi4gdmFsdWVzKQoreworICAgIGlmIChzaG91bGRMb2cpCisgICAgICAgIGRh
dGFMb2codmFsdWVzLi4uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+Cit2b2lk
IGRhdGFMb2dMbklmKGJvb2wgc2hvdWxkTG9nLCBjb25zdCBUeXBlcyYuLi4gdmFsdWVzKQorewor
ICAgIGlmIChzaG91bGRMb2cpCisgICAgICAgIGRhdGFMb2dMbih2YWx1ZXMuLi4pOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpkYXRhTG9nOwogdXNpbmcgV1RGOjpkYXRh
TG9nTG47Cit1c2luZyBXVEY6OmRhdGFMb2dJZjsKK3VzaW5nIFdURjo6ZGF0YUxvZ0xuSWY7CiB1
c2luZyBXVEY6OmRhdGFMb2dGOwogdXNpbmcgV1RGOjpkYXRhTG9nRlN0cmluZzsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvUmVmLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWYuaAppbmRleCBi
M2FjNGZiYzViYTUwOWE1M2MyNDEwZTRiZTI4NDBjNGYwYjk3NTJhLi44MzA5NjRmZWJlYTY2MWFk
NzdkNzY2YzQ4ZDY0MjFkOTkyYzY1MGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWYu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWYuaApAQCAtMTM3LDYgKzEzNyw3IEBAIHB1YmxpYzoK
ICAgICBUKiBwdHIoKSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiBtX3B0cjsgfQogICAg
IFQmIGdldCgpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuICptX3B0cjsgfQogICAgIG9w
ZXJhdG9yIFQmKCkgY29uc3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4gKm1fcHRyOyB9CisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiAhKm1fcHRyOyB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBSZWY8VD4gcmVwbGFjZShSZWY8VT4mJikgV0FS
Tl9VTlVTRURfUkVUVVJOOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303214</attachid>
            <date>2017-03-02 10:01:43 -0800</date>
            <delta_ts>2017-03-02 17:23:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162693-20170302100143.patch</filename>
            <type>text/plain</type>
            <size>115420</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ODFlYWQzNTM4YmU0Yjc0YzA1ZjlmMDU4Y2UzYTRiNTcyNjgxYTU2Li4xOGZlNmRiMmNhM2IzYzYy
ZDlkYzM3NDk4N2ZkNGRiZDIwZDQyMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzIgQEAKKzIwMTctMDMtMDIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV0FTTSBzaG91bGQgc3VwcG9ydCBmYXN0ZXIgbG9hZHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFk
ZHMgc3VwcG9ydCBmb3IgV2ViQXNzZW1ibHkgdXNpbmcgYSAzMi1iaXQgYWRkcmVzcworICAgICAg
ICBzcGFjZSBmb3IgbWVtb3J5IChhbG9uZyB3aXRoIHNvbWUgZXh0cmEgc3BhY2UgZm9yIG9mZnNl
dAorICAgICAgICBvdmVyZmxvdykuIFdpdGggYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSAod2UgY2Fs
bCB0aGVtCisgICAgICAgIFNpZ25hbGluZy9mYXN0IG1lbW9yaWVzKSwgd2UgcmVzZXJ2ZSB0aGUg
dmlydHVhbCBhZGRyZXNzIHNwYWNlIGZvcgorICAgICAgICAyXjMyICsgb2Zmc2V0IGJ5dGVzIG9m
IG1lbW9yeSBhbmQgb25seSBtYXJrIHRoZSB1c2FibGUgc2VjdGlvbiBhcworICAgICAgICByZWFk
L3dyaXRlLiBJZiB3YXNtIGNvZGUgd291bGQgcmVhZC93cml0ZSBvdXQgb2YgYm91bmRzIHdlIHVz
ZSBhCisgICAgICAgIGN1c3RvbSBzaWduYWwgaGFuZGxlciB0byBjYXRjaCB0aGUgU0lHQlVTLiBU
aGUgc2lnbmFsIGhhbmRsZXIgdGhlbgorICAgICAgICBjaGVja3MgaWYgdGhlIGZhdWx0aW5nIGlu
c3RydWN0aW9uIGlzIHdhc20gY29kZSBhbmQgdGVsbHMgdGhlCisgICAgICAgIHRocmVhZCB0byBy
ZXN1bWUgZXhlY3V0aW5nIGZyb20gdGhlIHdhc20gZXhjZXB0aW9uCisgICAgICAgIGhhbmRsZXIu
IE90aGVyd2lzZSwgdGhlIHNpZ25hbCBoYW5kbGVyIGNyYXNoZXMgdGhlIHByb2Nlc3MsIGFzCisg
ICAgICAgIHVzdWFsLgorCisgICAgICAgIEFsbCBvZiB0aGUgYWxsb2NhdGlvbnMgb2YgdGhlc2Ug
bWVtb3JpZXMgYXJlIG1hbmFnZWQgYnkgdGhlCisgICAgICAgIFdhc206Ok1lbW9yeSBjbGFzcy4g
SW4gb3JkZXIgdG8gYXZvaWQgVExCIGNodXJuIGluIHRoZSBPUyB3ZSBjYWNoZQorICAgICAgICBv
bGQgU2lnbmFsaW5nIG1lbW9yaWVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB1c2UuIFNpbmNlIGdl
dHRpbmcKKyAgICAgICAgdGhlIHdyb25nIG1lbW9yeSBjYW4gY2F1c2UgcmVjb21waWxlcywgd2Ug
dHJ5IHRvIHJlc2VydmUgYSBtZW1vcnkKKyAgICAgICAgZm9yIG1vZHVsZXMgdGhhdCBkbyBub3Qg
aW1wb3J0IGEgbWVtb3J5LiBJZiBhIG1vZHVsZSBkb2VzIGltcG9ydCBhCisgICAgICAgIG1lbW9y
eSwgd2UgdHJ5IHRvIGd1ZXNzIHRoZSB0eXBlIG9mIG1lbW9yeSB3ZSBhcmUgZ29pbmcgdG8gZ2V0
CisgICAgICAgIGJhc2VkIG9uIHRoZSBsYXN0IG9uZSBhbGxvY2F0ZWQuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhbHNvIGNoYW5nZXMgaG93IHRoZSB3YXNtIEpTLWFwaSBtYW5hZ2VzIG9iamVjdHMu
IFNpbmNlCisgICAgICAgIHdlIGNhbiBjb21waWxlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBjb2Rl
LCB0aGlzIHBhdGNoIGFkZHMgYSBuZXcKKyAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBj
bGFzcyB0aGF0IGhvbGRzIGFsbCB0aGUgaW5mb3JtYXRpb24KKyAgICAgICAgc3BlY2lmaWMgdG8g
cnVubmluZyBhIG1vZHVsZSBpbiBhIHBhcnRpY3VsYXIgYm91bmRzIGNoZWNraW5nCisgICAgICAg
IG1vZGUuIEFkZGl0aW9uYWxseSwgdGhlIFdhc206Ok1lbW9yeSBvYmplY3QgaXMgbm93IGEgcmVm
ZXJlbmNlCisgICAgICAgIGNvdW50ZWQgY2xhc3MgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiB0aGUg
SlNXZWJBc3NlbWJseU1lbW9yeQorICAgICAgICBvYmplY3QgYW5kIHRoZSBBcnJheUJ1ZmZlciB0
aGF0IGFsc28gdmlld3MgaXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuY3BwOgorICAgICAgICAo
SlNDOjpKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1Yik6CisgICAgICAgICogaml0L0pJVFRodW5r
cy5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogd2FzbS9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6ZnVuY3Rpb25JbXBvcnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjptb2R1
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpqc0VudHJ5cG9pbnRD
YWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c2V0SlNFbnRyeXBvaW50Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c2V0V2FzbUVudHJ5
cG9pbnRDYWxsZWUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYWxs
ZWVzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZDYWxs
ZWVzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6YWxsb2NhdGlvblNp
emUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Z2V0TWVtb3J5QmFzZUFuZFNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0U3RvcmVPcCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZWdp
c3RlckNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp1bnJlZ2lzdGVyQ29kZSk6CisgICAgICAg
IChKU0M6Oldhc206OmZhc3RNZW1vcnlFbmFibGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5h
YmxlRmFzdE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
YWxsZWUuY3BwLgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6aW1wb3J0RnVuY3Rpb25Db3VudCk6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpoYXNNZW1vcnkpOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vV2FzbU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Om1tYXBCeXRlcyk6
CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjphdmFpbGFibGVGYXN0TWVtb3JpZXMpOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0cnlHZXRGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVsZWFzZUZhc3RNZW1v
cnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6
Oldhc206Ok1lbW9yeTo6Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpk
dW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjptYWtlU3RyaW5nKToKKyAgICAgICAg
KiB3YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvcGVyYXRv
ciBib29sKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpzaXplKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TWVtb3J5OjpjaGVjayk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6TWVt
b3J5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9y
eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbik6Cisg
ICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnRha2VSZXNlcnZlZE1lbW9yeSk6CisgICAgICAgIChK
U0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjptb2RlKToKKyAgICAgICAgKiB3YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6Ok1vZHVsZVBhcnNlcik6CisgICAgICAgICog
d2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnBhcnNlQW5kVmFs
aWRhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW4pOgorICAgICAgICAq
IHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bW9kZSk6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5Q2FsbGVlOjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Ojppc1NhZmVUb1J1bik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpVbmNv
bmRpdGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6bW9kdWxlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1lbW9yeU1vZGUpOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6
SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6
OmJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1l
bW9yeTo6bWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0
T2ZNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNp
emUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1
bGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OlVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1vZHVsZTo6dGFrZVJlc2VydmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6ZnVuY3Rpb25JbXBvcnRDb3VudCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmpzRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjp3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRKU0VudHJ5cG9p
bnRDYWxsZWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpz
ZXRXYXNtRW50cnlwb2ludENhbGxlZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpvZmZzZXRPZkNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjphbGxvY2F0aW9uU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFdlYkFzc2Vt
Ymx5RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNl
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUpOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpldmFsdWF0ZSk6CisKIDIwMTctMDItMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHN0ZDo6
dHVwbGVzIGFzIGtleXMgaW4gSGFzaE1hcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA4OGE1YTk5NTM1MjEwODg4ZjIwNmFmZDU1
NjNiNzU1MWI5ZTY3ODVhLi5iZDI5OGY3MGY3MDJkNTE0YjBhMDc5YTU1MzMwMmRlOTZkMjAyNWM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE3LTAzLTAyICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9t
aWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdBU00gc2hvdWxkIHN1cHBvcnQgZmFzdGVyIGxv
YWRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYy
NjkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IG5ldyBmb3JtcyBvZiBkYXRhTG9nIHRoYXQgdGFrZSBhIGJvb2xlYW4gd2hpY2ggZGVzY3JpYmVz
IGlmIHRoZSBsb2cgc2hvdWxkIGhhcHBlbi4gVGhpcyBtYWtlcyBjYXNlcyB3aGVyZSB3ZSBoYXZl
IGEgc3RhdGljIGNvbnN0IGJvb2wgZm9yIHByaW50aW5nIG5pY2VyIHNpbmNlIHlvdSBjYW4gZG86
CisKKyAgICAgICAgZGF0YUxvZ0lmKHZlcmJvc2UsIHRoaW5ncywgdG8sIHByaW50KTsKKworICAg
ICAgICBpbnN0ZWFkIG9mOgorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZyh0aGluZ3MsIHRvLCBwcmludCk7CisKKyAgICAgICAgQWxzbywgYWRkIGEgb3BlcmF0b3Ih
IHRvIFJlZiBoYXMgdGhlIHNhbWUgc2VtYW50aWNzIGFzIEMrKyByZWZzLgorCisgICAgICAgICog
d3RmL0RhdGFMb2cuaDoKKyAgICAgICAgKFdURjo6ZGF0YUxvZ0xuKToKKyAgICAgICAgKFdURjo6
ZGF0YUxvZ0lmKToKKyAgICAgICAgKFdURjo6ZGF0YUxvZ0xuSWYpOgorICAgICAgICAqIHd0Zi9S
ZWYuaDoKKyAgICAgICAgKFdURjo6UmVmOjpvcGVyYXRvciEpOgorCiAyMDE3LTAyLTI0ICBLZWl0
aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlIHNob3VsZCBi
ZSBhYmxlIHRvIHVzZSBzdGQ6OnR1cGxlcyBhcyBrZXlzIGluIEhhc2hNYXAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYzEyM2IwNmFmZDk1YTk5NmM3ZWI3M2M5YTdlNWNhY2IxZGVj
NGUyZS4uMzVkYzE3YTFjZTk5NjUzYTcwOTQzOThjOGZiMDgxNmJhZjZhYWQyNSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMjAsNiArMTMyMCwxMCBAQAogCQk1MzU1NTcxNjFE
OURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1l
bW9yeS5jcHAgKi87IH07CiAJCTUzNzBCNEY1MUJGMjYyMDIwMDVDNDBGQyAvKiBBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNzBCNEYzMUJGMjVFQTIwMDVDNDBGQyAvKiBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCAqLzsgfTsKIAkJ
NTM3MEI0RjYxQkYyNjIwNTAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi87IH07CisJCTUzODFCOTM3MUU2MEU5NjYwMDkwRjc5
NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmNwcCAqLzsgfTsKKwkJNTM4MUI5MzkxRTYwRTk3RDAwOTBGNzk0IC8q
IFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmggKi87IH07CisJCTUzODFCOTQwMUU2NURGRUIwMDkwRjc5NCAvKiBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzgxQjkzRjFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oICovOyB9OworCQk1MzgzQUEzMDFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAg
Ki87IH07CiAJCTUzOTE3RTdCMUI3OTA2RkEwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTM5MTdFN0ExQjc5MDZFNDAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggKi87IH07CiAJCTUzOUZCOEJBMUM5OURBN0Mw
MDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxp
bmVzLmggKi87IH07CiAJCTUzQjBCRTM0MUU1NjFBQzkwMEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzQjBCRTMzMUU1NjFBQzkwMEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNw
cCAqLzsgfTsKQEAgLTM3NzYsNiArMzc4MCwxMCBAQAogCQk1MzU1NTcxNTFEOURGQTMyMDA2RDU4
M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtTWVtb3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM3MEI0RjMx
QkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM4MUI5MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdh
c21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM4MUI5M0YxRTY1REZFQjAwOTBG
Nzk0IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzkxN0U3QTFCNzkwNkU0MDAwRUJEMzMgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5MTdFN0MxQjc5MTEwNjAwMEVC
RDMzIC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzkxN0U4MzFCNzkxQ0I4MDAwRUJEMzMgLyogVHlwZWRBcnJheVByb3Rv
dHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IFR5cGVkQXJy
YXlQcm90b3R5cGUuanM7IHBhdGggPSBidWlsdGlucy9UeXBlZEFycmF5UHJvdG90eXBlLmpzOyBz
b3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CkBAIC02MjAxLDYgKzYyMDksOCBAQAogCQkJCTUz
RjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLywKIAkJCQk1
M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovLAogCQkJCUFE
QjZGNjdDMUUxNUQ3NTAwMDgyRjM4NCAvKiBXYXNtUGFnZUNvdW50LmNwcCAqLywKKwkJCQk1Mzgx
QjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8sCisJ
CQkJNTM4MUI5MzgxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAq
LywKIAkJCQk3OUI3NTk3MzFERkE0QzYwMDA1MjE3NEMgLyogV2FzbVBhZ2VDb3VudC5oICovLAog
CQkJCTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCiAJCQkJNTMx
Mzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKQEAgLTc3ODgsNiArNzc5
OCw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk3OUU0MjNFMDFERUU2NTMyMDA3OEQzNTUgLyog
SlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi8sCiAJCQkJNzlFNDIzRTExREVFNjUzMjAwNzhEMzU1
IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLywKKwkJCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMy
RkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCisJCQkJNTM4MUI5M0YxRTY1REZF
QjAwOTBGNzk0IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKIAkJCQlBRDJGQ0JBNjFE
QjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAgKi8sCiAJCQkJ
QUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCAq
LywKIAkJCQk3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMu
aCAqLywKQEAgLTc5MjcsNiArNzkzOSw3IEBACiAJCQkJMEZFQzg1NzIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjM4NzhFMUJGQkM0NEQw
MEUzQUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMy
QTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MzgxQjk0MDFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckND
YWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdE
MiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovLApAQCAtODI0Niw2ICs4MjU5LDcgQEAKIAkJ
CQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZDMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
TWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM4MUI5MzkxRTYwRTk3RDAwOTBGNzk0
IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZF
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
RjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCBp
biBIZWFkZXJzICovLApAQCAtMTAwMzYsNiArMTAwNTAsNyBAQAogCQkJCTBGQzg0MTY4MUJBOEMz
MjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzA0RDkwNTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQkQxQjcxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2Vy
dGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzgxQjkzNzFFNjBFOTY2MDA5MEY3OTQg
LyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMwMEI3
QjE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4OThGMzExQjI3Njg5RjAwODNBMzNDIC8qIERGR0ludGVnZXJS
YW5nZU9wdGltaXphdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzk3RjNEMTgy
MDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMTA0MzcsNiArMTA0NTIsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEz
RUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
RUIxMzc1NzFCQjExRUY5MDBDRDUxMDAgLyogTWFjcm9Bc3NlbWJsZXJBUk02NC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzgzQUEzMDFFNjVFOEExMDBBNTMyRkMgLyog
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZEQjdFQzFE
NjE3RDExMDBDREJGOEUgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZFNjhDNjM4MUI5MERFMEIwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUaHVua3MuY3BwCmluZGV4IGRlNDhlNjJkZGFiOGVmYWY4YmUzMTgyODcxYmU4ZDcw
OTliMTdjN2YuLjU0NmUxNGM5MDQ4ZThkMzM4YTU4MjY0N2NmN2NhZGY5ZGQzNDFjZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKQEAgLTgyLDYgKzgyLDE1IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoVk0qIHZtLCBUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3IpCiAgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6ZXhpc3RpbmdDVElTdHViKFRodW5rR2Vu
ZXJhdG9yIGdlbmVyYXRvcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAg
IENUSVN0dWJNYXA6Oml0ZXJhdG9yIGVudHJ5ID0gbV9jdGlTdHViTWFwLmZpbmQoZ2VuZXJhdG9y
KTsKKyAgICBpZiAoZW50cnkgPT0gbV9jdGlTdHViTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgcmV0dXJuIGVudHJ5LT52YWx1ZTsKK30KKwog
dm9pZCBKSVRUaHVua3M6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqKQog
ewogICAgIGF1dG8qIG5hdGl2ZUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRh
YmxlKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRo
dW5rcy5oCmluZGV4IGFkZGNmMjMwYzM0NWQ0MjcxYjYzN2YwOGI5NGM0MTZhM2VkMTgyYTQuLjdl
MDZlNzE2MjM1M2EwYjczZjNiYzAyZTU0MmY3M2I4MmY2NmUxMDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRUaHVua3MuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSopOyAg
ICAKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjdGlTdHViKFZNKiwgVGh1bmtHZW5lcmF0
b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5l
cmF0b3IpOwogCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIE5h
dGl2ZUZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZl
RnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciwgSW50
cmluc2ljLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCmluZGV4IGFlZGY0MmUxN2NjMmJkZTAxNGFkNWI4ZDYyODYyMmFlYzE0
NWU3ZTIuLjllMjg2ODgyYzZlOTA4NWZkY2NkNTY0M2RlZjE5YWUxMTY5MTMxNzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgi
CiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9n
LmgiCisjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogI2luY2x1ZGUgIldhc21Q
bGFuLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPGxvY2FsZS5oPgpAQCAt
Mzc2Niw2ICszNzY3LDkgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAg
IFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRp
bmcoKTsKICAgICBzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCgpOworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKyAgICBKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkoKTsKKyNlbmRpZgogCiAg
ICAgaW50IHJlc3VsdDsKICAgICByZXN1bHQgPSBydW5KU0MoCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKaW5kZXggYzRiZjhmYWRlOGFhZTMxMGYyYjZhMjc3MTEzMWJiZWRh
MjFiMmNiYy4uYzk0NDQ4MDcwOGFmNWRjZTNkMmY2ZTUzOGU4MWU0NzdkNzM5OWYwMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDI2LDYgKzQyNiw4IEBAIHR5
cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIFwKICAgICB2KGJvb2wsIHVzZVdl
YkFzc2VtYmx5LCB0cnVlLCBOb3JtYWwsICJFeHBvc2UgdGhlIFdlYkFzc2VtYmx5IGdsb2JhbCBv
YmplY3QuIikgXAogICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSwgZmFs
c2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0IHdvbid0IG1tYXAgdGhlIGZ1
bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwgYWxsb2NhdGUgdGhlIG1pbmltdW0g
cmVxdWlyZWQgYW1vdW50LiIpIFwKKyAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5RmFzdE1lbW9y
eSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGEgMzItYml0IGFk
ZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJvdW5kcyBjaGVjayB3YXNtIG1l
bW9yeS4iKQorCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggYTUwZjlkYjBhMGMzM2U5MDZkYzZl
YzBlYmVkYTY3MDdlYTRhOWZjMy4uYTAzOWRkYjAwZmZiMGNjMmJhMmY3NTc5YzVmMTM1N2YyNGIy
NDNkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMjQwLDYgKzI0MCw3
IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgd2ViQXNzZW1ibHlDYWxsZWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBK
U1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CiAgICAgd2ViQXNzZW1ibHlUb0pTQ2FsbGVlU3RydWN0dXJlLnNldCgqdGhpcywgV2ViQXNzZW1i
bHlUb0pTQ2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAg
d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgd2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlLnNldCgqdGhpcywgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlOjpjcmVhdGUo
KnRoaXMsIHdlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVjdHVyZS5nZXQoKSkpOwogI2VuZGlmCiAg
ICAgbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggNzMyYjI2ZTRlNGYzMDFiYTNiMGMxZTczMDgz
YWY5M2I0ODg4MGIyMC4uMWE0MWU0NGY2YTNlYmU2MGEzNGE2YzQ4YjFmYmI1OWM5ODFmNjdjNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0zMzMsNiArMzMzLDcgQEAgcHVibGlj
OgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3Nl
bWJseUNhbGxlZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseVRv
SlNDYWxsZWVTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPEpTQ2VsbD4gd2ViQXNzZW1ibHlUb0pTQ2FsbGVl
OwogI2VuZGlmCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVT
dHJ1Y3R1cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY3ZDJkMjgzZTlhMTM0YjI4MzBjOTkyNTUxZmNi
MjVmOWNiMmZkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUNhbGxlZS5oIgorI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKKyNp
bmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlNb2R1
bGU7CitjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5OworCitjbGFzcyBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFz
ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBzdGF0aWMgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIs
IEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0
U3R1YnM+JiYgZXhpdFN0dWJzLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQgY2Fs
bGVlQ291bnQpCisgICAgeworICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6
ZShjYWxsZWVDb3VudCkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBvd25lciwgc3RkOjpm
b3J3YXJkPEJhZzxDYWxsTGlua0luZm8+PihjYWxsTGlua0luZm9zKSwgc3RkOjpmb3J3YXJkPFZl
Y3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPj4oZXhpdFN0dWJzKSwgbW9kZSwgY2FsbGVlQ291bnQp
OworICAgICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IH0KKyAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisgICAgYm9vbCBpc1NhZmVUb1J1
bihKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CisKKyAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0Vu
dHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFj
ZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOworICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRl
eCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKKyAgICAgICAgcmV0
dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleF0uZ2V0KCk7CisgICAgfQorCisgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOworICAgICAgICB1
bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0
Q291bnQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNv
dW50KTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291
bnRdLmdldCgpOworICAgIH0KKworICAgIHZvaWQgc2V0SlNFbnRyeXBvaW50Q2FsbGVlKFZNJiB2
bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSkKKyAg
ICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7
CisgICAgICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleF0uc2V0KHZtLCB0aGlzLCBjYWxsZWUpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25l
ZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKQorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKKyAgICAgICAg
Y2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0uc2V0KHZtLCB0aGlzLCBjYWxs
ZWUpOworICAgIH0KKworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiogY2Fs
bGVlcygpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5Q2FsbGVlPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRP
ZkNhbGxlZXMoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2soVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgQmFnPENhbGxMaW5rSW5mbz4mJiwgVmVjdG9y
PFdhc206Oldhc21FeGl0U3R1YnM+JiYsIFdhc206Ok1lbW9yeTo6TW9kZSwgdW5zaWduZWQgY2Fs
bGVlQ291bnQpOworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisKKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mQ2FsbGVlcygpCisgICAgeworICAgICAg
ICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNX
ZWJBc3NlbWJseUNhbGxlZT4pPihzaXplb2YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaykpOworICAg
IH0KKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbnVtQ2FsbGVl
cykKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZzZXRPZkNhbGxlZXMoKSArIHNpemVvZihXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogbnVtQ2FsbGVlcyAqIDI7CisgICAgfQor
CisgICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIgeworICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkg
b3ZlcnJpZGU7CisgICAgfTsKKworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9kdWxl
PiBtX21vZHVsZTsKKyAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZp
bmFsaXplcjsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CisgICAgVmVj
dG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1fd2FzbUV4aXRTdHViczsKKyAgICBXYXNtOjpNZW1v
cnk6Ok1vZGUgbV9tb2RlOworICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCAyZmYz
MDUwMWY2NmYxYWNkYWY1ZGQ4Zjc4ZjVhNTIyOWVhZWI4YjkxLi5mNDIyMmY3ZGNjMjA0OWQwNmU2
ZTA4ZTU2M2U1ZWFiNWFjNzAxNDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0yNTksNyArMjU5LDcgQEAgQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihWTSYgdm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQ
cm9jZWR1cmUmIHAKICAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJlZ0lu
Zm8gOiBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnMpCiAgICAgICAgIG1fcHJvYy5waW5SZWdpc3Rl
cihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CiAKLSAgICBpZiAoaW5mby5oYXNNZW1vcnkoKSkgewor
ICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNr
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2ln
bmVkKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBpbm5lZEdQUiwgbV9tZW1v
cnlTaXplR1BSID09IHBpbm5lZEdQUik7CkBAIC0yODIsOCArMjgyLDggQEAgc3RhdGljIE1lbW9y
eUJhc2VBbmRTaXplIGdldE1lbW9yeUJhc2VBbmRTaXplKFZNJiB2bSwgVmFsdWUqIGluc3RhbmNl
LCBQcm9jZWR1cmUKIHsKICAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gYmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIGluc3Rh
bmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpOwogCi0gICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUodm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5t
ZW1vcnkoKS0+bWVtb3J5KCktPm1lbW9yeSgpKSkgPT0gc2l6ZW9mKHZvaWQqKSwgImNvZGVnZW4g
cmVsaWVzIG9uIHRoaXMgc2l6ZSIpOwotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBl
KHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZS0+bWVtb3J5KCktPm1lbW9yeSgpLT5zaXplKCkp
KSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7Cisg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUodm0udG9wSlNXZWJBc3NlbWJseUluc3Rh
bmNlLT5tZW1vcnkoKS0+bWVtb3J5KCkubWVtb3J5KCkpKSA9PSBzaXplb2Yodm9pZCopLCAiY29k
ZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVj
bHR5cGUodm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5tZW1vcnkoKS0+bWVtb3J5KCkuc2l6
ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIp
OwogICAgIE1lbW9yeUJhc2VBbmRTaXplIHJlc3VsdDsKICAgICByZXN1bHQuYmFzZSA9IGJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdp
bigpLCBtZW1vcnlPYmplY3QsIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkp
OwogICAgIHJlc3VsdC5zaXplID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywg
TG9hZCwgSW50NjQsIE9yaWdpbigpLCBtZW1vcnlPYmplY3QsIEpTV2ViQXNzZW1ibHlNZW1vcnk6
Om9mZnNldE9mU2l6ZSgpKTsKQEAgLTQ1NCw5ICs0NTQsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0
aWFsUmUKIAogaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJl
UG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90
IHNpemVPZk9wZXJhdGlvbikKIHsKLSAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSICYmIG1fbWVt
b3J5U2l6ZUdQUik7Ci0gICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNl
dCk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4o
bV9wcm9jLCBPcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlTaXplR1BSLCBzaXplT2ZPcGVyYXRp
b24gKyBvZmZzZXQgLSAxKTsKKyAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSKTsKKyAgICBpZiAo
bV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZykgewor
ICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKKyAgICAgICAgQVNTRVJUKHNpemVPZk9w
ZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1f
bWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgfQogICAg
IHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQz
MiwgT3JpZ2luKCksIHBvaW50ZXIpOwogICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFdhc21BZGRyZXNzVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5
QmFzZUdQUik7CiB9CkBAIC00ODgsNjggKzQ5MSw3MyBAQCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9m
TG9hZE9wKExvYWRPcFR5cGUgb3ApCiAKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1p
dExvYWRPcChMb2FkT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCB1aW50MzJfdCBvZmZzZXQpCiB7CisgICAgYXV0byBtYWtlS2luZCA9IFsmXSAoQjM6Ok9w
Y29kZSBvcGNvZGUpIC0+IEIzOjpLaW5kIHsKKyAgICAgICAgaWYgKG1faW5mby5tZW1vcnkubW9k
ZSgpID09IE1lbW9yeTo6U2lnbmFsaW5nKQorICAgICAgICAgICAgcmV0dXJuIHRyYXBwaW5nKG9w
Y29kZSk7CisgICAgICAgIHJldHVybiBvcGNvZGU7CisgICAgfTsKICAgICBzd2l0Y2ggKG9wKSB7
CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6IHsKLSAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhTLCBvcmlnaW4s
IHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQ4UyksIG9yaWdpbiwgcG9pbnRl
ciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4Uzogewot
ICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQ4Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIG1ha2VLaW5kKExvYWQ4UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBv
cmlnaW4sIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTog
ewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkOFosIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJu
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQo
TG9hZDhaKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgIH0KIAogICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDhVOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4sIHBvaW50
ZXIsIG9mZnNldCk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZDhaKSwgb3JpZ2luLCBwb2lu
dGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbiwgdmFsdWUpOwogICAgIH0KIAogICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDE2UzogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkMTZTLCBvcmlnaW4sIHBvaW50ZXIs
IG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQxNlMpLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNl
dCk7CiAgICAgfQogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzogewotICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQxNlMsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgVmFsdWUqIHZh
bHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtl
S2luZChMb2FkMTZTKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbiwg
dmFsdWUpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDogewotICAgICAg
ICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2Fk
KSwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2lu
LCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQpLCBJbnQzMiwg
b3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbiwgdmFsdWUpOwogICAgIH0K
IAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzogewotICAgICAgICBWYWx1ZSogdmFs
dWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQo
TG9hZCksIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2
YWx1ZSk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7Ci0gICAgICAg
IHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIEludDY0LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQp
LCBJbnQ2NCwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgIH0KIAogICAgIGNhc2UgTG9h
ZE9wVHlwZTo6RjMyTG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBGbG9hdCwgb3JpZ2luLCBwb2ludGVyLCBv
ZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkKSwgRmxvYXQsIG9yaWdpbiwgcG9pbnRlciwgb2Zm
c2V0KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6IHsKLSAgICAgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgRG91YmxlLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQp
LCBEb3VibGUsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICAvLyBGSVhN
RTogQjMgZG9lc24ndCBzdXBwb3J0IExvYWQxNlogeWV0LiBXZSBzaG91bGQgbG93ZXIgdG8gdGhh
dCB2YWx1ZSB3aGVuCiAgICAgLy8gaXQncyBhZGRlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NTg4NAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VTog
ewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQxNlMsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAg
ICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBtYWtlS2luZChMb2FkMTZTKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRB
bmQsIE9yaWdpbigpLCB2YWx1ZSwKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgMHgwMDAwZmZmZikpOwogICAg
IH0KICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKLSAgICAgICAgVmFsdWUqIHZh
bHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
MTZTLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9h
ZDE2UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgVmFsdWUqIHBhcnRpYWxS
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwg
T3JpZ2luKCksIHZhbHVlLAogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAweDAwMDBmZmZmKSk7CiAKQEAgLTYy
NSwxMyArNjMzLDE4IEBAIGlubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBl
IG9wKQogCiBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlw
ZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5
cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkKIHsKKyAgICBhdXRvIG1ha2VLaW5kID0gWyZdIChC
Mzo6T3Bjb2RlIG9wY29kZSkgLT4gQjM6OktpbmQgeworICAgICAgICBpZiAobV9pbmZvLm1lbW9y
eS5tb2RlKCkgPT0gTWVtb3J5OjpTaWduYWxpbmcpCisgICAgICAgICAgICByZXR1cm4gdHJhcHBp
bmcob3Bjb2RlKTsKKyAgICAgICAgcmV0dXJuIG9wY29kZTsKKyAgICB9OwogICAgIHN3aXRjaCAo
b3ApIHsKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CiAgICAgICAgIHZhbHVlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2
YWx1ZSk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogCiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMy
U3RvcmU4OgotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIFN0b3JlOCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChT
dG9yZTgpLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm47
CiAKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTE2OgpAQCAtNjM5LDcgKzY1Miw3IEBA
IGlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBP
cmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uCiAgICAgICAgIEZBTExUSFJPVUdIOwogCiAgICAgY2Fz
ZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTE2LCBvcmlnaW4sIHZhbHVlLCBwb2ludGVy
LCBvZmZzZXQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIG1ha2VLaW5kKFN0b3JlMTYpLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyLCBvZmZz
ZXQpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMy
OgpAQCAtNjUwLDcgKzY2Myw3IEBAIGlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRTdG9y
ZU9wKFN0b3JlT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uCiAgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STMyU3RvcmU6CiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMyU3RvcmU6CiAg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbiwgdmFsdWUsIHBvaW50
ZXIsIG9mZnNldCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgbWFrZUtpbmQoU3RvcmUpLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyLCBvZmZz
ZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29u
dmVudGlvbi5oCmluZGV4IGQ3OTAxNGYyN2ZhZjkwOTY4ZjIxZjVmOWI0ZDdiOGNjNzgxMDM5ZTMu
LmU2MDRhYjJkNDcwOTBhN2U5NDMxOWExMmNiODcxZTRlNzQzNzI3MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCkBAIC00MCw2
ICs0MCw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0
LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43YWMyZTE5NzI1M2Q2YWI1NDViZmNhOTU5N2E1NTA1YjViODVhOWI5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5j
cHAKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiRXhlY3V0
YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlv
blR5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKKworbmFtZXNw
YWNlIHsKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKworc3RhdGljIHN0
cnVjdCBzaWdhY3Rpb24gb2xkU2lnQnVzSGFuZGxlcjsKK3N0YXRpYyBib29sIGZhc3RIYW5kbGVy
SW5zdGFsbGVkIHsgZmFsc2UgfTsKK3N0YXRpYyBTdGF0aWNMb2NrIGNvZGVMb2NhdGlvbnNMb2Nr
Oworc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8Vk0qLCB2b2lk
Kiwgdm9pZCo+Pj4gY29kZUxvY2F0aW9uczsgLy8gKHZtLCBzdGFydCwgZW5kKQorCisjaWYgQ1BV
KFg4Nl82NCkKKyNkZWZpbmUgSW5zdHJ1Y3Rpb25Qb2ludGVyR1BSIGNvbnRleHQtPl9fc3MuX19y
aXAKKyNkZWZpbmUgRmlyc3RBcmd1bWVudEdQUiBjb250ZXh0LT5fX3NzLl9fcnNpCisjZWxzZQor
I2RlZmluZSBJbnN0cnVjdGlvblBvaW50ZXJHUFIgY29udGV4dC0+X19zcy5fX3BjCisjZGVmaW5l
IEZpcnN0QXJndW1lbnRHUFIgY29udGV4dC0+X19zcy5fX3hbMV0KKyNlbmRpZgorCitzdGF0aWMg
dm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCkK
K3sKKyAgICBtY29udGV4dF90IGNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNv
bnRleHQpLT51Y19tY29udGV4dDsKKyAgICB2b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oSW5zdHJ1Y3Rpb25Qb2ludGVyR1BSKTsKKyAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAic3RhcnRpbmcgaGFuZGxlciBmb3IgZmF1bHQgYXQ6ICIsIFJhd1BvaW50
ZXIoZmF1bHRpbmdJbnN0cnVjdGlvbikpOworCisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkpJ
VCBtZW1vcnkgc3RhcnQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Rh
cnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpKSwgIiBlbmQ6ICIsIFJhd1BvaW50ZXIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSkpOwor
ICAgIC8vIEZpcnN0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFyZSBpbiBKSVQgY29kZSBiZWZv
cmUgd2UgY2FuIGFxdWlyZSBhbnkgbG9ja3MuIE90aGVyd2lzZSwKKyAgICAvLyB3ZSBtaWdodCBo
YXZlIGNyYXNoZWQgaW4gY29kZSB0aGF0IGlzIGFscmVhZHkgaG9sZGluZyBvbmUgb2YgdGhlIGxv
Y2tzIHdlIHdhbnQgdG8gYXF1aXJlLgorICAgIGlmIChyZWludGVycHJldF9jYXN0PHZvaWQqPihz
dGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkgPD0gZmF1bHRpbmdJbnN0cnVjdGlvbgor
ICAgICAgICAmJiBmYXVsdGluZ0luc3RydWN0aW9uIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSkgeworCisgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKKyAgICAgICAgZm9yIChhdXRvIHJhbmdlIDogY29k
ZUxvY2F0aW9ucy5nZXQoKSkgeworICAgICAgICAgICAgVk0qIHZtOworICAgICAgICAgICAgdm9p
ZCogc3RhcnQ7CisgICAgICAgICAgICB2b2lkKiBlbmQ7CisgICAgICAgICAgICBzdGQ6OnRpZSh2
bSwgc3RhcnQsIGVuZCkgPSByYW5nZTsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJmdW5jdGlvbiBzdGFydDogIiwgUmF3UG9pbnRlcihzdGFydCksICIgZW5kOiAiLCBSYXdQb2lu
dGVyKGVuZCkpOworICAgICAgICAgICAgaWYgKHN0YXJ0IDw9IGZhdWx0aW5nSW5zdHJ1Y3Rpb24g
JiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8PSBlbmQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiZm91bmQgbWF0Y2giKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZXhjZXB0aW9uU3R1YiA9IHZtLT5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHVi
KHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcik7CisgICAgICAgICAgICAgICAg
Ly8gSWYgZm9yIHdoYXRldmVyIHJlYXNvbiB3ZSBkb24ndCBoYXZlIGEgc3R1YiB0aGVuIHdlIHNo
b3VsZCBqdXN0IHRyZWF0IHRoaXMgbGlrZSBhIHJlZ3VsYXIgY3Jhc2guCisgICAgICAgICAgICAg
ICAgaWYgKCFleGNlcHRpb25TdHViLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImZvdW5kIHN0dWI6ICIsIFJh
d1BvaW50ZXIoZXhjZXB0aW9uU3R1Yi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAg
ICAgICAgICAgICAgIEZpcnN0QXJndW1lbnRHUFIgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oRXhj
ZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICAgICAgICAgIElu
c3RydWN0aW9uUG9pbnRlckdQUiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KGV4Y2VwdGlv
blN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHNpZ2FjdGlvbihzaWdu
YWwsICZvbGRTaWdCdXNIYW5kbGVyLCBudWxscHRyKTsKK30KKwordm9pZCByZWdpc3RlckNvZGUo
Vk0mIHZtLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKQoreworICAgIGlmICghZmFzdE1lbW9yeUVu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIExvY2tIb2xkZXIgbG9ja2VyKGNvZGVMb2Nh
dGlvbnNMb2NrKTsKKyAgICBjb2RlTG9jYXRpb25zLT5hZGQoc3RkOjptYWtlX3R1cGxlKCZ2bSwg
c3RhcnQsIGVuZCkpOworfQorCit2b2lkIHVucmVnaXN0ZXJDb2RlKFZNJiB2bSwgdm9pZCogc3Rh
cnQsIHZvaWQqIGVuZCkKK3sKKyAgICBpZiAoIWZhc3RNZW1vcnlFbmFibGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihjb2RlTG9jYXRpb25zTG9jayk7CisgICAg
Y29kZUxvY2F0aW9ucy0+cmVtb3ZlKHN0ZDo6bWFrZV90dXBsZSgmdm0sIHN0YXJ0LCBlbmQpKTsK
K30KKworYm9vbCBmYXN0TWVtb3J5RW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGZhc3RIYW5kbGVy
SW5zdGFsbGVkOworfQorCit2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQoreworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAg
ICAgaWYgKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKworICAgICAgICBh
Y3Rpb24uc2Ffc2lnYWN0aW9uID0gdHJhcEhhbmRsZXI7CisgICAgICAgIHNpZ2ZpbGxzZXQoJmFj
dGlvbi5zYV9tYXNrKTsKKyAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAg
ICAgICAgCisgICAgICAgIGlmICghc2lnYWN0aW9uKFNJR0JVUywgJmFjdGlvbiwgJm9sZFNpZ0J1
c0hhbmRsZXIpKSB7CisgICAgICAgICAgICBmYXN0SGFuZGxlckluc3RhbGxlZCA9IHRydWU7Cisg
ICAgICAgICAgICBjb2RlTG9jYXRpb25zLmNvbnN0cnVjdCgpOworICAgICAgICB9CisKKyAgICB9
KTsKK30KKyAgICAKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GYXVsdFNpZ25hbEhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzE5ZTAxODNhMTg5NmE1YWIxNGMw
ZWJkYThkODYyNzBiZWNlM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVk07CisKK25hbWVzcGFjZSBXYXNt
IHsKKwordm9pZCByZWdpc3RlckNvZGUoVk0mLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKK3Zv
aWQgdW5yZWdpc3RlckNvZGUoVk0mLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKKworYm9vbCBm
YXN0TWVtb3J5RW5hYmxlZCgpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmFibGVGYXN0TWVt
b3J5KCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Rm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXgg
ZGM2MzQ3NDQyMmJmZTYwMzNkOGIyZDIyMWJiN2VjNWMxMTA1Njg2Mi4uMWZjNTc0ZTkzZDcyNDdj
NjRhOGZhMzM0ZjYyMjVkMmM3MjcxZjY0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Gb3JtYXQuaApAQCAtMjU2LDcgKzI1Niw2IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7
CiAgICAgfQogCiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0
dXJuIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KLSAgICBib29sIGhh
c01lbW9yeSgpIGNvbnN0IHsgcmV0dXJuICEhbWVtb3J5OyB9CiAKICAgICB+TW9kdWxlSW5mb3Jt
YXRpb24oKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmlu
ZGV4IGFhZDkxYzEzZTNhMzAxNjgzOGZiMDM4NGRhYjVhNDJiNDc3NDNkMjguLjNmOTkxM2NlNWY0
OTE2MTQ3MzU4NWNjZmI1MzAxYmY5YzBmYzgwMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0yOCw3ICsyOCwxMSBAQAogCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmgiCisKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDg2ICs0MiwxOTkgQEAgbmFtZXNwYWNlIHsKIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi12b2lkIE1lbW9yeTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoraW5saW5lIGJvb2wgbW1hcEJ5dGVzKHNpemVfdCBieXRlcywgdm9p
ZComIG1lbW9yeSkKIHsKLSAgICBTdHJpbmcgbWVtb3J5SGV4OwotICAgIFdURjo6YXBwZW5kVW5z
aWduZWQ2NEFzSGV4KCh1aW50NjRfdCkodWludHB0cl90KW1fbWVtb3J5LCBtZW1vcnlIZXgpOwot
ICAgIG91dC5wcmludCgiTWVtb3J5IGF0IDB4IiwgbWVtb3J5SGV4LCAiLCBzaXplICIsIG1fc2l6
ZSwgIkIgY2FwYWNpdHkgIiwgbV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0
aWFsLCAiIG1heGltdW0gIiwgbV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUp
KTsKKyAgICBkYXRhTG9nSWYodmVyYm9zZSwgIkF0dGVtcHRpbmcgdG8gbW1hcCAiLCBieXRlcywg
IiBieXRlczogIik7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEg
Vk0gdGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MzYwMAorICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwgYnl0ZXMsIFBS
T1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworICAgIGlmIChyZXN1bHQg
PT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZmFpbGVkIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
InN1Y2NlZWRlZCIpOworICAgIG1lbW9yeSA9IHJlc3VsdDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotY29uc3QgY2hhciogTWVtb3J5OjptYWtlU3RyaW5nKE1vZGUgbW9kZSkgY29uc3QKKy8vIFdl
IHVzZSB0aGlzIGFzIGEgaGV1cmlzdGljIHRvIGd1ZXNzIG1vZGUgYSBtZW1vcnkgaW1wb3J0IHdp
bGwgYmUuIE1vc3Qgb2YgdGhlIHRpbWUgd2UgZXhwZWN0IHVzZXJzIHRvCisvLyBhbGxvY2F0ZSB0
aGUgbWVtb3J5IHRoZXkgYXJlIGdvaW5nIHRvIHBhc3MgdG8gYWxsIHRoZWlyIG1vZHVsZXMgcmln
aHQgYmVmb3JlIGNvbXBpbGF0aW9uLgorc3RhdGljIE1lbW9yeTo6TW9kZSBsYXN0QWxsb2NhdGVk
TWVtb3J5TW9kZSB7IE1lbW9yeTo6TW9kZTo6U2lnbmFsaW5nIH07CisKK01lbW9yeTo6TW9kZSBN
ZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCkKIHsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBj
YXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAgICBy
ZXR1cm4gbGFzdEFsbG9jYXRlZE1lbW9yeU1vZGU7Cit9CisKK3N0YXRpY19hc3NlcnQoc2l6ZW9m
KHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1h
eGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzMgd2hpY2ggaXMgbGFyZ2VyIHRo
YW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlm
IHRoaXMgZGlkbid0IGhvbGQuIik7CisKK3N0YXRpYyBjb25zdCBzaXplX3QgZmFzdE1lbW9yeU1h
cHBlZEJ5dGVzID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkpICogMjsgLy8gcG9pbnRlciBtYXggKyBvZmZzZXQgbWF4LiBUaGlzIGlzIGFs
bCB3ZSBuZWVkIHNpbmNlIGEgbG9hZCBzdHJhZGRsaW5nIHJlYWRhYmxlIG1lbW9yeSB3aWxsIHRy
YXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4RmFzdE1lbW9yaWVzID0gNDsKK3N0YXRpYyB1
bnNpZ25lZCBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgeyAwIH07CitpbmxpbmUgRGVxdWU8dm9pZCos
IG1heEZhc3RNZW1vcmllcz4mIGF2YWlsYWJsZUZhc3RNZW1vcmllcygpCit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPERlcXVlPHZvaWQqLCBtYXhGYXN0TWVtb3JpZXM+PiBhdmFpbGFibGVG
YXN0TWVtb3JpZXM7CisgICAgcmV0dXJuIGF2YWlsYWJsZUZhc3RNZW1vcmllczsKK30KKworaW5s
aW5lIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0sIHZvaWQqJiBtZW1vcnksIHNpemVfdCYg
bWFwcGVkQ2FwYWNpdHksIE1lbW9yeTo6TW9kZSYgbW9kZSkKK3sKKyAgICAvLyBXZSBtaWdodCBH
QyBoZXJlIHNvIHdlIHNob3VsZCBiZSBob2xkaW5nIHRoZSBBUEkgbG9jay4KKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3luY3Jvbm91c2x5IHRyaWdnZXIgdGhlIEdDIGZyb20g
YW5vdGhlciB0aHJlYWQuCisgICAgQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElM
b2NrKCkpOworICAgIGlmICghZmFzdE1lbW9yeUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gV2UgbmVlZCB0byBiZSBzdXJlIHdlIGhhdmUgYSBzdHViIHByaW9yIHRv
IHJ1bm5pbmcgY29kZS4KKyAgICBpZiAoIXZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9t
V2FzbVRodW5rR2VuZXJhdG9yKS5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8gZGVxdWVGYXN0TWVtb3J5ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgcmV0dXJuIHRoZXNlIHRvIHRoZSBPUyBpZiB3ZSBnbyBz
b21lIG51bWJlciBvZiBHQ3MKKyAgICAgICAgLy8gd2l0aG91dCB1c2luZyB0aGVtLgorICAgICAg
ICBpZiAoIWF2YWlsYWJsZUZhc3RNZW1vcmllcygpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
bWVtb3J5ID0gYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCkudGFrZUZpcnN0KCk7CisgICAgICAgICAg
ICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlNYXBwZWRCeXRlczsKKyAgICAgICAgICAgIG1v
ZGUgPSBNZW1vcnk6OlNpZ25hbGluZzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgQVNTRVJUKGFsbG9jYXRl
ZEZhc3RNZW1vcmllcyA8PSBtYXhGYXN0TWVtb3JpZXMpOworICAgIGlmIChkZXF1ZUZhc3RNZW1v
cnkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZiB3ZSBoYXZlIGFsbG9jYXRl
ZCBhbGwgdGhlIGZhc3QgbWVtb3JpZXMuLi4gdG9vIGJhZC4KKyAgICBpZiAoYWxsb2NhdGVkRmFz
dE1lbW9yaWVzID09IG1heEZhc3RNZW1vcmllcykgeworICAgICAgICAvLyBUaGVyZSBpcyBhIHJl
YXNvbmFibGUgY2hhbmNlIHRoYXQgYW5vdGhlciBtb2R1bGUgaGFzIGRpZWQgYnV0IGhhcyBub3Qg
YmVlbiBjb2xsZWN0ZWQgeWV0LiBEb24ndCBsb3NlIGhvcGUgeWV0IQorICAgICAgICB2bS5oZWFw
LmNvbGxlY3RTeW5jKCk7CisgICAgICAgIHJldHVybiBkZXF1ZUZhc3RNZW1vcnkoKTsKICAgICB9
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gIiI7CisKKyAg
ICBpZiAobW1hcEJ5dGVzKGZhc3RNZW1vcnlNYXBwZWRCeXRlcywgbWVtb3J5KSkgeworICAgICAg
ICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlNYXBwZWRCeXRlczsKKyAgICAgICAgbW9kZSA9
IE1lbW9yeTo6U2lnbmFsaW5nOworICAgICAgICBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMrKzsKKyAg
ICB9CisgICAgcmV0dXJuIG1lbW9yeTsKIH0KIAotc3RhdGljX2Fzc2VydChzaXplb2YodWludDY0
X3QpID09IHNpemVvZihzaXplX3QpLCAiV2UgcmVseSBvbiBhbGxvd2luZyB0aGUgbWF4aW11bSBz
aXplIG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUgMl4zMiB3aGljaCBpcyBsYXJnZXIgdGhhbiBmaXRz
IGluIGEgMzItYml0IGludGVnZXIgdGhhdCB3ZSdkIHBhc3MgdG8gbXByb3RlY3QgaWYgdGhpcyBk
aWRuJ3QgaG9sZC4iKTsKK2lubGluZSB2b2lkIHJlbGVhc2VGYXN0TWVtb3J5KHZvaWQqJiBtZW1v
cnksIHNpemVfdCB3cml0YWJsZVNpemUsIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5OjpN
b2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgIT0gTWVtb3J5OjpTaWduYWxpbmcgfHwgIW1lbW9y
eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUkVMRUFTRV9BU1NFUlQobWVtb3J5ICYmIG1hcHBl
ZENhcGFjaXR5ID09IGZhc3RNZW1vcnlNYXBwZWRCeXRlcyk7CisgICAgQVNTRVJUKGZhc3RNZW1v
cnlFbmFibGVkKCkpOworCisgICAgbWVtc2V0KG1lbW9yeSwgMCwgd3JpdGFibGVTaXplKTsKKyAg
ICAvLyBXZSBuZWVkIHRvIG1wcm90ZWN0IFBST1RfTk9ORSBhbGwgdGhlIGV4aXN0aW5nIG1lbW9y
eS4gSWYgd2UgY2FuJ3QsIGZvcgorICAgIC8vIHdoYXRldmVyIHJlYXNvbiwgd2Ugc2hvdWxkIGJh
aWwgb3V0IGFuZCBnZXQgcmlkIG9mIHRoaXMgbWVtb3J5LgorICAgIGlmIChtcHJvdGVjdChtZW1v
cnksIHdyaXRhYmxlU2l6ZSwgUFJPVF9OT05FKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKGF2YWlsYWJsZUZhc3RNZW1vcmllcygpLnNpemUoKSA8IGFsbG9jYXRlZEZhc3RNZW1vcmll
cyk7CisgICAgYXZhaWxhYmxlRmFzdE1lbW9yaWVzKCkuYXBwZW5kKG1lbW9yeSk7CisgICAgbWVt
b3J5ID0gbnVsbHB0cjsKK30KIAotTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBh
Z2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpCi0gICAgOiBtX3NpemUoaW5pdGlhbC5ieXRl
cygpKQorTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVt
KQorICAgIDogbV9pbml0aWFsKGluaXRpYWwpCisgICAgLCBtX21heGltdW0obWF4aW11bSkKK3sK
KyAgICBBU1NFUlQoIWluaXRpYWwuYnl0ZXMoKSk7Cit9CisKK01lbW9yeTo6TWVtb3J5KHZvaWQq
IG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFw
cGVkQ2FwYWNpdHksIE1vZGUgbW9kZSkKKyAgICA6IG1fbWVtb3J5KG1lbW9yeSkKKyAgICAsIG1f
c2l6ZShpbml0aWFsLmJ5dGVzKCkpCiAgICAgLCBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1f
bWF4aW11bShtYXhpbXVtKQotICAgICwgbV9tb2RlKE1vZGU6OkJvdW5kc0NoZWNraW5nKQotICAg
IC8vIEZJWE1FOiBJZiB3ZSBhZGQgc2lnbmFsIGJhc2VkIGJvdW5kcyBjaGVja2luZyB0aGVuIHdl
IG5lZWQgZXh0cmEgc3BhY2UgZm9yIG92ZXJmbG93IG9uIGxvYWQuCi0gICAgLy8gc2VlOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCisgICAgLCBtX21hcHBl
ZENhcGFjaXR5KG1hcHBlZENhcGFjaXR5KQorICAgICwgbV9tb2RlKG1vZGUpCit7CisgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwgKnRoaXMpOwor
fQorCitSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZUltcGwoVk0mIHZtLCBQYWdlQ291bnQg
aW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVxdWlyZWRN
b2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlh
bCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KIAotICAgIG1f
bWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDogUGFnZUNvdW50Ojpt
YXgoKS5ieXRlcygpOwotICAgIGlmICghbV9tYXBwZWRDYXBhY2l0eSkgeworICAgIE1vZGUgbW9k
ZSA9IHJlcXVpcmVkTW9kZSA/ICpyZXF1aXJlZE1vZGUgOiBCb3VuZHNDaGVja2luZzsKKyAgICBj
b25zdCBzaXplX3Qgc2l6ZSA9IGluaXRpYWwuYnl0ZXMoKTsKKyAgICBzaXplX3QgbWFwcGVkQ2Fw
YWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDogUGFnZUNvdW50OjptYXgoKS5ieXRl
cygpOworICAgIHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7CisKKyAgICBhdXRvIG1ha2VFbXB0eU1l
bW9yeSA9IFsmXSAoKSAtPiBSZWZQdHI8TWVtb3J5PiB7CisgICAgICAgIGlmIChtb2RlID09IFNp
Z25hbGluZykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGxhc3RBbGxv
Y2F0ZWRNZW1vcnlNb2RlID0gQm91bmRzQ2hlY2tpbmc7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0pKTsKKyAgICB9OworCisgICAgaWYgKCFtYXBw
ZWRDYXBhY2l0eSkgewogICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIHNwZWNpZmllZCBhIHplcm8g
YXMgbWF4aW11bSAod2hpY2ggbWVhbnMgd2UgYWxzbyBoYXZlIHplcm8gYXMgaW5pdGlhbCBzaXpl
KS4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zaXplID09IDApOwotICAgICAgICBtX21lbW9y
eSA9IG51bGxwdHI7Ci0gICAgICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSAwOwotICAgICAgICBmYWls
ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4o
Ik1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgbm90aGluZyAiLCAqdGhpcyk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNpemUpOworICAgICAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgYWxsb2NhdGluZyBub3RoaW5nIik7CisgICAgICAg
IHJldHVybiBtYWtlRW1wdHlNZW1vcnkoKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogSXQgd291
bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0gICAgdm9pZCogcmVzdWx0ID0g
T3B0aW9uczo6c2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSgpID8gTUFQX0ZBSUxFRCA6IG1t
YXAobnVsbHB0ciwgbV9tYXBwZWRDYXBhY2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1B
UF9BTk9OLCAtMSwgMCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAg
IC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4KLSAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6TWVtb3J5IG1tYXAgZmFpbGVkIG9u
Y2UgZm9yIGNhcGFjaXR5LCB0cnlpbmcgYWdhaW4iLCAqdGhpcyk7Ci0gICAgICAgIG1fbWFwcGVk
Q2FwYWNpdHkgPSBtX3NpemU7Ci0gICAgICAgIGlmICghbV9tYXBwZWRDYXBhY2l0eSkgewotICAg
ICAgICAgICAgbV9tZW1vcnkgPSBudWxscHRyOwotICAgICAgICAgICAgZmFpbGVkID0gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIk1l
bW9yeTo6TWVtb3J5IG1tYXAgbm90IHRyeWluZyBhZ2FpbiBiZWNhdXNlIHNpemUgaXMgemVybyAi
LCAqdGhpcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBib29sIGNhblVz
ZUZhc3RNZW1vcnkgPSAhcmVxdWlyZWRNb2RlIHx8IHJlcXVpcmVkTW9kZSA9PSBTaWduYWxpbmc7
CisgICAgaWYgKCFjYW5Vc2VGYXN0TWVtb3J5IHx8ICF0cnlHZXRGYXN0TWVtb3J5KHZtLCBtZW1v
cnksIG1hcHBlZENhcGFjaXR5LCBtb2RlKSkgeworICAgICAgICBpZiAobW9kZSA9PSBTaWduYWxp
bmcpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAoT3B0aW9uczo6
c2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSgpID8gdHJ1ZSA6ICFtbWFwQnl0ZXMobWFwcGVk
Q2FwYWNpdHksIG1lbW9yeSkpIHsKKyAgICAgICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlm
ZmVyZW50IG51bWJlci4KKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6
OmNyZWF0ZSBtbWFwIGZhaWxlZCBvbmNlIGZvciBjYXBhY2l0eSwgdHJ5aW5nIGFnYWluIik7Cisg
ICAgICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IHNpemU7CisgICAgICAgICAgICBpZiAoIW1hcHBl
ZENhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9y
eTo6Y3JlYXRlIG1tYXAgbm90IHRyeWluZyBhZ2FpbiBiZWNhdXNlIHNpemUgaXMgemVybyIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlRW1wdHlNZW1vcnkoKTsKKyAgICAgICAgICAgIH0K
IAotICAgICAgICByZXN1bHQgPSBtbWFwKG51bGxwdHIsIG1fbWFwcGVkQ2FwYWNpdHksIFBST1Rf
Tk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwotICAgICAgICBpZiAocmVzdWx0
ID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgbW1hcCBmYWlsZWQgdHdpY2UgIiwgKnRoaXMp
OwotICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIGlmICghbW1hcEJ5dGVzKG1hcHBlZENhcGFjaXR5LCBtZW1vcnkpKSB7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAgZmFpbGVk
IHR3aWNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQobV9zaXplIDw9IG1fbWFwcGVkQ2FwYWNp
dHkpOwotICAgIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gIW1wcm90ZWN0KHJlc3VsdCwgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7CisgICAgQVNTRVJUKG1lbW9yeSAmJiBzaXplIDw9
IG1hcHBlZENhcGFjaXR5KTsKKyAgICBpZiAobXByb3RlY3QobWVtb3J5LCBzaXplLCBQUk9UX1JF
QUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5
OjpjcmVhdGUgbXByb3RlY3QgZmFpbGVkIik7CisgICAgICAgIHJlbGVhc2VGYXN0TWVtb3J5KG1l
bW9yeSwgMCwgbWFwcGVkQ2FwYWNpdHksIG1vZGUpOworICAgICAgICBpZiAobWVtb3J5KSB7Cisg
ICAgICAgICAgICBpZiAobXVubWFwKG1lbW9yeSwgbWFwcGVkQ2FwYWNpdHkpKQorICAgICAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQorICAgIAorICAgIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlID0gbW9kZTsKKyAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1hcCBzdWNjZWVkZWQiKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE1lbW9yeShtZW1vcnksIGluaXRpYWwsIG1heGltdW0sIG1hcHBlZENh
cGFjaXR5LCBtb2RlKSk7Cit9CiAKLSAgICBtX21lbW9yeSA9IHJlc3VsdDsKLSAgICBmYWlsZWQg
PSBmYWxzZTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Ok1l
bW9yeSBtbWFwIHN1Y2NlZWRlZCAiLCAqdGhpcyk7CitSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNy
ZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpv
cHRpb25hbDxNb2RlPiBtb2RlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1h
eGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNh
bGxlci4KKyAgICBSZWZQdHI8TWVtb3J5PiByZXN1bHQgPSBjcmVhdGVJbXBsKHZtLCBpbml0aWFs
LCBtYXhpbXVtLCBtb2RlKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIGlmIChyZXN1bHQt
Pm1vZGUoKSA9PSBTaWduYWxpbmcpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQt
Pm1fbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKTsKKyAgICAgICAgaWYg
KG1vZGUpCisgICAgICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpOworICAg
ICAgICBBU1NFUlQobGFzdEFsbG9jYXRlZE1lbW9yeU1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBNZW1vcnk6On5NZW1vcnkoKQogewotICAg
IGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6fk1lbW9yeSAiLCAqdGhp
cyk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6fk1lbW9yeSAiLCAqdGhpcyk7
CisgICAgcmVsZWFzZUZhc3RNZW1vcnkobV9tZW1vcnksIG1fc2l6ZSwgbV9tYXBwZWRDYXBhY2l0
eSwgbV9tb2RlKTsKICAgICBpZiAobV9tZW1vcnkpIHsKICAgICAgICAgaWYgKG11bm1hcChtX21l
bW9yeSwgbV9tYXBwZWRDYXBhY2l0eSkpCiAgICAgICAgICAgICBDUkFTSCgpOwpAQCAtMTI4LDIz
ICsyNDUsMjUgQEAgYm9vbCBNZW1vcnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3VudDo6ZnJvbUJ5dGVzKG1fc2l6ZSkpOwog
Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiTWVtb3J5Ojpncm93IHRvICIs
IG5ld1NpemUsICIgZnJvbSAiLCAqdGhpcyk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1l
bW9yeTo6Z3JvdyB0byAiLCBuZXdTaXplLCAiIGZyb20gIiwgKnRoaXMpOwogCiAgICAgaWYgKG1h
eGltdW0oKSAmJiBuZXdTaXplID4gbWF4aW11bSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICB1aW50NjRfdCBkZXNpcmVkU2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsKKyAgICBzaXplX3Qg
ZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5dGVzKCk7CiAKICAgICBpZiAobV9tZW1vcnkgJiYgZGVz
aXJlZFNpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSkgewotICAgICAgICBib29sIHN1Y2Nlc3MgPSAh
bXByb3RlY3Qoc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSArIG1fc2l6ZSwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihkZXNpcmVkU2l6ZSAtIG1fc2l6ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJ
VEUpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzKTsKKyAgICAgICAgaWYgKG1wcm90
ZWN0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9yeSkgKyBtX3NpemUsIHN0YXRpY19jYXN0
PHNpemVfdD4oZGVzaXJlZFNpemUgLSBtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkg
eworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyBpbi1wbGFj
ZSBmYWlsZWQgIiwgKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKICAgICAgICAgbV9zaXplID0gZGVzaXJlZFNpemU7Ci0gICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Omdyb3cgaW4tcGxhY2UgIiwgKnRoaXMpOwor
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IGluLXBsYWNlICIsICp0
aGlzKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgQVNTRVJUKG1vZGUoKSAh
PSBTaWduYWxpbmcpOwogICAgIC8vIE90aGVyd2lzZSwgbGV0J3MgdHJ5IHRvIG1ha2Ugc29tZSBu
ZXcgbWVtb3J5LgogICAgIHZvaWQqIG5ld01lbW9yeSA9IG1tYXAobnVsbHB0ciwgZGVzaXJlZFNp
emUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAw
KTsKICAgICBpZiAobmV3TWVtb3J5ID09IE1BUF9GQUlMRUQpCkBAIC0xNTksMTEgKzI3OCwyNiBA
QCBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKICAgICBtX21hcHBlZENhcGFj
aXR5ID0gZGVzaXJlZFNpemU7CiAgICAgbV9zaXplID0gZGVzaXJlZFNpemU7CiAKLSAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Omdyb3cgIiwgKnRoaXMpOworICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgIiwgKnRoaXMpOwogICAgIHJldHVy
biB0cnVlOwogfQogCit2b2lkIE1lbW9yeTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiTWVtb3J5IGF0ICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiLCBz
aXplICIsIG1fc2l6ZSwgIkIgY2FwYWNpdHkgIiwgbV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRp
YWwgIiwgbV9pbml0aWFsLCAiIG1heGltdW0gIiwgbV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0
cmluZyhtX21vZGUpKTsKK30KKworY29uc3QgY2hhciogTWVtb3J5OjptYWtlU3RyaW5nKE1vZGUg
bW9kZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1vZGU6OkJvdW5k
c0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAgICBjYXNlIE1vZGU6OlNpZ25h
bGluZzogcmV0dXJuICJTaWduYWxpbmciOworICAgIGNhc2UgTW9kZTo6TnVtYmVyT2ZNb2Rlczog
YnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuICIiOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogfSAvLyBuYW1lc3BhY2UgV2FzbQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCmluZGV4IDIzNmJmODUxMjU2NDU1
YmNlOWUzMjM2ZGNjNDU4NGM4NmMxZGNmMGMuLjMzODRhNDJjNjBiNjU0MTRhMThhMWM3Nzk5YzEx
YWFkMzVhNTFlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAg
LTI3LDYyICsyNyw2OSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAi
V2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogCisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKIG5hbWVzcGFjZSBXVEYgewogY2xhc3MgUHJpbnRTdHJl
YW07CiB9CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgVk07CisKK25hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgTWVtb3J5IHsKK2Ns
YXNzIE1lbW9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lbW9yeT4gewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKE1lbW9yeSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgdm9pZCBkdW1wKFdURjo6UHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgc3VwcG9ydCBvdGhlciBtb2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCi0gICAgZW51bSBjbGFzcyBNb2RlIHsKLSAgICAg
ICAgQm91bmRzQ2hlY2tpbmcKKyAgICBlbnVtIE1vZGUgeworICAgICAgICBCb3VuZHNDaGVja2lu
ZywKKyAgICAgICAgU2lnbmFsaW5nLAorICAgICAgICBOdW1iZXJPZk1vZGVzCiAgICAgfTsKICAg
ICBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1vZGUpIGNvbnN0OwogCisgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9tZW1vcnk7IH0KKworICAgIHN0YXRpYyBS
ZWZQdHI8TWVtb3J5PiBjcmVhdGUoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1h
eGltdW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsK
KwogICAgIE1lbW9yeSgpID0gZGVmYXVsdDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnko
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpOwotICAg
IE1lbW9yeShNZW1vcnkmJiBvdGhlcikKLSAgICAgICAgOiBtX21lbW9yeShvdGhlci5tX21lbW9y
eSkKLSAgICAgICAgLCBtX3NpemUob3RoZXIubV9zaXplKQotICAgICAgICAsIG1faW5pdGlhbChv
dGhlci5tX2luaXRpYWwpCi0gICAgICAgICwgbV9tYXhpbXVtKG90aGVyLm1fbWF4aW11bSkKLSAg
ICAgICAgLCBtX21hcHBlZENhcGFjaXR5KG90aGVyLm1fbWFwcGVkQ2FwYWNpdHkpCi0gICAgICAg
ICwgbV9tb2RlKG90aGVyLm1fbW9kZSkKLSAgICB7Ci0gICAgICAgIC8vIE1vdmluZyB0cmFuc2Zl
cnMgb3duZXJzaGlwIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LgotICAgICAgICBvdGhlci5tX21l
bW9yeSA9IG51bGxwdHI7Ci0gICAgfQogICAgIH5NZW1vcnkoKTsKIAogICAgIHZvaWQqIG1lbW9y
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9Ci0gICAgdWludDY0X3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CiAgICAgUGFnZUNvdW50IHNpemVJblBhZ2VzKCkgY29uc3QgeyByZXR1cm4gUGFnZUNv
dW50Ojpmcm9tQnl0ZXMobV9zaXplKTsgfQogCiAgICAgUGFnZUNvdW50IGluaXRpYWwoKSBjb25z
dCB7IHJldHVybiBtX2luaXRpYWw7IH0KICAgICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4aW11bTsgfQogCisgICAgc3RhdGljIE1vZGUgbGFzdEFsbG9jYXRlZE1vZGUo
KTsKICAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KIAorICAgIC8vIGdy
b3coKSBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgSlNXZWJBc3NlbWJseU1lbW9yeSBv
YmplY3Qgc2luY2UgdGhhdCBvYmplY3QgbmVlZHMgdG8gdXBkYXRlIGludGVybmFsCisgICAgLy8g
cG9pbnRlcnMgd2l0aCB0aGUgY3VycmVudCBiYXNlIGFuZCBzaXplLgogICAgIGJvb2wgZ3JvdyhQ
YWdlQ291bnQpOwogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fbWVtb3J5KTsgfQotICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1lbW9yeSwgbV9z
aXplKTsgfQotICAgIAorICAgIHZvaWQgY2hlY2soKSB7ICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVn
dW4oKSk7IH0KIHByaXZhdGU6CisgICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZUltcGwo
Vk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8
TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKKyAgICBNZW1vcnkodm9pZCogbWVt
b3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNpemVfdCBtYXBwZWRD
YXBhY2l0eSwgTW9kZSk7CisgICAgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSk7CisKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIG1vdmUgdGhlc2UgdG8gdGhlIGlu
c3RhbmNlIHRvIGF2b2lkIGEgbG9hZCBvbiBpbnN0YW5jZS0+aW5zdGFuY2UgY2FsbHMuCiAgICAg
dm9pZCogbV9tZW1vcnkgeyBudWxscHRyIH07Ci0gICAgdWludDY0X3QgbV9zaXplIHsgMCB9Owor
ICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbDsKICAgICBQ
YWdlQ291bnQgbV9tYXhpbXVtOwotICAgIHVpbnQ2NF90IG1fbWFwcGVkQ2FwYWNpdHkgeyAwIH07
CisgICAgc2l6ZV90IG1fbWFwcGVkQ2FwYWNpdHkgeyAwIH07CiAgICAgTW9kZSBtX21vZGUgeyBN
b2RlOjpCb3VuZHNDaGVja2luZyB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKaW5kZXggNmIwNjNkMzUxMjRlOTdh
ODNiMWYxZTA4NzNhNDEwN2M5ZjBlOWZkNS4uMjE2NzlkOTgyMGE1ZGNlM2ViYTFiYTcxNTE1OTYw
ZmQ2MDRkOGJmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpAQCAtNDgsNiArNDksOCBAQCBjb25zdCBQaW5uZWRS
ZWdpc3RlckluZm8mIFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkKICAgICAgICAgVmVjdG9yPHVu
c2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9OwogICAgICAgICB1bnNpZ25lZCByZW1haW5pbmdQ
aW5uZWRSZWdpc3RlcnMgPSBwaW5uZWRTaXplcy5zaXplKCkgKyAxOwogICAgICAgICBqc2NDYWxs
aW5nQ29udmVudGlvbigpLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5mb3JFYWNoKFsmXSAoUmVnIHJl
ZykgeworICAgICAgICAgICAgaWYgKCFyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVnLmdwcigpOwogICAgICAgICAgICAgaWYg
KCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgfHwgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJz
KCkuZ2V0KHJlZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzEsMTEgKzc0LDIyIEBA
IFBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXpl
UmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpCiB7CiB9CiAKLU1lbW9yeUluZm9ybWF0aW9uOjpNZW1v
cnlJbmZvcm1hdGlvbihQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sICBib29s
IGlzSW1wb3J0KQorTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwg
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9y
eTo6TW9kZT4gcmVjb21waWxlTW9kZSwgYm9vbCBpc0ltcG9ydCkKICAgICA6IG1faW5pdGlhbChp
bml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiAgICAgLCBtX2lzSW1wb3J0KGlzSW1w
b3J0KQogeworICAgIGlmICghaXNJbXBvcnQgJiYgIXJlY29tcGlsZU1vZGUpIHsKKyAgICAgICAg
bV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBN
ZW1vcnk6OlNpZ25hbGluZyk7CisgICAgICAgIGlmIChtX3Jlc2VydmVkTWVtb3J5KQorICAgICAg
ICAgICAgQVNTRVJUKCEhKm1fcmVzZXJ2ZWRNZW1vcnkpOworICAgIH0KKworICAgIGlmIChyZWNv
bXBpbGVNb2RlKQorICAgICAgICBtX21vZGUgPSAqcmVjb21waWxlTW9kZTsKKyAgICBlbHNlCisg
ICAgICAgIG1fbW9kZSA9IE1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUoKTsKKwogICAgIFJFTEVB
U0VfQVNTRVJUKCEhbV9pbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tYXhpbXVtIHx8
IG1fbWF4aW11bSA+PSBtX2luaXRpYWwpOwogICAgIEFTU0VSVCghISp0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKaW5kZXgg
NmU3ZjUyMTg5NDdlMDE2YjQ4ZmRmNjAxOWQzNjhhNTc1N2UzODViNy4uYzdkOGYzNGQ2MzVhY2Zl
MGU4MjM5NDhmMmY4OTBlOTRmYTM5YmI5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKQEAgLTI4LDcgKzI4LDkgQEAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiV2Fz
bU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVm
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewpAQCAtNTIsMTcgKzU0LDI0IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCEqdGhp
cyk7CiAgICAgfQogCi0gICAgTWVtb3J5SW5mb3JtYXRpb24oUGFnZUNvdW50IGluaXRpYWwsIFBh
Z2VDb3VudCBtYXhpbXVtLCBib29sIGlzSW1wb3J0KTsKKyAgICBNZW1vcnlJbmZvcm1hdGlvbihW
TSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxN
ZW1vcnk6Ok1vZGU+LCBib29sIGlzSW1wb3J0KTsKIAogICAgIFBhZ2VDb3VudCBpbml0aWFsKCkg
Y29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CiAgICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25z
dCB7IHJldHVybiBtX21heGltdW07IH0KKyAgICBib29sIGhhc1Jlc2VydmVkTWVtb3J5KCkgY29u
c3QgeyByZXR1cm4gbV9yZXNlcnZlZE1lbW9yeTsgfQorICAgIE1lbW9yeSYgdGFrZVJlc2VydmVk
TWVtb3J5KCkgeyBBU1NFUlQoaGFzUmVzZXJ2ZWRNZW1vcnkoKSk7IHJldHVybiAqbV9yZXNlcnZl
ZE1lbW9yeS5sZWFrUmVmKCk7IH0KKyAgICBNZW1vcnk6Ok1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgaXNJbXBvcnQoKSBjb25zdCB7IHJldHVybiBtX2lzSW1w
b3J0OyB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFt
X2luaXRpYWw7IH0KIAogcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciBzbyB3
ZSBjYW4gcGFzcyBNb2R1bGVJbmZvcm1hdGlvbiBhcyBjb25zdCBhbmQgc3RpbGwgYmUKKyAgICAv
LyBhYmxlIHRvIHRha2Ugb3duZXJzaGlwIG9mIHRoaXMuCisgICAgUmVmUHRyPE1lbW9yeT4gbV9y
ZXNlcnZlZE1lbW9yeTsKICAgICBQYWdlQ291bnQgbV9pbml0aWFsIHsgfTsKICAgICBQYWdlQ291
bnQgbV9tYXhpbXVtIHsgfTsKKyAgICBNZW1vcnk6Ok1vZGUgbV9tb2RlIHsgTWVtb3J5OjpNb2Rl
OjpCb3VuZHNDaGVja2luZyB9OwogICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZhbHNlIH07CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2Vy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmlu
ZGV4IDUxNzczZDA2ZTYyMDEyM2I1YWMwNDI2MmE5MDhiYWIwYmY4ZjE1OTkuLjUyMTE2NGZmNGM0
NmFiNGYxYTNjY2EzN2NkZTkzOWUxMmViNmJiYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0zMTYsNyArMzE2LDcgQEAgYXV0byBN
b2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxS
ZXN1bHQKICAgICBBU1NFUlQoaW5pdGlhbFBhZ2VDb3VudCk7CiAgICAgQVNTRVJUKCFtYXhpbXVt
UGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VDb3VudCk7CiAKLSAg
ICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKGluaXRpYWxQYWdl
Q291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1wb3J0KTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUt
Pm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKCptX3ZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhp
bXVtUGFnZUNvdW50LCBtX21vZGUsIGlzSW1wb3J0KTsKICAgICByZXR1cm4geyB9OwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKaW5kZXggNDFi
NTdmYzgyMGM0NWI5YjRlYzVmYTdjNjk1YmE1NmNhZmI4NGExMC4uOTRiYTE0ZTE1YTNmZGEzMTA0
ZTMzYmFjMDkzYzFmMWU4MWNmMjBjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVBhcnNlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTQzLDEyICs0NCw5IEBAIHN0cnVjdCBNb2R1
bGVQYXJzZXJSZXN1bHQgewogY2xhc3MgTW9kdWxlUGFyc2VyIDogcHVibGljIFBhcnNlcjxNb2R1
bGVQYXJzZXJSZXN1bHQ+IHsKIHB1YmxpYzoKIAotICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKKyAgICBNb2R1
bGVQYXJzZXIoVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3Vy
Y2VMZW5ndGgsIHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiBtb2RlKQogICAgICAgICA6IFBh
cnNlcih2bSwgc291cmNlQnVmZmVyLCBzb3VyY2VMZW5ndGgpCi0gICAgewotICAgIH0KLSAgICBN
b2R1bGVQYXJzZXIoVk0qIHZtLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZUJ1ZmZlcikK
LSAgICAgICAgOiBNb2R1bGVQYXJzZXIodm0sIHNvdXJjZUJ1ZmZlci5kYXRhKCksIHNvdXJjZUJ1
ZmZlci5zaXplKCkpCisgICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewogICAgIH0KIApAQCAt
NjgsNiArNjYsNyBAQCBwcml2YXRlOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBl
KTsKIAogICAgIE1vZHVsZVBhcnNlclJlc3VsdCBtX3Jlc3VsdDsKKyAgICBzdGQ6Om9wdGlvbmFs
PE1lbW9yeTo6TW9kZT4gbV9tb2RlIHsgc3RkOjpudWxsb3B0IH07CiAgICAgYm9vbCBtX2hhc1Rh
YmxlIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNw
cAppbmRleCA1OTgwYjUxZTg3NDIyMjM3NTVjZTBjM2RmMmMxNmIxZGU5ZWM4ZjEyLi40ODM1YWEy
OGYyY2FmN2EyMWM2YWM0YTE5M2MzNzcxZTU4MjhjYWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW4uY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiV2FzbUIzSVJH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxs
aW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKICNp
bmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZVBhcnNlci5oIgogI2lu
Y2x1ZGUgIldhc21WYWxpZGF0ZS5oIgpAQCAtNjEsMTQgKzYyLDE0IEBAIFBsYW46OlBsYW4oVk0q
IHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiB7CiB9CiAK
LWJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCitib29sIFBsYW46OnBhcnNlQW5k
VmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUp
CiB7CiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWU7CiAgICAgaWYgKHZlcmJvc2UgfHwgT3B0
aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCiAgICAgICAgIHN0YXJ0VGltZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOwogCiAgICAgewotICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2Vy
KG1fdm0sIG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCk7CisgICAgICAgIE1vZHVsZVBhcnNlciBt
b2R1bGVQYXJzZXIobV92bSwgbV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCByZWNvbXBpbGVNb2Rl
KTsKICAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9IG1vZHVsZVBhcnNlci5wYXJzZSgpOwogICAg
ICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7CiAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHBh
cnNlUmVzdWx0LmVycm9yKCk7CkBAIC0xMDksMTAgKzExMCwxMiBAQCBib29sIFBsYW46OnBhcnNl
QW5kVmFsaWRhdGVNb2R1bGUoKQogLy8gVGhlIHJlYXNvbiB0aGlzIGlzIE9LIGlzIHRoYXQgd2Ug
Z3VhcmFudGVlIHRoYXQgdGhlIG1haW4gdGhyZWFkIGRvZXNuJ3QgY29udGludWUgdW50aWwgYWxs
IHRocmVhZHMKIC8vIHRoYXQgY291bGQgdG91Y2ggaXRzIHN0YWNrIGFyZSBkb25lIGV4ZWN1dGlu
Zy4KIFNVUFBSRVNTX0FTQU4gCi12b2lkIFBsYW46OnJ1bigpCit2b2lkIFBsYW46OnJ1bihzdGQ6
Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gcmVjb21waWxlTW9kZSkKIHsKLSAgICBpZiAoIXBhcnNl
QW5kVmFsaWRhdGVNb2R1bGUoKSkKKyAgICBpZiAoIXBhcnNlQW5kVmFsaWRhdGVNb2R1bGUocmVj
b21waWxlTW9kZSkpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVjb21waWxlTW9kZSkKKyAg
ICAgICAgQVNTRVJUKG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tb2RlKCkgPT0gcmVjb21w
aWxlTW9kZSk7CiAKICAgICBhdXRvIHRyeVJlc2VydmVDYXBhY2l0eSA9IFt0aGlzXSAoYXV0byYg
dmVjdG9yLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogd2hhdCkgewogICAgICAgICBpZiAoVU5M
SUtFTFkoIXZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCA2OTgwYmRiYmJlMTdhNTE5NWM4YzVlMDM1ZWI0ZTZh
YTEwZDJjZjE1Li5kMDcwMzc1MjAzMmM5YWEwY2Q4NTg0MTdmYjE3MjZlN2ZiOWMzZGY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTQ5LDkgKzQ5LDkgQEAgcHVibGlj
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigpOwogCi0gICAgYm9vbCBwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKCk7CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHN0ZDo6b3B0
aW9uYWw8TWVtb3J5OjpNb2RlPiA9IHN0ZDo6bnVsbG9wdCk7CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHJ1bigpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0
aW9uYWw8TWVtb3J5OjpNb2RlPiA9IHN0ZDo6bnVsbG9wdCk7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0Kiwgc3RkOjpmdW5jdGlv
bjx2b2lkKHVuc2lnbmVkLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgSlNXZWJBc3NlbWJseUNhbGxl
ZSopPik7CiAKQEAgLTkyLDYgKzkyLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGTW92
ZShtX3dhc21FeGl0U3R1YnMpOwogICAgIH0KIAorICAgIE1lbW9yeTo6TW9kZSBtb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUoKTsgfQorCiBwcml2
YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZv
cm1hdGlvbjsKICAgICBWZWN0b3I8RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5PiBtX2Z1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKaW5kZXggYzI3NzEyYTEwZmZmYzhkZjNmMWViNjA2
YjA4Y2ZjOWYwN2Y4ZTM2Yi4uNTE3MTI3ODVmMjkzYjhmMTBiYTBkOTk3YzQ2YTAxZWI1OTdkNDhm
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNhbGxlZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDMsMTEgKzQ0LDEzIEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXYXNtOjpFbnRyeXBvaW50
JiYgZW50cnlwb2ludCkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAKICAgICBtX2Vu
dHJ5cG9pbnQgPSBXVEZNb3ZlKGVudHJ5cG9pbnQpOworICAgIFdhc206OnJlZ2lzdGVyQ29kZSh2
bSwgbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgp
LT5zdGFydCgpLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxl
TWVtb3J5KCktPmVuZCgpKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxlZSo+KGNlbGwpOworICAgIFdhc206OnVucmVn
aXN0ZXJDb2RlKCpjZWxsLT52bSgpLCB0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRp
b24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIHRoaXNPYmplY3QtPm1f
ZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5k
KCkpOwogICAgIHRoaXNPYmplY3QtPkpTV2ViQXNzZW1ibHlDYWxsZWU6On5KU1dlYkFzc2VtYmx5
Q2FsbGVlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjIxZjhhNWNjNjQ1ZjJl
MjViNzc0MTE3YmRhZjk4YWY0NzBkMzRhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCkBAIC0wLDAgKzEs
ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxl
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCBudWxscHRyLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spIH07CisKK0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBvd25lciwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0
b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiB3YXNtRXhpdFN0dWJzLCBXYXNtOjpNZW1vcnk6Ok1v
ZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCisgICAgOiBCYXNlKHZtLCB2bS53ZWJBc3Nl
bWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fY2FsbExpbmtJbmZvcyhXVEZN
b3ZlKGNhbGxMaW5rSW5mb3MpKQorICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1vdmUod2FzbUV4
aXRTdHVicykpCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fY2FsbGVlQ291bnQoY2FsbGVl
Q291bnQpCit7CisgICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBvd25lcik7CisgICAgbWVtc2V0
KGNhbGxlZXMoKSwgMCwgbV9jYWxsZWVDb3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJB
c3NlbWJseUNhbGxlZT4pICogMik7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNv
ZGVCbG9jayo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNv
ZGVCbG9jaygpOworfQorCitib29sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVu
KEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkKK3sKKyAgICBpZiAobW9kZSgpID09IFdhc206
Ok1lbW9yeTo6U2lnbmFsaW5nKQorICAgICAgICByZXR1cm4gbWVtb3J5LT5tZW1vcnkoKS5tb2Rl
KCkgPT0gbW9kZSgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxl
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9jYWxsZWVDb3Vu
dCAqIDI7IGkrKykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+Y2FsbGVlcygp
W2ldKTsKKworICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmdGhpc09iamVj
dC0+bV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgp
Cit7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogdGhpc09iamVjdCA9IGJpdHdpc2VfY2Fz
dDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oCisgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4o
dGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaywgbV91bmNvbmRp
dGlvbmFsRmluYWxpemVyKSk7CisgICAgZm9yIChhdXRvIGl0ZXIgPSB0aGlzT2JqZWN0LT5tX2Nh
bGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPnZp
c2l0V2VhaygqdGhpc09iamVjdC0+dm0oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXggZmJjMWNlYmZi
OWNiOGE1OWM5ZWFlNmU2ZGQ5OWZjNTU1ZjViMTNjYy4uMTI4MDI1ZTVjMDRmODljOTZmYWYzNTZh
ZjUxNDE2OGMxMzQwZjgyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDYgKzM4LDE4IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCit7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIC8vIFdlIGNyZWF0ZSBz
dHViIG1lbW9yaWVzIGV2ZW4gZm9yIG1vZHVsZXMgdGhhdCBzaG91bGQgZXZlbnR1YWxseSBnZXQg
YSBtZW1vcnkgc28gd2Ugd2FudCB0byBhdm9pZCByZWNvbXBsaW5nIHRoZXJlLgorICAgIGlmICht
ZW1vcnktPm1lbW9yeSgpKSB7CisgICAgICAgIGF1dG8gY29kZUJsb2NrID0gbV9jb2RlQmxvY2st
Pm1vZHVsZSgpLT5jb2RlQmxvY2sodm0sIGV4ZWMsIG1lbW9yeSk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsKTsKKyAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBj
b2RlQmxvY2spOworICAgIH0KKyAgICBtX21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7Cit9
CisKIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxl
LCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KQogewogICAg
IC8vIEZJWE1FOiBUaGVzZSBvYmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRy
eSB0byB0aHJvdyBPT00gaGVyZS4KQEAgLTY3LDcgKzc5LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9k
dWxlLAogICAgIG1fZ2xvYmFscyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1l
bW9yeVNpemUpOwogICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFN
ZW1vcnlTaXplKTsKIAotICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKKyAgICBt
X2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIG1vZHVsZS0+Y29kZUJsb2NrKCkpOwogICAgIG1fbW9k
dWxlTmFtZXNwYWNlT2JqZWN0LnNldCh2bSwgdGhpcywgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsK
ICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZXhwb3J0cyIp
LCBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIE5vbmUpOwogfQpAQCAtODMsNyArOTUsNyBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGUpOworICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX21vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9tZW1vcnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
dGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaAppbmRleCA5OWEyYzkwZjdlYTM1M2UzNmI2NTVhYmU1Y2RkNWM0OTgz
YzUzYTE4Li44OTIzZTE2NTBiZjMxNjVkYTk5MThlZjY5YzVjNTk2ZDI4MWQxYjY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3Qu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseVRhYmxlLmgiCiAKQEAgLTQ3LDEwICs0OCwxNiBAQCBwdWJsaWM6CiAKICAgICBERUNM
QVJFX0lORk87CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKQorICAgIEpTV2Vi
QXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9t
b2R1bGUpOwotICAgICAgICByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7CisgICAgICAgIEFTU0VSVCht
X2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+bW9kdWxlKCk7CisgICAg
fQorCisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9j
ay5nZXQoKTsKICAgICB9CiAKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiogaW1wb3J0RnVuY3Rp
b24odW5zaWduZWQgaWR4KQpAQCAtNzAsNyArNzcsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
SlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkg
eyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7IH0KKyAgICAvLyBDYWxsaW5nIHRoaXMg
bWlnaHQgdHJpZ2dlciBhIHJlY29tcGlsZS4KKyAgICB2b2lkIHNldE1lbW9yeShWTSYsIEV4ZWNT
dGF0ZSosIEpTV2ViQXNzZW1ibHlNZW1vcnkqKTsKKyAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbWVt
b3J5TW9kZSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KIAogICAgIEpT
V2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CiAgICAg
dm9pZCBzZXRUYWJsZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUpIHsgbV90YWJs
ZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsgfQpAQCAtMTA0LDcgKzExMyw3IEBAIHByb3RlY3RlZDoK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+
IG1fbW9kdWxlOworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2Nv
ZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9k
dWxlTmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5
PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRhYmxlPiBtX3RhYmxl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmNwcAppbmRleCBmNDI1M2I1YmZiODg2Y2VjZDlkNjQ1YjU4NjYxZTEzMzA5ZTIzZTIz
Li5hZjdmMjQ2YTc1OTE0MTEwM2MyNGM5ZjNlZWI1MDk3OTExYTcyNzZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcApA
QCAtMzcsOSArMzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkpIH07CiAK
LUpTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpNZW1vcnkmJiBtZW1vcnkpCitKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1vcnkpCiB7Ci0gICAgYXV0byogaW5z
dGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2
bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1lbW9yeSh2bSwgc3RydWN0dXJlLCBzdGQ6OmZvcndhcmQ8
V2FzbTo6TWVtb3J5PihtZW1vcnkpKTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZtLmhlYXApKSBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUobWVtb3J5KSk7CisgICAgaW5zdGFuY2Ut
Pm1fbWVtb3J5LT5jaGVjaygpOwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtNDksMTAgKzUwLDEzIEBAIFN0cnVjdHVyZSogSlNX
ZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogfQogCi1KU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206Ok1lbW9yeSYmIG1lbW9yeSkKK0pTV2ViQXNzZW1i
bHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1vcnkpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUp
CiAgICAgLCBtX21lbW9yeShXVEZNb3ZlKG1lbW9yeSkpCiB7CisgICAgQVNTRVJUKG1fbWVtb3J5
LT5yZWZDb3VudCgpID09IDEpOworICAgIG1fbWVtb3J5QmFzZSA9IG1fbWVtb3J5LT5tZW1vcnko
KTsKKyAgICBtX21lbW9yeVNpemUgPSBtX21lbW9yeS0+c2l6ZSgpOwogfQogCiBKU0FycmF5QnVm
ZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQpAQCAtNjAsMTIgKzY0LDEwIEBAIEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiAgICAgaWYgKG1fYnVmZmVyV3JhcHBlcikKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyV3JhcHBl
ci5nZXQoKTsKIAotICAgIGF1dG8gZGVzdHJ1Y3RvciA9IFtdICh2b2lkKikgewotICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUgdG8gZGVzdHJveSB0aGUgbWVtb3J5
LgotICAgICAgICAvLyBUaGUgQXJyYXlCdWZmZXIgYmFja2luZyB0aGUgSlNBcnJheUJ1ZmZlciBp
cyBvbmx5IG93bmVkIGJ5IHVzLAotICAgICAgICAvLyBzbyB3ZSBndWFyYW50ZWUgaXRzIGxpZmVj
eWNsZS4KLSAgICB9OwotICAgIG1fYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRl
cyhtZW1vcnkoKS0+bWVtb3J5KCksIG1lbW9yeSgpLT5zaXplKCksIFdURk1vdmUoZGVzdHJ1Y3Rv
cikpOworICAgIC8vIFdlIGNhbid0IHVzZSBhIHJlZiBoZXJlIHNpbmNlIGl0IGRvZXNuJ3QgaGF2
ZSBhIGNvcHkgY29uc3RydWN0b3IuLi4KKyAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnlS
ZWZQdHIgPSAmbV9tZW1vcnkuZ2V0KCk7CisgICAgYXV0byBkZXN0cnVjdG9yID0gW21lbW9yeVJl
ZlB0cl0gKHZvaWQqKSB7IH07CisgICAgbV9idWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlRnJv
bUJ5dGVzKG1lbW9yeSgpLm1lbW9yeSgpLCBtZW1vcnkoKS5zaXplKCksIFdURk1vdmUoZGVzdHJ1
Y3RvcikpOwogICAgIG1fYnVmZmVyV3JhcHBlci5zZXQodm0sIHRoaXMsIEpTQXJyYXlCdWZmZXI6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5tX2FycmF5QnVmZmVyU3RydWN0dXJlLmdldCgpLCBt
X2J1ZmZlci5nZXQoKSkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fYnVmZmVyV3JhcHBlcik7CiAg
ICAgcmV0dXJuIG1fYnVmZmVyV3JhcHBlci5nZXQoKTsKQEAgLTc2LDcgKzc4LDcgQEAgV2FzbTo6
UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3coRXhlY1N0YXRlKiBleGVjLCB1aW50
MzJfdCBkZWx0YSwgYm9vbAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBXYXNtOjpQYWdlQ291bnQg
b2xkUGFnZUNvdW50ID0gbWVtb3J5KCktPnNpemVJblBhZ2VzKCk7CisgICAgV2FzbTo6UGFnZUNv
dW50IG9sZFBhZ2VDb3VudCA9IG1lbW9yeSgpLnNpemVJblBhZ2VzKCk7CiAKICAgICBpZiAoIVdh
c206OlBhZ2VDb3VudDo6aXNWYWxpZChkZWx0YSkpIHsKICAgICAgICAgaWYgKHNob3VsZFRocm93
RXhjZXB0aW9uc09uRmFpbHVyZSkKQEAgLTkyLDEyICs5NCwxNiBAQCBXYXNtOjpQYWdlQ291bnQg
SlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHRh
LCBib29sCiAgICAgfQogCiAgICAgaWYgKGRlbHRhKSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9
IG1lbW9yeSgpLT5ncm93KG5ld1NpemUpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBtZW1vcnko
KS5ncm93KG5ld1NpemUpOwogICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIEFT
U0VSVChtX21lbW9yeUJhc2UgPT0gbWVtb3J5KCkubWVtb3J5KCkpOworICAgICAgICAgICAgQVNT
RVJUKG1fbWVtb3J5U2l6ZSA9PSBtZW1vcnkoKS5zaXplKCkpOwogICAgICAgICAgICAgaWYgKHNo
b3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKICAgICAgICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKICAg
ICAgICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKICAgICAgICAgfQorICAgICAgICBt
X21lbW9yeUJhc2UgPSBtZW1vcnkoKS5tZW1vcnkoKTsKKyAgICAgICAgbV9tZW1vcnlTaXplID0g
bWVtb3J5KCkuc2l6ZSgpOwogICAgIH0KIAogICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgb3V0IHRo
ZSBvbGQgYXJyYXkgYnVmZmVyIGJlY2F1c2UgaXQgbWlnaHQgbm93IGJlIHBvaW50aW5nCkBAIC0x
MTAsNiArMTE2LDcgQEAgV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3co
RXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbAogICAgICAgICBtX2J1ZmZlcldy
YXBwZXIuY2xlYXIoKTsKICAgICB9CiAKKyAgICBtZW1vcnkoKS5jaGVjaygpOwogICAgIHJldHVy
biBvbGRQYWdlQ291bnQ7CiB9CiAKQEAgLTEyMywxMyArMTMwLDYgQEAgdm9pZCBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBhdXRvIG1lbW9yeSA9IHN0
YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihjZWxsKTsKICAgICBBU1NFUlQobWVtb3J5
LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAgIFZNJiB2bSA9ICptZW1vcnktPnZtKCk7Ci0K
LSAgICBpZiAobWVtb3J5LT5tX2J1ZmZlcikgewotICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
IGR1bW15Q29udGVudHM7Ci0gICAgICAgIG1lbW9yeS0+bV9idWZmZXItPnRyYW5zZmVyVG8odm0s
IGR1bW15Q29udGVudHMpOwotICAgICAgICBtZW1vcnktPm1fYnVmZmVyID0gbnVsbHB0cjsKLSAg
ICB9CiAKICAgICBtZW1vcnktPkpTV2ViQXNzZW1ibHlNZW1vcnk6On5KU1dlYkFzc2VtYmx5TWVt
b3J5KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmgKaW5kZXggZmZmMTQxNTcwMmNmZWFkNmNlOTIyMTQ5MDJkZGI4YzZiNDRk
MjY4MC4uMGViMTg4ZDYwZDVlMzIwMWFmNjVjOGNmOWQyZjg4NTY5OWM4YTdjMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaApA
QCAtNDEsMjUgKzQxLDI3IEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlNZW1vcnkgOiBwdWJsaWMgSlNE
ZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVP
YmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5KiBjcmVhdGUoVk0m
LCBTdHJ1Y3R1cmUqLCBXYXNtOjpNZW1vcnkmJik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlN
ZW1vcnkqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpNZW1vcnk+JiYpOwogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBXYXNtOjpNZW1vcnkqIG1lbW9y
eSgpIHsgcmV0dXJuICZtX21lbW9yeTsgfQorICAgIFdhc206Ok1lbW9yeSYgbWVtb3J5KCkgeyBy
ZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBKU0FycmF5QnVmZmVyKiBidWZmZXIoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCopOwogICAgIFdhc206OlBhZ2VDb3VudCBncm93KEV4ZWNTdGF0ZSos
IHVpbnQzMl90IGRlbHRhLCBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7CiAK
LSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1fbWVtb3J5KSArIFdhc206Ok1lbW9yeTo6b2Zm
c2V0T2ZNZW1vcnkoKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1fbWVtb3J5KSArIFdh
c206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnks
IG1fbWVtb3J5QmFzZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5TWVtb3J5LCBtX21lbW9yeVNpemUp
OyB9CiAKLXByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJl
KiwgV2FzbTo6TWVtb3J5JiYpOworcHJpdmF0ZToKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZN
JiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1lbW9yeT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgV2FzbTo6
TWVtb3J5IG1fbWVtb3J5OworICAgIHZvaWQqIG1fbWVtb3J5QmFzZTsKKyAgICBzaXplX3QgbV9t
ZW1vcnlTaXplOworICAgIFJlZjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdyaXRlQmFy
cmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CiAgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBtX2J1ZmZlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IDA4ZmE1ODQ2MjhmMDdkMmQ4YzhjM2Iy
Yjc4ZDExNTgwYzRmMjgxNzYuLjU2ZjIwYjQzNTA2OWYzZmI1ZjBiNjkxMjJjMzcyOTgxYTBjNWY1
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuY3BwCkBAIC0zMCwxOCArMzAsNDYgQEAKIAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3Iu
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1h
dC5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENs
YXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1
bGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNz
ZW1ibHlNb2R1bGUpIH07CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8
V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24sIEJhZzxDYWxsTGlu
a0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgd2Fz
bUV4aXRTdHVicywgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlLCB1bnNpZ25lZCBjYWxs
ZWVDb3VudCkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1
aWxkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpQbGFuJiBwbGFuLCBz
dGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeTo6TW9kZT4gbW9kZSkKIHsKLSAgICBhdXRvKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZt
LmhlYXAsIGFsbG9jYXRpb25TaXplKGNhbGxlZUNvdW50KSkpIEpTV2ViQXNzZW1ibHlNb2R1bGUo
dm0sIHN0cnVjdHVyZSwgc3RkOjpmb3J3YXJkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbj4+KG1vZHVsZUluZm9ybWF0aW9uKSwgc3RkOjpmb3J3YXJkPEJhZzxDYWxsTGlu
a0luZm8+PihjYWxsTGlua0luZm9zKSwgc3RkOjpmb3J3YXJkPFZlY3RvcjxXYXNtOjpXYXNtRXhp
dFN0dWJzPj4od2FzbUV4aXRTdHVicyksIGNhbGxlZUNvdW50KTsKLSAgICBpbnN0YW5jZS0+Zmlu
aXNoQ3JlYXRpb24odm0sIGV4cG9ydFN5bWJvbFRhYmxlKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgLy8gT24gZmFpbHVyZSwgYSBuZXcgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yIGlzIHRocm93bi4KKyAgICBwbGFuLnJ1bihtb2RlKTsKKyAgICBpZiAo
cGxhbi5mYWlsZWQoKSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3Jl
YXRlSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihleGVjLCB2bSwgcGxhbi5lcnJvck1lc3NhZ2Uo
KSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKG1vZGUpCisgICAg
ICAgIEFTU0VSVCgqbW9kZSA9PSBwbGFuLm1vZGUoKSk7CisKKyAgICB1bnNpZ25lZCBjYWxsZWVD
b3VudCA9IHBsYW4uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCk7CisgICAgYXV0byogY29kZUJsb2Nr
ID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCB0aGlzLCBwbGFuLnRha2VDYWxs
TGlua0luZm9zKCksIHBsYW4udGFrZVdhc21FeGl0U3R1YnMoKSwgcGxhbi5tb2RlKCksIGNhbGxl
ZUNvdW50KTsKKworICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoZXhlYy0+anNDYWxsZWUoKS0+
Z2xvYmFsT2JqZWN0KCksCisgICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSog
d2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0SlNFbnRy
eXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAg
ICAgICAgIGNvZGVCbG9jay0+c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4
LCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBjb2RlQmxv
Y2s7Cit9CisKK0pTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0
ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQ4X3Qq
IHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKQoreworICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2Vi
QXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSk7CisKKyAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24odm0sIGV4ZWMsIHNvdXJjZSwgYnl0ZVNpemUpOwogICAgIHJldHVybiBpbnN0YW5jZTsK
IH0KIApAQCAtNTAsMjEgKzc4LDYxIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJiBtb2R1bGVJbmZv
cm1hdGlvbiwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6
V2FzbUV4aXRTdHVicz4mJiB3YXNtRXhpdFN0dWJzLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pT
V2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fbW9kdWxlSW5m
b3JtYXRpb24oV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlvbikpCi0gICAgLCBtX2NhbGxMaW5rSW5m
b3MoV1RGTW92ZShjYWxsTGlua0luZm9zKSkKLSAgICAsIG1fd2FzbUV4aXRTdHVicyhXVEZNb3Zl
KHdhc21FeGl0U3R1YnMpKQotICAgICwgbV9jYWxsZWVDb3VudChjYWxsZWVDb3VudCkKIHsKLSAg
ICBtZW1zZXQoY2FsbGVlcygpLCAwLCBtX2NhbGxlZUNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikgKiAyKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5TW9k
dWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJs
ZSkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9j
ayhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KQor
eworICAgIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlID0gbWVtb3J5LT5tZW1vcnkoKS5tb2RlKCk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2FzbTo6TWVtb3J5OjpOdW1iZXJPZk1v
ZGVzOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2Nrc1tpXSAmJiBtX2NvZGVCbG9ja3Nb
aV0tPmlzU2FmZVRvUnVuKG1lbW9yeSkpCisgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tz
W2ldLmdldCgpOworICAgIH0KKworICAgIEFTU0VSVCghbV9jb2RlQmxvY2tzW21vZGVdKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgLy8gV2UgZG9uJ3Qg
aGF2ZSBhIGNvZGUgYmxvY2sgZm9yIHRoaXMgbW9kZSwgd2UgbmVlZCB0byByZWNvbXBpbGUuLi4K
KyAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9zb3VyY2VC
dWZmZXItPmRhdGEoKSksIG1fc291cmNlQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworCisgICAgYXV0
byogY29kZUJsb2NrID0gYnVpbGRDb2RlQmxvY2sodm0sIGV4ZWMsIHBsYW4sIG1vZGUpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgQVNTRVJUKHBsYW4u
ZXhwb3J0cygpLnNpemUoKSA9PSBtX2V4cG9ydFN5bWJvbFRhYmxlLT5zaXplKCkpOworICAgIGlm
ICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGZvciAoYXV0byYgZXhwIDogcGxhbi5leHBv
cnRzKCkpCisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGV4cCwgbV9leHBvcnRTeW1ib2xUYWJs
ZS0+Y29udGFpbnMoZXhwLmZpZWxkLmltcGwoKSkpOworICAgIH0KKworICAgIEFTU0VSVChtb2Rl
ID09IGNvZGVCbG9jay0+bW9kZSgpKTsKKyAgICBtX2NvZGVCbG9ja3NbbW9kZV0uc2V0KHZtLCB0
aGlzLCBjb2RlQmxvY2spOworICAgIHJldHVybiBjb2RlQmxvY2s7Cit9CisKK3ZvaWQgSlNXZWJB
c3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVp
bnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworCisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFdhc206OlBsYW4gcGxhbigmdm0s
IHNvdXJjZSwgYnl0ZVNpemUpOworCisgICAgYXV0byogY29kZUJsb2NrID0gYnVpbGRDb2RlQmxv
Y2sodm0sIGV4ZWMsIHBsYW4pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsKTsKKwor
ICAgIC8vIE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0
dXJuZWQgd2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUgdmFsaWRhdGVkIEFzdC5tb2R1bGUuCisg
ICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZSh2
bSk7CisgICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4cG9ydHMoKSkgeworICAgICAgICBhdXRv
IG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5vTG9ja2lu
Z05lY2Vzc2FyeSk7CisgICAgICAgIGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVj
ZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZz
ZXQpKSk7CisgICAgfQorCisgICAgbV9zb3VyY2VCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KHNvdXJjZSwgYnl0ZVNpemUpOworICAgIG1fbW9kdWxlSW5mb3JtYXRpb24gPSBwbGFuLnRha2VN
b2R1bGVJbmZvcm1hdGlvbigpOwogICAgIG1fZXhwb3J0U3ltYm9sVGFibGUuc2V0KHZtLCB0aGlz
LCBleHBvcnRTeW1ib2xUYWJsZSk7CisgICAgbV9jb2RlQmxvY2tzW2NvZGVCbG9jay0+bW9kZSgp
XS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVs
ZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC03OSwxOCArMTQ3LDggQEAgdm9pZCBKU1dlYkFz
c2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXhwb3J0U3ltYm9sVGFibGUpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX2NhbGxlZUNvdW50ICogMjsg
aSsrKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5jYWxsZWVzKClbaV0pOwot
Ci0gICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZ0aGlzT2JqZWN0LT5tX3Vu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIpOwotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OlVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKLXsKLSAgICBK
U1dlYkFzc2VtYmx5TW9kdWxlKiB0aGlzT2JqZWN0ID0gYml0d2lzZV9jYXN0PEpTV2ViQXNzZW1i
bHlNb2R1bGUqPigKLSAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9P
RkZTRVRPRihKU1dlYkFzc2VtYmx5TW9kdWxlLCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpKTsK
LSAgICBmb3IgKGF1dG8gaXRlciA9IHRoaXNPYmplY3QtPm1fY2FsbExpbmtJbmZvcy5iZWdpbigp
OyAhIWl0ZXI7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+dmlzaXRXZWFrKCp0aGlzT2JqZWN0
LT52bSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2FzbTo6TWVtb3J5OjpOdW1i
ZXJPZk1vZGVzOyArK2kpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29k
ZUJsb2Nrc1tpXSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDdlMDUxZjU3
MjI0MjQ2OGE2NjQxOTAzMWE4ODk1YzYxMzZlMzA4NzYuLjk4ZmRlYjQ0ZjZkMjM1OWZkNmM3Nzg5
OTIyMjU1NjJjZGVkOWZhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiSlNE
ZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgogI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CkBAIC0zNyw4NSArMzcsNDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIFBsYW47Cit9CisKIGNsYXNzIFN5
bWJvbFRhYmxlOworY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeTsKIAogY2xhc3MgSlNXZWJBc3Nl
bWJseU1vZHVsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbj4mJiwgQmFnPENhbGxMaW5rSW5mbz4mJiwgVmVjdG9yPFdhc206
Oldhc21FeGl0U3R1YnM+JiYsIFN5bWJvbFRhYmxlKiwgdW5zaWduZWQpOworICAgIHN0YXRpYyBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1
aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERF
Q0xBUkVfSU5GTzsKIAogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJ
bmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuICptX21vZHVsZUluZm9ybWF0aW9uLmdldCgpOyB9
CisgICAgV2FzbTo6TWVtb3J5JiB0YWtlUmVzZXJ2ZWRNZW1vcnkoKSB7IHJldHVybiBtX21vZHVs
ZUluZm9ybWF0aW9uLT5tZW1vcnkudGFrZVJlc2VydmVkTWVtb3J5KCk7IH0KICAgICBTeW1ib2xU
YWJsZSogZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4cG9ydFN5bWJvbFRh
YmxlLmdldCgpOyB9CiAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZy
b21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICB9Ci0gICAgdW5z
aWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVi
cy5zaXplKCk7IH0KLQotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQotICAg
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9u
SW1wb3J0Q291bnQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25J
bmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICByZXR1cm4gY2FsbGVlcygp
W2NhbGxlZUluZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3
YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rp
b25JbmRleFNwYWNlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRl
eFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxl
ZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAg
ICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0uZ2V0KCk7Ci0g
ICAgfQotCi0gICAgdm9pZCBzZXRKU0VudHJ5cG9pbnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBj
YWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKQotICAgIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgY2Fs
bGVlcygpW2NhbGxlZUluZGV4XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7Ci0gICAgfQogCi0gICAg
dm9pZCBzZXRXYXNtRW50cnlwb2ludENhbGxlZShWTSYgdm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4
LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICBjYWxsZWVzKClbY2Fs
bGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7Ci0gICAgfQor
ICAgIC8vIFJldHVybnMgdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIG1vZHVsZSB3YXMgb3JpZ2lu
YWxseSBjb21waWxlZCBleHBlY3RpbmcgdG8gdXNlLiBUaGlzIHdvbid0IG5lZWQgdG8gcmVjb21w
aWxlLgorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1f
Y29kZUJsb2Nrc1ttX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpXS5nZXQoKTsgfQor
ICAgIC8vIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNvZGUgYmxvY2sgZm9yIHRoZSBnaXZlbiBt
ZW1vcnksIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSByZWNvbXBpbGUuCisgICAgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayogY29kZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9y
eSopOwogCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVl
cygpKTsKLSAgICB9Citwcml2YXRlOgorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGJ1aWxk
Q29kZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiwgV2FzbTo6UGxhbiYsIHN0ZDo6b3B0aW9uYWw8V2Fz
bTo6TWVtb3J5OjpNb2RlPiBtb2RlID0gc3RkOjpudWxsb3B0KTsKIAotcHJvdGVjdGVkOgotICAg
IEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb24+JiYsIEJhZzxDYWxsTGlua0luZm8+JiYsIFZlY3RvcjxXYXNt
OjpXYXNtRXhpdFN0dWJzPiYmLCB1bnNpZ25lZCBjYWxsZWVDb3VudCk7Ci0gICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIFN5bWJvbFRhYmxlKik7CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZShW
TSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUq
LCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkNhbGxl
ZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KT4oc2l6ZW9mKEpTV2ViQXNzZW1i
bHlNb2R1bGUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVu
c2lnbmVkIG51bUNhbGxlZXMpCi0gICAgewotICAgICAgICByZXR1cm4gb2Zmc2V0T2ZDYWxsZWVz
KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIG51bUNhbGxl
ZXMgKiAyOwotICAgIH0KLQotICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJs
aWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsgCi0gICAgICAgIHZvaWQgZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKLSAgICB9OwotCi0gICAgVW5jb25kaXRpb25hbEZp
bmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBtX3NvdXJjZUJ1ZmZlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3Jt
YXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247Ci0gICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxs
TGlua0luZm9zOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBvcnRTeW1ib2xU
YWJsZTsKLSAgICBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4gbV93YXNtRXhpdFN0dWJzOwot
ICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpNZW1vcnk6Ok51bWJlck9mTW9kZXNdOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IDVhZTgxN2Y0ZmFiNDkyOTRh
NTYzNjNiMDVjMjAxMTkxMWIzYmNhM2UuLjA0ZWQ2NjYwZWUxZWQzNzMxZGRlY2VkZWM5OTQwZDMx
MDMwZjkxZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC01Niw2ICs1Niw4IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlv
bi0+c2lnbmF0dXJlSW5kZXgoKTsKICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVy
ZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7
CiAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IHdlIHRoaW5rIHdlIGFyZSBnb2lu
ZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBvbmUgd2UgZXhwZWN0LgorICAgIEFTU0VSVCh3YXNt
RnVuY3Rpb24tPmluc3RhbmNlKCktPmNvZGVCbG9jaygpLT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rp
b24tPmluc3RhbmNlKCktPm1lbW9yeSgpKSk7CiAgICAgewogICAgICAgICAvLyBDaGVjayBpZiB3
ZSBoYXZlIGEgZGlzYWxsb3dlZCBJNjQgdXNlLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
LmNwcAppbmRleCA3NjNkYzQ5NGNlNWE0NzgyZDZlNjg0N2Y4MjI1NjYxYjM1YmRhN2FiLi4wOGVh
OWUwMDY1MDUzNTlhZDlhODUzNmM1OWNiMTYyZmUzOGZlMmU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5jcHAKQEAgLTg0LDExICs4NCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4
CiAKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpjcmVhdGUodm0sIGluc3RhbmNlU3RydWN0dXJlLCBqc01vZHVsZSwgbW9kdWxlUmVj
b3JkLT5nZXRNb2R1bGVOYW1lc3BhY2UoZXhlYykpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgewotICAgICAgICAvLyBBbHdheXMg
c3RhcnQgd2l0aCBhIGR1bW15IE1lbW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2
b2lkIGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5u
ZWQgcmVnaXN0ZXJzLgotICAgICAgICBXYXNtOjpNZW1vcnkgbWVtb3J5OwotICAgICAgICBpbnN0
YW5jZS0+c2V0TWVtb3J5KHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RG
TW92ZShtZW1vcnkpKSk7Ci0gICAgfQorCiAKICAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFu
ZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQg
b2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxl
IG9iamVjdHMsIHJlc3BlY3RpdmVseS4KICAgICAvLyBMZXQgaW1wb3J0cyBiZSBhbiBpbml0aWFs
bHktZW1wdHkgbGlzdCBvZiBleHRlcm5hbCB2YWx1ZXMuCkBAIC0xNzgsMTIgKzE3NCwxMiBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5
SW5zdGFuY2UoRXhlY1N0YXRlKiBleAogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBh
biBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKSkpKTsKIAogICAgICAgICAgICAgV2Fz
bTo6UGFnZUNvdW50IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5p
bml0aWFsKCk7Ci0gICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1l
bW9yeS0+bWVtb3J5KCktPmluaXRpYWwoKTsKKyAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBh
Y3R1YWxJbml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS5pbml0aWFsKCk7CiAgICAgICAgICAgICBp
ZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKICAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0
ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGlt
cG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpKTsKIAogICAg
ICAgICAgICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZv
cm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNv
dW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLT5tYXhpbXVtKCk7CisgICAgICAg
ICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgp
Lm1heGltdW0oKTsKICAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pIHsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBkaWQgbm90
IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikp
KSk7CkBAIC0xOTQsOSArMTkwLDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBv
cnRzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGlt
dW0nIikpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVu
ZCB2LltbTWVtb3J5XV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1v
cnkodm0sIG1lbW9yeSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVj
LCBtZW1vcnkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsKQEAgLTIzNSwxMiArMjMzLDE3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5t
ZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKICAgICAgICAgICAgIC8vIFdl
IGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KLSAgICAgICAg
ICAgIGJvb2wgZmFpbGVkOwotICAgICAgICAgICAgV2FzbTo6TWVtb3J5IG1lbW9yeShtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4
aW11bSgpLCBmYWlsZWQpOwotICAgICAgICAgICAgaWYgKGZhaWxlZCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKLSAgICAgICAgICAgIGluc3RhbmNlLT5z
ZXRNZW1vcnkodm0sCi0gICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUo
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5
PiBtZW1vcnk7CisgICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lmhhc1Jl
c2VydmVkTWVtb3J5KCkpCisgICAgICAgICAgICAgICAgbWVtb3J5ID0gYWRvcHRSZWYoanNNb2R1
bGUtPnRha2VSZXNlcnZlZE1lbW9yeSgpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKTsK
KyAgICAgICAgICAgICAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnN0
YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLAorICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJs
eU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqbWVtb3J5LmxlYWtSZWYoKSkpKTsKKyAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI2Myw2ICsyNjYsMTIgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNT
dGF0ZSogZXgKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICghaW5zdGFuY2UtPm1lbW9yeSgp
KSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZHVtbXkgbWVtb3J5LCBzbyB0aGF0
IHdhc20gLT4gd2FzbSB0aHVua3MgYXZvaWQgY2hlY2tpbmcgZm9yIGEgbnVsbHB0ciBNZW1vcnkg
d2hlbiB0cnlpbmcgdG8gc2V0IHBpbm5lZCByZWdpc3RlcnMuCisgICAgICAgIGluc3RhbmNlLT5z
ZXRNZW1vcnkodm0sIGV4ZWMsIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9w
dFJlZigqKG5ldyBXYXNtOjpNZW1vcnkoKSkpKSk7CisKKyAgICB9CisKICAgICAvLyBHbG9iYWxz
CiAgICAgewogICAgICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBtb2R1bGVJbmZvcm1h
dGlvbi5maXJzdEludGVybmFsR2xvYmFsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKaW5k
ZXggNmM4ODdhZjU5N2E4NjUzMjljZmI0M2Y1ZWRiNDdiNDFlNjYwOWVjOC4uNTExMjllMzEwMTJm
MGMxYjU0MmFjOTFlODk5NGU0MjlkNTc1ZThkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5j
cHAKQEAgLTk2LDEyICs5NiwxMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICB9
CiAgICAgfQogCi0gICAgYm9vbCBmYWlsZWQ7Ci0gICAgV2FzbTo6TWVtb3J5IG1lbW9yeShpbml0
aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBmYWlsZWQpOwotICAgIGlmIChmYWlsZWQp
CisgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUo
dm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQpOworICAgIGlmICghbWVtb3J5
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKIAotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIFdURk1vdmUo
bWVtb3J5KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1lbW9y
eTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVt
b3J5U3RydWN0dXJlKCksIGFkb3B0UmVmKCptZW1vcnkubGVha1JlZigpKSkpOwogfQogCiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1lbW9yeShF
eGVjU3RhdGUqIHN0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAppbmRleCA4MTI5NTky
M2M3YWRjYTJkZTYwYmVjYzE5M2ZhY2U5ODJmNDVmZDIyLi5hOTQwZThkZmYwY2JlYTVmZGYwODI5
OTBhNTdhZDhkOGZlY2MxNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApAQCAtODAs
MzEgKzgwLDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVN
b2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSwgU3RydWN0dXJlKgogICAgIHVpbnQ4X3QqIGJhc2UgPSBn
ZXRXYXNtQnVmZmVyRnJvbVZhbHVlKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIGJ5dGVPZmZz
ZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0g
ICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKLSAg
ICAvLyBPbiBmYWlsdXJlLCBhIG5ldyBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IgaXMgdGhyb3du
LgotICAgIHBsYW4ucnVuKCk7Ci0gICAgaWYgKHBsYW4uZmFpbGVkKCkpCi0gICAgICAgIHJldHVy
biB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlDb21waWxl
RXJyb3Ioc3RhdGUsIHZtLCBwbGFuLmVycm9yTWVzc2FnZSgpKSk7Ci0KLSAgICAvLyBPbiBzdWNj
ZXNzLCBhIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUgb2JqZWN0IGlzIHJldHVybmVkIHdpdGggW1tN
b2R1bGVdXSBzZXQgdG8gdGhlIHZhbGlkYXRlZCBBc3QubW9kdWxlLgotCi0gICAgLy8gVGhlIGV4
cG9ydCBzeW1ib2wgdGFibGUgaXMgdGhlIHNhbWUgZm9yIGFsbCBJbnN0YW5jZXMgb2YgYSBNb2R1
bGUuCi0gICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNy
ZWF0ZSh2bSk7Ci0gICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4cG9ydHMoKSkgewotICAgICAg
ICBhdXRvIG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5v
TG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgICAgIGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2Nr
aW5nTmVjZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNl
dChvZmZzZXQpKSk7Ci0gICAgfQotCi0gICAgLy8gT25seSB3YXNtLWludGVybmFsIGZ1bmN0aW9u
cyBoYXZlIGEgY2FsbGVlLCBzdHVicyB0byBKUyBkbyBub3QuCi0gICAgdW5zaWduZWQgY2FsbGVl
Q291bnQgPSBwbGFuLmludGVybmFsRnVuY3Rpb25Db3VudCgpOwotICAgIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIHJlc3VsdCA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgc3RydWN0dXJl
LCBwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpLCBwbGFuLnRha2VDYWxsTGlua0luZm9zKCks
IHBsYW4udGFrZVdhc21FeGl0U3R1YnMoKSwgZXhwb3J0U3ltYm9sVGFibGUsIGNhbGxlZUNvdW50
KTsKLSAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKHN0YXRlLT5qc0NhbGxlZSgpLT5nbG9iYWxP
YmplY3QoKSwgCi0gICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0SlNFbnRyeXBvaW50Q2Fs
bGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCB3YXNtRW50cnlw
b2ludENhbGxlZSk7Ci0gICAgICAgIH0pOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZtLCBzdGF0ZSwgc3RydWN0dXJlLCBiYXNl
ICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwogfQogCiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5jcHAKaW5kZXggZjE3ZjI5ZGY5ODUwYzNjOGY0NjRhMmZlMTYwNmY3NGRh
Y2UwMDIzYS4uNjIzMmMyNDFjZTQyZGNmNDM3NTgwYTc3NGE3MTliODcxMDRjYjE2OCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcApAQCAtOTIsMTAgKzkyLDExIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
IAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IGluc3RhbmNlLT5tb2R1bGUoKTsK
KyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpbnN0YW5jZS0+Y29kZUJs
b2NrKCk7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0
aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwogCiAgICAgU3ltYm9sVGFibGUqIGV4
cG9ydFN5bWJvbFRhYmxlID0gbW9kdWxlLT5leHBvcnRTeW1ib2xUYWJsZSgpOwotICAgIHVuc2ln
bmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQgPSBtb2R1bGUtPmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsK
KyAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50ID0gY29kZUJsb2NrLT5mdW5jdGlvbklt
cG9ydENvdW50KCk7CiAKICAgICAvLyBGSVhNRSB3aXJlIHVwIHRoZSBpbXBvcnRzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MTE4CiAKQEAgLTExNiw4ICsxMTcs
OCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdAogICAgICAgICAgICAgLy8gICAgIGEuIExldCBm
dW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMu
CiAgICAgICAgICAgICAvLyAgICAgYi4gQXBwZW5kIGZ1bmMgdG8gZnVuY3MuCiAgICAgICAgICAg
ICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCi0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IG1vZHVsZS0+d2FzbUVudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOworICAgICAgICAgICAgSlNX
ZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOworICAgICAg
ICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxv
Y2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZElu
ZGV4KTsKICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRl
eCk7CiAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206
OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAg
ICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgZXhw
LmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlw
b2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwpAQCAtMTc4LDEyICsxNzksMTIgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3QKICAgICAgICAgLy8gVGhlIHN0YXJ0IGZ1bmN0aW9uIG11c3Qgbm90
IHRha2UgYW55IGFyZ3VtZW50cyBvciByZXR1cm4gYW55dGhpbmcuIFRoaXMgaXMgZW5mb3JjZWQg
YnkgdGhlIHBhcnNlci4KICAgICAgICAgQVNTRVJUKCFzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQo
KSk7CiAgICAgICAgIEFTU0VSVChzaWduYXR1cmUtPnJldHVyblR5cGUoKSA9PSBXYXNtOjpWb2lk
KTsKLSAgICAgICAgaWYgKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlIDwgbW9kdWxlLT5mdW5jdGlv
bkltcG9ydENvdW50KCkpIHsKKyAgICAgICAgaWYgKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlIDwg
Y29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKICAgICAgICAgICAgIEpTQ2VsbCog
c3RhcnRGdW5jdGlvbiA9IGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihzdGFydEZ1bmN0aW9uSW5k
ZXhTcGFjZSktPmdldCgpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhp
cywgc3RhcnRGdW5jdGlvbik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwotICAg
ICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1
bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0
aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5
cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBv
aW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7
CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKSwgInN0YXJ0IiwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9p
bnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5z
ZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgfQpAQCAtMjA3LDYgKzIwOCw3IEBAIEpT
VmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogc3RhdGUp
CiAKICAgICB7CiAgICAgICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IG1faW5zdGFu
Y2UtPm1vZHVsZSgpOworICAgICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtX2luc3RhbmNlLT5jb2RlQmxvY2soKTsKICAgICAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5m
b3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
OwogICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gbV9pbnN0YW5jZS0+dGFibGUo
KTsKICAgICAgICAgZm9yIChjb25zdCBXYXNtOjpFbGVtZW50JiBlbGVtZW50IDogbW9kdWxlSW5m
b3JtYXRpb24uZWxlbWVudHMpIHsKQEAgLTIyOSwxMyArMjMxLDEzIEBAIEpTVmFsdWUgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogc3RhdGUpCiAgICAgICAgICAg
ICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMAogICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlc1tpXTsKLSAgICAgICAg
ICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8IG1vZHVsZS0+ZnVuY3Rpb25JbXBvcnRDb3VudCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1bmN0
aW9uSW1wb3J0Q291bnQoKSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZGVjb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dWTVJhbmdlRXJyb3Ioc3RhdGUs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMgc2V0dGluZyB0aGUgdGFibGUgdmFsdWUg
d2l0aCBhbiBpbXBvcnQuIFRoaXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4gRklYTUUuIikpKTsK
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgICAgICAgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2st
PmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7
CisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxs
ZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVy
ZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25h
dHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2F5IHdlIGV4cG9ydCBsb2Nh
bCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jaXRvbiBpbmRleCAwLgpAQCAtMjU1LDggKzI1Nyw4IEBA
IEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogc3Rh
dGUpCiAgICAgICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpTZWdtZW50OjpQdHI+JiBkYXRhID0gbV9p
bnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCkuZGF0YTsKICAgICAgICAgSlNX
ZWJBc3NlbWJseU1lbW9yeSoganNNZW1vcnkgPSBtX2luc3RhbmNlLT5tZW1vcnkoKTsKICAgICAg
ICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgdWludDhfdCogbWVtb3J5ID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oanNNZW1vcnktPm1lbW9yeSgpLT5tZW1vcnkoKSk7
Ci0gICAgICAgICAgICB1aW50NjRfdCBzaXplSW5CeXRlcyA9IGpzTWVtb3J5LT5tZW1vcnkoKS0+
c2l6ZSgpOworICAgICAgICAgICAgdWludDhfdCogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oanNNZW1vcnktPm1lbW9yeSgpLm1lbW9yeSgpKTsKKyAgICAgICAgICAgIHVpbnQ2
NF90IHNpemVJbkJ5dGVzID0ganNNZW1vcnktPm1lbW9yeSgpLnNpemUoKTsKICAgICAgICAgICAg
IGZvciAoYXV0byYgc2VnbWVudCA6IGRhdGEpIHsKICAgICAgICAgICAgICAgICBpZiAoc2VnbWVu
dC0+c2l6ZUluQnl0ZXMpIHsKICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRGF0YUxvZy5oIGIvU291cmNlL1dURi93dGYvRGF0
YUxvZy5oCmluZGV4IDEzZjkxM2JkNWJhZTYwMjkxZGQ1MzhmN2ZhNTgzODhjODhlZmJjOTAuLjBi
MDg0ODhiMjBlNTAzMWMwMDY2OTlhZTYwY2RlZTI0YTBjOTdiZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0RhdGFMb2cuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgKQEAgLTQ4
LDEzICs0OCwyOSBAQCB2b2lkIGRhdGFMb2coY29uc3QgVHlwZXMmLi4uIHZhbHVlcykKIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIFR5cGVzPgogdm9pZCBkYXRhTG9nTG4oY29uc3QgVHlwZXMmLi4uIHZh
bHVlcykKIHsKLSAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlcy4uLiwgIlxuIik7CisgICAgZGF0
YUxvZyh2YWx1ZXMuLi4sICJcbiIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4K
K3ZvaWQgZGF0YUxvZ0lmKGJvb2wgc2hvdWxkTG9nLCBjb25zdCBUeXBlcyYuLi4gdmFsdWVzKQor
eworICAgIGlmIChzaG91bGRMb2cpCisgICAgICAgIGRhdGFMb2codmFsdWVzLi4uKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+Cit2b2lkIGRhdGFMb2dMbklmKGJvb2wgc2hvdWxk
TG9nLCBjb25zdCBUeXBlcyYuLi4gdmFsdWVzKQoreworICAgIGlmIChzaG91bGRMb2cpCisgICAg
ICAgIGRhdGFMb2dMbih2YWx1ZXMuLi4pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNp
bmcgV1RGOjpkYXRhTG9nOwogdXNpbmcgV1RGOjpkYXRhTG9nTG47Cit1c2luZyBXVEY6OmRhdGFM
b2dJZjsKK3VzaW5nIFdURjo6ZGF0YUxvZ0xuSWY7CiB1c2luZyBXVEY6OmRhdGFMb2dGOwogdXNp
bmcgV1RGOjpkYXRhTG9nRlN0cmluZzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVm
LmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWYuaAppbmRleCBiM2FjNGZiYzViYTUwOWE1M2MyNDEwZTRi
ZTI4NDBjNGYwYjk3NTJhLi44MzA5NjRmZWJlYTY2MWFkNzdkNzY2YzQ4ZDY0MjFkOTkyYzY1MGJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWYuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9S
ZWYuaApAQCAtMTM3LDYgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBUKiBwdHIoKSBjb25zdCB7IEFT
U0VSVChtX3B0cik7IHJldHVybiBtX3B0cjsgfQogICAgIFQmIGdldCgpIGNvbnN0IHsgQVNTRVJU
KG1fcHRyKTsgcmV0dXJuICptX3B0cjsgfQogICAgIG9wZXJhdG9yIFQmKCkgY29uc3QgeyBBU1NF
UlQobV9wdHIpOyByZXR1cm4gKm1fcHRyOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IEFTU0VSVChtX3B0cik7IHJldHVybiAhKm1fcHRyOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBSZWY8VD4gcmVwbGFjZShSZWY8VT4mJikgV0FSTl9VTlVTRURfUkVUVVJOOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303273</attachid>
            <date>2017-03-02 17:24:04 -0800</date>
            <delta_ts>2017-03-03 13:43:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162693-20170302172402.patch</filename>
            <type>text/plain</type>
            <size>115659</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ODFlYWQzNTM4YmU0Yjc0YzA1ZjlmMDU4Y2UzYTRiNTcyNjgxYTU2Li4xOGZlNmRiMmNhM2IzYzYy
ZDlkYzM3NDk4N2ZkNGRiZDIwZDQyMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzIgQEAKKzIwMTctMDMtMDIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV0FTTSBzaG91bGQgc3VwcG9ydCBmYXN0ZXIgbG9hZHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFk
ZHMgc3VwcG9ydCBmb3IgV2ViQXNzZW1ibHkgdXNpbmcgYSAzMi1iaXQgYWRkcmVzcworICAgICAg
ICBzcGFjZSBmb3IgbWVtb3J5IChhbG9uZyB3aXRoIHNvbWUgZXh0cmEgc3BhY2UgZm9yIG9mZnNl
dAorICAgICAgICBvdmVyZmxvdykuIFdpdGggYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSAod2UgY2Fs
bCB0aGVtCisgICAgICAgIFNpZ25hbGluZy9mYXN0IG1lbW9yaWVzKSwgd2UgcmVzZXJ2ZSB0aGUg
dmlydHVhbCBhZGRyZXNzIHNwYWNlIGZvcgorICAgICAgICAyXjMyICsgb2Zmc2V0IGJ5dGVzIG9m
IG1lbW9yeSBhbmQgb25seSBtYXJrIHRoZSB1c2FibGUgc2VjdGlvbiBhcworICAgICAgICByZWFk
L3dyaXRlLiBJZiB3YXNtIGNvZGUgd291bGQgcmVhZC93cml0ZSBvdXQgb2YgYm91bmRzIHdlIHVz
ZSBhCisgICAgICAgIGN1c3RvbSBzaWduYWwgaGFuZGxlciB0byBjYXRjaCB0aGUgU0lHQlVTLiBU
aGUgc2lnbmFsIGhhbmRsZXIgdGhlbgorICAgICAgICBjaGVja3MgaWYgdGhlIGZhdWx0aW5nIGlu
c3RydWN0aW9uIGlzIHdhc20gY29kZSBhbmQgdGVsbHMgdGhlCisgICAgICAgIHRocmVhZCB0byBy
ZXN1bWUgZXhlY3V0aW5nIGZyb20gdGhlIHdhc20gZXhjZXB0aW9uCisgICAgICAgIGhhbmRsZXIu
IE90aGVyd2lzZSwgdGhlIHNpZ25hbCBoYW5kbGVyIGNyYXNoZXMgdGhlIHByb2Nlc3MsIGFzCisg
ICAgICAgIHVzdWFsLgorCisgICAgICAgIEFsbCBvZiB0aGUgYWxsb2NhdGlvbnMgb2YgdGhlc2Ug
bWVtb3JpZXMgYXJlIG1hbmFnZWQgYnkgdGhlCisgICAgICAgIFdhc206Ok1lbW9yeSBjbGFzcy4g
SW4gb3JkZXIgdG8gYXZvaWQgVExCIGNodXJuIGluIHRoZSBPUyB3ZSBjYWNoZQorICAgICAgICBv
bGQgU2lnbmFsaW5nIG1lbW9yaWVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB1c2UuIFNpbmNlIGdl
dHRpbmcKKyAgICAgICAgdGhlIHdyb25nIG1lbW9yeSBjYW4gY2F1c2UgcmVjb21waWxlcywgd2Ug
dHJ5IHRvIHJlc2VydmUgYSBtZW1vcnkKKyAgICAgICAgZm9yIG1vZHVsZXMgdGhhdCBkbyBub3Qg
aW1wb3J0IGEgbWVtb3J5LiBJZiBhIG1vZHVsZSBkb2VzIGltcG9ydCBhCisgICAgICAgIG1lbW9y
eSwgd2UgdHJ5IHRvIGd1ZXNzIHRoZSB0eXBlIG9mIG1lbW9yeSB3ZSBhcmUgZ29pbmcgdG8gZ2V0
CisgICAgICAgIGJhc2VkIG9uIHRoZSBsYXN0IG9uZSBhbGxvY2F0ZWQuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhbHNvIGNoYW5nZXMgaG93IHRoZSB3YXNtIEpTLWFwaSBtYW5hZ2VzIG9iamVjdHMu
IFNpbmNlCisgICAgICAgIHdlIGNhbiBjb21waWxlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBjb2Rl
LCB0aGlzIHBhdGNoIGFkZHMgYSBuZXcKKyAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBj
bGFzcyB0aGF0IGhvbGRzIGFsbCB0aGUgaW5mb3JtYXRpb24KKyAgICAgICAgc3BlY2lmaWMgdG8g
cnVubmluZyBhIG1vZHVsZSBpbiBhIHBhcnRpY3VsYXIgYm91bmRzIGNoZWNraW5nCisgICAgICAg
IG1vZGUuIEFkZGl0aW9uYWxseSwgdGhlIFdhc206Ok1lbW9yeSBvYmplY3QgaXMgbm93IGEgcmVm
ZXJlbmNlCisgICAgICAgIGNvdW50ZWQgY2xhc3MgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiB0aGUg
SlNXZWJBc3NlbWJseU1lbW9yeQorICAgICAgICBvYmplY3QgYW5kIHRoZSBBcnJheUJ1ZmZlciB0
aGF0IGFsc28gdmlld3MgaXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuY3BwOgorICAgICAgICAo
SlNDOjpKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1Yik6CisgICAgICAgICogaml0L0pJVFRodW5r
cy5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogd2FzbS9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6ZnVuY3Rpb25JbXBvcnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjptb2R1
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpqc0VudHJ5cG9pbnRD
YWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c2V0SlNFbnRyeXBvaW50Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c2V0V2FzbUVudHJ5
cG9pbnRDYWxsZWUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYWxs
ZWVzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZDYWxs
ZWVzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6YWxsb2NhdGlvblNp
emUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Z2V0TWVtb3J5QmFzZUFuZFNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0U3RvcmVPcCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZWdp
c3RlckNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp1bnJlZ2lzdGVyQ29kZSk6CisgICAgICAg
IChKU0M6Oldhc206OmZhc3RNZW1vcnlFbmFibGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5h
YmxlRmFzdE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
YWxsZWUuY3BwLgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6aW1wb3J0RnVuY3Rpb25Db3VudCk6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpoYXNNZW1vcnkpOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vV2FzbU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Om1tYXBCeXRlcyk6
CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjphdmFpbGFibGVGYXN0TWVtb3JpZXMpOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0cnlHZXRGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVsZWFzZUZhc3RNZW1v
cnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6
Oldhc206Ok1lbW9yeTo6Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpk
dW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjptYWtlU3RyaW5nKToKKyAgICAgICAg
KiB3YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvcGVyYXRv
ciBib29sKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpzaXplKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TWVtb3J5OjpjaGVjayk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6TWVt
b3J5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9y
eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbik6Cisg
ICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnRha2VSZXNlcnZlZE1lbW9yeSk6CisgICAgICAgIChK
U0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjptb2RlKToKKyAgICAgICAgKiB3YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6Ok1vZHVsZVBhcnNlcik6CisgICAgICAgICog
d2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnBhcnNlQW5kVmFs
aWRhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW4pOgorICAgICAgICAq
IHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bW9kZSk6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5Q2FsbGVlOjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Ojppc1NhZmVUb1J1bik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpVbmNv
bmRpdGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6bW9kdWxlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1lbW9yeU1vZGUpOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6
SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6
OmJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1l
bW9yeTo6bWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0
T2ZNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNp
emUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1
bGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OlVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1vZHVsZTo6dGFrZVJlc2VydmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6ZnVuY3Rpb25JbXBvcnRDb3VudCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmpzRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjp3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRKU0VudHJ5cG9p
bnRDYWxsZWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpz
ZXRXYXNtRW50cnlwb2ludENhbGxlZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpvZmZzZXRPZkNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjphbGxvY2F0aW9uU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFdlYkFzc2Vt
Ymx5RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNl
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUpOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpldmFsdWF0ZSk6CisKIDIwMTctMDItMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHN0ZDo6
dHVwbGVzIGFzIGtleXMgaW4gSGFzaE1hcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA4OGE1YTk5NTM1MjEwODg4ZjIwNmFmZDU1
NjNiNzU1MWI5ZTY3ODVhLi5iZDI5OGY3MGY3MDJkNTE0YjBhMDc5YTU1MzMwMmRlOTZkMjAyNWM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE3LTAzLTAyICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9t
aWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdBU00gc2hvdWxkIHN1cHBvcnQgZmFzdGVyIGxv
YWRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYy
NjkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IG5ldyBmb3JtcyBvZiBkYXRhTG9nIHRoYXQgdGFrZSBhIGJvb2xlYW4gd2hpY2ggZGVzY3JpYmVz
IGlmIHRoZSBsb2cgc2hvdWxkIGhhcHBlbi4gVGhpcyBtYWtlcyBjYXNlcyB3aGVyZSB3ZSBoYXZl
IGEgc3RhdGljIGNvbnN0IGJvb2wgZm9yIHByaW50aW5nIG5pY2VyIHNpbmNlIHlvdSBjYW4gZG86
CisKKyAgICAgICAgZGF0YUxvZ0lmKHZlcmJvc2UsIHRoaW5ncywgdG8sIHByaW50KTsKKworICAg
ICAgICBpbnN0ZWFkIG9mOgorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZyh0aGluZ3MsIHRvLCBwcmludCk7CisKKyAgICAgICAgQWxzbywgYWRkIGEgb3BlcmF0b3Ih
IHRvIFJlZiBoYXMgdGhlIHNhbWUgc2VtYW50aWNzIGFzIEMrKyByZWZzLgorCisgICAgICAgICog
d3RmL0RhdGFMb2cuaDoKKyAgICAgICAgKFdURjo6ZGF0YUxvZ0xuKToKKyAgICAgICAgKFdURjo6
ZGF0YUxvZ0lmKToKKyAgICAgICAgKFdURjo6ZGF0YUxvZ0xuSWYpOgorICAgICAgICAqIHd0Zi9S
ZWYuaDoKKyAgICAgICAgKFdURjo6UmVmOjpvcGVyYXRvciEpOgorCiAyMDE3LTAyLTI0ICBLZWl0
aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlIHNob3VsZCBi
ZSBhYmxlIHRvIHVzZSBzdGQ6OnR1cGxlcyBhcyBrZXlzIGluIEhhc2hNYXAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYzEyM2IwNmFmZDk1YTk5NmM3ZWI3M2M5YTdlNWNhY2IxZGVj
NGUyZS4uMzVkYzE3YTFjZTk5NjUzYTcwOTQzOThjOGZiMDgxNmJhZjZhYWQyNSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMjAsNiArMTMyMCwxMCBAQAogCQk1MzU1NTcxNjFE
OURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1l
bW9yeS5jcHAgKi87IH07CiAJCTUzNzBCNEY1MUJGMjYyMDIwMDVDNDBGQyAvKiBBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNzBCNEYzMUJGMjVFQTIwMDVDNDBGQyAvKiBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCAqLzsgfTsKIAkJ
NTM3MEI0RjYxQkYyNjIwNTAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi87IH07CisJCTUzODFCOTM3MUU2MEU5NjYwMDkwRjc5
NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmNwcCAqLzsgfTsKKwkJNTM4MUI5MzkxRTYwRTk3RDAwOTBGNzk0IC8q
IFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmggKi87IH07CisJCTUzODFCOTQwMUU2NURGRUIwMDkwRjc5NCAvKiBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzgxQjkzRjFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oICovOyB9OworCQk1MzgzQUEzMDFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAg
Ki87IH07CiAJCTUzOTE3RTdCMUI3OTA2RkEwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTM5MTdFN0ExQjc5MDZFNDAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggKi87IH07CiAJCTUzOUZCOEJBMUM5OURBN0Mw
MDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxp
bmVzLmggKi87IH07CiAJCTUzQjBCRTM0MUU1NjFBQzkwMEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzQjBCRTMzMUU1NjFBQzkwMEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNw
cCAqLzsgfTsKQEAgLTM3NzYsNiArMzc4MCwxMCBAQAogCQk1MzU1NTcxNTFEOURGQTMyMDA2RDU4
M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtTWVtb3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM3MEI0RjMx
QkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM4MUI5MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdh
c21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM4MUI5M0YxRTY1REZFQjAwOTBG
Nzk0IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzkxN0U3QTFCNzkwNkU0MDAwRUJEMzMgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5MTdFN0MxQjc5MTEwNjAwMEVC
RDMzIC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzkxN0U4MzFCNzkxQ0I4MDAwRUJEMzMgLyogVHlwZWRBcnJheVByb3Rv
dHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IFR5cGVkQXJy
YXlQcm90b3R5cGUuanM7IHBhdGggPSBidWlsdGlucy9UeXBlZEFycmF5UHJvdG90eXBlLmpzOyBz
b3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CkBAIC02MjAxLDYgKzYyMDksOCBAQAogCQkJCTUz
RjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLywKIAkJCQk1
M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovLAogCQkJCUFE
QjZGNjdDMUUxNUQ3NTAwMDgyRjM4NCAvKiBXYXNtUGFnZUNvdW50LmNwcCAqLywKKwkJCQk1Mzgx
QjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8sCisJ
CQkJNTM4MUI5MzgxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAq
LywKIAkJCQk3OUI3NTk3MzFERkE0QzYwMDA1MjE3NEMgLyogV2FzbVBhZ2VDb3VudC5oICovLAog
CQkJCTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCiAJCQkJNTMx
Mzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKQEAgLTc3ODgsNiArNzc5
OCw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk3OUU0MjNFMDFERUU2NTMyMDA3OEQzNTUgLyog
SlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi8sCiAJCQkJNzlFNDIzRTExREVFNjUzMjAwNzhEMzU1
IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLywKKwkJCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMy
RkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCisJCQkJNTM4MUI5M0YxRTY1REZF
QjAwOTBGNzk0IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKIAkJCQlBRDJGQ0JBNjFE
QjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAgKi8sCiAJCQkJ
QUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCAq
LywKIAkJCQk3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMu
aCAqLywKQEAgLTc5MjcsNiArNzkzOSw3IEBACiAJCQkJMEZFQzg1NzIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjM4NzhFMUJGQkM0NEQw
MEUzQUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMy
QTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MzgxQjk0MDFFNjVERkVCMDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckND
YWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdE
MiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovLApAQCAtODI0Niw2ICs4MjU5LDcgQEAKIAkJ
CQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZDMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
TWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM4MUI5MzkxRTYwRTk3RDAwOTBGNzk0
IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZF
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
RjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCBp
biBIZWFkZXJzICovLApAQCAtMTAwMzYsNiArMTAwNTAsNyBAQAogCQkJCTBGQzg0MTY4MUJBOEMz
MjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzA0RDkwNTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQkQxQjcxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2Vy
dGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzgxQjkzNzFFNjBFOTY2MDA5MEY3OTQg
LyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMwMEI3
QjE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4OThGMzExQjI3Njg5RjAwODNBMzNDIC8qIERGR0ludGVnZXJS
YW5nZU9wdGltaXphdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzk3RjNEMTgy
MDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMTA0MzcsNiArMTA0NTIsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEz
RUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
RUIxMzc1NzFCQjExRUY5MDBDRDUxMDAgLyogTWFjcm9Bc3NlbWJsZXJBUk02NC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzgzQUEzMDFFNjVFOEExMDBBNTMyRkMgLyog
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZEQjdFQzFE
NjE3RDExMDBDREJGOEUgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZFNjhDNjM4MUI5MERFMEIwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUaHVua3MuY3BwCmluZGV4IGRlNDhlNjJkZGFiOGVmYWY4YmUzMTgyODcxYmU4ZDcw
OTliMTdjN2YuLjU0NmUxNGM5MDQ4ZThkMzM4YTU4MjY0N2NmN2NhZGY5ZGQzNDFjZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKQEAgLTgyLDYgKzgyLDE1IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoVk0qIHZtLCBUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3IpCiAgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6ZXhpc3RpbmdDVElTdHViKFRodW5rR2Vu
ZXJhdG9yIGdlbmVyYXRvcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAg
IENUSVN0dWJNYXA6Oml0ZXJhdG9yIGVudHJ5ID0gbV9jdGlTdHViTWFwLmZpbmQoZ2VuZXJhdG9y
KTsKKyAgICBpZiAoZW50cnkgPT0gbV9jdGlTdHViTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgcmV0dXJuIGVudHJ5LT52YWx1ZTsKK30KKwog
dm9pZCBKSVRUaHVua3M6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqKQog
ewogICAgIGF1dG8qIG5hdGl2ZUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRh
YmxlKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRo
dW5rcy5oCmluZGV4IGFkZGNmMjMwYzM0NWQ0MjcxYjYzN2YwOGI5NGM0MTZhM2VkMTgyYTQuLjdl
MDZlNzE2MjM1M2EwYjczZjNiYzAyZTU0MmY3M2I4MmY2NmUxMDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRUaHVua3MuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSopOyAg
ICAKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjdGlTdHViKFZNKiwgVGh1bmtHZW5lcmF0
b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5l
cmF0b3IpOwogCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIE5h
dGl2ZUZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZl
RnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciwgSW50
cmluc2ljLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCmluZGV4IGFlZGY0MmUxN2NjMmJkZTAxNGFkNWI4ZDYyODYyMmFlYzE0
NWU3ZTIuLjllMjg2ODgyYzZlOTA4NWZkY2NkNTY0M2RlZjE5YWUxMTY5MTMxNzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgi
CiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9n
LmgiCisjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogI2luY2x1ZGUgIldhc21Q
bGFuLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPGxvY2FsZS5oPgpAQCAt
Mzc2Niw2ICszNzY3LDkgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAg
IFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRp
bmcoKTsKICAgICBzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCgpOworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKyAgICBKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkoKTsKKyNlbmRpZgogCiAg
ICAgaW50IHJlc3VsdDsKICAgICByZXN1bHQgPSBydW5KU0MoCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKaW5kZXggYzRiZjhmYWRlOGFhZTMxMGYyYjZhMjc3MTEzMWJiZWRh
MjFiMmNiYy4uYzk0NDQ4MDcwOGFmNWRjZTNkMmY2ZTUzOGU4MWU0NzdkNzM5OWYwMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDI2LDYgKzQyNiw4IEBAIHR5
cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIFwKICAgICB2KGJvb2wsIHVzZVdl
YkFzc2VtYmx5LCB0cnVlLCBOb3JtYWwsICJFeHBvc2UgdGhlIFdlYkFzc2VtYmx5IGdsb2JhbCBv
YmplY3QuIikgXAogICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSwgZmFs
c2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0IHdvbid0IG1tYXAgdGhlIGZ1
bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwgYWxsb2NhdGUgdGhlIG1pbmltdW0g
cmVxdWlyZWQgYW1vdW50LiIpIFwKKyAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5RmFzdE1lbW9y
eSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGEgMzItYml0IGFk
ZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJvdW5kcyBjaGVjayB3YXNtIG1l
bW9yeS4iKQorCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggYTUwZjlkYjBhMGMzM2U5MDZkYzZl
YzBlYmVkYTY3MDdlYTRhOWZjMy4uYTAzOWRkYjAwZmZiMGNjMmJhMmY3NTc5YzVmMTM1N2YyNGIy
NDNkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMjQwLDYgKzI0MCw3
IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgd2ViQXNzZW1ibHlDYWxsZWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBK
U1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CiAgICAgd2ViQXNzZW1ibHlUb0pTQ2FsbGVlU3RydWN0dXJlLnNldCgqdGhpcywgV2ViQXNzZW1i
bHlUb0pTQ2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAg
d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgd2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlLnNldCgqdGhpcywgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlOjpjcmVhdGUo
KnRoaXMsIHdlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVjdHVyZS5nZXQoKSkpOwogI2VuZGlmCiAg
ICAgbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggNzMyYjI2ZTRlNGYzMDFiYTNiMGMxZTczMDgz
YWY5M2I0ODg4MGIyMC4uMWE0MWU0NGY2YTNlYmU2MGEzNGE2YzQ4YjFmYmI1OWM5ODFmNjdjNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0zMzMsNiArMzMzLDcgQEAgcHVibGlj
OgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3Nl
bWJseUNhbGxlZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseVRv
SlNDYWxsZWVTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPEpTQ2VsbD4gd2ViQXNzZW1ibHlUb0pTQ2FsbGVl
OwogI2VuZGlmCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVT
dHJ1Y3R1cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY3ZDJkMjgzZTlhMTM0YjI4MzBjOTkyNTUxZmNi
MjVmOWNiMmZkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUNhbGxlZS5oIgorI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKKyNp
bmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlNb2R1
bGU7CitjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5OworCitjbGFzcyBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFz
ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBzdGF0aWMgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIs
IEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0
U3R1YnM+JiYgZXhpdFN0dWJzLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQgY2Fs
bGVlQ291bnQpCisgICAgeworICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6
ZShjYWxsZWVDb3VudCkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBvd25lciwgc3RkOjpm
b3J3YXJkPEJhZzxDYWxsTGlua0luZm8+PihjYWxsTGlua0luZm9zKSwgc3RkOjpmb3J3YXJkPFZl
Y3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPj4oZXhpdFN0dWJzKSwgbW9kZSwgY2FsbGVlQ291bnQp
OworICAgICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IH0KKyAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisgICAgYm9vbCBpc1NhZmVUb1J1
bihKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CisKKyAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0Vu
dHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFj
ZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOworICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRl
eCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKKyAgICAgICAgcmV0
dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleF0uZ2V0KCk7CisgICAgfQorCisgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOworICAgICAgICB1
bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0
Q291bnQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNv
dW50KTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291
bnRdLmdldCgpOworICAgIH0KKworICAgIHZvaWQgc2V0SlNFbnRyeXBvaW50Q2FsbGVlKFZNJiB2
bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSkKKyAg
ICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7
CisgICAgICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleF0uc2V0KHZtLCB0aGlzLCBjYWxsZWUpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25l
ZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKQorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKKyAgICAgICAg
Y2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0uc2V0KHZtLCB0aGlzLCBjYWxs
ZWUpOworICAgIH0KKworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiogY2Fs
bGVlcygpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5Q2FsbGVlPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRP
ZkNhbGxlZXMoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2soVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgQmFnPENhbGxMaW5rSW5mbz4mJiwgVmVjdG9y
PFdhc206Oldhc21FeGl0U3R1YnM+JiYsIFdhc206Ok1lbW9yeTo6TW9kZSwgdW5zaWduZWQgY2Fs
bGVlQ291bnQpOworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisKKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mQ2FsbGVlcygpCisgICAgeworICAgICAg
ICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNX
ZWJBc3NlbWJseUNhbGxlZT4pPihzaXplb2YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaykpOworICAg
IH0KKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbnVtQ2FsbGVl
cykKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZzZXRPZkNhbGxlZXMoKSArIHNpemVvZihXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogbnVtQ2FsbGVlcyAqIDI7CisgICAgfQor
CisgICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIgeworICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkg
b3ZlcnJpZGU7CisgICAgfTsKKworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9kdWxl
PiBtX21vZHVsZTsKKyAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZp
bmFsaXplcjsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CisgICAgVmVj
dG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1fd2FzbUV4aXRTdHViczsKKyAgICBXYXNtOjpNZW1v
cnk6Ok1vZGUgbV9tb2RlOworICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCAyZmYz
MDUwMWY2NmYxYWNkYWY1ZGQ4Zjc4ZjVhNTIyOWVhZWI4YjkxLi5mNDIyMmY3ZGNjMjA0OWQwNmU2
ZTA4ZTU2M2U1ZWFiNWFjNzAxNDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0yNTksNyArMjU5LDcgQEAgQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihWTSYgdm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQ
cm9jZWR1cmUmIHAKICAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJlZ0lu
Zm8gOiBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnMpCiAgICAgICAgIG1fcHJvYy5waW5SZWdpc3Rl
cihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CiAKLSAgICBpZiAoaW5mby5oYXNNZW1vcnkoKSkgewor
ICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNr
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2ln
bmVkKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBpbm5lZEdQUiwgbV9tZW1v
cnlTaXplR1BSID09IHBpbm5lZEdQUik7CkBAIC0yODIsOCArMjgyLDggQEAgc3RhdGljIE1lbW9y
eUJhc2VBbmRTaXplIGdldE1lbW9yeUJhc2VBbmRTaXplKFZNJiB2bSwgVmFsdWUqIGluc3RhbmNl
LCBQcm9jZWR1cmUKIHsKICAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gYmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIGluc3Rh
bmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpOwogCi0gICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUodm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5t
ZW1vcnkoKS0+bWVtb3J5KCktPm1lbW9yeSgpKSkgPT0gc2l6ZW9mKHZvaWQqKSwgImNvZGVnZW4g
cmVsaWVzIG9uIHRoaXMgc2l6ZSIpOwotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBl
KHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZS0+bWVtb3J5KCktPm1lbW9yeSgpLT5zaXplKCkp
KSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7Cisg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUodm0udG9wSlNXZWJBc3NlbWJseUluc3Rh
bmNlLT5tZW1vcnkoKS0+bWVtb3J5KCkubWVtb3J5KCkpKSA9PSBzaXplb2Yodm9pZCopLCAiY29k
ZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVj
bHR5cGUodm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5tZW1vcnkoKS0+bWVtb3J5KCkuc2l6
ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIp
OwogICAgIE1lbW9yeUJhc2VBbmRTaXplIHJlc3VsdDsKICAgICByZXN1bHQuYmFzZSA9IGJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdp
bigpLCBtZW1vcnlPYmplY3QsIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkp
OwogICAgIHJlc3VsdC5zaXplID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywg
TG9hZCwgSW50NjQsIE9yaWdpbigpLCBtZW1vcnlPYmplY3QsIEpTV2ViQXNzZW1ibHlNZW1vcnk6
Om9mZnNldE9mU2l6ZSgpKTsKQEAgLTQ1NCw5ICs0NTQsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0
aWFsUmUKIAogaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJl
UG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90
IHNpemVPZk9wZXJhdGlvbikKIHsKLSAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSICYmIG1fbWVt
b3J5U2l6ZUdQUik7Ci0gICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNl
dCk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4o
bV9wcm9jLCBPcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlTaXplR1BSLCBzaXplT2ZPcGVyYXRp
b24gKyBvZmZzZXQgLSAxKTsKKyAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSKTsKKyAgICBpZiAo
bV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZykgewor
ICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKKyAgICAgICAgQVNTRVJUKHNpemVPZk9w
ZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1f
bWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgfQogICAg
IHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQz
MiwgT3JpZ2luKCksIHBvaW50ZXIpOwogICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFdhc21BZGRyZXNzVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5
QmFzZUdQUik7CiB9CkBAIC00ODgsNjggKzQ5MSw3MyBAQCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9m
TG9hZE9wKExvYWRPcFR5cGUgb3ApCiAKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1p
dExvYWRPcChMb2FkT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCB1aW50MzJfdCBvZmZzZXQpCiB7CisgICAgYXV0byBtYWtlS2luZCA9IFsmXSAoQjM6Ok9w
Y29kZSBvcGNvZGUpIC0+IEIzOjpLaW5kIHsKKyAgICAgICAgaWYgKG1faW5mby5tZW1vcnkubW9k
ZSgpID09IE1lbW9yeTo6U2lnbmFsaW5nKQorICAgICAgICAgICAgcmV0dXJuIHRyYXBwaW5nKG9w
Y29kZSk7CisgICAgICAgIHJldHVybiBvcGNvZGU7CisgICAgfTsKICAgICBzd2l0Y2ggKG9wKSB7
CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6IHsKLSAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhTLCBvcmlnaW4s
IHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQ4UyksIG9yaWdpbiwgcG9pbnRl
ciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4Uzogewot
ICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQ4Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIG1ha2VLaW5kKExvYWQ4UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBv
cmlnaW4sIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTog
ewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkOFosIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJu
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQo
TG9hZDhaKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgIH0KIAogICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDhVOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4sIHBvaW50
ZXIsIG9mZnNldCk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9hZDhaKSwgb3JpZ2luLCBwb2lu
dGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbiwgdmFsdWUpOwogICAgIH0KIAogICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDE2UzogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkMTZTLCBvcmlnaW4sIHBvaW50ZXIs
IG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQxNlMpLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNl
dCk7CiAgICAgfQogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzogewotICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQxNlMsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgVmFsdWUqIHZh
bHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtl
S2luZChMb2FkMTZTKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbiwg
dmFsdWUpOwogICAgIH0KIAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDogewotICAgICAg
ICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2Fk
KSwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2lu
LCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQpLCBJbnQzMiwg
b3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbiwgdmFsdWUpOwogICAgIH0K
IAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzogewotICAgICAgICBWYWx1ZSogdmFs
dWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQo
TG9hZCksIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2
YWx1ZSk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7Ci0gICAgICAg
IHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIEludDY0LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQp
LCBJbnQ2NCwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgIH0KIAogICAgIGNhc2UgTG9h
ZE9wVHlwZTo6RjMyTG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBGbG9hdCwgb3JpZ2luLCBwb2ludGVyLCBv
ZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBtYWtlS2luZChMb2FkKSwgRmxvYXQsIG9yaWdpbiwgcG9pbnRlciwgb2Zm
c2V0KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6IHsKLSAgICAgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgRG91YmxlLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1ha2VLaW5kKExvYWQp
LCBEb3VibGUsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICAvLyBGSVhN
RTogQjMgZG9lc24ndCBzdXBwb3J0IExvYWQxNlogeWV0LiBXZSBzaG91bGQgbG93ZXIgdG8gdGhh
dCB2YWx1ZSB3aGVuCiAgICAgLy8gaXQncyBhZGRlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NTg4NAogICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VTog
ewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQxNlMsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAg
ICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBtYWtlS2luZChMb2FkMTZTKSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRB
bmQsIE9yaWdpbigpLCB2YWx1ZSwKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgMHgwMDAwZmZmZikpOwogICAg
IH0KICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKLSAgICAgICAgVmFsdWUqIHZh
bHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
MTZTLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWFrZUtpbmQoTG9h
ZDE2UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgVmFsdWUqIHBhcnRpYWxS
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwg
T3JpZ2luKCksIHZhbHVlLAogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAweDAwMDBmZmZmKSk7CiAKQEAgLTYy
NSwxMyArNjMzLDE4IEBAIGlubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBl
IG9wKQogCiBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlw
ZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5
cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkKIHsKKyAgICBhdXRvIG1ha2VLaW5kID0gWyZdIChC
Mzo6T3Bjb2RlIG9wY29kZSkgLT4gQjM6OktpbmQgeworICAgICAgICBpZiAobV9pbmZvLm1lbW9y
eS5tb2RlKCkgPT0gTWVtb3J5OjpTaWduYWxpbmcpCisgICAgICAgICAgICByZXR1cm4gdHJhcHBp
bmcob3Bjb2RlKTsKKyAgICAgICAgcmV0dXJuIG9wY29kZTsKKyAgICB9OwogICAgIHN3aXRjaCAo
b3ApIHsKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CiAgICAgICAgIHZhbHVlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2
YWx1ZSk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogCiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMy
U3RvcmU4OgotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIFN0b3JlOCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtYWtlS2luZChT
dG9yZTgpLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm47
CiAKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTE2OgpAQCAtNjM5LDcgKzY1Miw3IEBA
IGlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBP
cmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uCiAgICAgICAgIEZBTExUSFJPVUdIOwogCiAgICAgY2Fz
ZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTE2LCBvcmlnaW4sIHZhbHVlLCBwb2ludGVy
LCBvZmZzZXQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIG1ha2VLaW5kKFN0b3JlMTYpLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyLCBvZmZz
ZXQpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMy
OgpAQCAtNjUwLDcgKzY2Myw3IEBAIGlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRTdG9y
ZU9wKFN0b3JlT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uCiAgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STMyU3RvcmU6CiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMyU3RvcmU6CiAg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbiwgdmFsdWUsIHBvaW50
ZXIsIG9mZnNldCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgbWFrZUtpbmQoU3RvcmUpLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyLCBvZmZz
ZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29u
dmVudGlvbi5oCmluZGV4IGQ3OTAxNGYyN2ZhZjkwOTY4ZjIxZjVmOWI0ZDdiOGNjNzgxMDM5ZTMu
LmU2MDRhYjJkNDcwOTBhN2U5NDMxOWExMmNiODcxZTRlNzQzNzI3MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCkBAIC00MCw2
ICs0MCw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0
LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iMTk0YWI2MmQ2YWZkM2YxZGM2NjRhOWE4Y2Y0NjJkMWU4MTFkNDRkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5j
cHAKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiRXhlY3V0
YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlv
blR5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKKworbmFtZXNw
YWNlIHsKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKworc3RhdGljIHN0
cnVjdCBzaWdhY3Rpb24gb2xkU2lnQnVzSGFuZGxlcjsKK3N0YXRpYyBib29sIGZhc3RIYW5kbGVy
SW5zdGFsbGVkIHsgZmFsc2UgfTsKK3N0YXRpYyBTdGF0aWNMb2NrIGNvZGVMb2NhdGlvbnNMb2Nr
Oworc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8Vk0qLCB2b2lk
Kiwgdm9pZCo+Pj4gY29kZUxvY2F0aW9uczsgLy8gKHZtLCBzdGFydCwgZW5kKQorCisjaWYgQ1BV
KFg4Nl82NCkKKyNkZWZpbmUgSW5zdHJ1Y3Rpb25Qb2ludGVyR1BSIGNvbnRleHQtPl9fc3MuX19y
aXAKKyNkZWZpbmUgRmlyc3RBcmd1bWVudEdQUiBjb250ZXh0LT5fX3NzLl9fcnNpCisjZWxzZQor
I2RlZmluZSBJbnN0cnVjdGlvblBvaW50ZXJHUFIgY29udGV4dC0+X19zcy5fX3BjCisjZGVmaW5l
IEZpcnN0QXJndW1lbnRHUFIgY29udGV4dC0+X19zcy5fX3hbMV0KKyNlbmRpZgorCitzdGF0aWMg
dm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCkK
K3sKKyAgICBtY29udGV4dF90IGNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNv
bnRleHQpLT51Y19tY29udGV4dDsKKyAgICB2b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oSW5zdHJ1Y3Rpb25Qb2ludGVyR1BSKTsKKyAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAic3RhcnRpbmcgaGFuZGxlciBmb3IgZmF1bHQgYXQ6ICIsIFJhd1BvaW50
ZXIoZmF1bHRpbmdJbnN0cnVjdGlvbikpOworCisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkpJ
VCBtZW1vcnkgc3RhcnQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Rh
cnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpKSwgIiBlbmQ6ICIsIFJhd1BvaW50ZXIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSkpOwor
ICAgIC8vIEZpcnN0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFyZSBpbiBKSVQgY29kZSBiZWZv
cmUgd2UgY2FuIGFxdWlyZSBhbnkgbG9ja3MuIE90aGVyd2lzZSwKKyAgICAvLyB3ZSBtaWdodCBo
YXZlIGNyYXNoZWQgaW4gY29kZSB0aGF0IGlzIGFscmVhZHkgaG9sZGluZyBvbmUgb2YgdGhlIGxv
Y2tzIHdlIHdhbnQgdG8gYXF1aXJlLgorICAgIGlmIChyZWludGVycHJldF9jYXN0PHZvaWQqPihz
dGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkgPD0gZmF1bHRpbmdJbnN0cnVjdGlvbgor
ICAgICAgICAmJiBmYXVsdGluZ0luc3RydWN0aW9uIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSkgeworCisgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKKyAgICAgICAgZm9yIChhdXRvIHJhbmdlIDogY29k
ZUxvY2F0aW9ucy5nZXQoKSkgeworICAgICAgICAgICAgVk0qIHZtOworICAgICAgICAgICAgdm9p
ZCogc3RhcnQ7CisgICAgICAgICAgICB2b2lkKiBlbmQ7CisgICAgICAgICAgICBzdGQ6OnRpZSh2
bSwgc3RhcnQsIGVuZCkgPSByYW5nZTsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJmdW5jdGlvbiBzdGFydDogIiwgUmF3UG9pbnRlcihzdGFydCksICIgZW5kOiAiLCBSYXdQb2lu
dGVyKGVuZCkpOworICAgICAgICAgICAgaWYgKHN0YXJ0IDw9IGZhdWx0aW5nSW5zdHJ1Y3Rpb24g
JiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8PSBlbmQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiZm91bmQgbWF0Y2giKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZXhjZXB0aW9uU3R1YiA9IHZtLT5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHVi
KHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcik7CisgICAgICAgICAgICAgICAg
Ly8gSWYgZm9yIHdoYXRldmVyIHJlYXNvbiB3ZSBkb24ndCBoYXZlIGEgc3R1YiB0aGVuIHdlIHNo
b3VsZCBqdXN0IHRyZWF0IHRoaXMgbGlrZSBhIHJlZ3VsYXIgY3Jhc2guCisgICAgICAgICAgICAg
ICAgaWYgKCFleGNlcHRpb25TdHViLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImZvdW5kIHN0dWI6ICIsIFJh
d1BvaW50ZXIoZXhjZXB0aW9uU3R1Yi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAg
ICAgICAgICAgICAgIEZpcnN0QXJndW1lbnRHUFIgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oRXhj
ZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICAgICAgICAgIElu
c3RydWN0aW9uUG9pbnRlckdQUiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KGV4Y2VwdGlv
blN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFNpbmNlIHdlIG9u
bHkgdXNlIGZhc3QgbWVtb3J5IGluIHByb2Nlc3NlcyB3ZSBjb250cm9sLCBpZiB3ZSByZXN0b3Jl
IHdlIHdpbGwganVzdCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgaGFuZGxlci4KKyAgICBzaWdh
Y3Rpb24oc2lnbmFsLCAmb2xkU2lnQnVzSGFuZGxlciwgbnVsbHB0cik7Cit9CisKK3ZvaWQgcmVn
aXN0ZXJDb2RlKFZNJiB2bSwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCkKK3sKKyAgICBpZiAoIWZh
c3RNZW1vcnlFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cihjb2RlTG9jYXRpb25zTG9jayk7CisgICAgY29kZUxvY2F0aW9ucy0+YWRkKHN0ZDo6bWFrZV90
dXBsZSgmdm0sIHN0YXJ0LCBlbmQpKTsKK30KKwordm9pZCB1bnJlZ2lzdGVyQ29kZShWTSYgdm0s
IHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCit7CisgICAgaWYgKCFmYXN0TWVtb3J5RW5hYmxlZCgp
KQorICAgICAgICByZXR1cm47CisgICAgTG9ja0hvbGRlciBsb2NrZXIoY29kZUxvY2F0aW9uc0xv
Y2spOworICAgIGNvZGVMb2NhdGlvbnMtPnJlbW92ZShzdGQ6Om1ha2VfdHVwbGUoJnZtLCBzdGFy
dCwgZW5kKSk7Cit9CisKK2Jvb2wgZmFzdE1lbW9yeUVuYWJsZWQoKQoreworICAgIHJldHVybiBm
YXN0SGFuZGxlckluc3RhbGxlZDsKK30KKwordm9pZCBlbmFibGVGYXN0TWVtb3J5KCkKK3sKKyAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBb
XSB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisK
KyAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHRyYXBIYW5kbGVyOworICAgICAgICBzaWdm
aWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7CisgICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJ
R0lORk87CisgICAgICAgIAorICAgICAgICBpZiAoIXNpZ2FjdGlvbihTSUdCVVMsICZhY3Rpb24s
ICZvbGRTaWdCdXNIYW5kbGVyKSkgeworICAgICAgICAgICAgZmFzdEhhbmRsZXJJbnN0YWxsZWQg
PSB0cnVlOworICAgICAgICAgICAgY29kZUxvY2F0aW9ucy5jb25zdHJ1Y3QoKTsKKyAgICAgICAg
fQorCisgICAgfSk7Cit9CisgICAgCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjMxOWUwMTgzYTE4
OTZhNWFiMTRjMGViZGE4ZDg2MjcwYmVjZTNjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaApAQCAtMCwwICsxLDQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZNOworCituYW1l
c3BhY2UgV2FzbSB7CisKK3ZvaWQgcmVnaXN0ZXJDb2RlKFZNJiwgdm9pZCogc3RhcnQsIHZvaWQq
IGVuZCk7Cit2b2lkIHVucmVnaXN0ZXJDb2RlKFZNJiwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7
CisKK2Jvb2wgZmFzdE1lbW9yeUVuYWJsZWQoKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5h
YmxlRmFzdE1lbW9yeSgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1h
dC5oCmluZGV4IGRjNjM0NzQ0MjJiZmU2MDMzZDhiMmQyMjFiYjdlYzVjMTEwNTY4NjIuLjFmYzU3
NGU5M2Q3MjQ3YzY0YThmYTMzNGY2MjI1ZDJjNzI3MWY2NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTI1Niw3ICsyNTYsNiBAQCBzdHJ1Y3QgTW9kdWxlSW5m
b3JtYXRpb24gewogICAgIH0KIAogICAgIHVpbnQzMl90IGltcG9ydEZ1bmN0aW9uQ291bnQoKSBj
b25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9Ci0g
ICAgYm9vbCBoYXNNZW1vcnkoKSBjb25zdCB7IHJldHVybiAhIW1lbW9yeTsgfQogCiAgICAgfk1v
ZHVsZUluZm9ybWF0aW9uKCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmNwcAppbmRleCBhYWQ5MWMxM2UzYTMwMTY4MzhmYjAzODRkYWI1YTQyYjQ3NzQzZDI4Li45
MWM2NDJlOWRjNjU4OGU0YmVmYmExNDExNWNmZDQ3ZTE1Njk4NmQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApAQCAtMjgsNyArMjgsMTEgQEAKIAogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5oIgorCiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zOCw4NiArNDIsMjAwIEBAIG5hbWVz
cGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotdm9pZCBNZW1vcnk6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK2lubGluZSBib29sIG1tYXBCeXRlcyhzaXplX3Qg
Ynl0ZXMsIHZvaWQqJiBtZW1vcnkpCiB7Ci0gICAgU3RyaW5nIG1lbW9yeUhleDsKLSAgICBXVEY6
OmFwcGVuZFVuc2lnbmVkNjRBc0hleCgodWludDY0X3QpKHVpbnRwdHJfdCltX21lbW9yeSwgbWVt
b3J5SGV4KTsKLSAgICBvdXQucHJpbnQoIk1lbW9yeSBhdCAweCIsIG1lbW9yeUhleCwgIiwgc2l6
ZSAiLCBtX3NpemUsICJCIGNhcGFjaXR5ICIsIG1fbWFwcGVkQ2FwYWNpdHksICJCLCBpbml0aWFs
ICIsIG1faW5pdGlhbCwgIiBtYXhpbXVtICIsIG1fbWF4aW11bSwgIiBtb2RlICIsIG1ha2VTdHJp
bmcobV9tb2RlKSk7CisgICAgZGF0YUxvZ0lmKHZlcmJvc2UsICJBdHRlbXB0aW5nIHRvIG1tYXAg
IiwgYnl0ZXMsICIgYnl0ZXM6ICIpOworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIGlm
IHdlIGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjM2MDAKKyAgICB2b2lkKiByZXN1bHQgPSBtbWFwKG51bGxwdHIs
IGJ5dGVzLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAgICBp
ZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
ImZhaWxlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJzdWNjZWVkZWQiKTsKKyAgICBtZW1vcnkgPSByZXN1bHQ7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWNvbnN0IGNoYXIqIE1lbW9yeTo6bWFrZVN0cmluZyhNb2RlIG1vZGUpIGNv
bnN0CisvLyBXZSB1c2UgdGhpcyBhcyBhIGhldXJpc3RpYyB0byBndWVzcyB3aGF0IG1vZGUgYSBt
ZW1vcnkgaW1wb3J0IHdpbGwgYmUuIE1vc3Qgb2YgdGhlIHRpbWUgd2UgZXhwZWN0IHVzZXJzIHRv
CisvLyBhbGxvY2F0ZSB0aGUgbWVtb3J5IHRoZXkgYXJlIGdvaW5nIHRvIHBhc3MgdG8gYWxsIHRo
ZWlyIG1vZHVsZXMgcmlnaHQgYmVmb3JlIGNvbXBpbGF0aW9uLgorc3RhdGljIE1lbW9yeTo6TW9k
ZSBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSB7IE1lbW9yeTo6TW9kZTo6U2lnbmFsaW5nIH07CisK
K01lbW9yeTo6TW9kZSBNZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCkKIHsKLSAgICBzd2l0Y2gg
KG1vZGUpIHsKLSAgICBjYXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0No
ZWNraW5nIjsKKyAgICByZXR1cm4gbGFzdEFsbG9jYXRlZE1lbW9yeU1vZGU7Cit9CisKK3N0YXRp
Y19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24g
YWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzMgd2hp
Y2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQgd2UnZCBwYXNz
IHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7CisKK3N0YXRpYyBjb25zdCBzaXpl
X3QgZmFzdE1lbW9yeU1hcHBlZEJ5dGVzID0gKHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSArIDEpICogMjsgLy8gcG9pbnRlciBtYXggKyBv
ZmZzZXQgbWF4LiBUaGlzIGlzIGFsbCB3ZSBuZWVkIHNpbmNlIGEgbG9hZCBzdHJhZGRsaW5nIHJl
YWRhYmxlIG1lbW9yeSB3aWxsIHRyYXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4RmFzdE1l
bW9yaWVzID0gNDsKK3N0YXRpYyB1bnNpZ25lZCBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgeyAwIH07
CitzdGF0aWMgU3RhdGljTG9jayBtZW1vcnlMb2NrOworaW5saW5lIERlcXVlPHZvaWQqLCBtYXhG
YXN0TWVtb3JpZXM+JiBhdmFpbGFibGVGYXN0TWVtb3JpZXMoY29uc3QgTG9ja0hvbGRlciYpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERlcXVlPHZvaWQqLCBtYXhGYXN0TWVtb3JpZXM+
PiBhdmFpbGFibGVGYXN0TWVtb3JpZXM7CisgICAgcmV0dXJuIGF2YWlsYWJsZUZhc3RNZW1vcmll
czsKK30KKworaW5saW5lIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0sIHZvaWQqJiBtZW1v
cnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeTo6TW9kZSYgbW9kZSkKK3sKKyAgICAv
LyBXZSBtaWdodCBHQyBoZXJlIHNvIHdlIHNob3VsZCBiZSBob2xkaW5nIHRoZSBBUEkgbG9jay4K
KyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3luY3Jvbm91c2x5IHRyaWdnZXIg
dGhlIEdDIGZyb20gYW5vdGhlciB0aHJlYWQuCisgICAgQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOworICAgIGlmICghZmFzdE1lbW9yeUVuYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgbmVlZCB0byBiZSBzdXJlIHdlIGhhdmUgYSBz
dHViIHByaW9yIHRvIHJ1bm5pbmcgY29kZS4KKyAgICBpZiAoIXZtLmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5zaXplKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8gZGVxdWVGYXN0TWVtb3J5ID0gWyZdICgpIC0+IGJvb2wgeworICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgcmV0dXJuIHRoZXNlIHRvIHRoZSBP
UyBpZiB3ZSBnbyBzb21lIG51bWJlciBvZiBHQ3MKKyAgICAgICAgLy8gd2l0aG91dCB1c2luZyB0
aGVtLgorICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtZW1vcnlMb2NrKTsKKyAgICAgICAgaWYg
KCFhdmFpbGFibGVGYXN0TWVtb3JpZXMobG9ja2VyKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IG1lbW9yeSA9IGF2YWlsYWJsZUZhc3RNZW1vcmllcyhsb2NrZXIpLnRha2VGaXJzdCgpOworICAg
ICAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXM7CisgICAgICAg
ICAgICBtb2RlID0gTWVtb3J5OjpTaWduYWxpbmc7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIEFTU0VSVChh
bGxvY2F0ZWRGYXN0TWVtb3JpZXMgPD0gbWF4RmFzdE1lbW9yaWVzKTsKKyAgICBpZiAoZGVxdWVG
YXN0TWVtb3J5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSWYgd2UgaGF2ZSBh
bGxvY2F0ZWQgYWxsIHRoZSBmYXN0IG1lbW9yaWVzLi4uIHRvbyBiYWQuCisgICAgaWYgKGFsbG9j
YXRlZEZhc3RNZW1vcmllcyA9PSBtYXhGYXN0TWVtb3JpZXMpIHsKKyAgICAgICAgLy8gVGhlcmUg
aXMgYSByZWFzb25hYmxlIGNoYW5jZSB0aGF0IGFub3RoZXIgbW9kdWxlIGhhcyBkaWVkIGJ1dCBo
YXMgbm90IGJlZW4gY29sbGVjdGVkIHlldC4gRG9uJ3QgbG9zZSBob3BlIHlldCEKKyAgICAgICAg
dm0uaGVhcC5jb2xsZWN0U3luYygpOworICAgICAgICByZXR1cm4gZGVxdWVGYXN0TWVtb3J5KCk7
CiAgICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIi
OworCisgICAgaWYgKG1tYXBCeXRlcyhmYXN0TWVtb3J5TWFwcGVkQnl0ZXMsIG1lbW9yeSkpIHsK
KyAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXM7CisgICAgICAg
IG1vZGUgPSBNZW1vcnk6OlNpZ25hbGluZzsKKyAgICAgICAgYWxsb2NhdGVkRmFzdE1lbW9yaWVz
Kys7CisgICAgfQorICAgIHJldHVybiBtZW1vcnk7Cit9CisKK2lubGluZSB2b2lkIHJlbGVhc2VG
YXN0TWVtb3J5KHZvaWQqJiBtZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUsIHNpemVfdCBtYXBw
ZWRDYXBhY2l0eSwgTWVtb3J5OjpNb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgIT0gTWVtb3J5
OjpTaWduYWxpbmcgfHwgIW1lbW9yeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUkVMRUFTRV9B
U1NFUlQobWVtb3J5ICYmIG1hcHBlZENhcGFjaXR5ID09IGZhc3RNZW1vcnlNYXBwZWRCeXRlcyk7
CisgICAgQVNTRVJUKGZhc3RNZW1vcnlFbmFibGVkKCkpOworCisgICAgbWVtc2V0KG1lbW9yeSwg
MCwgd3JpdGFibGVTaXplKTsKKyAgICBpZiAobXByb3RlY3QobWVtb3J5LCB3cml0YWJsZVNpemUs
IFBST1RfTk9ORSkpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlciht
ZW1vcnlMb2NrKTsKKyAgICBBU1NFUlQoYXZhaWxhYmxlRmFzdE1lbW9yaWVzKGxvY2tlcikuc2l6
ZSgpIDwgYWxsb2NhdGVkRmFzdE1lbW9yaWVzKTsKKyAgICBhdmFpbGFibGVGYXN0TWVtb3JpZXMo
bG9ja2VyKS5hcHBlbmQobWVtb3J5KTsKKyAgICBtZW1vcnkgPSBudWxscHRyOwogfQogCi1zdGF0
aWNfYXNzZXJ0KHNpemVvZih1aW50NjRfdCkgPT0gc2l6ZW9mKHNpemVfdCksICJXZSByZWx5IG9u
IGFsbG93aW5nIHRoZSBtYXhpbXVtIHNpemUgb2YgTWVtb3J5IHdlIG1hcCB0byBiZSAyXjMyIHdo
aWNoIGlzIGxhcmdlciB0aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50ZWdlciB0aGF0IHdlJ2QgcGFz
cyB0byBtcHJvdGVjdCBpZiB0aGlzIGRpZG4ndCBob2xkLiIpOworTWVtb3J5OjpNZW1vcnkoUGFn
ZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQorICAgIDogbV9pbml0aWFsKGluaXRp
YWwpCisgICAgLCBtX21heGltdW0obWF4aW11bSkKK3sKKyAgICBBU1NFUlQoIWluaXRpYWwuYnl0
ZXMoKSk7Cit9CiAKLU1lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSwgYm9vbCYgZmFpbGVkKQotICAgIDogbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKK01l
bW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBt
YXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1vZGUgbW9kZSkKKyAgICA6IG1fbWVtb3J5
KG1lbW9yeSkKKyAgICAsIG1fc2l6ZShpbml0aWFsLmJ5dGVzKCkpCiAgICAgLCBtX2luaXRpYWwo
aW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQotICAgICwgbV9tb2RlKE1vZGU6OkJv
dW5kc0NoZWNraW5nKQotICAgIC8vIEZJWE1FOiBJZiB3ZSBhZGQgc2lnbmFsIGJhc2VkIGJvdW5k
cyBjaGVja2luZyB0aGVuIHdlIG5lZWQgZXh0cmEgc3BhY2UgZm9yIG92ZXJmbG93IG9uIGxvYWQu
Ci0gICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYy
NjkzCisgICAgLCBtX21hcHBlZENhcGFjaXR5KG1hcHBlZENhcGFjaXR5KQorICAgICwgbV9tb2Rl
KG1vZGUpCit7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9j
YXRpbmcgIiwgKnRoaXMpOworfQorCitSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZUltcGwo
Vk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9u
YWw8TW9kZT4gcmVxdWlyZWRNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8
IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3Vy
IGNhbGxlci4KIAotICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRl
cygpIDogUGFnZUNvdW50OjptYXgoKS5ieXRlcygpOwotICAgIGlmICghbV9tYXBwZWRDYXBhY2l0
eSkgeworICAgIE1vZGUgbW9kZSA9IHJlcXVpcmVkTW9kZSA/ICpyZXF1aXJlZE1vZGUgOiBCb3Vu
ZHNDaGVja2luZzsKKyAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IGluaXRpYWwuYnl0ZXMoKTsKKyAg
ICBzaXplX3QgbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDogUGFn
ZUNvdW50OjptYXgoKS5ieXRlcygpOworICAgIHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7CisKKyAg
ICBhdXRvIG1ha2VFbXB0eU1lbW9yeSA9IFsmXSAoKSAtPiBSZWZQdHI8TWVtb3J5PiB7CisgICAg
ICAgIGlmIChtb2RlID09IFNpZ25hbGluZykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlID0gQm91bmRzQ2hlY2tpbmc7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0pKTsKKyAgICB9
OworCisgICAgaWYgKCFtYXBwZWRDYXBhY2l0eSkgewogICAgICAgICAvLyBUaGlzIG1lYW5zIHdl
IHNwZWNpZmllZCBhIHplcm8gYXMgbWF4aW11bSAod2hpY2ggbWVhbnMgd2UgYWxzbyBoYXZlIHpl
cm8gYXMgaW5pdGlhbCBzaXplKS4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zaXplID09IDAp
OwotICAgICAgICBtX21lbW9yeSA9IG51bGxwdHI7Ci0gICAgICAgIG1fbWFwcGVkQ2FwYWNpdHkg
PSAwOwotICAgICAgICBmYWlsZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgbm90aGluZyAiLCAq
dGhpcyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNpemUpOwor
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgYWxsb2NhdGluZyBu
b3RoaW5nIik7CisgICAgICAgIHJldHVybiBtYWtlRW1wdHlNZW1vcnkoKTsKICAgICB9CiAKLSAg
ICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20g
bWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0g
ICAgdm9pZCogcmVzdWx0ID0gT3B0aW9uczo6c2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSgp
ID8gTUFQX0ZBSUxFRCA6IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRDYXBhY2l0eSwgUFJPVF9OT05F
LCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBNQVBf
RkFJTEVEKSB7Ci0gICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4K
LSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6TWVt
b3J5IG1tYXAgZmFpbGVkIG9uY2UgZm9yIGNhcGFjaXR5LCB0cnlpbmcgYWdhaW4iLCAqdGhpcyk7
Ci0gICAgICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtX3NpemU7Ci0gICAgICAgIGlmICghbV9tYXBw
ZWRDYXBhY2l0eSkgewotICAgICAgICAgICAgbV9tZW1vcnkgPSBudWxscHRyOwotICAgICAgICAg
ICAgZmFpbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
ICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6TWVtb3J5IG1tYXAgbm90IHRyeWluZyBhZ2FpbiBiZWNh
dXNlIHNpemUgaXMgemVybyAiLCAqdGhpcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KKyAgICBib29sIGNhblVzZUZhc3RNZW1vcnkgPSAhcmVxdWlyZWRNb2RlIHx8IHJlcXVpcmVk
TW9kZSA9PSBTaWduYWxpbmc7CisgICAgaWYgKCFjYW5Vc2VGYXN0TWVtb3J5IHx8ICF0cnlHZXRG
YXN0TWVtb3J5KHZtLCBtZW1vcnksIG1hcHBlZENhcGFjaXR5LCBtb2RlKSkgeworICAgICAgICBp
ZiAobW9kZSA9PSBTaWduYWxpbmcpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
ICAgICBpZiAoT3B0aW9uczo6c2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSgpID8gdHJ1ZSA6
ICFtbWFwQnl0ZXMobWFwcGVkQ2FwYWNpdHksIG1lbW9yeSkpIHsKKyAgICAgICAgICAgIC8vIFRy
eSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4KKyAgICAgICAgICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIGZhaWxlZCBvbmNlIGZvciBjYXBhY2l0eSwg
dHJ5aW5nIGFnYWluIik7CisgICAgICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IHNpemU7CisgICAg
ICAgICAgICBpZiAoIW1hcHBlZENhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAgbm90IHRyeWluZyBhZ2FpbiBiZWNhdXNl
IHNpemUgaXMgemVybyIpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlRW1wdHlNZW1vcnko
KTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICByZXN1bHQgPSBtbWFwKG51bGxwdHIsIG1fbWFw
cGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwot
ICAgICAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgbW1hcCBmYWls
ZWQgdHdpY2UgIiwgKnRoaXMpOwotICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghbW1hcEJ5dGVzKG1hcHBlZENhcGFjaXR5LCBt
ZW1vcnkpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6
Y3JlYXRlIG1tYXAgZmFpbGVkIHR3aWNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQobV9zaXpl
IDw9IG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gIW1w
cm90ZWN0KHJlc3VsdCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpLCBQUk9UX1JFQUQgfCBQ
Uk9UX1dSSVRFKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7CisgICAgQVNTRVJU
KG1lbW9yeSAmJiBzaXplIDw9IG1hcHBlZENhcGFjaXR5KTsKKyAgICBpZiAobXByb3RlY3QobWVt
b3J5LCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbXByb3RlY3QgZmFpbGVkIik7CisgICAgICAgIHJl
bGVhc2VGYXN0TWVtb3J5KG1lbW9yeSwgMCwgbWFwcGVkQ2FwYWNpdHksIG1vZGUpOworICAgICAg
ICBpZiAobWVtb3J5KSB7CisgICAgICAgICAgICBpZiAobXVubWFwKG1lbW9yeSwgbWFwcGVkQ2Fw
YWNpdHkpKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQorICAgIAorICAgIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlID0g
bW9kZTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1hcCBzdWNj
ZWVkZWQiKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShtZW1vcnksIGluaXRpYWws
IG1heGltdW0sIG1hcHBlZENhcGFjaXR5LCBtb2RlKSk7Cit9CiAKLSAgICBtX21lbW9yeSA9IHJl
c3VsdDsKLSAgICBmYWlsZWQgPSBmYWxzZTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZ0xuKCJNZW1vcnk6Ok1lbW9yeSBtbWFwIHN1Y2NlZWRlZCAiLCAqdGhpcyk7CitSZWZQdHI8
TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNb2RlPiBtb2RlKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1
YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KKyAgICBSZWZQdHI8TWVtb3J5PiByZXN1bHQgPSBjcmVh
dGVJbXBsKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBtb2RlKTsKKyAgICBpZiAocmVzdWx0KSB7Cisg
ICAgICAgIGlmIChyZXN1bHQtPm1vZGUoKSA9PSBTaWduYWxpbmcpCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQtPm1fbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5
dGVzKTsKKyAgICAgICAgaWYgKG1vZGUpCisgICAgICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcmVz
dWx0LT5tb2RlKCkpOworICAgICAgICBBU1NFUlQobGFzdEFsbG9jYXRlZE1lbW9yeU1vZGUgPT0g
cmVzdWx0LT5tb2RlKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBNZW1vcnk6
On5NZW1vcnkoKQogewotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIk1lbW9y
eTo6fk1lbW9yeSAiLCAqdGhpcyk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6
fk1lbW9yeSAiLCAqdGhpcyk7CisgICAgcmVsZWFzZUZhc3RNZW1vcnkobV9tZW1vcnksIG1fc2l6
ZSwgbV9tYXBwZWRDYXBhY2l0eSwgbV9tb2RlKTsKICAgICBpZiAobV9tZW1vcnkpIHsKICAgICAg
ICAgaWYgKG11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSkpCiAgICAgICAgICAgICBD
UkFTSCgpOwpAQCAtMTI4LDIzICsyNDYsMjUgQEAgYm9vbCBNZW1vcnk6Omdyb3coUGFnZUNvdW50
IG5ld1NpemUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3VudDo6ZnJv
bUJ5dGVzKG1fc2l6ZSkpOwogCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigi
TWVtb3J5Ojpncm93IHRvICIsIG5ld1NpemUsICIgZnJvbSAiLCAqdGhpcyk7CisgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyB0byAiLCBuZXdTaXplLCAiIGZyb20gIiwgKnRo
aXMpOwogCiAgICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gbWF4aW11bSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICB1aW50NjRfdCBkZXNpcmVkU2l6ZSA9IG5ld1NpemUuYnl0
ZXMoKTsKKyAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5dGVzKCk7CiAKICAgICBp
ZiAobV9tZW1vcnkgJiYgZGVzaXJlZFNpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSkgewotICAgICAg
ICBib29sIHN1Y2Nlc3MgPSAhbXByb3RlY3Qoc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5
KSArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkZXNpcmVkU2l6ZSAtIG1fc2l6ZSksIFBS
T1RfUkVBRCB8IFBST1RfV1JJVEUpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzKTsK
KyAgICAgICAgaWYgKG1wcm90ZWN0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9yeSkgKyBt
X3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZGVzaXJlZFNpemUgLSBtX3NpemUpLCBQUk9UX1JF
QUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1l
bW9yeTo6Z3JvdyBpbi1wbGFjZSBmYWlsZWQgIiwgKnRoaXMpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKICAgICAgICAgbV9zaXplID0gZGVzaXJlZFNpemU7Ci0gICAg
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Omdyb3cgaW4t
cGxhY2UgIiwgKnRoaXMpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpn
cm93IGluLXBsYWNlICIsICp0aGlzKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisg
ICAgQVNTRVJUKG1vZGUoKSAhPSBTaWduYWxpbmcpOwogICAgIC8vIE90aGVyd2lzZSwgbGV0J3Mg
dHJ5IHRvIG1ha2Ugc29tZSBuZXcgbWVtb3J5LgogICAgIHZvaWQqIG5ld01lbW9yeSA9IG1tYXAo
bnVsbHB0ciwgZGVzaXJlZFNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRF
IHwgTUFQX0FOT04sIC0xLCAwKTsKICAgICBpZiAobmV3TWVtb3J5ID09IE1BUF9GQUlMRUQpCkBA
IC0xNTksMTEgKzI3OSwyNiBAQCBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkK
ICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CiAgICAgbV9zaXplID0gZGVzaXJl
ZFNpemU7CiAKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Omdy
b3cgIiwgKnRoaXMpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgIiwg
KnRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIE1lbW9yeTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiTWVtb3J5IGF0ICIsIFJhd1BvaW50
ZXIobV9tZW1vcnkpLCAiLCBzaXplICIsIG1fc2l6ZSwgIkIgY2FwYWNpdHkgIiwgbV9tYXBwZWRD
YXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAiIG1heGltdW0gIiwgbV9tYXhpbXVt
LCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKK30KKworY29uc3QgY2hhciogTWVtb3J5
OjptYWtlU3RyaW5nKE1vZGUgbW9kZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAg
ICBjYXNlIE1vZGU6OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOworICAgIGNhc2UgTW9k
ZTo6TnVtYmVyT2ZNb2RlczogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogfSAv
LyBuYW1lc3BhY2UgV2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCmlu
ZGV4IDIzNmJmODUxMjU2NDU1YmNlOWUzMjM2ZGNjNDU4NGM4NmMxZGNmMGMuLjMzODRhNDJjNjBi
NjU0MTRhMThhMWM3Nzk5YzExYWFkMzVhNTFlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmgKQEAgLTI3LDYyICsyNyw2OSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCi0jaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2Fz
bVBhZ2VDb3VudC5oIgogCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKIG5hbWVzcGFjZSBXVEYg
ewogY2xhc3MgUHJpbnRTdHJlYW07CiB9CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVk07CisKK25hbWVzcGFjZSBXYXNtIHsKIAot
Y2xhc3MgTWVtb3J5IHsKK2NsYXNzIE1lbW9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lbW9yeT4g
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lbW9yeSk7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFdURjo6UHJpbnRTdHJlYW0mKSBjb25z
dDsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBvdGhlciBtb2Rlcy4gc2VlOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCi0gICAgZW51bSBj
bGFzcyBNb2RlIHsKLSAgICAgICAgQm91bmRzQ2hlY2tpbmcKKyAgICBlbnVtIE1vZGUgeworICAg
ICAgICBCb3VuZHNDaGVja2luZywKKyAgICAgICAgU2lnbmFsaW5nLAorICAgICAgICBOdW1iZXJP
Zk1vZGVzCiAgICAgfTsKICAgICBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1vZGUpIGNvbnN0Owog
CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9tZW1vcnk7
IH0KKworICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGUoVk0mLCBQYWdlQ291bnQgaW5p
dGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVxdWlyZWRNb2Rl
ID0gc3RkOjpudWxsb3B0KTsKKwogICAgIE1lbW9yeSgpID0gZGVmYXVsdDsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBi
b29sJiBmYWlsZWQpOwotICAgIE1lbW9yeShNZW1vcnkmJiBvdGhlcikKLSAgICAgICAgOiBtX21l
bW9yeShvdGhlci5tX21lbW9yeSkKLSAgICAgICAgLCBtX3NpemUob3RoZXIubV9zaXplKQotICAg
ICAgICAsIG1faW5pdGlhbChvdGhlci5tX2luaXRpYWwpCi0gICAgICAgICwgbV9tYXhpbXVtKG90
aGVyLm1fbWF4aW11bSkKLSAgICAgICAgLCBtX21hcHBlZENhcGFjaXR5KG90aGVyLm1fbWFwcGVk
Q2FwYWNpdHkpCi0gICAgICAgICwgbV9tb2RlKG90aGVyLm1fbW9kZSkKLSAgICB7Ci0gICAgICAg
IC8vIE1vdmluZyB0cmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5Lgot
ICAgICAgICBvdGhlci5tX21lbW9yeSA9IG51bGxwdHI7Ci0gICAgfQogICAgIH5NZW1vcnkoKTsK
IAogICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9Ci0gICAgdWlu
dDY0X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgUGFnZUNvdW50IHNpemVJblBhZ2VzKCkgY29u
c3QgeyByZXR1cm4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKTsgfQogCiAgICAgUGFnZUNv
dW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KICAgICBQYWdlQ291bnQg
bWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQogCisgICAgc3RhdGljIE1vZGUg
bGFzdEFsbG9jYXRlZE1vZGUoKTsKICAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21v
ZGU7IH0KIAorICAgIC8vIGdyb3coKSBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgSlNX
ZWJBc3NlbWJseU1lbW9yeSBvYmplY3Qgc2luY2UgdGhhdCBvYmplY3QgbmVlZHMgdG8gdXBkYXRl
IGludGVybmFsCisgICAgLy8gcG9pbnRlcnMgd2l0aCB0aGUgY3VycmVudCBiYXNlIGFuZCBzaXpl
LgogICAgIGJvb2wgZ3JvdyhQYWdlQ291bnQpOwogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fbWVtb3J5KTsg
fQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKE1lbW9yeSwgbV9zaXplKTsgfQotICAgIAorICAgIHZvaWQgY2hlY2soKSB7ICBBU1NF
UlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7IH0KIHByaXZhdGU6CisgICAgc3RhdGljIFJlZlB0cjxN
ZW1vcnk+IGNyZWF0ZUltcGwoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKKyAg
ICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTW9kZSk7CisgICAgTWVtb3J5KFBhZ2VDb3VudCBp
bml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIG1v
dmUgdGhlc2UgdG8gdGhlIGluc3RhbmNlIHRvIGF2b2lkIGEgbG9hZCBvbiBpbnN0YW5jZS0+aW5z
dGFuY2UgY2FsbHMuCiAgICAgdm9pZCogbV9tZW1vcnkgeyBudWxscHRyIH07Ci0gICAgdWludDY0
X3QgbV9zaXplIHsgMCB9OworICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAgICAgUGFnZUNvdW50
IG1faW5pdGlhbDsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVtOwotICAgIHVpbnQ2NF90IG1fbWFw
cGVkQ2FwYWNpdHkgeyAwIH07CisgICAgc2l6ZV90IG1fbWFwcGVkQ2FwYWNpdHkgeyAwIH07CiAg
ICAgTW9kZSBtX21vZGUgeyBNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKaW5k
ZXggNmIwNjNkMzUxMjRlOTdhODNiMWYxZTA4NzNhNDEwN2M5ZjBlOWZkNS4uZWEwN2UyODM0Zjc1
ODFiY2JmMTAwZDdiYjhlYTI1YzMzYTEzZjZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50
aW9uLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpAQCAtNDgsNiArNDks
OCBAQCBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkK
ICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9OwogICAgICAgICB1
bnNpZ25lZCByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPSBwaW5uZWRTaXplcy5zaXplKCkgKyAx
OwogICAgICAgICBqc2NDYWxsaW5nQ29udmVudGlvbigpLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5m
b3JFYWNoKFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgaWYgKCFyZWcuaXNHUFIoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVnLmdwcigp
OwogICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgfHwgUmVnaXN0ZXJT
ZXQ6OnN0YWNrUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpA
QCAtNzEsNyArNzQsNyBAQCBQaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhW
ZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVnaQogewogfQogCi1NZW1vcnlJ
bmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3Vu
dCBtYXhpbXVtLCAgYm9vbCBpc0ltcG9ydCkKK01lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZv
cm1hdGlvbihWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3Rk
OjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUsIGJvb2wgaXNJbXBvcnQpCiAg
ICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQogICAgICwg
bV9pc0ltcG9ydChpc0ltcG9ydCkKQEAgLTc5LDYgKzgyLDE4IEBAIE1lbW9yeUluZm9ybWF0aW9u
OjpNZW1vcnlJbmZvcm1hdGlvbihQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
ICBib29sCiAgICAgUkVMRUFTRV9BU1NFUlQoISFtX2luaXRpYWwpOwogICAgIFJFTEVBU0VfQVNT
RVJUKCFtX21heGltdW0gfHwgbV9tYXhpbXVtID49IG1faW5pdGlhbCk7CiAgICAgQVNTRVJUKCEh
KnRoaXMpOworCisgICAgaWYgKCFyZWNvbXBpbGVNb2RlKSB7CisgICAgICAgIGlmICghaXNJbXBv
cnQpIHsKKyAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1vcnkgPSBNZW1vcnk6OmNyZWF0ZSh2bSwg
aW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5OjpTaWduYWxpbmcpOworICAgICAgICAgICAgaWYgKG1f
cmVzZXJ2ZWRNZW1vcnkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoISEqbV9yZXNlcnZlZE1l
bW9yeSk7CisgICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fbW9kZSA9IE1lbW9yeTo6bGFz
dEFsbG9jYXRlZE1vZGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9tb2RlID0gKnJlY29tcGls
ZU1vZGU7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCmluZGV4IDZlN2Y1MjE4
OTQ3ZTAxNmI0OGZkZjYwMTlkMzY4YTU3NTdlMzg1YjcuLjk2NTM4MjIwNmI1ZDA3YjIzZmEzNDBi
MzEzNmZjYmQ0NjY0ZTc4ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCkBAIC0yOCw3ICsyOCw5IEBACiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIldhc21NZW1vcnku
aCIKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
QEAgLTUyLDE3ICs1NCwyMiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCghKnRoaXMpOwogICAg
IH0KIAotICAgIE1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSwgYm9vbCBpc0ltcG9ydCk7CisgICAgTWVtb3J5SW5mb3JtYXRpb24oVk0mLCBQYWdl
Q291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpN
b2RlPiwgYm9vbCBpc0ltcG9ydCk7CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhpbXVtOyB9CisgICAgYm9vbCBoYXNSZXNlcnZlZE1lbW9yeSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzZXJ2ZWRNZW1vcnk7IH0KKyAgICBNZW1vcnkmIHRha2VSZXNlcnZlZE1lbW9yeSgp
IHsgQVNTRVJUKGhhc1Jlc2VydmVkTWVtb3J5KCkpOyByZXR1cm4gKm1fcmVzZXJ2ZWRNZW1vcnku
bGVha1JlZigpOyB9CisgICAgTWVtb3J5OjpNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21v
ZGU7IH0KICAgICBib29sIGlzSW1wb3J0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ltcG9ydDsgfQog
CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbml0aWFs
OyB9CiAKIHByaXZhdGU6CisgICAgUmVmUHRyPE1lbW9yeT4gbV9yZXNlcnZlZE1lbW9yeTsKICAg
ICBQYWdlQ291bnQgbV9pbml0aWFsIHsgfTsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVtIHsgfTsK
KyAgICBNZW1vcnk6Ok1vZGUgbV9tb2RlIHsgTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZyB9
OwogICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDUxNzczZDA2ZTYyMDEy
M2I1YWMwNDI2MmE5MDhiYWIwYmY4ZjE1OTkuLjUyMTE2NGZmNGM0NmFiNGYxYTNjY2EzN2NkZTkz
OWUxMmViNmJiYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuY3BwCkBAIC0zMTYsNyArMzE2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNl
TWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBBU1NFUlQo
aW5pdGlhbFBhZ2VDb3VudCk7CiAgICAgQVNTRVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGlt
dW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VDb3VudCk7CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUt
Pm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdl
Q291bnQsIGlzSW1wb3J0KTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUlu
Zm9ybWF0aW9uKCptX3ZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBtX21v
ZGUsIGlzSW1wb3J0KTsKICAgICByZXR1cm4geyB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKaW5kZXggNDFiNTdmYzgyMGM0NWI5YjRlYzVm
YTdjNjk1YmE1NmNhZmI4NGExMC4uOTRiYTE0ZTE1YTNmZGEzMTA0ZTMzYmFjMDkzYzFmMWU4MWNm
MjBjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
aApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJX
YXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXYXNtIHsKQEAgLTQzLDEyICs0NCw5IEBAIHN0cnVjdCBNb2R1bGVQYXJzZXJSZXN1bHQgewog
Y2xhc3MgTW9kdWxlUGFyc2VyIDogcHVibGljIFBhcnNlcjxNb2R1bGVQYXJzZXJSZXN1bHQ+IHsK
IHB1YmxpYzoKIAotICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKKyAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBj
b25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0ZDo6b3B0
aW9uYWw8TWVtb3J5OjpNb2RlPiBtb2RlKQogICAgICAgICA6IFBhcnNlcih2bSwgc291cmNlQnVm
ZmVyLCBzb3VyY2VMZW5ndGgpCi0gICAgewotICAgIH0KLSAgICBNb2R1bGVQYXJzZXIoVk0qIHZt
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZUJ1ZmZlcikKLSAgICAgICAgOiBNb2R1bGVQ
YXJzZXIodm0sIHNvdXJjZUJ1ZmZlci5kYXRhKCksIHNvdXJjZUJ1ZmZlci5zaXplKCkpCisgICAg
ICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewogICAgIH0KIApAQCAtNjgsNiArNjYsNyBAQCBwcml2
YXRlOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW5pdEV4cHIo
dWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKIAogICAgIE1vZHVsZVBh
cnNlclJlc3VsdCBtX3Jlc3VsdDsKKyAgICBzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gbV9t
b2RlIHsgc3RkOjpudWxsb3B0IH07CiAgICAgYm9vbCBtX2hhc1RhYmxlIHsgZmFsc2UgfTsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCA1OTgwYjUxZTg3
NDIyMjM3NTVjZTBjM2RmMmMxNmIxZGU5ZWM4ZjEyLi40ODM1YWEyOGYyY2FmN2EyMWM2YWM0YTE5
M2MzNzcxZTU4MjhjYWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3Bw
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNs
dWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgor
I2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5
LmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZVBhcnNlci5oIgogI2luY2x1ZGUgIldhc21WYWxpZGF0
ZS5oIgpAQCAtNjEsMTQgKzYyLDE0IEBAIFBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90
KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiB7CiB9CiAKLWJvb2wgUGxhbjo6cGFyc2VB
bmRWYWxpZGF0ZU1vZHVsZSgpCitib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3Rk
OjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCiB7CiAgICAgTW9ub3Rvbmlj
VGltZSBzdGFydFRpbWU7CiAgICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGls
ZVRpbWVzKCkpCiAgICAgICAgIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogCiAg
ICAgewotICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKG1fdm0sIG1fc291cmNlLCBt
X3NvdXJjZUxlbmd0aCk7CisgICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV92bSwg
bV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCByZWNvbXBpbGVNb2RlKTsKICAgICAgICAgYXV0byBw
YXJzZVJlc3VsdCA9IG1vZHVsZVBhcnNlci5wYXJzZSgpOwogICAgICAgICBpZiAoIXBhcnNlUmVz
dWx0KSB7CiAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHBhcnNlUmVzdWx0LmVycm9yKCk7
CkBAIC0xMDksMTAgKzExMCwxMiBAQCBib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUo
KQogLy8gVGhlIHJlYXNvbiB0aGlzIGlzIE9LIGlzIHRoYXQgd2UgZ3VhcmFudGVlIHRoYXQgdGhl
IG1haW4gdGhyZWFkIGRvZXNuJ3QgY29udGludWUgdW50aWwgYWxsIHRocmVhZHMKIC8vIHRoYXQg
Y291bGQgdG91Y2ggaXRzIHN0YWNrIGFyZSBkb25lIGV4ZWN1dGluZy4KIFNVUFBSRVNTX0FTQU4g
Ci12b2lkIFBsYW46OnJ1bigpCit2b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6
TW9kZT4gcmVjb21waWxlTW9kZSkKIHsKLSAgICBpZiAoIXBhcnNlQW5kVmFsaWRhdGVNb2R1bGUo
KSkKKyAgICBpZiAoIXBhcnNlQW5kVmFsaWRhdGVNb2R1bGUocmVjb21waWxlTW9kZSkpCiAgICAg
ICAgIHJldHVybjsKKyAgICBpZiAocmVjb21waWxlTW9kZSkKKyAgICAgICAgQVNTRVJUKG1fbW9k
dWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tb2RlKCkgPT0gcmVjb21waWxlTW9kZSk7CiAKICAgICBh
dXRvIHRyeVJlc2VydmVDYXBhY2l0eSA9IFt0aGlzXSAoYXV0byYgdmVjdG9yLCBzaXplX3Qgc2l6
ZSwgY29uc3QgY2hhciogd2hhdCkgewogICAgICAgICBpZiAoVU5MSUtFTFkoIXZlY3Rvci50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
aAppbmRleCA2OTgwYmRiYmJlMTdhNTE5NWM4YzVlMDM1ZWI0ZTZhYTEwZDJjZjE1Li5kMDcwMzc1
MjAzMmM5YWEwY2Q4NTg0MTdmYjE3MjZlN2ZiOWMzZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmgKQEAgLTQ5LDkgKzQ5LDkgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFBsYW4oVk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSB+UGxhbigpOwogCi0gICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7Cisg
ICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2Rl
PiA9IHN0ZDo6bnVsbG9wdCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1bigpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2Rl
PiA9IHN0ZDo6bnVsbG9wdCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxp
emVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0Kiwgc3RkOjpmdW5jdGlvbjx2b2lkKHVuc2lnbmVkLCBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSopPik7CiAKQEAgLTkyLDYg
KzkyLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGTW92ZShtX3dhc21FeGl0U3R1YnMp
OwogICAgIH0KIAorICAgIE1lbW9yeTo6TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICBWZWN0
b3I8RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5PiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
YWxsZWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNh
bGxlZS5jcHAKaW5kZXggYzI3NzEyYTEwZmZmYzhkZjNmMWViNjA2YjA4Y2ZjOWYwN2Y4ZTM2Yi4u
NTE3MTI3ODVmMjkzYjhmMTBiYTBkOTk3YzQ2YTAxZWI1OTdkNDhmYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtNDMsMTEgKzQ0LDEzIEBAIHZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAKICAgICBtX2VudHJ5cG9pbnQgPSBXVEZNb3Zl
KGVudHJ5cG9pbnQpOworICAgIFdhc206OnJlZ2lzdGVyQ29kZSh2bSwgbV9lbnRyeXBvaW50LmNv
bXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCBtX2VudHJ5
cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsK
IH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsK
ICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNXZWJB
c3NlbWJseUNhbGxlZSo+KGNlbGwpOworICAgIFdhc206OnVucmVnaXN0ZXJDb2RlKCpjZWxsLT52
bSgpLCB0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVj
dXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIHRoaXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxh
dGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwogICAgIHRoaXNPYmpl
Y3QtPkpTV2ViQXNzZW1ibHlDYWxsZWU6On5KU1dlYkFzc2VtYmx5Q2FsbGVlKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjIxZjhhNWNjNjQ1ZjJlMjViNzc0MTE3YmRhZjk4YWY0
NzBkMzRhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlN
ZW1vcnkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c19pbmZvID0g
eyAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spIH07CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwg
QmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRT
dHVicz4mJiB3YXNtRXhpdFN0dWJzLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQg
Y2FsbGVlQ291bnQpCisgICAgOiBCYXNlKHZtLCB2bS53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVj
dHVyZS5nZXQoKSkKKyAgICAsIG1fY2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5rSW5mb3Mp
KQorICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1vdmUod2FzbUV4aXRTdHVicykpCisgICAgLCBt
X21vZGUobW9kZSkKKyAgICAsIG1fY2FsbGVlQ291bnQoY2FsbGVlQ291bnQpCit7CisgICAgbV9t
b2R1bGUuc2V0KHZtLCB0aGlzLCBvd25lcik7CisgICAgbWVtc2V0KGNhbGxlZXMoKSwgMCwgbV9j
YWxsZWVDb3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICog
Mik7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCit7CisgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygpOworfQorCiti
b29sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1v
cnkqIG1lbW9yeSkKK3sKKyAgICBpZiAobW9kZSgpID09IFdhc206Ok1lbW9yeTo6U2lnbmFsaW5n
KQorICAgICAgICByZXR1cm4gbWVtb3J5LT5tZW1vcnkoKS5tb2RlKCkgPT0gbW9kZSgpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwor
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9jYWxsZWVDb3VudCAqIDI7IGkrKykKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+Y2FsbGVlcygpW2ldKTsKKworICAgIHZpc2l0
b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmdGhpc09iamVjdC0+bV91bmNvbmRpdGlvbmFs
RmluYWxpemVyKTsKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpVbmNvbmRpdGlv
bmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCit7CisgICAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayogdGhpc09iamVjdCA9IGJpdHdpc2VfY2FzdDxKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKj4oCisgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZG
U0VUT0YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaywgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7
CisgICAgZm9yIChhdXRvIGl0ZXIgPSB0aGlzT2JqZWN0LT5tX2NhbGxMaW5rSW5mb3MuYmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPnZpc2l0V2VhaygqdGhpc09iamVj
dC0+dm0oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXggZmJjMWNlYmZiOWNiOGE1OWM5ZWFlNmU2ZGQ5
OWZjNTU1ZjViMTNjYy4uMTI4MDI1ZTVjMDRmODljOTZmYWYzNTZhZjUxNDE2OGMxMzQwZjgyNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM4LDYgKzM4LDE4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCit2b2lk
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIC8vIFdlIGNyZWF0ZSBzdHViIG1lbW9yaWVzIGV2ZW4g
Zm9yIG1vZHVsZXMgdGhhdCBzaG91bGQgZXZlbnR1YWxseSBnZXQgYSBtZW1vcnkgc28gd2Ugd2Fu
dCB0byBhdm9pZCByZWNvbXBsaW5nIHRoZXJlLgorICAgIGlmIChtZW1vcnktPm1lbW9yeSgpKSB7
CisgICAgICAgIGF1dG8gY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPm1vZHVsZSgpLT5jb2RlQmxv
Y2sodm0sIGV4ZWMsIG1lbW9yeSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
KTsKKyAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOworICAgIH0K
KyAgICBtX21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7Cit9CisKIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KQogewogICAgIC8vIEZJWE1FOiBUaGVzZSBv
YmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVy
ZS4KQEAgLTY3LDcgKzc5LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIG1fZ2xvYmFs
cyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUpOwogICAgIGhl
YXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsKIAotICAg
IG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0s
IHRoaXMsIG1vZHVsZS0+Y29kZUJsb2NrKCkpOwogICAgIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0
LnNldCh2bSwgdGhpcywgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICBwdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZXhwb3J0cyIpLCBtb2R1bGVOYW1lc3BhY2VP
YmplY3QsIE5vbmUpOwogfQpAQCAtODMsNyArOTUsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGUpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fY29kZUJsb2NrKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVs
ZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tZW1v
cnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApp
bmRleCA5OWEyYzkwZjdlYTM1M2UzNmI2NTVhYmU1Y2RkNWM0OTgzYzUzYTE4Li44OTIzZTE2NTBi
ZjMxNjVkYTk5MThlZjY5YzVjNTk2ZDI4MWQxYjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApAQCAtMjksNiArMjks
NyBAQAogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09i
amVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAK
QEAgLTQ3LDEwICs0OCwxNiBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKQorICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1v
ZHVsZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9tb2R1bGUpOwotICAgICAgICBy
ZXR1cm4gbV9tb2R1bGUuZ2V0KCk7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jayk7CisgICAg
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+bW9kdWxlKCk7CisgICAgfQorCisgICAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsKICAgICB9CiAK
ICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiogaW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQpA
QCAtNzAsNyArNzcsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNXZWJBc3NlbWJseU1lbW9y
eSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KLSAgICB2b2lkIHNldE1lbW9y
eShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkgeyBtX21lbW9yeS5zZXQodm0s
IHRoaXMsIG1lbW9yeSk7IH0KKyAgICAvLyBDYWxsaW5nIHRoaXMgbWlnaHQgdHJpZ2dlciBhIHJl
Y29tcGlsZS4KKyAgICB2b2lkIHNldE1lbW9yeShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1i
bHlNZW1vcnkqKTsKKyAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbWVtb3J5TW9kZSgpIHsgcmV0dXJu
IG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KIAogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSog
dGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRUYWJsZShWTSYg
dm0sIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUpIHsgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRh
YmxlKTsgfQpAQCAtMTA0LDcgKzExMyw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOworICAgIFdy
aXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBXcml0
ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0
OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5PiBtX21lbW9yeTsKICAgICBX
cml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRhYmxlPiBtX3RhYmxlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAppbmRleCBm
NDI1M2I1YmZiODg2Y2VjZDlkNjQ1YjU4NjYxZTEzMzA5ZTIzZTIzLi5iZjUxYjRkMjFhMTdhMDVl
MDIxYzE5M2M1ZDJhMmUwY2NhZDk0MjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcApAQCAtMzcsOSArMzcsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpz
X2luZm8gPSB7ICJXZWJBc3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkpIH07CiAKLUpTV2ViQXNzZW1ibHlNZW1v
cnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBXYXNtOjpNZW1vcnkmJiBtZW1vcnkpCitKU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFz
c2VtYmx5TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdh
c206Ok1lbW9yeT4mJiBtZW1vcnkpCiB7Ci0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3Nl
bWJseU1lbW9yeSh2bSwgc3RydWN0dXJlLCBzdGQ6OmZvcndhcmQ8V2FzbTo6TWVtb3J5PihtZW1v
cnkpKTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
V2ViQXNzZW1ibHlNZW1vcnk+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1
Y3R1cmUsIFdURk1vdmUobWVtb3J5KSk7CisgICAgaW5zdGFuY2UtPm1fbWVtb3J5LT5jaGVjaygp
OwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGluc3RhbmNl
OwogfQpAQCAtNDksMTAgKzUwLDEzIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1lbW9yeTo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFdhc206Ok1lbW9yeSYmIG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNz
ZW1ibHlNZW1vcnkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9y
eT4mJiBtZW1vcnkpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX21lbW9yeShX
VEZNb3ZlKG1lbW9yeSkpCiB7CisgICAgQVNTRVJUKG1fbWVtb3J5LT5yZWZDb3VudCgpID09IDEp
OworICAgIG1fbWVtb3J5QmFzZSA9IG1fbWVtb3J5LT5tZW1vcnkoKTsKKyAgICBtX21lbW9yeVNp
emUgPSBtX21lbW9yeS0+c2l6ZSgpOwogfQogCiBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5
TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAt
NjAsMTIgKzY0LDEwIEBAIEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmJ1ZmZl
cihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgaWYgKG1fYnVmZmVy
V3JhcHBlcikKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyV3JhcHBlci5nZXQoKTsKIAotICAgIGF1
dG8gZGVzdHJ1Y3RvciA9IFtdICh2b2lkKikgewotICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRv
IGRvIGFueXRoaW5nIGhlcmUgdG8gZGVzdHJveSB0aGUgbWVtb3J5LgotICAgICAgICAvLyBUaGUg
QXJyYXlCdWZmZXIgYmFja2luZyB0aGUgSlNBcnJheUJ1ZmZlciBpcyBvbmx5IG93bmVkIGJ5IHVz
LAotICAgICAgICAvLyBzbyB3ZSBndWFyYW50ZWUgaXRzIGxpZmVjeWNsZS4KLSAgICB9OwotICAg
IG1fYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhtZW1vcnkoKS0+bWVtb3J5
KCksIG1lbW9yeSgpLT5zaXplKCksIFdURk1vdmUoZGVzdHJ1Y3RvcikpOworICAgIC8vIFdlIGNh
bid0IHVzZSBhIHJlZiBoZXJlIHNpbmNlIGl0IGRvZXNuJ3QgaGF2ZSBhIGNvcHkgY29uc3RydWN0
b3IuLi4KKyAgICBSZWY8V2FzbTo6TWVtb3J5PiBwcm90ZWN0ZWRNZW1vcnkgPSBtX21lbW9yeS5n
ZXQoKTsKKyAgICBhdXRvIGRlc3RydWN0b3IgPSBbcHJvdGVjdGVkTWVtb3J5ID0gV1RGTW92ZShw
cm90ZWN0ZWRNZW1vcnkpXSAodm9pZCopIHsgfTsKKyAgICBtX2J1ZmZlciA9IEFycmF5QnVmZmVy
OjpjcmVhdGVGcm9tQnl0ZXMobWVtb3J5KCkubWVtb3J5KCksIG1lbW9yeSgpLnNpemUoKSwgV1RG
TW92ZShkZXN0cnVjdG9yKSk7CiAgICAgbV9idWZmZXJXcmFwcGVyLnNldCh2bSwgdGhpcywgSlNB
cnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPm1fYXJyYXlCdWZmZXJTdHJ1Y3R1
cmUuZ2V0KCksIG1fYnVmZmVyLmdldCgpKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9idWZmZXJX
cmFwcGVyKTsKICAgICByZXR1cm4gbV9idWZmZXJXcmFwcGVyLmdldCgpOwpAQCAtNzYsNyArNzgs
NyBAQCBXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhFeGVjU3RhdGUq
IGV4ZWMsIHVpbnQzMl90IGRlbHRhLCBib29sCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFdhc206
OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQgPSBtZW1vcnkoKS0+c2l6ZUluUGFnZXMoKTsKKyAgICBX
YXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0gbWVtb3J5KCkuc2l6ZUluUGFnZXMoKTsKIAog
ICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKGRlbHRhKSkgewogICAgICAgICBpZiAo
c2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQpAQCAtOTIsMTIgKzk0LDE2IEBAIFdhc206
OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KEV4ZWNTdGF0ZSogZXhlYywgdWlu
dDMyX3QgZGVsdGEsIGJvb2wKICAgICB9CiAKICAgICBpZiAoZGVsdGEpIHsKLSAgICAgICAgYm9v
bCBzdWNjZXNzID0gbWVtb3J5KCktPmdyb3cobmV3U2l6ZSk7CisgICAgICAgIGJvb2wgc3VjY2Vz
cyA9IG1lbW9yeSgpLmdyb3cobmV3U2l6ZSk7CiAgICAgICAgIGlmICghc3VjY2VzcykgeworICAg
ICAgICAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZSA9PSBtZW1vcnkoKS5tZW1vcnkoKSk7CisgICAg
ICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplID09IG1lbW9yeSgpLnNpemUoKSk7CiAgICAgICAg
ICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQogICAgICAgICAgICAgICAg
IHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Io
ZXhlYykpOwogICAgICAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOwogICAgICAgICB9
CisgICAgICAgIG1fbWVtb3J5QmFzZSA9IG1lbW9yeSgpLm1lbW9yeSgpOworICAgICAgICBtX21l
bW9yeVNpemUgPSBtZW1vcnkoKS5zaXplKCk7CiAgICAgfQogCiAgICAgLy8gV2UgbmVlZCB0byBj
bGVhciBvdXQgdGhlIG9sZCBhcnJheSBidWZmZXIgYmVjYXVzZSBpdCBtaWdodCBub3cgYmUgcG9p
bnRpbmcKQEAgLTExMCw2ICsxMTYsNyBAQCBXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1l
bW9yeTo6Z3JvdyhFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHRhLCBib29sCiAgICAgICAg
IG1fYnVmZmVyV3JhcHBlci5jbGVhcigpOwogICAgIH0KIAorICAgIG1lbW9yeSgpLmNoZWNrKCk7
CiAgICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKIH0KIApAQCAtMTIzLDEzICsxMzAsNiBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIGF1dG8g
bWVtb3J5ID0gc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KGNlbGwpOwogICAgIEFT
U0VSVChtZW1vcnktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgVk0mIHZtID0gKm1lbW9y
eS0+dm0oKTsKLQotICAgIGlmIChtZW1vcnktPm1fYnVmZmVyKSB7Ci0gICAgICAgIEFycmF5QnVm
ZmVyQ29udGVudHMgZHVtbXlDb250ZW50czsKLSAgICAgICAgbWVtb3J5LT5tX2J1ZmZlci0+dHJh
bnNmZXJUbyh2bSwgZHVtbXlDb250ZW50cyk7Ci0gICAgICAgIG1lbW9yeS0+bV9idWZmZXIgPSBu
dWxscHRyOwotICAgIH0KIAogICAgIG1lbW9yeS0+SlNXZWJBc3NlbWJseU1lbW9yeTo6fkpTV2Vi
QXNzZW1ibHlNZW1vcnkoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAppbmRleCBmZmYxNDE1NzAyY2ZlYWQ2Y2U5MjIxNDkw
MmRkYjhjNmI0NGQyNjgwLi4wZWIxODhkNjBkNWUzMjAxYWY2NWM4Y2Y5ZDJmODg1Njk5YzhhN2Mx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1lbW9yeS5oCkBAIC00MSwyNSArNDEsMjcgQEAgY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeSA6
IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rl
c3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdhc206Ok1lbW9yeSYmKTsKKyAgICBzdGF0aWMgSlNX
ZWJBc3NlbWJseU1lbW9yeSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1lbW9y
eT4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIFdhc206Ok1l
bW9yeSogbWVtb3J5KCkgeyByZXR1cm4gJm1fbWVtb3J5OyB9CisgICAgV2FzbTo6TWVtb3J5JiBt
ZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQogICAgIEpTQXJyYXlCdWZmZXIqIGJ1
ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgV2FzbTo6UGFnZUNvdW50IGdyb3co
RXhlY1N0YXRlKiwgdWludDMyX3QgZGVsdGEsIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25G
YWlsdXJlKTsKIAotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1vcnkpICsgV2FzbTo6
TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9t
ZW1vcnkpICsgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKTsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3Nl
bWJseU1lbW9yeSwgbV9tZW1vcnlCYXNlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1f
bWVtb3J5U2l6ZSk7IH0KIAotcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0m
LCBTdHJ1Y3R1cmUqLCBXYXNtOjpNZW1vcnkmJik7Citwcml2YXRlOgorICAgIEpTV2ViQXNzZW1i
bHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TWVtb3J5PiYmKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
ICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAK
LSAgICBXYXNtOjpNZW1vcnkgbV9tZW1vcnk7CisgICAgdm9pZCogbV9tZW1vcnlCYXNlOworICAg
IHNpemVfdCBtX21lbW9yeVNpemU7CisgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAg
ICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKICAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IG1fYnVmZmVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKaW5kZXggMDhmYTU4NDYyOGYw
N2QyZDhjOGMzYjJiNzhkMTE1ODBjNGYyODE3Ni4uNTZmMjBiNDM1MDY5ZjNmYjVmMGI2OTEyMmMz
NzI5ODFhMGM1ZjUzOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTMwLDE4ICszMCw0NiBAQAogCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNv
bXBpbGVFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRl
ICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21Q
bGFuLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
IAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNfaW5mbyA9IHsgIldlYkFz
c2VtYmx5Lk1vZHVsZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNXZWJBc3NlbWJseU1vZHVsZSkgfTsKIAotSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJB
c3NlbWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6
dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJiBtb2R1bGVJbmZvcm1hdGlvbiwg
QmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRT
dHVicz4mJiB3YXNtRXhpdFN0dWJzLCBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUsIHVu
c2lnbmVkIGNhbGxlZUNvdW50KQorSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJs
eU1vZHVsZTo6YnVpbGRDb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFdhc206OlBs
YW4mIHBsYW4sIHN0ZDo6b3B0aW9uYWw8V2FzbTo6TWVtb3J5OjpNb2RlPiBtb2RlKQogewotICAg
IGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJs
eU1vZHVsZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQpKSkgSlNXZWJBc3Nl
bWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBzdGQ6OmZvcndhcmQ8c3RkOjp1bmlxdWVfcHRyPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPj4obW9kdWxlSW5mb3JtYXRpb24pLCBzdGQ6OmZvcndhcmQ8
QmFnPENhbGxMaW5rSW5mbz4+KGNhbGxMaW5rSW5mb3MpLCBzdGQ6OmZvcndhcmQ8VmVjdG9yPFdh
c206Oldhc21FeGl0U3R1YnM+Pih3YXNtRXhpdFN0dWJzKSwgY2FsbGVlQ291bnQpOwotICAgIGlu
c3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgZXhwb3J0U3ltYm9sVGFibGUpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAvLyBPbiBmYWlsdXJlLCBhIG5l
dyBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IgaXMgdGhyb3duLgorICAgIHBsYW4ucnVuKG1vZGUp
OworICAgIGlmIChwbGFuLmZhaWxlZCgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKGV4ZWMsIHZtLCBwbGFuLmVy
cm9yTWVzc2FnZSgpKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBpZiAo
bW9kZSkKKyAgICAgICAgQVNTRVJUKCptb2RlID09IHBsYW4ubW9kZSgpKTsKKworICAgIHVuc2ln
bmVkIGNhbGxlZUNvdW50ID0gcGxhbi5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKTsKKyAgICBhdXRv
KiBjb2RlQmxvY2sgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUodm0sIHRoaXMsIHBs
YW4udGFrZUNhbGxMaW5rSW5mb3MoKSwgcGxhbi50YWtlV2FzbUV4aXRTdHVicygpLCBwbGFuLm1v
ZGUoKSwgY2FsbGVlQ291bnQpOworCisgICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhleGVjLT5q
c0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwKKyAgICAgICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJ
bmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICAgICAgY29kZUJsb2Nr
LT5zZXRKU0VudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCBqc0VudHJ5cG9pbnRDYWxs
ZWUpOworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXRXYXNtRW50cnlwb2ludENhbGxlZSh2bSwg
Y2FsbGVlSW5kZXgsIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgfSk7CisgICAgcmV0
dXJuIGNvZGVCbG9jazsKK30KKworSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJBc3NlbWJseU1v
ZHVsZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpCit7CisgICAgYXV0byogaW5zdGFu
Y2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxlPih2bS5o
ZWFwKSkgSlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlKTsKKworICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlYywgc291cmNlLCBieXRlU2l6ZSk7CiAgICAgcmV0dXJu
IGluc3RhbmNlOwogfQogCkBAIC01MCwyMSArNzgsNjEgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAK
LUpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYm
IG1vZHVsZUluZm9ybWF0aW9uLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZl
Y3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmIHdhc21FeGl0U3R1YnMsIHVuc2lnbmVkIGNhbGxl
ZUNvdW50KQorSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICwg
bV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uKSkKLSAgICAsIG1f
Y2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5rSW5mb3MpKQotICAgICwgbV93YXNtRXhpdFN0
dWJzKFdURk1vdmUod2FzbUV4aXRTdHVicykpCi0gICAgLCBtX2NhbGxlZUNvdW50KGNhbGxlZUNv
dW50KQogewotICAgIG1lbXNldChjYWxsZWVzKCksIDAsIG1fY2FsbGVlQ291bnQgKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIDIpOwogfQogCi12b2lkIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU3ltYm9sVGFibGUqIGV4cG9y
dFN5bWJvbFRhYmxlKQorSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseU1vZHVs
ZTo6Y29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5
KiBtZW1vcnkpCit7CisgICAgV2FzbTo6TWVtb3J5OjpNb2RlIG1vZGUgPSBtZW1vcnktPm1lbW9y
eSgpLm1vZGUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXYXNtOjpNZW1vcnk6
Ok51bWJlck9mTW9kZXM7ICsraSkgeworICAgICAgICBpZiAobV9jb2RlQmxvY2tzW2ldICYmIG1f
Y29kZUJsb2Nrc1tpXS0+aXNTYWZlVG9SdW4obWVtb3J5KSkKKyAgICAgICAgICAgIHJldHVybiBt
X2NvZGVCbG9ja3NbaV0uZ2V0KCk7CisgICAgfQorCisgICAgQVNTRVJUKCFtX2NvZGVCbG9ja3Nb
bW9kZV0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAv
LyBXZSBkb24ndCBoYXZlIGEgY29kZSBibG9jayBmb3IgdGhpcyBtb2RlLCB3ZSBuZWVkIHRvIHJl
Y29tcGlsZS4uLgorICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihtX3NvdXJjZUJ1ZmZlci0+ZGF0YSgpKSwgbV9zb3VyY2VCdWZmZXItPmJ5dGVMZW5ndGgoKSk7
CisKKyAgICBhdXRvKiBjb2RlQmxvY2sgPSBidWlsZENvZGVCbG9jayh2bSwgZXhlYywgcGxhbiwg
bW9kZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICBB
U1NFUlQocGxhbi5leHBvcnRzKCkuc2l6ZSgpID09IG1fZXhwb3J0U3ltYm9sVGFibGUtPnNpemUo
KSk7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgZm9yIChhdXRvJiBleHAg
OiBwbGFuLmV4cG9ydHMoKSkKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZXhwLCBtX2V4cG9y
dFN5bWJvbFRhYmxlLT5jb250YWlucyhleHAuZmllbGQuaW1wbCgpKSk7CisgICAgfQorCisgICAg
QVNTRVJUKG1vZGUgPT0gY29kZUJsb2NrLT5tb2RlKCkpOworICAgIG1fY29kZUJsb2Nrc1ttb2Rl
XS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAgcmV0dXJuIGNvZGVCbG9jazsKK30KKwor
dm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgV2FzbTo6UGxh
biBwbGFuKCZ2bSwgc291cmNlLCBieXRlU2l6ZSk7CisKKyAgICBhdXRvKiBjb2RlQmxvY2sgPSBi
dWlsZENvZGVCbG9jayh2bSwgZXhlYywgcGxhbik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwpOworCisgICAgLy8gT24gc3VjY2VzcywgYSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlIG9i
amVjdCBpcyByZXR1cm5lZCB3aXRoIFtbTW9kdWxlXV0gc2V0IHRvIHRoZSB2YWxpZGF0ZWQgQXN0
Lm1vZHVsZS4KKyAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUgPSBTeW1ib2xUYWJs
ZTo6Y3JlYXRlKHZtKTsKKyAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygpKSB7Cisg
ICAgICAgIGF1dG8gb2Zmc2V0ID0gZXhwb3J0U3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZz
ZXQoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNldChO
b0xvY2tpbmdOZWNlc3NhcnksIGV4cC5maWVsZC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFy
T2Zmc2V0KG9mZnNldCkpKTsKKyAgICB9CisKKyAgICBtX3NvdXJjZUJ1ZmZlciA9IEFycmF5QnVm
ZmVyOjpjcmVhdGUoc291cmNlLCBieXRlU2l6ZSk7CisgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9
IHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgbV9leHBvcnRTeW1ib2xUYWJsZS5z
ZXQodm0sIHRoaXMsIGV4cG9ydFN5bWJvbFRhYmxlKTsKKyAgICBtX2NvZGVCbG9ja3NbY29kZUJs
b2NrLT5tb2RlKCldLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKU1dlYkFz
c2VtYmx5TW9kdWxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTc5LDE4ICsxNDcsOCBAQCB2
b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRTeW1ib2xU
YWJsZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fY2FsbGVl
Q291bnQgKiAyOyBpKyspCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmNhbGxl
ZXMoKVtpXSk7Ci0KLSAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJnRoaXNP
YmplY3QtPm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7Ci19Ci0KLXZvaWQgSlNXZWJBc3NlbWJs
eU1vZHVsZTo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
KQotewotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIHRoaXNPYmplY3QgPSBiaXR3aXNlX2Nhc3Q8
SlNXZWJBc3NlbWJseU1vZHVsZSo+KAotICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMp
IC0gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNb2R1bGUsIG1fdW5jb25kaXRpb25hbEZp
bmFsaXplcikpOwotICAgIGZvciAoYXV0byBpdGVyID0gdGhpc09iamVjdC0+bV9jYWxsTGlua0lu
Zm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT52aXNpdFdlYWso
KnRoaXNPYmplY3QtPnZtKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXYXNtOjpN
ZW1vcnk6Ok51bWJlck9mTW9kZXM7ICsraSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5k
ZXggN2UwNTFmNTcyMjQyNDY4YTY2NDE5MDMxYTg4OTVjNjEzNmUzMDg3Ni4uOThmZGViNDRmNmQy
MzU5ZmQ2Yzc3ODk5MjIyNTU2MmNkZWQ5ZmFiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsyOSw3IEBACiAKICNp
bmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0j
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2suaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVk
ZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAgLTM3LDg1ICszNyw0NyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdhc20geworY2xhc3MgUGxhbjsKK30K
KwogY2xhc3MgU3ltYm9sVGFibGU7CitjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5OwogCiBjbGFz
cyBKU1dlYkFzc2VtYmx5TW9kdWxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0
aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlx
dWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYmLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBW
ZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiwgU3ltYm9sVGFibGUqLCB1bnNpZ25lZCk7Cisg
ICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKTsKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUp
OwogCiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRp
b24mIG1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gKm1fbW9kdWxlSW5mb3JtYXRp
b24uZ2V0KCk7IH0KKyAgICBXYXNtOjpNZW1vcnkmIHRha2VSZXNlcnZlZE1lbW9yeSgpIHsgcmV0
dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS50YWtlUmVzZXJ2ZWRNZW1vcnkoKTsgfQog
ICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhw
b3J0U3ltYm9sVGFibGUuZ2V0KCk7IH0KICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25h
dHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwogICAg
IH0KLSAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4gbV93
YXNtRXhpdFN0dWJzLnNpemUoKTsgfQotCi0gICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4
U3BhY2UpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2Ug
Pj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKLSAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXgg
PSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENvdW50KCk7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7Ci0gICAgICAgIHJldHVy
biBjYWxsZWVzKClbY2FsbGVlSW5kZXhdLmdldCgpOwotICAgIH0KLQotICAgIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNp
Z25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChm
dW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKLSAgICAgICAgdW5z
aWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENv
dW50KCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3Vu
dCk7Ci0gICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50
XS5nZXQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEpTRW50cnlwb2ludENhbGxlZShWTSYgdm0s
IHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUpCi0gICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwot
ICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXhdLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKLSAg
ICB9CiAKLSAgICB2b2lkIHNldFdhc21FbnRyeXBvaW50Q2FsbGVlKFZNJiB2bSwgdW5zaWduZWQg
Y2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSkKLSAgICB7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7Ci0gICAgICAgIGNh
bGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLnNldCh2bSwgdGhpcywgY2FsbGVl
KTsKLSAgICB9CisgICAgLy8gUmV0dXJucyB0aGUgY29kZSBibG9jayB0aGF0IHRoaXMgbW9kdWxl
IHdhcyBvcmlnaW5hbGx5IGNvbXBpbGVkIGV4cGVjdGluZyB0byB1c2UuIFRoaXMgd29uJ3QgbmVl
ZCB0byByZWNvbXBpbGUuCisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkg
eyByZXR1cm4gbV9jb2RlQmxvY2tzW21fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tb2RlKCld
LmdldCgpOyB9CisgICAgLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgY29kZSBibG9jayBmb3Ig
dGhlIGdpdmVuIG1lbW9yeSwgcG9zc2libHkgdHJpZ2dlcmluZyBhIHJlY29tcGlsZS4KKyAgICBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFz
c2VtYmx5TWVtb3J5Kik7CiAKLSAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4q
IGNhbGxlZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJp
ZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zm
c2V0T2ZDYWxsZWVzKCkpOwotICAgIH0KK3ByaXZhdGU6CisgICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayogYnVpbGRDb2RlQmxvY2soVk0mLCBFeGVjU3RhdGUqLCBXYXNtOjpQbGFuJiwgc3RkOjpv
cHRpb25hbDxXYXNtOjpNZW1vcnk6Ok1vZGU+IG1vZGUgPSBzdGQ6Om51bGxvcHQpOwogCi1wcm90
ZWN0ZWQ6Ci0gICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5p
cXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJiwgQmFnPENhbGxMaW5rSW5mbz4mJiwg
VmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKLSAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3ltYm9sVGFibGUqKTsKKyAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IEV4ZWNTdGF0ZSosIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotcHJpdmF0ZToKLSAgICBzdGF0aWMgc2l6ZV90IG9m
ZnNldE9mQ2FsbGVlcygpCi0gICAgewotICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pPihzaXplb2Yo
SlNXZWJBc3NlbWJseU1vZHVsZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBzaXplX3QgYWxsb2Nh
dGlvblNpemUodW5zaWduZWQgbnVtQ2FsbGVlcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBvZmZz
ZXRPZkNhbGxlZXMoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4p
ICogbnVtQ2FsbGVlcyAqIDI7Ci0gICAgfQotCi0gICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFs
aXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeyAKLSAgICAgICAgdm9p
ZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOwotICAgIH07Ci0KLSAgICBVbmNv
bmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKKyAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IG1fc291cmNlQnVmZmVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKLSAgICBCYWc8Q2FsbExpbmtJ
bmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX2V4
cG9ydFN5bWJvbFRhYmxlOwotICAgIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiBtX3dhc21F
eGl0U3R1YnM7Ci0gICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKKyAgICBXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2tzW1dhc206Ok1lbW9yeTo6TnVtYmVy
T2ZNb2Rlc107CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggNWFlODE3
ZjRmYWI0OTI5NGE1NjM2M2IwNWMyMDExOTExYjNiY2EzZS4uMDRlZDY2NjBlZTFlZDM3MzFkZGVj
ZWRlYzk5NDBkMzEwMzBmOTFkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTU2LDYgKzU2LDggQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjKQogICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
d2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwogICAgIGNvbnN0IFdhc206OlNpZ25hdHVy
ZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25h
dHVyZUluZGV4KTsKIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBtZW1vcnkgd2UgdGhpbmsg
d2UgYXJlIGdvaW5nIHRvIHJ1biB3aXRoIG1hdGNoZXMgdGhlIG9uZSB3ZSBleHBlY3QuCisgICAg
QVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+Y29kZUJsb2NrKCktPmlzU2FmZVRvUnVu
KHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+bWVtb3J5KCkpKTsKICAgICB7CiAgICAgICAgIC8v
IENoZWNrIGlmIHdlIGhhdmUgYSBkaXNhbGxvd2VkIEk2NCB1c2UuCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuY3BwCmluZGV4IDc2M2RjNDk0Y2U1YTQ3ODJkNmU2ODQ3ZjgyMjU2NjFiMzVi
ZGE3YWIuLjA4ZWE5ZTAwNjUwNTM1OWFkOWE4NTM2YzU5Y2IxNjJmZTM4ZmUyZTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtODQsMTEgKzg0LDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4
ZWNTdGF0ZSogZXgKIAogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIGpzTW9kdWxl
LCBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICB7Ci0gICAgICAg
IC8vIEFsd2F5cyBzdGFydCB3aXRoIGEgZHVtbXkgTWVtb3J5LCBzbyB0aGF0IHdhc20gLT4gd2Fz
bSB0aHVua3MgYXZvaWQgY2hlY2tpbmcgZm9yIGEgbnVsbHB0ciBNZW1vcnkgd2hlbiB0cnlpbmcg
dG8gc2V0IHBpbm5lZCByZWdpc3RlcnMuCi0gICAgICAgIFdhc206Ok1lbW9yeSBtZW1vcnk7Ci0g
ICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0
ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVj
dHVyZSgpLCBXVEZNb3ZlKG1lbW9yeSkpKTsKLSAgICB9CisKIAogICAgIC8vIExldCBmdW5jcywg
bWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHktZW1wdHkgbGlzdHMgb2YgY2FsbGFibGUg
SmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0cyBhbmQgV2ViQXNz
ZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgogICAgIC8vIExldCBpbXBvcnRzIGJl
IGFuIGluaXRpYWxseS1lbXB0eSBsaXN0IG9mIGV4dGVybmFsIHZhbHVlcy4KQEAgLTE3OCwxMiAr
MTc0LDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
V2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBv
cnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSkpOwogCiAgICAg
ICAgICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRp
b24ubWVtb3J5LmluaXRpYWwoKTsKLSAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxJ
bml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS0+aW5pdGlhbCgpOworICAgICAgICAgICAgV2FzbTo6
UGFnZUNvdW50IGFjdHVhbEluaXRpYWwgPSBtZW1vcnktPm1lbW9yeSgpLmluaXRpYWwoKTsKICAg
ICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQogICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIp
KSkpOwogCiAgICAgICAgICAgICBpZiAoV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkTWF4aW11bSA9
IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpIHsKLSAgICAgICAgICAgICAgICBX
YXNtOjpQYWdlQ291bnQgYWN0dWFsTWF4aW11bSA9IG1lbW9yeS0+bWVtb3J5KCktPm1heGltdW0o
KTsKKyAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsTWF4aW11bSA9IG1lbW9y
eS0+bWVtb3J5KCkubWF4aW11bSgpOwogICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11
bSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRl
SlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1w
b3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0
IGl0IGRvZXMiKSkpKTsKQEAgLTE5NCw5ICsxOTAsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSog
ZXgKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgi
TWVtb3J5IGltcG9ydHMgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBl
Y3RlZCAnbWF4aW11bSciKSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KICAgICAgICAgICAgIC8v
IGlpaS4gQXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFu
Y2UtPnNldE1lbW9yeSh2bSwgbWVtb3J5KTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1v
cnkodm0sIGV4ZWMsIG1lbW9yeSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDogewpAQCAtMjM1LDEy
ICsyMzMsMTcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgaWYgKG1vZHVsZUlu
Zm9ybWF0aW9uLm1lbW9yeSAmJiAhaGFzTWVtb3J5SW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOwogICAgICAg
ICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9u
LgotICAgICAgICAgICAgYm9vbCBmYWlsZWQ7Ci0gICAgICAgICAgICBXYXNtOjpNZW1vcnkgbWVt
b3J5KG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5tYXhpbXVtKCksIGZhaWxlZCk7Ci0gICAgICAgICAgICBpZiAoZmFpbGVkKQotICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwotICAgICAgICAgICAg
aW5zdGFuY2UtPnNldE1lbW9yeSh2bSwKLSAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1v
cnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1l
bW9yeVN0cnVjdHVyZSgpLCBXVEZNb3ZlKG1lbW9yeSkpKTsKKyAgICAgICAgICAgIFJlZlB0cjxX
YXNtOjpNZW1vcnk+IG1lbW9yeTsKKyAgICAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5t
ZW1vcnkuaGFzUmVzZXJ2ZWRNZW1vcnkoKSkKKyAgICAgICAgICAgICAgICBtZW1vcnkgPSBhZG9w
dFJlZihqc01vZHVsZS0+dGFrZVJlc2VydmVkTWVtb3J5KCkpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVs
ZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5t
YXhpbXVtKCkpOworICAgICAgICAgICAgICAgIGlmICghbWVtb3J5KQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIGV4ZWMsCisgICAgICAgICAgICAgICAgSlNX
ZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIGFkb3B0UmVmKCptZW1vcnkubGVha1JlZigp
KSkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjYzLDYgKzI2NiwxMiBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5z
dGFuY2UoRXhlY1N0YXRlKiBleAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKCFpbnN0YW5j
ZS0+bWVtb3J5KCkpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBkdW1teSBtZW1v
cnksIHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVja2luZyBmb3IgYSBudWxs
cHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVycy4KKyAgICAgICAg
aW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRl
KHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0
dXJlKCksIGFkb3B0UmVmKCoobmV3IFdhc206Ok1lbW9yeSgpKSkpKTsKKworICAgIH0KKwogICAg
IC8vIEdsb2JhbHMKICAgICB7CiAgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IG1v
ZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmNwcAppbmRleCA2Yzg4N2FmNTk3YTg2NTMyOWNmYjQzZjVlZGI0N2I0MWU2NjA5ZWM4Li41
MTEyOWUzMTAxMmYwYzFiNTQyYWM5MWU4OTk0ZTQyOWQ1NzVlOGQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNv
bnN0cnVjdG9yLmNwcApAQCAtOTYsMTIgKzk2LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBleGVj
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIGZhaWxlZDsKLSAgICBXYXNtOjpNZW1vcnkg
bWVtb3J5KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGZhaWxlZCk7Ci0gICAg
aWYgKGZhaWxlZCkKKyAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1v
cnk6OmNyZWF0ZSh2bSwgaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCk7CisgICAg
aWYgKCFtZW1vcnkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUo
KSwgV1RGTW92ZShtZW1vcnkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFz
c2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2Vi
QXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKm1lbW9yeS5sZWFrUmVmKCkpKSk7
CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2Vt
Ymx5TWVtb3J5KEV4ZWNTdGF0ZSogc3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCmlu
ZGV4IDgxMjk1OTIzYzdhZGNhMmRlNjBiZWNjMTkzZmFjZTk4MmY0NWZkMjIuLmE5NDBlOGRmZjBj
YmVhNWZkZjA4Mjk5MGE1N2FkOGQ4ZmVjYzE3MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3Iu
Y3BwCkBAIC04MCwzMSArODAsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0
b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlLCBTdHJ1Y3R1cmUqCiAgICAgdWludDhf
dCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAKLSAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0
ZVNpemUpOwotICAgIC8vIE9uIGZhaWx1cmUsIGEgbmV3IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ciBpcyB0aHJvd24uCi0gICAgcGxhbi5ydW4oKTsKLSAgICBpZiAocGxhbi5mYWlsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlSlNXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvcihzdGF0ZSwgdm0sIHBsYW4uZXJyb3JNZXNzYWdlKCkpKTsKLQotICAg
IC8vIE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0dXJu
ZWQgd2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUgdmFsaWRhdGVkIEFzdC5tb2R1bGUuCi0KLSAg
ICAvLyBUaGUgZXhwb3J0IHN5bWJvbCB0YWJsZSBpcyB0aGUgc2FtZSBmb3IgYWxsIEluc3RhbmNl
cyBvZiBhIE1vZHVsZS4KLSAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUgPSBTeW1i
b2xUYWJsZTo6Y3JlYXRlKHZtKTsKLSAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygp
KSB7Ci0gICAgICAgIGF1dG8gb2Zmc2V0ID0gZXhwb3J0U3ltYm9sVGFibGUtPnRha2VOZXh0U2Nv
cGVPZmZzZXQoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKLSAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUt
PnNldChOb0xvY2tpbmdOZWNlc3NhcnksIGV4cC5maWVsZC5pbXBsKCksIFN5bWJvbFRhYmxlRW50
cnkoVmFyT2Zmc2V0KG9mZnNldCkpKTsKLSAgICB9Ci0KLSAgICAvLyBPbmx5IHdhc20taW50ZXJu
YWwgZnVuY3Rpb25zIGhhdmUgYSBjYWxsZWUsIHN0dWJzIHRvIEpTIGRvIG5vdC4KLSAgICB1bnNp
Z25lZCBjYWxsZWVDb3VudCA9IHBsYW4uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCk7Ci0gICAgSlNX
ZWJBc3NlbWJseU1vZHVsZSogcmVzdWx0ID0gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZt
LCBzdHJ1Y3R1cmUsIHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCksIHBsYW4udGFrZUNhbGxM
aW5rSW5mb3MoKSwgcGxhbi50YWtlV2FzbUV4aXRTdHVicygpLCBleHBvcnRTeW1ib2xUYWJsZSwg
Y2FsbGVlQ291bnQpOwotICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoc3RhdGUtPmpzQ2FsbGVl
KCktPmdsb2JhbE9iamVjdCgpLCAKLSAgICAgICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwg
SlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgewotICAgICAgICAgICAgcmVzdWx0LT5zZXRKU0Vu
dHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUpOwotICAg
ICAgICAgICAgcmVzdWx0LT5zZXRXYXNtRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgs
IHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgfSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIHN0YXRlLCBzdHJ1
Y3R1cmUsIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CiB9CiAKIFdlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSogdGhp
c1Byb3RvdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCBmMTdmMjlkZjk4NTBjM2M4ZjQ2NGEy
ZmUxNjA2Zjc0ZGFjZTAwMjNhLi42MjMyYzI0MWNlNDJkY2Y0Mzc1ODBhNzc0YTcxOWI4NzEwNGNi
MTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC05MiwxMCArOTIsMTEgQEAgdm9pZCBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3QKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpOwogCiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gaW5zdGFuY2Ut
Pm1vZHVsZSgpOworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3Rh
bmNlLT5jb2RlQmxvY2soKTsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9k
dWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKICAgICBTeW1i
b2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUgPSBtb2R1bGUtPmV4cG9ydFN5bWJvbFRhYmxlKCk7
Ci0gICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCA9IG1vZHVsZS0+ZnVuY3Rpb25JbXBv
cnRDb3VudCgpOworICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQgPSBjb2RlQmxvY2st
PmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKIAogICAgIC8vIEZJWE1FIHdpcmUgdXAgdGhlIGltcG9y
dHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUxMTgKIApAQCAt
MTE2LDggKzExNyw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0CiAgICAgICAgICAgICAvLyAg
ICAgYS4gTGV0IGZ1bmMgYmUgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdCBjcmVh
dGVkIGZyb20gYy4KICAgICAgICAgICAgIC8vICAgICBiLiBBcHBlbmQgZnVuYyB0byBmdW5jcy4K
ICAgICAgICAgICAgIC8vICAgICBjLiBSZXR1cm4gZnVuYy4KLSAgICAgICAgICAgIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IG1vZHVsZS0+anNFbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKLSAgICAgICAgICAgIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT53YXNtRW50
cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CisgICAg
ICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxv
Y2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRl
eCk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxl
ZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGV4cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShl
eHAua2luZEluZGV4KTsKICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0
dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4
KTsKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1i
bHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpLCBleHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUs
IHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CkBAIC0xNzgsMTIgKzE3OSwx
MiBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdAogICAgICAgICAvLyBUaGUgc3RhcnQgZnVuY3Rp
b24gbXVzdCBub3QgdGFrZSBhbnkgYXJndW1lbnRzIG9yIHJldHVybiBhbnl0aGluZy4gVGhpcyBp
cyBlbmZvcmNlZCBieSB0aGUgcGFyc2VyLgogICAgICAgICBBU1NFUlQoIXNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpKTsKICAgICAgICAgQVNTRVJUKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID09
IFdhc206OlZvaWQpOwotICAgICAgICBpZiAoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPCBtb2R1
bGUtPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgeworICAgICAgICBpZiAoc3RhcnRGdW5jdGlvbklu
ZGV4U3BhY2UgPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewogICAgICAgICAg
ICAgSlNDZWxsKiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKHN0YXJ0
RnVuY3Rpb25JbmRleFNwYWNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24u
c2V0KHZtLCB0aGlzLCBzdGFydEZ1bmN0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IG1vZHVsZS0+anNF
bnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSk7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENh
bGxlZSA9IG1vZHVsZS0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxs
ZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+
d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlKTsKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0g
V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3
YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgbV9zdGFy
dEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAgICB9CkBAIC0yMDcsNiAr
MjA4LDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0
YXRlKiBzdGF0ZSkKIAogICAgIHsKICAgICAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxl
ID0gbV9pbnN0YW5jZS0+bW9kdWxlKCk7CisgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IG1faW5zdGFuY2UtPmNvZGVCbG9jaygpOwogICAgICAgICBjb25zdCBXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUlu
Zm9ybWF0aW9uKCk7CiAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBtX2luc3Rh
bmNlLT50YWJsZSgpOwogICAgICAgICBmb3IgKGNvbnN0IFdhc206OkVsZW1lbnQmIGVsZW1lbnQg
OiBtb2R1bGVJbmZvcm1hdGlvbi5lbGVtZW50cykgewpAQCAtMjI5LDEzICsyMzEsMTMgQEAgSlNW
YWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBzdGF0ZSkK
ICAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIGltcG9ydC4KICAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEwCiAgICAgICAgICAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzW2ld
OwotICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwgbW9kdWxlLT5mdW5jdGlvbklt
cG9ydENvdW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8IGNvZGVC
bG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1ZNUmFuZ2VF
cnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiRWxlbWVudCBpcyBzZXR0aW5nIHRoZSB0
YWJsZSB2YWx1ZSB3aXRoIGFuIGltcG9ydC4gVGhpcyBpcyBub3QgeWV0IGltcGxlbWVudGVkLiBG
SVhNRS4iKSkpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IG1vZHVsZS0+anNFbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgICAgICAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IG1vZHVsZS0+d2Fz
bUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwor
ICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9
IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50
cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIFdhc206OlNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgY29uc3QgV2Fz
bTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KCZ2bSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2Ug
ZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmNpdG9uIGluZGV4IDAuCkBAIC0yNTUs
OCArMjU3LDggQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhl
Y1N0YXRlKiBzdGF0ZSkKICAgICAgICAgY29uc3QgVmVjdG9yPFdhc206OlNlZ21lbnQ6OlB0cj4m
IGRhdGEgPSBtX2luc3RhbmNlLT5tb2R1bGUoKS0+bW9kdWxlSW5mb3JtYXRpb24oKS5kYXRhOwog
ICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBqc01lbW9yeSA9IG1faW5zdGFuY2UtPm1lbW9y
eSgpOwogICAgICAgICBpZiAoIWRhdGEuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB1aW50OF90
KiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihqc01lbW9yeS0+bWVtb3J5KCkt
Pm1lbW9yeSgpKTsKLSAgICAgICAgICAgIHVpbnQ2NF90IHNpemVJbkJ5dGVzID0ganNNZW1vcnkt
Pm1lbW9yeSgpLT5zaXplKCk7CisgICAgICAgICAgICB1aW50OF90KiBtZW1vcnkgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihqc01lbW9yeS0+bWVtb3J5KCkubWVtb3J5KCkpOworICAgICAg
ICAgICAgdWludDY0X3Qgc2l6ZUluQnl0ZXMgPSBqc01lbW9yeS0+bWVtb3J5KCkuc2l6ZSgpOwog
ICAgICAgICAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogZGF0YSkgewogICAgICAgICAgICAgICAg
IGlmIChzZWdtZW50LT5zaXplSW5CeXRlcykgewogICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBvZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9EYXRhTG9nLmgKaW5kZXggMTNmOTEzYmQ1YmFlNjAyOTFkZDUzOGY3ZmE1ODM4OGM4
OGVmYmM5MC4uMGIwODQ4OGIyMGU1MDMxYzAwNjY5OWFlNjBjZGVlMjRhMGM5N2JmYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvRGF0YUxvZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0RhdGFM
b2cuaApAQCAtNDgsMTMgKzQ4LDI5IEBAIHZvaWQgZGF0YUxvZyhjb25zdCBUeXBlcyYuLi4gdmFs
dWVzKQogdGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+CiB2b2lkIGRhdGFMb2dMbihjb25zdCBU
eXBlcyYuLi4gdmFsdWVzKQogewotICAgIGRhdGFGaWxlKCkucHJpbnQodmFsdWVzLi4uLCAiXG4i
KTsKKyAgICBkYXRhTG9nKHZhbHVlcy4uLiwgIlxuIik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
Li4uIFR5cGVzPgordm9pZCBkYXRhTG9nSWYoYm9vbCBzaG91bGRMb2csIGNvbnN0IFR5cGVzJi4u
LiB2YWx1ZXMpCit7CisgICAgaWYgKHNob3VsZExvZykKKyAgICAgICAgZGF0YUxvZyh2YWx1ZXMu
Li4pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KK3ZvaWQgZGF0YUxvZ0xuSWYo
Ym9vbCBzaG91bGRMb2csIGNvbnN0IFR5cGVzJi4uLiB2YWx1ZXMpCit7CisgICAgaWYgKHNob3Vs
ZExvZykKKyAgICAgICAgZGF0YUxvZ0xuKHZhbHVlcy4uLik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgogCiB1c2luZyBXVEY6OmRhdGFMb2c7CiB1c2luZyBXVEY6OmRhdGFMb2dMbjsKK3VzaW5n
IFdURjo6ZGF0YUxvZ0lmOwordXNpbmcgV1RGOjpkYXRhTG9nTG5JZjsKIHVzaW5nIFdURjo6ZGF0
YUxvZ0Y7CiB1c2luZyBXVEY6OmRhdGFMb2dGU3RyaW5nOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9SZWYuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZi5oCmluZGV4IGIzYWM0ZmJjNWJhNTA5
YTUzYzI0MTBlNGJlMjg0MGM0ZjBiOTc1MmEuLjgzMDk2NGZlYmVhNjYxYWQ3N2Q3NjZjNDhkNjQy
MWQ5OTJjNjUwYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZi5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1JlZi5oCkBAIC0xMzcsNiArMTM3LDcgQEAgcHVibGljOgogICAgIFQqIHB0cigp
IGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuIG1fcHRyOyB9CiAgICAgVCYgZ2V0KCkgY29u
c3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4gKm1fcHRyOyB9CiAgICAgb3BlcmF0b3IgVCYoKSBj
b25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiAqbV9wdHI7IH0KKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuICEqbV9wdHI7IH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IFJlZjxUPiByZXBsYWNlKFJlZjxVPiYmKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303337</attachid>
            <date>2017-03-03 13:43:15 -0800</date>
            <delta_ts>2017-03-03 14:23:16 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-162693-20170303134314.patch</filename>
            <type>text/plain</type>
            <size>115735</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ODFlYWQzNTM4YmU0Yjc0YzA1ZjlmMDU4Y2UzYTRiNTcyNjgxYTU2Li42Nzg2M2JlMzgzODRkYjlk
MzJjNTA1ZDljODUxNGYyZTA4YTZlNTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzIgQEAKKzIwMTctMDMtMDIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV0FTTSBzaG91bGQgc3VwcG9ydCBmYXN0ZXIgbG9hZHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMg
c3VwcG9ydCBmb3IgV2ViQXNzZW1ibHkgdXNpbmcgYSAzMi1iaXQgYWRkcmVzcworICAgICAgICBz
cGFjZSBmb3IgbWVtb3J5IChhbG9uZyB3aXRoIHNvbWUgZXh0cmEgc3BhY2UgZm9yIG9mZnNldAor
ICAgICAgICBvdmVyZmxvdykuIFdpdGggYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSAod2UgY2FsbCB0
aGVtCisgICAgICAgIFNpZ25hbGluZy9mYXN0IG1lbW9yaWVzKSwgd2UgcmVzZXJ2ZSB0aGUgdmly
dHVhbCBhZGRyZXNzIHNwYWNlIGZvcgorICAgICAgICAyXjMyICsgb2Zmc2V0IGJ5dGVzIG9mIG1l
bW9yeSBhbmQgb25seSBtYXJrIHRoZSB1c2FibGUgc2VjdGlvbiBhcworICAgICAgICByZWFkL3dy
aXRlLiBJZiB3YXNtIGNvZGUgd291bGQgcmVhZC93cml0ZSBvdXQgb2YgYm91bmRzIHdlIHVzZSBh
CisgICAgICAgIGN1c3RvbSBzaWduYWwgaGFuZGxlciB0byBjYXRjaCB0aGUgU0lHQlVTLiBUaGUg
c2lnbmFsIGhhbmRsZXIgdGhlbgorICAgICAgICBjaGVja3MgaWYgdGhlIGZhdWx0aW5nIGluc3Ry
dWN0aW9uIGlzIHdhc20gY29kZSBhbmQgdGVsbHMgdGhlCisgICAgICAgIHRocmVhZCB0byByZXN1
bWUgZXhlY3V0aW5nIGZyb20gdGhlIHdhc20gZXhjZXB0aW9uCisgICAgICAgIGhhbmRsZXIuIE90
aGVyd2lzZSwgdGhlIHNpZ25hbCBoYW5kbGVyIGNyYXNoZXMgdGhlIHByb2Nlc3MsIGFzCisgICAg
ICAgIHVzdWFsLgorCisgICAgICAgIEFsbCBvZiB0aGUgYWxsb2NhdGlvbnMgb2YgdGhlc2UgbWVt
b3JpZXMgYXJlIG1hbmFnZWQgYnkgdGhlCisgICAgICAgIFdhc206Ok1lbW9yeSBjbGFzcy4gSW4g
b3JkZXIgdG8gYXZvaWQgVExCIGNodXJuIGluIHRoZSBPUyB3ZSBjYWNoZQorICAgICAgICBvbGQg
U2lnbmFsaW5nIG1lbW9yaWVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB1c2UuIFNpbmNlIGdldHRp
bmcKKyAgICAgICAgdGhlIHdyb25nIG1lbW9yeSBjYW4gY2F1c2UgcmVjb21waWxlcywgd2UgdHJ5
IHRvIHJlc2VydmUgYSBtZW1vcnkKKyAgICAgICAgZm9yIG1vZHVsZXMgdGhhdCBkbyBub3QgaW1w
b3J0IGEgbWVtb3J5LiBJZiBhIG1vZHVsZSBkb2VzIGltcG9ydCBhCisgICAgICAgIG1lbW9yeSwg
d2UgdHJ5IHRvIGd1ZXNzIHRoZSB0eXBlIG9mIG1lbW9yeSB3ZSBhcmUgZ29pbmcgdG8gZ2V0Cisg
ICAgICAgIGJhc2VkIG9uIHRoZSBsYXN0IG9uZSBhbGxvY2F0ZWQuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIGNoYW5nZXMgaG93IHRoZSB3YXNtIEpTLWFwaSBtYW5hZ2VzIG9iamVjdHMuIFNp
bmNlCisgICAgICAgIHdlIGNhbiBjb21waWxlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBjb2RlLCB0
aGlzIHBhdGNoIGFkZHMgYSBuZXcKKyAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBjbGFz
cyB0aGF0IGhvbGRzIGFsbCB0aGUgaW5mb3JtYXRpb24KKyAgICAgICAgc3BlY2lmaWMgdG8gcnVu
bmluZyBhIG1vZHVsZSBpbiBhIHBhcnRpY3VsYXIgYm91bmRzIGNoZWNraW5nCisgICAgICAgIG1v
ZGUuIEFkZGl0aW9uYWxseSwgdGhlIFdhc206Ok1lbW9yeSBvYmplY3QgaXMgbm93IGEgcmVmZXJl
bmNlCisgICAgICAgIGNvdW50ZWQgY2xhc3MgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgSlNX
ZWJBc3NlbWJseU1lbW9yeQorICAgICAgICBvYmplY3QgYW5kIHRoZSBBcnJheUJ1ZmZlciB0aGF0
IGFsc28gdmlld3MgaXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuY3BwOgorICAgICAgICAoSlND
OjpKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1Yik6CisgICAgICAgICogaml0L0pJVFRodW5rcy5o
OgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50
aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6
Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogd2FzbS9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
ZnVuY3Rpb25JbXBvcnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjptb2R1bGUp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpqc0VudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c2V0SlNFbnRyeXBvaW50Q2FsbGVl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c2V0V2FzbUVudHJ5cG9p
bnRDYWxsZWUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYWxsZWVz
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZDYWxsZWVz
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6YWxsb2NhdGlvblNpemUp
OgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Z2V0TWVtb3J5QmFzZUFuZFNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbWl0U3RvcmVPcCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZWdpc3Rl
ckNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp1bnJlZ2lzdGVyQ29kZSk6CisgICAgICAgIChK
U0M6Oldhc206OmZhc3RNZW1vcnlFbmFibGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5hYmxl
RmFzdE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxs
ZWUuY3BwLgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbjo6aW1wb3J0RnVuY3Rpb25Db3VudCk6CisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpoYXNNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAq
IHdhc20vV2FzbU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Om1tYXBCeXRlcyk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjphdmFpbGFibGVGYXN0TWVtb3JpZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjp0
cnlHZXRGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVsZWFzZUZhc3RNZW1vcnkp
OgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpkdW1w
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjptYWtlU3RyaW5nKToKKyAgICAgICAgKiB3
YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvcGVyYXRvciBi
b29sKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpzaXplKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TWVtb3J5OjpjaGVjayk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6TWVtb3J5
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbik6CisgICAg
ICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TWVtb3J5SW5mb3JtYXRpb246OnRha2VSZXNlcnZlZE1lbW9yeSk6CisgICAgICAgIChKU0M6
Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjptb2RlKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1
bGVQYXJzZXIuY3BwOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAg
ICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6Ok1vZHVsZVBhcnNlcik6CisgICAgICAgICogd2Fz
bS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnBhcnNlQW5kVmFsaWRh
dGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW4pOgorICAgICAgICAqIHdh
c20vV2FzbVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bW9kZSk6CisgICAgICAg
ICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5Q2FsbGVlOjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpp
c1NhZmVUb1J1bik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpVbmNvbmRp
dGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnNldE1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6bW9kdWxlKToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb2RlQmxvY2spOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1lbW9yeU1vZGUpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eU1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6SlNX
ZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OmJ1
ZmZlcik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9y
eTo6bWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZN
ZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUp
OgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlNb2R1bGU6OmNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OlVuY29uZGl0
aW9uYWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseU1vZHVsZTo6dGFrZVJlc2VydmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseU1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6ZnVuY3Rpb25JbXBvcnRDb3VudCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmpzRW50cnlwb2ludENhbGxlZUZyb21G
dW5jdGlvbkluZGV4U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
TW9kdWxlOjp3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRKU0VudHJ5cG9pbnRD
YWxsZWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRX
YXNtRW50cnlwb2ludENhbGxlZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlNb2R1bGU6OmNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
TW9kdWxlOjpvZmZzZXRPZkNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5TW9kdWxlOjphbGxvY2F0aW9uU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFdlYkFzc2VtYmx5
RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpXZWJB
c3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUpOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjpldmFsdWF0ZSk6CisKIDIwMTctMDItMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHN0ZDo6dHVw
bGVzIGFzIGtleXMgaW4gSGFzaE1hcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA4OGE1YTk5NTM1MjEwODg4ZjIwNmFmZDU1NjNi
NzU1MWI5ZTY3ODVhLi5hMzcyZjgzM2ZlNGQ1MzliOWE3ODBkZTA3MGVmZWVhYmRmMjEwYzhkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI4IEBACisyMDE3LTAzLTAyICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxs
ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdBU00gc2hvdWxkIHN1cHBvcnQgZmFzdGVyIGxvYWRz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgQWRkIG5ldyBm
b3JtcyBvZiBkYXRhTG9nIHRoYXQgdGFrZSBhIGJvb2xlYW4gd2hpY2ggZGVzY3JpYmVzIGlmIHRo
ZSBsb2cgc2hvdWxkIGhhcHBlbi4gVGhpcyBtYWtlcyBjYXNlcyB3aGVyZSB3ZSBoYXZlIGEgc3Rh
dGljIGNvbnN0IGJvb2wgZm9yIHByaW50aW5nIG5pY2VyIHNpbmNlIHlvdSBjYW4gZG86CisKKyAg
ICAgICAgZGF0YUxvZ0lmKHZlcmJvc2UsIHRoaW5ncywgdG8sIHByaW50KTsKKworICAgICAgICBp
bnN0ZWFkIG9mOgorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0
aGluZ3MsIHRvLCBwcmludCk7CisKKyAgICAgICAgQWxzbywgYWRkIGEgb3BlcmF0b3IhIHRvIFJl
ZiB0aGF0IGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgQysrIHJlZnMuCisKKyAgICAgICAgKiB3
dGYvRGF0YUxvZy5oOgorICAgICAgICAoV1RGOjpkYXRhTG9nTG4pOgorICAgICAgICAoV1RGOjpk
YXRhTG9nSWYpOgorICAgICAgICAoV1RGOjpkYXRhTG9nTG5JZik6CisgICAgICAgICogd3RmL1Jl
Zi5oOgorICAgICAgICAoV1RGOjpSZWY6Om9wZXJhdG9yISk6CisKIDIwMTctMDItMjQgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJl
IGFibGUgdG8gdXNlIHN0ZDo6dHVwbGVzIGFzIGtleXMgaW4gSGFzaE1hcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBjMTIzYjA2YWZkOTVhOTk2YzdlYjczYzlhN2U1Y2FjYjFkZWM0
ZTJlLi4zNWRjMTdhMWNlOTk2NTNhNzA5NDM5OGM4ZmIwODE2YmFmNmFhZDI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMyMCw2ICsxMzIwLDEwIEBACiAJCTUzNTU1NzE2MUQ5
REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVt
b3J5LmNwcCAqLzsgfTsKIAkJNTM3MEI0RjUxQkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3MEI0RjMxQkYyNUVBMjAwNUM0MEZDIC8qIEFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuY3BwICovOyB9OwogCQk1
MzcwQjRGNjFCRjI2MjA1MDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM3MEI0RjQxQkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCAqLzsgfTsKKwkJNTM4MUI5MzcxRTYwRTk2NjAwOTBGNzk0
IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTM4MUI5MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVs
dFNpZ25hbEhhbmRsZXIuY3BwICovOyB9OworCQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyog
V2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTM4MUI5MzgxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAqLzsgfTsKKwkJNTM4MUI5NDAxRTY1REZFQjAwOTBGNzk0IC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzODFCOTNGMUU2NURGRUIwMDkwRjc5NCAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmggKi87IH07CisJCTUzODNBQTMwMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAq
LzsgfTsKIAkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzkxN0U3QTFCNzkwNkU0MDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAqLzsgfTsKIAkJNTM5RkI4QkExQzk5REE3QzAw
OTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzlGQjhCOTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGlu
ZXMuaCAqLzsgfTsKIAkJNTNCMEJFMzQxRTU2MUFDOTAwQThGQzI5IC8qIEdldHRlclNldHRlckFj
Y2Vzc0Nhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNCMEJFMzMxRTU2MUFDOTAwQThGQzI5IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3Bw
ICovOyB9OwpAQCAtMzc3Niw2ICszNzgwLDEwIEBACiAJCTUzNTU1NzE1MUQ5REZBMzIwMDZENTgz
QiAvKiBXYXNtTWVtb3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21NZW1vcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzcwQjRGMzFC
RjI1RUEyMDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTM3MEI0RjQxQkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzgxQjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2Fz
bUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTM4MUI5MzgxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzgxQjkzRjFFNjVERkVCMDA5MEY3
OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2suY3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTdBMUI3OTA2RTQwMDBFQkQzMyAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJE
MzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzOTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJvdG90
eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRBcnJh
eVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM7IHNv
dXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKQEAgLTYyMDEsNiArNjIwOSw4IEBACiAJCQkJNTNG
NDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTUz
RjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi8sCiAJCQkJQURC
NkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdhc21QYWdlQ291bnQuY3BwICovLAorCQkJCTUzODFC
OTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCAqLywKKwkJ
CQk1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oICov
LAogCQkJCTc5Qjc1OTczMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtUGFnZUNvdW50LmggKi8sCiAJ
CQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLywKIAkJCQk1MzEz
NzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovLApAQCAtNzc4OCw2ICs3Nzk4
LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTc5RTQyM0UwMURFRTY1MzIwMDc4RDM1NSAvKiBK
U1dlYkFzc2VtYmx5Q2FsbGVlLmNwcCAqLywKIAkJCQk3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUg
LyogSlNXZWJBc3NlbWJseUNhbGxlZS5oICovLAorCQkJCTUzODNBQTJGMUU2NUU4QTEwMEE1MzJG
QyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLywKKwkJCQk1MzgxQjkzRjFFNjVERkVC
MDA5MEY3OTQgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICovLAogCQkJCUFEMkZDQkE2MURC
NThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcCAqLywKIAkJCQlB
RDJGQ0JBNzFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oICov
LAogCQkJCTc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5o
ICovLApAQCAtNzkyNyw2ICs3OTM5LDcgQEAKIAkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQg
LyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMzg3OEUxQkZCQzQ0RDAw
RTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjE4MzJB
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICov
LAorCQkJCTUzODFCOTQwMUU2NURGRUIwMDkwRjc5NCAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0Nh
bGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQg
LyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMEYxQTMxQzQyMEJGMDAwMUMwN0Qy
IC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MjQ2LDYgKzgyNTksNyBAQAogCQkJ
CUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tN
YXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQg
LyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkUx
OUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJG
MTU4RDE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkMzQ0QwMDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xMDAzNiw2ICsxMDA1MCw3IEBACiAJCQkJMEZDODQxNjgxQkE4QzMy
MTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjNCRDFCNzFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0
aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzODFCOTM3MUU2MEU5NjYwMDkwRjc5NCAv
KiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzAwQjdC
MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjg5OEYzMTFCMjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDOTdGM0QxODIw
MjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0xMDQzNyw2ICsxMDQ1Miw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNF
RTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZF
QjEzNzU3MUJCMTFFRjkwMENENTEwMCAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3MjkwMDlDMTc5NzZDNjAwMDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFS
TXY3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzODNBQTMwMUU2NUU4QTEwMEE1MzJGQyAvKiBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkRCN0VDMUQ2
MTdEMTEwMENEQkY4RSAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkU2OEM2MzgxQjkwREUwQjAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFRodW5rcy5jcHAKaW5kZXggZGU0OGU2MmRkYWI4ZWZhZjhiZTMxODI4NzFiZThkNzA5
OWIxN2M3Zi4uNTQ2ZTE0YzkwNDhlOGQzMzhhNTgyNjQ3Y2Y3Y2FkZjlkZDM0MWNmZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcApAQCAtODIsNiArODIsMTUgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1YihWTSogdm0sIFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvcikKICAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
Q1RJU3R1Yk1hcDo6aXRlcmF0b3IgZW50cnkgPSBtX2N0aVN0dWJNYXAuZmluZChnZW5lcmF0b3Ip
OworICAgIGlmIChlbnRyeSA9PSBtX2N0aVN0dWJNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICByZXR1cm4gZW50cnktPnZhbHVlOworfQorCiB2
b2lkIEpJVFRodW5rczo6ZmluYWxpemUoSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCopCiB7
CiAgICAgYXV0byogbmF0aXZlRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFi
bGUqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1
bmtzLmgKaW5kZXggYWRkY2YyMzBjMzQ1ZDQyNzFiNjM3ZjA4Yjk0YzQxNmEzZWQxODJhNC4uN2Uw
NmU3MTYyMzUzYTBiNzNmM2JjMDJlNTQyZjczYjgyZjY2ZTEwMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFRodW5rcy5oCkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNKik7ICAg
IAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGN0aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRv
cik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVy
YXRvcik7CiAKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0
aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5h
bWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBOYXRpdmVG
dW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIFRodW5rR2VuZXJhdG9yLCBJbnRy
aW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAKaW5kZXggYWVkZjQyZTE3Y2MyYmRlMDE0YWQ1YjhkNjI4NjIyYWVjMTQ1
ZTdlMi4uOWUyODY4ODJjNmU5MDg1ZmRjY2Q1NjQzZGVmMTlhZTExNjkxMzE3NiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKQEAgLTcxLDYgKzcxLDcgQEAKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIK
ICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cu
aCIKKyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCiAjaW5jbHVkZSAiV2FzbVBs
YW4uaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CkBAIC0z
NzY2LDYgKzM3NjcsOSBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAg
V1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGlu
ZygpOwogICAgIHN0YXJ0VGltZW91dFRocmVhZElmTmVlZGVkKCk7CisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorICAgIEpTQzo6V2FzbTo6ZW5hYmxlRmFzdE1lbW9yeSgpOworI2VuZGlmCiAKICAg
ICBpbnQgcmVzdWx0OwogICAgIHJlc3VsdCA9IHJ1bkpTQygKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAppbmRleCBjNGJmOGZhZGU4YWFlMzEwZjJiNmEyNzcxMTMxYmJlZGEy
MWIyY2JjLi5jOTQ0NDgwNzA4YWY1ZGNlM2QyZjZlNTM4ZTgxZTQ3N2Q3Mzk5ZjAxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC00MjYsNiArNDI2LDggQEAgdHlw
ZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgXAogICAgIHYoYm9vbCwgdXNlV2Vi
QXNzZW1ibHksIHRydWUsIE5vcm1hbCwgIkV4cG9zZSB0aGUgV2ViQXNzZW1ibHkgZ2xvYmFsIG9i
amVjdC4iKSBcCiAgICAgdihib29sLCBzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5LCBmYWxz
ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIE1lbW9yeSBvYmplY3Qgd29uJ3QgbW1hcCB0aGUgZnVs
bCAnbWF4aW11bScgcmFuZ2UgYW5kIGluc3RlYWQgd2lsbCBhbGxvY2F0ZSB0aGUgbWluaW11bSBy
ZXF1aXJlZCBhbW91bnQuIikgXAorICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5
LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgYSAzMi1iaXQgYWRk
cmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhhbmRsZXIgdG8gYm91bmRzIGNoZWNrIHdhc20gbWVt
b3J5LiIpCisKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCBhNTBmOWRiMGEwYzMzZTkwNmRjNmVj
MGViZWRhNjcwN2VhNGE5ZmMzLi5hMDM5ZGRiMDBmZmIwY2MyYmEyZjc1NzljNWYxMzU3ZjI0YjI0
M2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yNDAsNiArMjQwLDcg
QEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKICAgICB3ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpT
V2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICB3ZWJBc3NlbWJseVRvSlNDYWxsZWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJs
eVRvSlNDYWxsZWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB3
ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWJBc3Nl
bWJseVRvSlNDYWxsZWUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmNyZWF0ZSgq
dGhpcywgd2ViQXNzZW1ibHlUb0pTQ2FsbGVlU3RydWN0dXJlLmdldCgpKSk7CiAjZW5kaWYKICAg
ICBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA3MzJiMjZlNGU0ZjMwMWJhM2IwYzFlNzMwODNh
ZjkzYjQ4ODgwYjIwLi4xYTQxZTQ0ZjZhM2ViZTYwYTM0YTZjNDhiMWZiYjU5Yzk4MWY2N2M3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTMzMyw2ICszMzMsNyBAQCBwdWJsaWM6
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2Vt
Ymx5Q2FsbGVlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5VG9K
U0NhbGxlZVN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNvZGVC
bG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8SlNDZWxsPiB3ZWJBc3NlbWJseVRvSlNDYWxsZWU7
CiAjZW5kaWYKICAgICBTdHJvbmc8U3RydWN0dXJlPiBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVN0
cnVjdHVyZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNjdkMmQyODNlOWExMzRiMjgzMGM5OTI1NTFmY2Iy
NWY5Y2IyZmRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5Q2FsbGVlLmgiCisjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgorI2lu
Y2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVs
ZTsKK2NsYXNzIEpTV2ViQXNzZW1ibHlNZW1vcnk7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNl
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIHN0YXRpYyBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwg
QmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRT
dHVicz4mJiBleGl0U3R1YnMsIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxs
ZWVDb3VudCkKKyAgICB7CisgICAgICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXpl
KGNhbGxlZUNvdW50KSkpIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIG93bmVyLCBzdGQ6OmZv
cndhcmQ8QmFnPENhbGxMaW5rSW5mbz4+KGNhbGxMaW5rSW5mb3MpLCBzdGQ6OmZvcndhcmQ8VmVj
dG9yPFdhc206Oldhc21FeGl0U3R1YnM+PihleGl0U3R1YnMpLCBtb2RlLCBjYWxsZWVDb3VudCk7
CisgICAgICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4g
bV93YXNtRXhpdFN0dWJzLnNpemUoKTsgfQorICAgIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxl
KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KKyAgICBib29sIGlzU2FmZVRvUnVu
KEpTV2ViQXNzZW1ibHlNZW1vcnkqKTsKKworICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50
cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRl
eFNwYWNlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNl
ID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4
ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOworICAgICAgICByZXR1
cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5z
aWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CisgICAgICAgIHVu
c2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRD
b3VudCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291
bnQpOworICAgICAgICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3Vu
dF0uZ2V0KCk7CisgICAgfQorCisgICAgdm9pZCBzZXRKU0VudHJ5cG9pbnRDYWxsZWUoVk0mIHZt
LCB1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKQorICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsK
KyAgICAgICAgY2FsbGVlcygpW2NhbGxlZUluZGV4XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRXYXNtRW50cnlwb2ludENhbGxlZShWTSYgdm0sIHVuc2lnbmVk
IGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUpCisgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOworICAgICAgICBj
YWxsZWVzKClbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5zZXQodm0sIHRoaXMsIGNhbGxl
ZSk7CisgICAgfQorCisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxs
ZWVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpT
V2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9m
Q2FsbGVlcygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayhWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0b3I8
V2FzbTo6V2FzbUV4aXRTdHVicz4mJiwgV2FzbTo6TWVtb3J5OjpNb2RlLCB1bnNpZ25lZCBjYWxs
ZWVDb3VudCk7CisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKworICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZDYWxsZWVzKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxKU1dl
YkFzc2VtYmx5Q2FsbGVlPik+KHNpemVvZihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSk7CisgICAg
fQorCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBudW1DYWxsZWVz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldE9mQ2FsbGVlcygpICsgc2l6ZW9mKFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikgKiBudW1DYWxsZWVzICogMjsKKyAgICB9CisK
KyAgICBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5jb25kaXRp
b25hbEZpbmFsaXplciB7CisgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBv
dmVycmlkZTsKKyAgICB9OworCisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+
IG1fbW9kdWxlOworICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmlu
YWxpemVyOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKKyAgICBWZWN0
b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4gbV93YXNtRXhpdFN0dWJzOworICAgIFdhc206Ok1lbW9y
eTo6TW9kZSBtX21vZGU7CisgICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDJmZjMw
NTAxZjY2ZjFhY2RhZjVkZDhmNzhmNWE1MjI5ZWFlYjhiOTEuLmYxN2RlOTI4ODIzNmY4Y2Q3ODli
NTk0ZWQ1M2QxZDViOWI3OTdlN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTIwNyw2ICsyMDcsNyBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7
CisgICAgQjM6OktpbmQgbWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKTsKICAgICBFeHBy
ZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIE9yaWdpbiwgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKICAgICB2b2lkIGVtaXRTdG9yZU9wKFN0b3JlT3BU
eXBlLCBPcmlnaW4sIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVl
LCB1aW50MzJfdCBvZmZzZXQpOwogCkBAIC0yNTksNyArMjYwLDcgQEAgQjNJUkdlbmVyYXRvcjo6
QjNJUkdlbmVyYXRvcihWTSYgdm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9j
ZWR1cmUmIHAKICAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJlZ0luZm8g
OiBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnMpCiAgICAgICAgIG1fcHJvYy5waW5SZWdpc3Rlcihy
ZWdJbmZvLnNpemVSZWdpc3Rlcik7CiAKLSAgICBpZiAoaW5mby5oYXNNZW1vcnkoKSkgeworICAg
IGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVk
KSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBpbm5lZEdQUiwgbV9tZW1vcnlT
aXplR1BSID09IHBpbm5lZEdQUik7CkBAIC0yODIsOCArMjgzLDggQEAgc3RhdGljIE1lbW9yeUJh
c2VBbmRTaXplIGdldE1lbW9yeUJhc2VBbmRTaXplKFZNJiB2bSwgVmFsdWUqIGluc3RhbmNlLCBQ
cm9jZWR1cmUKIHsKICAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gYmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIGluc3RhbmNl
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpOwogCi0gICAgc3RhdGlj
X2Fzc2VydChzaXplb2YoZGVjbHR5cGUodm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5tZW1v
cnkoKS0+bWVtb3J5KCktPm1lbW9yeSgpKSkgPT0gc2l6ZW9mKHZvaWQqKSwgImNvZGVnZW4gcmVs
aWVzIG9uIHRoaXMgc2l6ZSIpOwotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHZt
LnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZS0+bWVtb3J5KCktPm1lbW9yeSgpLT5zaXplKCkpKSA9
PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUodm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNl
LT5tZW1vcnkoKS0+bWVtb3J5KCkubWVtb3J5KCkpKSA9PSBzaXplb2Yodm9pZCopLCAiY29kZWdl
biByZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5
cGUodm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5tZW1vcnkoKS0+bWVtb3J5KCkuc2l6ZSgp
KSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOwog
ICAgIE1lbW9yeUJhc2VBbmRTaXplIHJlc3VsdDsKICAgICByZXN1bHQuYmFzZSA9IGJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigp
LCBtZW1vcnlPYmplY3QsIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpOwog
ICAgIHJlc3VsdC5zaXplID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9h
ZCwgSW50NjQsIE9yaWdpbigpLCBtZW1vcnlPYmplY3QsIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9m
ZnNldE9mU2l6ZSgpKTsKQEAgLTQ1NCw5ICs0NTUsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpz
ZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFs
UmUKIAogaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9p
bnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNp
emVPZk9wZXJhdGlvbikKIHsKLSAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSICYmIG1fbWVtb3J5
U2l6ZUdQUik7Ci0gICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7
Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9w
cm9jLCBPcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlTaXplR1BSLCBzaXplT2ZPcGVyYXRpb24g
KyBvZmZzZXQgLSAxKTsKKyAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSKTsKKyAgICBpZiAobV9p
bmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZykgeworICAg
ICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKKyAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJh
dGlvbiArIG9mZnNldCA+IG9mZnNldCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVt
b3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgfQogICAgIHBv
aW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwg
T3JpZ2luKCksIHBvaW50ZXIpOwogICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFdhc21BZGRyZXNzVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5QmFz
ZUdQUik7CiB9CkBAIC00ODYsNzAgKzQ5MCw3NyBAQCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9h
ZE9wKExvYWRPcFR5cGUgb3ApCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAoraW5saW5lIEIzOjpLaW5kIEIzSVJHZW5lcmF0b3I6Om1lbW9yeUtpbmQoQjM6Ok9wY29kZSBt
ZW1vcnlPcCkKK3sKKyAgICBpZiAobV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpTaWdu
YWxpbmcpCisgICAgICAgIHJldHVybiB0cmFwcGluZyhtZW1vcnlPcCk7CisgICAgcmV0dXJuIG1l
bW9yeU9wOworfQorCiBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9h
ZE9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMy
X3Qgb2Zmc2V0KQogewogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIExvYWRPcFR5cGU6Okkz
MkxvYWQ4UzogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkOFMsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
bWVtb3J5S2luZChMb2FkOFMpLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgfQogCiAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkOFMsIG9y
aWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQ4Uyks
IG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBvcmlnaW4sIHZhbHVlKTsKICAgICB9
CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTogewotICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkOFosIG9yaWdp
biwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkOFopLCBvcmlnaW4sIHBv
aW50ZXIsIG9mZnNldCk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6
IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkOFosIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAg
ICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBtZW1vcnlLaW5kKExvYWQ4WiksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAg
ICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4
dDMyLCBvcmlnaW4sIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxv
YWQxNlM6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZDE2Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAg
ICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBt
ZW1vcnlLaW5kKExvYWQxNlMpLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgfQogICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQxNlMsIG9y
aWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQxNlMp
LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7CiAgICAg
fQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOiB7Ci0gICAgICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBv
cmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDMyLCBv
cmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgfQogCiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkMzJVOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwg
b2Zmc2V0KTsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQpLCBJbnQzMiwgb3JpZ2luLCBw
b2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbiwgdmFsdWUpOwogICAgIH0KIAogICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBv
cmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwg
SW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBvcmlnaW4sIHZhbHVlKTsK
ICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6IHsKLSAgICAgICAgcmV0dXJu
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50
NjQsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgSW50
NjQsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5
cGU6OkYzMkxvYWQ6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgRmxvYXQsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgRmxvYXQsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0
KTsKICAgICB9CiAKICAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6IHsKLSAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
RG91YmxlLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCks
IERvdWJsZSwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwogICAgIH0KIAogICAgIC8vIEZJWE1F
OiBCMyBkb2Vzbid0IHN1cHBvcnQgTG9hZDE2WiB5ZXQuIFdlIHNob3VsZCBsb3dlciB0byB0aGF0
IHZhbHVlIHdoZW4KICAgICAvLyBpdCdzIGFkZGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1ODg0CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOiB7
Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZDE2Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAg
ICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIG1lbW9yeUtpbmQoTG9hZDE2UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAg
ICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0
QW5kLCBPcmlnaW4oKSwgdmFsdWUsCiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIDB4MDAwMGZmZmYpKTsKICAg
ICB9CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOiB7Ci0gICAgICAgIFZhbHVlKiB2
YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZDE2Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQo
TG9hZDE2UyksIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgVmFsdWUqIHBhcnRp
YWxSZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFu
ZCwgT3JpZ2luKCksIHZhbHVlLAogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAweDAwMDBmZmZmKSk7CiAKQEAg
LTYzMSw3ICs2NDIsNyBAQCBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChT
dG9yZU9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhwcmVzc2lvbgogICAgICAgICBGQUxMVEhS
T1VHSDsKIAogICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTgsIG9yaWdpbiwg
dmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChTdG9yZTgpLCBvcmlnaW4sIHZhbHVl
LCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFN0b3JlT3BU
eXBlOjpJNjRTdG9yZTE2OgpAQCAtNjM5LDcgKzY1MCw3IEBAIGlubGluZSB2b2lkIEIzSVJHZW5l
cmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNz
aW9uCiAgICAgICAgIEZBTExUSFJPVUdIOwogCiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3Rv
cmUxNjoKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBTdG9yZTE2LCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQo
U3RvcmUxNiksIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CiAgICAgICAgIHJldHVy
bjsKIAogICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6CkBAIC02NTAsNyArNjYxLDcg
QEAgaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3As
IE9yaWdpbiBvcmlnaW4sIEV4cHJlc3Npb24KICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9y
ZToKICAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKICAgICBjYXNlIFN0b3JlT3BUeXBl
OjpGNjRTdG9yZToKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlL
aW5kKFN0b3JlKSwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAppbmRleCBk
NzkwMTRmMjdmYWY5MDk2OGYyMWY1ZjliNGQ3YjhjYzc4MTAzOWUzLi5lNjA0YWIyZDQ3MDkwYTdl
OTQzMTlhMTJjYjg3MWU0ZTc0MzcyNzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIldh
c21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQ2YzVlNjk2OGM3OTJm
YWE1ODI3Zjk3ZjdhNTQ0YWM0MDkzZTI4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsMTQw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIK
KyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisKKyNpbmNs
dWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCisKK25hbWVzcGFjZSB7CitzdGF0aWMgY29u
c3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9s
ZFNpZ0J1c0hhbmRsZXI7CitzdGF0aWMgYm9vbCBmYXN0SGFuZGxlckluc3RhbGxlZCB7IGZhbHNl
IH07CitzdGF0aWMgU3RhdGljTG9jayBjb2RlTG9jYXRpb25zTG9jazsKK3N0YXRpYyBMYXp5TmV2
ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1cGxlPFZNKiwgdm9pZCosIHZvaWQqPj4+IGNvZGVM
b2NhdGlvbnM7IC8vICh2bSwgc3RhcnQsIGVuZCkKKworI2lmIENQVShYODZfNjQpCisjZGVmaW5l
IEluc3RydWN0aW9uUG9pbnRlckdQUiBjb250ZXh0LT5fX3NzLl9fcmlwCisjZGVmaW5lIEZpcnN0
QXJndW1lbnRHUFIgY29udGV4dC0+X19zcy5fX3JzaQorI2Vsc2UKKyNkZWZpbmUgSW5zdHJ1Y3Rp
b25Qb2ludGVyR1BSIGNvbnRleHQtPl9fc3MuX19wYworI2RlZmluZSBGaXJzdEFyZ3VtZW50R1BS
IGNvbnRleHQtPl9fc3MuX194WzFdCisjZW5kaWYKKworc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIo
aW50IHNpZ25hbCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCit7CisgICAgbWNvbnRleHRf
dCBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KS0+dWNfbWNvbnRl
eHQ7CisgICAgdm9pZCogZmF1bHRpbmdJbnN0cnVjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEluc3RydWN0aW9uUG9pbnRlckdQUik7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0
YXJ0aW5nIGhhbmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1
Y3Rpb24pKTsKKworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJKSVQgbWVtb3J5IHN0YXJ0OiAi
LCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXJ0T2ZGaXhlZEV4ZWN1dGFi
bGVNZW1vcnlQb29sKSksICIgZW5kOiAiLCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkpKTsKKyAgICAvLyBGaXJzdCB3ZSBu
ZWVkIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gSklUIGNvZGUgYmVmb3JlIHdlIGNhbiBhcXVpcmUg
YW55IGxvY2tzLiBPdGhlcndpc2UsCisgICAgLy8gd2UgbWlnaHQgaGF2ZSBjcmFzaGVkIGluIGNv
ZGUgdGhhdCBpcyBhbHJlYWR5IGhvbGRpbmcgb25lIG9mIHRoZSBsb2NrcyB3ZSB3YW50IHRvIGFx
dWlyZS4KKyAgICBpZiAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhcnRPZkZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2wpIDw9IGZhdWx0aW5nSW5zdHJ1Y3Rpb24KKyAgICAgICAgJiYgZmF1bHRp
bmdJbnN0cnVjdGlvbiA8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVuZE9mRml4ZWRFeGVjdXRh
YmxlTWVtb3J5UG9vbCkpIHsKKworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihjb2RlTG9jYXRp
b25zTG9jayk7CisgICAgICAgIGZvciAoYXV0byByYW5nZSA6IGNvZGVMb2NhdGlvbnMuZ2V0KCkp
IHsKKyAgICAgICAgICAgIFZNKiB2bTsKKyAgICAgICAgICAgIHZvaWQqIHN0YXJ0OworICAgICAg
ICAgICAgdm9pZCogZW5kOworICAgICAgICAgICAgc3RkOjp0aWUodm0sIHN0YXJ0LCBlbmQpID0g
cmFuZ2U7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZnVuY3Rpb24gc3RhcnQ6
ICIsIFJhd1BvaW50ZXIoc3RhcnQpLCAiIGVuZDogIiwgUmF3UG9pbnRlcihlbmQpKTsKKyAgICAg
ICAgICAgIGlmIChzdGFydCA8PSBmYXVsdGluZ0luc3RydWN0aW9uICYmIGZhdWx0aW5nSW5zdHJ1
Y3Rpb24gPCBlbmQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZm91
bmQgbWF0Y2giKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhjZXB0
aW9uU3R1YiA9IHZtLT5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bVdhc21UaHVua0dlbmVyYXRvcik7CisgICAgICAgICAgICAgICAgLy8gSWYgZm9yIHdoYXRldmVy
IHJlYXNvbiB3ZSBkb24ndCBoYXZlIGEgc3R1YiB0aGVuIHdlIHNob3VsZCBqdXN0IHRyZWF0IHRo
aXMgbGlrZSBhIHJlZ3VsYXIgY3Jhc2guCisgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25T
dHViKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiZm91bmQgc3R1YjogIiwgUmF3UG9pbnRlcihleGNlcHRpb25TdHViLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgICAgICAgICAgRmlyc3RBcmd1bWVu
dEdQUiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01l
bW9yeUFjY2Vzcyk7CisgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb25Qb2ludGVyR1BSID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50NjRfdD4oZXhjZXB0aW9uU3R1Yi5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gU2luY2Ugd2Ugb25seSB1c2UgZmFzdCBtZW1vcnkgaW4gcHJv
Y2Vzc2VzIHdlIGNvbnRyb2wsIGlmIHdlIHJlc3RvcmUgd2Ugd2lsbCBqdXN0IGZhbGwgYmFjayB0
byB0aGUgZGVmYXVsdCBoYW5kbGVyLgorICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRTaWdCdXNI
YW5kbGVyLCBudWxscHRyKTsKK30KKwordm9pZCByZWdpc3RlckNvZGUoVk0mIHZtLCB2b2lkKiBz
dGFydCwgdm9pZCogZW5kKQoreworICAgIGlmICghZmFzdE1lbW9yeUVuYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIExvY2tIb2xkZXIgbG9ja2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKKyAg
ICBjb2RlTG9jYXRpb25zLT5hZGQoc3RkOjptYWtlX3R1cGxlKCZ2bSwgc3RhcnQsIGVuZCkpOwor
fQorCit2b2lkIHVucmVnaXN0ZXJDb2RlKFZNJiB2bSwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCkK
K3sKKyAgICBpZiAoIWZhc3RNZW1vcnlFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihjb2RlTG9jYXRpb25zTG9jayk7CisgICAgY29kZUxvY2F0aW9ucy0+
cmVtb3ZlKHN0ZDo6bWFrZV90dXBsZSgmdm0sIHN0YXJ0LCBlbmQpKTsKK30KKworYm9vbCBmYXN0
TWVtb3J5RW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGZhc3RIYW5kbGVySW5zdGFsbGVkOworfQor
Cit2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAgaWYgKCFPcHRpb25z
Ojp1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKworICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0
aW9uID0gdHJhcEhhbmRsZXI7CisgICAgICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsK
KyAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAgCisgICAgICAg
IGlmICghc2lnYWN0aW9uKFNJR0JVUywgJmFjdGlvbiwgJm9sZFNpZ0J1c0hhbmRsZXIpKSB7Cisg
ICAgICAgICAgICBmYXN0SGFuZGxlckluc3RhbGxlZCA9IHRydWU7CisgICAgICAgICAgICBjb2Rl
TG9jYXRpb25zLmNvbnN0cnVjdCgpOworICAgICAgICB9CisKKyAgICB9KTsKK30KKyAgICAKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42MzE5ZTAxODNhMTg5NmE1YWIxNGMwZWJkYThkODYyNzBiZWNl
M2M2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZh
dWx0U2lnbmFsSGFuZGxlci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgVk07CisKK25hbWVzcGFjZSBXYXNtIHsKKwordm9pZCByZWdp
c3RlckNvZGUoVk0mLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKK3ZvaWQgdW5yZWdpc3RlckNv
ZGUoVk0mLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKKworYm9vbCBmYXN0TWVtb3J5RW5hYmxl
ZCgpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmFibGVGYXN0TWVtb3J5KCk7CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggZGM2MzQ3NDQyMmJmZTYw
MzNkOGIyZDIyMWJiN2VjNWMxMTA1Njg2Mi4uMWZjNTc0ZTkzZDcyNDdjNjRhOGZhMzM0ZjYyMjVk
MmM3MjcxZjY0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAt
MjU2LDcgKzI1Niw2IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgfQogCiAgICAg
dWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KLSAgICBib29sIGhhc01lbW9yeSgpIGNvbnN0
IHsgcmV0dXJuICEhbWVtb3J5OyB9CiAKICAgICB+TW9kdWxlSW5mb3JtYXRpb24oKTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IGFhZDkxYzEzZTNh
MzAxNjgzOGZiMDM4NGRhYjVhNDJiNDc3NDNkMjguLjkxYzY0MmU5ZGM2NTg4ZTRiZWZiYTE0MTE1
Y2ZkNDdlMTU2OTg2ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
Y3BwCkBAIC0yOCw3ICsyOCwxMSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5j
bHVkZSAiVk0uaCIKKyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCisKICNpbmNs
dWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKQEAgLTM4LDg2ICs0MiwyMDAgQEAgbmFtZXNwYWNlIHsKIGNvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwogfQogCi12b2lkIE1lbW9yeTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoraW5saW5lIGJvb2wgbW1hcEJ5dGVzKHNpemVfdCBieXRlcywgdm9pZComIG1lbW9yeSkKIHsK
LSAgICBTdHJpbmcgbWVtb3J5SGV4OwotICAgIFdURjo6YXBwZW5kVW5zaWduZWQ2NEFzSGV4KCh1
aW50NjRfdCkodWludHB0cl90KW1fbWVtb3J5LCBtZW1vcnlIZXgpOwotICAgIG91dC5wcmludCgi
TWVtb3J5IGF0IDB4IiwgbWVtb3J5SGV4LCAiLCBzaXplICIsIG1fc2l6ZSwgIkIgY2FwYWNpdHkg
IiwgbV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAiIG1heGltdW0g
IiwgbV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKKyAgICBkYXRhTG9n
SWYodmVyYm9zZSwgIkF0dGVtcHRpbmcgdG8gbW1hcCAiLCBieXRlcywgIiBieXRlczogIik7Cisg
ICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEgVk0gdGFnIGZvciB3YXNt
IG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzYwMAor
ICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwgYnl0ZXMsIFBST1RfTk9ORSwgTUFQX1BS
SVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkg
eworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZmFpbGVkIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN1Y2NlZWRlZCIpOwor
ICAgIG1lbW9yeSA9IHJlc3VsdDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgY2hhciog
TWVtb3J5OjptYWtlU3RyaW5nKE1vZGUgbW9kZSkgY29uc3QKKy8vIFdlIHVzZSB0aGlzIGFzIGEg
aGV1cmlzdGljIHRvIGd1ZXNzIHdoYXQgbW9kZSBhIG1lbW9yeSBpbXBvcnQgd2lsbCBiZS4gTW9z
dCBvZiB0aGUgdGltZSB3ZSBleHBlY3QgdXNlcnMgdG8KKy8vIGFsbG9jYXRlIHRoZSBtZW1vcnkg
dGhleSBhcmUgZ29pbmcgdG8gcGFzcyB0byBhbGwgdGhlaXIgbW9kdWxlcyByaWdodCBiZWZvcmUg
Y29tcGlsYXRpb24uCitzdGF0aWMgTWVtb3J5OjpNb2RlIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2Rl
IHsgTWVtb3J5OjpNb2RlOjpTaWduYWxpbmcgfTsKKworTWVtb3J5OjpNb2RlIE1lbW9yeTo6bGFz
dEFsbG9jYXRlZE1vZGUoKQogewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgTW9kZTo6
Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOworICAgIHJldHVybiBsYXN0
QWxsb2NhdGVkTWVtb3J5TW9kZTsKK30KKworc3RhdGljX2Fzc2VydChzaXplb2YodWludDY0X3Qp
ID09IHNpemVvZihzaXplX3QpLCAiV2UgcmVseSBvbiBhbGxvd2luZyB0aGUgbWF4aW11bSBzaXpl
IG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUgMl4zMyB3aGljaCBpcyBsYXJnZXIgdGhhbiBmaXRzIGlu
IGEgMzItYml0IGludGVnZXIgdGhhdCB3ZSdkIHBhc3MgdG8gbXByb3RlY3QgaWYgdGhpcyBkaWRu
J3QgaG9sZC4iKTsKKworc3RhdGljIGNvbnN0IHNpemVfdCBmYXN0TWVtb3J5TWFwcGVkQnl0ZXMg
PSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCkpICsgMSkgKiAyOyAvLyBwb2ludGVyIG1heCArIG9mZnNldCBtYXguIFRoaXMgaXMgYWxsIHdl
IG5lZWQgc2luY2UgYSBsb2FkIHN0cmFkZGxpbmcgcmVhZGFibGUgbWVtb3J5IHdpbGwgdHJhcC4K
K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhGYXN0TWVtb3JpZXMgPSA0Oworc3RhdGljIHVuc2ln
bmVkIGFsbG9jYXRlZEZhc3RNZW1vcmllcyB7IDAgfTsKK3N0YXRpYyBTdGF0aWNMb2NrIG1lbW9y
eUxvY2s7CitpbmxpbmUgRGVxdWU8dm9pZCosIG1heEZhc3RNZW1vcmllcz4mIGF2YWlsYWJsZUZh
c3RNZW1vcmllcyhjb25zdCBMb2NrSG9sZGVyJikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8RGVxdWU8dm9pZCosIG1heEZhc3RNZW1vcmllcz4+IGF2YWlsYWJsZUZhc3RNZW1vcmllczsK
KyAgICByZXR1cm4gYXZhaWxhYmxlRmFzdE1lbW9yaWVzOworfQorCitpbmxpbmUgYm9vbCB0cnlH
ZXRGYXN0TWVtb3J5KFZNJiB2bSwgdm9pZComIG1lbW9yeSwgc2l6ZV90JiBtYXBwZWRDYXBhY2l0
eSwgTWVtb3J5OjpNb2RlJiBtb2RlKQoreworICAgIC8vIFdlIG1pZ2h0IEdDIGhlcmUgc28gd2Ug
c2hvdWxkIGJlIGhvbGRpbmcgdGhlIEFQSSBsb2NrLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgYWJsZSB0byBzeW5jcm9ub3VzbHkgdHJpZ2dlciB0aGUgR0MgZnJvbSBhbm90aGVyIHRocmVh
ZC4KKyAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAg
aWYgKCFmYXN0TWVtb3J5RW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgaGF2ZSBhIHN0dWIgcHJpb3IgdG8gcnVubmluZyBjb2Rl
LgorICAgIGlmICghdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5l
cmF0b3IpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkZXF1ZUZh
c3RNZW1vcnkgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZXZlbnR1YWxseSByZXR1cm4gdGhlc2UgdG8gdGhlIE9TIGlmIHdlIGdvIHNvbWUgbnVtYmVyIG9m
IEdDcworICAgICAgICAvLyB3aXRob3V0IHVzaW5nIHRoZW0uCisgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1lbW9yeUxvY2spOworICAgICAgICBpZiAoIWF2YWlsYWJsZUZhc3RNZW1vcmllcyhs
b2NrZXIpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbWVtb3J5ID0gYXZhaWxhYmxlRmFzdE1l
bW9yaWVzKGxvY2tlcikudGFrZUZpcnN0KCk7CisgICAgICAgICAgICBtYXBwZWRDYXBhY2l0eSA9
IGZhc3RNZW1vcnlNYXBwZWRCeXRlczsKKyAgICAgICAgICAgIG1vZGUgPSBNZW1vcnk6OlNpZ25h
bGluZzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9OworCisgICAgQVNTRVJUKGFsbG9jYXRlZEZhc3RNZW1vcmllcyA8PSBt
YXhGYXN0TWVtb3JpZXMpOworICAgIGlmIChkZXF1ZUZhc3RNZW1vcnkoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBJZiB3ZSBoYXZlIGFsbG9jYXRlZCBhbGwgdGhlIGZhc3QgbWVt
b3JpZXMuLi4gdG9vIGJhZC4KKyAgICBpZiAoYWxsb2NhdGVkRmFzdE1lbW9yaWVzID09IG1heEZh
c3RNZW1vcmllcykgeworICAgICAgICAvLyBUaGVyZSBpcyBhIHJlYXNvbmFibGUgY2hhbmNlIHRo
YXQgYW5vdGhlciBtb2R1bGUgaGFzIGRpZWQgYnV0IGhhcyBub3QgYmVlbiBjb2xsZWN0ZWQgeWV0
LiBEb24ndCBsb3NlIGhvcGUgeWV0IQorICAgICAgICB2bS5oZWFwLmNvbGxlY3RTeW5jKCk7Cisg
ICAgICAgIHJldHVybiBkZXF1ZUZhc3RNZW1vcnkoKTsKICAgICB9Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gIiI7CisKKyAgICBpZiAobW1hcEJ5dGVzKGZh
c3RNZW1vcnlNYXBwZWRCeXRlcywgbWVtb3J5KSkgeworICAgICAgICBtYXBwZWRDYXBhY2l0eSA9
IGZhc3RNZW1vcnlNYXBwZWRCeXRlczsKKyAgICAgICAgbW9kZSA9IE1lbW9yeTo6U2lnbmFsaW5n
OworICAgICAgICBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMrKzsKKyAgICB9CisgICAgcmV0dXJuIG1l
bW9yeTsKK30KKworaW5saW5lIHZvaWQgcmVsZWFzZUZhc3RNZW1vcnkodm9pZComIG1lbW9yeSwg
c2l6ZV90IHdyaXRhYmxlU2l6ZSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnk6Ok1vZGUg
bW9kZSkKK3sKKyAgICBpZiAobW9kZSAhPSBNZW1vcnk6OlNpZ25hbGluZyB8fCAhbWVtb3J5KQor
ICAgICAgICByZXR1cm47CisKKyAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkgJiYgbWFwcGVkQ2Fw
YWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKTsKKyAgICBBU1NFUlQoZmFzdE1lbW9yeUVu
YWJsZWQoKSk7CisKKyAgICBtZW1zZXQobWVtb3J5LCAwLCB3cml0YWJsZVNpemUpOworICAgIGlm
IChtcHJvdGVjdChtZW1vcnksIHdyaXRhYmxlU2l6ZSwgUFJPVF9OT05FKSkKKyAgICAgICAgQ1JB
U0goKTsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1lbW9yeUxvY2spOworICAgIEFTU0VSVChh
dmFpbGFibGVGYXN0TWVtb3JpZXMobG9ja2VyKS5zaXplKCkgPCBhbGxvY2F0ZWRGYXN0TWVtb3Jp
ZXMpOworICAgIGF2YWlsYWJsZUZhc3RNZW1vcmllcyhsb2NrZXIpLmFwcGVuZChtZW1vcnkpOwor
ICAgIG1lbW9yeSA9IG51bGxwdHI7CiB9CiAKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90
KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6
ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzIgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBp
biBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlk
bid0IGhvbGQuIik7CitNZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0pCisgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKKyAgICAsIG1fbWF4aW11bShtYXhp
bXVtKQoreworICAgIEFTU0VSVCghaW5pdGlhbC5ieXRlcygpKTsKK30KIAotTWVtb3J5OjpNZW1v
cnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpCi0g
ICAgOiBtX3NpemUoaW5pdGlhbC5ieXRlcygpKQorTWVtb3J5OjpNZW1vcnkodm9pZCogbWVtb3J5
LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNpemVfdCBtYXBwZWRDYXBh
Y2l0eSwgTW9kZSBtb2RlKQorICAgIDogbV9tZW1vcnkobWVtb3J5KQorICAgICwgbV9zaXplKGlu
aXRpYWwuYnl0ZXMoKSkKICAgICAsIG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVt
KG1heGltdW0pCi0gICAgLCBtX21vZGUoTW9kZTo6Qm91bmRzQ2hlY2tpbmcpCi0gICAgLy8gRklY
TUU6IElmIHdlIGFkZCBzaWduYWwgYmFzZWQgYm91bmRzIGNoZWNraW5nIHRoZW4gd2UgbmVlZCBl
eHRyYSBzcGFjZSBmb3Igb3ZlcmZsb3cgb24gbG9hZC4KLSAgICAvLyBzZWU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKKyAgICAsIG1fbWFwcGVkQ2FwYWNp
dHkobWFwcGVkQ2FwYWNpdHkpCisgICAgLCBtX21vZGUobW9kZSkKK3sKKyAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7Cit9CisKK1Jl
ZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFs
LCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNb2RlPiByZXF1aXJlZE1vZGUpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1heGltdW0gfHwgbWF4aW11bSA+PSBpbml0aWFsKTsgLy8g
VGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBvdXIgY2FsbGVyLgogCi0gICAgbV9tYXBwZWRD
YXBhY2l0eSA9IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdlQ291bnQ6Om1heCgpLmJ5
dGVzKCk7Ci0gICAgaWYgKCFtX21hcHBlZENhcGFjaXR5KSB7CisgICAgTW9kZSBtb2RlID0gcmVx
dWlyZWRNb2RlID8gKnJlcXVpcmVkTW9kZSA6IEJvdW5kc0NoZWNraW5nOworICAgIGNvbnN0IHNp
emVfdCBzaXplID0gaW5pdGlhbC5ieXRlcygpOworICAgIHNpemVfdCBtYXBwZWRDYXBhY2l0eSA9
IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdlQ291bnQ6Om1heCgpLmJ5dGVzKCk7Cisg
ICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0cjsKKworICAgIGF1dG8gbWFrZUVtcHR5TWVtb3J5ID0g
WyZdICgpIC0+IFJlZlB0cjxNZW1vcnk+IHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2lnbmFsaW5n
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgbGFzdEFsbG9jYXRlZE1l
bW9yeU1vZGUgPSBCb3VuZHNDaGVja2luZzsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBN
ZW1vcnkoaW5pdGlhbCwgbWF4aW11bSkpOworICAgIH07CisKKyAgICBpZiAoIW1hcHBlZENhcGFj
aXR5KSB7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugc3BlY2lmaWVkIGEgemVybyBhcyBtYXhp
bXVtICh3aGljaCBtZWFucyB3ZSBhbHNvIGhhdmUgemVybyBhcyBpbml0aWFsIHNpemUpLgotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX3NpemUgPT0gMCk7Ci0gICAgICAgIG1fbWVtb3J5ID0gbnVs
bHB0cjsKLSAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGZhaWxlZCA9IGZh
bHNlOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5
OjpNZW1vcnkgYWxsb2NhdGluZyBub3RoaW5nICIsICp0aGlzKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghc2l6ZSk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJNZW1vcnk6OmNyZWF0ZSBhbGxvY2F0aW5nIG5vdGhpbmciKTsKKyAgICAgICAgcmV0dXJu
IG1ha2VFbXB0eU1lbW9yeSgpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBu
aWNlIGlmIHdlIGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MDAKLSAgICB2b2lkKiByZXN1bHQgPSBPcHRpb25z
OjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkgPyBNQVBfRkFJTEVEIDogbW1hcChudWxs
cHRyLCBtX21hcHBlZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04s
IC0xLCAwKTsKLSAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgLy8gVHJ5
IGFnYWluIHdpdGggYSBkaWZmZXJlbnQgbnVtYmVyLgotICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpNZW1vcnkgbW1hcCBmYWlsZWQgb25jZSBmb3Ig
Y2FwYWNpdHksIHRyeWluZyBhZ2FpbiIsICp0aGlzKTsKLSAgICAgICAgbV9tYXBwZWRDYXBhY2l0
eSA9IG1fc2l6ZTsKLSAgICAgICAgaWYgKCFtX21hcHBlZENhcGFjaXR5KSB7Ci0gICAgICAgICAg
ICBtX21lbW9yeSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBmYWlsZWQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiTWVtb3J5OjpN
ZW1vcnkgbW1hcCBub3QgdHJ5aW5nIGFnYWluIGJlY2F1c2Ugc2l6ZSBpcyB6ZXJvICIsICp0aGlz
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGJvb2wgY2FuVXNlRmFzdE1l
bW9yeSA9ICFyZXF1aXJlZE1vZGUgfHwgcmVxdWlyZWRNb2RlID09IFNpZ25hbGluZzsKKyAgICBp
ZiAoIWNhblVzZUZhc3RNZW1vcnkgfHwgIXRyeUdldEZhc3RNZW1vcnkodm0sIG1lbW9yeSwgbWFw
cGVkQ2FwYWNpdHksIG1vZGUpKSB7CisgICAgICAgIGlmIChtb2RlID09IFNpZ25hbGluZykKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmIChPcHRpb25zOjpzaW11bGF0
ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkgPyB0cnVlIDogIW1tYXBCeXRlcyhtYXBwZWRDYXBhY2l0
eSwgbWVtb3J5KSkgeworICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBkaWZmZXJlbnQg
bnVtYmVyLgorICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRl
IG1tYXAgZmFpbGVkIG9uY2UgZm9yIGNhcGFjaXR5LCB0cnlpbmcgYWdhaW4iKTsKKyAgICAgICAg
ICAgIG1hcHBlZENhcGFjaXR5ID0gc2l6ZTsKKyAgICAgICAgICAgIGlmICghbWFwcGVkQ2FwYWNp
dHkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVh
dGUgbW1hcCBub3QgdHJ5aW5nIGFnYWluIGJlY2F1c2Ugc2l6ZSBpcyB6ZXJvIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VFbXB0eU1lbW9yeSgpOworICAgICAgICAgICAgfQogCi0gICAg
ICAgIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRDYXBhY2l0eSwgUFJPVF9OT05FLCBN
QVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTUFQ
X0ZBSUxFRCkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJNZW1vcnk6Ok1lbW9yeSBtbWFwIGZhaWxlZCB0d2ljZSAiLCAqdGhpcyk7Ci0gICAg
ICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
aWYgKCFtbWFwQnl0ZXMobWFwcGVkQ2FwYWNpdHksIG1lbW9yeSkpIHsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1hcCBmYWlsZWQgdHdpY2Ui
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KIAotICAgIEFTU0VSVChtX3NpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSk7Ci0g
ICAgewotICAgICAgICBib29sIHN1Y2Nlc3MgPSAhbXByb3RlY3QocmVzdWx0LCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG1fc2l6ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdWNjZXNzKTsKKyAgICBBU1NFUlQobWVtb3J5ICYmIHNpemUgPD0gbWFwcGVk
Q2FwYWNpdHkpOworICAgIGlmIChtcHJvdGVjdChtZW1vcnksIHNpemUsIFBST1RfUkVBRCB8IFBS
T1RfV1JJVEUpKSB7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0
ZSBtcHJvdGVjdCBmYWlsZWQiKTsKKyAgICAgICAgcmVsZWFzZUZhc3RNZW1vcnkobWVtb3J5LCAw
LCBtYXBwZWRDYXBhY2l0eSwgbW9kZSk7CisgICAgICAgIGlmIChtZW1vcnkpIHsKKyAgICAgICAg
ICAgIGlmIChtdW5tYXAobWVtb3J5LCBtYXBwZWRDYXBhY2l0eSkpCisgICAgICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CisgICAg
CisgICAgbGFzdEFsbG9jYXRlZE1lbW9yeU1vZGUgPSBtb2RlOworICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIHN1Y2NlZWRlZCIpOworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTWVtb3J5KG1lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgbWFwcGVkQ2FwYWNpdHks
IG1vZGUpKTsKK30KIAotICAgIG1fbWVtb3J5ID0gcmVzdWx0OwotICAgIGZhaWxlZCA9IGZhbHNl
OwotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6TWVtb3J5IG1t
YXAgc3VjY2VlZGVkICIsICp0aGlzKTsKK1JlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZN
JiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFs
PE1vZGU+IG1vZGUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1heGltdW0gfHwgbWF4aW11bSA+
PSBpbml0aWFsKTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBvdXIgY2FsbGVyLgor
ICAgIFJlZlB0cjxNZW1vcnk+IHJlc3VsdCA9IGNyZWF0ZUltcGwodm0sIGluaXRpYWwsIG1heGlt
dW0sIG1vZGUpOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgaWYgKHJlc3VsdC0+bW9kZSgp
ID09IFNpZ25hbGluZykKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC0+bV9tYXBw
ZWRDYXBhY2l0eSA9PSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXMpOworICAgICAgICBpZiAobW9kZSkK
KyAgICAgICAgICAgIEFTU0VSVCgqbW9kZSA9PSByZXN1bHQtPm1vZGUoKSk7CisgICAgICAgIEFT
U0VSVChsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9PSByZXN1bHQtPm1vZGUoKSk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIE1lbW9yeTo6fk1lbW9yeSgpCiB7Ci0gICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiTWVtb3J5Ojp+TWVtb3J5ICIsICp0aGlzKTsKKyAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojp+TWVtb3J5ICIsICp0aGlzKTsKKyAgICBy
ZWxlYXNlRmFzdE1lbW9yeShtX21lbW9yeSwgbV9zaXplLCBtX21hcHBlZENhcGFjaXR5LCBtX21v
ZGUpOwogICAgIGlmIChtX21lbW9yeSkgewogICAgICAgICBpZiAobXVubWFwKG1fbWVtb3J5LCBt
X21hcHBlZENhcGFjaXR5KSkKICAgICAgICAgICAgIENSQVNIKCk7CkBAIC0xMjgsMjMgKzI0Niwy
NSBAQCBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChuZXdTaXplID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CiAKLSAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJNZW1vcnk6Omdyb3cgdG8gIiwgbmV3U2l6
ZSwgIiBmcm9tICIsICp0aGlzKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpn
cm93IHRvICIsIG5ld1NpemUsICIgZnJvbSAiLCAqdGhpcyk7CiAKICAgICBpZiAobWF4aW11bSgp
ICYmIG5ld1NpemUgPiBtYXhpbXVtKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVp
bnQ2NF90IGRlc2lyZWRTaXplID0gbmV3U2l6ZS5ieXRlcygpOworICAgIHNpemVfdCBkZXNpcmVk
U2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsKIAogICAgIGlmIChtX21lbW9yeSAmJiBkZXNpcmVkU2l6
ZSA8PSBtX21hcHBlZENhcGFjaXR5KSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9ICFtcHJvdGVj
dChzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9tZW1vcnkpICsgbV9zaXplLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGRlc2lyZWRTaXplIC0gbV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOworICAgICAgICBpZiAobXByb3RlY3Qoc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihkZXNpcmVkU2l6ZSAtIG1fc2l6ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAg
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IGluLXBsYWNlIGZhaWxl
ZCAiLCAqdGhpcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwogICAg
ICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6Z3JvdyBpbi1wbGFjZSAiLCAqdGhpcyk7CisgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgaW4tcGxhY2UgIiwgKnRoaXMpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBBU1NFUlQobW9kZSgpICE9IFNpZ25h
bGluZyk7CiAgICAgLy8gT3RoZXJ3aXNlLCBsZXQncyB0cnkgdG8gbWFrZSBzb21lIG5ldyBtZW1v
cnkuCiAgICAgdm9pZCogbmV3TWVtb3J5ID0gbW1hcChudWxscHRyLCBkZXNpcmVkU2l6ZSwgUFJP
VF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwogICAg
IGlmIChuZXdNZW1vcnkgPT0gTUFQX0ZBSUxFRCkKQEAgLTE1OSwxMSArMjc5LDI2IEBAIGJvb2wg
TWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQogICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBk
ZXNpcmVkU2l6ZTsKICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKIAotICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICBkYXRhTG9nTG4oIk1lbW9yeTo6Z3JvdyAiLCAqdGhpcyk7CisgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyAiLCAqdGhpcyk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK3ZvaWQgTWVtb3J5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCJNZW1vcnkgYXQgIiwgUmF3UG9pbnRlcihtX21lbW9yeSksICIsIHNpemUgIiwg
bV9zaXplLCAiQiBjYXBhY2l0eSAiLCBtX21hcHBlZENhcGFjaXR5LCAiQiwgaW5pdGlhbCAiLCBt
X2luaXRpYWwsICIgbWF4aW11bSAiLCBtX21heGltdW0sICIgbW9kZSAiLCBtYWtlU3RyaW5nKG1f
bW9kZSkpOworfQorCitjb25zdCBjaGFyKiBNZW1vcnk6Om1ha2VTdHJpbmcoTW9kZSBtb2RlKSBj
b25zdAoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTW9kZTo6Qm91bmRzQ2hlY2tp
bmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOworICAgIGNhc2UgTW9kZTo6U2lnbmFsaW5nOiBy
ZXR1cm4gIlNpZ25hbGluZyI7CisgICAgY2FzZSBNb2RlOjpOdW1iZXJPZk1vZGVzOiBicmVhazsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiI7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiB9IC8vIG5hbWVzcGFjZSBXYXNtCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKaW5kZXggMjM2YmY4NTEyNTY0NTViY2U5ZTMy
MzZkY2M0NTg0Yzg2YzFkY2YwYy4uMzM4NGE0MmM2MGI2NTQxNGExOGExYzc3OTljMTFhYWQzNWE1
MWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaApAQCAtMjcsNjIg
KzI3LDY5IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCIKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKwogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBQcmludFN0cmVhbTsKIH0K
IAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBWTTsKKworbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBNZW1vcnkgeworY2xhc3MgTWVt
b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8TWVtb3J5PiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoTWVtb3J5KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB2
b2lkIGR1bXAoV1RGOjpQcmludFN0cmVhbSYpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBzdXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjI2OTMKLSAgICBlbnVtIGNsYXNzIE1vZGUgewotICAgICAgICBCb3Vu
ZHNDaGVja2luZworICAgIGVudW0gTW9kZSB7CisgICAgICAgIEJvdW5kc0NoZWNraW5nLAorICAg
ICAgICBTaWduYWxpbmcsCisgICAgICAgIE51bWJlck9mTW9kZXMKICAgICB9OwogICAgIGNvbnN0
IGNoYXIqIG1ha2VTdHJpbmcoTW9kZSkgY29uc3Q7CiAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gISFtX21lbW9yeTsgfQorCisgICAgc3RhdGljIFJlZlB0cjxN
ZW1vcnk+IGNyZWF0ZShWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwg
c3RkOjpvcHRpb25hbDxNb2RlPiByZXF1aXJlZE1vZGUgPSBzdGQ6Om51bGxvcHQpOworCiAgICAg
TWVtb3J5KCkgPSBkZWZhdWx0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeShQYWdlQ291
bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wmIGZhaWxlZCk7Ci0gICAgTWVtb3J5
KE1lbW9yeSYmIG90aGVyKQotICAgICAgICA6IG1fbWVtb3J5KG90aGVyLm1fbWVtb3J5KQotICAg
ICAgICAsIG1fc2l6ZShvdGhlci5tX3NpemUpCi0gICAgICAgICwgbV9pbml0aWFsKG90aGVyLm1f
aW5pdGlhbCkKLSAgICAgICAgLCBtX21heGltdW0ob3RoZXIubV9tYXhpbXVtKQotICAgICAgICAs
IG1fbWFwcGVkQ2FwYWNpdHkob3RoZXIubV9tYXBwZWRDYXBhY2l0eSkKLSAgICAgICAgLCBtX21v
ZGUob3RoZXIubV9tb2RlKQotICAgIHsKLSAgICAgICAgLy8gTW92aW5nIHRyYW5zZmVycyBvd25l
cnNoaXAgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkuCi0gICAgICAgIG90aGVyLm1fbWVtb3J5ID0g
bnVsbHB0cjsKLSAgICB9CiAgICAgfk1lbW9yeSgpOwogCiAgICAgdm9pZCogbWVtb3J5KCkgY29u
c3QgeyByZXR1cm4gbV9tZW1vcnk7IH0KLSAgICB1aW50NjRfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
ICAgICBQYWdlQ291bnQgc2l6ZUluUGFnZXMoKSBjb25zdCB7IHJldHVybiBQYWdlQ291bnQ6OmZy
b21CeXRlcyhtX3NpemUpOyB9CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5pdGlhbDsgfQogICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4g
bV9tYXhpbXVtOyB9CiAKKyAgICBzdGF0aWMgTW9kZSBsYXN0QWxsb2NhdGVkTW9kZSgpOwogICAg
IE1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogCisgICAgLy8gZ3JvdygpIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBKU1dlYkFzc2VtYmx5TWVtb3J5IG9iamVjdCBz
aW5jZSB0aGF0IG9iamVjdCBuZWVkcyB0byB1cGRhdGUgaW50ZXJuYWwKKyAgICAvLyBwb2ludGVy
cyB3aXRoIHRoZSBjdXJyZW50IGJhc2UgYW5kIHNpemUuCiAgICAgYm9vbCBncm93KFBhZ2VDb3Vu
dCk7CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKE1lbW9yeSwgbV9tZW1vcnkpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX3NpemUpOyB9
Ci0gICAgCisgICAgdm9pZCBjaGVjaygpIHsgIEFTU0VSVCghZGVsZXRpb25IYXNCZWd1bigpKTsg
fQogcHJpdmF0ZToKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlSW1wbChWTSYsIFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNb2RlPiBy
ZXF1aXJlZE1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAgIE1lbW9yeSh2b2lkKiBtZW1vcnksIFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5
LCBNb2RlKTsKKyAgICBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVt
KTsKKworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgbW92ZSB0aGVzZSB0byB0aGUgaW5zdGFuY2Ug
dG8gYXZvaWQgYSBsb2FkIG9uIGluc3RhbmNlLT5pbnN0YW5jZSBjYWxscy4KICAgICB2b2lkKiBt
X21lbW9yeSB7IG51bGxwdHIgfTsKLSAgICB1aW50NjRfdCBtX3NpemUgeyAwIH07CisgICAgc2l6
ZV90IG1fc2l6ZSB7IDAgfTsKICAgICBQYWdlQ291bnQgbV9pbml0aWFsOwogICAgIFBhZ2VDb3Vu
dCBtX21heGltdW07Ci0gICAgdWludDY0X3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKKyAgICBz
aXplX3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKICAgICBNb2RlIG1fbW9kZSB7IE1vZGU6OkJv
dW5kc0NoZWNraW5nIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAppbmRleCA2YjA2M2QzNTEyNGU5N2E4M2IxZjFl
MDg3M2E0MTA3YzlmMGU5ZmQ1Li4yNGYxODE1NmUyOWY3ZjNkMmRhMTYwYTkzNGU3YmNiNWEwYjJi
OGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5m
b3JtYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJ
bmZvcm1hdGlvbi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtTWVt
b3J5LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CkBAIC00OCw2ICs0OSw4IEBAIGNvbnN0IFBpbm5lZFJlZ2lzdGVy
SW5mbyYgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKQogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+
IHBpbm5lZFNpemVzID0geyAwIH07CiAgICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZ1Bpbm5lZFJl
Z2lzdGVycyA9IHBpbm5lZFNpemVzLnNpemUoKSArIDE7CiAgICAgICAgIGpzY0NhbGxpbmdDb252
ZW50aW9uKCkubV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmZvckVhY2goWyZdIChSZWcgcmVnKSB7Cisg
ICAgICAgICAgICBpZiAoIXJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIEdQUlJlZyBncHIgPSByZWcuZ3ByKCk7CiAgICAgICAgICAgICBpZiAoIXJlbWFp
bmluZ1Bpbm5lZFJlZ2lzdGVycyB8fCBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKS5nZXQo
cmVnKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC03MSw3ICs3NCw3IEBAIFBpbm5lZFJl
Z2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJ
bmZvPiYmIHNpemVSZWdpCiB7CiB9CiAKLU1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1h
dGlvbihQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sICBib29sIGlzSW1wb3J0
KQorTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4g
cmVjb21waWxlTW9kZSwgYm9vbCBpc0ltcG9ydCkKICAgICA6IG1faW5pdGlhbChpbml0aWFsKQog
ICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiAgICAgLCBtX2lzSW1wb3J0KGlzSW1wb3J0KQpAQCAt
NzksNiArODIsMTkgQEAgTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgIGJvb2wKICAgICBSRUxFQVNFX0FTU0VS
VCghIW1faW5pdGlhbCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWF4aW11bSB8fCBtX21heGlt
dW0gPj0gbV9pbml0aWFsKTsKICAgICBBU1NFUlQoISEqdGhpcyk7CisKKyAgICBpZiAoIXJlY29t
cGlsZU1vZGUpIHsKKyAgICAgICAgaWYgKCFpc0ltcG9ydCkgeworICAgICAgICAgICAgbV9yZXNl
cnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnk6
OlNpZ25hbGluZyk7CisgICAgICAgICAgICBpZiAobV9yZXNlcnZlZE1lbW9yeSkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVCghISptX3Jlc2VydmVkTWVtb3J5KTsKKyAgICAgICAgICAgICAgICBt
X21vZGUgPSBtX3Jlc2VydmVkTWVtb3J5LT5tb2RlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fbW9kZSA9IE1lbW9yeTo6bGFz
dEFsbG9jYXRlZE1vZGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9tb2RlID0gKnJlY29tcGls
ZU1vZGU7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCmluZGV4IDZlN2Y1MjE4
OTQ3ZTAxNmI0OGZkZjYwMTlkMzY4YTU3NTdlMzg1YjcuLjVhOWE3N2E4N2NkZjVjMTVkYWYyNzE4
NmFhY2U1MzFmZmRhZDI2ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCkBAIC0yOCw3ICsyOCw5IEBACiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIldhc21NZW1vcnku
aCIKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
QEAgLTUyLDE3ICs1NCwyMiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCghKnRoaXMpOwogICAg
IH0KIAotICAgIE1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSwgYm9vbCBpc0ltcG9ydCk7CisgICAgTWVtb3J5SW5mb3JtYXRpb24oVk0mLCBQYWdl
Q291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpN
b2RlPiwgYm9vbCBpc0ltcG9ydCk7CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhpbXVtOyB9CisgICAgYm9vbCBoYXNSZXNlcnZlZE1lbW9yeSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzZXJ2ZWRNZW1vcnk7IH0KKyAgICBSZWZQdHI8TWVtb3J5PiB0YWtlUmVzZXJ2ZWRN
ZW1vcnkoKSB7IEFTU0VSVChoYXNSZXNlcnZlZE1lbW9yeSgpKTsgcmV0dXJuIG1fcmVzZXJ2ZWRN
ZW1vcnkucmVsZWFzZSgpOyB9CisgICAgTWVtb3J5OjpNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVy
biBtX21vZGU7IH0KICAgICBib29sIGlzSW1wb3J0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ltcG9y
dDsgfQogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9p
bml0aWFsOyB9CiAKIHByaXZhdGU6CisgICAgUmVmUHRyPE1lbW9yeT4gbV9yZXNlcnZlZE1lbW9y
eTsKICAgICBQYWdlQ291bnQgbV9pbml0aWFsIHsgfTsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVt
IHsgfTsKKyAgICBNZW1vcnk6Ok1vZGUgbV9tb2RlIHsgTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVj
a2luZyB9OwogICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDUxNzczZDA2
ZTYyMDEyM2I1YWMwNDI2MmE5MDhiYWIwYmY4ZjE1OTkuLjUyMTE2NGZmNGM0NmFiNGYxYTNjY2Ez
N2NkZTkzOWUxMmViNmJiYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0zMTYsNyArMzE2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6
OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBB
U1NFUlQoaW5pdGlhbFBhZ2VDb3VudCk7CiAgICAgQVNTRVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8
IG1heGltdW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VDb3VudCk7CiAKLSAgICBtX3Jlc3VsdC5t
b2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGlt
dW1QYWdlQ291bnQsIGlzSW1wb3J0KTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1l
bW9yeUluZm9ybWF0aW9uKCptX3ZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50
LCBtX21vZGUsIGlzSW1wb3J0KTsKICAgICByZXR1cm4geyB9OwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKaW5kZXggNDFiNTdmYzgyMGM0NWI5
YjRlYzVmYTdjNjk1YmE1NmNhZmI4NGExMC4uOTRiYTE0ZTE1YTNmZGEzMTA0ZTMzYmFjMDkzYzFm
MWU4MWNmMjBjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNs
dWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKQEAgLTQzLDEyICs0NCw5IEBAIHN0cnVjdCBNb2R1bGVQYXJzZXJSZXN1
bHQgewogY2xhc3MgTW9kdWxlUGFyc2VyIDogcHVibGljIFBhcnNlcjxNb2R1bGVQYXJzZXJSZXN1
bHQ+IHsKIHB1YmxpYzoKIAotICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKKyAgICBNb2R1bGVQYXJzZXIoVk0q
IHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0
ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiBtb2RlKQogICAgICAgICA6IFBhcnNlcih2bSwgc291
cmNlQnVmZmVyLCBzb3VyY2VMZW5ndGgpCi0gICAgewotICAgIH0KLSAgICBNb2R1bGVQYXJzZXIo
Vk0qIHZtLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZUJ1ZmZlcikKLSAgICAgICAgOiBN
b2R1bGVQYXJzZXIodm0sIHNvdXJjZUJ1ZmZlci5kYXRhKCksIHNvdXJjZUJ1ZmZlci5zaXplKCkp
CisgICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewogICAgIH0KIApAQCAtNjgsNiArNjYsNyBA
QCBwcml2YXRlOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW5p
dEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKIAogICAgIE1v
ZHVsZVBhcnNlclJlc3VsdCBtX3Jlc3VsdDsKKyAgICBzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9k
ZT4gbV9tb2RlIHsgc3RkOjpudWxsb3B0IH07CiAgICAgYm9vbCBtX2hhc1RhYmxlIHsgZmFsc2Ug
fTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCA1OTgw
YjUxZTg3NDIyMjM3NTVjZTBjM2RmMmMxNmIxZGU5ZWM4ZjEyLi40ODM1YWEyOGYyY2FmN2EyMWM2
YWM0YTE5M2MzNzcxZTU4MjhjYWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW4uY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIK
ICNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlv
bi5oIgorI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKICNpbmNsdWRlICJXYXNt
TWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZVBhcnNlci5oIgogI2luY2x1ZGUgIldhc21W
YWxpZGF0ZS5oIgpAQCAtNjEsMTQgKzYyLDE0IEBAIFBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1
aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiB7CiB9CiAKLWJvb2wgUGxhbjo6
cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCitib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1
bGUoc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCiB7CiAgICAgTW9u
b3RvbmljVGltZSBzdGFydFRpbWU7CiAgICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0
Q29tcGlsZVRpbWVzKCkpCiAgICAgICAgIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygp
OwogCiAgICAgewotICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKG1fdm0sIG1fc291
cmNlLCBtX3NvdXJjZUxlbmd0aCk7CisgICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIo
bV92bSwgbV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCByZWNvbXBpbGVNb2RlKTsKICAgICAgICAg
YXV0byBwYXJzZVJlc3VsdCA9IG1vZHVsZVBhcnNlci5wYXJzZSgpOwogICAgICAgICBpZiAoIXBh
cnNlUmVzdWx0KSB7CiAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHBhcnNlUmVzdWx0LmVy
cm9yKCk7CkBAIC0xMDksMTAgKzExMCwxMiBAQCBib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVN
b2R1bGUoKQogLy8gVGhlIHJlYXNvbiB0aGlzIGlzIE9LIGlzIHRoYXQgd2UgZ3VhcmFudGVlIHRo
YXQgdGhlIG1haW4gdGhyZWFkIGRvZXNuJ3QgY29udGludWUgdW50aWwgYWxsIHRocmVhZHMKIC8v
IHRoYXQgY291bGQgdG91Y2ggaXRzIHN0YWNrIGFyZSBkb25lIGV4ZWN1dGluZy4KIFNVUFBSRVNT
X0FTQU4gCi12b2lkIFBsYW46OnJ1bigpCit2b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1l
bW9yeTo6TW9kZT4gcmVjb21waWxlTW9kZSkKIHsKLSAgICBpZiAoIXBhcnNlQW5kVmFsaWRhdGVN
b2R1bGUoKSkKKyAgICBpZiAoIXBhcnNlQW5kVmFsaWRhdGVNb2R1bGUocmVjb21waWxlTW9kZSkp
CiAgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVjb21waWxlTW9kZSkKKyAgICAgICAgQVNTRVJU
KG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tb2RlKCkgPT0gcmVjb21waWxlTW9kZSk7CiAK
ICAgICBhdXRvIHRyeVJlc2VydmVDYXBhY2l0eSA9IFt0aGlzXSAoYXV0byYgdmVjdG9yLCBzaXpl
X3Qgc2l6ZSwgY29uc3QgY2hhciogd2hhdCkgewogICAgICAgICBpZiAoVU5MSUtFTFkoIXZlY3Rv
ci50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBsYW4uaAppbmRleCA2OTgwYmRiYmJlMTdhNTE5NWM4YzVlMDM1ZWI0ZTZhYTEwZDJjZjE1Li5k
MDcwMzc1MjAzMmM5YWEwY2Q4NTg0MTdmYjE3MjZlN2ZiOWMzZGY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTQ5LDkgKzQ5LDkgQEAgcHVibGljOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIFBsYW4oVk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSB+UGxhbigpOwogCi0gICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxl
KCk7CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5
OjpNb2RlPiA9IHN0ZDo6bnVsbG9wdCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1
bigpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5
OjpNb2RlPiA9IHN0ZDo6bnVsbG9wdCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGlu
aXRpYWxpemVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0Kiwgc3RkOjpmdW5jdGlvbjx2b2lkKHVuc2ln
bmVkLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSopPik7CiAKQEAg
LTkyLDYgKzkyLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGTW92ZShtX3dhc21FeGl0
U3R1YnMpOwogICAgIH0KIAorICAgIE1lbW9yeTo6TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0
ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKICAg
ICBWZWN0b3I8RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5PiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJp
bmFyeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDYWxsZWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNhbGxlZS5jcHAKaW5kZXggYzI3NzEyYTEwZmZmYzhkZjNmMWViNjA2YjA4Y2ZjOWYwN2Y4
ZTM2Yi4uNTE3MTI3ODVmMjkzYjhmMTBiYTBkOTk3YzQ2YTAxZWI1OTdkNDhmYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtNDMsMTEgKzQ0LDEzIEBAIHZvaWQgSlNXZWJBc3NlbWJseUNh
bGxlZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2lu
dCkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAKICAgICBtX2VudHJ5cG9pbnQgPSBX
VEZNb3ZlKGVudHJ5cG9pbnQpOworICAgIFdhc206OnJlZ2lzdGVyQ29kZSh2bSwgbV9lbnRyeXBv
aW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCBt
X2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVu
ZCgpKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKIHsKICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SlNXZWJBc3NlbWJseUNhbGxlZSo+KGNlbGwpOworICAgIFdhc206OnVucmVnaXN0ZXJDb2RlKCpj
ZWxsLT52bSgpLCB0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYo
KS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIHRoaXNPYmplY3QtPm1fZW50cnlwb2ludC5j
b21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwogICAgIHRo
aXNPYmplY3QtPkpTV2ViQXNzZW1ibHlDYWxsZWU6On5KU1dlYkFzc2VtYmx5Q2FsbGVlKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjIxZjhhNWNjNjQ1ZjJlMjViNzc0MTE3YmRh
Zjk4YWY0NzBkMzRhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c19p
bmZvID0geyAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spIH07CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBv
d25lciwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2Fz
bUV4aXRTdHVicz4mJiB3YXNtRXhpdFN0dWJzLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSwgdW5z
aWduZWQgY2FsbGVlQ291bnQpCisgICAgOiBCYXNlKHZtLCB2bS53ZWJBc3NlbWJseUNvZGVCbG9j
a1N0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fY2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5r
SW5mb3MpKQorICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1vdmUod2FzbUV4aXRTdHVicykpCisg
ICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fY2FsbGVlQ291bnQoY2FsbGVlQ291bnQpCit7Cisg
ICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBvd25lcik7CisgICAgbWVtc2V0KGNhbGxlZXMoKSwg
MCwgbV9jYWxsZWVDb3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxl
ZT4pICogMik7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNl
bGwpLT5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygpOwor
fQorCitib29sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1i
bHlNZW1vcnkqIG1lbW9yeSkKK3sKKyAgICBpZiAobW9kZSgpID09IFdhc206Ok1lbW9yeTo6U2ln
bmFsaW5nKQorICAgICAgICByZXR1cm4gbWVtb3J5LT5tZW1vcnkoKS5tb2RlKCkgPT0gbW9kZSgp
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9jYWxsZWVDb3VudCAqIDI7IGkrKykK
KyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+Y2FsbGVlcygpW2ldKTsKKworICAg
IHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmdGhpc09iamVjdC0+bV91bmNvbmRp
dGlvbmFsRmluYWxpemVyKTsKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpVbmNv
bmRpdGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCit7CisgICAgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jayogdGhpc09iamVjdCA9IGJpdHdpc2VfY2FzdDxKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrKj4oCisgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpF
Q1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaywgbV91bmNvbmRpdGlvbmFsRmluYWxp
emVyKSk7CisgICAgZm9yIChhdXRvIGl0ZXIgPSB0aGlzT2JqZWN0LT5tX2NhbGxMaW5rSW5mb3Mu
YmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPnZpc2l0V2VhaygqdGhp
c09iamVjdC0+dm0oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXggZmJjMWNlYmZiOWNiOGE1OWM5ZWFl
NmU2ZGQ5OWZjNTU1ZjViMTNjYy4uMTI4MDI1ZTVjMDRmODljOTZmYWYzNTZhZjUxNDE2OGMxMzQw
ZjgyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDYgKzM4LDE4IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Cit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCit7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIC8vIFdlIGNyZWF0ZSBzdHViIG1lbW9yaWVz
IGV2ZW4gZm9yIG1vZHVsZXMgdGhhdCBzaG91bGQgZXZlbnR1YWxseSBnZXQgYSBtZW1vcnkgc28g
d2Ugd2FudCB0byBhdm9pZCByZWNvbXBsaW5nIHRoZXJlLgorICAgIGlmIChtZW1vcnktPm1lbW9y
eSgpKSB7CisgICAgICAgIGF1dG8gY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPm1vZHVsZSgpLT5j
b2RlQmxvY2sodm0sIGV4ZWMsIG1lbW9yeSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsKTsKKyAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwor
ICAgIH0KKyAgICBtX21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7Cit9CisKIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU01vZHVsZU5h
bWVzcGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KQogewogICAgIC8vIEZJWE1FOiBU
aGVzZSBvYmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBP
T00gaGVyZS4KQEAgLTY3LDcgKzc5LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIG1f
Z2xvYmFscyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUpOwog
ICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsK
IAotICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKKyAgICBtX2NvZGVCbG9jay5z
ZXQodm0sIHRoaXMsIG1vZHVsZS0+Y29kZUJsb2NrKCkpOwogICAgIG1fbW9kdWxlTmFtZXNwYWNl
T2JqZWN0LnNldCh2bSwgdGhpcywgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICBwdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZXhwb3J0cyIpLCBtb2R1bGVOYW1l
c3BhY2VPYmplY3QsIE5vbmUpOwogfQpAQCAtODMsNyArOTUsNyBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
IAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGUpOworICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fY29kZUJsb2NrKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X21vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9tZW1vcnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaAppbmRleCA5OWEyYzkwZjdlYTM1M2UzNmI2NTVhYmU1Y2RkNWM0OTgzYzUzYTE4Li44OTIz
ZTE2NTBiZjMxNjVkYTk5MThlZjY5YzVjNTk2ZDI4MWQxYjY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApAQCAtMjks
NiArMjksNyBAQAogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxl
LmgiCiAKQEAgLTQ3LDEwICs0OCwxNiBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAK
LSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKQorICAgIEpTV2ViQXNzZW1ibHlNb2R1
bGUqIG1vZHVsZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9tb2R1bGUpOwotICAg
ICAgICByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jayk7
CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+bW9kdWxlKCk7CisgICAgfQorCisgICAgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsKICAg
ICB9CiAKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiogaW1wb3J0RnVuY3Rpb24odW5zaWduZWQg
aWR4KQpAQCAtNzAsNyArNzcsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNXZWJBc3NlbWJs
eU1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkgeyBtX21lbW9yeS5z
ZXQodm0sIHRoaXMsIG1lbW9yeSk7IH0KKyAgICAvLyBDYWxsaW5nIHRoaXMgbWlnaHQgdHJpZ2dl
ciBhIHJlY29tcGlsZS4KKyAgICB2b2lkIHNldE1lbW9yeShWTSYsIEV4ZWNTdGF0ZSosIEpTV2Vi
QXNzZW1ibHlNZW1vcnkqKTsKKyAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbWVtb3J5TW9kZSgpIHsg
cmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KIAogICAgIEpTV2ViQXNzZW1ibHlU
YWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRUYWJs
ZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUpIHsgbV90YWJsZS5zZXQodm0sIHRo
aXMsIHRhYmxlKTsgfQpAQCAtMTA0LDcgKzExMyw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOwor
ICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAg
ICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNl
T2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5PiBtX21lbW9yeTsK
ICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRhYmxlPiBtX3RhYmxlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcApp
bmRleCBmNDI1M2I1YmZiODg2Y2VjZDlkNjQ1YjU4NjYxZTEzMzA5ZTIzZTIzLi5iZjUxYjRkMjFh
MTdhMDVlMDIxYzE5M2M1ZDJhMmUwY2NhZDk0MjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcApAQCAtMzcsOSArMzcs
MTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVt
b3J5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkpIH07CiAKLUpTV2ViQXNzZW1i
bHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBXYXNtOjpNZW1vcnkmJiBtZW1vcnkpCitKU1dlYkFzc2VtYmx5TWVtb3J5KiBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UmVmPFdhc206Ok1lbW9yeT4mJiBtZW1vcnkpCiB7Ci0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNX
ZWJBc3NlbWJseU1lbW9yeSh2bSwgc3RydWN0dXJlLCBzdGQ6OmZvcndhcmQ8V2FzbTo6TWVtb3J5
PihtZW1vcnkpKTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZt
LCBzdHJ1Y3R1cmUsIFdURk1vdmUobWVtb3J5KSk7CisgICAgaW5zdGFuY2UtPm1fbWVtb3J5LT5j
aGVjaygpOwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGlu
c3RhbmNlOwogfQpAQCAtNDksMTAgKzUwLDEzIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1l
bW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dl
YkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFdhc206Ok1lbW9yeSYmIG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlNZW1vcnk6OkpT
V2ViQXNzZW1ibHlNZW1vcnkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206
Ok1lbW9yeT4mJiBtZW1vcnkpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX21l
bW9yeShXVEZNb3ZlKG1lbW9yeSkpCiB7CisgICAgQVNTRVJUKG1fbWVtb3J5LT5yZWZDb3VudCgp
ID09IDEpOworICAgIG1fbWVtb3J5QmFzZSA9IG1fbWVtb3J5LT5tZW1vcnkoKTsKKyAgICBtX21l
bW9yeVNpemUgPSBtX21lbW9yeS0+c2l6ZSgpOwogfQogCiBKU0FycmF5QnVmZmVyKiBKU1dlYkFz
c2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQpAQCAtNjAsMTIgKzY0LDEwIEBAIEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1ibHlNZW1vcnk6
OmJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgaWYgKG1f
YnVmZmVyV3JhcHBlcikKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyV3JhcHBlci5nZXQoKTsKIAot
ICAgIGF1dG8gZGVzdHJ1Y3RvciA9IFtdICh2b2lkKikgewotICAgICAgICAvLyBXZSBkb24ndCBu
ZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUgdG8gZGVzdHJveSB0aGUgbWVtb3J5LgotICAgICAgICAv
LyBUaGUgQXJyYXlCdWZmZXIgYmFja2luZyB0aGUgSlNBcnJheUJ1ZmZlciBpcyBvbmx5IG93bmVk
IGJ5IHVzLAotICAgICAgICAvLyBzbyB3ZSBndWFyYW50ZWUgaXRzIGxpZmVjeWNsZS4KLSAgICB9
OwotICAgIG1fYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhtZW1vcnkoKS0+
bWVtb3J5KCksIG1lbW9yeSgpLT5zaXplKCksIFdURk1vdmUoZGVzdHJ1Y3RvcikpOworICAgIC8v
IFdlIGNhbid0IHVzZSBhIHJlZiBoZXJlIHNpbmNlIGl0IGRvZXNuJ3QgaGF2ZSBhIGNvcHkgY29u
c3RydWN0b3IuLi4KKyAgICBSZWY8V2FzbTo6TWVtb3J5PiBwcm90ZWN0ZWRNZW1vcnkgPSBtX21l
bW9yeS5nZXQoKTsKKyAgICBhdXRvIGRlc3RydWN0b3IgPSBbcHJvdGVjdGVkTWVtb3J5ID0gV1RG
TW92ZShwcm90ZWN0ZWRNZW1vcnkpXSAodm9pZCopIHsgfTsKKyAgICBtX2J1ZmZlciA9IEFycmF5
QnVmZmVyOjpjcmVhdGVGcm9tQnl0ZXMobWVtb3J5KCkubWVtb3J5KCksIG1lbW9yeSgpLnNpemUo
KSwgV1RGTW92ZShkZXN0cnVjdG9yKSk7CiAgICAgbV9idWZmZXJXcmFwcGVyLnNldCh2bSwgdGhp
cywgSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPm1fYXJyYXlCdWZmZXJT
dHJ1Y3R1cmUuZ2V0KCksIG1fYnVmZmVyLmdldCgpKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9i
dWZmZXJXcmFwcGVyKTsKICAgICByZXR1cm4gbV9idWZmZXJXcmFwcGVyLmdldCgpOwpAQCAtNzYs
NyArNzgsNyBAQCBXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhFeGVj
U3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHRhLCBib29sCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQgPSBtZW1vcnkoKS0+c2l6ZUluUGFnZXMoKTsK
KyAgICBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0gbWVtb3J5KCkuc2l6ZUluUGFnZXMo
KTsKIAogICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKGRlbHRhKSkgewogICAgICAg
ICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQpAQCAtOTIsMTIgKzk0LDE2IEBA
IFdhc206OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KEV4ZWNTdGF0ZSogZXhl
YywgdWludDMyX3QgZGVsdGEsIGJvb2wKICAgICB9CiAKICAgICBpZiAoZGVsdGEpIHsKLSAgICAg
ICAgYm9vbCBzdWNjZXNzID0gbWVtb3J5KCktPmdyb3cobmV3U2l6ZSk7CisgICAgICAgIGJvb2wg
c3VjY2VzcyA9IG1lbW9yeSgpLmdyb3cobmV3U2l6ZSk7CiAgICAgICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZSA9PSBtZW1vcnkoKS5tZW1vcnkoKSk7
CisgICAgICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplID09IG1lbW9yeSgpLnNpemUoKSk7CiAg
ICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQogICAgICAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5
RXJyb3IoZXhlYykpOwogICAgICAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOwogICAg
ICAgICB9CisgICAgICAgIG1fbWVtb3J5QmFzZSA9IG1lbW9yeSgpLm1lbW9yeSgpOworICAgICAg
ICBtX21lbW9yeVNpemUgPSBtZW1vcnkoKS5zaXplKCk7CiAgICAgfQogCiAgICAgLy8gV2UgbmVl
ZCB0byBjbGVhciBvdXQgdGhlIG9sZCBhcnJheSBidWZmZXIgYmVjYXVzZSBpdCBtaWdodCBub3cg
YmUgcG9pbnRpbmcKQEAgLTExMCw2ICsxMTYsNyBAQCBXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyhFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHRhLCBib29sCiAg
ICAgICAgIG1fYnVmZmVyV3JhcHBlci5jbGVhcigpOwogICAgIH0KIAorICAgIG1lbW9yeSgpLmNo
ZWNrKCk7CiAgICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKIH0KIApAQCAtMTIzLDEzICsxMzAsNiBA
QCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAg
IGF1dG8gbWVtb3J5ID0gc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KGNlbGwpOwog
ICAgIEFTU0VSVChtZW1vcnktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgVk0mIHZtID0g
Km1lbW9yeS0+dm0oKTsKLQotICAgIGlmIChtZW1vcnktPm1fYnVmZmVyKSB7Ci0gICAgICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgZHVtbXlDb250ZW50czsKLSAgICAgICAgbWVtb3J5LT5tX2J1ZmZl
ci0+dHJhbnNmZXJUbyh2bSwgZHVtbXlDb250ZW50cyk7Ci0gICAgICAgIG1lbW9yeS0+bV9idWZm
ZXIgPSBudWxscHRyOwotICAgIH0KIAogICAgIG1lbW9yeS0+SlNXZWJBc3NlbWJseU1lbW9yeTo6
fkpTV2ViQXNzZW1ibHlNZW1vcnkoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAppbmRleCBmZmYxNDE1NzAyY2ZlYWQ2Y2U5
MjIxNDkwMmRkYjhjNmI0NGQyNjgwLi4wZWIxODhkNjBkNWUzMjAxYWY2NWM4Y2Y5ZDJmODg1Njk5
YzhhN2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1lbW9yeS5oCkBAIC00MSwyNSArNDEsMjcgQEAgY2xhc3MgSlNXZWJBc3NlbWJseU1l
bW9yeSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlN
ZW1vcnkqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdhc206Ok1lbW9yeSYmKTsKKyAgICBzdGF0
aWMgSlNXZWJBc3NlbWJseU1lbW9yeSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206
Ok1lbW9yeT4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIFdh
c206Ok1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gJm1fbWVtb3J5OyB9CisgICAgV2FzbTo6TWVt
b3J5JiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQogICAgIEpTQXJyYXlCdWZm
ZXIqIGJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgV2FzbTo6UGFnZUNvdW50
IGdyb3coRXhlY1N0YXRlKiwgdWludDMyX3QgZGVsdGEsIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRp
b25zT25GYWlsdXJlKTsKIAotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1vcnkpICsg
V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9y
eSwgbV9tZW1vcnkpICsgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1vcnlCYXNlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1v
cnksIG1fbWVtb3J5U2l6ZSk7IH0KIAotcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlNZW1v
cnkoVk0mLCBTdHJ1Y3R1cmUqLCBXYXNtOjpNZW1vcnkmJik7Citwcml2YXRlOgorICAgIEpTV2Vi
QXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TWVtb3J5PiYmKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKLSAgICBXYXNtOjpNZW1vcnkgbV9tZW1vcnk7CisgICAgdm9pZCogbV9tZW1vcnlCYXNl
OworICAgIHNpemVfdCBtX21lbW9yeVNpemU7CisgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1v
cnk7CiAgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKICAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1fYnVmZmVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKaW5kZXggMDhmYTU4
NDYyOGYwN2QyZDhjOGMzYjJiNzhkMTE1ODBjNGYyODE3Ni4uNTZmMjBiNDM1MDY5ZjNmYjVmMGI2
OTEyMmMzNzI5ODFhMGM1ZjUzOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTMwLDE4ICszMCw0NiBAQAogCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNp
bmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUg
Ildhc21QbGFuLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNfaW5mbyA9IHsg
IldlYkFzc2VtYmx5Lk1vZHVsZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNXZWJBc3NlbWJseU1vZHVsZSkgfTsKIAotSlNXZWJBc3NlbWJseU1vZHVsZSog
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mJiBtb2R1bGVJbmZvcm1h
dGlvbiwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2Fz
bUV4aXRTdHVicz4mJiB3YXNtRXhpdFN0dWJzLCBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFi
bGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KQorSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJB
c3NlbWJseU1vZHVsZTo6YnVpbGRDb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFdh
c206OlBsYW4mIHBsYW4sIHN0ZDo6b3B0aW9uYWw8V2FzbTo6TWVtb3J5OjpNb2RlPiBtb2RlKQog
ewotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJB
c3NlbWJseU1vZHVsZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQpKSkgSlNX
ZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBzdGQ6OmZvcndhcmQ8c3RkOjp1bmlxdWVf
cHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPj4obW9kdWxlSW5mb3JtYXRpb24pLCBzdGQ6OmZv
cndhcmQ8QmFnPENhbGxMaW5rSW5mbz4+KGNhbGxMaW5rSW5mb3MpLCBzdGQ6OmZvcndhcmQ8VmVj
dG9yPFdhc206Oldhc21FeGl0U3R1YnM+Pih3YXNtRXhpdFN0dWJzKSwgY2FsbGVlQ291bnQpOwot
ICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgZXhwb3J0U3ltYm9sVGFibGUpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAvLyBPbiBmYWlsdXJl
LCBhIG5ldyBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IgaXMgdGhyb3duLgorICAgIHBsYW4ucnVu
KG1vZGUpOworICAgIGlmIChwbGFuLmZhaWxlZCgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKGV4ZWMsIHZtLCBw
bGFuLmVycm9yTWVzc2FnZSgpKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICBpZiAobW9kZSkKKyAgICAgICAgQVNTRVJUKCptb2RlID09IHBsYW4ubW9kZSgpKTsKKworICAg
IHVuc2lnbmVkIGNhbGxlZUNvdW50ID0gcGxhbi5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKTsKKyAg
ICBhdXRvKiBjb2RlQmxvY2sgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUodm0sIHRo
aXMsIHBsYW4udGFrZUNhbGxMaW5rSW5mb3MoKSwgcGxhbi50YWtlV2FzbUV4aXRTdHVicygpLCBw
bGFuLm1vZGUoKSwgY2FsbGVlQ291bnQpOworCisgICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhl
eGVjLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwKKyAgICAgICAgWyZdICh1bnNpZ25lZCBj
YWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICAgICAgY29k
ZUJsb2NrLT5zZXRKU0VudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCBqc0VudHJ5cG9p
bnRDYWxsZWUpOworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXRXYXNtRW50cnlwb2ludENhbGxl
ZSh2bSwgY2FsbGVlSW5kZXgsIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgfSk7Cisg
ICAgcmV0dXJuIGNvZGVCbG9jazsKK30KKworSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJBc3Nl
bWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpCit7CisgICAgYXV0byog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxl
Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlKTsKKworICAgIGlu
c3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgZXhlYywgc291cmNlLCBieXRlU2l6ZSk7CiAgICAg
cmV0dXJuIGluc3RhbmNlOwogfQogCkBAIC01MCwyMSArNzgsNjEgQEAgU3RydWN0dXJlKiBKU1dl
YkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiB9CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0
aW9uPiYmIG1vZHVsZUluZm9ybWF0aW9uLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5m
b3MsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmIHdhc21FeGl0U3R1YnMsIHVuc2lnbmVk
IGNhbGxlZUNvdW50KQorSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQot
ICAgICwgbV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uKSkKLSAg
ICAsIG1fY2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5rSW5mb3MpKQotICAgICwgbV93YXNt
RXhpdFN0dWJzKFdURk1vdmUod2FzbUV4aXRTdHVicykpCi0gICAgLCBtX2NhbGxlZUNvdW50KGNh
bGxlZUNvdW50KQogewotICAgIG1lbXNldChjYWxsZWVzKCksIDAsIG1fY2FsbGVlQ291bnQgKiBz
aXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIDIpOwogfQogCi12b2lk
IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU3ltYm9sVGFibGUq
IGV4cG9ydFN5bWJvbFRhYmxlKQorSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJs
eU1vZHVsZTo6Y29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5
TWVtb3J5KiBtZW1vcnkpCit7CisgICAgV2FzbTo6TWVtb3J5OjpNb2RlIG1vZGUgPSBtZW1vcnkt
Pm1lbW9yeSgpLm1vZGUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXYXNtOjpN
ZW1vcnk6Ok51bWJlck9mTW9kZXM7ICsraSkgeworICAgICAgICBpZiAobV9jb2RlQmxvY2tzW2ld
ICYmIG1fY29kZUJsb2Nrc1tpXS0+aXNTYWZlVG9SdW4obWVtb3J5KSkKKyAgICAgICAgICAgIHJl
dHVybiBtX2NvZGVCbG9ja3NbaV0uZ2V0KCk7CisgICAgfQorCisgICAgQVNTRVJUKCFtX2NvZGVC
bG9ja3NbbW9kZV0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAvLyBXZSBkb24ndCBoYXZlIGEgY29kZSBibG9jayBmb3IgdGhpcyBtb2RlLCB3ZSBuZWVk
IHRvIHJlY29tcGlsZS4uLgorICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihtX3NvdXJjZUJ1ZmZlci0+ZGF0YSgpKSwgbV9zb3VyY2VCdWZmZXItPmJ5dGVMZW5n
dGgoKSk7CisKKyAgICBhdXRvKiBjb2RlQmxvY2sgPSBidWlsZENvZGVCbG9jayh2bSwgZXhlYywg
cGxhbiwgbW9kZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisK
KyAgICBBU1NFUlQocGxhbi5leHBvcnRzKCkuc2l6ZSgpID09IG1fZXhwb3J0U3ltYm9sVGFibGUt
PnNpemUoKSk7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBleHAgOiBwbGFuLmV4cG9ydHMoKSkKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZXhwLCBt
X2V4cG9ydFN5bWJvbFRhYmxlLT5jb250YWlucyhleHAuZmllbGQuaW1wbCgpKSk7CisgICAgfQor
CisgICAgQVNTRVJUKG1vZGUgPT0gY29kZUJsb2NrLT5tb2RlKCkpOworICAgIG1fY29kZUJsb2Nr
c1ttb2RlXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAgcmV0dXJuIGNvZGVCbG9jazsK
K30KKwordm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpCiB7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgV2Fz
bTo6UGxhbiBwbGFuKCZ2bSwgc291cmNlLCBieXRlU2l6ZSk7CisKKyAgICBhdXRvKiBjb2RlQmxv
Y2sgPSBidWlsZENvZGVCbG9jayh2bSwgZXhlYywgcGxhbik7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwpOworCisgICAgLy8gT24gc3VjY2VzcywgYSBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIFtbTW9kdWxlXV0gc2V0IHRvIHRoZSB2YWxpZGF0
ZWQgQXN0Lm1vZHVsZS4KKyAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUgPSBTeW1i
b2xUYWJsZTo6Y3JlYXRlKHZtKTsKKyAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygp
KSB7CisgICAgICAgIGF1dG8gb2Zmc2V0ID0gZXhwb3J0U3ltYm9sVGFibGUtPnRha2VOZXh0U2Nv
cGVPZmZzZXQoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUt
PnNldChOb0xvY2tpbmdOZWNlc3NhcnksIGV4cC5maWVsZC5pbXBsKCksIFN5bWJvbFRhYmxlRW50
cnkoVmFyT2Zmc2V0KG9mZnNldCkpKTsKKyAgICB9CisKKyAgICBtX3NvdXJjZUJ1ZmZlciA9IEFy
cmF5QnVmZmVyOjpjcmVhdGUoc291cmNlLCBieXRlU2l6ZSk7CisgICAgbV9tb2R1bGVJbmZvcm1h
dGlvbiA9IHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgbV9leHBvcnRTeW1ib2xU
YWJsZS5zZXQodm0sIHRoaXMsIGV4cG9ydFN5bWJvbFRhYmxlKTsKKyAgICBtX2NvZGVCbG9ja3Nb
Y29kZUJsb2NrLT5tb2RlKCldLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKIH0KIAogdm9pZCBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTc5LDE4ICsxNDcs
OCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRT
eW1ib2xUYWJsZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1f
Y2FsbGVlQ291bnQgKiAyOyBpKyspCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
PmNhbGxlZXMoKVtpXSk7Ci0KLSAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIo
JnRoaXNPYmplY3QtPm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7Ci19Ci0KLXZvaWQgSlNXZWJB
c3NlbWJseU1vZHVsZTo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKQotewotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIHRoaXNPYmplY3QgPSBiaXR3aXNl
X2Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KAotICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+
KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNb2R1bGUsIG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcikpOwotICAgIGZvciAoYXV0byBpdGVyID0gdGhpc09iamVjdC0+bV9jYWxs
TGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT52aXNp
dFdlYWsoKnRoaXNPYmplY3QtPnZtKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBX
YXNtOjpNZW1vcnk6Ok51bWJlck9mTW9kZXM7ICsraSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmgKaW5kZXggN2UwNTFmNTcyMjQyNDY4YTY2NDE5MDMxYTg4OTVjNjEzNmUzMDg3Ni4uNzA0MDY4
YzY1ZGUxM2ViYjJiNmE4OGQ1OWJlNTZlNThlNmJiM2IwOCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAj
aW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAgLTM3LDg1ICsz
Nyw0NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdhc20geworY2xhc3MgUGxh
bjsKK30KKwogY2xhc3MgU3ltYm9sVGFibGU7CitjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5Owog
CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAg
ICBzdGF0aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgc3Rk
Ojp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYmLCBCYWc8Q2FsbExpbmtJbmZv
PiYmLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiwgU3ltYm9sVGFibGUqLCB1bnNpZ25l
ZCk7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSosIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKTsKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5m
b3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gKm1fbW9kdWxlSW5m
b3JtYXRpb24uZ2V0KCk7IH0KKyAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiB0YWtlUmVzZXJ2ZWRN
ZW1vcnkoKSB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkudGFrZVJlc2VydmVk
TWVtb3J5KCk7IH0KICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdCB7
IHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOyB9CiAgICAgV2FzbTo6U2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX21vZHVsZUluZm9y
bWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRl
eFNwYWNlKTsKICAgICB9Ci0gICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IH0KLQotICAgIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIGpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQg
ZnVuY3Rpb25JbmRleFNwYWNlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rp
b25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7Ci0gICAgICAgIHVuc2lnbmVk
IGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwot
ICAgICAgICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQotICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7
Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVu
Y3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8
IG1fY2FsbGVlQ291bnQpOwotICAgICAgICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4ICsg
bV9jYWxsZWVDb3VudF0uZ2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRKU0VudHJ5cG9pbnRD
YWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSog
Y2FsbGVlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2Nh
bGxlZUNvdW50KTsKLSAgICAgICAgY2FsbGVlcygpW2NhbGxlZUluZGV4XS5zZXQodm0sIHRoaXMs
IGNhbGxlZSk7Ci0gICAgfQogCi0gICAgdm9pZCBzZXRXYXNtRW50cnlwb2ludENhbGxlZShWTSYg
dm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUpCi0g
ICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQp
OwotICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5zZXQodm0s
IHRoaXMsIGNhbGxlZSk7Ci0gICAgfQorICAgIC8vIFJldHVybnMgdGhlIGNvZGUgYmxvY2sgdGhh
dCB0aGlzIG1vZHVsZSB3YXMgb3JpZ2luYWxseSBjb21waWxlZCBleHBlY3RpbmcgdG8gdXNlLiBU
aGlzIHdvbid0IG5lZWQgdG8gcmVjb21waWxlLgorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1ttX21vZHVsZUluZm9ybWF0aW9uLT5t
ZW1vcnkubW9kZSgpXS5nZXQoKTsgfQorICAgIC8vIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNv
ZGUgYmxvY2sgZm9yIHRoZSBnaXZlbiBtZW1vcnksIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSByZWNv
bXBpbGUuCisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFZNJiwgRXhlY1N0
YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9yeSopOwogCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSArIG9mZnNldE9mQ2FsbGVlcygpKTsKLSAgICB9Citwcml2YXRlOgorICAgIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGJ1aWxkQ29kZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiwgV2FzbTo6
UGxhbiYsIHN0ZDo6b3B0aW9uYWw8V2FzbTo6TWVtb3J5OjpNb2RlPiBtb2RlID0gc3RkOjpudWxs
b3B0KTsKIAotcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1
cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiYsIEJhZzxDYWxs
TGlua0luZm8+JiYsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmLCB1bnNpZ25lZCBjYWxs
ZWVDb3VudCk7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFN5bWJvbFRhYmxlKik7Cisg
ICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBFeGVjU3RhdGUqLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6
ZSk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLXByaXZhdGU6Ci0gICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZkNhbGxlZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxs
ZWU+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlNb2R1bGUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
c2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2lnbmVkIG51bUNhbGxlZXMpCi0gICAgewotICAgICAg
ICByZXR1cm4gb2Zmc2V0T2ZDYWxsZWVzKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlDYWxsZWU+KSAqIG51bUNhbGxlZXMgKiAyOwotICAgIH0KLQotICAgIGNsYXNzIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsg
Ci0gICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKLSAgICB9
OwotCi0gICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7
CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX3NvdXJjZUJ1ZmZlcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247Ci0gICAg
QmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgIFdyaXRlQmFycmllcjxTeW1i
b2xUYWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKLSAgICBWZWN0b3I8V2FzbTo6V2FzbUV4aXRT
dHVicz4gbV93YXNtRXhpdFN0dWJzOwotICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CisgICAg
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpN
ZW1vcnk6Ok51bWJlck9mTW9kZXNdOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
CmluZGV4IDVhZTgxN2Y0ZmFiNDkyOTRhNTYzNjNiMDVjMjAxMTkxMWIzYmNhM2UuLjA0ZWQ2NjYw
ZWUxZWQzNzMxZGRlY2VkZWM5OTQwZDMxMDMwZjkxZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC01Niw2ICs1
Niw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJs
eUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKICAgICBjb25zdCBX
YXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7CiAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbWVt
b3J5IHdlIHRoaW5rIHdlIGFyZSBnb2luZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBvbmUgd2Ug
ZXhwZWN0LgorICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmNvZGVCbG9jaygp
LT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPm1lbW9yeSgpKSk7CiAgICAg
ewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgZGlzYWxsb3dlZCBJNjQgdXNlLgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCA3NjNkYzQ5NGNlNWE0NzgyZDZlNjg0
N2Y4MjI1NjYxYjM1YmRhN2FiLi5kMjk5NzlkNTgzMzljNTAxZGJiY2RiZjQ2ZmVjNDY3ZjU4OWQy
OTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTg0LDExICs4NCw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGluc3RhbmNlU3RydWN0
dXJlLCBqc01vZHVsZSwgbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1lc3BhY2UoZXhlYykpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgewotICAgICAgICAvLyBBbHdheXMgc3RhcnQgd2l0aCBhIGR1bW15IE1lbW9yeSwgc28gdGhh
dCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5
IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgotICAgICAgICBXYXNtOjpNZW1v
cnkgbWVtb3J5OwotICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBKU1dlYkFzc2VtYmx5
TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1i
bHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7Ci0gICAgfQorCiAKICAgICAv
LyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3Rz
IG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVj
dHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4KICAgICAvLyBM
ZXQgaW1wb3J0cyBiZSBhbiBpbml0aWFsbHktZW1wdHkgbGlzdCBvZiBleHRlcm5hbCB2YWx1ZXMu
CkBAIC0xNzgsMTIgKzE3NCwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBleAogICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnki
KSkpKTsKIAogICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkSW5pdGlhbCA9IG1v
ZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCk7Ci0gICAgICAgICAgICBXYXNtOjpQYWdl
Q291bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCktPmluaXRpYWwoKTsKKyAgICAg
ICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxJbml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS5p
bml0aWFsKCk7CiAgICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlh
bCkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBp
cyB0b28gc21hbGwiKSkpKTsKIAogICAgICAgICAgICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBl
Y3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKSB7Ci0gICAg
ICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9y
eSgpLT5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1h
eGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLm1heGltdW0oKTsKICAgICAgICAgICAgICAgICBpZiAo
IWFjdHVhbE1heGltdW0pIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJh
bCgiTWVtb3J5IGltcG9ydCBkaWQgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUg
cmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKSk7CkBAIC0xOTQsOSArMTkwLDExIEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZShFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBB
U0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUg
bW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCiAg
ICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5XV0gdG8gaW1wb3J0cy4KLSAgICAg
ICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIG1lbW9yeSk7CisgICAgICAgICAgICBpbnN0
YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBtZW1vcnkpOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6
IHsKQEAgLTIzNSwxMiArMjMzLDE3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAg
IGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgewogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9y
dCgpKTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1v
cnkgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIGJvb2wgZmFpbGVkOwotICAgICAgICAgICAgV2Fz
bTo6TWVtb3J5IG1lbW9yeShtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1
bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpLCBmYWlsZWQpOwotICAgICAgICAgICAgaWYg
KGZhaWxlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsK
LSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sCi0gICAgICAgICAgICAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CisgICAgICAg
ICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnk7CisgICAgICAgICAgICBpZiAobW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5Lmhhc1Jlc2VydmVkTWVtb3J5KCkpCisgICAgICAgICAgICAgICAg
bWVtb3J5ID0ganNNb2R1bGUtPnRha2VSZXNlcnZlZE1lbW9yeSgpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1v
ZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eS5tYXhpbXVtKCkpOworICAgICAgICAgICAgICAgIGlmICghbWVtb3J5KQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIGV4ZWMsCisgICAgICAgICAgICAgICAg
SlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgp
KSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNjMsNiArMjY2LDExIEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0
YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIWluc3RhbmNl
LT5tZW1vcnkoKSkgeworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGR1bW15IG1lbW9y
eSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBhIG51bGxw
dHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgorICAgICAgICBp
bnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUo
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSwgYWRvcHRSZWYoKihuZXcgV2FzbTo6TWVtb3J5KCkpKSkpOworICAgIH0KKwogICAgIC8v
IEdsb2JhbHMKICAgICB7CiAgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IG1vZHVs
ZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9y
LmNwcAppbmRleCA2Yzg4N2FmNTk3YTg2NTMyOWNmYjQzZjVlZGI0N2I0MWU2NjA5ZWM4Li41MTEy
OWUzMTAxMmYwYzFiNTQyYWM5MWU4OTk0ZTQyOWQ1NzVlOGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0
cnVjdG9yLmNwcApAQCAtOTYsMTIgKzk2LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBleGVjCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIGZhaWxlZDsKLSAgICBXYXNtOjpNZW1vcnkgbWVt
b3J5KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGZhaWxlZCk7Ci0gICAgaWYg
KGZhaWxlZCkKKyAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6
OmNyZWF0ZSh2bSwgaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCk7CisgICAgaWYg
KCFtZW1vcnkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwg
V1RGTW92ZShtZW1vcnkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKm1lbW9yeS5sZWFrUmVmKCkpKSk7CiB9
CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5
TWVtb3J5KEV4ZWNTdGF0ZSogc3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCmluZGV4
IDgxMjk1OTIzYzdhZGNhMmRlNjBiZWNjMTkzZmFjZTk4MmY0NWZkMjIuLjk3M2JhNzUyOTVmYWQy
Y2QxMzM4ODk1Nzk1MDkzMTNlNTdlMjMzMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3Bw
CkBAIC04MCwzMSArODAsOCBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6
OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlLCBTdHJ1Y3R1cmUqCiAgICAgdWludDhfdCog
YmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
Ynl0ZU9mZnNldCwgYnl0ZVNpemUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKLSAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNp
emUpOwotICAgIC8vIE9uIGZhaWx1cmUsIGEgbmV3IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciBp
cyB0aHJvd24uCi0gICAgcGxhbi5ydW4oKTsKLSAgICBpZiAocGxhbi5mYWlsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJs
eUNvbXBpbGVFcnJvcihzdGF0ZSwgdm0sIHBsYW4uZXJyb3JNZXNzYWdlKCkpKTsKLQotICAgIC8v
IE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0dXJuZWQg
d2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUgdmFsaWRhdGVkIEFzdC5tb2R1bGUuCi0KLSAgICAv
LyBUaGUgZXhwb3J0IHN5bWJvbCB0YWJsZSBpcyB0aGUgc2FtZSBmb3IgYWxsIEluc3RhbmNlcyBv
ZiBhIE1vZHVsZS4KLSAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUgPSBTeW1ib2xU
YWJsZTo6Y3JlYXRlKHZtKTsKLSAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygpKSB7
Ci0gICAgICAgIGF1dG8gb2Zmc2V0ID0gZXhwb3J0U3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVP
ZmZzZXQoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKLSAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNl
dChOb0xvY2tpbmdOZWNlc3NhcnksIGV4cC5maWVsZC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnko
VmFyT2Zmc2V0KG9mZnNldCkpKTsKLSAgICB9Ci0KLSAgICAvLyBPbmx5IHdhc20taW50ZXJuYWwg
ZnVuY3Rpb25zIGhhdmUgYSBjYWxsZWUsIHN0dWJzIHRvIEpTIGRvIG5vdC4KLSAgICB1bnNpZ25l
ZCBjYWxsZWVDb3VudCA9IHBsYW4uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCk7Ci0gICAgSlNXZWJB
c3NlbWJseU1vZHVsZSogcmVzdWx0ID0gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZtLCBz
dHJ1Y3R1cmUsIHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCksIHBsYW4udGFrZUNhbGxMaW5r
SW5mb3MoKSwgcGxhbi50YWtlV2FzbUV4aXRTdHVicygpLCBleHBvcnRTeW1ib2xUYWJsZSwgY2Fs
bGVlQ291bnQpOwotICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoc3RhdGUtPmpzQ2FsbGVlKCkt
Pmdsb2JhbE9iamVjdCgpLCAKLSAgICAgICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNX
ZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiB3YXNtRW50cnlwb2ludENhbGxlZSkgewotICAgICAgICAgICAgcmVzdWx0LT5zZXRKU0VudHJ5
cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUpOwotICAgICAg
ICAgICAgcmVzdWx0LT5zZXRXYXNtRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIHdh
c21FbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgfSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3Jl
YXRlKHZtLCBzdGF0ZSwgc3RydWN0dXJlLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwog
fQogCiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlN
b2R1bGVQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggZjE3
ZjI5ZGY5ODUwYzNjOGY0NjRhMmZlMTYwNmY3NGRhY2UwMDIzYS4uNjIzMmMyNDFjZTQyZGNmNDM3
NTgwYTc3NGE3MTliODcxMDRjYjE2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtOTIsMTAgKzky
LDExIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0g
c3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IG1vZHVsZSA9IGluc3RhbmNlLT5tb2R1bGUoKTsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBpbnN0YW5jZS0+Y29kZUJsb2NrKCk7CiAgICAgY29uc3QgV2FzbTo6TW9k
dWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpOwogCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gbW9kdWxlLT5l
eHBvcnRTeW1ib2xUYWJsZSgpOwotICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQgPSBt
b2R1bGUtPmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKKyAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9y
dENvdW50ID0gY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CiAKICAgICAvLyBGSVhN
RSB3aXJlIHVwIHRoZSBpbXBvcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY1MTE4CiAKQEAgLTExNiw4ICsxMTcsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogc3RhdGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5z
dAogICAgICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9u
IEV4b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCiAgICAgICAgICAgICAvLyAgICAgYi4gQXBw
ZW5kIGZ1bmMgdG8gZnVuY3MuCiAgICAgICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCi0g
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1
bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRl
eCk7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxl
ZSA9IG1vZHVsZS0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4
cC5raW5kSW5kZXgpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBv
aW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGV4cC5raW5kSW5kZXgpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSog
d2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgIFdhc206OlNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21G
dW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICBjb25zdCBXYXNt
OjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
JnZtLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
dW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwg
anNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgp
OwpAQCAtMTc4LDEyICsxNzksMTIgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlu
ayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3QKICAgICAgICAg
Ly8gVGhlIHN0YXJ0IGZ1bmN0aW9uIG11c3Qgbm90IHRha2UgYW55IGFyZ3VtZW50cyBvciByZXR1
cm4gYW55dGhpbmcuIFRoaXMgaXMgZW5mb3JjZWQgYnkgdGhlIHBhcnNlci4KICAgICAgICAgQVNT
RVJUKCFzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgICAgIEFTU0VSVChzaWduYXR1
cmUtPnJldHVyblR5cGUoKSA9PSBXYXNtOjpWb2lkKTsKLSAgICAgICAgaWYgKHN0YXJ0RnVuY3Rp
b25JbmRleFNwYWNlIDwgbW9kdWxlLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKKyAgICAgICAg
aWYgKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlIDwgY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENv
dW50KCkpIHsKICAgICAgICAgICAgIEpTQ2VsbCogc3RhcnRGdW5jdGlvbiA9IGluc3RhbmNlLT5p
bXBvcnRGdW5jdGlvbihzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSktPmdldCgpOwogICAgICAgICAg
ICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgc3RhcnRGdW5jdGlvbik7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRD
YWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxl
ZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpz
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4
U3BhY2UpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRD
YWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1
bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgaW5zdGFuY2UsIGpz
RW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsK
ICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAg
ICAgICAgfQpAQCAtMjA3LDYgKzIwOCw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogc3RhdGUpCiAKICAgICB7CiAgICAgICAgIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIG1vZHVsZSA9IG1faW5zdGFuY2UtPm1vZHVsZSgpOworICAgICAgICBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2luc3RhbmNlLT5jb2RlQmxvY2soKTsK
ICAgICAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
ID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwogICAgICAgICBKU1dlYkFzc2VtYmx5VGFi
bGUqIHRhYmxlID0gbV9pbnN0YW5jZS0+dGFibGUoKTsKICAgICAgICAgZm9yIChjb25zdCBXYXNt
OjpFbGVtZW50JiBlbGVtZW50IDogbW9kdWxlSW5mb3JtYXRpb24uZWxlbWVudHMpIHsKQEAgLTIy
OSwxMyArMjMxLDEzIEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRl
KEV4ZWNTdGF0ZSogc3RhdGUpCiAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTUxMAogICAgICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50
LmZ1bmN0aW9uSW5kaWNlc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8
IG1vZHVsZS0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKAogICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dWTVJhbmdlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkVsZW1l
bnQgaXMgc2V0dGluZyB0aGUgdGFibGUgdmFsdWUgd2l0aCBhbiBpbXBvcnQuIFRoaXMgaXMgbm90
IHlldCBpbXBsZW1lbnRlZC4gRklYTUUuIikpKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1
bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRl
eCk7Ci0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRD
YWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBq
c0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICAgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBv
aW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAg
ICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2ln
bmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAg
ICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogU2F5IHdlIGV4cG9ydCBsb2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jaXRv
biBpbmRleCAwLgpAQCAtMjU1LDggKzI1Nyw4IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogc3RhdGUpCiAgICAgICAgIGNvbnN0IFZlY3RvcjxX
YXNtOjpTZWdtZW50OjpQdHI+JiBkYXRhID0gbV9pbnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUlu
Zm9ybWF0aW9uKCkuZGF0YTsKICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSoganNNZW1vcnkg
PSBtX2luc3RhbmNlLT5tZW1vcnkoKTsKICAgICAgICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgdWludDhfdCogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
anNNZW1vcnktPm1lbW9yeSgpLT5tZW1vcnkoKSk7Ci0gICAgICAgICAgICB1aW50NjRfdCBzaXpl
SW5CeXRlcyA9IGpzTWVtb3J5LT5tZW1vcnkoKS0+c2l6ZSgpOworICAgICAgICAgICAgdWludDhf
dCogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oanNNZW1vcnktPm1lbW9yeSgp
Lm1lbW9yeSgpKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHNpemVJbkJ5dGVzID0ganNNZW1vcnkt
Pm1lbW9yeSgpLnNpemUoKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgc2VnbWVudCA6IGRhdGEp
IHsKICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudC0+c2l6ZUluQnl0ZXMpIHsKICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
RGF0YUxvZy5oIGIvU291cmNlL1dURi93dGYvRGF0YUxvZy5oCmluZGV4IDEzZjkxM2JkNWJhZTYw
MjkxZGQ1MzhmN2ZhNTgzODhjODhlZmJjOTAuLjBiMDg0ODhiMjBlNTAzMWMwMDY2OTlhZTYwY2Rl
ZTI0YTBjOTdiZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgKQEAgLTQ4LDEzICs0OCwyOSBAQCB2b2lkIGRhdGFMb2co
Y29uc3QgVHlwZXMmLi4uIHZhbHVlcykKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPgogdm9p
ZCBkYXRhTG9nTG4oY29uc3QgVHlwZXMmLi4uIHZhbHVlcykKIHsKLSAgICBkYXRhRmlsZSgpLnBy
aW50KHZhbHVlcy4uLiwgIlxuIik7CisgICAgZGF0YUxvZyh2YWx1ZXMuLi4sICJcbiIpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KK3ZvaWQgZGF0YUxvZ0lmKGJvb2wgc2hvdWxk
TG9nLCBjb25zdCBUeXBlcyYuLi4gdmFsdWVzKQoreworICAgIGlmIChzaG91bGRMb2cpCisgICAg
ICAgIGRhdGFMb2codmFsdWVzLi4uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+
Cit2b2lkIGRhdGFMb2dMbklmKGJvb2wgc2hvdWxkTG9nLCBjb25zdCBUeXBlcyYuLi4gdmFsdWVz
KQoreworICAgIGlmIChzaG91bGRMb2cpCisgICAgICAgIGRhdGFMb2dMbih2YWx1ZXMuLi4pOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpkYXRhTG9nOwogdXNpbmcgV1RG
OjpkYXRhTG9nTG47Cit1c2luZyBXVEY6OmRhdGFMb2dJZjsKK3VzaW5nIFdURjo6ZGF0YUxvZ0xu
SWY7CiB1c2luZyBXVEY6OmRhdGFMb2dGOwogdXNpbmcgV1RGOjpkYXRhTG9nRlN0cmluZzsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWYuaApp
bmRleCBiM2FjNGZiYzViYTUwOWE1M2MyNDEwZTRiZTI4NDBjNGYwYjk3NTJhLi44MzA5NjRmZWJl
YTY2MWFkNzdkNzY2YzQ4ZDY0MjFkOTkyYzY1MGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9SZWYuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWYuaApAQCAtMTM3LDYgKzEzNyw3IEBAIHB1
YmxpYzoKICAgICBUKiBwdHIoKSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiBtX3B0cjsg
fQogICAgIFQmIGdldCgpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuICptX3B0cjsgfQog
ICAgIG9wZXJhdG9yIFQmKCkgY29uc3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4gKm1fcHRyOyB9
CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiAhKm1f
cHRyOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBSZWY8VD4gcmVwbGFjZShSZWY8VT4m
JikgV0FSTl9VTlVTRURfUkVUVVJOOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>